[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 /* Functions for the advlink plugin popup */ 2 3 tinyMCEPopup.requireLangPack(); 4 5 var templates = { 6 "window.open" : "window.open('$url}','$target}','$options}')" 7 }; 8 9 function preinit() { 10 var url; 11 12 if (url = tinyMCEPopup.getParam("external_link_list_url")) 13 document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>'); 14 } 15 16 function changeClass() { 17 var f = document.forms[0]; 18 19 f.classes.value = getSelectValue(f, 'classlist'); 20 } 21 22 function init() { 23 tinyMCEPopup.resizeToInnerSize(); 24 25 var formObj = document.forms[0]; 26 var inst = tinyMCEPopup.editor; 27 var elm = inst.selection.getNode(); 28 var action = "insert"; 29 var html; 30 31 document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink'); 32 document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink'); 33 document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target'); 34 35 // Link list 36 html = getLinkListHTML('linklisthref','href'); 37 if (html == "") 38 document.getElementById("linklisthrefrow").style.display = 'none'; 39 else 40 document.getElementById("linklisthrefcontainer").innerHTML = html; 41 42 // Anchor list 43 html = getAnchorListHTML('anchorlist','href'); 44 if (html == "") 45 document.getElementById("anchorlistrow").style.display = 'none'; 46 else 47 document.getElementById("anchorlistcontainer").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 = inst.dom.getParent(elm, "A"); 57 if (elm == null) { 58 var prospect = inst.dom.create("p", null, inst.selection.getContent()); 59 if (prospect.childNodes.length === 1) { 60 elm = prospect.firstChild; 61 } 62 } 63 64 if (elm != null && elm.nodeName == "A") 65 action = "update"; 66 67 formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true); 68 69 setPopupControlsDisabled(true); 70 71 if (action == "update") { 72 var href = inst.dom.getAttrib(elm, 'href'); 73 var onclick = inst.dom.getAttrib(elm, 'onclick'); 74 var linkTarget = inst.dom.getAttrib(elm, 'target') ? inst.dom.getAttrib(elm, 'target') : "_self"; 75 76 // Setup form data 77 setFormValue('href', href); 78 setFormValue('title', inst.dom.getAttrib(elm, 'title')); 79 setFormValue('id', inst.dom.getAttrib(elm, 'id')); 80 setFormValue('style', inst.dom.getAttrib(elm, "style")); 81 setFormValue('rel', inst.dom.getAttrib(elm, 'rel')); 82 setFormValue('rev', inst.dom.getAttrib(elm, 'rev')); 83 setFormValue('charset', inst.dom.getAttrib(elm, 'charset')); 84 setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang')); 85 setFormValue('dir', inst.dom.getAttrib(elm, 'dir')); 86 setFormValue('lang', inst.dom.getAttrib(elm, 'lang')); 87 setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); 88 setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); 89 setFormValue('type', inst.dom.getAttrib(elm, 'type')); 90 setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus')); 91 setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur')); 92 setFormValue('onclick', onclick); 93 setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick')); 94 setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown')); 95 setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup')); 96 setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover')); 97 setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove')); 98 setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout')); 99 setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress')); 100 setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown')); 101 setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup')); 102 setFormValue('target', linkTarget); 103 setFormValue('classes', inst.dom.getAttrib(elm, 'class')); 104 105 // Parse onclick data 106 if (onclick != null && onclick.indexOf('window.open') != -1) 107 parseWindowOpen(onclick); 108 else 109 parseFunction(onclick); 110 111 // Select by the values 112 selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir')); 113 selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel')); 114 selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev')); 115 selectByValue(formObj, 'linklisthref', href); 116 117 if (href.charAt(0) == '#') 118 selectByValue(formObj, 'anchorlist', href); 119 120 addClassesToList('classlist', 'advlink_styles'); 121 122 selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true); 123 selectByValue(formObj, 'targetlist', linkTarget, true); 124 } else 125 addClassesToList('classlist', 'advlink_styles'); 126 } 127 128 function checkPrefix(n) { 129 if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email'))) 130 n.value = 'mailto:' + n.value; 131 132 if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external'))) 133 n.value = 'http://' + n.value; 134 } 135 136 function setFormValue(name, value) { 137 document.forms[0].elements[name].value = value; 138 } 139 140 function parseWindowOpen(onclick) { 141 var formObj = document.forms[0]; 142 143 // Preprocess center code 144 if (onclick.indexOf('return false;') != -1) { 145 formObj.popupreturn.checked = true; 146 onclick = onclick.replace('return false;', ''); 147 } else 148 formObj.popupreturn.checked = false; 149 150 var onClickData = parseLink(onclick); 151 152 if (onClickData != null) { 153 formObj.ispopup.checked = true; 154 setPopupControlsDisabled(false); 155 156 var onClickWindowOptions = parseOptions(onClickData['options']); 157 var url = onClickData['url']; 158 159 formObj.popupname.value = onClickData['target']; 160 formObj.popupurl.value = url; 161 formObj.popupwidth.value = getOption(onClickWindowOptions, 'width'); 162 formObj.popupheight.value = getOption(onClickWindowOptions, 'height'); 163 164 formObj.popupleft.value = getOption(onClickWindowOptions, 'left'); 165 formObj.popuptop.value = getOption(onClickWindowOptions, 'top'); 166 167 if (formObj.popupleft.value.indexOf('screen') != -1) 168 formObj.popupleft.value = "c"; 169 170 if (formObj.popuptop.value.indexOf('screen') != -1) 171 formObj.popuptop.value = "c"; 172 173 formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes"; 174 formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes"; 175 formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes"; 176 formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes"; 177 formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes"; 178 formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes"; 179 formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes"; 180 181 buildOnClick(); 182 } 183 } 184 185 function parseFunction(onclick) { 186 var formObj = document.forms[0]; 187 var onClickData = parseLink(onclick); 188 189 // TODO: Add stuff here 190 } 191 192 function getOption(opts, name) { 193 return typeof(opts[name]) == "undefined" ? "" : opts[name]; 194 } 195 196 function setPopupControlsDisabled(state) { 197 var formObj = document.forms[0]; 198 199 formObj.popupname.disabled = state; 200 formObj.popupurl.disabled = state; 201 formObj.popupwidth.disabled = state; 202 formObj.popupheight.disabled = state; 203 formObj.popupleft.disabled = state; 204 formObj.popuptop.disabled = state; 205 formObj.popuplocation.disabled = state; 206 formObj.popupscrollbars.disabled = state; 207 formObj.popupmenubar.disabled = state; 208 formObj.popupresizable.disabled = state; 209 formObj.popuptoolbar.disabled = state; 210 formObj.popupstatus.disabled = state; 211 formObj.popupreturn.disabled = state; 212 formObj.popupdependent.disabled = state; 213 214 setBrowserDisabled('popupurlbrowser', state); 215 } 216 217 function parseLink(link) { 218 link = link.replace(new RegExp(''', 'g'), "'"); 219 220 var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1"); 221 222 // Is function name a template function 223 var template = templates[fnName]; 224 if (template) { 225 // Build regexp 226 var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi")); 227 var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\("; 228 var replaceStr = ""; 229 for (var i=0; i<variableNames.length; i++) { 230 // Is string value 231 if (variableNames[i].indexOf("'${") != -1) 232 regExp += "'(.*)'"; 233 else // Number value 234 regExp += "([0-9]*)"; 235 236 replaceStr += "$" + (i+1); 237 238 // Cleanup variable name 239 variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), ""); 240 241 if (i != variableNames.length-1) { 242 regExp += "\\s*,\\s*"; 243 replaceStr += "<delim>"; 244 } else 245 regExp += ".*"; 246 } 247 248 regExp += "\\);?"; 249 250 // Build variable array 251 var variables = []; 252 variables["_function"] = fnName; 253 var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>'); 254 for (var i=0; i<variableNames.length; i++) 255 variables[variableNames[i]] = variableValues[i]; 256 257 return variables; 258 } 259 260 return null; 261 } 262 263 function parseOptions(opts) { 264 if (opts == null || opts == "") 265 return []; 266 267 // Cleanup the options 268 opts = opts.toLowerCase(); 269 opts = opts.replace(/;/g, ","); 270 opts = opts.replace(/[^0-9a-z=,]/g, ""); 271 272 var optionChunks = opts.split(','); 273 var options = []; 274 275 for (var i=0; i<optionChunks.length; i++) { 276 var parts = optionChunks[i].split('='); 277 278 if (parts.length == 2) 279 options[parts[0]] = parts[1]; 280 } 281 282 return options; 283 } 284 285 function buildOnClick() { 286 var formObj = document.forms[0]; 287 288 if (!formObj.ispopup.checked) { 289 formObj.onclick.value = ""; 290 return; 291 } 292 293 var onclick = "window.open('"; 294 var url = formObj.popupurl.value; 295 296 onclick += url + "','"; 297 onclick += formObj.popupname.value + "','"; 298 299 if (formObj.popuplocation.checked) 300 onclick += "location=yes,"; 301 302 if (formObj.popupscrollbars.checked) 303 onclick += "scrollbars=yes,"; 304 305 if (formObj.popupmenubar.checked) 306 onclick += "menubar=yes,"; 307 308 if (formObj.popupresizable.checked) 309 onclick += "resizable=yes,"; 310 311 if (formObj.popuptoolbar.checked) 312 onclick += "toolbar=yes,"; 313 314 if (formObj.popupstatus.checked) 315 onclick += "status=yes,"; 316 317 if (formObj.popupdependent.checked) 318 onclick += "dependent=yes,"; 319 320 if (formObj.popupwidth.value != "") 321 onclick += "width=" + formObj.popupwidth.value + ","; 322 323 if (formObj.popupheight.value != "") 324 onclick += "height=" + formObj.popupheight.value + ","; 325 326 if (formObj.popupleft.value != "") { 327 if (formObj.popupleft.value != "c") 328 onclick += "left=" + formObj.popupleft.value + ","; 329 else 330 onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',"; 331 } 332 333 if (formObj.popuptop.value != "") { 334 if (formObj.popuptop.value != "c") 335 onclick += "top=" + formObj.popuptop.value + ","; 336 else 337 onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',"; 338 } 339 340 if (onclick.charAt(onclick.length-1) == ',') 341 onclick = onclick.substring(0, onclick.length-1); 342 343 onclick += "');"; 344 345 if (formObj.popupreturn.checked) 346 onclick += "return false;"; 347 348 // tinyMCE.debug(onclick); 349 350 formObj.onclick.value = onclick; 351 352 if (formObj.href.value == "") 353 formObj.href.value = url; 354 } 355 356 function setAttrib(elm, attrib, value) { 357 var formObj = document.forms[0]; 358 var valueElm = formObj.elements[attrib.toLowerCase()]; 359 var dom = tinyMCEPopup.editor.dom; 360 361 if (typeof(value) == "undefined" || value == null) { 362 value = ""; 363 364 if (valueElm) 365 value = valueElm.value; 366 } 367 368 // Clean up the style 369 if (attrib == 'style') 370 value = dom.serializeStyle(dom.parseStyle(value), 'a'); 371 372 dom.setAttrib(elm, attrib, value); 373 } 374 375 function getAnchorListHTML(id, target) { 376 var ed = tinyMCEPopup.editor, nodes = ed.dom.select('a'), name, i, len, html = ""; 377 378 for (i=0, len=nodes.length; i<len; i++) { 379 if ((name = ed.dom.getAttrib(nodes[i], "name")) != "") 380 html += '<option value="#' + name + '">' + name + '</option>'; 381 382 if ((name = nodes[i].id) != "" && !nodes[i].href) 383 html += '<option value="#' + name + '">' + name + '</option>'; 384 } 385 386 if (html == "") 387 return ""; 388 389 html = '<select id="' + id + '" name="' + id + '" class="mceAnchorList"' 390 + ' onchange="this.form.' + target + '.value=this.options[this.selectedIndex].value"' 391 + '>' 392 + '<option value="">---</option>' 393 + html 394 + '</select>'; 395 396 return html; 397 } 398 399 function insertAction() { 400 var inst = tinyMCEPopup.editor; 401 var elm, elementArray, i; 402 403 elm = inst.selection.getNode(); 404 checkPrefix(document.forms[0].href); 405 406 elm = inst.dom.getParent(elm, "A"); 407 408 // Remove element if there is no href 409 if (!document.forms[0].href.value) { 410 i = inst.selection.getBookmark(); 411 inst.dom.remove(elm, 1); 412 inst.selection.moveToBookmark(i); 413 tinyMCEPopup.execCommand("mceEndUndoLevel"); 414 tinyMCEPopup.close(); 415 return; 416 } 417 418 // Create new anchor elements 419 if (elm == null) { 420 inst.getDoc().execCommand("unlink", false, null); 421 tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1}); 422 423 elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';}); 424 for (i=0; i<elementArray.length; i++) 425 setAllAttribs(elm = elementArray[i]); 426 } else 427 setAllAttribs(elm); 428 429 // Don't move caret if selection was image 430 if (elm.childNodes.length != 1 || elm.firstChild.nodeName != 'IMG') { 431 inst.focus(); 432 inst.selection.select(elm); 433 inst.selection.collapse(0); 434 tinyMCEPopup.storeSelection(); 435 } 436 437 tinyMCEPopup.execCommand("mceEndUndoLevel"); 438 tinyMCEPopup.close(); 439 } 440 441 function setAllAttribs(elm) { 442 var formObj = document.forms[0]; 443 var href = formObj.href.value.replace(/ /g, '%20'); 444 var target = getSelectValue(formObj, 'targetlist'); 445 446 setAttrib(elm, 'href', href); 447 setAttrib(elm, 'title'); 448 setAttrib(elm, 'target', target == '_self' ? '' : target); 449 setAttrib(elm, 'id'); 450 setAttrib(elm, 'style'); 451 setAttrib(elm, 'class', getSelectValue(formObj, 'classlist')); 452 setAttrib(elm, 'rel'); 453 setAttrib(elm, 'rev'); 454 setAttrib(elm, 'charset'); 455 setAttrib(elm, 'hreflang'); 456 setAttrib(elm, 'dir'); 457 setAttrib(elm, 'lang'); 458 setAttrib(elm, 'tabindex'); 459 setAttrib(elm, 'accesskey'); 460 setAttrib(elm, 'type'); 461 setAttrib(elm, 'onfocus'); 462 setAttrib(elm, 'onblur'); 463 setAttrib(elm, 'onclick'); 464 setAttrib(elm, 'ondblclick'); 465 setAttrib(elm, 'onmousedown'); 466 setAttrib(elm, 'onmouseup'); 467 setAttrib(elm, 'onmouseover'); 468 setAttrib(elm, 'onmousemove'); 469 setAttrib(elm, 'onmouseout'); 470 setAttrib(elm, 'onkeypress'); 471 setAttrib(elm, 'onkeydown'); 472 setAttrib(elm, 'onkeyup'); 473 474 // Refresh in old MSIE 475 if (tinyMCE.isMSIE5) 476 elm.outerHTML = elm.outerHTML; 477 } 478 479 function getSelectValue(form_obj, field_name) { 480 var elm = form_obj.elements[field_name]; 481 482 if (!elm || elm.options == null || elm.selectedIndex == -1) 483 return ""; 484 485 return elm.options[elm.selectedIndex].value; 486 } 487 488 function getLinkListHTML(elm_id, target_form_element, onchange_func) { 489 if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0) 490 return ""; 491 492 var html = ""; 493 494 html += '<select id="' + elm_id + '" name="' + elm_id + '"'; 495 html += ' class="mceLinkList" onchange="this.form.' + target_form_element + '.value='; 496 html += 'this.options[this.selectedIndex].value;'; 497 498 if (typeof(onchange_func) != "undefined") 499 html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);'; 500 501 html += '"><option value="">---</option>'; 502 503 for (var i=0; i<tinyMCELinkList.length; i++) 504 html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>'; 505 506 html += '</select>'; 507 508 return html; 509 510 // tinyMCE.debug('-- image list start --', html, '-- image list end --'); 511 } 512 513 function getTargetListHTML(elm_id, target_form_element) { 514 var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';'); 515 var html = ''; 516 517 html += '<select id="' + elm_id + '" name="' + elm_id + '" onchange="this.form.' + target_form_element + '.value='; 518 html += 'this.options[this.selectedIndex].value;">'; 519 html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>'; 520 html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>'; 521 html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>'; 522 html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>'; 523 524 for (var i=0; i<targets.length; i++) { 525 var key, value; 526 527 if (targets[i] == "") 528 continue; 529 530 key = targets[i].split('=')[0]; 531 value = targets[i].split('=')[1]; 532 533 html += '<option value="' + key + '">' + value + ' (' + key + ')</option>'; 534 } 535 536 html += '</select>'; 537 538 return html; 539 } 540 541 // While loading 542 preinit(); 543 tinyMCEPopup.onInit.add(init);
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |