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
() {
var
f = document.forms[0], ed = tinyMCEPopup.editor;
document.getElementById(
'srcbrowsercontainer'
).innerHTML = getBrowserHTML(
'srcbrowser'
,
'src'
,
'image'
,
'theme_advanced_image'
);
if
(isVisible(
'srcbrowser'
))
document.getElementById(
'src'
).style.width =
'180px'
;
e = ed.selection.getNode();
this
.fillFileList(
'image_list'
,
'tinyMCEImageList'
);
if
(e.nodeName ==
'IMG'
) {
f.src.value = ed.dom.getAttrib(e,
'src'
);
f.alt.value = ed.dom.getAttrib(e,
'alt'
);
f.border.value =
this
.getAttrib(e,
'border'
);
f.vspace.value =
this
.getAttrib(e,
'vspace'
);
f.hspace.value =
this
.getAttrib(e,
'hspace'
);
f.width.value = ed.dom.getAttrib(e,
'width'
);
f.height.value = ed.dom.getAttrib(e,
'height'
);
f.insert.value = ed.getLang(
'update'
);
this
.styleVal = ed.dom.getAttrib(e,
'style'
);
selectByValue(f,
'image_list'
, f.src.value);
selectByValue(f,
'align'
,
this
.getAttrib(e,
'align'
));
this
.updateStyle();
}
},
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'
));
},
update :
function
() {
var
f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;
tinyMCEPopup.restoreSelection();
if
(f.src.value ===
''
) {
if
(ed.selection.getNode().nodeName ==
'IMG'
) {
ed.dom.remove(ed.selection.getNode());
ed.execCommand(
'mceRepaint'
);
}
tinyMCEPopup.close();
return
;
}
if
(!ed.settings.inline_styles) {
args = tinymce.extend(args, {
vspace : nl.vspace.value,
hspace : nl.hspace.value,
border : nl.border.value,
align : getSelectValue(f,
'align'
)
});
}
else
args.style =
this
.styleVal;
tinymce.extend(args, {
src : f.src.value,
alt : f.alt.value,
width : f.width.value,
height : f.height.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();
},
updateStyle :
function
() {
var
dom = tinyMCEPopup.dom, st, v, f = document.forms[0];
if
(tinyMCEPopup.editor.settings.inline_styles) {
st = tinyMCEPopup.dom.parseStyle(
this
.styleVal);
v = getSelectValue(f,
'align'
);
if
(v) {
if
(v ==
'left'
|| v ==
'right'
) {
st[
'float'
] = v;
delete
st[
'vertical-align'
];
}
else
{
st[
'vertical-align'
] = v;
delete
st[
'float'
];
}
}
else
{
delete
st[
'float'
];
delete
st[
'vertical-align'
];
}
v = f.border.value;
if
(v || v ==
'0'
) {
if
(v ==
'0'
)
st[
'border'
] =
'0'
;
else
st[
'border'
] = v +
'px solid black'
;
}
else
delete
st[
'border'
];
v = f.hspace.value;
if
(v) {
delete
st[
'margin'
];
st[
'margin-left'
] = v +
'px'
;
st[
'margin-right'
] = v +
'px'
;
}
else
{
delete
st[
'margin-left'
];
delete
st[
'margin-right'
];
}
v = f.vspace.value;
if
(v) {
delete
st[
'margin'
];
st[
'margin-top'
] = v +
'px'
;
st[
'margin-bottom'
] = v +
'px'
;
}
else
{
delete
st[
'margin-top'
];
delete
st[
'margin-bottom'
];
}
st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st));
this
.styleVal = dom.serializeStyle(st);
}
},
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'
);
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
''
;
},
resetImageData :
function
() {
var
f = document.forms[0];
f.width.value = f.height.value =
""
;
},
updateImageData :
function
() {
var
f = document.forms[0], t = ImageDialog;
if
(f.width.value ==
""
)
f.width.value = t.preloadImg.width;
if
(f.height.value ==
""
)
f.height.value = t.preloadImg.height;
},
getImageData :
function
() {
var
f = document.forms[0];
this
.preloadImg =
new
Image();
this
.preloadImg.onload =
this
.updateImageData;
this
.preloadImg.onerror =
this
.resetImageData;
this
.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);
}
};
ImageDialog.preInit();
tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);