bug 2509: fix file permissions
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / js / tinymce / jscripts / tiny_mce / plugins / xhtmlxtras / jscripts / element_common.js
1  /**\r
2  * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
3  *\r
4  * @author Moxiecode - based on work by Andrew Tetlaw\r
5  * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
6  */\r
7 \r
8 function initCommonAttributes(elm) {\r
9         var formObj = document.forms[0];\r
10 \r
11         // Setup form data for common element attributes\r
12         setFormValue('title', tinyMCE.getAttrib(elm, 'title'));\r
13         setFormValue('id', tinyMCE.getAttrib(elm, 'id'));\r
14         selectByValue(formObj, 'class', tinyMCE.getAttrib(elm, 'class'), true);\r
15         setFormValue('style', tinyMCE.getAttrib(elm, 'style'));\r
16         selectByValue(formObj, 'dir', tinyMCE.getAttrib(elm, 'dir'));\r
17         setFormValue('lang', tinyMCE.getAttrib(elm, 'lang'));\r
18         setFormValue('onfocus', tinyMCE.getAttrib(elm, 'onfocus'));\r
19         setFormValue('onblur', tinyMCE.getAttrib(elm, 'onblur'));\r
20         setFormValue('onclick', tinyMCE.getAttrib(elm, 'onclick'));\r
21         setFormValue('ondblclick', tinyMCE.getAttrib(elm, 'ondblclick'));\r
22         setFormValue('onmousedown', tinyMCE.getAttrib(elm, 'onmousedown'));\r
23         setFormValue('onmouseup', tinyMCE.getAttrib(elm, 'onmouseup'));\r
24         setFormValue('onmouseover', tinyMCE.getAttrib(elm, 'onmouseover'));\r
25         setFormValue('onmousemove', tinyMCE.getAttrib(elm, 'onmousemove'));\r
26         setFormValue('onmouseout', tinyMCE.getAttrib(elm, 'onmouseout'));\r
27         setFormValue('onkeypress', tinyMCE.getAttrib(elm, 'onkeypress'));\r
28         setFormValue('onkeydown', tinyMCE.getAttrib(elm, 'onkeydown'));\r
29         setFormValue('onkeyup', tinyMCE.getAttrib(elm, 'onkeyup'));\r
30 }\r
31 \r
32 function setFormValue(name, value) {\r
33         if(document.forms[0].elements[name]) document.forms[0].elements[name].value = value;\r
34 }\r
35 \r
36 function insertDateTime(id) {\r
37         document.getElementById(id).value = getDateTime(new Date(), "%Y-%m-%dT%H:%M:%S");\r
38 }\r
39 \r
40 function getDateTime(d, fmt) {\r
41         fmt = fmt.replace("%D", "%m/%d/%y");\r
42         fmt = fmt.replace("%r", "%I:%M:%S %p");\r
43         fmt = fmt.replace("%Y", "" + d.getFullYear());\r
44         fmt = fmt.replace("%y", "" + d.getYear());\r
45         fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));\r
46         fmt = fmt.replace("%d", addZeros(d.getDate(), 2));\r
47         fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));\r
48         fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));\r
49         fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));\r
50         fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));\r
51         fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));\r
52         fmt = fmt.replace("%%", "%");\r
53 \r
54         return fmt;\r
55 }\r
56 \r
57 function addZeros(value, len) {\r
58         var i;\r
59 \r
60         value = "" + value;\r
61 \r
62         if (value.length < len) {\r
63                 for (i=0; i<(len-value.length); i++)\r
64                         value = "0" + value;\r
65         }\r
66 \r
67         return value;\r
68 }\r
69 \r
70 function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {\r
71         if (!form_obj || !form_obj.elements[field_name])\r
72                 return;\r
73 \r
74         var sel = form_obj.elements[field_name];\r
75 \r
76         var found = false;\r
77         for (var i=0; i<sel.options.length; i++) {\r
78                 var option = sel.options[i];\r
79 \r
80                 if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {\r
81                         option.selected = true;\r
82                         found = true;\r
83                 } else\r
84                         option.selected = false;\r
85         }\r
86 \r
87         if (!found && add_custom && value != '') {\r
88                 var option = new Option('Value: ' + value, value);\r
89                 option.selected = true;\r
90                 sel.options[sel.options.length] = option;\r
91         }\r
92 \r
93         return found;\r
94 }\r
95 \r
96 function setAttrib(elm, attrib, value) {\r
97         var formObj = document.forms[0];\r
98         var valueElm = formObj.elements[attrib.toLowerCase()];\r
99 \r
100         if (typeof(value) == "undefined" || value == null) {\r
101                 value = "";\r
102 \r
103                 if (valueElm)\r
104                         value = valueElm.value;\r
105         }\r
106 \r
107         if (value != "") {\r
108                 if (attrib == "style")\r
109                         attrib = "style.cssText";\r
110 \r
111                 if (attrib.substring(0, 2) == 'on')\r
112                         value = 'return true;' + value;\r
113 \r
114                 if (attrib == "class") {\r
115                         tinyMCE.addCSSClass(elm, value);\r
116                         return;\r
117                 }\r
118 \r
119                 elm.setAttribute(attrib.toLowerCase(), value);\r
120         } else\r
121                 elm.removeAttribute(attrib);\r
122 }\r
123 \r
124 function setAllCommonAttribs(elm) {\r
125         setAttrib(elm, 'title');\r
126         setAttrib(elm, 'id');\r
127         setAttrib(elm, 'class');\r
128         setAttrib(elm, 'style');\r
129         setAttrib(elm, 'dir');\r
130         setAttrib(elm, 'lang');\r
131         /*setAttrib(elm, 'onfocus');\r
132         setAttrib(elm, 'onblur');\r
133         setAttrib(elm, 'onclick');\r
134         setAttrib(elm, 'ondblclick');\r
135         setAttrib(elm, 'onmousedown');\r
136         setAttrib(elm, 'onmouseup');\r
137         setAttrib(elm, 'onmouseover');\r
138         setAttrib(elm, 'onmousemove');\r
139         setAttrib(elm, 'onmouseout');\r
140         setAttrib(elm, 'onkeypress');\r
141         setAttrib(elm, 'onkeydown');\r
142         setAttrib(elm, 'onkeyup');*/\r
143 }\r
144 \r
145 SXE = {\r
146         currentAction : "insert",\r
147         inst : tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')),\r
148         updateElement : null\r
149 }\r
150 \r
151 SXE.focusElement = SXE.inst.getFocusElement();\r
152 \r
153 SXE.initElementDialog = function(element_name) {\r
154         addClassesToList('class', 'xhtmlxtras_styles');\r
155         TinyMCE_EditableSelects.init();\r
156 \r
157         element_name = element_name.toLowerCase();\r
158         var elm = tinyMCE.getParentElement(SXE.focusElement, element_name);\r
159         if (elm != null && elm.nodeName == element_name.toUpperCase()) {\r
160                 SXE.currentAction = "update";\r
161         }\r
162 \r
163         if (SXE.currentAction == "update") {\r
164                 initCommonAttributes(elm);\r
165                 SXE.updateElement = elm;\r
166         }\r
167 \r
168         document.forms[0].insert.value = tinyMCE.getLang('lang_' + SXE.currentAction, 'Insert', true); \r
169 }\r
170 \r
171 SXE.insertElement = function(element_name) {\r
172         var elm = tinyMCE.getParentElement(SXE.focusElement, element_name), h, tagName;\r
173 \r
174         tinyMCEPopup.execCommand('mceBeginUndoLevel');\r
175         if (elm == null) {\r
176                 var s = SXE.inst.selection.getSelectedHTML();\r
177                 if(s.length > 0) {\r
178                         tagName = element_name;\r
179 \r
180                         if (tinyMCE.isIE && !tinyMCE.isOpera && element_name.indexOf('html:') == 0)\r
181                                 element_name = element_name.substring(5).toLowerCase();\r
182 \r
183                         h = '<' + tagName + ' id="#sxe_temp_' + element_name + '#">' + s + '</' + tagName + '>';\r
184 \r
185                         tinyMCEPopup.execCommand('mceInsertContent', false, h);\r
186 \r
187                         var elementArray = tinyMCE.getElementsByAttributeValue(SXE.inst.getBody(), element_name, 'id', '#sxe_temp_' + element_name + '#');\r
188                         for (var i=0; i<elementArray.length; i++) {\r
189                                 var elm = elementArray[i];\r
190 \r
191                                 elm.id = '';\r
192                                 elm.setAttribute('id', '');\r
193                                 elm.removeAttribute('id');\r
194 \r
195                                 setAllCommonAttribs(elm);\r
196                         }\r
197                 }\r
198         } else {\r
199                 setAllCommonAttribs(elm);\r
200         }\r
201         tinyMCE.triggerNodeChange();\r
202         tinyMCEPopup.execCommand('mceEndUndoLevel');\r
203 }\r
204 \r
205 SXE.removeElement = function(element_name){\r
206         element_name = element_name.toLowerCase();\r
207         elm = tinyMCE.getParentElement(SXE.focusElement, element_name);\r
208         if(elm && elm.nodeName == element_name.toUpperCase()){\r
209                 tinyMCEPopup.execCommand('mceBeginUndoLevel');\r
210                 tinyMCE.execCommand('mceRemoveNode', false, elm);\r
211                 tinyMCE.triggerNodeChange();\r
212                 tinyMCEPopup.execCommand('mceEndUndoLevel');\r
213         }\r
214 }\r
215 \r
216 SXE.showRemoveButton = function() {\r
217                 document.getElementById("remove").style.display = 'block';\r
218 }\r
219 \r
220 SXE.containsClass = function(elm,cl) {\r
221         return (elm.className.indexOf(cl) > -1) ? true : false;\r
222 }\r
223 \r
224 SXE.removeClass = function(elm,cl) {\r
225         if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) {\r
226                 return true;\r
227         }\r
228         var classNames = elm.className.split(" ");\r
229         var newClassNames = "";\r
230         for (var x = 0, cnl = classNames.length; x < cnl; x++) {\r
231                 if (classNames[x] != cl) {\r
232                         newClassNames += (classNames[x] + " ");\r
233                 }\r
234         }\r
235         elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end\r
236 }\r
237 \r
238 SXE.addClass = function(elm,cl) {\r
239         if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl;\r
240         return true;\r
241 }