1 /* Functions for the advimage plugin popup */
7 tinyMCE.setWindowArg('mce_windowresize', false);
9 // Import external list url javascript
10 var url = tinyMCE.getParam("external_image_list_url");
13 if (url.charAt(0) != '/')
14 url = tinyMCE.documentBasePath + "/" + url;
16 document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');
20 function convertURL(url, node, on_save) {
21 return eval("tinyMCEPopup.windowOpener." + tinyMCE.settings['urlconverter_callback'] + "(url, node, on_save);");
24 function getImageSrc(str) {
30 if ((pos = str.indexOf('this.src=')) != -1) {
31 var src = str.substring(pos + 10);
33 src = src.substring(0, src.indexOf('\''));
42 tinyMCEPopup.resizeToInnerSize();
44 var formObj = document.forms[0];
45 var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
46 var elm = inst.getFocusElement();
47 var action = "insert";
49 // Resize some elements
50 if (isVisible('srcbrowser'))
51 document.getElementById('src').style.width = '260px';
53 if (isVisible('overbrowser'))
54 document.getElementById('onmouseoversrc').style.width = '260px';
56 if (isVisible('outbrowser'))
57 document.getElementById('onmouseoutsrc').style.width = '260px';
59 if (isVisible('longdescbrowser'))
60 document.getElementById('longdesc').style.width = '180px';
63 if (elm != null && elm.nodeName == "IMG")
66 formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true);
68 if (action == "update") {
69 var src = tinyMCE.getAttrib(elm, 'src');
70 var onmouseoversrc = getImageSrc(tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseover')));
71 var onmouseoutsrc = getImageSrc(tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseout')));
73 // Fix for drag-drop/copy paste bug in Mozilla
74 mceRealSrc = tinyMCE.getAttrib(elm, 'mce_real_src');
78 src = convertURL(src, elm, true);
80 if (onmouseoversrc != "")
81 onmouseoversrc = convertURL(onmouseoversrc, elm, true);
83 if (onmouseoutsrc != "")
84 onmouseoutsrc = convertURL(onmouseoutsrc, elm, true);
87 var style = tinyMCE.parseStyle(elm.style.cssText);
88 formObj.src.value = src;
89 formObj.alt.value = tinyMCE.getAttrib(elm, 'alt');
90 formObj.title.value = tinyMCE.getAttrib(elm, 'title');
91 formObj.border.value = trimSize(getStyle(elm, 'border', 'borderWidth'));
92 formObj.vspace.value = tinyMCE.getAttrib(elm, 'vspace');
93 formObj.hspace.value = tinyMCE.getAttrib(elm, 'hspace');
94 formObj.width.value = trimSize(getStyle(elm, 'width'));
95 formObj.height.value = trimSize(getStyle(elm, 'height'));
96 formObj.onmouseoversrc.value = onmouseoversrc;
97 formObj.onmouseoutsrc.value = onmouseoutsrc;
98 formObj.id.value = tinyMCE.getAttrib(elm, 'id');
99 formObj.dir.value = tinyMCE.getAttrib(elm, 'dir');
100 formObj.lang.value = tinyMCE.getAttrib(elm, 'lang');
101 formObj.longdesc.value = tinyMCE.getAttrib(elm, 'longdesc');
102 formObj.usemap.value = tinyMCE.getAttrib(elm, 'usemap');
103 formObj.style.value = tinyMCE.serializeStyle(style);
105 // Select by the values
107 selectByValue(formObj, 'align', getStyle(elm, 'align', 'styleFloat'));
109 selectByValue(formObj, 'align', getStyle(elm, 'align', 'cssFloat'));
111 selectByValue(formObj, 'classlist', tinyMCE.getAttrib(elm, 'class'));
112 selectByValue(formObj, 'imagelistsrc', src);
113 selectByValue(formObj, 'imagelistover', onmouseoversrc);
114 selectByValue(formObj, 'imagelistout', onmouseoutsrc);
117 showPreviewImage(src);
123 addClassesToList('classlist', 'advimage_styles');
125 // If option enabled default contrain proportions to checked
126 if (tinyMCE.getParam("advimage_constrain_proportions", true))
127 formObj.constrain.checked = true;
129 // Check swap image if valid data
130 if (formObj.onmouseoversrc.value != "" || formObj.onmouseoutsrc.value != "")
131 setSwapImageDisabled(false);
133 setSwapImageDisabled(true);
136 function setSwapImageDisabled(state) {
137 var formObj = document.forms[0];
139 formObj.onmousemovecheck.checked = !state;
141 setBrowserDisabled('overbrowser', state);
142 setBrowserDisabled('outbrowser', state);
144 if (formObj.imagelistover)
145 formObj.imagelistover.disabled = state;
147 if (formObj.imagelistout)
148 formObj.imagelistout.disabled = state;
150 formObj.onmouseoversrc.disabled = state;
151 formObj.onmouseoutsrc.disabled = state;
154 function setAttrib(elm, attrib, value) {
155 var formObj = document.forms[0];
156 var valueElm = formObj.elements[attrib];
158 if (typeof(value) == "undefined" || value == null) {
162 value = valueElm.value;
166 elm.setAttribute(attrib, value);
168 if (attrib == "style")
169 attrib = "style.cssText";
171 if (attrib == "longdesc")
174 if (attrib == "width") {
175 attrib = "style.width";
176 value = value + "px";
179 if (attrib == "height") {
180 attrib = "style.height";
181 value = value + "px";
184 if (attrib == "class")
185 attrib = "className";
187 eval('elm.' + attrib + "=value;");
189 elm.removeAttribute(attrib);
192 function makeAttrib(attrib, value) {
193 var formObj = document.forms[0];
194 var valueElm = formObj.elements[attrib];
196 if (typeof(value) == "undefined" || value == null) {
200 value = valueElm.value;
207 value = value.replace(/&/g, '&');
208 value = value.replace(/\"/g, '"');
209 value = value.replace(/</g, '<');
210 value = value.replace(/>/g, '&gr;');
212 return ' ' + attrib + '="' + value + '"';
215 function insertAction() {
216 var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
217 var elm = inst.getFocusElement();
218 var formObj = document.forms[0];
219 var src = formObj.src.value;
220 var onmouseoversrc = formObj.onmouseoversrc.value;
221 var onmouseoutsrc = formObj.onmouseoutsrc.value;
223 if (tinyMCE.getParam("accessibility_warnings")) {
224 if (formObj.alt.value == "") {
225 var answer = confirm(tinyMCE.getLang('lang_advimage_missing_alt', '', true));
226 if (answer == true) {
227 formObj.alt.value = " ";
238 src = convertURL(src, tinyMCE.imgElement);
240 if (onmouseoversrc && onmouseoversrc != "")
241 onmouseoversrc = "this.src='" + convertURL(onmouseoversrc, tinyMCE.imgElement) + "';";
243 if (onmouseoutsrc && onmouseoutsrc != "")
244 onmouseoutsrc = "this.src='" + convertURL(onmouseoutsrc, tinyMCE.imgElement) + "';";
246 if (elm != null && elm.nodeName == "IMG") {
247 setAttrib(elm, 'src', src);
248 setAttrib(elm, 'mce_real_src', src);
249 setAttrib(elm, 'alt');
250 setAttrib(elm, 'title');
251 setAttrib(elm, 'border');
252 setAttrib(elm, 'vspace');
253 setAttrib(elm, 'hspace');
254 setAttrib(elm, 'width');
255 setAttrib(elm, 'height');
256 setAttrib(elm, 'onmouseover', onmouseoversrc);
257 setAttrib(elm, 'onmouseout', onmouseoutsrc);
258 setAttrib(elm, 'id');
259 setAttrib(elm, 'dir');
260 setAttrib(elm, 'lang');
261 setAttrib(elm, 'longdesc');
262 setAttrib(elm, 'usemap');
263 setAttrib(elm, 'style');
264 setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));
265 setAttrib(elm, 'align', getSelectValue(formObj, 'align'));
267 //tinyMCEPopup.execCommand("mceRepaint");
269 // Refresh in old MSIE
271 elm.outerHTML = elm.outerHTML;
275 html += makeAttrib('src', src);
276 html += makeAttrib('alt');
277 html += makeAttrib('title');
278 html += makeAttrib('border');
279 html += makeAttrib('vspace');
280 html += makeAttrib('hspace');
281 html += makeAttrib('width');
282 html += makeAttrib('height');
283 html += makeAttrib('onmouseover', onmouseoutsrc);
284 html += makeAttrib('onmouseout', onmouseoutsrc);
285 html += makeAttrib('id');
286 html += makeAttrib('dir');
287 html += makeAttrib('lang');
288 html += makeAttrib('longdesc');
289 html += makeAttrib('usemap');
290 html += makeAttrib('style');
291 html += makeAttrib('class', getSelectValue(formObj, 'classlist'));
292 html += makeAttrib('align', getSelectValue(formObj, 'align'));
295 tinyMCEPopup.execCommand("mceInsertContent", false, html);
298 tinyMCEPopup.close();
301 function cancelAction() {
302 tinyMCEPopup.close();
305 function changeAppearance() {
306 var formObj = document.forms[0];
307 var img = document.getElementById('alignSampleImg');
310 img.align = formObj.align.value;
311 img.border = formObj.border.value;
312 img.hspace = formObj.hspace.value;
313 img.vspace = formObj.vspace.value;
317 function changeMouseMove() {
318 var formObj = document.forms[0];
320 setSwapImageDisabled(!formObj.onmousemovecheck.checked);
323 function updateStyle() {
324 var formObj = document.forms[0];
325 var st = tinyMCE.parseStyle(formObj.style.value);
327 if (tinyMCE.getParam('inline_styles', false)) {
328 st['width'] = formObj.width.value == '' ? '' : formObj.width.value + "px";
329 st['height'] = formObj.height.value == '' ? '' : formObj.height.value + "px";
330 st['border-width'] = formObj.border.value == '' ? '' : formObj.border.value + "px";
331 st['margin-top'] = formObj.vspace.value == '' ? '' : formObj.vspace.value + "px";
332 st['margin-bottom'] = formObj.vspace.value == '' ? '' : formObj.vspace.value + "px";
333 st['margin-left'] = formObj.hspace.value == '' ? '' : formObj.hspace.value + "px";
334 st['margin-right'] = formObj.hspace.value == '' ? '' : formObj.hspace.value + "px";
336 st['width'] = st['height'] = st['border-width'] = null;
338 if (st['margin-top'] == st['margin-bottom'])
339 st['margin-top'] = st['margin-bottom'] = null;
341 if (st['margin-left'] == st['margin-right'])
342 st['margin-left'] = st['margin-right'] = null;
345 formObj.style.value = tinyMCE.serializeStyle(st);
348 function styleUpdated() {
349 var formObj = document.forms[0];
350 var st = tinyMCE.parseStyle(formObj.style.value);
353 formObj.width.value = st['width'].replace('px', '');
356 formObj.height.value = st['height'].replace('px', '');
358 if (st['margin-top'] && st['margin-top'] == st['margin-bottom'])
359 formObj.vspace.value = st['margin-top'].replace('px', '');
361 if (st['margin-left'] && st['margin-left'] == st['margin-right'])
362 formObj.hspace.value = st['margin-left'].replace('px', '');
364 if (st['border-width'])
365 formObj.border.value = st['border-width'].replace('px', '');
368 function changeHeight() {
369 var formObj = document.forms[0];
371 if (!formObj.constrain.checked || !preloadImg) {
376 var temp = (formObj.width.value / preloadImg.width) * preloadImg.height;
377 formObj.height.value = temp.toFixed(0);
381 function changeWidth() {
382 var formObj = document.forms[0];
384 if (!formObj.constrain.checked || !preloadImg) {
389 var temp = (formObj.height.value / preloadImg.height) * preloadImg.width;
390 formObj.width.value = temp.toFixed(0);
394 function onSelectMainImage(target_form_element, name, value) {
395 var formObj = document.forms[0];
397 formObj.alt.value = name;
398 formObj.title.value = name;
401 showPreviewImage(formObj.elements[target_form_element].value);
404 function showPreviewImage(src) {
405 selectByValue(document.forms[0], 'imagelistsrc', src);
407 var elm = document.getElementById('prev');
408 var src = src == "" ? src : tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], src);
413 elm.innerHTML = '<img src="' + src + '" border="0" />'
418 function getImageData(src) {
419 preloadImg = new Image();
421 tinyMCE.addEvent(preloadImg, "load", updateImageData);
422 tinyMCE.addEvent(preloadImg, "error", resetImageData);
424 preloadImg.src = src;
427 function updateImageData() {
428 var formObj = document.forms[0];
430 if (formObj.width.value == "")
431 formObj.width.value = preloadImg.width;
433 if (formObj.height.value == "")
434 formObj.height.value = preloadImg.height;
439 function resetImageData() {
440 var formObj = document.forms[0];
441 formObj.width.value = formObj.height.value = "";
444 function getSelectValue(form_obj, field_name) {
445 var elm = form_obj.elements[field_name];
447 if (elm == null || elm.options == null)
450 return elm.options[elm.selectedIndex].value;
453 function renderImageList(elm_id, target_form_element, onchange_func) {
454 if (typeof(tinyMCEImageList) == "undefined" || tinyMCEImageList.length == 0)
459 html += '<tr><td class="column1"><label for="' + elm_id + '">{$lang_image_list}</label></td>';
460 html += '<td colspan="2"><select id="' + elm_id + '" name="' + elm_id + '"';
461 html += ' class="mceImageList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';
462 html += 'this.options[this.selectedIndex].value;';
464 if (typeof(onchange_func) != "undefined")
465 html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';
467 html += '"><option value="">---</option>';
469 for (var i=0; i<tinyMCEImageList.length; i++)
470 html += '<option value="' + tinyMCEImageList[i][1] + '">' + tinyMCEImageList[i][0] + '</option>';
472 html += '</select></td></tr>';
474 document.write(html);
476 // tinyMCE.debug('-- image list start --', html, '-- image list end --');