X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/49906096d20853e8ce794225e7ce14147bf112ec..de22ea374455fb4c8c626cab04b051be4b2fc6ab:/src/wlxml/wlxml.js diff --git a/src/wlxml/wlxml.js b/src/wlxml/wlxml.js index 4f6e356..4e1ddc6 100644 --- a/src/wlxml/wlxml.js +++ b/src/wlxml/wlxml.js @@ -11,6 +11,25 @@ define([ /* globals Node */ +var WLXMLDocumentNodeMethods = { + isInside: function(klass) { + var parent = this.getParent(klass); + return !!parent; + }, + getParent: function(klass) { + /* globals Node */ + var me = this.nodeType === Node.ELEMENT_NODE ? [this] : [], + toret; + me.concat(this.parents()).some(function(node) { + if(node.is(klass)) { + toret = node; + return true; + } + }); + return toret; + }, +}; + var AttributesList = function() {}; AttributesList.prototype = Object.create({}); AttributesList.prototype.keys = function() { @@ -49,7 +68,7 @@ var WLXMLElementNode = function(nativeNode, document) { }; WLXMLElementNode.prototype = Object.create(smartxml.ElementNode.prototype); -$.extend(WLXMLElementNode.prototype, smartxml.ElementNode.prototype, { +$.extend(WLXMLElementNode.prototype, WLXMLDocumentNodeMethods, smartxml.ElementNode.prototype, { getClass: function() { return this.getAttr('class') || ''; }, @@ -175,6 +194,13 @@ var WLXMLDocumentNode = function() { }; WLXMLDocumentNode.prototype = Object.create(smartxml.DocumentNode.prototype); + +var WLXMLTextNode = function() { + smartxml.TextNode.apply(this, arguments); +}; +WLXMLTextNode.prototype = Object.create(smartxml.TextNode.prototype); +$.extend(WLXMLTextNode.prototype, WLXMLDocumentNodeMethods); + var WLXMLDocument = function(xml, options) { this.classMethods = {}; this.classTransformations = {}; @@ -188,6 +214,7 @@ var formatter_prefix = '_wlxml_formatter_'; WLXMLDocument.prototype = Object.create(smartxml.Document.prototype); $.extend(WLXMLDocument.prototype, { ElementNodeFactory: WLXMLElementNode, + TextNodeFactory: WLXMLTextNode, loadXML: function(xml) { smartxml.Document.prototype.loadXML.call(this, xml, {silent: true}); this.trigger('contentSet'); @@ -343,14 +370,17 @@ var wlxmlClasses = { return { - WLXMLDocumentFromXML: function(xml, options) { + WLXMLDocumentFromXML: function(xml, options, Factory) { options = _.extend({wlxmlClasses: wlxmlClasses}, options); - return new WLXMLDocument(xml, options); + Factory = Factory || WLXMLDocument; + return new Factory(xml, options); }, WLXMLElementNodeFromXML: function(xml) { return this.WLXMLDocumentFromXML(xml).root; - } + }, + + WLXMLDocument: WLXMLDocument }; }); \ No newline at end of file