Ticket #31661: 31661.5.patch
File 31661.5.patch, 3.8 KB (added by , 6 years ago) |
---|
-
wp-includes/js/quicktags.js
150 150 zeroise( now.getUTCSeconds() ) + 151 151 '+00:00'; 152 152 })(), 153 qt; 153 qt, 154 keyboardSelection; 154 155 155 156 qt = QTags = function(settings) { 156 157 if ( typeof(settings) === 'string' ) { … … 169 170 return false; 170 171 } 171 172 173 if ( canvas.addEventListener ) { 174 canvas.addEventListener( 'keydown', function(event) { 175 qt.OnTab(event, this); 176 }, false ); 177 } else if ( canvas.attachEvent ) { 178 canvas.attachEvent( 'onkeydown', function(event) { 179 qt.OnTab(event, this); 180 } ); 181 } 182 172 183 t.name = name; 173 184 t.id = id; 174 185 t.canvas = canvas; … … 502 513 qt.TagButton.prototype.callback = function(element, canvas, ed) { 503 514 var t = this, startPos, endPos, cursorPos, scrollTop, v = canvas.value, l, r, i, sel, endTag = v ? t.tagEnd : ''; 504 515 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 } 516 if ( canvas.selectionStart || canvas.selectionStart === 0 ) { // FF, WebKit, Opera, IE9+ 517 // Check if there has been a keyboard selection 518 // reverse tabbing doesn't always make canvas.selectionStart available 519 if ( keyboardSelection ) { 520 startPos = keyboardSelection[0] || canvas.selectionStart; 521 endPos = keyboardSelection[1] || canvas.selectionEnd; 522 // Reset it right away, no need for it from here 523 keyboardSelection = false; 514 524 } 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 } 525 startPos = canvas.selectionStart; 526 endPos = canvas.selectionEnd; 524 527 } 525 canvas.focus(); 526 } else if ( canvas.selectionStart || canvas.selectionStart === 0 ) { // FF, WebKit, Opera 527 startPos = canvas.selectionStart; 528 endPos = canvas.selectionEnd; 528 529 529 cursorPos = endPos; 530 530 scrollTop = canvas.scrollTop; 531 531 l = v.substring(0, startPos); // left of the selection … … 558 558 canvas.selectionEnd = cursorPos; 559 559 canvas.scrollTop = scrollTop; 560 560 canvas.focus(); 561 } else if ( document.selection ) { // IE8 562 canvas.focus(); 563 // Check if we already have an IE keyboard selection first. 564 sel = keyboardSelection || document.selection.createRange(); 565 566 if ( sel.text.length > 0 ) { 567 if ( !t.tagEnd ) { 568 sel.text = sel.text + t.tagStart; 569 } else { 570 sel.text = t.tagStart + sel.text + endTag; 571 } 572 } else { 573 if ( !t.tagEnd ) { 574 sel.text = t.tagStart; 575 } else if ( t.isOpen(ed) === false ) { 576 sel.text = t.tagStart; 577 t.openTag(element, ed); 578 } else { 579 sel.text = endTag; 580 t.closeTag(element, ed); 581 } 582 } 583 // Reset IE keyboard selection 584 keyboardSelection = false; 585 canvas.focus(); 561 586 } else { // other browsers? 562 587 if ( !endTag ) { 563 588 canvas.value += t.tagStart; … … 572 597 } 573 598 }; 574 599 600 // IE keyboard selection: get and store the selection when reverse tabbing. 601 qt.OnTab = function( event, canvas ) { 602 var key; 603 604 if ( 'keydown' === event.type ) { 605 key = event.keyCode || event.charCode; 606 if ( event.shiftKey && 9 === key ) { 607 if ( canvas.selectionStart || canvas.selectionStart === 0 ) { 608 keyboardSelection = [canvas.selectionStart, canvas.selectionEnd]; 609 } else if ( document.selection ) { 610 keyboardSelection = document.selection.createRange(); 611 } 612 } 613 } 614 }; 615 575 616 // removed 576 617 qt.SpellButton = function() {}; 577 618