Subversion Repositories Sites.tela-botanica.org

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
420 florian 1
/* Functions for the advimage plugin popup */
2
 
3
var preloadImg = null;
4
var orgImageWidth, orgImageHeight;
5
 
6
function preinit() {
7
	// Initialize
8
	tinyMCE.setWindowArg('mce_windowresize', false);
9
 
10
	// Import external list url javascript
11
	var url = tinyMCE.getParam("external_image_list_url");
12
	if (url != null) {
13
		// Fix relative
14
		if (url.charAt(0) != '/' && url.indexOf('://') == -1)
15
			url = tinyMCE.documentBasePath + "/" + url;
16
 
17
		document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');
18
	}
19
}
20
 
21
function convertURL(url, node, on_save) {
22
	return eval("tinyMCEPopup.windowOpener." + tinyMCE.settings['urlconverter_callback'] + "(url, node, on_save);");
23
}
24
 
25
function getImageSrc(str) {
26
	var pos = -1;
27
 
28
	if (!str)
29
		return "";
30
 
31
	if ((pos = str.indexOf('this.src=')) != -1) {
32
		var src = str.substring(pos + 10);
33
 
34
		src = src.substring(0, src.indexOf('\''));
35
 
36
		if (tinyMCE.getParam('convert_urls'))
37
			src = convertURL(src, null, true);
38
 
39
		return src;
40
	}
41
 
42
	return "";
43
}
44
 
45
function init() {
46
	tinyMCEPopup.resizeToInnerSize();
47
 
48
	var formObj = document.forms[0];
49
	var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
50
	var elm = inst.getFocusElement();
51
	var action = "insert";
52
	var html = "";
53
 
54
	// Image list src
55
	html = getImageListHTML('imagelistsrc','src','onSelectMainImage');
56
	if (html == "")
57
		document.getElementById("imagelistsrcrow").style.display = 'none';
58
	else
59
		document.getElementById("imagelistsrccontainer").innerHTML = html;
60
 
61
	// Image list oversrc
62
	html = getImageListHTML('imagelistover','onmouseoversrc');
63
	if (html == "")
64
		document.getElementById("imagelistoverrow").style.display = 'none';
65
	else
66
		document.getElementById("imagelistovercontainer").innerHTML = html;
67
 
68
	// Image list outsrc
69
	html = getImageListHTML('imagelistout','onmouseoutsrc');
70
	if (html == "")
71
		document.getElementById("imagelistoutrow").style.display = 'none';
72
	else
73
		document.getElementById("imagelistoutcontainer").innerHTML = html;
74
 
75
	// Src browser
76
	html = getBrowserHTML('srcbrowser','src','image','advimage');
77
	document.getElementById("srcbrowsercontainer").innerHTML = html;
78
 
79
	// Over browser
80
	html = getBrowserHTML('oversrcbrowser','onmouseoversrc','image','advimage');
81
	document.getElementById("onmouseoversrccontainer").innerHTML = html;
82
 
83
	// Out browser
84
	html = getBrowserHTML('outsrcbrowser','onmouseoutsrc','image','advimage');
85
	document.getElementById("onmouseoutsrccontainer").innerHTML = html;
86
 
87
	// Longdesc browser
88
	html = getBrowserHTML('longdescbrowser','longdesc','file','advimage');
89
	document.getElementById("longdesccontainer").innerHTML = html;
90
 
91
	// Resize some elements
92
	if (isVisible('srcbrowser'))
93
		document.getElementById('src').style.width = '260px';
94
 
95
	if (isVisible('oversrcbrowser'))
96
		document.getElementById('onmouseoversrc').style.width = '260px';
97
 
98
	if (isVisible('outsrcbrowser'))
99
		document.getElementById('onmouseoutsrc').style.width = '260px';
100
 
101
	if (isVisible('longdescbrowser'))
102
		document.getElementById('longdesc').style.width = '180px';
103
 
104
	// Check action
105
	if (elm != null && elm.nodeName == "IMG")
106
		action = "update";
107
 
108
	formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true);
109
 
