fnp
/
fnpeditor.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
editor: Handle hitting backspace/delete on arbitrary selection
[fnpeditor.git]
/
src
/
editor
/
modules
/
documentCanvas
/
canvas
/
documentElement.js
diff --git
a/src/editor/modules/documentCanvas/canvas/documentElement.js
b/src/editor/modules/documentCanvas/canvas/documentElement.js
index
210c492
..
60e79de
100644
(file)
--- a/
src/editor/modules/documentCanvas/canvas/documentElement.js
+++ b/
src/editor/modules/documentCanvas/canvas/documentElement.js
@@
-7,36
+7,36
@@
define([
], function($, _, utils, widgets, wlxmlManagers) {
'use strict';
], function($, _, utils, widgets, wlxmlManagers) {
'use strict';
+/* global Node:false, document:false */
// DocumentElement represents a text or an element node from WLXML document rendered inside Canvas
var DocumentElement = function(htmlElement, canvas) {
// DocumentElement represents a text or an element node from WLXML document rendered inside Canvas
var DocumentElement = function(htmlElement, canvas) {
- if(arguments.length === 0)
+ if(arguments.length === 0)
{
return;
return;
+ }
this.canvas = canvas;
this._setupDOMHandler(htmlElement);
this.canvas = canvas;
this._setupDOMHandler(htmlElement);
-}
+}
;
var elementTypeFromWlxmlNode = function(wlxmlNode) {
return wlxmlNode.nodeType === Node.TEXT_NODE ? DocumentTextElement : DocumentNodeElement;
var elementTypeFromWlxmlNode = function(wlxmlNode) {
return wlxmlNode.nodeType === Node.TEXT_NODE ? DocumentTextElement : DocumentNodeElement;
-}
+}
;
$.extend(DocumentElement, {
create: function(node, canvas) {
return elementTypeFromWlxmlNode(node).create(node, canvas);
},
$.extend(DocumentElement, {
create: function(node, canvas) {
return elementTypeFromWlxmlNode(node).create(node, canvas);
},
- createDOM: function(wlxmlNode) {
- return elementTypeFromParams(wlxmlNode).createDOM(params);
- },
-
fromHTMLElement: function(htmlElement, canvas) {
var $element = $(htmlElement);
fromHTMLElement: function(htmlElement, canvas) {
var $element = $(htmlElement);
- if(htmlElement.nodeType === Node.ELEMENT_NODE && $element.attr('document-node-element') !== undefined)
+ if(htmlElement.nodeType === Node.ELEMENT_NODE && $element.attr('document-node-element') !== undefined)
{
return DocumentNodeElement.fromHTMLElement(htmlElement, canvas);
return DocumentNodeElement.fromHTMLElement(htmlElement, canvas);
- if($element.attr('document-text-element') !== undefined || (htmlElement.nodeType === Node.TEXT_NODE && $element.parent().attr('document-text-element') !== undefined))
+ }
+ if($element.attr('document-text-element') !== undefined || (htmlElement.nodeType === Node.TEXT_NODE && $element.parent().attr('document-text-element') !== undefined)) {
return DocumentTextElement.fromHTMLElement(htmlElement, canvas);
return DocumentTextElement.fromHTMLElement(htmlElement, canvas);
+ }
return undefined;
}
});
return undefined;
}
});
@@
-54,14
+54,16
@@
$.extend(DocumentElement.prototype, {
data: function() {
var dom = this.dom(),
args = Array.prototype.slice.call(arguments, 0);
data: function() {
var dom = this.dom(),
args = Array.prototype.slice.call(arguments, 0);
- if(args.length === 2 && args[1] === undefined)
+ if(args.length === 2 && args[1] === undefined)
{
return dom.removeData(args[0]);
return dom.removeData(args[0]);
+ }
return dom.data.apply(dom, arguments);
},
parent: function() {
var parents = this.$element.parents('[document-node-element]');
return dom.data.apply(dom, arguments);
},
parent: function() {
var parents = this.$element.parents('[document-node-element]');
- if(parents.length)
+ if(parents.length)
{
return DocumentElement.fromHTMLElement(parents[0], this.canvas);
return DocumentElement.fromHTMLElement(parents[0], this.canvas);
+ }
return null;
},
return null;
},
@@
-86,15
+88,17
@@
$.extend(DocumentElement.prototype, {
getVerticallyFirstTextElement: function() {
var toret;
this.children().some(function(child) {
getVerticallyFirstTextElement: function() {
var toret;
this.children().some(function(child) {
- if(!child.isVisible())
+ if(!child.isVisible())
{
return false; // continue
return false; // continue
+ }
if(child instanceof DocumentTextElement) {
toret = child;
return true; // break
} else {
toret = child.getVerticallyFirstTextElement();
if(child instanceof DocumentTextElement) {
toret = child;
return true; // break
} else {
toret = child.getVerticallyFirstTextElement();
- if(toret)
+ if(toret)
{
return true; // break
return true; // break
+ }
}
});
return toret;
}
});
return toret;
@@
-126,8
+130,9
@@
$.extend(DocumentElement.prototype, {
exec: function(method) {
var manager = this.data('_wlxmlManager');
exec: function(method) {
var manager = this.data('_wlxmlManager');
- if(manager[method])
+ if(manager[method])
{
return manager[method].apply(manager, Array.prototype.slice.call(arguments, 1));
return manager[method].apply(manager, Array.prototype.slice.call(arguments, 1));
+ }
}
});
}
});
@@
-166,9
+171,9
@@
$.extend(DocumentNodeElement, {
element.setWlxml({tag: wlxmlNode.getTagName(), klass: wlxmlNode.getClass()});
element.setWlxml({tag: wlxmlNode.getTagName(), klass: wlxmlNode.getClass()});
- wlxmlNode.contents().forEach(
(
function(node) {
- container.append(DocumentElement.create(node).dom());
- }
)
.bind(this));
+ wlxmlNode.contents().forEach(function(node) {
+ container.append(DocumentElement.create(node
, canvas
).dom());
+ }.bind(this));
return dom;
}
return dom;
}
@@
-200,8
+205,9
@@
$.extend(DocumentNodeElement.prototype, {
return this;
},
append: function(params) {
return this;
},
append: function(params) {
- if(params.tag !== 'span')
+ if(params.tag !== 'span')
{
this.data('orig-end', undefined);
this.data('orig-end', undefined);
+ }
return manipulate(this, params, 'append');
},
prepend: function(params) {
return manipulate(this, params, 'append');
},
prepend: function(params) {
@@
-216,21
+222,17
@@
$.extend(DocumentNodeElement.prototype, {
},
children: function() {
var toret = [];
},
children: function() {
var toret = [];
- if(this instanceof DocumentTextElement)
+ if(this instanceof DocumentTextElement)
{
return toret;
return toret;
+ }
var elementContent = this._container().contents();
var element = this;
var elementContent = this._container().contents();
var element = this;
- elementContent.each(function(
idx
) {
+ elementContent.each(function() {
var childElement = DocumentElement.fromHTMLElement(this, element.canvas);
var childElement = DocumentElement.fromHTMLElement(this, element.canvas);
- if(childElement === undefined)
- return true;
- if(idx === 0 && elementContent.length > 1 && elementContent[1].nodeType === Node.ELEMENT_NODE && (childElement instanceof DocumentTextElement) && $.trim($(this).text()) === '')
+ if(childElement === undefined) {
return true;
return true;
- if(idx > 0 && childElement instanceof DocumentTextElement) {
- if(toret[toret.length-1] instanceof DocumentNodeElement && $.trim($(this).text()) === '')
- return true;
}
toret.push(childElement);
});
}
toret.push(childElement);
});
@@
-251,35
+253,44
@@
$.extend(DocumentNodeElement.prototype, {
return this._container().attr('wlxml-tag');
},
setWlxmlTag: function(tag) {
return this._container().attr('wlxml-tag');
},
setWlxmlTag: function(tag) {
- if(tag === this.getWlxmlTag())
+ if(tag === this.getWlxmlTag())
{
return;
return;
+ }
this._container().attr('wlxml-tag', tag);
this._container().attr('wlxml-tag', tag);
- if(!this.__updatingWlxml)
+ if(!this.__updatingWlxml)
{
this._updateWlxmlManager();
this._updateWlxmlManager();
+ }
},
getWlxmlClass: function() {
var klass = this._container().attr('wlxml-class');
},
getWlxmlClass: function() {
var klass = this._container().attr('wlxml-class');
- if(klass)
+ if(klass)
{
return klass.replace(/-/g, '.');
return klass.replace(/-/g, '.');
+ }
return undefined;
},
setWlxmlClass: function(klass) {
return undefined;
},
setWlxmlClass: function(klass) {
- if(klass === this.getWlxmlClass())
+ if(klass === this.getWlxmlClass())
{
return;
return;
- if(klass)
+ }
+ if(klass) {
this._container().attr('wlxml-class', klass.replace(/\./g, '-'));
this._container().attr('wlxml-class', klass.replace(/\./g, '-'));
- else
+ }
+ else {
this._container().removeAttr('wlxml-class');
this._container().removeAttr('wlxml-class');
- if(!this.__updatingWlxml)
+ }
+ if(!this.__updatingWlxml) {
this._updateWlxmlManager();
this._updateWlxmlManager();
+ }
},
setWlxml: function(params) {
this.__updatingWlxml = true;
},
setWlxml: function(params) {
this.__updatingWlxml = true;
- if(params.tag !== undefined)
+ if(params.tag !== undefined)
{
this.setWlxmlTag(params.tag);
this.setWlxmlTag(params.tag);
- if(params.klass !== undefined)
+ }
+ if(params.klass !== undefined) {
this.setWlxmlClass(params.klass);
this.setWlxmlClass(params.klass);
+ }
this._updateWlxmlManager();
this.__updatingWlxml = false;
},
this._updateWlxmlManager();
this.__updatingWlxml = false;
},
@@
-289,8
+300,9
@@
$.extend(DocumentNodeElement.prototype, {
manager.setup();
},
is: function(what) {
manager.setup();
},
is: function(what) {
- if(what === 'list' && _.contains(['list.items', 'list.items.enum'], this.getWlxmlClass()))
+ if(what === 'list' && _.contains(['list.items', 'list.items.enum'], this.getWlxmlClass()))
{
return true;
return true;
+ }
return false;
},
toggleLabel: function(toggle) {
return false;
},
toggleLabel: function(toggle) {
@@
-319,17
+331,17
@@
var DocumentTextElement = function(htmlElement, canvas) {
};
$.extend(DocumentTextElement, {
};
$.extend(DocumentTextElement, {
- createDOM: function(wlxmlTextNode) {
+ createDOM: function(wlxmlTextNode
, canvas
) {
var dom = $('<div>')
.attr('document-text-element', '')
.text(wlxmlTextNode.getText() || utils.unicode.ZWS),
var dom = $('<div>')
.attr('document-text-element', '')
.text(wlxmlTextNode.getText() || utils.unicode.ZWS),
- element = this.fromHTMLElement(dom[0],
thi
s);
+ element = this.fromHTMLElement(dom[0],
canva
s);
element.data('wlxmlNode', wlxmlTextNode);
return dom;
},
create: function(wlxmlTextNode, canvas) {
element.data('wlxmlNode', wlxmlTextNode);
return dom;
},
create: function(wlxmlTextNode, canvas) {
- return this.fromHTMLElement(this.createDOM(wlxmlTextNode
)[0]
);
+ return this.fromHTMLElement(this.createDOM(wlxmlTextNode
, canvas)[0], canvas
);
},
fromHTMLElement: function(htmlElement, canvas) {
},
fromHTMLElement: function(htmlElement, canvas) {
@@
-345,10
+357,12
@@
DocumentTextElement.prototype = new DocumentElement();
$.extend(DocumentTextElement.prototype, {
_setupDOMHandler: function(htmlElement) {
var $element = $(htmlElement);
$.extend(DocumentTextElement.prototype, {
_setupDOMHandler: function(htmlElement) {
var $element = $(htmlElement);
- if(htmlElement.nodeType === Node.TEXT_NODE)
+ if(htmlElement.nodeType === Node.TEXT_NODE)
{
this.$element = $element.parent();
this.$element = $element.parent();
- else
+ }
+ else {
this.$element = $element;
this.$element = $element;
+ }
},
detach: function() {
this.dom().detach();
},
detach: function() {
this.dom().detach();
@@
-358,12
+372,6
@@
$.extend(DocumentTextElement.prototype, {
setText: function(text) {
this.dom().contents()[0].data = text;
},
setText: function(text) {
this.dom().contents()[0].data = text;
},
- appendText: function(text) {
- this.dom().contents()[0].data += text;
- },
- prependText: function(text) {
- this.dom().contents()[0].data = text + this.dom().contents()[0].data;
- },
getText: function(options) {
options = _.extend({raw: false}, options || {});
var toret = this.dom().text();
getText: function(options) {
options = _.extend({raw: false}, options || {});
var toret = this.dom().text();
@@
-377,8
+385,9
@@
$.extend(DocumentTextElement.prototype, {
return this.dom().contents()[0].data === utils.unicode.ZWS;
},
after: function(params) {
return this.dom().contents()[0].data === utils.unicode.ZWS;
},
after: function(params) {
- if(params instanceof DocumentTextElement || params.text)
+ if(params instanceof DocumentTextElement || params.text)
{
return false;
return false;
+ }
var element;
if(params instanceof DocumentNodeElement) {
element = params;
var element;
if(params instanceof DocumentNodeElement) {
element = params;
@@
-391,8
+400,9
@@
$.extend(DocumentTextElement.prototype, {
return element;
},
before: function(params) {
return element;
},
before: function(params) {
- if(params instanceof DocumentTextElement || params.text)
+ if(params instanceof DocumentTextElement || params.text)
{
return false;
return false;
+ }
var element;
if(params instanceof DocumentNodeElement) {
element = params;
var element;
if(params instanceof DocumentNodeElement) {
element = params;
@@
-408,10
+418,12
@@
$.extend(DocumentTextElement.prototype, {
divide: function(params) {
var myText = this.getText();
divide: function(params) {
var myText = this.getText();
- if(params.offset === myText.length)
+ if(params.offset === myText.length)
{
return this.after(params);
return this.after(params);
- if(params.offset === 0)
+ }
+ if(params.offset === 0) {
return this.before(params);
return this.before(params);
+ }
var lhsText = myText.substr(0, params.offset),
rhsText = myText.substr(params.offset),
var lhsText = myText.substr(0, params.offset),
rhsText = myText.substr(params.offset),