1 define(function(require) {
5 var documentElement = require('./documentElement'),
6 utils = require('./utils'),
7 wlxmlUtils = require('utils/wlxml');
9 var labelWidget = function(tag, klass) {
11 .addClass('canvas-widget canvas-widget-label')
12 .text(wlxmlUtils.getTagLabel(tag) + (klass ? ' / ' + wlxmlUtils.getClassLabel(klass) : ''));
14 void(labelWidget); // for linters; labelWidget is unused on purpose for now
18 onNodeAttrChange: function(event) {
19 if(event.meta.attr === 'class') {
20 this.setWlxmlClass(event.meta.newVal); //
23 onNodeAdded: function(event) {
24 if(event.meta.node.isRoot()) {
25 this.canvas.reloadRoot();
29 var nodeIndex = event.meta.node.getIndex(),
30 referenceElement, referenceAction, actionArg;
33 referenceElement = this;
34 referenceAction = 'prepend';
36 referenceElement = this.children()[nodeIndex-1];
37 referenceAction = 'after';
40 actionArg = (event.type === 'nodeMoved' && utils.findCanvasElement(event.meta.node, event.meta.parent)) || event.meta.node;
41 referenceElement[referenceAction](actionArg);
43 onNodeMoved: function(event) {
44 return this.onNodeAdded.call(this, event, true);
46 onNodeDetached: function(event) {
47 if(event.meta.node.sameNode(this)) {
50 this.children().some(function(child) {
51 if(child.wlxmlNode.sameNode(event.meta.node)) {
58 onNodeTextChange: function(event) {
59 var toSet = event.meta.node.getText();
60 this.children().some(function(child) {
61 if(child.wlxmlNode.sameNode(event.meta.node)) {
63 toSet = utils.unicode.ZWS;
65 if(toSet !== child.getText()) {
73 prepend: function(param) {
75 if(param instanceof documentElement.DocumentElement) {
78 element = this.canvas.createElement(param);
80 this._container().prepend(element.dom());
85 children: function() {
88 this._container().contents().each(function() {
89 var childElement = element.canvas.getDocumentElement(this);
90 if(childElement === undefined) {
94 toret.push(childElement);
99 getFirst: function(e1, e2) {
100 var idx1 = this.childIndex(e1),
101 idx2 = this.childIndex(e2);
102 if(e1 === null || e2 === null) {
105 return idx1 <= idx2 ? e1: e2;
108 childIndex: function(child) {
109 var children = this.children(),
111 children.forEach(function(c, idx) {
112 if(c.sameNode(child)) {
120 getWlxmlClass: function() {
121 var klass = this._container().attr('wlxml-class');
123 return klass.replace(/-/g, '.');
127 setWlxmlClass: function(klass) {
128 if(klass === this.getWlxmlClass()) {
132 this._container().attr('wlxml-class', klass.replace(/\./g, '-'));
135 this._container().removeAttr('wlxml-class');
141 .attr('wlxml-tag', this.wlxmlNode.getTagName());
142 this.setWlxmlClass(this.wlxmlNode.getClass());
143 this.wlxmlNode.contents().forEach(function(node) {
144 this._container().append(this.canvas.createElement(node).dom());
147 containsBlock: function() {
148 return this.children()
149 .filter(function(child) {
150 return child instanceof documentElement.DocumentNodeElement;
152 .some(function(child) {
153 if(child.isBlock()) {
156 return child.containsBlock();
160 getVerticallyFirstTextElement: function() {
162 this.children().some(function(child) {
163 if(child instanceof documentElement.DocumentTextElement) {
165 return true; // break
167 toret = child.getVerticallyFirstTextElement();
169 return true; // break