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 advlink plugin popup */
2
 
3
var templates = {
4
	"window.open" : "window.open('${url}','${target}','${options}')"
5
};
6
 
7
function preinit() {
8
	// Initialize
9
	tinyMCE.setWindowArg('mce_windowresize', false);
10
 
11
	// Import external list url javascript
12
	var url = tinyMCE.getParam("external_link_list_url");
13
	if (url != null) {
14
		// Fix relative
15
		if (url.charAt(0) != '/' && url.indexOf('://') == -1)
16
			url = tinyMCE.documentBasePath + "/" + url;
17
 
18
		document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');
19
	}
20
}
21
 
22
function changeClass() {
23
	var formObj = document.forms[0];
24
	formObj.classes.value = getSelectValue(formObj, 'classlist');
25
}
26
 
27
function init() {
28
	tinyMCEPopup.resizeToInnerSize();
29
 
30
	var formObj = document.forms[0];
31
	var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
32
	var elm = inst.getFocusElement();
33
	var action = "insert";
34
	var html;
35
 
36
	document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink');
37
	document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink');
38
	document.getElementById('linklisthrefcontainer').innerHTML = getLinkListHTML('linklisthref','href');
39
	document.getElementById('anchorlistcontainer').innerHTML = getAnchorListHTML('anchorlist','href');
40
	document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target');
41
 
42
	// Link list
43
	html = getLinkListHTML('linklisthref','href');
44
	if (html == "")
45
		document.getElementById("linklisthrefrow").style.display = 'none';
46
	else
47
		document.getElementById("linklisthrefcontainer").innerHTML = html;
48
 
49
	// Resize some elements
50
	if (isVisible('hrefbrowser'))
51
		document.getElementById('href').style.width = '260px';
52
 
53
	if (isVisible('popupurlbrowser'))
54
		document.getElementById('popupurl').style.width = '180px';
55
 
56
	elm = tinyMCE.getParentElement(elm, "a");
57
	if (elm != null && elm.nodeName == "A")
58
		action = "update";
59
 
60
	formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true);
61
 
62
	setPopupControlsDisabled(true);
63
 
64
	if (action == "update") {
65
		var href = tinyMCE.getAttrib(elm, 'href');
66
 
67
		href = convertURL(href, elm, true);
68
 
69
		// Use mce_href if found
70
		var mceRealHref = tinyMCE.getAttrib(elm, 'mce_href');
71
		if (mceRealHref != "") {
72
			href = mceRealHref;
73
 
74
			if (tinyMCE.getParam('convert_urls'))
75
				href = convertURL(href, elm, true);
76
		}
77
 
78
		var onclick = tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onclick'));
79
 
80
		// Setup form data
81
		setFormValue('href', href);
82
		setFormValue('title', tinyMCE.getAttrib(elm, 'title'));
83
		setFormValue('id', tinyMCE.getAttrib(elm, 'id'));
84
		setFormValue('style', tinyMCE.serializeStyle(tinyMCE.parseStyle(tinyMCE.getAttrib(elm, "style"))));
85
		setFormValue('rel', tinyMCE.getAttrib(elm, 'rel'));
86
		setFormValue('rev', tinyMCE.getAttrib(elm, 'rev'));
87
		setFormValue('charset', tinyMCE.getAttrib(elm, 'charset'));
88
		setFormValue('hreflang', tinyMCE.getAttrib(elm, 'hreflang'));
89
		setFormValue('dir', tinyMCE.getAttrib(elm, 'dir'));
90
		setFormValue('lang', tinyMCE.getAttrib(elm, 'lang'));
91
		setFormValue('tabindex', tinyMCE.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));
92
		setFormValue('accesskey', tinyMCE.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));
93
		setFormValue('type', tinyMCE.getAttrib(elm, 'type'));
94
		setFormValue('onfocus', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onfocus')));
95
		setFormValue('onblur', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onblur')));
96
		setFormValue('onclick', onclick);
97
		setFormValue('ondblclick', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'ondblclick')));
