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