this.dom = this.createDOM();
this.dom.data('canvas-element', this);
+ this.wlxmlNode.setData('canvasElement', this);
};
$.extend(DocumentElement.prototype, {
}.bind(this));
if(_.isFunction(this.onStateChange)) {
this.onStateChange(changes);
+ if(_.isBoolean(changes.active)) {
+ if(changes.active) {
+ var ptr = this;
+ while(ptr && ptr.wlxmlNode.getTagName() === 'span') {
+ ptr = ptr.parent();
+ }
+ if(ptr && ptr.gutterGroup) {
+ ptr.gutterGroup.show();
+ }
+ }
+ }
}
},
parent: function() {
sameNode: function(other) {
return other && (typeof other === typeof this) && other.dom[0] === this.dom[0];
},
+ isRootElement: function() {
+ return this.sameNode(this.canvas.rootElement);
+ },
trigger: function() {
this.canvas.eventBus.trigger.apply(this.canvas.eventBus, Array.prototype.slice.call(arguments, 0));
// DocumentNodeElement represents an element node from WLXML document rendered inside Canvas
var DocumentNodeElement = function(wlxmlNode, canvas) {
DocumentElement.call(this, wlxmlNode, canvas);
- wlxmlNode.setData('canvasElement', this);
this.init(this.dom);
};
clearWidgets: function() {
this.dom.children('.canvas-widgets').empty();
},
+ addToGutter: function(view) {
+ if(!this.gutterGroup) {
+ this.gutterGroup = this.canvas.gutter.createViewGroup({
+ offsetHint: function() {
+ return this.canvas.getElementOffset(this);
+ }.bind(this)
+ }, this);
+ }
+ this.gutterGroup.addView(view);
+ },
handle: function(event) {
var method = 'on' + event.type[0].toUpperCase() + event.type.substr(1);
if(this[method]) {
createDOM: function() {
var wrapper = $('<div>').attr('document-node-element', ''),
widgetsContainer = $('<div>')
- .addClass('canvas-widgets')
- .attr('contenteditable', false),
+ .addClass('canvas-widgets'),
contentContainer = $('<div>')
.attr('document-element-content', '');
_container: function() {
return this.dom.children('[document-element-content]');
},
- detach: function() {
- var parents = this.parents();
- this.dom.detach();
- if(parents[0]) {
- parents[0].refreshPath();
+ detach: function(isChild) {
+ var parents;
+
+ if(this.gutterGroup) {
+ this.gutterGroup.remove();
+ }
+ if(_.isFunction(this.children)) {
+ this.children().forEach(function(child) {
+ child.detach(true);
+ });
}
- return this;
+
+ if(!isChild) {
+ parents = this.parents();
+ this.dom.detach();
+ if(parents[0]) {
+ parents[0].refreshPath();
+ }
+ }
+ return this;
},
before: function(params) {
return manipulate(this, params, 'before');
.text(this.wlxmlNode.getText() || utils.unicode.ZWS);
return dom;
},
- detach: function() {
- this.dom.detach();
+ detach: function(isChild) {
+ if(!isChild) {
+ this.dom.detach();
+ }
return this;
},
setText: function(text) {
this.dom.contents()[0].data = text;
}
},
+ handle: function(event) {
+ this.setText(event.meta.node.getText());
+ },
getText: function(options) {
options = _.extend({raw: false}, options || {});
var toret = this.dom.text();