Line 0
Link Here
|
|
|
1 |
var ImageDialog = { |
2 |
preInit : function() { |
3 |
var url; |
4 |
|
5 |
tinyMCEPopup.requireLangPack(); |
6 |
|
7 |
if (url = tinyMCEPopup.getParam("external_image_list_url")) |
8 |
document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>'); |
9 |
}, |
10 |
|
11 |
init : function(ed) { |
12 |
var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(), fl = tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList'); |
13 |
|
14 |
tinyMCEPopup.resizeToInnerSize(); |
15 |
this.fillClassList('class_list'); |
16 |
this.fillFileList('src_list', fl); |
17 |
this.fillFileList('over_list', fl); |
18 |
this.fillFileList('out_list', fl); |
19 |
TinyMCE_EditableSelects.init(); |
20 |
|
21 |
if (n.nodeName == 'IMG') { |
22 |
nl.src.value = dom.getAttrib(n, 'src'); |
23 |
nl.width.value = dom.getAttrib(n, 'width'); |
24 |
nl.height.value = dom.getAttrib(n, 'height'); |
25 |
nl.alt.value = dom.getAttrib(n, 'alt'); |
26 |
nl.title.value = dom.getAttrib(n, 'title'); |
27 |
nl.vspace.value = this.getAttrib(n, 'vspace'); |
28 |
nl.hspace.value = this.getAttrib(n, 'hspace'); |
29 |
nl.border.value = this.getAttrib(n, 'border'); |
30 |
selectByValue(f, 'align', this.getAttrib(n, 'align')); |
31 |
selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true); |
32 |
nl.style.value = dom.getAttrib(n, 'style'); |
33 |
nl.id.value = dom.getAttrib(n, 'id'); |
34 |
nl.dir.value = dom.getAttrib(n, 'dir'); |
35 |
nl.lang.value = dom.getAttrib(n, 'lang'); |
36 |
nl.usemap.value = dom.getAttrib(n, 'usemap'); |
37 |
nl.longdesc.value = dom.getAttrib(n, 'longdesc'); |
38 |
nl.insert.value = ed.getLang('update'); |
39 |
|
40 |
if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover'))) |
41 |
nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); |
42 |
|
43 |
if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout'))) |
44 |
nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); |
45 |
|
46 |
if (ed.settings.inline_styles) { |
47 |
// Move attribs to styles |
48 |
if (dom.getAttrib(n, 'align')) |
49 |
this.updateStyle('align'); |
50 |
|
51 |
if (dom.getAttrib(n, 'hspace')) |
52 |
this.updateStyle('hspace'); |
53 |
|
54 |
if (dom.getAttrib(n, 'border')) |
55 |
this.updateStyle('border'); |
56 |
|
57 |
if (dom.getAttrib(n, 'vspace')) |
58 |
this.updateStyle('vspace'); |
59 |
} |
60 |
} |
61 |
|
62 |
// Setup browse button |
63 |
document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); |
64 |
if (isVisible('srcbrowser')) |
65 |
document.getElementById('src').style.width = '260px'; |
66 |
|
67 |
// Setup browse button |
68 |
document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image'); |
69 |
if (isVisible('overbrowser')) |
70 |
document.getElementById('onmouseoversrc').style.width = '260px'; |
71 |
|
72 |
// Setup browse button |
73 |
document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image'); |
74 |
if (isVisible('outbrowser')) |
75 |
document.getElementById('onmouseoutsrc').style.width = '260px'; |
76 |
|
77 |
// If option enabled default contrain proportions to checked |
78 |
if (ed.getParam("advimage_constrain_proportions", true)) |
79 |
f.constrain.checked = true; |
80 |
|
81 |
// Check swap image if valid data |
82 |
if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value) |
83 |
this.setSwapImage(true); |
84 |
else |
85 |
this.setSwapImage(false); |
86 |
|
87 |
this.changeAppearance(); |
88 |
this.showPreviewImage(nl.src.value, 1); |
89 |
}, |
90 |
|
91 |
insert : function(file, title) { |
92 |
var ed = tinyMCEPopup.editor, t = this, f = document.forms[0]; |
93 |
|
94 |
if (f.src.value === '') { |
95 |
if (ed.selection.getNode().nodeName == 'IMG') { |
96 |
ed.dom.remove(ed.selection.getNode()); |
97 |
ed.execCommand('mceRepaint'); |
98 |
} |
99 |
|
100 |
tinyMCEPopup.close(); |
101 |
return; |
102 |
} |
103 |
|
104 |
if (tinyMCEPopup.getParam("accessibility_warnings", 1)) { |
105 |
if (!f.alt.value) { |
106 |
tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) { |
107 |
if (s) |
108 |
t.insertAndClose(); |
109 |
}); |
110 |
|
111 |
return; |
112 |
} |
113 |
} |
114 |
|
115 |
t.insertAndClose(); |
116 |
}, |
117 |
|
118 |
insertAndClose : function() { |
119 |
var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el; |
120 |
|
121 |
tinyMCEPopup.restoreSelection(); |
122 |
|
123 |
// Fixes crash in Safari |
124 |
if (tinymce.isWebKit) |
125 |
ed.getWin().focus(); |
126 |
|
127 |
if (!ed.settings.inline_styles) { |
128 |
args = { |
129 |
vspace : nl.vspace.value, |
130 |
hspace : nl.hspace.value, |
131 |
border : nl.border.value, |
132 |
align : getSelectValue(f, 'align') |
133 |
}; |
134 |
} else { |
135 |
// Remove deprecated values |
136 |
args = { |
137 |
vspace : '', |
138 |
hspace : '', |
139 |
border : '', |
140 |
align : '' |
141 |
}; |
142 |
} |
143 |
|
144 |
tinymce.extend(args, { |
145 |
src : nl.src.value.replace(/ /g, '%20'), |
146 |
width : nl.width.value, |
147 |
height : nl.height.value, |
148 |
alt : nl.alt.value, |
149 |
title : nl.title.value, |
150 |
'class' : getSelectValue(f, 'class_list'), |
151 |
style : nl.style.value, |
152 |
id : nl.id.value, |
153 |
dir : nl.dir.value, |
154 |
lang : nl.lang.value, |
155 |
usemap : nl.usemap.value, |
156 |
longdesc : nl.longdesc.value |
157 |
}); |
158 |
|
159 |
args.onmouseover = args.onmouseout = ''; |
160 |
|
161 |
if (f.onmousemovecheck.checked) { |
162 |
if (nl.onmouseoversrc.value) |
163 |
args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';"; |
164 |
|
165 |
if (nl.onmouseoutsrc.value) |
166 |
args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';"; |
167 |
} |
168 |
|
169 |
el = ed.selection.getNode(); |
170 |
|
171 |
if (el && el.nodeName == 'IMG') { |
172 |
ed.dom.setAttribs(el, args); |
173 |
} else { |
174 |
tinymce.each(args, function(value, name) { |
175 |
if (value === "") { |
176 |
delete args[name]; |
177 |
} |
178 |
}); |
179 |
|
180 |
ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1}); |
181 |
ed.undoManager.add(); |
182 |
} |
183 |
|
184 |
tinyMCEPopup.editor.execCommand('mceRepaint'); |
185 |
tinyMCEPopup.editor.focus(); |
186 |
tinyMCEPopup.close(); |
187 |
}, |
188 |
|
189 |
getAttrib : function(e, at) { |
190 |
var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2; |
191 |
|
192 |
if (ed.settings.inline_styles) { |
193 |
switch (at) { |
194 |
case 'align': |
195 |
if (v = dom.getStyle(e, 'float')) |
196 |
return v; |
197 |
|
198 |
if (v = dom.getStyle(e, 'vertical-align')) |
199 |
return v; |
200 |
|
201 |
break; |
202 |
|
203 |
case 'hspace': |
204 |
v = dom.getStyle(e, 'margin-left') |
205 |
v2 = dom.getStyle(e, 'margin-right'); |
206 |
|
207 |
if (v && v == v2) |
208 |
return parseInt(v.replace(/[^0-9]/g, '')); |
209 |
|
210 |
break; |
211 |
|
212 |
case 'vspace': |
213 |
v = dom.getStyle(e, 'margin-top') |
214 |
v2 = dom.getStyle(e, 'margin-bottom'); |
215 |
if (v && v == v2) |
216 |
return parseInt(v.replace(/[^0-9]/g, '')); |
217 |
|
218 |
break; |
219 |
|
220 |
case 'border': |
221 |
v = 0; |
222 |
|
223 |
tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) { |
224 |
sv = dom.getStyle(e, 'border-' + sv + '-width'); |
225 |
|
226 |
// False or not the same as prev |
227 |
if (!sv || (sv != v && v !== 0)) { |
228 |
v = 0; |
229 |
return false; |
230 |
} |
231 |
|
232 |
if (sv) |
233 |
v = sv; |
234 |
}); |
235 |
|
236 |
if (v) |
237 |
return parseInt(v.replace(/[^0-9]/g, '')); |
238 |
|
239 |
break; |
240 |
} |
241 |
} |
242 |
|
243 |
if (v = dom.getAttrib(e, at)) |
244 |
return v; |
245 |
|
246 |
return ''; |
247 |
}, |
248 |
|
249 |
setSwapImage : function(st) { |
250 |
var f = document.forms[0]; |
251 |
|
252 |
f.onmousemovecheck.checked = st; |
253 |
setBrowserDisabled('overbrowser', !st); |
254 |
setBrowserDisabled('outbrowser', !st); |
255 |
|
256 |
if (f.over_list) |
257 |
f.over_list.disabled = !st; |
258 |
|
259 |
if (f.out_list) |
260 |
f.out_list.disabled = !st; |
261 |
|
262 |
f.onmouseoversrc.disabled = !st; |
263 |
f.onmouseoutsrc.disabled = !st; |
264 |
}, |
265 |
|
266 |
fillClassList : function(id) { |
267 |
var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; |
268 |
|
269 |
if (v = tinyMCEPopup.getParam('theme_advanced_styles')) { |
270 |
cl = []; |
271 |
|
272 |
tinymce.each(v.split(';'), function(v) { |
273 |
var p = v.split('='); |
274 |
|
275 |
cl.push({'title' : p[0], 'class' : p[1]}); |
276 |
}); |
277 |
} else |
278 |
cl = tinyMCEPopup.editor.dom.getClasses(); |
279 |
|
280 |
if (cl.length > 0) { |
281 |
lst.options.length = 0; |
282 |
lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); |
283 |
|
284 |
tinymce.each(cl, function(o) { |
285 |
lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']); |
286 |
}); |
287 |
} else |
288 |
dom.remove(dom.getParent(id, 'tr')); |
289 |
}, |
290 |
|
291 |
fillFileList : function(id, l) { |
292 |
var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; |
293 |
|
294 |
l = typeof(l) === 'function' ? l() : window[l]; |
295 |
lst.options.length = 0; |
296 |
|
297 |
if (l && l.length > 0) { |
298 |
lst.options[lst.options.length] = new Option('', ''); |
299 |
|
300 |
tinymce.each(l, function(o) { |
301 |
lst.options[lst.options.length] = new Option(o[0], o[1]); |
302 |
}); |
303 |
} else |
304 |
dom.remove(dom.getParent(id, 'tr')); |
305 |
}, |
306 |
|
307 |
resetImageData : function() { |
308 |
var f = document.forms[0]; |
309 |
|
310 |
f.elements.width.value = f.elements.height.value = ''; |
311 |
}, |
312 |
|
313 |
updateImageData : function(img, st) { |
314 |
var f = document.forms[0]; |
315 |
|
316 |
if (!st) { |
317 |
f.elements.width.value = img.width; |
318 |
f.elements.height.value = img.height; |
319 |
} |
320 |
|
321 |
this.preloadImg = img; |
322 |
}, |
323 |
|
324 |
changeAppearance : function() { |
325 |
var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg'); |
326 |
|
327 |
if (img) { |
328 |
if (ed.getParam('inline_styles')) { |
329 |
ed.dom.setAttrib(img, 'style', f.style.value); |
330 |
} else { |
331 |
img.align = f.align.value; |
332 |
img.border = f.border.value; |
333 |
img.hspace = f.hspace.value; |
334 |
img.vspace = f.vspace.value; |
335 |
} |
336 |
} |
337 |
}, |
338 |
|
339 |
changeHeight : function() { |
340 |
var f = document.forms[0], tp, t = this; |
341 |
|
342 |
if (!f.constrain.checked || !t.preloadImg) { |
343 |
return; |
344 |
} |
345 |
|
346 |
if (f.width.value == "" || f.height.value == "") |
347 |
return; |
348 |
|
349 |
tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height; |
350 |
f.height.value = tp.toFixed(0); |
351 |
}, |
352 |
|
353 |
changeWidth : function() { |
354 |
var f = document.forms[0], tp, t = this; |
355 |
|
356 |
if (!f.constrain.checked || !t.preloadImg) { |
357 |
return; |
358 |
} |
359 |
|
360 |
if (f.width.value == "" || f.height.value == "") |
361 |
return; |
362 |
|
363 |
tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width; |
364 |
f.width.value = tp.toFixed(0); |
365 |
}, |
366 |
|
367 |
updateStyle : function(ty) { |
368 |
var dom = tinyMCEPopup.dom, b, bStyle, bColor, v, isIE = tinymce.isIE, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value}); |
369 |
|
370 |
if (tinyMCEPopup.editor.settings.inline_styles) { |
371 |
// Handle align |
372 |
if (ty == 'align') { |
373 |
dom.setStyle(img, 'float', ''); |
374 |
dom.setStyle(img, 'vertical-align', ''); |
375 |
|
376 |
v = getSelectValue(f, 'align'); |
377 |
if (v) { |
378 |
if (v == 'left' || v == 'right') |
379 |
dom.setStyle(img, 'float', v); |
380 |
else |
381 |
img.style.verticalAlign = v; |
382 |
} |
383 |
} |
384 |
|
385 |
// Handle border |
386 |
if (ty == 'border') { |
387 |
b = img.style.border ? img.style.border.split(' ') : []; |
388 |
bStyle = dom.getStyle(img, 'border-style'); |
389 |
bColor = dom.getStyle(img, 'border-color'); |
390 |
|
391 |
dom.setStyle(img, 'border', ''); |
392 |
|
393 |
v = f.border.value; |
394 |
if (v || v == '0') { |
395 |
if (v == '0') |
396 |
img.style.border = isIE ? '0' : '0 none none'; |
397 |
else { |
398 |
var isOldIE = tinymce.isIE && (!document.documentMode || document.documentMode < 9); |
399 |
|
400 |
if (b.length == 3 && b[isOldIE ? 2 : 1]) |
401 |
bStyle = b[isOldIE ? 2 : 1]; |
402 |
else if (!bStyle || bStyle == 'none') |
403 |
bStyle = 'solid'; |
404 |
if (b.length == 3 && b[isIE ? 0 : 2]) |
405 |
bColor = b[isOldIE ? 0 : 2]; |
406 |
else if (!bColor || bColor == 'none') |
407 |
bColor = 'black'; |
408 |
img.style.border = v + 'px ' + bStyle + ' ' + bColor; |
409 |
} |
410 |
} |
411 |
} |
412 |
|
413 |
// Handle hspace |
414 |
if (ty == 'hspace') { |
415 |
dom.setStyle(img, 'marginLeft', ''); |
416 |
dom.setStyle(img, 'marginRight', ''); |
417 |
|
418 |
v = f.hspace.value; |
419 |
if (v) { |
420 |
img.style.marginLeft = v + 'px'; |
421 |
img.style.marginRight = v + 'px'; |
422 |
} |
423 |
} |
424 |
|
425 |
// Handle vspace |
426 |
if (ty == 'vspace') { |
427 |
dom.setStyle(img, 'marginTop', ''); |
428 |
dom.setStyle(img, 'marginBottom', ''); |
429 |
|
430 |
v = f.vspace.value; |
431 |
if (v) { |
432 |
img.style.marginTop = v + 'px'; |
433 |
img.style.marginBottom = v + 'px'; |
434 |
} |
435 |
} |
436 |
|
437 |
// Merge |
438 |
dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img'); |
439 |
} |
440 |
}, |
441 |
|
442 |
changeMouseMove : function() { |
443 |
}, |
444 |
|
445 |
showPreviewImage : function(u, st) { |
446 |
if (!u) { |
447 |
tinyMCEPopup.dom.setHTML('prev', ''); |
448 |
return; |
449 |
} |
450 |
|
451 |
if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true)) |
452 |
this.resetImageData(); |
453 |
|
454 |
u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u); |
455 |
|
456 |
if (!st) |
457 |
tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this);" onerror="ImageDialog.resetImageData();" />'); |
458 |
else |
459 |
tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this, 1);" />'); |
460 |
} |
461 |
}; |
462 |
|
463 |
ImageDialog.preInit(); |
464 |
tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); |