var TWikiImageDialog = {
preInit: function() {
var url;
tinyMCEPopup.requireLangPack();
if (url = tinyMCEPopup.getParam("external_image_list_url"))
document.write(
'');
},
twikiVars: null,
getTWikiVar: function(name) {
if (this.twikiVars == null) {
var sets = tinyMCEPopup.getWindowArg("vars");
this.twikiVars = eval(sets);
}
return this.twikiVars[name];
},
expandVariables: function(url) {
this.getTWikiVar(""); // make sure it's loaded
for (var i in this.twikiVars) {
url = url.replace('%' + i + '%', this.twikiVars[i], 'g');
}
return url;
},
twikiURL: function(url) {
url = this.expandVariables(url);
if (url.indexOf('/') == -1) {
var base = tinyMCEPopup.getWindowArg("attach_url");
url = base + url;
}
return url;
},
init: function(ed) {
var f = document.forms[0],
nl = f.elements,
ed = tinyMCEPopup.editor,
dom = ed.dom,
n = ed.selection.getNode();
tinyMCEPopup.resizeToInnerSize();
//this.fillFileList('src_list', 'tinyMCEImageList');
//this.fillFileList('over_list', 'tinyMCEImageList');
//this.fillFileList('out_list', 'tinyMCEImageList');
this.fillAttachments(['src_list', 'over_list', 'out_list']);
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;
}
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: this.twikiURL(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='" +
this.twikiURL(nl.onmouseoversrc.value) + "';";
if (nl.onmouseoutsrc.value) args.onmouseout = "this.src='" +
this.twikiURL(nl.onmouseoutsrc.value) + "';";
}
el = ed.selection.getNode();
if (el && el.nodeName == 'IMG') {
ed.dom.setAttribs(el, args);
} else {
ed.execCommand('mceInsertContent', false, '
', {
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;
},
fillFileList: function(id, l) {
// SMELL: get this from the topic attachments
var dom = tinyMCEPopup.dom,
lst = dom.get(id),
v,
cl;
l = window[l];
lst.options.length = 0;
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'));
},
fillAttachments: function(ids) {
var lsts = new Array();
for (var i = 0; i < ids.length; i++) {
var lst = tinyMCEPopup.dom.get(ids[i]);
lst.options.length = 0;
lsts.push(lst);
}
TWikiTiny.getListOfAttachments(
function(atts) {
var select = document.getElementById("attachments_select");
for (var i = 0; i < atts.length; i++) {
for (var j = 0; j < ids.length; j++) {
/* +1 so as not to overwrite existing null option
* defined in the static HTML. Item2412 */
lsts[j].options[i + 1] =
new Option(atts[i].name, atts[i].name);
}
}
});
},
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 = this.twikiURL(u);
u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u);
if (!st) tinyMCEPopup.dom.setHTML('prev', '
');
else tinyMCEPopup.dom.setHTML('prev', '
');
}
};
TWikiImageDialog.preInit();
tinyMCEPopup.onInit.add(TWikiImageDialog.init, TWikiImageDialog);