diff --git a/app/built.html b/app/built.html index 6a0c58e5..8f724fd5 100644 --- a/app/built.html +++ b/app/built.html @@ -12,7 +12,7 @@ - + diff --git a/app/index.html b/app/index.html index 1ff4696b..cfd9492e 100644 --- a/app/index.html +++ b/app/index.html @@ -11,17 +11,24 @@ - - - - - - + - + + + + + + + + + + + + + @@ -29,7 +36,7 @@ - + + + + + - + + + + + + + @@ -42,6 +53,8 @@
+ +
diff --git a/test/model.test.js b/test/model.test.js index 2625a7a4..2f0c4e6a 100644 --- a/test/model.test.js +++ b/test/model.test.js @@ -103,6 +103,16 @@ test('Dataset _prepareQuery', function () { deepEqual(out, exp); }); +test('Dataset _backendFromString', function () { + var dataset = new recline.Model.Dataset(); + + var out = dataset._backendFromString('recline.Backend.Memory'); + equal(out.__type__, 'memory'); + + var out = dataset._backendFromString('dataproxy'); + equal(out.__type__, 'dataproxy'); +}); + // ================================= // Query diff --git a/test/view-graph.test.js b/test/view-graph.test.js new file mode 100644 index 00000000..f7e6dae5 --- /dev/null +++ b/test/view-graph.test.js @@ -0,0 +1,13 @@ +module("View - Graph"); + +test('basics', function () { + var dataset = Fixture.getDataset(); + var view = new recline.View.Graph({ + model: dataset + }); + $('.fixtures').append(view.el); + equal(view.state.get('graphType'), 'lines-and-points'); + // view will auto render ... + assertPresent('.editor', view.el); + view.remove(); +}); diff --git a/test/view-grid.test.js b/test/view-grid.test.js new file mode 100644 index 00000000..4d2d0a96 --- /dev/null +++ b/test/view-grid.test.js @@ -0,0 +1,59 @@ +(function ($) { + +module("View - Grid"); + +test('menu - hideColumn', function () { + var dataset = Fixture.getDataset(); + var view = new recline.View.Grid({ + model: dataset + }); + $('.fixtures .test-datatable').append(view.el); + view.render(); + + assertPresent('.column-header[data-field="x"]'); + var hideColumn = view.el.find('.column-header[data-field="x"] a[data-action="hideColumn"]'); + hideColumn.trigger('click'); + assertNotPresent('.column-header[data-field="x"]', view.el); + + // also test a bit of state + deepEqual(view.state.toJSON(), {hiddenFields: ['x']}); + view.remove(); +}); + +test('state', function () { + var dataset = Fixture.getDataset(); + var view = new recline.View.Grid({ + model: dataset, + state: { + hiddenFields: ['z'] + } + }); + $('.fixtures .test-datatable').append(view.el); + view.render(); + assertPresent('.column-header[data-field="x"]'); + assertNotPresent('.column-header[data-field="z"]'); + view.remove(); +}); + +test('new GridRow View', function () { + var $el = $(''); + $('.fixtures .test-datatable').append($el); + var doc = new recline.Model.Document({ + 'id': 1, + 'b': '2', + 'a': '1' + }); + var view = new recline.View.GridRow({ + model: doc + , el: $el + , fields: new recline.Model.FieldList([{id: 'a'}, {id: 'b'}]) + }); + view.render(); + ok($el.attr('data-id'), '1'); + var tds = $el.find('td'); + equal(tds.length, 3); + equal($(tds[1]).attr('data-field'), 'a'); + view.remove(); +}); + +})(this.jQuery); diff --git a/test/view.test.js b/test/view.test.js index 4ffa5d02..19fcc177 100644 --- a/test/view.test.js +++ b/test/view.test.js @@ -1,25 +1,76 @@ (function ($) { -module("View"); +module("View - Explorer"); -test('new DataGridRow View', function () { - var $el = $(''); - $('.fixtures .test-datatable').append($el); - var doc = new recline.Model.Document({ - 'id': 1, - 'b': '2', - 'a': '1' - }); - var view = new recline.View.DataGridRow({ - model: doc - , el: $el - , fields: new recline.Model.FieldList([{id: 'a'}, {id: 'b'}]) +test('basic explorer functionality', function () { + var $el = $('
'); + $('.fixtures .data-explorer-here').append($el); + var dataset = Fixture.getDataset(); + var explorer = new recline.View.DataExplorer({ + model: dataset, + el: $el }); - view.render(); - ok($el.attr('data-id'), '1'); - var tds = $el.find('td'); - equal(tds.length, 3); - equal($(tds[1]).attr('data-field'), 'a'); + var $explorer = $el.find('.recline-data-explorer'); + equal($explorer.length, 1); + $el.remove(); +}); + +test('get State', function () { + var $el = $('
'); + $('.fixtures .data-explorer-here').append($el); + var dataset = Fixture.getDataset(); + var explorer = new recline.View.DataExplorer({ + model: dataset, + el: $el + }); + var state = explorer.state; + ok(state.get('query')); + equal(state.get('readOnly'), false); + equal(state.get('currentView'), null); + equal(state.get('query').size, 100); + deepEqual(state.get('view-grid').hiddenFields, []); + deepEqual(state.get('view-graph').group, null); + equal(state.get('backend'), 'memory'); + ok(state.get('dataset').id !== null); + $el.remove(); +}); + +test('initialize state', function () { + var $el = $('
'); + $('.fixtures .data-explorer-here').append($el); + var dataset = Fixture.getDataset(); + var explorer = new recline.View.DataExplorer({ + model: dataset, + el: $el, + state: { + readOnly: true, + currentView: 'graph', + 'view-grid': { + hiddenFields: ['x'] + } + } + }); + ok(explorer.state.get('readOnly')); + ok(explorer.state.get('currentView'), 'graph'); + // check the correct view is visible + var css = explorer.el.find('.navigation a[data-view="graph"]').attr('class').split(' '); + ok(_.contains(css, 'disabled'), css); + + var css = explorer.el.find('.navigation a[data-view="grid"]').attr('class').split(' '); + ok(!(_.contains(css, 'disabled')), css); + $el.remove(); +}); + +test('restore (from serialized state)', function() { + var dataset = Fixture.getDataset(); + var explorer = new recline.View.DataExplorer({ + model: dataset, + }); + var state = explorer.state.toJSON(); + var explorerNew = recline.View.DataExplorer.restore(state); + var out = explorerNew.state.toJSON(); + equal(out.backend, state.backend); }); })(this.jQuery); + diff --git a/vendor/leaflet/images/layers.png b/vendor/leaflet/0.3.1/images/layers.png similarity index 100% rename from vendor/leaflet/images/layers.png rename to vendor/leaflet/0.3.1/images/layers.png diff --git a/vendor/leaflet/images/marker-shadow.png b/vendor/leaflet/0.3.1/images/marker-shadow.png similarity index 100% rename from vendor/leaflet/images/marker-shadow.png rename to vendor/leaflet/0.3.1/images/marker-shadow.png diff --git a/vendor/leaflet/images/marker.png b/vendor/leaflet/0.3.1/images/marker.png similarity index 100% rename from vendor/leaflet/images/marker.png rename to vendor/leaflet/0.3.1/images/marker.png diff --git a/vendor/leaflet/images/popup-close.png b/vendor/leaflet/0.3.1/images/popup-close.png similarity index 100% rename from vendor/leaflet/images/popup-close.png rename to vendor/leaflet/0.3.1/images/popup-close.png diff --git a/vendor/leaflet/images/zoom-in.png b/vendor/leaflet/0.3.1/images/zoom-in.png similarity index 100% rename from vendor/leaflet/images/zoom-in.png rename to vendor/leaflet/0.3.1/images/zoom-in.png diff --git a/vendor/leaflet/images/zoom-out.png b/vendor/leaflet/0.3.1/images/zoom-out.png similarity index 100% rename from vendor/leaflet/images/zoom-out.png rename to vendor/leaflet/0.3.1/images/zoom-out.png diff --git a/vendor/leaflet/leaflet.css b/vendor/leaflet/0.3.1/leaflet.css similarity index 100% rename from vendor/leaflet/leaflet.css rename to vendor/leaflet/0.3.1/leaflet.css diff --git a/vendor/leaflet/leaflet.ie.css b/vendor/leaflet/0.3.1/leaflet.ie.css similarity index 100% rename from vendor/leaflet/leaflet.ie.css rename to vendor/leaflet/0.3.1/leaflet.ie.css diff --git a/vendor/leaflet/leaflet.js b/vendor/leaflet/0.3.1/leaflet.js similarity index 100% rename from vendor/leaflet/leaflet.js rename to vendor/leaflet/0.3.1/leaflet.js