From a2ad27c03ea88bc732a49a53fe29fd2b3eb57dd1 Mon Sep 17 00:00:00 2001 From: Andrew Ozz Date: Mon, 25 Aug 2014 20:41:16 +0000 Subject: [PATCH] TinyMCE wpView: exclude more non-printable keyCodes in isSpecialKey(), fixes #29115 Built from https://develop.svn.wordpress.org/trunk@29606 git-svn-id: http://core.svn.wordpress.org/trunk@29380 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- .../js/tinymce/plugins/wpview/plugin.js | 6 ++++-- .../js/tinymce/plugins/wpview/plugin.min.js | 2 +- wp-includes/js/tinymce/wp-tinymce.js.gz | Bin 134586 -> 134599 bytes 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/wp-includes/js/tinymce/plugins/wpview/plugin.js b/wp-includes/js/tinymce/plugins/wpview/plugin.js index e0dbafacca..2d390c1480 100644 --- a/wp-includes/js/tinymce/plugins/wpview/plugin.js +++ b/wp-includes/js/tinymce/plugins/wpview/plugin.js @@ -354,11 +354,13 @@ tinymce.PluginManager.add( 'wpview', function( editor ) { }); // Excludes arrow keys, delete, backspace, enter, space bar. + // Ref: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.keyCode function isSpecialKey( key ) { return ( ( key <= 47 && key !== VK.SPACEBAR && key !== VK.ENTER && key !== VK.DELETE && key !== VK.BACKSPACE && ( key < 37 || key > 40 ) ) || - key === 144 || key === 145 || // Num Lock, Scroll Lock + key >= 224 || // OEM or non-printable + ( key >= 144 && key <= 150 ) || // Num Lock, Scroll Lock, OEM ( key >= 91 && key <= 93 ) || // Windows keys - ( key >= 112 && key <= 123 ) ); // F keys + ( key >= 112 && key <= 135 ) ); // F keys } // (De)select views when arrow keys are used to navigate the content of the editor. diff --git a/wp-includes/js/tinymce/plugins/wpview/plugin.min.js b/wp-includes/js/tinymce/plugins/wpview/plugin.min.js index 9aef959cbd..f030d2b985 100644 --- a/wp-includes/js/tinymce/plugins/wpview/plugin.min.js +++ b/wp-includes/js/tinymce/plugins/wpview/plugin.min.js @@ -1 +1 @@ -tinymce.PluginManager.add("wpview",function(a){function b(a){return c(a,"wpview-wrap")}function c(a,b){for(;a&&a.parentNode;){if(a.className&&-1!==(" "+a.className+" ").indexOf(" "+b+" "))return a;a=a.parentNode}return!1}function d(c){return(c=b(c))?window.decodeURIComponent(a.dom.getAttrib(c,"data-wpview-text")||""):""}function e(c,d){return c=b(c),c?(a.dom.setAttrib(c,"data-wpview-text",window.encodeURIComponent(d||"")),!0):!1}function f(a){a.stopPropagation()}function g(b,c){var d=b?"before":"after",e=b?0:1;k(),a.selection.setCursorLocation(a.dom.select(".wpview-selection-"+d,c)[0],e),a.nodeChanged()}function h(b,c,d){var e=a.dom,f=e.create("p");t.ie&&t.ie<11||(f.innerHTML='
'),c?b.parentNode.insertBefore(f,b):e.insertAfter(f,b),k(),c&&d===u.ENTER?g(c,b):a.selection.setCursorLocation(f,0),a.nodeChanged()}function i(b){a.undoManager.transact(function(){h(b),a.dom.remove(b)})}function j(b){var c,e=a.dom;b&&b!==n&&(a.getBody().focus(),k(),n=b,e.setAttrib(b,"data-mce-selected",1),c=e.create("div",{"class":"wpview-clipboard",contenteditable:"true"},d(b)),a.dom.select(".wpview-body",b)[0].appendChild(c),e.bind(c,"beforedeactivate focusin focusout",f),e.bind(n,"beforedeactivate focusin focusout",f),z?a.selection.select(c):a.selection.select(c,!0),a.nodeChanged(),a.fire("wpview-selected",b))}function k(){var b,c=a.dom;n&&(b=a.dom.select(".wpview-clipboard",n)[0],c.unbind(b),c.remove(b),c.unbind(n,"beforedeactivate focusin focusout click mouseup",f),c.setAttrib(n,"data-mce-selected",null)),n=null}function l(a){return a.replace(/]+data-wpview-text=\"([^"]+)"[^>]*>[\s\S]+?wpview-selection-after[^>]+>(?: |\u00a0)*<\/p><\/div>/g,"$1")}function m(a){return 47>=a&&a!==u.SPACEBAR&&a!==u.ENTER&&a!==u.DELETE&&a!==u.BACKSPACE&&(37>a||a>40)||144===a||145===a||a>=91&&93>=a||a>=112&&123>=a}var n,o,p,q,r,s,t=tinymce.Env,u=tinymce.util.VK,v=tinymce.dom.TreeWalker,w=!1,x=!0,y=function(){return!1},z=/iPad|iPod|iPhone/.test(navigator.userAgent);return"undefined"!=typeof wp&&wp.mce?(a.on("BeforeAddUndo",function(a){a.lastLevel&&l(a.level.content)===l(a.lastLevel.content)&&a.preventDefault()}),a.on("BeforeSetContent",function(b){var c;b.content&&(n&&i(n),c=a.selection.getNode(),(!b.content.match(/^\s*(https?:\/\/[^\s"]+)\s*$/i)||"P"===c.nodeName&&c.parentNode===a.getBody()&&a.dom.isEmpty(c))&&(b.content=wp.mce.views.toViews(b.content)))}),a.on("SetContent",function(){wp.mce.views.render()}),a.on("click",function(c){var d,e=c.clientX,f=c.clientY,h=a.getBody(),i=h.getBoundingClientRect(),j=h.firstChild,k=j.getBoundingClientRect(),l=h.lastChild,m=l.getBoundingClientRect();fm.bottom&&(d=b(l))?(g(!1,d),c.preventDefault()):tinymce.each(a.dom.select(".wpview-wrap"),function(a){var b=a.getBoundingClientRect();return f>=b.top&&f<=b.bottom?void(ei.right&&(g(!1,a),c.preventDefault())):void 0})}),a.on("init",function(){var c=!1,d=a.selection;a.on("BeforeSetContent",function(){var c,e,f=b(d.getNode());f&&(!f.nextSibling||b(f.nextSibling)?(e=a.getDoc().createTextNode(""),a.dom.insertAfter(e,f)):(c=new v(f.nextSibling,f.nextSibling),e=c.next()),d.select(e),d.collapse(!0))}),a.dom.bind(a.getDoc(),"touchmove",function(){c=!0}),a.on("mousedown mouseup click touchend",function(d){var e=b(d.target);if(x=!1,e){if(d.stopImmediatePropagation(),d.preventDefault(),!("touchend"!==d.type&&"mousedown"!==d.type||d.metaKey||d.ctrlKey)){if(a.dom.hasClass(d.target,"edit"))return wp.mce.views.edit(e),a.focus(),!1;if(a.dom.hasClass(d.target,"remove"))return i(e),!1}return"touchend"===d.type&&c?c=!1:j(e),!1}("touchend"===d.type||"mousedown"===d.type)&&k(),"touchend"===d.type&&c&&(c=!1)},!0)}),a.on("PreProcess",function(b){tinymce.each(a.dom.select("div[data-wpview-text]",b.node),function(a){a.textContent=a.innerText=" "})}),a.on("PostProcess",function(a){a.content&&(a.content=a.content.replace(/
]*?data-wpview-text="([^"]*)"[^>]*>[\s\S]*?<\/div>/g,function(a,b){return b?"

