(
function
() {
var
DOM = tinymce.DOM, Element = tinymce.dom.Element, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;
tinymce.create(
'tinymce.plugins.InlinePopups'
, {
init :
function
(ed, url) {
ed.onBeforeRenderUI.add(
function
() {
ed.windowManager =
new
tinymce.InlineWindowManager(ed);
DOM.loadCSS(url +
'/skins/'
+ (ed.settings.inlinepopups_skin ||
'clearlooks2'
) +
"/window.css"
);
});
},
getInfo :
function
() {
return
{
longname :
'InlinePopups'
,
author :
'Moxiecode Systems AB'
,
version : tinymce.majorVersion +
"."
+ tinymce.minorVersion
};
}
});
tinymce.create(
'tinymce.InlineWindowManager:tinymce.WindowManager'
, {
InlineWindowManager :
function
(ed) {
var
t =
this
;
t.parent(ed);
t.zIndex = 300000;
t.count = 0;
t.windows = {};
},
open :
function
(f, p) {
var
t =
this
, id, opt =
''
, ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u;
f = f || {};
p = p || {};
if
(!f.inline)
return
t.parent(f, p);
if
(!f.type)
t.bookmark = ed.selection.getBookmark(
'simple'
);
id = DOM.uniqueId();
vp = DOM.getViewPort();
f.width = parseInt(f.width || 320);
f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0);
f.min_width = parseInt(f.min_width || 150);
f.min_height = parseInt(f.min_height || 100);
f.max_width = parseInt(f.max_width || 2000);
f.max_height = parseInt(f.max_height || 2000);
f.left = f.left || Math.round(Math.max(vp.x, vp.x + (vp.w / 2.0) - (f.width / 2.0)));
f.top = f.top || Math.round(Math.max(vp.y, vp.y + (vp.h / 2.0) - (f.height / 2.0)));
f.movable = f.resizable =
true
;
p.mce_width = f.width;
p.mce_height = f.height;
p.mce_inline =
true
;
p.mce_window_id = id;
p.mce_auto_focus = f.auto_focus;
t.features = f;
t.params = p;
t.onOpen.dispatch(t, f, p);
if
(f.type) {
opt +=
' mceModal'
;
if
(f.type)
opt +=
' mce'
+ f.type.substring(0, 1).toUpperCase() + f.type.substring(1);
f.resizable =
false
;
}
if
(f.statusbar)
opt +=
' mceStatusbar'
;
if
(f.resizable)
opt +=
' mceResizable'
;
if
(f.minimizable)
opt +=
' mceMinimizable'
;
if
(f.maximizable)
opt +=
' mceMaximizable'
;
if
(f.movable)
opt +=
' mceMovable'
;
t._addAll(DOM.doc.body,
[
'div'
, {id : id,
'class'
: ed.settings.inlinepopups_skin ||
'clearlooks2'
, style :
'width:100px;height:100px'
},
[
'div'
, {id : id +
'_wrapper'
,
'class'
:
'mceWrapper'
+ opt},
[
'div'
, {id : id +
'_top'
,
'class'
:
'mceTop'
},
[
'div'
, {
'class'
:
'mceLeft'
}],
[
'div'
, {
'class'
:
'mceCenter'
}],
[
'div'
, {
'class'
:
'mceRight'
}],
[
'span'
, {id : id +
'_title'
}, f.title ||
''
]
],
[
'div'
, {id : id +
'_middle'
,
'class'
:
'mceMiddle'
},
[
'div'
, {id : id +
'_left'
,
'class'
:
'mceLeft'
}],
[
'span'
, {id : id +
'_content'
}],
[
'div'
, {id : id +
'_right'
,
'class'
:
'mceRight'
}]
],
[
'div'
, {id : id +
'_bottom'
,
'class'
:
'mceBottom'
},
[
'div'
, {
'class'
:
'mceLeft'
}],
[
'div'
, {
'class'
:
'mceCenter'
}],
[
'div'
, {
'class'
:
'mceRight'
}],
[
'span'
, {id : id +
'_status'
},
'Content'
]
],
[
'a'
, {
'class'
:
'mceMove'
, tabindex :
'-1'
, href :
'javascript:;'
}],
[
'a'
, {
'class'
:
'mceMin'
, tabindex :
'-1'
, href :
'javascript:;'
, onmousedown :
'return false;'
}],
[
'a'
, {
'class'
:
'mceMax'
, tabindex :
'-1'
, href :
'javascript:;'
, onmousedown :
'return false;'
}],
[
'a'
, {
'class'
:
'mceMed'
, tabindex :
'-1'
, href :
'javascript:;'
, onmousedown :
'return false;'
}],
[
'a'
, {
'class'
:
'mceClose'
, tabindex :
'-1'
, href :
'javascript:;'
, onmousedown :
'return false;'
}],
[
'a'
, {id : id +
'_resize_n'
,
'class'
:
'mceResize mceResizeN'
, tabindex :
'-1'
, href :
'javascript:;'
}],
[
'a'
, {id : id +
'_resize_s'
,
'class'
:
'mceResize mceResizeS'
, tabindex :
'-1'
, href :
'javascript:;'
}],
[
'a'
, {id : id +
'_resize_w'
,
'class'
:
'mceResize mceResizeW'
, tabindex :
'-1'
, href :
'javascript:;'
}],
[
'a'
, {id : id +
'_resize_e'
,
'class'
:
'mceResize mceResizeE'
, tabindex :
'-1'
, href :
'javascript:;'
}],
[
'a'
, {id : id +
'_resize_nw'
,
'class'
:
'mceResize mceResizeNW'
, tabindex :
'-1'
, href :
'javascript:;'
}],
[
'a'
, {id : id +
'_resize_ne'
,
'class'
:
'mceResize mceResizeNE'
, tabindex :
'-1'
, href :
'javascript:;'
}],
[
'a'
, {id : id +
'_resize_sw'
,
'class'
:
'mceResize mceResizeSW'
, tabindex :
'-1'
, href :
'javascript:;'
}],
[
'a'
, {id : id +
'_resize_se'
,
'class'
:
'mceResize mceResizeSE'
, tabindex :
'-1'
, href :
'javascript:;'
}]
]
]
);
DOM.setStyles(id, {top : -10000, left : -10000});
if
(tinymce.isGecko)
DOM.setStyle(id,
'overflow'
,
'auto'
);
if
(!f.type) {
dw += DOM.get(id +
'_left'
).clientWidth;
dw += DOM.get(id +
'_right'
).clientWidth;
dh += DOM.get(id +
'_top'
).clientHeight;
dh += DOM.get(id +
'_bottom'
).clientHeight;
}
DOM.setStyles(id, {top : f.top, left : f.left, width : f.width + dw, height : f.height + dh});
u = f.url || f.file;
if
(u) {
if
(tinymce.relaxedDomain)
u += (u.indexOf(
'?'
) == -1 ?
'?'
:
'&'
) +
'mce_rdomain='
+ tinymce.relaxedDomain;
u = tinymce._addVer(u);
}
if
(!f.type) {
DOM.add(id +
'_content'
,
'iframe'
, {id : id +
'_ifr'
, src :
'javascript:""'
, frameBorder : 0, style :
'border:0;width:10px;height:10px'
});
DOM.setStyles(id +
'_ifr'
, {width : f.width, height : f.height});
DOM.setAttrib(id +
'_ifr'
,
'src'
, u);
}
else
{
DOM.add(id +
'_wrapper'
,
'a'
, {id : id +
'_ok'
,
'class'
:
'mceButton mceOk'
, href :
'javascript:;'
, onmousedown :
'return false;'
},
'Ok'
);
if
(f.type ==
'confirm'
)
DOM.add(id +
'_wrapper'
,
'a'
, {
'class'
:
'mceButton mceCancel'
, href :
'javascript:;'
, onmousedown :
'return false;'
},
'Cancel'
);
DOM.add(id +
'_middle'
,
'div'
, {
'class'
:
'mceIcon'
});
DOM.setHTML(id +
'_content'
, f.content.replace(
'\n'
,
'<br />'
));
}
mdf = Event.add(id,
'mousedown'
,
function
(e) {
var
n = e.target, w, vp;
w = t.windows[id];
t.focus(id);
if
(n.nodeName ==
'A'
|| n.nodeName ==
'a'
) {
if
(n.className ==
'mceMax'
) {
w.oldPos = w.element.getXY();
w.oldSize = w.element.getSize();
vp = DOM.getViewPort();
vp.w -= 2;
vp.h -= 2;
w.element.moveTo(vp.x, vp.y);
w.element.resizeTo(vp.w, vp.h);
DOM.setStyles(id +
'_ifr'
, {width : vp.w - w.deltaWidth, height : vp.h - w.deltaHeight});
DOM.addClass(id +
'_wrapper'
,
'mceMaximized'
);
}
else
if
(n.className ==
'mceMed'
) {
w.element.moveTo(w.oldPos.x, w.oldPos.y);
w.element.resizeTo(w.oldSize.w, w.oldSize.h);
w.iframeElement.resizeTo(w.oldSize.w - w.deltaWidth, w.oldSize.h - w.deltaHeight);
DOM.removeClass(id +
'_wrapper'
,
'mceMaximized'
);
}
else
if
(n.className ==
'mceMove'
)
return
t._startDrag(id, e, n.className);
else
if
(DOM.hasClass(n,
'mceResize'
))
return
t._startDrag(id, e, n.className.substring(13));
}
});
clf = Event.add(id,
'click'
,
function
(e) {
var
n = e.target;
t.focus(id);
if
(n.nodeName ==
'A'
|| n.nodeName ==
'a'
) {
switch
(n.className) {
case
'mceClose'
:
t.close(
null
, id);
return
Event.cancel(e);
case
'mceButton mceOk'
:
case
'mceButton mceCancel'
:
f.button_func(n.className ==
'mceButton mceOk'
);
return
Event.cancel(e);
}
}
});
w = t.windows[id] = {
id : id,
mousedown_func : mdf,
click_func : clf,
element :
new
Element(id, {blocker : 1, container : ed.getContainer()}),
iframeElement :
new
Element(id +
'_ifr'
),
features : f,
deltaWidth : dw,
deltaHeight : dh
};
w.iframeElement.on(
'focus'
,
function
() {
t.focus(id);
});
if
(t.count == 0 && t.editor.getParam(
'dialog_type'
,
'modal'
) ==
'modal'
) {
DOM.add(DOM.doc.body,
'div'
, {
id :
'mceModalBlocker'
,
'class'
: (t.editor.settings.inlinepopups_skin ||
'clearlooks2'
) +
'_modalBlocker'
,
style : {zIndex : t.zIndex - 1}
});
DOM.show(
'mceModalBlocker'
);
}
else
DOM.setStyle(
'mceModalBlocker'
,
'z-index'
, t.zIndex - 1);
if
(tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel))
DOM.setStyles(
'mceModalBlocker'
, {position :
'absolute'
, width : vp.w - 2, height : vp.h - 2});
t.focus(id);
t._fixIELayout(id, 1);
if
(DOM.get(id +
'_ok'
))
DOM.get(id +
'_ok'
).focus();
t.count++;
return
w;
},
focus :
function
(id) {
var
t =
this
, w;
if
(w = t.windows[id]) {
w.zIndex =
this
.zIndex++;
w.element.setStyle(
'zIndex'
, w.zIndex);
w.element.update();
id = id +
'_wrapper'
;
DOM.removeClass(t.lastId,
'mceFocus'
);
DOM.addClass(id,
'mceFocus'
);
t.lastId = id;
}
},
_addAll :
function
(te, ne) {
var
i, n, t =
this
, dom = tinymce.DOM;
if
(is(ne,
'string'
))
te.appendChild(dom.doc.createTextNode(ne));
else
if
(ne.length) {
te = te.appendChild(dom.create(ne[0], ne[1]));
for
(i=2; i<ne.length; i++)
t._addAll(te, ne[i]);
}
},
_startDrag :
function
(id, se, ac) {
var
t =
this
, mu, mm, d = DOM.doc, eb, w = t.windows[id], we = w.element, sp = we.getXY(), p, sz, ph, cp, vp, sx, sy, sex, sey, dx, dy, dw, dh;
cp = {x : 0, y : 0};
vp = DOM.getViewPort();
vp.w -= 2;
vp.h -= 2;
sex = se.screenX;
sey = se.screenY;
dx = dy = dw = dh = 0;
mu = Event.add(d,
'mouseup'
,
function
(e) {
Event.remove(d,
'mouseup'
, mu);
Event.remove(d,
'mousemove'
, mm);
if
(eb)
eb.remove();
we.moveBy(dx, dy);
we.resizeBy(dw, dh);
sz = we.getSize();
DOM.setStyles(id +
'_ifr'
, {width : sz.w - w.deltaWidth, height : sz.h - w.deltaHeight});
t._fixIELayout(id, 1);
return
Event.cancel(e);
});
if
(ac !=
'Move'
)
startMove();
function
startMove() {
if
(eb)
return
;
t._fixIELayout(id, 0);
DOM.add(d.body,
'div'
, {
id :
'mceEventBlocker'
,
'class'
:
'mceEventBlocker '
+ (t.editor.settings.inlinepopups_skin ||
'clearlooks2'
),
style : {zIndex : t.zIndex + 1}
});
if
(tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel))
DOM.setStyles(
'mceEventBlocker'
, {position :
'absolute'
, width : vp.w - 2, height : vp.h - 2});
eb =
new
Element(
'mceEventBlocker'
);
eb.update();
p = we.getXY();
sz = we.getSize();
sx = cp.x + p.x - vp.x;
sy = cp.y + p.y - vp.y;
DOM.add(eb.get(),
'div'
, {id :
'mcePlaceHolder'
,
'class'
:
'mcePlaceHolder'
, style : {left : sx, top : sy, width : sz.w, height : sz.h}});
ph =
new
Element(
'mcePlaceHolder'
);
};
mm = Event.add(d,
'mousemove'
,
function
(e) {
var
x, y, v;
startMove();
x = e.screenX - sex;
y = e.screenY - sey;
switch
(ac) {
case
'ResizeW'
:
dx = x;
dw = 0 - x;
break
;
case
'ResizeE'
:
dw = x;
break
;
case
'ResizeN'
:
case
'ResizeNW'
:
case
'ResizeNE'
:
if
(ac ==
"ResizeNW"
) {
dx = x;
dw = 0 - x;
}
else
if
(ac ==
"ResizeNE"
)
dw = x;
dy = y;
dh = 0 - y;
break
;
case
'ResizeS'
:
case
'ResizeSW'
:
case
'ResizeSE'
:
if
(ac ==
"ResizeSW"
) {
dx = x;
dw = 0 - x;
}
else
if
(ac ==
"ResizeSE"
)
dw = x;
dh = y;
break
;
case
'mceMove'
:
dx = x;
dy = y;
break
;
}
if
(dw < (v = w.features.min_width - sz.w)) {
if
(dx !== 0)
dx += dw - v;
dw = v;
}
if
(dh < (v = w.features.min_height - sz.h)) {
if
(dy !== 0)
dy += dh - v;
dh = v;
}
dw = Math.min(dw, w.features.max_width - sz.w);
dh = Math.min(dh, w.features.max_height - sz.h);
dx = Math.max(dx, vp.x - (sx + vp.x));
dy = Math.max(dy, vp.y - (sy + vp.y));
dx = Math.min(dx, (vp.w + vp.x) - (sx + sz.w + vp.x));
dy = Math.min(dy, (vp.h + vp.y) - (sy + sz.h + vp.y));
if
(dx + dy !== 0) {
if
(sx + dx < 0)
dx = 0;
if
(sy + dy < 0)
dy = 0;
ph.moveTo(sx + dx, sy + dy);
}
if
(dw + dh !== 0)
ph.resizeTo(sz.w + dw, sz.h + dh);
return
Event.cancel(e);
});
return
Event.cancel(se);
},
resizeBy :
function
(dw, dh, id) {
var
w =
this
.windows[id];
if
(w) {
w.element.resizeBy(dw, dh);
w.iframeElement.resizeBy(dw, dh);
}
},
close :
function
(win, id) {
var
t =
this
, w, d = DOM.doc, ix = 0, fw, id;
id = t._findId(id || win);
if
(!t.windows[id]) {
t.parent(win);
return
;
}
t.count--;
if
(t.count == 0)
DOM.remove(
'mceModalBlocker'
);
if
(w = t.windows[id]) {
t.onClose.dispatch(t);
Event.remove(d,
'mousedown'
, w.mousedownFunc);
Event.remove(d,
'click'
, w.clickFunc);
Event.clear(id);
Event.clear(id +
'_ifr'
);
DOM.setAttrib(id +
'_ifr'
,
'src'
,
'javascript:""'
);
w.element.remove();
delete
t.windows[id];
each (t.windows,
function
(w) {
if
(w.zIndex > ix) {
fw = w;
ix = w.zIndex;
}
});
if
(fw)
t.focus(fw.id);
}
},
setTitle :
function
(w, ti) {
var
e;
w =
this
._findId(w);
if
(e = DOM.get(w +
'_title'
))
e.innerHTML = DOM.encode(ti);
},
alert :
function
(txt, cb, s) {
var
t =
this
, w;
w = t.open({
title : t,
type :
'alert'
,
button_func :
function
(s) {
if
(cb)
cb.call(s || t, s);
t.close(
null
, w.id);
},
content : DOM.encode(t.editor.getLang(txt, txt)),
inline : 1,
width : 400,
height : 130
});
},
confirm :
function
(txt, cb, s) {
var
t =
this
, w;
w = t.open({
title : t,
type :
'confirm'
,
button_func :
function
(s) {
if
(cb)
cb.call(s || t, s);
t.close(
null
, w.id);
},
content : DOM.encode(t.editor.getLang(txt, txt)),
inline : 1,
width : 400,
height : 130
});
},
_findId :
function
(w) {
var
t =
this
;
if
(
typeof
(w) ==
'string'
)
return
w;
each(t.windows,
function
(wo) {
var
ifr = DOM.get(wo.id +
'_ifr'
);
if
(ifr && w == ifr.contentWindow) {
w = wo.id;
return
false
;
}
});
return
w;
},
_fixIELayout :
function
(id, s) {
var
w, img;
if
(!tinymce.isIE6)
return
;
each([
'n'
,
's'
,
'w'
,
'e'
,
'nw'
,
'ne'
,
'sw'
,
'se'
],
function
(v) {
var
e = DOM.get(id +
'_resize_'
+ v);
DOM.setStyles(e, {
width : s ? e.clientWidth :
''
,
height : s ? e.clientHeight :
''
,
cursor : DOM.getStyle(e,
'cursor'
, 1)
});
DOM.setStyle(id +
"_bottom"
,
'bottom'
,
'-1px'
);
e = 0;
});
if
(w =
this
.windows[id]) {
w.element.hide();
w.element.show();
each(DOM.select('div,a
', id), function(e, i) {
if (e.currentStyle.backgroundImage != '
none
') {
img = new Image();
img.src = e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/, '
$1
');
}
});
DOM.get(id).style.filter = '
';
}
}
});
// Register plugin
tinymce.PluginManager.add('
inlinepopups', tinymce.plugins.InlinePopups);
})();