5a920362 |
1 | /* Functions for the plonelink plugin popup */ |
2 | |
3 | tinyMCEPopup.requireLangPack(); |
4 | |
5 | var templates = { |
6 | "window.open" : "window.open('${url}','${target}','${options}')" |
7 | }; |
8 | |
9 | var current_path; |
10 | var current_link = ""; |
11 | var current_url = ""; |
12 | var current_pageanchor = ""; |
13 | var labels = ""; |
14 | |
15 | function 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 | |
22 | function 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 | |
140 | function 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 | |
146 | function 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 | } |
166 | function getParentUrl(url) { |
167 | var url_array = url.split('/'); |
168 | url_array.pop(); |
169 | return url_array.join('/'); |
170 | } |
171 | |
172 | function 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 | |
198 | function setFormValue(name, value, formnr) { |
199 | document.forms[formnr].elements[name].value = value; |
200 | } |
201 | |
202 | function 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 | |
246 | function parseFunction(onclick) { |
247 | var onClickData = parseLink(onclick); |
248 | |
249 | // TODO: Add stuff here |
250 | } |
251 | |
252 | function getOption(opts, name) { |
253 | return typeof(opts[name]) == "undefined" ? "" : opts[name]; |
254 | } |
255 | |
256 | function parseLink(link) { |
257 | link = link.replace(new RegExp(''', '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 | |
302 | function 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 | |
324 | function 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 | |
383 | function 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 | |
398 | function 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 | |
416 | function 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 | |
450 | function getInputValue(name, formnr) { |
451 | return document.forms[formnr].elements[name].value; |
452 | } |
453 | |
454 | function 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 | |
472 | function 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 | |
487 | function 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 | |
537 | function 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 | |
581 | function 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 | |
621 | function 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 | |
630 | function 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 | |
655 | function 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 | |
664 | function 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 | |
692 | function 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 | |
701 | function 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 | |
746 | function getCurrentFolderListing() { |
747 | getFolderListing(tinyMCEPopup.editor.settings.document_base_url, 'tinymce-jsonlinkablefolderlisting'); |
748 | } |
749 | |
750 | function 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 += " → "; |
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 | |
842 | function uploadOk(ok_msg) { |
843 | current_link = ok_msg; |
844 | displayPanel('internal_panel'); |
845 | getFolderListing(current_path,'tinymce-jsonlinkablefolderlisting'); |
846 | } |
847 | |
848 | function uploadError(error_msg) { |
849 | alert (error_msg); |
850 | } |
851 | |
852 | // While loading |
853 | preinit(); |
854 | tinyMCEPopup.onInit.add(init); |