webcit_before_automake is now the trunk
[citadel.git] / webcit / tiny_mce / plugins / noneditable / editor_plugin_src.js
1 function TinyMCE_noneditable_getInfo() {\r
2         return {\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
8         };\r
9 };\r
10 \r
11 function TinyMCE_noneditable_initInstance(inst) {\r
12         tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/noneditable/css/noneditable.css");\r
13 \r
14         // Ugly hack\r
15         if (tinyMCE.isMSIE5_0)\r
16                 tinyMCE.settings['plugins'] = tinyMCE.settings['plugins'].replace(/noneditable/gi, 'Noneditable');\r
17 \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
22         }\r
23 }\r
24 \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
30 \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
35                 rng.collapse(true);\r
36                 sel.removeAllRanges();\r
37                 sel.addRange(rng);\r
38                 tinyMCE.cancelEvent(e);\r
39         }\r
40 }\r
41 \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
46 \r
47         if ((elm = TinyMCE_noneditable_isNonEditable(sel.focusNode)) != null) {\r
48                 inst.selectNode(elm, false);\r
49                 tinyMCE.cancelEvent(e);\r
50                 return;\r
51         }\r
52 \r
53         if ((elm = TinyMCE_noneditable_isNonEditable(sel.anchorNode)) != null) {\r
54                 inst.selectNode(elm, false);\r
55                 tinyMCE.cancelEvent(e);\r
56                 return;\r
57         }\r
58 }\r
59 \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
63 \r
64         if (!elm)\r
65                 return;\r
66 \r
67         do {\r
68                 var className = elm.className ? elm.className : "";\r
69 \r
70                 if (className.indexOf(editClass) != -1)\r
71                         return null;\r
72 \r
73                 if (className.indexOf(nonEditClass) != -1)\r
74                         return elm;\r
75         } while (elm = elm.parentNode);\r
76 \r
77         return null;\r
78 }\r
79 \r
80 function TinyMCE_noneditable_cleanup(type, content, inst) {\r
81         switch (type) {\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
86 \r
87                         for (var i=0; i<nodes.length; i++) {\r
88                                 var elm = nodes[i];\r
89 \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
94 \r
95                                 if (tinyMCE.isMSIE) {\r
96                                         var className = elm.className ? elm.className : "";\r
97 \r
98                                         if (className.indexOf(editClass) != -1)\r
99                                                 elm.contentEditable = true;\r
100 \r
101                                         if (className.indexOf(nonEditClass) != -1)\r
102                                                 elm.contentEditable = false;\r
103                                 }\r
104                         }\r
105 \r
106                         break;\r
107 \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
112 \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
115                         }\r
116 \r
117                         break;\r
118 \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
122 \r
123                                 for (var i=0; i<nodes.length; i++)\r
124                                         nodes[i].removeAttribute("contenteditable");\r
125                         }\r
126 \r
127                         break;\r
128         }\r
129 \r
130         return content;\r
131 }\r
132 \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
136 \r
137         var className = elm.className ? elm.className : "";\r
138 \r
139         if (className.indexOf(editClass) != -1 || className.indexOf(nonEditClass) != -1)\r
140                 return;\r
141 \r
142         if ((className = tinyMCE.getAttrib(elm, "class")) != "")\r
143                 className += " ";\r
144 \r
145         className += state ? editClass : nonEditClass;\r
146 \r
147         elm.setAttribute("class", className);\r
148         elm.className = className;\r
149 }\r