110
	if (action == "update") {
111
		var src = tinyMCE.getAttrib(elm, 'src');
112
		var onmouseoversrc = getImageSrc(tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseover')));
113
		var onmouseoutsrc = getImageSrc(tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseout')));
114
 
115
		src = convertURL(src, elm, true);
116
 
117
		// Use mce_src if found
118
		var mceRealSrc = tinyMCE.getAttrib(elm, 'mce_src');
119
		if (mceRealSrc != "") {
120
			src = mceRealSrc;
121
 
122
			if (tinyMCE.getParam('convert_urls'))
123
				src = convertURL(src, elm, true);
124
		}
125
 
126
		if (onmouseoversrc != "" && tinyMCE.getParam('convert_urls'))
127
			onmouseoversrc = convertURL(onmouseoversrc, elm, true);
128
 
129
		if (onmouseoutsrc != "" && tinyMCE.getParam('convert_urls'))
130
			onmouseoutsrc = convertURL(onmouseoutsrc, elm, true);
131
 
132
		// Setup form data
133
		var style = tinyMCE.parseStyle(tinyMCE.getAttrib(elm, "style"));
134
 
135
		// Store away old size
136
		orgImageWidth = trimSize(getStyle(elm, 'width'))
137
		orgImageHeight = trimSize(getStyle(elm, 'height'));
138
 
139
		formObj.src.value    = src;
140
		formObj.alt.value    = tinyMCE.getAttrib(elm, 'alt');
141
		formObj.title.value  = tinyMCE.getAttrib(elm, 'title');
142
		formObj.border.value = trimSize(getStyle(elm, 'border', 'borderWidth'));
143
		formObj.vspace.value = tinyMCE.getAttrib(elm, 'vspace');
144
		formObj.hspace.value = tinyMCE.getAttrib(elm, 'hspace');
145
		formObj.width.value  = orgImageWidth;
146
		formObj.height.value = orgImageHeight;
147
		formObj.onmouseoversrc.value = onmouseoversrc;
148
		formObj.onmouseoutsrc.value  = onmouseoutsrc;
149
		formObj.id.value  = tinyMCE.getAttrib(elm, 'id');
150
		formObj.dir.value  = tinyMCE.getAttrib(elm, 'dir');
151
		formObj.lang.value  = tinyMCE.getAttrib(elm, 'lang');
152
		formObj.longdesc.value  = tinyMCE.getAttrib(elm, 'longdesc');
153
		formObj.usemap.value  = tinyMCE.getAttrib(elm, 'usemap');
154
		formObj.style.value  = tinyMCE.serializeStyle(style);
155
 
156
		// Select by the values
157
		if (tinyMCE.isMSIE)
158
			selectByValue(formObj, 'align', getStyle(elm, 'align', 'styleFloat'));
159
		else
160
			selectByValue(formObj, 'align', getStyle(elm, 'align', 'cssFloat'));
161
 
162
		addClassesToList('classlist', 'advimage_styles');
163
 
164
		selectByValue(formObj, 'classlist', tinyMCE.getAttrib(elm, 'class'));
165
		selectByValue(formObj, 'imagelistsrc', src);
166
		selectByValue(formObj, 'imagelistover', onmouseoversrc);
167
		selectByValue(formObj, 'imagelistout', onmouseoutsrc);
168
 
169
		updateStyle();
170
		showPreviewImage(src, true);
171
		changeAppearance();
172
 
173
		window.focus();
174
	} else
175
		addClassesToList('classlist', 'advimage_styles');
176
 
177
	// If option enabled default contrain proportions to checked
178
	if (tinyMCE.getParam("advimage_constrain_proportions", true))
179
		formObj.constrain.checked = true;
180
 
181
	// Check swap image if valid data
182
	if (formObj.onmouseoversrc.value != "" || formObj.onmouseoutsrc.value != "")
183
		setSwapImageDisabled(false);
184
	else
185
		setSwapImageDisabled(true);
186
}
187
 
188
function setSwapImageDisabled(state) {
189
	var formObj = document.forms[0];
190
 
191
	formObj.onmousemovecheck.checked = !state;
192
 
193
	setBrowserDisabled('overbrowser', state);
194
	setBrowserDisabled('outbrowser', state);
195
 
196
	if (formObj.imagelistover)
197
		formObj.imagelistover.disabled = state;
198
 
199
	if (formObj.imagelistout)
200
		formObj.imagelistout.disabled = state;
201
 
202
	formObj.onmouseoversrc.disabled = state;
203
	formObj.onmouseoutsrc.disabled  = state;
204
}
205
 
206
function setAttrib(elm, attrib, value) {
207
	var formObj = document.forms[0];
208
	var valueElm = formObj.elements[attrib];
209
 
210
	if (typeof(value) == "undefined" || value == null) {
211
		value = "";
212
 
213
		if (valueElm)
214
			value = valueElm.value;
215
	}
216
 
217
	if (value != "") {
218
		elm.setAttribute(attrib, value);
219
 
220
		if (attrib == "style")
221
			attrib = "style.cssText";
222
 
223
		if (attrib == "longdesc")
224
			attrib = "longDesc";
225
 
226
		if (attrib == "width") {
227
			attrib = "style.width";
228
			value = value + "px";
229
			value = value.replace(/%px/g, 'px');
230
		}
231
 
232
		if (attrib == "height") {
233
			attrib = "style.height";
234
			value = value + "px";
235
			value = value.replace(/%px/g, 'px');
236
		}
237
 
238
		if (attrib == "class")
239
			attrib = "className";
240
 
241
		eval('elm.' + attrib + "=value;");
242
	} else {
243
		if (attrib == 'class')
244
			elm.className = '';
245
 
246
		elm.removeAttribute(attrib);
247
	}
248
}
249
 
250
function makeAttrib(attrib, value) {
251
	var formObj = document.forms[0];
252
	var valueElm = formObj.elements[attrib];
253
 
254
	if (typeof(value) == "undefined" || value == null) {
255
		value = "";
256
 
257
		if (valueElm)
258
			value = valueElm.value;
259
	}
260
 
261
	if (value == "")
262
		return "";
263
 
264
	// XML encode it
265
	value = value.replace(/&/g, '&amp;');
266
	value = value.replace(/\"/g, '&quot;');
267
	value = value.replace(/</g, '&lt;');
268
	value = value.replace(/>/g, '&gt;');
269
 
270
	return ' ' + attrib + '="' + value + '"';
271
}
272
 
273
function insertAction() {
274
	var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
275
	var elm = inst.getFocusElement();
276
	var formObj = document.forms[0];
277
	var src = formObj.src.value;
278
	var onmouseoversrc = formObj.onmouseoversrc.value;
279
	var onmouseoutsrc = formObj.onmouseoutsrc.value;
280
 
281
	if (!AutoValidator.validate(formObj)) {
282
		alert(tinyMCE.getLang('lang_invalid_data'));
283
		return false;
284
	}
285
 
286
	if (tinyMCE.getParam("accessibility_warnings")) {
287
		if (formObj.alt.value == "" && !confirm(tinyMCE.getLang('lang_advimage_missing_alt', '', true)))
288
			return;
289
	}
290
 
291
	if (onmouseoversrc && onmouseoversrc != "")
292
		onmouseoversrc = "this.src='" + convertURL(onmouseoversrc, tinyMCE.imgElement) + "';";
293
 
294
	if (onmouseoutsrc && onmouseoutsrc != "")
295
		onmouseoutsrc = "this.src='" + convertURL(onmouseoutsrc, tinyMCE.imgElement) + "';";
296
 
297
	if (elm != null && elm.nodeName == "IMG") {
298
		setAttrib(elm, 'src', convertURL(src, tinyMCE.imgElement));
299
		setAttrib(elm, 'mce_src', src);
300
		setAttrib(elm, 'alt');
301
		setAttrib(elm, 'title');
302
		setAttrib(elm, 'border');
303
		setAttrib(elm, 'vspace');
304
		setAttrib(elm, 'hspace');
305
		setAttrib(elm, 'width');
306
		setAttrib(elm, 'height');
307
		setAttrib(elm, 'onmouseover', onmouseoversrc);
308
		setAttrib(elm, 'onmouseout', onmouseoutsrc);
309
		setAttrib(elm, 'id');
310
		setAttrib(elm, 'dir');
311
		setAttrib(elm, 'lang');
312
		setAttrib(elm, 'longdesc');
313
		setAttrib(elm, 'usemap');
314
		setAttrib(elm, 'style');
315
		setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));
316
		setAttrib(elm, 'align', getSelectValue(formObj, 'align'));
317
 
318
		//tinyMCEPopup.execCommand("mceRepaint");
319
 
320
		// Repaint if dimensions changed
321
		if (formObj.width.value != orgImageWidth || formObj.height.value != orgImageHeight)
322
			inst.repaint();
323
 
324
		// Refresh in old MSIE
325
		if (tinyMCE.isMSIE5)
326
			elm.outerHTML = elm.outerHTML;
327
	} else {
328
		var html = "<img";
329
 
330
		html += makeAttrib('src', convertURL(src, tinyMCE.imgElement));
331
		html += makeAttrib('mce_src', src);
332
		html += makeAttrib('alt');
333
		html += makeAttrib('title');
334
		html += makeAttrib('border');
335
		html += makeAttrib('vspace');
336
		html += makeAttrib('hspace');
337
		html += makeAttrib('width');
338
		html += makeAttrib('height');
339
		html += makeAttrib('onmouseover', onmouseoversrc);
340
		html += makeAttrib('onmouseout', onmouseoutsrc);
341
		html += makeAttrib('id');
342
		html += makeAttrib('dir');
343
		html += makeAttrib('lang');
344
		html += makeAttrib('longdesc');
345
		html += makeAttrib('usemap');
346
		html += makeAttrib('style');
347
		html += makeAttrib('class', getSelectValue(formObj, 'classlist'));
348
		html += makeAttrib('align', getSelectValue(formObj, 'align'));
349
		html += " />";
350
 
351
		tinyMCEPopup.execCommand("mceInsertContent", false, html);
352
	}
353
 
354
	tinyMCE._setEventsEnabled(inst.getBody(), false);
355
	tinyMCEPopup.close();
356
}
357
 
