editor: improved links, first take
[fnpeditor.git] / src / editor / plugins / core / links / linkElement.js
1 define(function(require) {
2     
3 'use strict';
4 /* globals gettext */
5
6
7 var $ = require('libs/jquery'),
8     _ = require('libs/underscore'),
9     genericElement = require('modules/documentCanvas/canvas/genericElement'),
10     Dialog = require('views/dialog/dialog'),
11     boxTemplate = require('libs/text!./box.html'),
12     linkElement = Object.create(genericElement);
13
14
15 _.extend(linkElement, {
16     init: function() {
17         genericElement.init.call(this);
18         _.bindAll(this, 'changeLink', 'deleteLink');
19
20         this.box = $(_.template(boxTemplate)({href: this.wlxmlNode.getAttr('href')}));
21         this.box.find('.change').on('click', this.changeLink);
22         this.box.find('.delete').on('click', this.deleteLink);
23         this.box.hide();
24         this.addWidget(this.box);
25     },
26     markAsCurrent: function(toggle) {
27         this.box.toggle(toggle);
28     },
29     onNodeAttrChange: function(event) {
30         if(event.meta.attr === 'href') {
31             var link = this.box.find('[link]');
32             link.text(event.meta.newVal);
33             link.attr('href', event.meta.newVal);
34         }
35     },
36
37     changeLink: function(e) {
38         var el = this,
39             dialog = Dialog.create({
40             title: gettext('Edit link'),
41             executeButtonText: gettext('Apply'),
42             cancelButtonText: gettext('Cancel'),
43             fields: [
44                 {label: gettext('Link'), name: 'href', type: 'input', initialValue: el.wlxmlNode.getAttr('href')}
45             ]
46         });
47         e.preventDefault();
48         e.stopPropagation();
49
50         dialog.on('execute', function(event) {
51             el.wlxmlNode.document.transaction(function() {
52                 el.wlxmlNode.setAttr('href', event.formData.href);
53                 event.success();
54             }, {
55                 metadata: {
56                     description: gettext('Edit link')
57                 }
58             });
59         });
60         dialog.show();
61     },
62
63     deleteLink: function() {
64         var el = this;
65         el.wlxmlNode.document.transaction(function() {
66             el.wlxmlNode.unwrapContent();
67         }, {
68             metadata: {
69                 description: gettext('Remove link')
70             }
71         });
72     }
73 });
74
75 return linkElement;
76
77 });