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