358
function cancelAction() {
359
	tinyMCEPopup.close();
360
}
361
 
362
function changeAppearance() {
363
	var formObj = document.forms[0];
364
	var img = document.getElementById('alignSampleImg');
365
 
366
	if (img) {
367
		img.align = formObj.align.value;
368
		img.border = formObj.border.value;
369
		img.hspace = formObj.hspace.value;
370
		img.vspace = formObj.vspace.value;
371
	}
372
}
373
 
374
function changeMouseMove() {
375
	var formObj = document.forms[0];
376
 
377
	setSwapImageDisabled(!formObj.onmousemovecheck.checked);
378
}
379
 
380
function updateStyle() {
381
	var formObj = document.forms[0];
382
	var st = tinyMCE.parseStyle(formObj.style.value);
383
 
384
	if (tinyMCE.getParam('inline_styles', false)) {
385
		st['width'] = formObj.width.value == '' ? '' : formObj.width.value + "px";
386
		st['height'] = formObj.height.value == '' ? '' : formObj.height.value + "px";
387
		st['border-width'] = formObj.border.value == '' ? '' : formObj.border.value + "px";
388
		st['margin-top'] = formObj.vspace.value == '' ? '' : formObj.vspace.value + "px";
389
		st['margin-bottom'] = formObj.vspace.value == '' ? '' : formObj.vspace.value + "px";
390
		st['margin-left'] = formObj.hspace.value == '' ? '' : formObj.hspace.value + "px";
391
		st['margin-right'] = formObj.hspace.value == '' ? '' : formObj.hspace.value + "px";
392
	} else {
393
		st['width'] = st['height'] = st['border-width'] = null;
394
 
395
		if (st['margin-top'] == st['margin-bottom'])
396
			st['margin-top'] = st['margin-bottom'] = null;
397
 
398
		if (st['margin-left'] == st['margin-right'])
399
			st['margin-left'] = st['margin-right'] = null;
400
	}
401
 
402
	formObj.style.value = tinyMCE.serializeStyle(st);
403
}
404
 
