1
+ − 1
// Some global instances, this will be filled later
+ − 2
var tinyMCE = null, tinyMCELang = null;
+ − 3
+ − 4
function TinyMCE_Popup() {
+ − 5
};
+ − 6
+ − 7
TinyMCE_Popup.prototype = {
+ − 8
findWin : function(w) {
+ − 9
var c;
+ − 10
+ − 11
// Check parents
+ − 12
c = w;
+ − 13
while (c && (c = c.parent) != null) {
+ − 14
if (typeof(c.tinyMCE) != "undefined")
+ − 15
return c;
+ − 16
}
+ − 17
+ − 18
// Check openers
+ − 19
c = w;
+ − 20
while (c && (c = c.opener) != null) {
+ − 21
if (typeof(c.tinyMCE) != "undefined")
+ − 22
return c;
+ − 23
}
+ − 24
+ − 25
// Try top
+ − 26
if (typeof(top.tinyMCE) != "undefined")
+ − 27
return top;
+ − 28
+ − 29
return null;
+ − 30
},
+ − 31
+ − 32
init : function() {
+ − 33
var win = window.opener ? window.opener : window.dialogArguments, c;
+ − 34
var inst;
+ − 35
+ − 36
if (!win)
+ − 37
win = this.findWin(window);
+ − 38
+ − 39
if (!win) {
+ − 40
alert("tinyMCE object reference not found from popup.");
+ − 41
return;
+ − 42
}
+ − 43
+ − 44
window.opener = win;
+ − 45
this.windowOpener = win;
+ − 46
this.onLoadEval = "";
+ − 47
+ − 48
// Setup parent references
+ − 49
tinyMCE = win.tinyMCE;
+ − 50
tinyMCELang = win.tinyMCELang;
+ − 51
+ − 52
inst = tinyMCE.selectedInstance;
+ − 53
this.isWindow = tinyMCE.getWindowArg('mce_inside_iframe', false) == false;
+ − 54
this.storeSelection = (tinyMCE.isRealIE) && !this.isWindow && tinyMCE.getWindowArg('mce_store_selection', true);
+ − 55
+ − 56
if (this.isWindow)
+ − 57
window.focus();
+ − 58
+ − 59
// Store selection
+ − 60
if (this.storeSelection)
+ − 61
inst.selectionBookmark = inst.selection.getBookmark(true);
+ − 62
+ − 63
// Setup dir
+ − 64
if (tinyMCELang['lang_dir'])
+ − 65
document.dir = tinyMCELang['lang_dir'];
+ − 66
+ − 67
// Setup title
+ − 68
var re = new RegExp('{|\\\$|}', 'g');
+ − 69
var title = document.title.replace(re, "");
+ − 70
if (typeof tinyMCELang[title] != "undefined") {
+ − 71
var divElm = document.createElement("div");
+ − 72
divElm.innerHTML = tinyMCELang[title];
+ − 73
document.title = divElm.innerHTML;
+ − 74
+ − 75
if (tinyMCE.setWindowTitle != null)
+ − 76
tinyMCE.setWindowTitle(window, divElm.innerHTML);
+ − 77
}
+ − 78
+ − 79
// Output Popup CSS class
+ − 80
document.write('<link href="' + tinyMCE.getParam("popups_css") + '" rel="stylesheet" type="text/css">');
+ − 81
+ − 82
if (tinyMCE.getParam("popups_css_add")) {
+ − 83
c = tinyMCE.getParam("popups_css_add");
+ − 84
+ − 85
// Is relative
+ − 86
if (c.indexOf('://') == -1 && c.charAt(0) != '/')
+ − 87
c = tinyMCE.documentBasePath + "/" + c;
+ − 88
+ − 89
document.write('<link href="' + c + '" rel="stylesheet" type="text/css">');
+ − 90
}
+ − 91
+ − 92
tinyMCE.addEvent(window, "load", this.onLoad);
+ − 93
},
+ − 94
+ − 95
onLoad : function() {
+ − 96
var dir, i, elms, body = document.body;
+ − 97
+ − 98
if (tinyMCE.getWindowArg('mce_replacevariables', true))
+ − 99
body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs);
+ − 100
+ − 101
dir = tinyMCE.selectedInstance.settings['directionality'];
+ − 102
if (dir == "rtl" && document.forms && document.forms.length > 0) {
+ − 103
elms = document.forms[0].elements;
+ − 104
for (i=0; i<elms.length; i++) {
+ − 105
if ((elms[i].type == "text" || elms[i].type == "textarea") && elms[i].getAttribute("dir") != "ltr")
+ − 106
elms[i].dir = dir;
+ − 107
}
+ − 108
}
+ − 109
+ − 110
if (body.style.display == 'none')
+ − 111
body.style.display = 'block';
+ − 112
+ − 113
// Execute real onload (Opera fix)
+ − 114
if (tinyMCEPopup.onLoadEval != "")
+ − 115
eval(tinyMCEPopup.onLoadEval);
+ − 116
},
+ − 117
+ − 118
executeOnLoad : function(str) {
+ − 119
if (tinyMCE.isOpera)
+ − 120
this.onLoadEval = str;
+ − 121
else
+ − 122
eval(str);
+ − 123
},
+ − 124
+ − 125
resizeToInnerSize : function() {
+ − 126
// Netscape 7.1 workaround
+ − 127
if (this.isWindow && tinyMCE.isNS71) {
+ − 128
window.resizeBy(0, 10);
+ − 129
return;
+ − 130
}
+ − 131
+ − 132
if (this.isWindow) {
+ − 133
var doc = document;
+ − 134
var body = doc.body;
+ − 135
var oldMargin, wrapper, iframe, nodes, dx, dy;
+ − 136
+ − 137
if (body.style.display == 'none')
+ − 138
body.style.display = 'block';
+ − 139
+ − 140
// Remove margin
+ − 141
oldMargin = body.style.margin;
+ − 142
body.style.margin = '0';
+ − 143
+ − 144
// Create wrapper
+ − 145
wrapper = doc.createElement("div");
+ − 146
wrapper.id = 'mcBodyWrapper';
+ − 147
wrapper.style.display = 'none';
+ − 148
wrapper.style.margin = '0';
+ − 149
+ − 150
// Wrap body elements
+ − 151
nodes = doc.body.childNodes;
+ − 152
for (var i=nodes.length-1; i>=0; i--) {
+ − 153
if (wrapper.hasChildNodes())
+ − 154
wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild);
+ − 155
else
+ − 156
wrapper.appendChild(nodes[i].cloneNode(true));
+ − 157
+ − 158
nodes[i].parentNode.removeChild(nodes[i]);
+ − 159
}
+ − 160
+ − 161
// Add wrapper
+ − 162
doc.body.appendChild(wrapper);
+ − 163
+ − 164
// Create iframe
+ − 165
iframe = document.createElement("iframe");
+ − 166
iframe.id = "mcWinIframe";
+ − 167
iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings['default_document'];
+ − 168
iframe.width = "100%";
+ − 169
iframe.height = "100%";
+ − 170
iframe.style.margin = '0';
+ − 171
+ − 172
// Add iframe
+ − 173
doc.body.appendChild(iframe);
+ − 174
+ − 175
// Measure iframe
+ − 176
iframe = document.getElementById('mcWinIframe');
+ − 177
dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth;
+ − 178
dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight;
+ − 179
+ − 180
// Resize window
+ − 181
// tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy);
+ − 182
window.resizeBy(dx, dy);
+ − 183
+ − 184
// Hide iframe and show wrapper
+ − 185
body.style.margin = oldMargin;
+ − 186
iframe.style.display = 'none';
+ − 187
wrapper.style.display = 'block';
+ − 188
}
+ − 189
},
+ − 190
+ − 191
resizeToContent : function() {
+ − 192
var isMSIE = (navigator.appName == "Microsoft Internet Explorer");
+ − 193
var isOpera = (navigator.userAgent.indexOf("Opera") != -1);
+ − 194
+ − 195
if (isOpera)
+ − 196
return;
+ − 197
+ − 198
if (isMSIE) {
+ − 199
try { window.resizeTo(10, 10); } catch (e) {}
+ − 200
+ − 201
var elm = document.body;
+ − 202
var width = elm.offsetWidth;
+ − 203
var height = elm.offsetHeight;
+ − 204
var dx = (elm.scrollWidth - width) + 4;
+ − 205
var dy = elm.scrollHeight - height;
+ − 206
+ − 207
try { window.resizeBy(dx, dy); } catch (e) {}
+ − 208
} else {
+ − 209
window.scrollBy(1000, 1000);
+ − 210
if (window.scrollX > 0 || window.scrollY > 0) {
+ − 211
window.resizeBy(window.innerWidth * 2, window.innerHeight * 2);
+ − 212
window.sizeToContent();
+ − 213
window.scrollTo(0, 0);
+ − 214
var x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0);
+ − 215
var y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0);
+ − 216
window.moveTo(x, y);
+ − 217
}
+ − 218
}
+ − 219
},
+ − 220
+ − 221
getWindowArg : function(name, default_value) {
+ − 222
return tinyMCE.getWindowArg(name, default_value);
+ − 223
},
+ − 224
+ − 225
restoreSelection : function() {
+ − 226
if (this.storeSelection) {
+ − 227
var inst = tinyMCE.selectedInstance;
+ − 228
+ − 229
inst.getWin().focus();
+ − 230
+ − 231
if (inst.selectionBookmark)
+ − 232
inst.selection.moveToBookmark(inst.selectionBookmark);
+ − 233
}
+ − 234
},
+ − 235
+ − 236
execCommand : function(command, user_interface, value) {
+ − 237
var inst = tinyMCE.selectedInstance;
+ − 238
+ − 239
this.restoreSelection();
+ − 240
inst.execCommand(command, user_interface, value);
+ − 241
+ − 242
// Store selection
+ − 243
if (this.storeSelection)
+ − 244
inst.selectionBookmark = inst.selection.getBookmark(true);
+ − 245
},
+ − 246
+ − 247
close : function() {
+ − 248
tinyMCE.closeWindow(window);
+ − 249
},
+ − 250
+ − 251
pickColor : function(e, element_id) {
+ − 252
tinyMCE.selectedInstance.execCommand('mceColorPicker', true, {
+ − 253
element_id : element_id,
+ − 254
document : document,
+ − 255
window : window,
+ − 256
store_selection : false
+ − 257
});
+ − 258
},
+ − 259
+ − 260
openBrowser : function(element_id, type, option) {
+ − 261
var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback"));
+ − 262
var url = document.getElementById(element_id).value;
+ − 263
+ − 264
tinyMCE.setWindowArg("window", window);
+ − 265
tinyMCE.setWindowArg("document", document);
+ − 266
+ − 267
// Call to external callback
+ − 268
if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined")
+ − 269
alert("Callback function: " + cb + " could not be found.");
+ − 270
else
+ − 271
eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);");
+ − 272
},
+ − 273
+ − 274
importClass : function(c) {
+ − 275
window[c] = function() {};
+ − 276
+ − 277
for (var n in window.opener[c].prototype)
+ − 278
window[c].prototype[n] = window.opener[c].prototype[n];
+ − 279
+ − 280
window[c].constructor = window.opener[c].constructor;
+ − 281
}
+ − 282
+ − 283
};
+ − 284
+ − 285
// Setup global instance
+ − 286
var tinyMCEPopup = new TinyMCE_Popup();
+ − 287
+ − 288
tinyMCEPopup.init();