WordPress.org

Make WordPress Core

Ticket #31661: 31661.4.patch

File 31661.4.patch, 3.6 KB (added by Cheffheid, 6 years ago)

Just the shift+tab stuff.

  • src/wp-includes/js/quicktags.js

     
    169169                        return false;
    170170                }
    171171
     172                if ( canvas.addEventListener ) {
     173                        canvas.addEventListener( 'keydown', function(event) {
     174                                qt.OnTab(event, this);
     175                        }, false );
     176                } else if ( canvas.attachEvent ) {
     177                        canvas.attachEvent( 'onkeydown', function(event) {
     178                                qt.OnTab(event, this);
     179                        } );
     180                }
     181
    172182                t.name = name;
    173183                t.id = id;
    174184                t.canvas = canvas;
     
    502512        qt.TagButton.prototype.callback = function(element, canvas, ed) {
    503513                var t = this, startPos, endPos, cursorPos, scrollTop, v = canvas.value, l, r, i, sel, endTag = v ? t.tagEnd : '';
    504514
    505                 if ( document.selection ) { // IE
    506                         canvas.focus();
    507                         sel = document.selection.createRange();
    508                         if ( sel.text.length > 0 ) {
    509                                 if ( !t.tagEnd ) {
    510                                         sel.text = sel.text + t.tagStart;
    511                                 } else {
    512                                         sel.text = t.tagStart + sel.text + endTag;
    513                                 }
     515                if ( canvas.selectionStart || canvas.selectionStart === 0 ) { // FF, WebKit, Opera, IE9+
     516                        // Check if there has been a keyboard selection
     517                        // reverse tabbing doesn't always make canvas.selectionStart available
     518                        if ( typeof keyboardSelection !== 'undefined' ) {
     519                                startPos = keyboardSelection[0] || canvas.selectionStart;
     520                                endPos = keyboardSelection[1] || canvas.selectionEnd;
     521                                // Reset it right away, no need for it from here 
     522                                keyboardSelection = false;
    514523                        } else {
    515                                 if ( !t.tagEnd ) {
    516                                         sel.text = t.tagStart;
    517                                 } else if ( t.isOpen(ed) === false ) {
    518                                         sel.text = t.tagStart;
    519                                         t.openTag(element, ed);
    520                                 } else {
    521                                         sel.text = endTag;
    522                                         t.closeTag(element, ed);
    523                                 }
     524                                startPos = canvas.selectionStart;
     525                                endPos = canvas.selectionEnd;
    524526                        }
    525                         canvas.focus();
    526                 } else if ( canvas.selectionStart || canvas.selectionStart === 0 ) { // FF, WebKit, Opera
    527                         startPos = canvas.selectionStart;
    528                         endPos = canvas.selectionEnd;
     527
    529528                        cursorPos = endPos;
    530529                        scrollTop = canvas.scrollTop;
    531530                        l = v.substring(0, startPos); // left of the selection
     
    558557                        canvas.selectionEnd = cursorPos;
    559558                        canvas.scrollTop = scrollTop;
    560559                        canvas.focus();
     560                } else if ( document.selection ) { // IE8
     561                        canvas.focus();
     562                        // Check if we already have an IE keyboard selection first.
     563                        sel = keyboardSelection || document.selection.createRange();
     564
     565                        if ( sel.text.length > 0 ) {
     566                                        if ( !t.tagEnd ) {
     567                                                        sel.text = sel.text + t.tagStart;
     568                                        } else {
     569                                                        sel.text = t.tagStart + sel.text + endTag;
     570                                        }
     571                        } else {
     572                                        if ( !t.tagEnd ) {
     573                                                        sel.text = t.tagStart;
     574                                        } else if ( t.isOpen(ed) === false ) {
     575                                                        sel.text = t.tagStart;
     576                                                        t.openTag(element, ed);
     577                                        } else {
     578                                                        sel.text = endTag;
     579                                                        t.closeTag(element, ed);
     580                                        }
     581                        }
     582                        // Reset IE keyboard selection
     583                        keyboardSelection = false; 
     584                        canvas.focus();
    561585                } else { // other browsers?
    562586                        if ( !endTag ) {
    563587                                canvas.value += t.tagStart;
     
    572596                }
    573597        };
    574598
     599        // IE keyboard selection: get and store the selection when reverse tabbing.
     600        qt.OnTab = function( event, canvas ) {
     601                var key;
     602
     603                if ( 'keydown' === event.type ) {
     604                        key = event.keyCode || event.charCode;
     605                        if ( event.shiftKey && 9 === key ) {
     606                                if ( canvas.selectionStart || canvas.selectionStart === 0 ) {
     607                                        keyboardSelection = [canvas.selectionStart, canvas.selectionEnd];
     608                                } else  if ( document.selection ) {
     609                                        keyboardSelection = document.selection.createRange();
     610                                }
     611                        }
     612                }
     613        };
     614
    575615        // removed
    576616        qt.SpellButton = function() {};
    577617