diff --git a/mithril.js b/mithril.js index 50479b0d..1949e13e 100644 --- a/mithril.js +++ b/mithril.js @@ -548,7 +548,7 @@ Mithril = m = new function app(window, undefined) { var context = arguments[2] if (!isInitialized) { context.href = element.getAttribute("href") - element.href = window.location.pathname + modes[m.route.mode] + context.href + element.href = (m.route.mode !== 'pathname' ? window.location.pathname : '') + modes[m.route.mode] + context.href element.removeEventListener("click", routeUnobtrusive) element.addEventListener("click", routeUnobtrusive) } diff --git a/tests/e2e/tests.js b/tests/e2e/tests.js index 05dcd3eb..593dfe02 100644 --- a/tests/e2e/tests.js +++ b/tests/e2e/tests.js @@ -238,8 +238,6 @@ test('node identity shuffle and remove', function() { asyncTest('issue214 regression', function() { // see https://github.com/lhorie/mithril.js/issues/214 - // this test will pass using phantomjs, because phantomjs - // doesn't provide window.requestAnimationFrame expect(2) function controller() { @@ -328,8 +326,6 @@ asyncTest('issue214 regression', function() { asyncTest('issue288 regression', function() { // see https://github.com/lhorie/mithril.js/issues/288 - // this test will pass using phantomjs, because phantomjs - // doesn't provide window.requestAnimationFrame expect(2) function controller() { @@ -365,3 +361,38 @@ asyncTest('issue288 regression', function() { start() }) }) + +test('issue278 regression', function() { + // see https://github.com/lhorie/mithril.js/issues/278 + expect(1) + + var test = { + controller: function() { + this.values = [1, 2, 3, 4, 5] + this.value = m.prop([2, 3]) + }, + + view: function(ctrl) { + return m('select#testselect', { + size: ctrl.values.length, + multiple: 'multiple' + }, [ + ctrl.values.map(function(v){ + var opts = {value: v} + if (ctrl.value().indexOf(v) !== -1) opts.selected = 'selected' + return m('option', opts, v) + }) + ]) + } + } + + m.render(dummyEl, test.view(new test.controller)) + + var select = document.getElementById('testselect') + + for (var i = 0, selected = 0; i < select.options.length; i++) { + if (select.options[i].selected) selected++ + } + + equal(selected, 2) +}) diff --git a/tests/mithril-tests.js b/tests/mithril-tests.js index 1d379977..00e17dd7 100644 --- a/tests/mithril-tests.js +++ b/tests/mithril-tests.js @@ -861,10 +861,20 @@ function testMithril(mock) { var root = mock.document.createElement("div") m.route.mode = "pathname" m.route(root, "/test2", { - "/test2": {controller: function() {}, view: function() {return "foo"}} + "/test2": { + controller: function() {}, + view: function() { + return [ + "foo", + m("a", { href: "/test2", config: m.route }, "Test2") + ] + } + } }) mock.requestAnimationFrame.$resolve() //teardown - return mock.location.pathname == "/test2" && root.childNodes[0].nodeValue === "foo" + return mock.location.pathname == "/test2" && + root.childNodes[0].nodeValue === "foo" && + root.childNodes[1].href == "/test2" }) test(function() { mock.requestAnimationFrame.$resolve() //setup diff --git a/tests/mock.js b/tests/mock.js index beea4423..10999206 100644 --- a/tests/mock.js +++ b/tests/mock.js @@ -38,7 +38,9 @@ mock.window = new function() { }, getAttribute: function(name, value) { return this[name] - } + }, + addEventListener: function () {}, + removeEventListener: function () {} } } window.document.createElementNS = function(namespace, tag) {