1 function TinyMCE_noneditable_getInfo() {
3 longname : 'Non editable elements',
4 author : 'Moxiecode Systems',
5 authorurl : 'http://tinymce.moxiecode.com',
6 infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_noneditable.html',
7 version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
11 function TinyMCE_noneditable_initInstance(inst) {
12 tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/noneditable/css/noneditable.css");
15 if (tinyMCE.isMSIE5_0)
16 tinyMCE.settings['plugins'] = tinyMCE.settings['plugins'].replace(/noneditable/gi, 'Noneditable');
18 if (tinyMCE.isGecko) {
19 tinyMCE.addEvent(inst.getDoc(), "keyup", TinyMCE_noneditable_fixKeyUp);
20 // tinyMCE.addEvent(inst.getDoc(), "keypress", TinyMCE_noneditable_selectAll);
21 // tinyMCE.addEvent(inst.getDoc(), "mouseup", TinyMCE_noneditable_selectAll);
25 function TinyMCE_noneditable_fixKeyUp(e) {
26 var inst = tinyMCE.selectedInstance;
27 var sel = inst.getSel();
28 var rng = inst.getRng();
29 var an = sel.anchorNode;
31 // Move cursor outside non editable fields
32 if ((e.keyCode == 38 || e.keyCode == 37 || e.keyCode == 40 || e.keyCode == 39) && (elm = TinyMCE_noneditable_isNonEditable(an)) != null) {
33 rng = inst.getDoc().createRange();
36 sel.removeAllRanges();
38 tinyMCE.cancelEvent(e);
42 function TinyMCE_noneditable_selectAll(e) {
43 var inst = tinyMCE.selectedInstance;
44 var sel = inst.getSel();
45 var doc = inst.getDoc();
47 if ((elm = TinyMCE_noneditable_isNonEditable(sel.focusNode)) != null) {
48 inst.selectNode(elm, false);
49 tinyMCE.cancelEvent(e);
53 if ((elm = TinyMCE_noneditable_isNonEditable(sel.anchorNode)) != null) {
54 inst.selectNode(elm, false);
55 tinyMCE.cancelEvent(e);
60 function TinyMCE_noneditable_isNonEditable(elm) {
61 var editClass = tinyMCE.getParam("noneditable_editable_class", "mceItemEditable");
62 var nonEditClass = tinyMCE.getParam("noneditable_noneditable_class", "mceItemNonEditable");
68 var className = elm.className ? elm.className : "";
70 if (className.indexOf(editClass) != -1)
73 if (className.indexOf(nonEditClass) != -1)
75 } while (elm = elm.parentNode);
80 function TinyMCE_noneditable_cleanup(type, content, inst) {
82 case "insert_to_editor_dom":
83 var nodes = tinyMCE.getNodeTree(content, new Array(), 1);
84 var editClass = tinyMCE.getParam("noneditable_editable_class", "mceItemEditable");
85 var nonEditClass = tinyMCE.getParam("noneditable_noneditable_class", "mceItemNonEditable");
87 for (var i=0; i<nodes.length; i++) {
90 // Convert contenteditable to classes
91 var editable = tinyMCE.getAttrib(elm, "contenteditable");
92 if (new RegExp("true|false","gi").test(editable))
93 TinyMCE_noneditable_setEditable(elm, editable == "true");
96 var className = elm.className ? elm.className : "";
98 if (className.indexOf(editClass) != -1)
99 elm.contentEditable = true;
101 if (className.indexOf(nonEditClass) != -1)
102 elm.contentEditable = false;
108 case "insert_to_editor":
109 if (tinyMCE.isMSIE) {
110 var editClass = tinyMCE.getParam("noneditable_editable_class", "mceItemEditable");
111 var nonEditClass = tinyMCE.getParam("noneditable_noneditable_class", "mceItemNonEditable");
113 content = content.replace(new RegExp("<(.*?)class=\"(.*?)(" + editClass + ")(.*?)\"(.*?)>", "gi"), '<$1class="$2$3$4" contenteditable="true"$5>');
114 content = content.replace(new RegExp("<(.*?)class=\"(.*?)(" + nonEditClass + ")(.*?)\"(.*?)>", "gi"), '<$1class="$2$3$4" contenteditable="false"$5>');
119 case "get_from_editor_dom":
120 if (tinyMCE.getParam("noneditable_leave_contenteditable", false)) {
121 var nodes = tinyMCE.getNodeTree(content, new Array(), 1);
123 for (var i=0; i<nodes.length; i++)
124 nodes[i].removeAttribute("contenteditable");
133 function TinyMCE_noneditable_setEditable(elm, state) {
134 var editClass = tinyMCE.getParam("noneditable_editable_class", "mceItemEditable");
135 var nonEditClass = tinyMCE.getParam("noneditable_noneditable_class", "mceItemNonEditable");
137 var className = elm.className ? elm.className : "";
139 if (className.indexOf(editClass) != -1 || className.indexOf(nonEditClass) != -1)
142 if ((className = tinyMCE.getAttrib(elm, "class")) != "")
145 className += state ? editClass : nonEditClass;
147 elm.setAttribute("class", className);
148 elm.className = className;