Bug 5917 / Bug 6085 : Fixing not being able to change language
[koha.git] / koha-tt / intranet-tmpl / prog / en / js / tinymce / jscripts / tiny_mce / plugins / noneditable / editor_plugin_src.js
1 /**\r
2  * $Id: editor_plugin_src.js 205 2007-02-12 18:58:29Z spocke $\r
3  *\r
4  * @author Moxiecode\r
5  * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
6  */\r
7 \r
8 var TinyMCE_NonEditablePlugin = {\r
9         getInfo : function() {\r
10                 return {\r
11                         longname : 'Non editable elements',\r
12                         author : 'Moxiecode Systems AB',\r
13                         authorurl : 'http://tinymce.moxiecode.com',\r
14                         infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable',\r
15                         version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
16                 };\r
17         },\r
18 \r
19         initInstance : function(inst) {\r
20                 tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/noneditable/css/noneditable.css");\r
21 \r
22                 // Ugly hack\r
23                 if (tinyMCE.isMSIE5_0)\r
24                         tinyMCE.settings['plugins'] = tinyMCE.settings['plugins'].replace(/noneditable/gi, 'Noneditable');\r
25         },\r
26 \r
27         handleEvent : function(e) {\r
28                 return this._moveSelection(e, tinyMCE.selectedInstance);\r
29         },\r
30 \r
31         cleanup : function(type, content, inst) {\r
32                 switch (type) {\r
33                         case "insert_to_editor_dom":\r
34                                 var nodes, i, editClass, nonEditClass, editable, elm;\r
35 \r
36                                 // Pass through Gecko\r
37                                 if (tinyMCE.isGecko)\r
38                                         return content;\r
39 \r
40                                 nodes = tinyMCE.getNodeTree(content, [], 1);\r
41 \r
42                                 editClass = tinyMCE.getParam("noneditable_editable_class", "mceEditable");\r
43                                 nonEditClass = tinyMCE.getParam("noneditable_noneditable_class", "mceNonEditable");\r
44 \r
45                                 for (i=0; i<nodes.length; i++) {\r
46                                         elm = nodes[i];\r
47 \r
48                                         // Convert contenteditable to classes\r
49                                         editable = tinyMCE.getAttrib(elm, "contenteditable");\r
50                                         if (new RegExp("true|false","gi").test(editable))\r
51                                                 TinyMCE_NonEditablePlugin._setEditable(elm, editable == "true");\r
52 \r
53                                         if (tinyMCE.isIE) {\r
54                                                 if (tinyMCE.hasCSSClass(elm, editClass))\r
55                                                         elm.contentEditable = true;\r
56 \r
57                                                 if (tinyMCE.hasCSSClass(elm, nonEditClass))\r
58                                                         elm.contentEditable = false;\r
59                                         }\r
60                                 }\r
61 \r
62                                 break;\r
63 \r
64                         case "insert_to_editor":\r
65                                 var editClass = tinyMCE.getParam("noneditable_editable_class", "mceEditable");\r
66                                 var nonEditClass = tinyMCE.getParam("noneditable_noneditable_class", "mceNonEditable");\r
67 \r
68                                 // Replace mceItem to new school\r
69                                 content = content.replace(/mceItemEditable/g, editClass);\r
70                                 content = content.replace(/mceItemNonEditable/g, nonEditClass);\r
71 \r
72                                 if (tinyMCE.isIE && (content.indexOf(editClass) != -1 || content.indexOf(nonEditClass) != -1)) {\r
73                                         content = content.replace(new RegExp("class=\"(.+)(" + editClass + ")\"", "gi"), 'class="$1$2" contenteditable="true"');\r
74                                         content = content.replace(new RegExp("class=\"(.+)(" + nonEditClass + ")\"", "gi"), 'class="$1$2" contenteditable="false"');\r
75                                         content = content.replace(new RegExp("class=\"(" + editClass + ")([^\"]*)\"", "gi"), 'class="$1$2" contenteditable="true"');\r
76                                         content = content.replace(new RegExp("class=\"(" + nonEditClass + ")([^\"]*)\"", "gi"), 'class="$1$2" contenteditable="false"');\r
77                                         content = content.replace(new RegExp("class=\"(.+)(" + editClass + ")([^\"]*)\"", "gi"), 'class="$1$2$3" contenteditable="true"');\r
78                                         content = content.replace(new RegExp("class=\"(.+)(" + nonEditClass + ")([^\"]*)\"", "gi"), 'class="$1$2$3" contenteditable="false"');\r
79                                 }\r
80 \r
81                                 break;\r
82 \r
83                         case "get_from_editor_dom":\r
84                                 // Pass through Gecko\r
85                                 if (tinyMCE.isGecko)\r
86                                         return content;\r
87 \r
88                                 if (tinyMCE.getParam("noneditable_leave_contenteditable", false)) {\r
89                                         var nodes = tinyMCE.getNodeTree(content, new Array(), 1);\r
90 \r
91                                         for (var i=0; i<nodes.length; i++)\r
92                                                 nodes[i].removeAttribute("contenteditable");\r
93                                 }\r
94 \r
95                                 break;\r
96                 }\r
97 \r
98                 return content;\r
99         },\r
100 \r
101         _moveSelection : function(e, inst) {\r
102                 var s, r, sc, ec, el, c = tinyMCE.getParam('noneditable_editable_class', 'mceNonEditable');\r
103 \r
104                 if (!inst)\r
105                         return true;\r
106 \r
107                 // Always select whole element\r
108                 if (tinyMCE.isGecko) {\r
109                         s = inst.selection.getSel();\r
110                         r = s.getRangeAt(0);\r
111                         sc = tinyMCE.getParentNode(r.startContainer, function (n) {return tinyMCE.hasCSSClass(n, c);});\r
112                         ec = tinyMCE.getParentNode(r.endContainer, function (n) {return tinyMCE.hasCSSClass(n, c);});\r
113 \r
114                         sc && r.setStartBefore(sc);\r
115                         ec && r.setEndAfter(ec);\r
116 \r
117                         if (sc || ec) {\r
118                                 if (e.type == 'keypress' && e.keyCode == 39) {\r
119                                         el = sc || ec;\r
120 \r
121                                         // Try!!\r
122                                 }\r
123 \r
124                                 s.removeAllRanges();\r
125                                 s.addRange(r);\r
126 \r
127                                 return tinyMCE.cancelEvent(e);\r
128                         }\r
129                 }\r
130 \r
131                 return true;\r
132         },\r
133 \r
134         _setEditable : function(elm, state) {\r
135                 var editClass = tinyMCE.getParam("noneditable_editable_class", "mceEditable");\r
136                 var nonEditClass = tinyMCE.getParam("noneditable_noneditable_class", "mceNonEditable");\r
137 \r
138                 var className = elm.className ? elm.className : "";\r
139 \r
140                 if (className.indexOf(editClass) != -1 || className.indexOf(nonEditClass) != -1)\r
141                         return;\r
142 \r
143                 if ((className = tinyMCE.getAttrib(elm, "class")) != "")\r
144                         className += " ";\r
145 \r
146                 className += state ? editClass : nonEditClass;\r
147 \r
148                 elm.setAttribute("class", className);\r
149                 elm.className = className;\r
150         }\r
151 };\r
152 \r
153 tinyMCE.addPlugin("noneditable", TinyMCE_NonEditablePlugin);\r