98
		setFormValue('onmousedown', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmousedown')));
99
		setFormValue('onmouseup', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseup')));
100
		setFormValue('onmouseover', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseover')));
101
		setFormValue('onmousemove', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmousemove')));
102
		setFormValue('onmouseout', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseout')));
103
		setFormValue('onkeypress', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onkeypress')));
104
		setFormValue('onkeydown', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onkeydown')));
105
		setFormValue('onkeyup', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onkeyup')));
106
		setFormValue('target', tinyMCE.getAttrib(elm, 'target'));
107
		setFormValue('classes', tinyMCE.getAttrib(elm, 'class'));
108
 
109
		// Parse onclick data
110
		if (onclick != null && onclick.indexOf('window.open') != -1)
111
			parseWindowOpen(onclick);
112
		else
113
			parseFunction(onclick);
114
 
115
		// Select by the values
116
		selectByValue(formObj, 'dir', tinyMCE.getAttrib(elm, 'dir'));
117
		selectByValue(formObj, 'rel', tinyMCE.getAttrib(elm, 'rel'));
118
		selectByValue(formObj, 'rev', tinyMCE.getAttrib(elm, 'rev'));
119
		selectByValue(formObj, 'linklisthref', href);
120
 
121
		if (href.charAt(0) == '#')
122
			selectByValue(formObj, 'anchorlist', href);
123
 
124
		addClassesToList('classlist', 'advlink_styles');
125
 
126
		selectByValue(formObj, 'classlist', tinyMCE.getAttrib(elm, 'class'), true);
127
		selectByValue(formObj, 'targetlist', tinyMCE.getAttrib(elm, 'target'), true);
128
	} else
129
		addClassesToList('classlist', 'advlink_styles');
130
 
131
	window.focus();
132
}
133
 
134
function checkPrefix(n) {
135
	if (!Validator.isEmpty(n) && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCE.getLang('lang_is_email')))
136
		n.value = 'mailto:' + n.value;
137
 
138
	if (/^\s*www./i.test(n.value) && confirm(tinyMCE.getLang('lang_is_external')))
139
		n.value = 'http://' + n.value;
140
}
141
 
142
function setFormValue(name, value) {
143
	document.forms[0].elements[name].value = value;
144
}
145
 
146
function convertURL(url, node, on_save) {
147
	return eval("tinyMCEPopup.windowOpener." + tinyMCE.settings['urlconverter_callback'] + "(url, node, on_save);");
148
}
149
 
150
function parseWindowOpen(onclick) {
151
	var formObj = document.forms[0];
152
 
153
	// Preprocess center code
154
	if (onclick.indexOf('return false;') != -1) {
155
		formObj.popupreturn.checked = true;
156
		onclick = onclick.replace('return false;', '');
157
	} else
158
		formObj.popupreturn.checked = false;
159
 
160
	var onClickData = parseLink(onclick);
161
 
162
	if (onClickData != null) {
163
		formObj.ispopup.checked = true;
164
		setPopupControlsDisabled(false);
165
 
166
		var onClickWindowOptions = parseOptions(onClickData['options']);
167
		var url = onClickData['url'];
168
 
169
		if (tinyMCE.getParam('convert_urls'))
170
			url = convertURL(url, null, true);
171
 
172
		formObj.popupname.value = onClickData['target'];
173
		formObj.popupurl.value = url;
174
		formObj.popupwidth.value = getOption(onClickWindowOptions, 'width');
175
		formObj.popupheight.value = getOption(onClickWindowOptions, 'height');
176
 
177
		formObj.popupleft.value = getOption(onClickWindowOptions, 'left');
178
		formObj.popuptop.value = getOption(onClickWindowOptions, 'top');
179
 
180
		if (formObj.popupleft.value.indexOf('screen') != -1)
181
			formObj.popupleft.value = "c";
182
 
183
		if (formObj.popuptop.value.indexOf('screen') != -1)
184
			formObj.popuptop.value = "c";
185
 
186
		formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes";
187
		formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes";
188
		formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes";
189
		formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes";
190
		formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes";
191
		formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes";
192
		formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes";
193
 
194
		buildOnClick();
195
	}
196
}
197
 
198
function parseFunction(onclick) {
199
	var formObj = document.forms[0];
200
	var onClickData = parseLink(onclick);
201
 
202
	// TODO: Add stuff here
203
}
204
 
205
function getOption(opts, name) {
206
	return typeof(opts[name]) == "undefined" ? "" : opts[name];
207
}
208
 
209
function setPopupControlsDisabled(state) {
210
	var formObj = document.forms[0];
211
 
212
	formObj.popupname.disabled = state;
213
	formObj.popupurl.disabled = state;
214
	formObj.popupwidth.disabled = state;
215
	formObj.popupheight.disabled = state;
216
	formObj.popupleft.disabled = state;
217
	formObj.popuptop.disabled = state;
218
	formObj.popuplocation.disabled = state;
219
	formObj.popupscrollbars.disabled = state;
220
	formObj.popupmenubar.disabled = state;
221
	formObj.popupresizable.disabled = state;
222
	formObj.popuptoolbar.disabled = state;
223
	formObj.popupstatus.disabled = state;
224
	formObj.popupreturn.disabled = state;
225
	formObj.popupdependent.disabled = state;
226
 
227
	setBrowserDisabled('popupurlbrowser', state);
228
}
229
 
230
function parseLink(link) {
231
	link = link.replace(new RegExp('&#39;', 'g'), "'");
232
 
233
	var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1");
234
 
235
	// Is function name a template function
236
	var template = templates[fnName];
237
	if (template) {
238
		// Build regexp
239
		var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi"));
240
		var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\(";
241
		var replaceStr = "";
242
		for (var i=0; i<variableNames.length; i++) {
243
			// Is string value
244
			if (variableNames[i].indexOf("'${") != -1)
245
				regExp += "'(.*)'";
246
			else // Number value
247
				regExp += "([0-9]*)";
248
 
249
			replaceStr += "$" + (i+1);
250
 
251
			// Cleanup variable name
252
			variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), "");
253
 
254
			if (i != variableNames.length-1) {
255
				regExp += "\\s*,\\s*";
256
				replaceStr += "<delim>";
257
			} else
258
				regExp += ".*";
259
		}
260
 
261
		regExp += "\\);?";
262
 
263
		// Build variable array
264
		var variables = new Array();
265
		variables["_function"] = fnName;
266
		var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>');
267
		for (var i=0; i<variableNames.length; i++)
268
			variables[variableNames[i]] = variableValues[i];
269
 
270
		return variables;
271
	}
272
 
273
	return null;
274
}
275
 
276
function parseOptions(opts) {
277
	if (opts == null || opts == "")
278
		return new Array();
279
 
280
	// Cleanup the options
281
	opts = opts.toLowerCase();
282
	opts = opts.replace(/;/g, ",");
283
	opts = opts.replace(/[^0-9a-z=,]/g, "");
284
 
285
	var optionChunks = opts.split(',');
286
	var options = new Array();
287
 
288
	for (var i=0; i<optionChunks.length; i++) {
289
		var parts = optionChunks[i].split('=');
290
 
291
		if (parts.length == 2)
292
			options[parts[0]] = parts[1];
293
	}
294
 
295
	return options;
296
}
297
 
298
function buildOnClick() {
299
	var formObj = document.forms[0];
300
 
301
	if (!formObj.ispopup.checked) {
302
		formObj.onclick.value = "";
303
		return;
304
	}
305
 
306
	var onclick = "window.open('";
307
	var url = formObj.popupurl.value;
308
 
309
	if (tinyMCE.getParam('convert_urls'))
310
		url = convertURL(url, null, true);
311
 
312
	onclick += url + "','";
313
	onclick += formObj.popupname.value + "','";
314
 
315
	if (formObj.popuplocation.checked)
316
		onclick += "location=yes,";
317
 
318
	if (formObj.popupscrollbars.checked)
319
		onclick += "scrollbars=yes,";
320
 
321
	if (formObj.popupmenubar.checked)
322
		onclick += "menubar=yes,";
323
 
324
	if (formObj.popupresizable.checked)
325
		onclick += "resizable=yes,";
326
 
327
	if (formObj.popuptoolbar.checked)
328
		onclick += "toolbar=yes,";
329
 
330
	if (formObj.popupstatus.checked)
331
		onclick += "status=yes,";
332
 
333
	if (formObj.popupdependent.checked)
334
		onclick += "dependent=yes,";
335
 
336
	if (formObj.popupwidth.value != "")
337
		onclick += "width=" + formObj.popupwidth.value + ",";
338
 
339
	if (formObj.popupheight.value != "")
340
		onclick += "height=" + formObj.popupheight.value + ",";
341
 
342
	if (formObj.popupleft.value != "") {
343
		if (formObj.popupleft.value != "c")
344
			onclick += "left=" + formObj.popupleft.value + ",";
345
		else
346
			onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',";
347
	}
348
 
349
	if (formObj.popuptop.value != "") {
350
		if (formObj.popuptop.value != "c")
351
			onclick += "top=" + formObj.popuptop.value + ",";
352
		else
353
			onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',";
354
	}
355
 
356
	if (onclick.charAt(onclick.length-1) == ',')
357
		onclick = onclick.substring(0, onclick.length-1);
358
 
359
	onclick += "');";
360
 
361
	if (formObj.popupreturn.checked)
362
		onclick += "return false;";
363
 
364
	// tinyMCE.debug(onclick);
365
 
366
	formObj.onclick.value = onclick;
367
 
368
	if (formObj.href.value == "")
369
		formObj.href.value = url;
370
}
371
 
372
function setAttrib(elm, attrib, value) {
373
	var formObj = document.forms[0];
374
	var valueElm = formObj.elements[attrib.toLowerCase()];
375
 
376
	if (typeof(value) == "undefined" || value == null) {
377
		value = "";
378
 
379
		if (valueElm)
380
			value = valueElm.value;
381
	}
382
 
383
	if (value != "") {
384
		elm.setAttribute(attrib.toLowerCase(), value);
385
 
386
		if (attrib == "style")
387
			attrib = "style.cssText";
388
 
389
		if (attrib.substring(0, 2) == 'on')
390
			value = 'return true;' + value;
391
 
392
		if (attrib == "class")
393
			attrib = "className";
394
 
395
		eval('elm.' + attrib + "=value;");
396
	} else
397
		elm.removeAttribute(attrib);
398
}
399
 
400
function getAnchorListHTML(id, target) {
401
	var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
402
	var nodes = inst.getBody().getElementsByTagName("a"), name, i;
403
	var html = "";
404
 
405
	html += '<select id="' + id + '" name="' + id + '" class="mceAnchorList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target + '.value=';
406
	html += 'this.options[this.selectedIndex].value;">';
407
	html += '<option value="">---</option>';
408
 
409
	for (i=0; i<nodes.length; i++) {
410
		if ((name = tinyMCE.getAttrib(nodes[i], "name")) != "")
411
			html += '<option value="#' + name + '">' + name + '</option>';
412
	}
413
 
414
	html += '</select>';
415
 
416
	return html;
417
}
418
 
419
function insertAction() {
420
	var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
421
	var elm = inst.getFocusElement();
422
 
423
	checkPrefix(document.forms[0].href);
424
 
425
	elm = tinyMCE.getParentElement(elm, "a");
426
 
427
	tinyMCEPopup.execCommand("mceBeginUndoLevel");
428
 
429
	// Create new anchor elements
430
	if (elm == null) {
431
		if (tinyMCE.isSafari)
432
			tinyMCEPopup.execCommand("mceInsertContent", false, '<a href="#mce_temp_url#">' + inst.selection.getSelectedHTML() + '</a>');
433
		else
434
			tinyMCEPopup.execCommand("createlink", false, "#mce_temp_url#");
435
 
436
		var elementArray = tinyMCE.getElementsByAttributeValue(inst.getBody(), "a", "href", "#mce_temp_url#");
437
		for (var i=0; i<elementArray.length; i++) {
438
			var elm = elementArray[i];
439
 
440
			// Move cursor to end
441
			try {
442
				tinyMCE.selectedInstance.selection.collapse(false);
443
			} catch (ex) {
444
				// Ignore
445
			}
446
 
447
			// Move cursor behind the new anchor
448
			// Don't remember why this was needed so it's now removed
449
			/*
450
			if (tinyMCE.isGecko) {
451
				var sp = inst.getDoc().createTextNode(" ");
452
 
453
				if (elm.nextSibling)
454
					elm.parentNode.insertBefore(sp, elm.nextSibling);
455
				else
456
					elm.parentNode.appendChild(sp);
457
 
458
				// Set range after link
459
				var rng = inst.getDoc().createRange();
460
				rng.setStartAfter(elm);
461
				rng.setEndAfter(elm);
462
 
463
				// Update selection
464
				var sel = inst.getSel();
465
				sel.removeAllRanges();
466
				sel.addRange(rng);
467
			}
468
			*/
469
 
470
			setAllAttribs(elm);
471
		}
472
	} else
473
		setAllAttribs(elm);
474
 
475
	tinyMCE._setEventsEnabled(inst.getBody(), false);
476
	tinyMCEPopup.execCommand("mceEndUndoLevel");
477
	tinyMCEPopup.close();
478
}
479
 
480
function setAllAttribs(elm) {
481
	var formObj = document.forms[0];
482
	var href = formObj.href.value;
483
	var target = getSelectValue(formObj, 'targetlist');
484
 
485
	// Make anchors absolute
486
	if (href.charAt(0) != '#' && tinyMCE.getParam('convert_urls'))
487
		href = convertURL(href, elm);
488
 
489
	setAttrib(elm, 'href', href);
490
	setAttrib(elm, 'mce_href', href);
491
	setAttrib(elm, 'title');
492
	setAttrib(elm, 'target', target == '_self' ? '' : target);
493
	setAttrib(elm, 'id');
494
	setAttrib(elm, 'style');
495
	setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));
496
	setAttrib(elm, 'rel');
497
	setAttrib(elm, 'rev');
498
	setAttrib(elm, 'charset');
499
	setAttrib(elm, 'hreflang');
500
	setAttrib(elm, 'dir');
501
	setAttrib(elm, 'lang');
502
	setAttrib(elm, 'tabindex');
503
	setAttrib(elm, 'accesskey');
504
	setAttrib(elm, 'type');
505
	setAttrib(elm, 'onfocus');
506
	setAttrib(elm, 'onblur');
507
	setAttrib(elm, 'onclick');
508
	setAttrib(elm, 'ondblclick');
509
	setAttrib(elm, 'onmousedown');
510
	setAttrib(elm, 'onmouseup');
511
	setAttrib(elm, 'onmouseover');
512
	setAttrib(elm, 'onmousemove');
513
	setAttrib(elm, 'onmouseout');
514
	setAttrib(elm, 'onkeypress');
515
	setAttrib(elm, 'onkeydown');
516
	setAttrib(elm, 'onkeyup');
517
 
518
	// Refresh in old MSIE
519
	if (tinyMCE.isMSIE5)
520
		elm.outerHTML = elm.outerHTML;
521
}
522
 
523
function getSelectValue(form_obj, field_name) {
524
	var elm = form_obj.elements[field_name];
525
 
526
	if (elm == null || elm.options == null)
527
		return "";
528
 
529
	return elm.options[elm.selectedIndex].value;
530
}
531
 
532
function getLinkListHTML(elm_id, target_form_element, onchange_func) {
533
	if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0)
534
		return "";
535
 
536
	var html = "";
537
 
538
	html += '<select id="' + elm_id + '" name="' + elm_id + '"';
539
	html += ' class="mceLinkList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';
540
	html += 'this.options[this.selectedIndex].value;';
541
 
542
	if (typeof(onchange_func) != "undefined")
543
		html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';
544
 
545
	html += '"><option value="">---</option>';
546
 
547
	for (var i=0; i<tinyMCELinkList.length; i++)
548
		html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';
549
 
550
	html += '</select>';
551
 
552
	return html;
553
 
554
	// tinyMCE.debug('-- image list start --', html, '-- image list end --');
555
}
556
 
557
function getTargetListHTML(elm_id, target_form_element) {
558
	var targets = tinyMCE.getParam('theme_advanced_link_targets', '').split(';');
559
	var html = '';
560
 
561
	html += '<select id="' + elm_id + '" name="' + elm_id + '" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';
562
	html += 'this.options[this.selectedIndex].value;">';
563
 
564
	html += '<option value="_self">' + tinyMCE.getLang('lang_advlink_target_same') + '</option>';
565
	html += '<option value="_blank">' + tinyMCE.getLang('lang_advlink_target_blank') + ' (_blank)</option>';
566
	html += '<option value="_parent">' + tinyMCE.getLang('lang_advlink_target_parent') + ' (_parent)</option>';
567
	html += '<option value="_top">' + tinyMCE.getLang('lang_advlink_target_top') + ' (_top)</option>';
568
 
569
	for (var i=0; i<targets.length; i++) {
570
		var key, value;
571
 
572
		if (targets[i] == "")
573
			continue;
574
 
575
		key = targets[i].split('=')[0];
576
		value = targets[i].split('=')[1];
577
 
578
		html += '<option value="' + key + '">' + value + ' (' + key + ')</option>';
579
	}
580
 
581
	html += '</select>';
582
 
583
	return html;
584
}
585
 
586
// While loading
587
preinit();