--- /dev/null
+define([
+'libs/jquery-1.9.1.min',
+'modules/documentCanvas/canvas/documentElement'
+], function($, documentElement) {
+
+'use strict';
+
+var Canvas = function(xml) {
+ xml = $.parseXML(xml);
+ this.d = xml !== null ? $(xml.childNodes[0]) : null;
+}
+
+$.extend(Canvas.prototype, {
+
+ doc: function() {
+ if(this.d === null)
+ return null;
+ return documentElement.wrap(this.d.get(0)); //{wlxmlTag: this.d.prop('tagName')};
+ }
+
+});
+
+return {
+ fromXML: function(xml) {
+ return new Canvas(xml);
+ }
+};
+
+});
\ No newline at end of file
--- /dev/null
+define([
+'libs/chai',
+'modules/documentCanvas/canvas/canvas',
+'modules/documentCanvas/canvas/documentElement'
+], function(chai, canvas, documentElement) {
+
+'use strict';
+
+var expect = chai.expect;
+
+describe('Canvas', function() {
+ describe('basic properties', function() {
+ it('renders empty document when canvas created from empty XML', function() {
+ var c = canvas.fromXML('');
+ expect(c.doc()).to.equal(null);
+ });
+
+ it('gives access to its document root node', function() {
+ var c = canvas.fromXML('<section></section>');
+ expect(c.doc().wlxmlTag).to.equal('section');
+ });
+ });
+
+ describe('document api', function() {
+ describe('document root element', function() {
+ var c = canvas.fromXML('<section></section>');
+ it('exists', function() {
+ expect(c.doc()).to.be.instanceOf(documentElement.DocumentElement);
+ });
+ it('is of type DocumentNodeElement', function() {
+ expect(c.doc()).to.be.instanceOf(documentElement.DocumentNodeElement);
+ });
+ });
+
+ it('a', function() {
+ var c = canvas.fromXML('<section><div></div></section>'),
+ children = c.doc().children();
+ expect(children.length).to.equal(3);
+ expect(children[0]).to.be.instanceOf(documentElement.DocumentTextElement);
+ expect(children[1]).to.be.instanceOf(documentElement.DocumentNodeElement);
+ expect(children[2]).to.be.instanceOf(documentElement.DocumentTextElement);
+ });
+
+ });
+});
+
+/*describe('Canvas', function() {
+ it('can wrap selected document nodes in a list', function() {
+ var c = canvas.fromXML('\
+ <section>\
+ <div>Alice</div>\
+ <div>has</div>\
+ <div>a cat</div>\
+ </section>
+ ');
+ var div_alice = c.doc().children({tag: 'div'})[0];
+ var div_cat = c.doc().children({tag: 'div'})[2];
+ c.doc.wrapInList({start: div_alice, end: div_cat});
+
+ expect(c.doc().children().length === 3)
+
+
+ })
+});*/
+
+
+
+
+});
\ No newline at end of file
--- /dev/null
+define([
+'libs/jquery-1.9.1.min'
+], function($) {
+
+'use strict';
+
+// DocumentElement represents a node from WLXML document rendered inside Canvas
+var DocumentElement = function(htmlElement) {
+ if(arguments.length === 0)
+ return;
+ this.$element = $(htmlElement);
+ this.wlxmlTag = this.$element.prop('tagName');
+};
+
+$.extend(DocumentElement.prototype, {
+ children: function() {
+ var toret = [];
+ if(this instanceof DocumentTextElement)
+ return toret;
+
+
+ var elementContent = this.$element.contents();
+ elementContent.each(function(idx) {
+ var element = documentElementFromHTMLElement(this);
+ if(
+ (toret.length === 0 && (element instanceof DocumentNodeElement)) ||
+ (toret.length > 0 && (toret[toret.length -1] instanceof DocumentNodeElement) && (element instanceof DocumentNodeElement))
+ )
+ toret.push(documentElementFromHTMLElement(document.createTextNode()));
+ toret.push(element);
+ if((idx === elementContent.length - 1) && (element instanceof DocumentNodeElement))
+ toret.push(documentElementFromHTMLElement(document.createTextNode()));
+ });
+ return toret;
+ }
+});
+
+var DocumentNodeElement = function(htmlElement) {
+ DocumentElement.call(this, htmlElement);
+};
+
+var DocumentTextElement = function(htmlElement) {
+ DocumentElement.call(this, htmlElement);
+};
+
+DocumentNodeElement.prototype = new DocumentElement();
+DocumentTextElement.prototype = new DocumentElement();
+
+var documentElementFromHTMLElement = function(htmlElement) {
+ if(htmlElement.nodeType === Node.ELEMENT_NODE)
+ return new DocumentNodeElement(htmlElement);
+ if(htmlElement.nodeType === Node.TEXT_NODE)
+ return new DocumentTextElement(htmlElement);
+}
+
+return {
+ wrap: function(htmlElement) {
+ return documentElementFromHTMLElement(htmlElement);
+ },
+ DocumentElement: DocumentElement,
+ DocumentNodeElement: DocumentNodeElement,
+ DocumentTextElement: DocumentTextElement
+};
+
+});
\ No newline at end of file
(function() {
- mocha.setup('tdd');
+ mocha.setup('bdd');
var tests = Object.keys(window.__karma__.files).filter(function (file) {
- return /\.test\.js$/.test(file);
+ return /\.test3\.js$/.test(file);
});
require({