X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/981e87b8a8d4dfca0c816d8bcedcd7c4dbdab9f4..c34c91ffe1f49c9b4d7e02fd4f04c1976df31261:/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 503e958..4725f73 100644 --- a/src/editor/plugins/core/links/linkElement.js +++ b/src/editor/plugins/core/links/linkElement.js @@ -9,6 +9,7 @@ var $ = require('libs/jquery'), genericElement = require('modules/documentCanvas/canvas/genericElement'), Dialog = require('views/dialog/dialog'), boxTemplate = require('libs/text!./box.html'), + add_attachments = require('views/attachments/add_attachments'), linkElement = Object.create(genericElement); @@ -18,16 +19,26 @@ _.extend(linkElement, { _.bindAll(this, 'changeLink', 'deleteLink'); var linkText = this.wlxmlNode.getAttr('href') || '', - linkUrl = this.getUrl(linkText); + linkUrl = this.getUrl(linkText), + badLink; - this.box = $(_.template(boxTemplate)({text: linkText, url: linkUrl})); + if (linkText.substr(0,7) === 'file://') { + var filename = decodeURIComponent(linkText.substr(7)); + // ugly + badLink = (window.materials.indexOf(filename) < 0); + } + + this.box = $(_.template(boxTemplate)({text: linkText, url: linkUrl, bad: badLink})); this.box.find('.change').on('click', this.changeLink); this.box.find('.delete').on('click', this.deleteLink); 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') { @@ -40,6 +51,7 @@ _.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'), @@ -62,11 +74,15 @@ _.extend(linkElement, { }, { metadata: { description: gettext('Edit link'), - fragment: doc.createFragment(doc.CaretFragment, {node: el.wlxmlNode.contents()[0], offset:0}) + 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})); } }); }); dialog.show(); + add_attachments(dialog); }, deleteLink: function() { @@ -74,11 +90,23 @@ _.extend(linkElement, { 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'), fragment: doc.createFragment(doc.CaretFragment, {node: el.wlxmlNode.contents()[0], offset:0}) + }, + success: function(ret) { + el.canvas.select(ret); } }); },