From b659792bfad5a62adeb9b959dc7d1b99c6f889a5 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Wed, 31 Dec 2014 10:45:07 -0500 Subject: [PATCH] 4831: Rearrange mithril-dom as mithril-jquery --- apps/backstage/.gitignore | 1 + .../node_modules/mithril-jquery/index.js | 40 +++++++++++++++++++ apps/backstage/test/mithril-dom.js | 33 --------------- apps/backstage/test/mocha.opts | 1 + apps/backstage/test/unit/filter.js | 40 +++++++------------ 5 files changed, 56 insertions(+), 59 deletions(-) create mode 100644 apps/backstage/node_modules/mithril-jquery/index.js delete mode 100644 apps/backstage/test/mithril-dom.js create mode 100644 apps/backstage/test/mocha.opts diff --git a/apps/backstage/.gitignore b/apps/backstage/.gitignore index a2fa9ac9b4..7c8727f907 100644 --- a/apps/backstage/.gitignore +++ b/apps/backstage/.gitignore @@ -2,4 +2,5 @@ dist node_modules !node_modules/app !node_modules/arvados +!node_modules/mithril-jquery !node_modules/test diff --git a/apps/backstage/node_modules/mithril-jquery/index.js b/apps/backstage/node_modules/mithril-jquery/index.js new file mode 100644 index 0000000000..bd6e3bc6c5 --- /dev/null +++ b/apps/backstage/node_modules/mithril-jquery/index.js @@ -0,0 +1,40 @@ +module.exports = mJquery; + +var m = require('mithril'); +var global = (function() { return this })(); +var usingWin = global; +var ready; + +mJquery.ready = function() { + if (ready) { + // Already done, or underway. + } else if (typeof window !== 'undefined' && global === window) { + ready = m.deferred(); + ready.resolve(require('jquery')); + } else { + ready = m.deferred(); + require('jsdom').env({ + html: '', + scripts: [ + '../jquery/dist/jquery.js', + '../mithril/mithril.js', + ], + done: function(err, win) { + if (err) { + console.log("jsdom setup failed: "+JSON.stringify(err)); + ready.reject(err); + } else { + usingWin = win; + ready.resolve(win.jQuery); + } + } + }); + } + return ready.promise; +} + +function mJquery(selector, cell) { + var $div = ready.promise()('
'); + (usingWin.m || m).render($div[0], cell); + return ready.promise()(selector, $div[0]); +} diff --git a/apps/backstage/test/mithril-dom.js b/apps/backstage/test/mithril-dom.js deleted file mode 100644 index e1fd8d0692..0000000000 --- a/apps/backstage/test/mithril-dom.js +++ /dev/null @@ -1,33 +0,0 @@ -var $ = require('jquery') -, jsdom = require('jsdom') -, m = require('mithril'); - -module.exports = md; - -var global = (function() { return this })(); -var jsdomWin = global; - -md.ready = function(cb) { - if (typeof window !== 'undefined' && global === window) { - cb($); - return; - } - jsdom.env({ - html: '', - scripts: [ - '../node_modules/jquery/dist/jquery.js', - '../node_modules/mithril/mithril.js', - ], - done: function(err, win) { - jsdomWin = win; - $ = win.jQuery; - cb($); - } - }); -} - -function md(cell) { - var div = $('
')[0]; - (jsdomWin.m || m).render(div, cell); - return div.children; -} diff --git a/apps/backstage/test/mocha.opts b/apps/backstage/test/mocha.opts new file mode 100644 index 0000000000..5efaf24d77 --- /dev/null +++ b/apps/backstage/test/mocha.opts @@ -0,0 +1 @@ +--ui tdd diff --git a/apps/backstage/test/unit/filter.js b/apps/backstage/test/unit/filter.js index 427866f8fc..462162c27f 100644 --- a/apps/backstage/test/unit/filter.js +++ b/apps/backstage/test/unit/filter.js @@ -1,7 +1,7 @@ var Filter = require('app/filter') , chai = require('chai') , m = require('mithril') -, md = require('test/mithril-dom') +, m$ = require('mithril-jquery') , mq = require('mithril-query') , sinon = require('sinon') , $ = require('jquery') @@ -9,53 +9,41 @@ var Filter = require('app/filter') , s = sinon; suite('Filter', function() { - setup(function(done) { - md.ready(function(jQuery) { - $ = jQuery; - done(); - }); - }); + setup(m$.ready); function prep(filterClass, initialFilter) { var f = {}; f.tested = new filterClass({attr: 'fakeAttr'}); f.cfSpy = sinon.stub(); f.cfSpy.withArgs().returns(initialFilter); f.ctrl = {currentFilter: f.cfSpy}; - f.rendered = f.tested.view(f.ctrl); - f.domfrag = mq(f.rendered); + f.vdom = f.tested.view(f.ctrl); return f; } suite('AnyText', function() { - test("default is existing filter value", function() { + test("uses existing filter as initial input value", function() { f = prep(Filter.AnyText, ['any','ilike','%quux%']); - f.rendered = f.tested.view(f.ctrl); - f.domfrag = mq(f.rendered); - c.assert.equal(f.domfrag.first('input').attrs.value, "quux"); + c.assert.equal(mq(f.vdom).first('input').attrs.value, "quux"); }); - test("fires currentFilter on input change", function() { + test("calls currentFilter when input changes", function() { f = prep(Filter.AnyText); - f.domfrag.setValue('input', 'qux'); + mq(f.vdom).setValue('input', 'qux'); // Should call again to set new filter value s.assert.calledWith(f.cfSpy, 'any', 'ilike', '%qux%'); }); }); suite('ObjectType', function() { - test("default is existing filter value", function() { + test("uses existing filter value as initial label", function() { f = prep(Filter.ObjectType, ['fakeAttr','is_a','arvados#collection']); - f.rendered = f.tested.view(f.ctrl); - f.md = md(f.rendered); - c.assert.lengthOf($('.dropdown-toggle:contains(Type)', f.md), 0); - c.assert.lengthOf($('.dropdown-toggle:contains(collection)', f.md), 1); + c.assert.lengthOf(m$('.dropdown-toggle:contains(Type)', f.vdom), 0); + c.assert.lengthOf(m$('.dropdown-toggle:contains(collection)', f.vdom), 1); }); - test("show generic label if no existing filter value", function() { + test("uses 'Type' as initial label if no current filter", function() { f = prep(Filter.ObjectType, undefined); - f.rendered = f.tested.view(f.ctrl); - f.md = md(f.rendered); - c.assert.lengthOf($('.dropdown-toggle:contains(Type)', f.md), 1); + c.assert.lengthOf(m$('.dropdown-toggle:contains(Type)', f.vdom), 1); }); - test("fires currentFilter on selection", function() { + test("calls currentFilter when selection clicked", function() { f = prep(Filter.ObjectType); - f.domfrag.click('li a[data-value="arvados#pipelineInstance"]'); + mq(f.vdom).click('li a[data-value="arvados#pipelineInstance"]'); s.assert.calledOn(f.cfSpy, f.ctrl); s.assert.calledWith(f.cfSpy, 'fakeAttr', 'is_a', 'arvados#pipelineInstance'); }); -- 2.30.2