405
function styleUpdated() {
406
	var formObj = document.forms[0];
407
	var st = tinyMCE.parseStyle(formObj.style.value);
408
 
409
	if (st['width'])
410
		formObj.width.value = st['width'].replace('px', '');
411
 
412
	if (st['height'])
413
		formObj.height.value = st['height'].replace('px', '');
414
 
415
	if (st['margin-top'] && st['margin-top'] == st['margin-bottom'])
416
		formObj.vspace.value = st['margin-top'].replace('px', '');
417
 
418
	if (st['margin-left'] && st['margin-left'] == st['margin-right'])
419
		formObj.hspace.value = st['margin-left'].replace('px', '');
420
 
421
	if (st['border-width'])
422
		formObj.border.value = st['border-width'].replace('px', '');
423
}
424
 
425
function changeHeight() {
426
	var formObj = document.forms[0];
427
 
428
	if (!formObj.constrain.checked || !preloadImg) {
429
		updateStyle();
430
		return;
431
	}
432
 
433
	if (formObj.width.value == "" || formObj.height.value == "")
434
		return;
435
 
436
	var temp = (parseInt(formObj.width.value) / parseInt(preloadImg.width)) * preloadImg.height;
437
	formObj.height.value = temp.toFixed(0);
438
	updateStyle();
439
}
440
 
