image.js
441 lines
| 11.3 KiB
| application/javascript
|
JavascriptGenshiLexer
| r2 | var ImageDialog = { | |||
| preInit : function() { | ||||
| var url; | ||||
| tinyMCEPopup.requireLangPack(); | ||||
| if (url = tinyMCEPopup.getParam("external_image_list_url")) | ||||
| document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>'); | ||||
| }, | ||||
| init : function(ed) { | ||||
| var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(); | ||||
| tinyMCEPopup.resizeToInnerSize(); | ||||
| this.fillClassList('class_list'); | ||||
| this.fillFileList('src_list', 'tinyMCEImageList'); | ||||
| this.fillFileList('over_list', 'tinyMCEImageList'); | ||||
| this.fillFileList('out_list', 'tinyMCEImageList'); | ||||
| TinyMCE_EditableSelects.init(); | ||||
| if (n.nodeName == 'IMG') { | ||||
| nl.src.value = dom.getAttrib(n, 'src'); | ||||
| nl.width.value = dom.getAttrib(n, 'width'); | ||||
| nl.height.value = dom.getAttrib(n, 'height'); | ||||
| nl.alt.value = dom.getAttrib(n, 'alt'); | ||||
| nl.title.value = dom.getAttrib(n, 'title'); | ||||
| nl.vspace.value = this.getAttrib(n, 'vspace'); | ||||
| nl.hspace.value = this.getAttrib(n, 'hspace'); | ||||
| nl.border.value = this.getAttrib(n, 'border'); | ||||
| selectByValue(f, 'align', this.getAttrib(n, 'align')); | ||||
| selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true); | ||||
| nl.style.value = dom.getAttrib(n, 'style'); | ||||
| nl.id.value = dom.getAttrib(n, 'id'); | ||||
| nl.dir.value = dom.getAttrib(n, 'dir'); | ||||
| nl.lang.value = dom.getAttrib(n, 'lang'); | ||||
| nl.usemap.value = dom.getAttrib(n, 'usemap'); | ||||
| nl.longdesc.value = dom.getAttrib(n, 'longdesc'); | ||||
| nl.insert.value = ed.getLang('update'); | ||||
| if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover'))) | ||||
| nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); | ||||
| if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout'))) | ||||
| nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); | ||||
| if (ed.settings.inline_styles) { | ||||
| // Move attribs to styles | ||||
| if (dom.getAttrib(n, 'align')) | ||||
| this.updateStyle('align'); | ||||
| if (dom.getAttrib(n, 'hspace')) | ||||
| this.updateStyle('hspace'); | ||||
| if (dom.getAttrib(n, 'border')) | ||||
| this.updateStyle('border'); | ||||
| if (dom.getAttrib(n, 'vspace')) | ||||
| this.updateStyle('vspace'); | ||||
| } | ||||
| } | ||||
| // Setup browse button | ||||
| document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); | ||||
| if (isVisible('srcbrowser')) | ||||
| document.getElementById('src').style.width = '260px'; | ||||
| // Setup browse button | ||||
| document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image'); | ||||
| if (isVisible('overbrowser')) | ||||
| document.getElementById('onmouseoversrc').style.width = '260px'; | ||||
| // Setup browse button | ||||
| document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image'); | ||||
| if (isVisible('outbrowser')) | ||||
| document.getElementById('onmouseoutsrc').style.width = '260px'; | ||||
| // If option enabled default contrain proportions to checked | ||||
| if (ed.getParam("advimage_constrain_proportions", true)) | ||||
| f.constrain.checked = true; | ||||
| // Check swap image if valid data | ||||
| if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value) | ||||
| this.setSwapImage(true); | ||||
| else | ||||
| this.setSwapImage(false); | ||||
| this.changeAppearance(); | ||||
| this.showPreviewImage(nl.src.value, 1); | ||||
| }, | ||||
| insert : function(file, title) { | ||||
| var ed = tinyMCEPopup.editor, t = this, f = document.forms[0]; | ||||
| if (f.src.value === '') { | ||||
| if (ed.selection.getNode().nodeName == 'IMG') { | ||||
| ed.dom.remove(ed.selection.getNode()); | ||||
| ed.execCommand('mceRepaint'); | ||||
| } | ||||
| tinyMCEPopup.close(); | ||||
| return; | ||||
| } | ||||
| if (tinyMCEPopup.getParam("accessibility_warnings", 1)) { | ||||
| if (!f.alt.value) { | ||||
| tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) { | ||||
| if (s) | ||||
| t.insertAndClose(); | ||||
| }); | ||||
| return; | ||||
| } | ||||
| } | ||||
| t.insertAndClose(); | ||||
| }, | ||||
| insertAndClose : function() { | ||||
| var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el; | ||||
| tinyMCEPopup.restoreSelection(); | ||||
| // Fixes crash in Safari | ||||
| if (tinymce.isWebKit) | ||||
| ed.getWin().focus(); | ||||
| if (!ed.settings.inline_styles) { | ||||
| args = { | ||||
| vspace : nl.vspace.value, | ||||
| hspace : nl.hspace.value, | ||||
| border : nl.border.value, | ||||
| align : getSelectValue(f, 'align') | ||||
| }; | ||||
| } else { | ||||
| // Remove deprecated values | ||||
| args = { | ||||
| vspace : '', | ||||
| hspace : '', | ||||
| border : '', | ||||
| align : '' | ||||
| }; | ||||
| } | ||||
| tinymce.extend(args, { | ||||
| src : nl.src.value, | ||||
| width : nl.width.value, | ||||
| height : nl.height.value, | ||||
| alt : nl.alt.value, | ||||
| title : nl.title.value, | ||||
| 'class' : getSelectValue(f, 'class_list'), | ||||
| style : nl.style.value, | ||||
| id : nl.id.value, | ||||
| dir : nl.dir.value, | ||||
| lang : nl.lang.value, | ||||
| usemap : nl.usemap.value, | ||||
| longdesc : nl.longdesc.value | ||||
| }); | ||||
| args.onmouseover = args.onmouseout = ''; | ||||
| if (f.onmousemovecheck.checked) { | ||||
| if (nl.onmouseoversrc.value) | ||||
| args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';"; | ||||
| if (nl.onmouseoutsrc.value) | ||||
| args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';"; | ||||
| } | ||||
| el = ed.selection.getNode(); | ||||
| if (el && el.nodeName == 'IMG') { | ||||
| ed.dom.setAttribs(el, args); | ||||
| } else { | ||||
| ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1}); | ||||
| ed.dom.setAttribs('__mce_tmp', args); | ||||
| ed.dom.setAttrib('__mce_tmp', 'id', ''); | ||||
| ed.undoManager.add(); | ||||
| } | ||||
| tinyMCEPopup.close(); | ||||
| }, | ||||
| getAttrib : function(e, at) { | ||||
| var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2; | ||||
| if (ed.settings.inline_styles) { | ||||
| switch (at) { | ||||
| case 'align': | ||||
| if (v = dom.getStyle(e, 'float')) | ||||
| return v; | ||||
| if (v = dom.getStyle(e, 'vertical-align')) | ||||
| return v; | ||||
| break; | ||||
| case 'hspace': | ||||
| v = dom.getStyle(e, 'margin-left') | ||||
| v2 = dom.getStyle(e, 'margin-right'); | ||||
| if (v && v == v2) | ||||
| return parseInt(v.replace(/[^0-9]/g, '')); | ||||
| break; | ||||
| case 'vspace': | ||||
| v = dom.getStyle(e, 'margin-top') | ||||
| v2 = dom.getStyle(e, 'margin-bottom'); | ||||
| if (v && v == v2) | ||||
| return parseInt(v.replace(/[^0-9]/g, '')); | ||||
| break; | ||||
| case 'border': | ||||
| v = 0; | ||||
| tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) { | ||||
| sv = dom.getStyle(e, 'border-' + sv + '-width'); | ||||
| // False or not the same as prev | ||||
| if (!sv || (sv != v && v !== 0)) { | ||||
| v = 0; | ||||
| return false; | ||||
| } | ||||
| if (sv) | ||||
| v = sv; | ||||
| }); | ||||
| if (v) | ||||
| return parseInt(v.replace(/[^0-9]/g, '')); | ||||
| break; | ||||
| } | ||||
| } | ||||
| if (v = dom.getAttrib(e, at)) | ||||
| return v; | ||||
| return ''; | ||||
| }, | ||||
| setSwapImage : function(st) { | ||||
| var f = document.forms[0]; | ||||
| f.onmousemovecheck.checked = st; | ||||
| setBrowserDisabled('overbrowser', !st); | ||||
| setBrowserDisabled('outbrowser', !st); | ||||
| if (f.over_list) | ||||
| f.over_list.disabled = !st; | ||||
| if (f.out_list) | ||||
| f.out_list.disabled = !st; | ||||
| f.onmouseoversrc.disabled = !st; | ||||
| f.onmouseoutsrc.disabled = !st; | ||||
| }, | ||||
| fillClassList : function(id) { | ||||
| var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; | ||||
| if (v = tinyMCEPopup.getParam('theme_advanced_styles')) { | ||||
| cl = []; | ||||
| tinymce.each(v.split(';'), function(v) { | ||||
| var p = v.split('='); | ||||
| cl.push({'title' : p[0], 'class' : p[1]}); | ||||
| }); | ||||
| } else | ||||
| cl = tinyMCEPopup.editor.dom.getClasses(); | ||||
| if (cl.length > 0) { | ||||
| lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); | ||||
| tinymce.each(cl, function(o) { | ||||
| lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']); | ||||
| }); | ||||
| } else | ||||
| dom.remove(dom.getParent(id, 'tr')); | ||||
| }, | ||||
| fillFileList : function(id, l) { | ||||
| var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; | ||||
| l = window[l]; | ||||
| if (l && l.length > 0) { | ||||
| lst.options[lst.options.length] = new Option('', ''); | ||||
| tinymce.each(l, function(o) { | ||||
| lst.options[lst.options.length] = new Option(o[0], o[1]); | ||||
| }); | ||||
| } else | ||||
| dom.remove(dom.getParent(id, 'tr')); | ||||
| }, | ||||
| resetImageData : function() { | ||||
| var f = document.forms[0]; | ||||
| f.elements.width.value = f.elements.height.value = ''; | ||||
| }, | ||||
| updateImageData : function(img, st) { | ||||
| var f = document.forms[0]; | ||||
| if (!st) { | ||||
| f.elements.width.value = img.width; | ||||
| f.elements.height.value = img.height; | ||||
| } | ||||
| this.preloadImg = img; | ||||
| }, | ||||
| changeAppearance : function() { | ||||
| var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg'); | ||||
| if (img) { | ||||
| if (ed.getParam('inline_styles')) { | ||||
| ed.dom.setAttrib(img, 'style', f.style.value); | ||||
| } else { | ||||
| img.align = f.align.value; | ||||
| img.border = f.border.value; | ||||
| img.hspace = f.hspace.value; | ||||
| img.vspace = f.vspace.value; | ||||
| } | ||||
| } | ||||
| }, | ||||
| changeHeight : function() { | ||||
| var f = document.forms[0], tp, t = this; | ||||
| if (!f.constrain.checked || !t.preloadImg) { | ||||
| return; | ||||
| } | ||||
| if (f.width.value == "" || f.height.value == "") | ||||
| return; | ||||
| tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height; | ||||
| f.height.value = tp.toFixed(0); | ||||
| }, | ||||
| changeWidth : function() { | ||||
| var f = document.forms[0], tp, t = this; | ||||
| if (!f.constrain.checked || !t.preloadImg) { | ||||
| return; | ||||
| } | ||||
| if (f.width.value == "" || f.height.value == "") | ||||
| return; | ||||
| tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width; | ||||
| f.width.value = tp.toFixed(0); | ||||
| }, | ||||
| updateStyle : function(ty) { | ||||
| var dom = tinyMCEPopup.dom, st, v, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value}); | ||||
| if (tinyMCEPopup.editor.settings.inline_styles) { | ||||
| // Handle align | ||||
| if (ty == 'align') { | ||||
| dom.setStyle(img, 'float', ''); | ||||
| dom.setStyle(img, 'vertical-align', ''); | ||||
| v = getSelectValue(f, 'align'); | ||||
| if (v) { | ||||
| if (v == 'left' || v == 'right') | ||||
| dom.setStyle(img, 'float', v); | ||||
| else | ||||
| img.style.verticalAlign = v; | ||||
| } | ||||
| } | ||||
| // Handle border | ||||
| if (ty == 'border') { | ||||
| dom.setStyle(img, 'border', ''); | ||||
| v = f.border.value; | ||||
| if (v || v == '0') { | ||||
| if (v == '0') | ||||
| img.style.border = '0'; | ||||
| else | ||||
| img.style.border = v + 'px solid black'; | ||||
| } | ||||
| } | ||||
| // Handle hspace | ||||
| if (ty == 'hspace') { | ||||
| dom.setStyle(img, 'marginLeft', ''); | ||||
| dom.setStyle(img, 'marginRight', ''); | ||||
| v = f.hspace.value; | ||||
| if (v) { | ||||
| img.style.marginLeft = v + 'px'; | ||||
| img.style.marginRight = v + 'px'; | ||||
| } | ||||
| } | ||||
| // Handle vspace | ||||
| if (ty == 'vspace') { | ||||
| dom.setStyle(img, 'marginTop', ''); | ||||
| dom.setStyle(img, 'marginBottom', ''); | ||||
| v = f.vspace.value; | ||||
| if (v) { | ||||
| img.style.marginTop = v + 'px'; | ||||
| img.style.marginBottom = v + 'px'; | ||||
| } | ||||
| } | ||||
| // Merge | ||||
| dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText)); | ||||
| } | ||||
| }, | ||||
| changeMouseMove : function() { | ||||
| }, | ||||
| showPreviewImage : function(u, st) { | ||||
| if (!u) { | ||||
| tinyMCEPopup.dom.setHTML('prev', ''); | ||||
| return; | ||||
| } | ||||
| if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true)) | ||||
| this.resetImageData(); | ||||
| u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u); | ||||
| if (!st) | ||||
| tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this);" onerror="ImageDialog.resetImageData();" />'); | ||||
| else | ||||
| tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this, 1);" />'); | ||||
| } | ||||
| }; | ||||
| ImageDialog.preInit(); | ||||
| tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); | ||||
