From: Aleksander Ɓukasz Date: Wed, 23 Oct 2013 08:59:58 +0000 (+0200) Subject: smartxml: Improving get/set data api X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/ac4496abba91123b880ec644f9ab986f71d39462?hp=dab8e2daf3587e367922dd59c94999e565faeec0 smartxml: Improving get/set data api --- diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js index 034b907..1876076 100644 --- a/src/smartxml/smartxml.js +++ b/src/smartxml/smartxml.js @@ -1,8 +1,9 @@ define([ 'libs/jquery', + 'libs/underscore', 'libs/backbone', 'smartxml/events' -], function($, Backbone, events) { +], function($, _, Backbone, events) { 'use strict'; @@ -55,10 +56,19 @@ $.extend(ElementNode.prototype, DocumentNode.prototype, { nodeType: Node.ELEMENT_NODE, setData: function(key, value) { - this._$.data(key, value); + if(value !== undefined) { + this._$.data(key, value); + } else { + this._$.removeData(_.keys(this._$.data())); + this._$.data(key); + } }, + getData: function(key) { - return this._$.data(key); + if(key) { + return this._$.data(key); + } + return this._$.data(); }, getTagName: function() { diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js index 6d6cbbf..3eed027 100644 --- a/src/smartxml/smartxml.test.js +++ b/src/smartxml/smartxml.test.js @@ -5,7 +5,7 @@ define([ 'use strict'; /*jshint expr:true */ -/* global describe, it */ +/* global describe, it, beforeEach */ var expect = chai.expect; @@ -42,6 +42,30 @@ describe('smartxml', function() { expect(contents[1].nodeType).to.equal(Node.ELEMENT_NODE, 'element node 1'); expect(contents[2].nodeType).to.equal(Node.TEXT_NODE, 'text node 2'); }); + + describe('Storing custom data', function() { + var node; + + beforeEach(function() { + node = elementNodeFromXML('
'); + }); + + it('can append single value', function() { + node.setData('key', 'value'); + expect(node.getData('key')).to.equal('value'); + }); + + it('can overwrite the whole data', function() { + node.setData('key1', 'value1'); + node.setData({key2: 'value2'}); + expect(node.getData('key2')).to.equal('value2'); + }); + + it('can fetch the whole data at once', function() { + node.setData({key1: 'value1', key2: 'value2'}); + expect(node.getData()).to.eql({key1: 'value1', key2: 'value2'}); + }); + }); }); describe('Manipulations', function() {