"+window.decodeURIComponent(b)+"

":""}))}),a.on("keydown",function(c){var d,e,f,l,o,q,r,s=c.keyCode,t=a.dom,v=a.selection;if(n){if((c.metaKey||c.ctrlKey)&&s!==u.BACKSPACE&&86!==s||s>=112&&123>=s)return void((c.metaKey||c.ctrlKey)&&88===s&&(w=n));if(e=b(v.getNode()),e!==n)return void k();s===u.LEFT?(g(!0,e),c.preventDefault()):s===u.UP?(e.previousSibling?b(e.previousSibling)?g(!0,e.previousSibling):(k(),v.select(e.previousSibling,!0),v.collapse()):g(!0,e),c.preventDefault()):s===u.RIGHT?(g(!1,e),c.preventDefault()):s===u.DOWN?(e.nextSibling?b(e.nextSibling)?g(!1,e.nextSibling):(k(),v.setCursorLocation(e.nextSibling,0)):g(!1,e),c.preventDefault()):m(s)||(i(n),(s===u.ENTER||s===u.DELETE||s===u.BACKSPACE)&&c.preventDefault())}else{if(c.metaKey||c.ctrlKey||s>=112&&123>=s)return;if(d=v.getNode(),p=d,e=b(d),v.isCollapsed()||(o=v.getRng(),(e=b(o.endContainer))?(q=o.cloneRange(),v.select(e.previousSibling,!0),v.collapse(),r=v.getRng(),q.setEnd(r.endContainer,r.endOffset),v.setRng(q)):(e=b(o.startContainer))&&(q=o.cloneRange(),q.setStart(e.nextSibling,0),v.setRng(q))),!e)return void(c.keyCode===u.BACKSPACE&&(a.dom.isEmpty(d)?(e=b(d.previousSibling))&&(g(!1,e),a.dom.remove(d),c.preventDefault()):(o=v.getRng())&&0===o.startOffset&&0===o.endOffset&&(e=b(d.previousSibling))&&(g(!1,e),c.preventDefault())));if(!(f=t.hasClass(e,"wpview-selection-before"))&&!(l=t.hasClass(e,"wpview-selection-after")))return;if(m(s))return;l&&s===u.UP||f&&s===u.BACKSPACE?(e.previousSibling?b(e.previousSibling)?g(!1,e.previousSibling):t.isEmpty(e.previousSibling)&&s===u.BACKSPACE?t.remove(e.previousSibling):(v.select(e.previousSibling,!0),v.collapse()):g(!0,e),c.preventDefault()):!l||s!==u.DOWN&&s!==u.RIGHT?!f||s!==u.UP&&s!==u.LEFT?f&&s===u.DOWN?(e.nextSibling?b(e.nextSibling)?g(!0,e.nextSibling):v.setCursorLocation(e.nextSibling,0):g(!1,e),c.preventDefault()):l&&s===u.LEFT||f&&s===u.RIGHT?(j(e),c.preventDefault()):l&&s===u.BACKSPACE?(i(e),c.preventDefault()):l?h(e):f&&h(e,!0,s):(e.previousSibling&&(b(e.previousSibling)?g(s===u.UP,e.previousSibling):(v.select(e.previousSibling,!0),v.collapse())),c.preventDefault()):(e.nextSibling&&(b(e.nextSibling)?g(s===u.RIGHT,e.nextSibling):v.setCursorLocation(e.nextSibling,0)),c.preventDefault()),s===u.ENTER&&c.preventDefault()}}),a.on("keyup",function(){w&&(i(w),w=!1)}),a.on("focus",function(){var c;r=!0,a.dom.addClass(a.getBody(),"has-focus"),x&&(c=b(a.getBody().firstChild))&&g(!0,c),x=!1}),a.on("blur",function(){r=!1,a.dom.removeClass(a.getBody(),"has-focus")}),a.on("NodeChange",function(d){var e=a.dom,f=a.dom.select(".wpview-wrap"),h=d.element.className,i=b(d.element),j=p;if(p=!1,clearInterval(o),tinymce.each(f,function(a){a.className&&(a.className=a.className.replace(/ ?\bwpview-(?:selection-before|selection-after|cursor-hide)\b/g,""))}),r&&i)if("wpview-selection-before"!==h&&"wpview-selection-after"!==h||!a.selection.isCollapsed())c(d.element,"wpview-clipboard")||q||(k(),q++,g(!0,i));else{if(q=0,k(),j===i.previousSibling)return void g(!0,i);if(j===i.nextSibling)return void g(!1,i);e.addClass(i,h),o=setInterval(function(){e.hasClass(i,"wpview-cursor-hide")?e.removeClass(i,"wpview-cursor-hide"):e.addClass(i,"wpview-cursor-hide")},500)}}),a.on("BeforeExecCommand",function(){var c,d=a.selection.getNode();d&&("wpview-selection-before"===d.className||"wpview-selection-after"===d.className)&&(c=b(d))&&(h(c),s=c)}),a.on("ExecCommand",function(){var b,c;n&&(b=n,k(),j(b)),s&&(c=s.nextSibling,c&&"P"===c.nodeName&&a.dom.isEmpty(c)&&(a.dom.remove(c),g(!1,s)),s=!1)}),a.on("ResolveName",function(c){a.dom.hasClass(c.target,"wpview-wrap")?(c.name=a.dom.getAttrib(c.target,"data-wpview-type")||"wpview",c.stopPropagation()):b(c.target)&&(c.preventDefault(),c.stopPropagation())}),{getViewText:d,setViewText:e,getView:b}):{getViewText:y,setViewText:y,getView:y}}); \ No newline at end of file +tinymce.PluginManager.add("wpview",function(a){function b(a){return c(a,"wpview-wrap")}function c(a,b){for(;a&&a.parentNode;){if(a.className&&-1!==(" "+a.className+" ").indexOf(" "+b+" "))return a;a=a.parentNode}return!1}function d(c){return(c=b(c))?window.decodeURIComponent(a.dom.getAttrib(c,"data-wpview-text")||""):""}function e(c,d){return c=b(c),c?(a.dom.setAttrib(c,"data-wpview-text",window.encodeURIComponent(d||"")),!0):!1}function f(a){a.stopPropagation()}function g(b,c){var d=b?"before":"after",e=b?0:1;k(),a.selection.setCursorLocation(a.dom.select(".wpview-selection-"+d,c)[0],e),a.nodeChanged()}function h(b,c,d){var e=a.dom,f=e.create("p");t.ie&&t.ie<11||(f.innerHTML='
'),c?b.parentNode.insertBefore(f,b):e.insertAfter(f,b),k(),c&&d===u.ENTER?g(c,b):a.selection.setCursorLocation(f,0),a.nodeChanged()}function i(b){a.undoManager.transact(function(){h(b),a.dom.remove(b)})}function j(b){var c,e=a.dom;b&&b!==n&&(a.getBody().focus(),k(),n=b,e.setAttrib(b,"data-mce-selected",1),c=e.create("div",{"class":"wpview-clipboard",contenteditable:"true"},d(b)),a.dom.select(".wpview-body",b)[0].appendChild(c),e.bind(c,"beforedeactivate focusin focusout",f),e.bind(n,"beforedeactivate focusin focusout",f),z?a.selection.select(c):a.selection.select(c,!0),a.nodeChanged(),a.fire("wpview-selected",b))}function k(){var b,c=a.dom;n&&(b=a.dom.select(".wpview-clipboard",n)[0],c.unbind(b),c.remove(b),c.unbind(n,"beforedeactivate focusin focusout click mouseup",f),c.setAttrib(n,"data-mce-selected",null)),n=null}function l(a){return a.replace(/]+data-wpview-text=\"([^"]+)"[^>]*>[\s\S]+?wpview-selection-after[^>]+>(?: |\u00a0)*<\/p><\/div>/g,"$1")}function m(a){return 47>=a&&a!==u.SPACEBAR&&a!==u.ENTER&&a!==u.DELETE&&a!==u.BACKSPACE&&(37>a||a>40)||a>=224||a>=144&&150>=a||a>=91&&93>=a||a>=112&&135>=a}var n,o,p,q,r,s,t=tinymce.Env,u=tinymce.util.VK,v=tinymce.dom.TreeWalker,w=!1,x=!0,y=function(){return!1},z=/iPad|iPod|iPhone/.test(navigator.userAgent);return"undefined"!=typeof wp&&wp.mce?(a.on("BeforeAddUndo",function(a){a.lastLevel&&l(a.level.content)===l(a.lastLevel.content)&&a.preventDefault()}),a.on("BeforeSetContent",function(b){var c;b.content&&(n&&i(n),c=a.selection.getNode(),(!b.content.match(/^\s*(https?:\/\/[^\s"]+)\s*$/i)||"P"===c.nodeName&&c.parentNode===a.getBody()&&a.dom.isEmpty(c))&&(b.content=wp.mce.views.toViews(b.content)))}),a.on("SetContent",function(){wp.mce.views.render()}),a.on("click",function(c){var d,e=c.clientX,f=c.clientY,h=a.getBody(),i=h.getBoundingClientRect(),j=h.firstChild,k=j.getBoundingClientRect(),l=h.lastChild,m=l.getBoundingClientRect();fm.bottom&&(d=b(l))?(g(!1,d),c.preventDefault()):tinymce.each(a.dom.select(".wpview-wrap"),function(a){var b=a.getBoundingClientRect();return f>=b.top&&f<=b.bottom?void(ei.right&&(g(!1,a),c.preventDefault())):void 0})}),a.on("init",function(){var c=!1,d=a.selection;a.on("BeforeSetContent",function(){var c,e,f=b(d.getNode());f&&(!f.nextSibling||b(f.nextSibling)?(e=a.getDoc().createTextNode(""),a.dom.insertAfter(e,f)):(c=new v(f.nextSibling,f.nextSibling),e=c.next()),d.select(e),d.collapse(!0))}),a.dom.bind(a.getDoc(),"touchmove",function(){c=!0}),a.on("mousedown mouseup click touchend",function(d){var e=b(d.target);if(x=!1,e){if(d.stopImmediatePropagation(),d.preventDefault(),!("touchend"!==d.type&&"mousedown"!==d.type||d.metaKey||d.ctrlKey)){if(a.dom.hasClass(d.target,"edit"))return wp.mce.views.edit(e),a.focus(),!1;if(a.dom.hasClass(d.target,"remove"))return i(e),!1}return"touchend"===d.type&&c?c=!1:j(e),!1}("touchend"===d.type||"mousedown"===d.type)&&k(),"touchend"===d.type&&c&&(c=!1)},!0)}),a.on("PreProcess",function(b){tinymce.each(a.dom.select("div[data-wpview-text]",b.node),function(a){a.textContent=a.innerText=" "})}),a.on("PostProcess",function(a){a.content&&(a.content=a.content.replace(/
]*?data-wpview-text="([^"]*)"[^>]*>[\s\S]*?<\/div>/g,function(a,b){return b?"

