X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/1a42d792d1124f110fd7eaad8ac4da0289cdd5df..51a333278c2989a5a0022c19404bd257bf55cb27:/src/editor/plugins/core/links/linkElement.js diff --git a/src/editor/plugins/core/links/linkElement.js b/src/editor/plugins/core/links/linkElement.js index 8a9edd7..61d2abc 100644 --- a/src/editor/plugins/core/links/linkElement.js +++ b/src/editor/plugins/core/links/linkElement.js @@ -26,8 +26,11 @@ _.extend(linkElement, { this.box.hide(); this.addWidget(this.box); }, - markAsCurrent: function(toggle) { - this.box.toggle(toggle); + onStateChange: function(changes) { + genericElement.onStateChange.call(this, changes); + if(_.isBoolean(changes.active)) { + this.box.toggle(changes.active); + } }, onNodeAttrChange: function(event) { if(event.meta.attr === 'href') { @@ -39,12 +42,18 @@ _.extend(linkElement, { changeLink: function(e) { var el = this, + doc = this.wlxmlNode.document, + offset = el.canvas.getSelection().toDocumentFragment().offset, 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 +65,11 @@ _.extend(linkElement, { event.success(); }, { metadata: { - description: gettext('Edit link') + description: gettext('Edit link'), + fragment: doc.createFragment(doc.CaretFragment, {node: el.wlxmlNode.contents()[0], offset:offset}) + }, + success: function() { + el.canvas.select(doc.createFragment(doc.CaretFragment, {node: el.wlxmlNode.contents()[0], offset:offset})); } }); }); @@ -64,12 +77,27 @@ _.extend(linkElement, { }, deleteLink: function() { - var el = this; + var el = this, + doc = this.wlxmlNode.document; + el.wlxmlNode.document.transaction(function() { - el.wlxmlNode.unwrapContent(); + var f = el.canvas.getSelection().toDocumentFragment(), + prefLen = 0, + ret; + + if(el.wlxmlNode.isPrecededByTextNode()) { + prefLen = el.wlxmlNode.prev().getText().length; + } + + ret = el.wlxmlNode.unwrapContent(); + return doc.createFragment(doc.CaretFragment, {node: ret.element1, offset: prefLen + f.offset}); }, { metadata: { - description: gettext('Remove link') + description: gettext('Remove link'), + fragment: doc.createFragment(doc.CaretFragment, {node: el.wlxmlNode.contents()[0], offset:0}) + }, + success: function(ret) { + el.canvas.select(ret); } }); },