X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/34c9285ef29074d0c13cea81fbb05e93eb369b4a..981e87b8a8d4dfca0c816d8bcedcd7c4dbdab9f4:/src/editor/plugins/core/links/linkElement.js?ds=sidebyside diff --git a/src/editor/plugins/core/links/linkElement.js b/src/editor/plugins/core/links/linkElement.js index 0600733..503e958 100644 --- a/src/editor/plugins/core/links/linkElement.js +++ b/src/editor/plugins/core/links/linkElement.js @@ -17,8 +17,8 @@ _.extend(linkElement, { genericElement.init.call(this); _.bindAll(this, 'changeLink', 'deleteLink'); - var linkText = this.wlxmlNode.getAttr('href'), - linkUrl = this.wlxmlNode.document.getUrlForLink(linkText); + var linkText = this.wlxmlNode.getAttr('href') || '', + linkUrl = this.getUrl(linkText); this.box = $(_.template(boxTemplate)({text: linkText, url: linkUrl})); this.box.find('.change').on('click', this.changeLink); @@ -33,18 +33,23 @@ _.extend(linkElement, { if(event.meta.attr === 'href') { var link = this.box.find('[link]'); link.text(event.meta.newVal); - link.attr('href', this.wlxmlNode.document.getUrlForLink(event.meta.newVal)); + link.attr('href', this.getUrl(event.meta.newVal)); } }, changeLink: function(e) { var el = this, + doc = this.wlxmlNode.document, dialog = Dialog.create({ title: gettext('Edit link'), executeButtonText: gettext('Apply'), cancelButtonText: gettext('Cancel'), fields: [ - {label: gettext('Link'), name: 'href', type: 'input', initialValue: el.wlxmlNode.getAttr('href')} + {label: gettext('Link'), name: 'href', type: 'input', initialValue: el.wlxmlNode.getAttr('href'), + prePasteHandler: function(text) { + return this.wlxmlNode.document.getLinkForUrl(text); + }.bind(this) + } ] }); e.preventDefault(); @@ -56,7 +61,8 @@ _.extend(linkElement, { event.success(); }, { metadata: { - description: gettext('Edit link') + description: gettext('Edit link'), + fragment: doc.createFragment(doc.CaretFragment, {node: el.wlxmlNode.contents()[0], offset:0}) } }); }); @@ -64,14 +70,25 @@ _.extend(linkElement, { }, deleteLink: function() { - var el = this; + var el = this, + doc = this.wlxmlNode.document; + el.wlxmlNode.document.transaction(function() { el.wlxmlNode.unwrapContent(); }, { metadata: { - description: gettext('Remove link') + description: gettext('Remove link'), + fragment: doc.createFragment(doc.CaretFragment, {node: el.wlxmlNode.contents()[0], offset:0}) } }); + }, + + getUrl: function(link) { + var pattern = /^[a-z]*:\/\//g; + if(!pattern.test(link)) { + link = 'http://' + link; + } + return this.wlxmlNode.document.getUrlForLink(link); } });