"+window.decodeURIComponent(b)+"

":""}))}),a.on("keydown",function(c){var d,e,f,l,o,q,r,s=c.keyCode,t=a.dom,v=a.selection;if(n){if((c.metaKey||c.ctrlKey)&&s!==u.BACKSPACE&&86!==s||s>=112&&123>=s)return void((c.metaKey||c.ctrlKey)&&88===s&&(w=n));if(e=b(v.getNode()),e!==n)return void k();s===u.LEFT?(g(!0,e),c.preventDefault()):s===u.UP?(e.previousSibling?b(e.previousSibling)?g(!0,e.previousSibling):(k(),v.select(e.previousSibling,!0),v.collapse()):g(!0,e),c.preventDefault()):s===u.RIGHT?(g(!1,e),c.preventDefault()):s===u.DOWN?(e.nextSibling?b(e.nextSibling)?g(!1,e.nextSibling):(k(),v.setCursorLocation(e.nextSibling,0)):g(!1,e),c.preventDefault()):m(s)||(i(n),(s===u.ENTER||s===u.DELETE||s===u.BACKSPACE)&&c.preventDefault())}else{if(c.metaKey||c.ctrlKey||s>=112&&123>=s)return;if(d=v.getNode(),p=d,e=b(d),v.isCollapsed()||(o=v.getRng(),(e=b(o.endContainer))?(q=o.cloneRange(),v.select(e.previousSibling,!0),v.collapse(),r=v.getRng(),q.setEnd(r.endContainer,r.endOffset),v.setRng(q)):(e=b(o.startContainer))&&(q=o.cloneRange(),q.setStart(e.nextSibling,0),v.setRng(q))),!e)return void(c.keyCode===u.BACKSPACE&&(a.dom.isEmpty(d)?(e=b(d.previousSibling))&&(g(!1,e),a.dom.remove(d),c.preventDefault()):(o=v.getRng())&&0===o.startOffset&&0===o.endOffset&&(e=b(d.previousSibling))&&(g(!1,e),c.preventDefault())));if(!(f=t.hasClass(e,"wpview-selection-before"))&&!(l=t.hasClass(e,"wpview-selection-after")))return;if(m(s))return;l&&s===u.UP||f&&s===u.BACKSPACE?(e.previousSibling?b(e.previousSibling)?g(!1,e.previousSibling):t.isEmpty(e.previousSibling)&&s===u.BACKSPACE?t.remove(e.previousSibling):(v.select(e.previousSibling,!0),v.collapse()):g(!0,e),c.preventDefault()):!l||s!==u.DOWN&&s!==u.RIGHT?!f||s!==u.UP&&s!==u.LEFT?f&&s===u.DOWN?(e.nextSibling?b(e.nextSibling)?g(!0,e.nextSibling):v.setCursorLocation(e.nextSibling,0):g(!1,e),c.preventDefault()):l&&s===u.LEFT||f&&s===u.RIGHT?(j(e),c.preventDefault()):l&&s===u.BACKSPACE?(i(e),c.preventDefault()):l?h(e):f&&h(e,!0,s):(e.previousSibling&&(b(e.previousSibling)?g(s===u.UP,e.previousSibling):(v.select(e.previousSibling,!0),v.collapse())),c.preventDefault()):(e.nextSibling&&(b(e.nextSibling)?g(s===u.RIGHT,e.nextSibling):v.setCursorLocation(e.nextSibling,0)),c.preventDefault()),s===u.ENTER&&c.preventDefault()}}),a.on("keyup",function(){w&&(i(w),w=!1)}),a.on("focus",function(){var c;r=!0,a.dom.addClass(a.getBody(),"has-focus"),x&&(c=b(a.getBody().firstChild))&&g(!0,c),x=!1}),a.on("blur",function(){r=!1,a.dom.removeClass(a.getBody(),"has-focus")}),a.on("NodeChange",function(d){var e=a.dom,f=a.dom.select(".wpview-wrap"),h=d.element.className,i=b(d.element),j=p;if(p=!1,clearInterval(o),tinymce.each(f,function(a){a.className&&(a.className=a.className.replace(/ ?\bwpview-(?:selection-before|selection-after|cursor-hide)\b/g,""))}),r&&i)if("wpview-selection-before"!==h&&"wpview-selection-after"!==h||!a.selection.isCollapsed())c(d.element,"wpview-clipboard")||q||(k(),q++,g(!0,i));else{if(q=0,k(),j===i.previousSibling)return void g(!0,i);if(j===i.nextSibling)return void g(!1,i);e.addClass(i,h),o=setInterval(function(){e.hasClass(i,"wpview-cursor-hide")?e.removeClass(i,"wpview-cursor-hide"):e.addClass(i,"wpview-cursor-hide")},500)}}),a.on("BeforeExecCommand",function(){var c,d=a.selection.getNode();d&&("wpview-selection-before"===d.className||"wpview-selection-after"===d.className)&&(c=b(d))&&(h(c),s=c)}),a.on("ExecCommand",function(){var b,c;n&&(b=n,k(),j(b)),s&&(c=s.nextSibling,c&&"P"===c.nodeName&&a.dom.isEmpty(c)&&(a.dom.remove(c),g(!1,s)),s=!1)}),a.on("ResolveName",function(c){a.dom.hasClass(c.target,"wpview-wrap")?(c.name=a.dom.getAttrib(c.target,"data-wpview-type")||"wpview",c.stopPropagation()):b(c.target)&&(c.preventDefault(),c.stopPropagation())}),{getViewText:d,setViewText:e,getView:b}):{getViewText:y,setViewText:y,getView:y}}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/wp-tinymce.js.gz b/wp-includes/js/tinymce/wp-tinymce.js.gz index a4ae720f5ea5e6b16456acc624884fe4ea596061..fcc6949271e323399b52c05bc5960231aeab6500 100644 GIT binary patch delta 2822 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 Y_{FODMOFL)cnkLb0E}QZ9)l?c09|{Zod5s; delta 2809 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 Lo5z!VDFy)m)Ln5r