diff --git a/bower.json b/bower.json index e7f3031..d813e60 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "ko-component-router", "main": "ko-component-router.js", - "version": "2.0.1", + "version": "2.1.0", "homepage": "https://github.com/caseyWebb/ko-component-router", "repository": { "type": "git", diff --git a/ko-component-router.js b/ko-component-router.js index 11af656..4fe4af7 100644 --- a/ko-component-router.js +++ b/ko-component-router.js @@ -929,42 +929,68 @@ var ko = require('knockout') ko.router = require('./lib/router') -},{"./lib/router":7,"knockout":"knockout"}],6:[function(require,module,exports){ +},{"./lib/router":8,"knockout":"knockout"}],6:[function(require,module,exports){ 'use strict' var ko = require('knockout') var router = require('./router') +ko.bindingHandlers.route = { + init: function(el, valueAccessor) { + ko.applyBindingsToNode(el, { + attr: { + href: ko.pureComputed(function() { + return router._basePath + ko.unwrap(valueAccessor()) + }) + } + }) + } +} + +},{"./router":8,"knockout":"knockout"}],7:[function(require,module,exports){ +'use strict' + +var ko = require('knockout') + +var router = require('./router') + +function ViewModel() { + this.component = router._component + this.ctx = router._ctx +} + ko.components.register('ko-component-router', { - viewModel: function ViewModel() { - this.component = router.component - this.ctx = router.ctx - }, + viewModel: ViewModel, template: "
" }) -},{"./router":7,"knockout":"knockout"}],7:[function(require,module,exports){ +module.exports = ViewModel + +},{"./router":8,"knockout":"knockout"}],8:[function(require,module,exports){ 'use strict' var ko = require('knockout') var page = require('page') function Router() { - this.component = ko.observable() - this.ctx = ko.observable() + this._component = ko.observable() + this._ctx = ko.observable() } Router.prototype.start = function(config) { - if (config.basePath) { - page.base(config.basePath) - } + if (typeof config === 'undefined') + config = {} + + this._basePath = config.basePath || '' + page.base(this._basePath) page.start(config) + require('./binding') require('./component') } @@ -1004,10 +1030,10 @@ Router.prototype.route = function(route) { page.apply(page, args) - function getComponentSetter(_el) { + function getComponentSetter(component) { return function(ctx, next) { - self.component(_el) - self.ctx(ctx) + self._component(component) + self._ctx(ctx) ctx.handled = true next() } @@ -1016,5 +1042,5 @@ Router.prototype.route = function(route) { module.exports = new Router() -},{"./component":6,"knockout":"knockout","page":2}]},{},[5])(5) +},{"./binding":6,"./component":7,"knockout":"knockout","page":2}]},{},[5])(5) }); \ No newline at end of file diff --git a/ko-component-router.min.js b/ko-component-router.min.js index 0e41e8f..f22df0c 100644 --- a/ko-component-router.min.js +++ b/ko-component-router.min.js @@ -1 +1 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.koComponentRouter=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o0){history.back();page.len--}else if(path){setTimeout(function(){page.show(path,state)})}else{setTimeout(function(){page.show(base,state)})}};page.redirect=function(from,to){if("string"===typeof from&&"string"===typeof to){page(from,function(e){setTimeout(function(){page.replace(to)},0)})}if("string"===typeof from&&"undefined"===typeof to){setTimeout(function(){page.replace(from)},0)}};page.replace=function(path,state,init,dispatch){var ctx=new Context(path,state);page.current=ctx.path;ctx.init=init;ctx.save();if(false!==dispatch)page.dispatch(ctx);return ctx};page.dispatch=function(ctx){var prev=prevContext,i=0,j=0;prevContext=ctx;function nextExit(){var fn=page.exits[j++];if(!fn)return nextEnter();fn(prev,nextExit)}function nextEnter(){var fn=page.callbacks[i++];if(ctx.path!==page.current){ctx.handled=false;return}if(!fn)return unhandled(ctx);fn(ctx,nextEnter)}if(prev){nextExit()}else{nextEnter()}};function unhandled(ctx){if(ctx.handled)return;var current;if(hashbang){current=base+location.hash.replace("#!","")}else{current=location.pathname+location.search}if(current===ctx.canonicalPath)return;page.stop();ctx.handled=false;location.href=ctx.canonicalPath}page.exit=function(path,fn){if(typeof path==="function"){return page.exit("*",path)}var route=new Route(path);for(var i=1;i-1)return;if(el.target)return;if(!sameOrigin(el.href))return;var path=el.pathname+el.search+(el.hash||"");if(typeof process!=="undefined"&&path.match(/^\/[a-zA-Z]:\//)){path=path.replace(/^\/[a-zA-Z]:\//,"/")}var orig=path;if(path.indexOf(base)===0){path=path.substr(base.length)}if(hashbang)path=path.replace("#!","");if(base&&orig===path)return;e.preventDefault();page.show(orig)}function which(e){e=e||window.event;return null===e.which?e.button:e.which}function sameOrigin(href){var origin=location.protocol+"//"+location.hostname;if(location.port)origin+=":"+location.port;return href&&0===href.indexOf(origin)}page.sameOrigin=sameOrigin}).call(this,require("_process"))},{_process:4,"path-to-regexp":3}],3:[function(require,module,exports){var isArray=require("isarray");module.exports=pathToRegexp;var PATH_REGEXP=new RegExp(["(\\\\.)","([\\/.])?(?:\\:(\\w+)(?:\\(((?:\\\\.|[^)])*)\\))?|\\(((?:\\\\.|[^)])*)\\))([+*?])?","([.+*?=^!:${}()[\\]|\\/])"].join("|"),"g");function escapeGroup(group){return group.replace(/([=!:$\/()])/g,"\\$1")}function attachKeys(re,keys){re.keys=keys;return re}function flags(options){return options.sensitive?"":"i"}function regexpToRegexp(path,keys){var groups=path.source.match(/\((?!\?)/g);if(groups){for(var i=0;i1){for(var i=1;i"})},{"./router":7,knockout:"knockout"}],7:[function(require,module,exports){"use strict";var ko=require("knockout");var page=require("page");function Router(){this.component=ko.observable();this.ctx=ko.observable()}Router.prototype.start=function(config){if(config.basePath){page.base(config.basePath)}page.start(config);require("./component")};Router.prototype.show=function(path){page.show(path)};Router.prototype.redirect=function(path){page.redirect(path)};Router.prototype.route=function(route){var self=this;var stack=[];var args,arg,i,el;for(i=1;i0){history.back();page.len--}else if(path){setTimeout(function(){page.show(path,state)})}else{setTimeout(function(){page.show(base,state)})}};page.redirect=function(from,to){if("string"===typeof from&&"string"===typeof to){page(from,function(e){setTimeout(function(){page.replace(to)},0)})}if("string"===typeof from&&"undefined"===typeof to){setTimeout(function(){page.replace(from)},0)}};page.replace=function(path,state,init,dispatch){var ctx=new Context(path,state);page.current=ctx.path;ctx.init=init;ctx.save();if(false!==dispatch)page.dispatch(ctx);return ctx};page.dispatch=function(ctx){var prev=prevContext,i=0,j=0;prevContext=ctx;function nextExit(){var fn=page.exits[j++];if(!fn)return nextEnter();fn(prev,nextExit)}function nextEnter(){var fn=page.callbacks[i++];if(ctx.path!==page.current){ctx.handled=false;return}if(!fn)return unhandled(ctx);fn(ctx,nextEnter)}if(prev){nextExit()}else{nextEnter()}};function unhandled(ctx){if(ctx.handled)return;var current;if(hashbang){current=base+location.hash.replace("#!","")}else{current=location.pathname+location.search}if(current===ctx.canonicalPath)return;page.stop();ctx.handled=false;location.href=ctx.canonicalPath}page.exit=function(path,fn){if(typeof path==="function"){return page.exit("*",path)}var route=new Route(path);for(var i=1;i-1)return;if(el.target)return;if(!sameOrigin(el.href))return;var path=el.pathname+el.search+(el.hash||"");if(typeof process!=="undefined"&&path.match(/^\/[a-zA-Z]:\//)){path=path.replace(/^\/[a-zA-Z]:\//,"/")}var orig=path;if(path.indexOf(base)===0){path=path.substr(base.length)}if(hashbang)path=path.replace("#!","");if(base&&orig===path)return;e.preventDefault();page.show(orig)}function which(e){e=e||window.event;return null===e.which?e.button:e.which}function sameOrigin(href){var origin=location.protocol+"//"+location.hostname;if(location.port)origin+=":"+location.port;return href&&0===href.indexOf(origin)}page.sameOrigin=sameOrigin}).call(this,require("_process"))},{_process:4,"path-to-regexp":3}],3:[function(require,module,exports){var isArray=require("isarray");module.exports=pathToRegexp;var PATH_REGEXP=new RegExp(["(\\\\.)","([\\/.])?(?:\\:(\\w+)(?:\\(((?:\\\\.|[^)])*)\\))?|\\(((?:\\\\.|[^)])*)\\))([+*?])?","([.+*?=^!:${}()[\\]|\\/])"].join("|"),"g");function escapeGroup(group){return group.replace(/([=!:$\/()])/g,"\\$1")}function attachKeys(re,keys){re.keys=keys;return re}function flags(options){return options.sensitive?"":"i"}function regexpToRegexp(path,keys){var groups=path.source.match(/\((?!\?)/g);if(groups){for(var i=0;i1){for(var i=1;i"});module.exports=ViewModel},{"./router":8,knockout:"knockout"}],8:[function(require,module,exports){"use strict";var ko=require("knockout");var page=require("page");function Router(){this._component=ko.observable();this._ctx=ko.observable()}Router.prototype.start=function(config){if(typeof config==="undefined")config={};this._basePath=config.basePath||"";page.base(this._basePath);page.start(config);require("./binding");require("./component")};Router.prototype.show=function(path){page.show(path)};Router.prototype.redirect=function(path){page.redirect(path)};Router.prototype.route=function(route){var self=this;var stack=[];var args,arg,i,el;for(i=1;i