Starship Posted March 26, 2015 Posted March 26, 2015 Hello,Do you have idea how to disable CKEditor "Autolink" for custom url, example: http://google.com?I need clean url not:<a ipsnoembed="true" href="http://google.com" rel="external nofollow">http://google.com</a>Here is Autolink plugin code:CKEDITOR.plugins.add("ipsautolink", { init: function(a) { var e = this; a.on("key", function(c) { if (32 == c.data.keyCode || 37 == c.data.keyCode || 38 == c.data.keyCode || 39 == c.data.keyCode || 40 == c.data.keyCode || 13 == c.data.keyCode) { var d = a.getSelection().getRanges()[0].getCommonAncestor().getParent().$; "A" != d.tagName && ("PRE" != d.tagName && !d.getAttribute("ipsnoautolink")) && (37 == c.data.keyCode || 38 == c.data.keyCode ? e.replaceLinks(a, d) : setTimeout(function() { e.replaceLinks(a, d) }, 5)) } }); CKEDITOR.instances[a.name].on("contentDom", function() { this.document.on("click", function() { e.replaceLinks(a, a.document.$) }) }) }, autolinkExp: "(?<!\\[img\\]|\\[img='|\\[img=\"|\\[img=|\\[code\\].+?|\\[url='|\\[url=\"|\\[url=|\\u2063)((?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))*)(?::\\d{2,5})?(?:\\/\\S*)?)", replaceLinks: function(a, e, c) { for (var d = e.childNodes, g = 0, h = d.length; g < h; g++) { var b = d[g]; if (b.nodeType == b.TEXT_NODE) { if (b.previousSibling && b.previousSibling.nodeType == b.TEXT_NODE && ("[url=" == b.previousSibling.textContent.substr(-5) || "[img]" == b.previousSibling.textContent.substr(-5) || "[code]" == b.previousSibling.textContent.substr(-6))) b.textContent = "" + b.textContent; var f = !1; if (XRegExp.execLb(b.textContent, this.autolinkExp, "i")) f = !0; else for (key in a.config.ipsEmoticons) { var j = RegExp("(?:\\s|^)(" + key.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1") + ")(?:\\s|$)", "i"); if (b.textContent.match(j)) { f = !0; break } } if (f) { var j = null, i = a.getSelection().getRanges(); if (i[0].startOffset == i[0].endOffset) { var l = i[0].startContainer.getText(), m = l.slice(0, i[0].startOffset + 1).search(/\S+$/), n = l.slice(i[0].startOffset).search(/\s/), i = 0 > n ? l.slice(m) : l.slice(m, n + i[0].startOffset); XRegExp.execLb(i, this.autolinkExp, "i") || (j = new CKEDITOR.dom.element.createFromHtml("<span>​</span>"), a.insertElement(j)) } this.replaceLinksInNode(b, a); b.nextSibling && (b.nextSibling.nextSibling && b.nextSibling.nextSibling.nextSibling) && this.replaceLinksInNode(b.nextSibling.nextSibling.nextSibling, a); j && j.remove() } } else b.nodeType == b.ELEMENT_NODE && "A" != b.tagName && ("PRE" != b.tagName && !b.getAttribute("ipsnoautolink")) && this.replaceLinks(a, b, c) } if ("P" == e.tagName || "DIV" == e.tagName) { var k = /(^\s{0,}|^.*<br(?: \/)?>\s{0,})<a href="(.*)"(?:[^>]+?)?>(\2)<\/a>(\s{0,}<br(?: \/)?>|$)/i; if (!e.getAttribute("ipsNoEmbed") && ("P" == e.tagName && e.innerHTML.match(k) || "DIV" == e.tagName && e.innerHTML.match(k))) { var f = e.innerHTML.match(k), o = e.innerHTML; e.innerHTML = e.innerHTML.replace(k, f[1] + ('<a data-cke-saved-href="' + f[2] + '" href="' + f[2] + '" ipsNoEmbed="true">' + f[2] + "</a>" + (f[4] ? f[4] : ""))); ips.getAjax()(ips.getSetting("baseURL") + "?app=core&module=system&controller=editor&do=validateLink&url=" + encodeURIComponent(f[2].replace(/&/g, "&")), { async: void 0 == c ? !0 : c }).done(function(a) { if (a.embed) { e.innerHTML = o.replace(k, f[1] + a.preview); for (var a = e.childNodes, b = 0, c = a.length; b < c; b++) if (a[b].nodeType == a[b].ELEMENT_NODE && "IFRAME" == a[b].tagName) { var d = a[b]; void 0 === $(d).data("embedcontent") && setTimeout(function() { d.style.height = d.contentWindow.document.body.scrollHeight + "px"; d.style.width = d.contentWindow.document.body.scrollWidth + "px"; d.style.overflow = "hidden"; d.scrolling = "no"; d.seamless = "seamless" }, 1500) } } }) } } }, replaceLinksInNode: function(a, e) { for (var c = XRegExp.execLb(a.textContent, this.autolinkExp, "i"); c;) { var d = a.textContent.indexOf(c[0]), g = a.textContent.substring(0, d), g = document.createTextNode(g); if (ips.utils.validate.isAllowedUrl(c[0])) { var h = document.createElement("a"); h.href = c[0]; h.appendChild(document.createTextNode(decodeURI(c[0]))) } else h = document.createTextNode(c[0]); a.textContent = a.textContent.substring(d + c[0].length); a.parentNode.insertBefore(g, a); a.parentNode.insertBefore(h, a); c = XRegExp.execLb(a.textContent, this.autolinkExp, "i") } for (key in e.config.ipsEmoticons) { c = RegExp("(?:\\s|^)(" + key.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1") + ")(?:\\s|$)", "i"); for (h = a.textContent.match(c); h;) { var d = a.textContent.indexOf(h[1]), g = a.textContent.substring(0, d), g = document.createTextNode(g), b = document.createElement("img"); b.src = e.config.ipsEmoticons[key]; b.alt = key; b.title = key; a.textContent = a.textContent.substring(d + h[1].length); a.parentNode.insertBefore(g, a); a.parentNode.insertBefore(b, a); h = a.textContent.match(c) } } } });Thank You!
Recommended Posts
Archived
This topic is now archived and is closed to further replies.