plugin.min.js 4.9 KB

1
  1. tinymce.PluginManager.add("noneditable",function(e){var t=tinymce.dom.TreeWalker;var n="contenteditable",r="data-mce-"+n;var i=tinymce.util.VK;function a(e){var t;if(e.nodeType===1){t=e.getAttribute(r);if(t&&t!=="inherit"){return t}t=e.contentEditable;if(t!=="inherit"){return t}}return null}function l(e){var t;while(e){t=a(e);if(t){return t==="false"?e:null}e=e.parentNode}}function f(){var n=e.dom,r=e.selection,f="mce_noneditablecaret",o="\ufeff";function u(e){while(e){if(e.id===f){return e}e=e.parentNode}}function s(e){var n;if(e){n=new t(e,e);for(e=n.current();e;e=n.next()){if(e.nodeType===3){return e}}}}function d(t,i){var l,u;if(a(t)==="false"){if(n.isBlock(t)){r.select(t);return}}u=n.createRng();if(a(t)==="true"){if(!t.firstChild){t.appendChild(e.getDoc().createTextNode(" "))}t=t.firstChild;i=true}l=n.create("span",{id:f,"data-mce-bogus":true},o);if(i){t.parentNode.insertBefore(l,t)}else{n.insertAfter(l,t)}u.setStart(l.firstChild,1);u.collapse(true);r.setRng(u);return l}function c(e){var t,i,a,l;if(e){t=r.getRng(true);t.setStartBefore(e);t.setEndBefore(e);i=s(e);if(i&&i.nodeValue.charAt(0)==o){i=i.deleteData(0,1)}n.remove(e,true);r.setRng(t)}else{a=u(r.getStart());while((e=n.get(f))&&e!==l){if(a!==e){i=s(e);if(i&&i.nodeValue.charAt(0)==o){i=i.deleteData(0,1)}n.remove(e,true)}l=e}}}function g(){var e,n,i,f,o;function u(e,n){var r,i,l,o,u;r=f.startContainer;i=f.startOffset;if(r.nodeType==3){u=r.nodeValue.length;if(i>0&&i<u||(n?i==u:i===0)){return}}else{if(i<r.childNodes.length){var s=!n&&i>0?i-1:i;r=r.childNodes[s];if(r.hasChildNodes()){r=r.firstChild}}else{return!n?e:null}}l=new t(r,e);while(o=l[n?"prev":"next"]()){if(o.nodeType===3&&o.nodeValue.length>0){return}else if(a(o)==="true"){return o}}return e}c();i=r.isCollapsed();e=l(r.getStart());n=l(r.getEnd());if(e||n){f=r.getRng(true);if(i){e=e||n;if(o=u(e,true)){d(o,true)}else if(o=u(e,false)){d(o,false)}else{r.select(e)}}else{f=r.getRng(true);if(e){f.setStartBefore(e)}if(n){f.setEndAfter(n)}r.setRng(f)}}}function m(f){var o=f.keyCode,s,d,m,v;function p(e,t){while(e=e[t?"previousSibling":"nextSibling"]){if(e.nodeType!==3||e.nodeValue.length>0){return e}}}function h(e,t){r.select(e);r.collapse(t)}function E(t){var i,f,o,s;function d(e){var t=f;while(t){if(t===e){return}t=t.parentNode}n.remove(e);g()}function c(){var n,r,i=e.schema.getNonEmptyElements();r=new tinymce.dom.TreeWalker(f,e.getBody());while(n=t?r.prev():r.next()){if(i[n.nodeName.toLowerCase()]){break}if(n.nodeType===3&&tinymce.trim(n.nodeValue).length>0){break}if(a(n)==="false"){d(n);return true}}if(l(n)){return true}return false}if(r.isCollapsed()){i=r.getRng(true);f=i.startContainer;o=i.startOffset;f=u(f)||f;if(s=l(f)){d(s);return false}if(f.nodeType==3&&(t?o>0:o<f.nodeValue.length)){return true}if(f.nodeType==1){f=f.childNodes[o]||f}if(c()){return false}}return true}m=r.getStart();v=r.getEnd();s=l(m)||l(v);if(s&&(o<112||o>124)&&o!=i.DELETE&&o!=i.BACKSPACE){if((tinymce.isMac?f.metaKey:f.ctrlKey)&&(o==67||o==88||o==86)){return}f.preventDefault();if(o==i.LEFT||o==i.RIGHT){var y=o==i.LEFT;if(e.dom.isBlock(s)){var T=y?s.previousSibling:s.nextSibling;var C=new t(T,T);var b=y?C.prev():C.next();h(b,!y)}else{h(s,y)}}}else{if(o==i.LEFT||o==i.RIGHT||o==i.BACKSPACE||o==i.DELETE){d=u(m);if(d){if(o==i.LEFT||o==i.BACKSPACE){s=p(d,true);if(s&&a(s)==="false"){f.preventDefault();if(o==i.LEFT){h(s,true)}else{n.remove(s);return}}else{c(d)}}if(o==i.RIGHT||o==i.DELETE){s=p(d);if(s&&a(s)==="false"){f.preventDefault();if(o==i.RIGHT){h(s,false)}else{n.remove(s);return}}else{c(d)}}}if((o==i.BACKSPACE||o==i.DELETE)&&!E(o==i.BACKSPACE)){f.preventDefault();return false}}}}e.on("mousedown",function(t){var n=e.selection.getNode();if(a(n)==="false"&&n==t.target){g()}});e.on("mouseup keyup",g);e.on("keydown",m)}var o,u,s;function d(t){var n=s.length,r=t.content,i=tinymce.trim(u);if(t.format=="raw"){return}while(n--){r=r.replace(s[n],function(t){var n=arguments,a=n[n.length-2];if(a>0&&r.charAt(a-1)=='"'){return t}return'<span class="'+i+'" data-mce-content="'+e.dom.encode(n[0])+'">'+e.dom.encode(typeof n[1]==="string"?n[1]:n[0])+"</span>"})}t.content=r}o=" "+tinymce.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ";u=" "+tinymce.trim(e.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";s=e.getParam("noneditable_regexp");if(s&&!s.length){s=[s]}e.on("PreInit",function(){f();if(s){e.on("BeforeSetContent",d)}e.parser.addAttributeFilter("class",function(e){var t=e.length,n,i;while(t--){i=e[t];n=" "+i.attr("class")+" ";if(n.indexOf(o)!==-1){i.attr(r,"true")}else if(n.indexOf(u)!==-1){i.attr(r,"false")}}});e.serializer.addAttributeFilter(r,function(e){var t=e.length,i;while(t--){i=e[t];if(s&&i.attr("data-mce-content")){i.name="#text";i.type=3;i.raw=true;i.value=i.attr("data-mce-content")}else{i.attr(n,null);i.attr(r,null)}}});e.parser.addAttributeFilter(n,function(e){var t=e.length,i;while(t--){i=e[t];i.attr(r,i.attr(n));i.attr(n,null)}})});e.on("drop",function(e){if(l(e.target)){e.preventDefault()}})});