adding all weblabels from weblabels.fsf.org
[weblabels.fsf.org.git] / www.fsf.org / 20131028 / files / plugins / plonelink / js / plonelink.js
CommitLineData
5a920362 1/* Functions for the plonelink plugin popup */
2
3tinyMCEPopup.requireLangPack();
4
5var templates = {
6 "window.open" : "window.open('${url}','${target}','${options}')"
7};
8
9var current_path;
10var current_link = "";
11var current_url = "";
12var current_pageanchor = "";
13var labels = "";
14
15function preinit() {
16 var url;
17
18 if (url = tinyMCEPopup.getParam("external_link_list_url"))
19 document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
20}
21
22function init() {
23 tinyMCEPopup.resizeToInnerSize();
24
25 var formGeneralObj = document.forms[0];
26 var formUploadObj = document.forms[1];
27 var formAdvancedObj = document.forms[2];
28 var formButtonsObj = document.forms[3];
29 var inst = tinyMCEPopup.editor;
30 var elm = inst.selection.getNode();
31 var action = "insert";
32 var html;
33 labels = eval(inst.getParam('labels'));
34
35 document.getElementById('anchorlinkcontainer').innerHTML = getAnchorListHTML();
36
37 // Check if update or insert
38 elm = inst.dom.getParent(elm, "A");
39 if (elm != null && elm.nodeName == "A")
40 action = "update";
41
42 // Set button caption
43 formButtonsObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true);
44
45 // Check if rooted
46 if (tinyMCEPopup.editor.settings.rooted) {
47 document.getElementById('home').style.display = 'none';
48 }
49
50 if (action == "update") {
51 var href = inst.dom.getAttrib(elm, 'href');
52 href = tinymce.trim(href)
53
54 // Setup form data
55 setFormValue('href', href, 0);
56 if ((typeof(elm.title) != "undefined") && (elm.title != "")) {
57 setFormValue('title', inst.dom.getAttrib(elm, 'title'), 2);
58 }
59
60 // Check if anchor
61 if (href.charAt(0) == '#') {
62 displayPanel('anchors_panel');
63 setRadioValue('anchorlink', href, 0);
64 } else if (href.indexOf('mailto:') != -1) {
65 displayPanel('mail_panel');
66 var mailaddress = href.split('mailto:')[1];
67 var mailsubject = "";
68
69 if (mailaddress.indexOf('?subject=') != -1) {
70 mailsubject = mailaddress.split('?subject=')[1];
71 mailaddress = mailaddress.split('?subject=')[0];
72 }
73
74 setFormValue('mailaddress', mailaddress, 0);
75 setFormValue('mailsubject', mailsubject, 0);
76 } else if ((href.indexOf('http://') == 0) || (href.indexOf('https://') == 0) || (href.indexOf('ftp://') == 0)) {
77 displayPanel('external_panel');
78 if (href.indexOf('http://') == 0) {
79 href = href.substr(7,href.length);
80 selectByValue(formGeneralObj, 'externalurlprefix', 'http://', true);
81 setFormValue('externalurl', href, 0);
82 } else if (href.indexOf('https://') == 0) {
83 href = href.substr(8,href.length);
84 selectByValue(formGeneralObj, 'externalurlprefix', 'https://', true);
85 setFormValue('externalurl', href, 0);
86 } else if (href.indexOf('ftp://') == 0) {
87 href = href.substr(6,href.length);
88 selectByValue(formGeneralObj, 'externalurlprefix', 'ftp://', true);
89 setFormValue('externalurl', href, 0);
90 }
91 } else {
92 if (href.indexOf('#') != -1) {
93 current_pageanchor = href.split('#')[1];
94 href = href.split('#')[0];
95 }
96 if (href.indexOf('resolveuid') != -1) {
97 current_uid = href.split('resolveuid/')[1];
98 tinymce.util.XHR.send({
99 url : tinyMCEPopup.editor.settings.portal_url + '/portal_tinymce/tinymce-getpathbyuid?uid=' + current_uid,
100 type : 'GET',
101 success : function(text) {
102 current_url = getAbsoluteUrl(tinyMCEPopup.editor.settings.document_base_url, text);
103 current_link = href;
104 getFolderListing(getParentUrl(current_url), 'tinymce-jsonlinkablefolderlisting');
105 }
106 });
107 } else {
108 href = getAbsoluteUrl(tinyMCEPopup.editor.settings.document_base_url, href);
109 current_link = href;
110 getFolderListing(getParentUrl(href), 'tinymce-jsonlinkablefolderlisting');
111 }
112 }
113
114 selectByValue(formAdvancedObj, 'targetlist', inst.dom.getAttrib(elm, 'target'), true);
115 } else {
116
117 href = inst.selection.getContent();
118 href = tinymce.trim(href)
119 if ((href.indexOf('http://') == 0) || (href.indexOf('https://') == 0) || (href.indexOf('ftp://') == 0)) {
120 displayPanel('external_panel');
121 if (href.indexOf('http://') == 0) {
122 href = href.substr(7,href.length);
123 selectByValue(formGeneralObj, 'externalurlprefix', 'http://', true);
124 setFormValue('externalurl', href, 0);
125 } else if (href.indexOf('https://') == 0) {
126 href = href.substr(8,href.length);
127 selectByValue(formGeneralObj, 'externalurlprefix', 'https://', true);
128 setFormValue('externalurl', href, 0);
129 } else if (href.indexOf('ftp://') == 0) {
130 href = href.substr(6,href.length);
131 selectByValue(formGeneralObj, 'externalurlprefix', 'ftp://', true);
132 setFormValue('externalurl', href, 0);
133 }
134 } else {
135 getCurrentFolderListing();
136 }
137 }
138}
139
140function checkSearch(e) {
141 if (document.getElementById('searchtext').value.length >= 3 && (tinyMCEPopup.editor.settings.livesearch || e.keyCode == 13)) {
142 getFolderListing(tinyMCEPopup.editor.settings.navigation_root_url, 'tinymce-jsonlinkablesearch');
143 }
144}
145
146function checkExternalUrl() {
147 var formGeneralObj = document.forms[0];
148 href = document.getElementById('externalurl').value;
149 href = tinymce.trim(href)
150 if ((href.indexOf('http://') == 0) || (href.indexOf('https://') == 0) || (href.indexOf('ftp://') == 0)) {
151 if (href.indexOf('http://') == 0) {
152 href = href.substr(7,href.length);
153 selectByValue(formGeneralObj, 'externalurlprefix', 'http://', true);
154 setFormValue('externalurl', href, 0);
155 } else if (href.indexOf('https://') == 0) {
156 href = href.substr(8,href.length);
157 selectByValue(formGeneralObj, 'externalurlprefix', 'https://', true);
158 setFormValue('externalurl', href, 0);
159 } else if (href.indexOf('ftp://') == 0) {
160 href = href.substr(6,href.length);
161 selectByValue(formGeneralObj, 'externalurlprefix', 'ftp://', true);
162 setFormValue('externalurl', href, 0);
163 }
164 }
165}
166function getParentUrl(url) {
167 var url_array = url.split('/');
168 url_array.pop();
169 return url_array.join('/');
170}
171
172function getAbsoluteUrl(base, link) {
173 if ((link.indexOf('http://') != -1) || (link.indexOf('https://') != -1) || (link.indexOf('ftp://') != -1)) {
174 return link;
175 }
176
177 var base_array = base.split('/');
178 var link_array = link.split('/');
179
180 // Remove document from base url
181 base_array.pop();
182
183 while (link_array.length != 0) {
184 var item = link_array.shift();
185 if (item == ".") {
186 // Do nothing
187 } else if (item == "..") {
188 // Remove leave node from base
189 base_array.pop();
190 } else {
191 // Push node to base_array
192 base_array.push(item);
193 }
194 }
195 return (base_array.join('/'));
196}
197
198function setFormValue(name, value, formnr) {
199 document.forms[formnr].elements[name].value = value;
200}
201
202function parseWindowOpen(onclick) {
203 var formGeneralObj = document.forms[0];
204 var formUploadObj = document.forms[1];
205 var formAdvancedObj = document.forms[2];
206 var formButtonsObj = document.forms[3];
207
208 // Preprocess center code
209 if (onclick.indexOf('return false;') != -1) {
210 formAdvancedObj.popupreturn.checked = true;
211 onclick = onclick.replace('return false;', '');
212 } else
213 formAdvancedObj.popupreturn.checked = false;
214
215 var onClickData = parseLink(onclick);
216
217 if (onClickData != null) {
218 formAdvancedObj.ispopup.checked = true;
219
220 var onClickWindowOptions = parseOptions(onClickData['options']);
221 var url = onClickData['url'];
222
223 formAdvancedObj.popupname.value = onClickData['target'];
224 formAdvancedObj.popupwidth.value = getOption(onClickWindowOptions, 'width');
225 formAdvancedObj.popupheight.value = getOption(onClickWindowOptions, 'height');
226
227 formAdvancedObj.popupleft.value = getOption(onClickWindowOptions, 'left');
228 formAdvancedObj.popuptop.value = getOption(onClickWindowOptions, 'top');
229
230 if (formAdvancedObj.popupleft.value.indexOf('screen') != -1)
231 formAdvancedObj.popupleft.value = "c";
232
233 if (formAdvancedObj.popuptop.value.indexOf('screen') != -1)
234 formAdvancedObj.popuptop.value = "c";
235
236 formAdvancedObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes";
237 formAdvancedObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes";
238 formAdvancedObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes";
239 formAdvancedObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes";
240 formAdvancedObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes";
241 formAdvancedObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes";
242 formAdvancedObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes";
243 }
244}
245
246function parseFunction(onclick) {
247 var onClickData = parseLink(onclick);
248
249 // TODO: Add stuff here
250}
251
252function getOption(opts, name) {
253 return typeof(opts[name]) == "undefined" ? "" : opts[name];
254}
255
256function parseLink(link) {
257 link = link.replace(new RegExp('&#39;', 'g'), "'");
258
259 var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1");
260
261 // Is function name a template function
262 var template = templates[fnName];
263 if (template) {
264 // Build regexp
265 var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi"));
266 var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\(";
267 var replaceStr = "";
268 for (var i=0; i<variableNames.length; i++) {
269 // Is string value
270 if (variableNames[i].indexOf("'${") != -1)
271 regExp += "'(.*)'";
272 else // Number value
273 regExp += "([0-9]*)";
274
275 replaceStr += "$" + (i+1);
276
277 // Cleanup variable name
278 variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), "");
279
280 if (i != variableNames.length-1) {
281 regExp += "\\s*,\\s*";
282 replaceStr += "<delim>";
283 } else
284 regExp += ".*";
285 }
286
287 regExp += "\\);?";
288
289 // Build variable array
290 var variables = [];
291 variables["_function"] = fnName;
292 var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>');
293 for (var i=0; i<variableNames.length; i++)
294 variables[variableNames[i]] = variableValues[i];
295
296 return variables;
297 }
298
299 return null;
300}
301
302function parseOptions(opts) {
303 if (opts == null || opts == "")
304 return [];
305
306 // Cleanup the options
307 opts = opts.toLowerCase();
308 opts = opts.replace(/;/g, ",");
309 opts = opts.replace(/[^0-9a-z=,]/g, "");
310
311 var optionChunks = opts.split(',');
312 var options = [];
313
314 for (var i=0; i<optionChunks.length; i++) {
315 var parts = optionChunks[i].split('=');
316
317 if (parts.length == 2)
318 options[parts[0]] = parts[1];
319 }
320
321 return options;
322}
323
324function getPopupHref(href) {
325 var formAdvancedObj = document.forms[3];
326 var popuphref = "javascript:window.open('";
327
328 popuphref += href + "','";
329 popuphref += formAdvancedObj.popupname.value + "','";
330
331 if (formAdvancedObj.popuplocation.checked)
332 popuphref += "location=yes,";
333
334 if (formAdvancedObj.popupscrollbars.checked)
335 popuphref += "scrollbars=yes,";
336
337 if (formAdvancedObj.popupmenubar.checked)
338 popuphref += "menubar=yes,";
339
340 if (formAdvancedObj.popupresizable.checked)
341 popuphref += "resizable=yes,";
342
343 if (formAdvancedObj.popuptoolbar.checked)
344 popuphref += "toolbar=yes,";
345
346 if (formAdvancedObj.popupstatus.checked)
347 popuphref += "status=yes,";
348
349 if (formAdvancedObj.popupdependent.checked)
350 popuphref += "dependent=yes,";
351
352 if (formAdvancedObj.popupwidth.value != "")
353 popuphref += "width=" + formAdvancedObj.popupwidth.value + ",";
354
355 if (formAdvancedObj.popupheight.value != "")
356 popuphref += "height=" + formAdvancedObj.popupheight.value + ",";
357
358 if (formAdvancedObj.popupleft.value != "") {
359 if (formAdvancedObj.popupleft.value != "c")
360 popuphref += "left=" + formAdvancedObj.popupleft.value + ",";
361 else
362 popuphref += "left='+(screen.availWidth/2-" + (formAdvancedObj.popupwidth.value/2) + ")+',";
363 }
364
365 if (formAdvancedObj.popuptop.value != "") {
366 if (formAdvancedObj.popuptop.value != "c")
367 popuphref += "top=" + formAdvancedObj.popuptop.value + ",";
368 else
369 popuphref += "top='+(screen.availHeight/2-" + (formAdvancedObj.popupheight.value/2) + ")+',";
370 }
371
372 if (popuphref.charAt(popuphref.length-1) == ',')
373 popuphref = popuphref.substring(0, popuphref.length-1);
374
375 popuphref += "');";
376
377 if (formAdvancedObj.popupreturn.checked)
378 popuphref += "return false;";
379
380 return popuphref;
381}
382
383function setAttrib(elm, attrib, value, formnr) {
384 var formObj = document.forms[formnr];
385 var valueElm = formObj.elements[attrib.toLowerCase()];
386 var dom = tinyMCEPopup.editor.dom;
387
388 if (typeof(value) == "undefined" || value == null) {
389 value = "";
390
391 if (valueElm)
392 value = valueElm.value;
393 }
394
395 dom.setAttrib(elm, attrib, value);
396}
397
398function previewExternalLink() {
399 var url = "";
400 var externalurlprefix = document.getElementById('externalurlprefix');
401 url = externalurlprefix.options[externalurlprefix.selectedIndex].value;
402
403 if (document.getElementById('externalurl').value == "") {
404 url = "";
405 } else {
406 url += document.getElementById('externalurl').value;
407 }
408
409 if (url == "") {
410 document.getElementById('previewexternal').src = "about:blank";
411 } else {
412 document.getElementById('previewexternal').src = url;
413 }
414}
415
416function getAnchorListHTML() {
417 var inst = tinyMCEPopup.editor;
418 var nodes = inst.dom.select('a.mceItemAnchor,img.mceItemAnchor'), name, title, i;
419 var html = "";
420 var divclass ="even";
421
422 for (i=0; i<nodes.length; i++) {
423 if ((name = inst.dom.getAttrib(nodes[i], "name")) != "") {
424 html += '<div class="' + divclass + '"><input type="radio" class="noborder" name="anchorlink" value="#' + name + '"/> ' + name + '</div>';
425 divclass = divclass == "even" ? "odd" : "even";
426 }
427 }
428
429 nodes = inst.dom.select('h2,h3');
430 if (nodes.length > 0) {
431 for (i=0; i<nodes.length; i++) {
432 title = nodes[i].innerHTML;
433 title_match = title.match(/mceItemAnchor/);
434 if (title_match == null) {
435 name = title.toLowerCase();
436 name = name.replace(/[^a-z]/g, '-');
437 html += '<div class="' + divclass + '"><input type="radio" class="noborder" name="anchorlink" value="#mce-new-anchor-' + name + '"/> ' + title + '</div>';
438 divclass = divclass == "even" ? "odd" : "even";
439 }
440 }
441 }
442
443 if (html == "") {
444 html = '<div class="odd">'+ labels['label_no_anchors'] +'</div>';
445 }
446
447 return html;
448}
449
450function getInputValue(name, formnr) {
451 return document.forms[formnr].elements[name].value;
452}
453
454function getRadioValue(name, formnr) {
455 var value = "";
456 var elm = document.forms[formnr][name];
457 if (typeof(elm.value) == 'undefined') {
458 for (var i = 0; i < elm.length; i++) {
459 if (elm[i].checked) {
460 value = elm[i].value;
461 }
462 }
463 } else {
464 if (elm.checked) {
465 value = elm.value;
466 }
467 }
468
469 return value;
470}
471
472function setRadioValue(name, value, formnr) {
473 var elm = document.forms[formnr][name];
474 if (elm && typeof(elm.value) == 'undefined') {
475 for (var i = 0; i < elm.length; i++) {
476 if (elm[i].value == value) {
477 elm[i].checked = true;
478 }
479 }
480 } else if (elm) {
481 if (elm.value == value) {
482 elm.checked = true;
483 }
484 }
485}
486
487function buildHref() {
488 var href = "", name, title, i;
489 var inst = tinyMCEPopup.editor;
490
491 if (isVisible('external_panel')) {
492 var externalurlprefix = document.getElementById('externalurlprefix');
493 href = externalurlprefix.options[externalurlprefix.selectedIndex].value;
494
495 if (document.getElementById('externalurl').value == "") {
496 href = "";
497 } else {
498 href += document.getElementById('externalurl').value;
499 }
500 } else if (isVisible('anchors_panel')) {
501 href = getRadioValue('anchorlink', 0);
502 var url_match = href.match(/^#mce-new-anchor-(.*)$/);
503 if (url_match != null) {
504 nodes = inst.dom.select('h2,h3');
505 for (i=0; i<nodes.length; i++) {
506 title = nodes[i].innerHTML;
507 name = title.toLowerCase();
508 name = name.replace(/[^a-z]/g, '-');
509 if (name == url_match[1]) {
510 nodes[i].innerHTML = '<a name="' + name + '" class="mceItemAnchor"></a>' + nodes[i].innerHTML;
511 }
512 }
513 href = '#' + url_match[1];
514 }
515 } else if (isVisible('mail_panel')) {
516 var mailaddress = getInputValue('mailaddress', 0);
517 var mailsubject = getInputValue('mailsubject', 0);
518 href = mailaddress;
519 if (mailsubject != "") {
520 href += "?subject=" + mailsubject;
521 }
522 if (href != "") {
523 href = "mailto:" + href;
524 }
525 } else {
526 var internallink = getRadioValue('internallink', 0);
527 href = internallink;
528 var pageanchor = getSelectValue(document.forms[0], 'pageanchor');
529 if (pageanchor != "") {
530 href += '#' + pageanchor;
531 }
532 }
533
534 document.forms[0].href.value = href;
535}
536
537function insertAction() {
538 var inst = tinyMCEPopup.editor;
539 var elm, elementArray, i;
540
541 buildHref();
542 elm = inst.selection.getNode();
543 elm = inst.dom.getParent(elm, "A");
544
545 // Remove element if there is no href
546 if (!document.forms[0].href.value) {
547 tinyMCEPopup.execCommand("mceBeginUndoLevel");
548 i = inst.selection.getBookmark();
549 inst.dom.remove(elm, 1);
550 inst.selection.moveToBookmark(i);
551 tinyMCEPopup.execCommand("mceEndUndoLevel");
552 tinyMCEPopup.close();
553 return;
554 }
555
556 tinyMCEPopup.execCommand("mceBeginUndoLevel");
557
558 // Create new anchor elements
559 if (elm == null) {
560 inst.getDoc().execCommand("unlink", false, null);
561 tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1});
562
563 elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';});
564 for (i=0; i<elementArray.length; i++)
565 setAllAttribs(elm = elementArray[i]);
566 } else
567 setAllAttribs(elm);
568
569 // Don't move caret if selection was image
570 if (elm && (elm.childNodes.length != 1 || elm.firstChild.nodeName != 'IMG')) {
571 inst.focus();
572 inst.selection.select(elm);
573 inst.selection.collapse(0);
574 tinyMCEPopup.storeSelection();
575 }
576
577 tinyMCEPopup.execCommand("mceEndUndoLevel");
578 tinyMCEPopup.close();
579}
580
581function setAllAttribs(elm) {
582 var formGeneralObj = document.forms[0];
583 var formUploadObj = document.forms[1];
584 var formAdvancedObj = document.forms[2];
585 var formButtonsObj = document.forms[3];
586
587 var href = formGeneralObj.href.value;
588 var target = getSelectValue(formAdvancedObj, 'targetlist');
589
590 if (target == 'popup') {
591 setAttrib(elm, 'href', getPopupHref(href), 0);
592 } else {
593 setAttrib(elm, 'href', href, 0);
594 }
595 setAttrib(elm, 'title', formAdvancedObj.title.value, 2);
596 if ((target != '_self') && (target != 'popup')) {
597 setAttrib(elm, 'target', target, 2);
598 }
599
600 var dom = tinyMCEPopup.editor.dom;
601 dom.removeClass(elm, 'internal-link');
602 dom.removeClass(elm, 'external-link');
603 dom.removeClass(elm, 'anchor-link');
604 dom.removeClass(elm, 'mail-link');
605
606 if (isVisible('external_panel')) {
607 dom.addClass(elm, 'external-link');
608 } else if (isVisible('anchors_panel')) {
609 dom.addClass(elm, 'anchor-link');
610 } else if (isVisible('mail_panel')) {
611 dom.addClass(elm, 'mail-link');
612 } else {
613 dom.addClass(elm, 'internal-link');
614 }
615
616 // Refresh in old MSIE
617 if (tinyMCE.isMSIE5)
618 elm.outerHTML = elm.outerHTML;
619}
620
621function getSelectValue(form_obj, field_name) {
622 var elm = form_obj.elements[field_name];
623
624 if (!elm || elm.options == null || elm.selectedIndex == -1)
625 return "";
626
627 return elm.options[elm.selectedIndex].value;
628}
629
630function getLinkListHTML(elm_id, target_form_element, onchange_func) {
631 if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0)
632 return "";
633
634 var html = "";
635
636 html += '<select id="' + elm_id + '" name="' + elm_id + '"';
637 html += ' class="mceLinkList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';
638 html += 'this.options[this.selectedIndex].value;';
639
640 if (typeof(onchange_func) != "undefined")
641 html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';
642
643 html += '"><option value="">---</option>';
644
645 for (var i=0; i<tinyMCELinkList.length; i++)
646 html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';
647
648 html += '</select>';
649
650 return html;
651
652 // tinyMCE.debug('-- image list start --', html, '-- image list end --');
653}
654
655function setPopupVisibility() {
656 var targetlist = document.getElementById('targetlist');
657 if (targetlist.options[targetlist.selectedIndex].value == 'popup') {
658 document.getElementById('popup_panel').style.display = 'block';
659 } else {
660 document.getElementById('popup_panel').style.display = 'none';
661 }
662}
663
664function getTargetListHTML(elm_id, target_form_element) {
665 var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';');
666 var html = '';
667
668 html += '<select id="' + elm_id + '" name="' + elm_id + '" onf2ocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';
669 html += 'this.options[this.selectedIndex].value;">';
670 html += '<option value="_self">' + tinyMCEPopup.getLang('plonelink_dlg.target_same') + '</option>';
671 html += '<option value="_blank">' + tinyMCEPopup.getLang('plonelink_dlg.target_blank') + ' (_blank)</option>';
672 html += '<option value="_parent">' + tinyMCEPopup.getLang('plonelink_dlg.target_parent') + ' (_parent)</option>';
673 html += '<option value="_top">' + tinyMCEPopup.getLang('plonelink_dlg.target_top') + ' (_top)</option>';
674
675 for (var i=0; i<targets.length; i++) {
676 var key, value;
677
678 if (targets[i] == "")
679 continue;
680
681 key = targets[i].split('=')[0];
682 value = targets[i].split('=')[1];
683
684 html += '<option value="' + key + '">' + value + ' (' + key + ')</option>';
685 }
686
687 html += '</select>';
688
689 return html;
690}
691
692function displayPanel(elm_id) {
693 document.getElementById ('internal_panel').style.display = elm_id == 'internal_panel' || elm_id == 'upload_panel' ? 'block' : 'none';
694 document.getElementById ('internal_details_panel').style.display = elm_id == 'internal_panel' ? 'block' : 'none';
695 document.getElementById ('external_panel').style.display = elm_id == 'external_panel' ? 'block' : 'none';
696 document.getElementById ('mail_panel').style.display = elm_id == 'mail_panel' ? 'block' : 'none';
697 document.getElementById ('anchors_panel').style.display = elm_id == 'anchors_panel' ? 'block' : 'none';
698 document.getElementById ('upload_panel').style.display = elm_id == 'upload_panel' ? 'block' : 'none';
699}
700
701function setDetails(path, pageanchor) {
702 // Sends a low level Ajax request
703 tinymce.util.XHR.send({
704 url : path + '/tinymce-jsondetails',
705 type : 'POST',
706 success : function(text) {
707 var html = "";
708 var data = eval('(' + text + ')');
709 document.getElementById ('internal_details_title').innerHTML = data.title;
710
711 if (data.thumb == "") {
712 document.getElementById ('internal_details_description').innerHTML = data.description;
713 } else {
714 document.getElementById ('internal_details_description').innerHTML = '<img src="' + data.thumb + '" border="0" />';
715 }
716
717 if (data.anchors.length == 0) {
718 document.getElementById ('pageanchorcontainer').style.display = 'none';
719 document.getElementById ('pageanchorlabel').style.display = 'none';
720 html = '<select id="pageanchor" name="pageanchor">';
721 html += '<option value="">top of page (default)</option>';
722 html += '</select>';
723 document.getElementById ('pageanchorcontainer').innerHTML = html;
724 } else {
725 document.getElementById ('pageanchorcontainer').style.display = 'block';
726 document.getElementById ('pageanchorlabel').style.display = 'block';
727 html = '<select id="pageanchor" name="pageanchor">';
728 html += '<option value="">top of page (default)</option>';
729 for (var i = 0; i < data.anchors.length; i++) {
730 html += '<option value="' + data.anchors[i] + '">' + data.anchors[i] + '</option>';
731 }
732 html += '</select>';
733 }
734 document.getElementById ('pageanchorcontainer').innerHTML = html;
735 if (pageanchor != '') {
736 selectByValue(document.forms[0], 'pageanchor', pageanchor, true);
737 }
738 current_path = path;
739 current_pageanchor = pageanchor;
740 document.getElementById('internal_details_panel').style.display = 'block';
741 document.getElementById('upload_panel').style.display = 'none';
742 }
743 });
744}
745
746function getCurrentFolderListing() {
747 getFolderListing(tinyMCEPopup.editor.settings.document_base_url, 'tinymce-jsonlinkablefolderlisting');
748}
749
750function getFolderListing(path, method) {
751 // Sends a low level Ajax request
752 tinymce.util.XHR.send({
753 url : path + '/' + method,
754 content_type : "application/x-www-form-urlencoded",
755 type : 'POST',
756 data : "searchtext=" + document.getElementById('searchtext').value + "&rooted=" + (tinyMCEPopup.editor.settings.rooted ? "True" : "False") + "&document_base_url=" + encodeURIComponent(tinyMCEPopup.editor.settings.document_base_url),
757
758 success : function(text) {
759 var html = "";
760 var data = eval('(' + text + ')');
761 if (data.items.length == 0) {
762 html = labels['label_no_items'];
763 } else {
764 for (var i = 0; i < data.items.length; i++) {
765 html += '<div class="' + (i % 2 == 0 ? 'even' : 'odd');
766 html += '"><input onclick="setDetails(\'';
767 html += data.items[i].url + '\', \'\');" type="radio" class="noborder" name="internallink" value="';
768 if (tinyMCEPopup.editor.settings.link_using_uids) {
769 html += "resolveuid/" + data.items[i].uid;
770 } else {
771 html += data.items[i].url;
772 }
773 html += '"/> ';
774 if (data.items[i].icon.length) {
775 html += '<img src="' + data.items[i].icon + '" border="0"/> ';
776 }
777 if (data.items[i].is_folderish) {
778 html += '<a class="contenttype-' + data.items[i].normalized_type + '" ';
779 html += 'href="javascript:getFolderListing(\'' + data.items[i].url + '\',\'tinymce-jsonlinkablefolderlisting' + '\')">';
780 html += data.items[i].title;
781 html += '</a>';
782 } else {
783 html += '<span class="contenttype-' + data.items[i].normalized_type + '">' + data.items[i].title + '</span>';
784 }
785 html += '</div>';
786 }
787 }
788 document.getElementById ('internallinkcontainer').innerHTML = html;
789 if (data.parent_url == "") {
790 document.getElementById ('uponelevel').style.display = 'none';
791 document.getElementById ('uponelevel').href = 'javascript:void(0)';
792 } else {
793 document.getElementById ('uponelevel').style.display = 'block';
794 document.getElementById ('uponelevel').href = 'javascript:getFolderListing(\'' + data.parent_url + '\',\'tinymce-jsonlinkablefolderlisting' + '\')';
795 }
796
797 html = "";
798 for (var i = 0; i < data.path.length; i++) {
799 if (i != 0) {
800 html += " &rarr; ";
801 }
802 if (i == data.path.length - 1) {
803 html += data.path[i].title;
804 } else {
805 html += '<a href="javascript:getFolderListing(\'' + data.path[i].url + '\',\'tinymce-jsonlinkablefolderlisting' + '\')">';
806 html += data.path[i].title;
807 html += '</a>';
808 }
809 }
810 document.getElementById ('internalpath').innerHTML = html;
811
812 // Check if allowed to upload
813 if (data.upload_allowed) {
814 document.getElementById ('upload').style.display = '';
815 } else {
816 document.getElementById ('upload').style.display = 'none';
817 }
818
819 // Set global path
820 current_path = path;
821 document.forms[1].action = current_path + '/tinymce-upload';
822 setRadioValue('internallink', current_link, 0);
823 if (current_link != "") {
824 if (current_link.indexOf('resolveuid') != -1) {
825 current_uid = current_link.split('resolveuid/')[1];
826 tinymce.util.XHR.send({
827 url : tinyMCEPopup.editor.settings.portal_url + '/portal_tinymce/tinymce-getpathbyuid?uid=' + current_uid,
828 type : 'GET',
829 success : function(text) {
830 current_url = getAbsoluteUrl(tinyMCEPopup.editor.settings.document_base_url, text);
831 setDetails(current_url, current_pageanchor);
832 }
833 });
834 } else {
835 setDetails(current_link, current_pageanchor);
836 }
837 }
838 }
839 });
840}
841
842function uploadOk(ok_msg) {
843 current_link = ok_msg;
844 displayPanel('internal_panel');
845 getFolderListing(current_path,'tinymce-jsonlinkablefolderlisting');
846}
847
848function uploadError(error_msg) {
849 alert (error_msg);
850}
851
852// While loading
853preinit();
854tinyMCEPopup.onInit.add(init);