441
function changeWidth() {
442
	var formObj = document.forms[0];
443
 
444
	if (!formObj.constrain.checked || !preloadImg) {
445
		updateStyle();
446
		return;
447
	}
448
 
449
	if (formObj.width.value == "" || formObj.height.value == "")
450
		return;
451
 
452
	var temp = (parseInt(formObj.height.value) / parseInt(preloadImg.height)) * preloadImg.width;
453
	formObj.width.value = temp.toFixed(0);
454
	updateStyle();
455
}
456
 
457
function onSelectMainImage(target_form_element, name, value) {
458
	var formObj = document.forms[0];
459
 
460
	formObj.alt.value = name;
461
	formObj.title.value = name;
462
 
463
	resetImageData();
464
	showPreviewImage(formObj.elements[target_form_element].value, false);
465
}
466
 
467
function showPreviewImage(src, start) {
468
	var formObj = document.forms[0];
469
 
470
	selectByValue(document.forms[0], 'imagelistsrc', src);
471
 
472
	var elm = document.getElementById('prev');
473
	var src = src == "" ? src : tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], src);
474
 
475
	if (!start && tinyMCE.getParam("advimage_update_dimensions_onchange", true))
476
		resetImageData();
477
 
478
	if (src == "")
479
		elm.innerHTML = "";
480
	else
481
		elm.innerHTML = '<img id="previewImg" src="' + src + '" border="0" onload="updateImageData(' + start + ');" onerror="resetImageData();" />'
482
}
483
 
484
function updateImageData(start) {
485
	var formObj = document.forms[0];
486
 
487
	preloadImg = document.getElementById('previewImg');
488
 
489
	if (!start && formObj.width.value == "")
490
		formObj.width.value = preloadImg.width;
491
 
492
	if (!start && formObj.height.value == "")
493
		formObj.height.value = preloadImg.height;
494
 
495
	updateStyle();
496
}
497
 
498
function resetImageData() {
499
	var formObj = document.forms[0];
500
	formObj.width.value = formObj.height.value = "";
501
}
502
 
503
function getSelectValue(form_obj, field_name) {
504
	var elm = form_obj.elements[field_name];
505
 
506
	if (elm == null || elm.options == null)
507
		return "";
508
 
509
	return elm.options[elm.selectedIndex].value;
510
}
511
 
512
function getImageListHTML(elm_id, target_form_element, onchange_func) {
513
	if (typeof(tinyMCEImageList) == "undefined" || tinyMCEImageList.length == 0)
514
		return "";
515
 
516
	var html = "";
517
 
518
	html += '<select id="' + elm_id + '" name="' + elm_id + '"';
519
	html += ' class="mceImageList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';
520
	html += 'this.options[this.selectedIndex].value;';
521
 
522
	if (typeof(onchange_func) != "undefined")
523
		html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';
524
 
525
	html += '"><option value="">---</option>';
526
 
527
	for (var i=0; i<tinyMCEImageList.length; i++)
528
		html += '<option value="' + tinyMCEImageList[i][1] + '">' + tinyMCEImageList[i][0] + '</option>';
529
 
530
	html += '</select>';
531
 
532
	return html;
533
 
534
	// tinyMCE.debug('-- image list start --', html, '-- image list end --');
535
}
536
 
537
// While loading
538
preinit();