diff --git a/lib/navigo.js b/lib/navigo.js index e1020fe5..99d552b2 100644 --- a/lib/navigo.js +++ b/lib/navigo.js @@ -56,12 +56,12 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + Object.defineProperty(exports, "__esModule", { value: true }); - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var PARAMETER_REGEXP = /([:*])(\w+)/g; @@ -225,6 +225,7 @@ return /******/ (function(modules) { // webpackBootstrap m.route.route instanceof RegExp ? handler.apply(undefined, _toConsumableArray(m.match.slice(1, m.match.length))) : handler(m.params); return m; } else if (this._defaultHandler && (url === '' || url === '/')) { + this._lastRouteResolved = url; this._defaultHandler(); return true; } else if (this._notFoundHandler) { @@ -308,8 +309,8 @@ return /******/ (function(modules) { // webpackBootstrap } else { (function () { var cached = _this2._cLoc(), - current = void 0, - _check = void 0; + current = undefined, + _check = undefined; _check = function check() { current = _this2._cLoc(); diff --git a/lib/navigo.js.map b/lib/navigo.js.map index 8b0c613b..71bef012 100644 --- a/lib/navigo.js.map +++ b/lib/navigo.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap fa7fddd02fa08a51fa00","webpack:///./src/index.js"],"names":["PARAMETER_REGEXP","WILDCARD_REGEXP","REPLACE_VARIABLE_REGEXP","REPLACE_WILDCARD","FOLLOWED_BY_SLASH_REGEXP","clean","s","RegExp","replace","regExpResultToParams","match","names","length","slice","reduce","params","value","index","replaceDynamicURLParts","route","paramNames","regexp","full","dots","name","push","getUrlDepth","url","split","compareUrlDepth","urlA","urlB","findMatchedRoutes","routes","map","filter","m","root","matched","u","fallbackURL","substr","current","isPushStateAvailable","window","history","pushState","Navigo","r","useHash","_routes","_useHash","_paused","_destroyed","_lastRouteResolved","_notFoundHandler","_defaultHandler","_ok","_listen","updatePageLinks","prototype","helpers","navigate","path","absolute","to","_getRoot","resolve","location","href","on","args","_add","orderedRoutes","Object","keys","sort","forEach","notFound","handler","_cLoc","destroy","clearTimeout","_listenningInterval","onpopstate","self","document","_findLinks","link","hasListenerAttached","addEventListener","e","getAttribute","preventDefault","generate","data","result","key","pause","status","disableIfAPINotAvailable","uses","as","cached","check","setTimeout","call","querySelectorAll"],"mappings":"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","file":"navigo.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Navigo\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Navigo\"] = factory();\n\telse\n\t\troot[\"Navigo\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap fa7fddd02fa08a51fa00\n **/","const PARAMETER_REGEXP = /([:*])(\\w+)/g;\nconst WILDCARD_REGEXP = /\\*/g;\nconst REPLACE_VARIABLE_REGEXP = '([^\\/]+)';\nconst REPLACE_WILDCARD = '(?:.*)';\nconst FOLLOWED_BY_SLASH_REGEXP = '(?:\\/|$)';\n\nfunction clean(s) {\n if (s instanceof RegExp) return s;\n return s.replace(/\\/+$/, '').replace(/^\\/+/, '/');\n}\n\nfunction regExpResultToParams(match, names) {\n if (names.length === 0) return null;\n if (!match) return null;\n return match\n .slice(1, match.length)\n .reduce((params, value, index) => {\n if (params === null) params = {};\n params[names[index]] = value;\n return params;\n }, null);\n}\n\nfunction replaceDynamicURLParts(route) {\n var paramNames = [], regexp;\n\n if (route instanceof RegExp) {\n regexp = route;\n } else {\n regexp = new RegExp(\n clean(route)\n .replace(PARAMETER_REGEXP, function (full, dots, name) {\n paramNames.push(name);\n return REPLACE_VARIABLE_REGEXP;\n })\n .replace(WILDCARD_REGEXP, REPLACE_WILDCARD) + FOLLOWED_BY_SLASH_REGEXP\n );\n }\n return { regexp, paramNames };\n}\n\nfunction getUrlDepth(url) {\n return url.replace(/\\/$/, '').split('/').length;\n}\n\nfunction compareUrlDepth(urlA, urlB) {\n return getUrlDepth(urlA) < getUrlDepth(urlB);\n}\n\nfunction findMatchedRoutes(url, routes = []) {\n return routes\n .map(route => {\n var { regexp, paramNames } = replaceDynamicURLParts(route.route);\n var match = url.match(regexp);\n var params = regExpResultToParams(match, paramNames);\n\n return match ? { match, route, params } : false;\n })\n .filter(m => m);\n}\n\nfunction match(url, routes) {\n return findMatchedRoutes(url, routes)[0] || false;\n}\n\nfunction root(url, routes) {\n var matched = findMatchedRoutes(\n url,\n routes.filter(route => {\n let u = clean(route.route);\n\n return u !== '' && u !== '*';\n })\n );\n var fallbackURL = clean(url);\n\n if (matched.length > 0) {\n return matched\n .map(m => clean(url.substr(0, m.match.index)))\n .reduce((root, current) => {\n return current.length < root.length ? current : root;\n }, fallbackURL);\n }\n return fallbackURL;\n}\n\nfunction isPushStateAvailable() {\n return !!(\n typeof window !== 'undefined' &&\n window.history &&\n window.history.pushState\n );\n}\n\nfunction Navigo(r, useHash) {\n this._routes = [];\n this.root = useHash && r ? r.replace(/\\/$/, '/#') : (r || null);\n this._useHash = useHash;\n this._paused = false;\n this._destroyed = false;\n this._lastRouteResolved = null;\n this._notFoundHandler = null;\n this._defaultHandler = null;\n this._ok = !useHash && isPushStateAvailable();\n this._listen();\n this.updatePageLinks();\n}\n\nNavigo.prototype = {\n helpers: {\n match,\n root,\n clean\n },\n navigate: function (path, absolute) {\n var to;\n\n path = path || '';\n if (this._ok) {\n to = (!absolute ? this._getRoot() + '/' : '') + clean(path);\n to = to.replace(/([^:])(\\/{2,})/g, '$1/');\n history[this._paused ? 'replaceState' : 'pushState']({}, '', to);\n this.resolve();\n } else if (typeof window !== 'undefined') {\n window.location.href = window.location.href.replace(/#(.*)$/, '') + '#' + path;\n }\n return this;\n },\n on: function (...args) {\n if (args.length >= 2) {\n this._add(args[0], args[1]);\n } else if (typeof args[0] === 'object') {\n let orderedRoutes = Object.keys(args[0]).sort(compareUrlDepth);\n\n orderedRoutes.forEach(route => {\n this._add(route, args[0][route]);\n });\n } else if (typeof args[0] === 'function') {\n this._defaultHandler = args[0];\n }\n return this;\n },\n notFound: function (handler) {\n this._notFoundHandler = handler;\n },\n resolve: function (current) {\n var handler, m;\n var url = (current || this._cLoc()).replace(this._getRoot(), '');\n\n if (this._paused || url === this._lastRouteResolved) return false;\n if (this._useHash) {\n url = url.replace(/^\\/#/, '/');\n }\n m = match(url, this._routes);\n\n if (m) {\n this._lastRouteResolved = url;\n handler = m.route.handler;\n m.route.route instanceof RegExp ?\n handler(...(m.match.slice(1, m.match.length))) :\n handler(m.params);\n return m;\n } else if (this._defaultHandler && (url === '' || url === '/')) {\n this._defaultHandler();\n return true;\n } else if (this._notFoundHandler) {\n this._notFoundHandler();\n }\n return false;\n },\n destroy: function () {\n this._routes = [];\n this._destroyed = true;\n clearTimeout(this._listenningInterval);\n typeof window !== 'undefined' ? window.onpopstate = null : null;\n },\n updatePageLinks: function () {\n var self = this;\n\n if (typeof document === 'undefined') return;\n\n this._findLinks().forEach(link => {\n if (!link.hasListenerAttached) {\n link.addEventListener('click', function (e) {\n var location = link.getAttribute('href');\n\n if (!self._destroyed) {\n e.preventDefault();\n self.navigate(clean(location));\n }\n });\n link.hasListenerAttached = true;\n }\n });\n },\n generate: function (name, data = {}) {\n return this._routes.reduce((result, route) => {\n var key;\n\n if (route.name === name) {\n result = route.route;\n for (key in data) {\n result = result.replace(':' + key, data[key]);\n }\n }\n return result;\n }, '');\n },\n link: function (path) {\n return this._getRoot() + path;\n },\n pause: function (status) {\n this._paused = status;\n },\n disableIfAPINotAvailable: function () {\n if (!isPushStateAvailable()) {\n this.destroy();\n }\n },\n _add: function (route, handler = null) {\n if (typeof handler === 'object') {\n this._routes.push({ route, handler: handler.uses, name: handler.as });\n } else {\n this._routes.push({ route, handler });\n }\n return this._add;\n },\n _getRoot: function () {\n if (this.root !== null) return this.root;\n this.root = root(this._cLoc(), this._routes);\n return this.root;\n },\n _listen: function () {\n if (this._ok) {\n window.onpopstate = () => {\n this.resolve();\n };\n } else {\n let cached = this._cLoc(), current, check;\n\n check = () => {\n current = this._cLoc();\n if (cached !== current) {\n cached = current;\n this.resolve();\n }\n this._listenningInterval = setTimeout(check, 200);\n };\n check();\n }\n },\n _cLoc: function () {\n if (typeof window !== 'undefined') {\n return window.location.href;\n }\n return '';\n },\n _findLinks: function () {\n return [].slice.call(document.querySelectorAll('[data-navigo]'));\n }\n};\n\nexport default Navigo;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap fcfb1f6156cefcc42313","webpack:///./src/index.js"],"names":[],"mappings":"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","file":"navigo.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Navigo\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Navigo\"] = factory();\n\telse\n\t\troot[\"Navigo\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap fcfb1f6156cefcc42313\n **/","const PARAMETER_REGEXP = /([:*])(\\w+)/g;\nconst WILDCARD_REGEXP = /\\*/g;\nconst REPLACE_VARIABLE_REGEXP = '([^\\/]+)';\nconst REPLACE_WILDCARD = '(?:.*)';\nconst FOLLOWED_BY_SLASH_REGEXP = '(?:\\/|$)';\n\nfunction clean(s) {\n if (s instanceof RegExp) return s;\n return s.replace(/\\/+$/, '').replace(/^\\/+/, '/');\n}\n\nfunction regExpResultToParams(match, names) {\n if (names.length === 0) return null;\n if (!match) return null;\n return match\n .slice(1, match.length)\n .reduce((params, value, index) => {\n if (params === null) params = {};\n params[names[index]] = value;\n return params;\n }, null);\n}\n\nfunction replaceDynamicURLParts(route) {\n var paramNames = [], regexp;\n\n if (route instanceof RegExp) {\n regexp = route;\n } else {\n regexp = new RegExp(\n clean(route)\n .replace(PARAMETER_REGEXP, function (full, dots, name) {\n paramNames.push(name);\n return REPLACE_VARIABLE_REGEXP;\n })\n .replace(WILDCARD_REGEXP, REPLACE_WILDCARD) + FOLLOWED_BY_SLASH_REGEXP\n );\n }\n return { regexp, paramNames };\n}\n\nfunction getUrlDepth(url) {\n return url.replace(/\\/$/, '').split('/').length;\n}\n\nfunction compareUrlDepth(urlA, urlB) {\n return getUrlDepth(urlA) < getUrlDepth(urlB);\n}\n\nfunction findMatchedRoutes(url, routes = []) {\n return routes\n .map(route => {\n var { regexp, paramNames } = replaceDynamicURLParts(route.route);\n var match = url.match(regexp);\n var params = regExpResultToParams(match, paramNames);\n\n return match ? { match, route, params } : false;\n })\n .filter(m => m);\n}\n\nfunction match(url, routes) {\n return findMatchedRoutes(url, routes)[0] || false;\n}\n\nfunction root(url, routes) {\n var matched = findMatchedRoutes(\n url,\n routes.filter(route => {\n let u = clean(route.route);\n\n return u !== '' && u !== '*';\n })\n );\n var fallbackURL = clean(url);\n\n if (matched.length > 0) {\n return matched\n .map(m => clean(url.substr(0, m.match.index)))\n .reduce((root, current) => {\n return current.length < root.length ? current : root;\n }, fallbackURL);\n }\n return fallbackURL;\n}\n\nfunction isPushStateAvailable() {\n return !!(\n typeof window !== 'undefined' &&\n window.history &&\n window.history.pushState\n );\n}\n\nfunction Navigo(r, useHash) {\n this._routes = [];\n this.root = useHash && r ? r.replace(/\\/$/, '/#') : (r || null);\n this._useHash = useHash;\n this._paused = false;\n this._destroyed = false;\n this._lastRouteResolved = null;\n this._notFoundHandler = null;\n this._defaultHandler = null;\n this._ok = !useHash && isPushStateAvailable();\n this._listen();\n this.updatePageLinks();\n}\n\nNavigo.prototype = {\n helpers: {\n match,\n root,\n clean\n },\n navigate: function (path, absolute) {\n var to;\n\n path = path || '';\n if (this._ok) {\n to = (!absolute ? this._getRoot() + '/' : '') + clean(path);\n to = to.replace(/([^:])(\\/{2,})/g, '$1/');\n history[this._paused ? 'replaceState' : 'pushState']({}, '', to);\n this.resolve();\n } else if (typeof window !== 'undefined') {\n window.location.href = window.location.href.replace(/#(.*)$/, '') + '#' + path;\n }\n return this;\n },\n on: function (...args) {\n if (args.length >= 2) {\n this._add(args[0], args[1]);\n } else if (typeof args[0] === 'object') {\n let orderedRoutes = Object.keys(args[0]).sort(compareUrlDepth);\n\n orderedRoutes.forEach(route => {\n this._add(route, args[0][route]);\n });\n } else if (typeof args[0] === 'function') {\n this._defaultHandler = args[0];\n }\n return this;\n },\n notFound: function (handler) {\n this._notFoundHandler = handler;\n },\n resolve: function (current) {\n var handler, m;\n var url = (current || this._cLoc()).replace(this._getRoot(), '');\n\n if (this._paused || url === this._lastRouteResolved) return false;\n if (this._useHash) {\n url = url.replace(/^\\/#/, '/');\n }\n m = match(url, this._routes);\n\n if (m) {\n this._lastRouteResolved = url;\n handler = m.route.handler;\n m.route.route instanceof RegExp ?\n handler(...(m.match.slice(1, m.match.length))) :\n handler(m.params);\n return m;\n } else if (this._defaultHandler && (url === '' || url === '/')) {\n this._lastRouteResolved = url;\n this._defaultHandler();\n return true;\n } else if (this._notFoundHandler) {\n this._notFoundHandler();\n }\n return false;\n },\n destroy: function () {\n this._routes = [];\n this._destroyed = true;\n clearTimeout(this._listenningInterval);\n typeof window !== 'undefined' ? window.onpopstate = null : null;\n },\n updatePageLinks: function () {\n var self = this;\n\n if (typeof document === 'undefined') return;\n\n this._findLinks().forEach(link => {\n if (!link.hasListenerAttached) {\n link.addEventListener('click', function (e) {\n var location = link.getAttribute('href');\n\n if (!self._destroyed) {\n e.preventDefault();\n self.navigate(clean(location));\n }\n });\n link.hasListenerAttached = true;\n }\n });\n },\n generate: function (name, data = {}) {\n return this._routes.reduce((result, route) => {\n var key;\n\n if (route.name === name) {\n result = route.route;\n for (key in data) {\n result = result.replace(':' + key, data[key]);\n }\n }\n return result;\n }, '');\n },\n link: function (path) {\n return this._getRoot() + path;\n },\n pause: function (status) {\n this._paused = status;\n },\n disableIfAPINotAvailable: function () {\n if (!isPushStateAvailable()) {\n this.destroy();\n }\n },\n _add: function (route, handler = null) {\n if (typeof handler === 'object') {\n this._routes.push({ route, handler: handler.uses, name: handler.as });\n } else {\n this._routes.push({ route, handler });\n }\n return this._add;\n },\n _getRoot: function () {\n if (this.root !== null) return this.root;\n this.root = root(this._cLoc(), this._routes);\n return this.root;\n },\n _listen: function () {\n if (this._ok) {\n window.onpopstate = () => {\n this.resolve();\n };\n } else {\n let cached = this._cLoc(), current, check;\n\n check = () => {\n current = this._cLoc();\n if (cached !== current) {\n cached = current;\n this.resolve();\n }\n this._listenningInterval = setTimeout(check, 200);\n };\n check();\n }\n },\n _cLoc: function () {\n if (typeof window !== 'undefined') {\n return window.location.href;\n }\n return '';\n },\n _findLinks: function () {\n return [].slice.call(document.querySelectorAll('[data-navigo]'));\n }\n};\n\nexport default Navigo;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/lib/navigo.min.js b/lib/navigo.min.js index 76881a4e..9be4f82a 100644 --- a/lib/navigo.min.js +++ b/lib/navigo.min.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("Navigo",[],e):"object"==typeof exports?exports.Navigo=e():t.Navigo=e()}(this,function(){return function(t){function e(o){if(n[o])return n[o].exports;var r=n[o]={exports:{},id:o,loaded:!1};return t[o].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e){"use strict";function n(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e0?n.map(function(e){return o(t.substr(0,e.match.index))}).reduce(function(t,e){return e.length=2)this._add(n[0],n[1]);else if("object"===h(n[0])){var r=Object.keys(n[0]).sort(s);r.forEach(function(e){t._add(e,n[0][e])})}else"function"==typeof n[0]&&(this._defaultHandler=n[0]);return this},notFound:function(t){this._notFoundHandler=t},resolve:function(t){var e,o,r=(t||this._cLoc()).replace(this._getRoot(),"");return!this._paused&&r!==this._lastRouteResolved&&(this._useHash&&(r=r.replace(/^\/#/,"/")),(o=l(r,this._routes))?(this._lastRouteResolved=r,e=o.route.handler,o.route.route instanceof RegExp?e.apply(void 0,n(o.match.slice(1,o.match.length))):e(o.params),o):!this._defaultHandler||""!==r&&"/"!==r?(this._notFoundHandler&&this._notFoundHandler(),!1):(this._defaultHandler(),!0))},destroy:function(){this._routes=[],this._destroyed=!0,clearTimeout(this._listenningInterval),"undefined"!=typeof window?window.onpopstate=null:null},updatePageLinks:function(){var t=this;"undefined"!=typeof document&&this._findLinks().forEach(function(e){e.hasListenerAttached||(e.addEventListener("click",function(n){var r=e.getAttribute("href");t._destroyed||(n.preventDefault(),t.navigate(o(r)))}),e.hasListenerAttached=!0)})},generate:function(t){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return this._routes.reduce(function(n,o){var r;if(o.name===t){n=o.route;for(r in e)n=n.replace(":"+r,e[r])}return n},"")},link:function(t){return this._getRoot()+t},pause:function(t){this._paused=t},disableIfAPINotAvailable:function(){f()||this.destroy()},_add:function(t){var e=arguments.length<=1||void 0===arguments[1]?null:arguments[1];return"object"===("undefined"==typeof e?"undefined":h(e))?this._routes.push({route:t,handler:e.uses,name:e.as}):this._routes.push({route:t,handler:e}),this._add},_getRoot:function(){return null!==this.root?this.root:(this.root=c(this._cLoc(),this._routes),this.root)},_listen:function(){var t=this;this._ok?window.onpopstate=function(){t.resolve()}:!function(){var e=t._cLoc(),n=void 0,o=void 0;(o=function(){n=t._cLoc(),e!==n&&(e=n,t.resolve()),t._listenningInterval=setTimeout(o,200)})()}()},_cLoc:function(){return"undefined"!=typeof window?window.location.href:""},_findLinks:function(){return[].slice.call(document.querySelectorAll("[data-navigo]"))}},e["default"]=d,t.exports=e["default"]}])}); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("Navigo",[],e):"object"==typeof exports?exports.Navigo=e():t.Navigo=e()}(this,function(){return function(t){function e(o){if(n[o])return n[o].exports;var r=n[o]={exports:{},id:o,loaded:!1};return t[o].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e){"use strict";function n(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e0?n.map(function(e){return o(t.substr(0,e.match.index))}).reduce(function(t,e){return e.lengtho;o++)n[o]=arguments[o];if(n.length>=2)this._add(n[0],n[1]);else if("object"===h(n[0])){var r=Object.keys(n[0]).sort(s);r.forEach(function(e){t._add(e,n[0][e])})}else"function"==typeof n[0]&&(this._defaultHandler=n[0]);return this},notFound:function(t){this._notFoundHandler=t},resolve:function(t){var e,o,r=(t||this._cLoc()).replace(this._getRoot(),"");return this._paused||r===this._lastRouteResolved?!1:(this._useHash&&(r=r.replace(/^\/#/,"/")),(o=l(r,this._routes))?(this._lastRouteResolved=r,e=o.route.handler,o.route.route instanceof RegExp?e.apply(void 0,n(o.match.slice(1,o.match.length))):e(o.params),o):!this._defaultHandler||""!==r&&"/"!==r?(this._notFoundHandler&&this._notFoundHandler(),!1):(this._lastRouteResolved=r,this._defaultHandler(),!0))},destroy:function(){this._routes=[],this._destroyed=!0,clearTimeout(this._listenningInterval),"undefined"!=typeof window?window.onpopstate=null:null},updatePageLinks:function(){var t=this;"undefined"!=typeof document&&this._findLinks().forEach(function(e){e.hasListenerAttached||(e.addEventListener("click",function(n){var r=e.getAttribute("href");t._destroyed||(n.preventDefault(),t.navigate(o(r)))}),e.hasListenerAttached=!0)})},generate:function(t){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return this._routes.reduce(function(n,o){var r;if(o.name===t){n=o.route;for(r in e)n=n.replace(":"+r,e[r])}return n},"")},link:function(t){return this._getRoot()+t},pause:function(t){this._paused=t},disableIfAPINotAvailable:function(){f()||this.destroy()},_add:function(t){var e=arguments.length<=1||void 0===arguments[1]?null:arguments[1];return"object"===("undefined"==typeof e?"undefined":h(e))?this._routes.push({route:t,handler:e.uses,name:e.as}):this._routes.push({route:t,handler:e}),this._add},_getRoot:function(){return null!==this.root?this.root:(this.root=c(this._cLoc(),this._routes),this.root)},_listen:function(){var t=this;this._ok?window.onpopstate=function(){t.resolve()}:!function(){var e=t._cLoc(),n=void 0,o=void 0;(o=function(){n=t._cLoc(),e!==n&&(e=n,t.resolve()),t._listenningInterval=setTimeout(o,200)})()}()},_cLoc:function(){return"undefined"!=typeof window?window.location.href:""},_findLinks:function(){return[].slice.call(document.querySelectorAll("[data-navigo]"))}},e["default"]=d,t.exports=e["default"]}])}); //# sourceMappingURL=navigo.min.js.map \ No newline at end of file diff --git a/lib/navigo.min.js.map b/lib/navigo.min.js.map index 078a64f5..06d024ff 100644 --- a/lib/navigo.min.js.map +++ b/lib/navigo.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///navigo.min.js","webpack:///webpack/bootstrap b7fbe3cf8d61db3f8002","webpack:///./src/index.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_toConsumableArray","arr","Array","isArray","i","arr2","length","from","clean","s","RegExp","replace","regExpResultToParams","match","names","slice","reduce","params","value","index","replaceDynamicURLParts","route","regexp","paramNames","PARAMETER_REGEXP","full","dots","name","push","REPLACE_VARIABLE_REGEXP","WILDCARD_REGEXP","REPLACE_WILDCARD","FOLLOWED_BY_SLASH_REGEXP","getUrlDepth","url","split","compareUrlDepth","urlA","urlB","findMatchedRoutes","routes","arguments","undefined","map","_replaceDynamicURLPar","filter","matched","u","fallbackURL","substr","current","isPushStateAvailable","window","history","pushState","Navigo","r","useHash","_routes","_useHash","_paused","_destroyed","_lastRouteResolved","_notFoundHandler","_defaultHandler","_ok","_listen","updatePageLinks","Object","defineProperty","_typeof","Symbol","iterator","obj","constructor","prototype","helpers","navigate","path","absolute","to","_getRoot","resolve","location","href","on","_this","_len","args","_key","_add","orderedRoutes","keys","sort","forEach","notFound","handler","_cLoc","destroy","clearTimeout","_listenningInterval","onpopstate","self","document","_findLinks","link","hasListenerAttached","addEventListener","e","getAttribute","preventDefault","generate","data","result","key","pause","status","disableIfAPINotAvailable","uses","as","_this2","cached","check","setTimeout","querySelectorAll"],"mappings":"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","file":"navigo.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Navigo\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Navigo\"] = factory();\n\telse\n\t\troot[\"Navigo\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Navigo\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Navigo\"] = factory();\n\telse\n\t\troot[\"Navigo\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\tvar PARAMETER_REGEXP = /([:*])(\\w+)/g;\n\tvar WILDCARD_REGEXP = /\\*/g;\n\tvar REPLACE_VARIABLE_REGEXP = '([^\\/]+)';\n\tvar REPLACE_WILDCARD = '(?:.*)';\n\tvar FOLLOWED_BY_SLASH_REGEXP = '(?:\\/|$)';\n\t\n\tfunction clean(s) {\n\t if (s instanceof RegExp) return s;\n\t return s.replace(/\\/+$/, '').replace(/^\\/+/, '/');\n\t}\n\t\n\tfunction regExpResultToParams(match, names) {\n\t if (names.length === 0) return null;\n\t if (!match) return null;\n\t return match.slice(1, match.length).reduce(function (params, value, index) {\n\t if (params === null) params = {};\n\t params[names[index]] = value;\n\t return params;\n\t }, null);\n\t}\n\t\n\tfunction replaceDynamicURLParts(route) {\n\t var paramNames = [],\n\t regexp;\n\t\n\t if (route instanceof RegExp) {\n\t regexp = route;\n\t } else {\n\t regexp = new RegExp(clean(route).replace(PARAMETER_REGEXP, function (full, dots, name) {\n\t paramNames.push(name);\n\t return REPLACE_VARIABLE_REGEXP;\n\t }).replace(WILDCARD_REGEXP, REPLACE_WILDCARD) + FOLLOWED_BY_SLASH_REGEXP);\n\t }\n\t return { regexp: regexp, paramNames: paramNames };\n\t}\n\t\n\tfunction getUrlDepth(url) {\n\t return url.replace(/\\/$/, '').split('/').length;\n\t}\n\t\n\tfunction compareUrlDepth(urlA, urlB) {\n\t return getUrlDepth(urlA) < getUrlDepth(urlB);\n\t}\n\t\n\tfunction findMatchedRoutes(url) {\n\t var routes = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];\n\t\n\t return routes.map(function (route) {\n\t var _replaceDynamicURLPar = replaceDynamicURLParts(route.route);\n\t\n\t var regexp = _replaceDynamicURLPar.regexp;\n\t var paramNames = _replaceDynamicURLPar.paramNames;\n\t\n\t var match = url.match(regexp);\n\t var params = regExpResultToParams(match, paramNames);\n\t\n\t return match ? { match: match, route: route, params: params } : false;\n\t }).filter(function (m) {\n\t return m;\n\t });\n\t}\n\t\n\tfunction match(url, routes) {\n\t return findMatchedRoutes(url, routes)[0] || false;\n\t}\n\t\n\tfunction root(url, routes) {\n\t var matched = findMatchedRoutes(url, routes.filter(function (route) {\n\t var u = clean(route.route);\n\t\n\t return u !== '' && u !== '*';\n\t }));\n\t var fallbackURL = clean(url);\n\t\n\t if (matched.length > 0) {\n\t return matched.map(function (m) {\n\t return clean(url.substr(0, m.match.index));\n\t }).reduce(function (root, current) {\n\t return current.length < root.length ? current : root;\n\t }, fallbackURL);\n\t }\n\t return fallbackURL;\n\t}\n\t\n\tfunction isPushStateAvailable() {\n\t return !!(typeof window !== 'undefined' && window.history && window.history.pushState);\n\t}\n\t\n\tfunction Navigo(r, useHash) {\n\t this._routes = [];\n\t this.root = useHash && r ? r.replace(/\\/$/, '/#') : r || null;\n\t this._useHash = useHash;\n\t this._paused = false;\n\t this._destroyed = false;\n\t this._lastRouteResolved = null;\n\t this._notFoundHandler = null;\n\t this._defaultHandler = null;\n\t this._ok = !useHash && isPushStateAvailable();\n\t this._listen();\n\t this.updatePageLinks();\n\t}\n\t\n\tNavigo.prototype = {\n\t helpers: {\n\t match: match,\n\t root: root,\n\t clean: clean\n\t },\n\t navigate: function navigate(path, absolute) {\n\t var to;\n\t\n\t path = path || '';\n\t if (this._ok) {\n\t to = (!absolute ? this._getRoot() + '/' : '') + clean(path);\n\t to = to.replace(/([^:])(\\/{2,})/g, '$1/');\n\t history[this._paused ? 'replaceState' : 'pushState']({}, '', to);\n\t this.resolve();\n\t } else if (typeof window !== 'undefined') {\n\t window.location.href = window.location.href.replace(/#(.*)$/, '') + '#' + path;\n\t }\n\t return this;\n\t },\n\t on: function on() {\n\t var _this = this;\n\t\n\t for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t args[_key] = arguments[_key];\n\t }\n\t\n\t if (args.length >= 2) {\n\t this._add(args[0], args[1]);\n\t } else if (_typeof(args[0]) === 'object') {\n\t var orderedRoutes = Object.keys(args[0]).sort(compareUrlDepth);\n\t\n\t orderedRoutes.forEach(function (route) {\n\t _this._add(route, args[0][route]);\n\t });\n\t } else if (typeof args[0] === 'function') {\n\t this._defaultHandler = args[0];\n\t }\n\t return this;\n\t },\n\t notFound: function notFound(handler) {\n\t this._notFoundHandler = handler;\n\t },\n\t resolve: function resolve(current) {\n\t var handler, m;\n\t var url = (current || this._cLoc()).replace(this._getRoot(), '');\n\t\n\t if (this._paused || url === this._lastRouteResolved) return false;\n\t if (this._useHash) {\n\t url = url.replace(/^\\/#/, '/');\n\t }\n\t m = match(url, this._routes);\n\t\n\t if (m) {\n\t this._lastRouteResolved = url;\n\t handler = m.route.handler;\n\t m.route.route instanceof RegExp ? handler.apply(undefined, _toConsumableArray(m.match.slice(1, m.match.length))) : handler(m.params);\n\t return m;\n\t } else if (this._defaultHandler && (url === '' || url === '/')) {\n\t this._defaultHandler();\n\t return true;\n\t } else if (this._notFoundHandler) {\n\t this._notFoundHandler();\n\t }\n\t return false;\n\t },\n\t destroy: function destroy() {\n\t this._routes = [];\n\t this._destroyed = true;\n\t clearTimeout(this._listenningInterval);\n\t typeof window !== 'undefined' ? window.onpopstate = null : null;\n\t },\n\t updatePageLinks: function updatePageLinks() {\n\t var self = this;\n\t\n\t if (typeof document === 'undefined') return;\n\t\n\t this._findLinks().forEach(function (link) {\n\t if (!link.hasListenerAttached) {\n\t link.addEventListener('click', function (e) {\n\t var location = link.getAttribute('href');\n\t\n\t if (!self._destroyed) {\n\t e.preventDefault();\n\t self.navigate(clean(location));\n\t }\n\t });\n\t link.hasListenerAttached = true;\n\t }\n\t });\n\t },\n\t generate: function generate(name) {\n\t var data = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\n\t return this._routes.reduce(function (result, route) {\n\t var key;\n\t\n\t if (route.name === name) {\n\t result = route.route;\n\t for (key in data) {\n\t result = result.replace(':' + key, data[key]);\n\t }\n\t }\n\t return result;\n\t }, '');\n\t },\n\t link: function link(path) {\n\t return this._getRoot() + path;\n\t },\n\t pause: function pause(status) {\n\t this._paused = status;\n\t },\n\t disableIfAPINotAvailable: function disableIfAPINotAvailable() {\n\t if (!isPushStateAvailable()) {\n\t this.destroy();\n\t }\n\t },\n\t _add: function _add(route) {\n\t var handler = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\t\n\t if ((typeof handler === 'undefined' ? 'undefined' : _typeof(handler)) === 'object') {\n\t this._routes.push({ route: route, handler: handler.uses, name: handler.as });\n\t } else {\n\t this._routes.push({ route: route, handler: handler });\n\t }\n\t return this._add;\n\t },\n\t _getRoot: function _getRoot() {\n\t if (this.root !== null) return this.root;\n\t this.root = root(this._cLoc(), this._routes);\n\t return this.root;\n\t },\n\t _listen: function _listen() {\n\t var _this2 = this;\n\t\n\t if (this._ok) {\n\t window.onpopstate = function () {\n\t _this2.resolve();\n\t };\n\t } else {\n\t (function () {\n\t var cached = _this2._cLoc(),\n\t current = void 0,\n\t _check = void 0;\n\t\n\t _check = function check() {\n\t current = _this2._cLoc();\n\t if (cached !== current) {\n\t cached = current;\n\t _this2.resolve();\n\t }\n\t _this2._listenningInterval = setTimeout(_check, 200);\n\t };\n\t _check();\n\t })();\n\t }\n\t },\n\t _cLoc: function _cLoc() {\n\t if (typeof window !== 'undefined') {\n\t return window.location.href;\n\t }\n\t return '';\n\t },\n\t _findLinks: function _findLinks() {\n\t return [].slice.call(document.querySelectorAll('[data-navigo]'));\n\t }\n\t};\n\t\n\texports.default = Navigo;\n\tmodule.exports = exports['default'];\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** navigo.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap b7fbe3cf8d61db3f8002\n **/","const PARAMETER_REGEXP = /([:*])(\\w+)/g;\nconst WILDCARD_REGEXP = /\\*/g;\nconst REPLACE_VARIABLE_REGEXP = '([^\\/]+)';\nconst REPLACE_WILDCARD = '(?:.*)';\nconst FOLLOWED_BY_SLASH_REGEXP = '(?:\\/|$)';\n\nfunction clean(s) {\n if (s instanceof RegExp) return s;\n return s.replace(/\\/+$/, '').replace(/^\\/+/, '/');\n}\n\nfunction regExpResultToParams(match, names) {\n if (names.length === 0) return null;\n if (!match) return null;\n return match\n .slice(1, match.length)\n .reduce((params, value, index) => {\n if (params === null) params = {};\n params[names[index]] = value;\n return params;\n }, null);\n}\n\nfunction replaceDynamicURLParts(route) {\n var paramNames = [], regexp;\n\n if (route instanceof RegExp) {\n regexp = route;\n } else {\n regexp = new RegExp(\n clean(route)\n .replace(PARAMETER_REGEXP, function (full, dots, name) {\n paramNames.push(name);\n return REPLACE_VARIABLE_REGEXP;\n })\n .replace(WILDCARD_REGEXP, REPLACE_WILDCARD) + FOLLOWED_BY_SLASH_REGEXP\n );\n }\n return { regexp, paramNames };\n}\n\nfunction getUrlDepth(url) {\n return url.replace(/\\/$/, '').split('/').length;\n}\n\nfunction compareUrlDepth(urlA, urlB) {\n return getUrlDepth(urlA) < getUrlDepth(urlB);\n}\n\nfunction findMatchedRoutes(url, routes = []) {\n return routes\n .map(route => {\n var { regexp, paramNames } = replaceDynamicURLParts(route.route);\n var match = url.match(regexp);\n var params = regExpResultToParams(match, paramNames);\n\n return match ? { match, route, params } : false;\n })\n .filter(m => m);\n}\n\nfunction match(url, routes) {\n return findMatchedRoutes(url, routes)[0] || false;\n}\n\nfunction root(url, routes) {\n var matched = findMatchedRoutes(\n url,\n routes.filter(route => {\n let u = clean(route.route);\n\n return u !== '' && u !== '*';\n })\n );\n var fallbackURL = clean(url);\n\n if (matched.length > 0) {\n return matched\n .map(m => clean(url.substr(0, m.match.index)))\n .reduce((root, current) => {\n return current.length < root.length ? current : root;\n }, fallbackURL);\n }\n return fallbackURL;\n}\n\nfunction isPushStateAvailable() {\n return !!(\n typeof window !== 'undefined' &&\n window.history &&\n window.history.pushState\n );\n}\n\nfunction Navigo(r, useHash) {\n this._routes = [];\n this.root = useHash && r ? r.replace(/\\/$/, '/#') : (r || null);\n this._useHash = useHash;\n this._paused = false;\n this._destroyed = false;\n this._lastRouteResolved = null;\n this._notFoundHandler = null;\n this._defaultHandler = null;\n this._ok = !useHash && isPushStateAvailable();\n this._listen();\n this.updatePageLinks();\n}\n\nNavigo.prototype = {\n helpers: {\n match,\n root,\n clean\n },\n navigate: function (path, absolute) {\n var to;\n\n path = path || '';\n if (this._ok) {\n to = (!absolute ? this._getRoot() + '/' : '') + clean(path);\n to = to.replace(/([^:])(\\/{2,})/g, '$1/');\n history[this._paused ? 'replaceState' : 'pushState']({}, '', to);\n this.resolve();\n } else if (typeof window !== 'undefined') {\n window.location.href = window.location.href.replace(/#(.*)$/, '') + '#' + path;\n }\n return this;\n },\n on: function (...args) {\n if (args.length >= 2) {\n this._add(args[0], args[1]);\n } else if (typeof args[0] === 'object') {\n let orderedRoutes = Object.keys(args[0]).sort(compareUrlDepth);\n\n orderedRoutes.forEach(route => {\n this._add(route, args[0][route]);\n });\n } else if (typeof args[0] === 'function') {\n this._defaultHandler = args[0];\n }\n return this;\n },\n notFound: function (handler) {\n this._notFoundHandler = handler;\n },\n resolve: function (current) {\n var handler, m;\n var url = (current || this._cLoc()).replace(this._getRoot(), '');\n\n if (this._paused || url === this._lastRouteResolved) return false;\n if (this._useHash) {\n url = url.replace(/^\\/#/, '/');\n }\n m = match(url, this._routes);\n\n if (m) {\n this._lastRouteResolved = url;\n handler = m.route.handler;\n m.route.route instanceof RegExp ?\n handler(...(m.match.slice(1, m.match.length))) :\n handler(m.params);\n return m;\n } else if (this._defaultHandler && (url === '' || url === '/')) {\n this._defaultHandler();\n return true;\n } else if (this._notFoundHandler) {\n this._notFoundHandler();\n }\n return false;\n },\n destroy: function () {\n this._routes = [];\n this._destroyed = true;\n clearTimeout(this._listenningInterval);\n typeof window !== 'undefined' ? window.onpopstate = null : null;\n },\n updatePageLinks: function () {\n var self = this;\n\n if (typeof document === 'undefined') return;\n\n this._findLinks().forEach(link => {\n if (!link.hasListenerAttached) {\n link.addEventListener('click', function (e) {\n var location = link.getAttribute('href');\n\n if (!self._destroyed) {\n e.preventDefault();\n self.navigate(clean(location));\n }\n });\n link.hasListenerAttached = true;\n }\n });\n },\n generate: function (name, data = {}) {\n return this._routes.reduce((result, route) => {\n var key;\n\n if (route.name === name) {\n result = route.route;\n for (key in data) {\n result = result.replace(':' + key, data[key]);\n }\n }\n return result;\n }, '');\n },\n link: function (path) {\n return this._getRoot() + path;\n },\n pause: function (status) {\n this._paused = status;\n },\n disableIfAPINotAvailable: function () {\n if (!isPushStateAvailable()) {\n this.destroy();\n }\n },\n _add: function (route, handler = null) {\n if (typeof handler === 'object') {\n this._routes.push({ route, handler: handler.uses, name: handler.as });\n } else {\n this._routes.push({ route, handler });\n }\n return this._add;\n },\n _getRoot: function () {\n if (this.root !== null) return this.root;\n this.root = root(this._cLoc(), this._routes);\n return this.root;\n },\n _listen: function () {\n if (this._ok) {\n window.onpopstate = () => {\n this.resolve();\n };\n } else {\n let cached = this._cLoc(), current, check;\n\n check = () => {\n current = this._cLoc();\n if (cached !== current) {\n cached = current;\n this.resolve();\n }\n this._listenningInterval = setTimeout(check, 200);\n };\n check();\n }\n },\n _cLoc: function () {\n if (typeof window !== 'undefined') {\n return window.location.href;\n }\n return '';\n },\n _findLinks: function () {\n return [].slice.call(document.querySelectorAll('[data-navigo]'));\n }\n};\n\nexport default Navigo;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///navigo.min.js","webpack:///webpack/bootstrap 40591fdca58490ac6eea","webpack:///./src/index.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_toConsumableArray","arr","Array","isArray","i","arr2","length","from","clean","s","RegExp","replace","regExpResultToParams","match","names","slice","reduce","params","value","index","replaceDynamicURLParts","route","regexp","paramNames","PARAMETER_REGEXP","full","dots","name","push","REPLACE_VARIABLE_REGEXP","WILDCARD_REGEXP","REPLACE_WILDCARD","FOLLOWED_BY_SLASH_REGEXP","getUrlDepth","url","split","compareUrlDepth","urlA","urlB","findMatchedRoutes","routes","arguments","undefined","map","_replaceDynamicURLPar","filter","matched","u","fallbackURL","substr","current","isPushStateAvailable","window","history","pushState","Navigo","r","useHash","_routes","_useHash","_paused","_destroyed","_lastRouteResolved","_notFoundHandler","_defaultHandler","_ok","_listen","updatePageLinks","_typeof","Symbol","iterator","obj","constructor","Object","defineProperty","prototype","helpers","navigate","path","absolute","to","_getRoot","resolve","location","href","on","_this","_len","args","_key","_add","orderedRoutes","keys","sort","forEach","notFound","handler","_cLoc","apply","destroy","clearTimeout","_listenningInterval","onpopstate","self","document","_findLinks","link","hasListenerAttached","addEventListener","e","getAttribute","preventDefault","generate","data","result","key","pause","status","disableIfAPINotAvailable","uses","as","_this2","cached","_check","setTimeout","querySelectorAll"],"mappings":"CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,IACA,kBAAAG,gBAAAC,IACAD,OAAA,YAAAH,GACA,gBAAAC,SACAA,QAAA,OAAAD,IAEAD,EAAA,OAAAC,KACCK,KAAA,WACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAP,OAGA,IAAAC,GAAAO,EAAAD,IACAP,WACAS,GAAAF,EACAG,QAAA,EAUA,OANAL,GAAAE,GAAAI,KAAAV,EAAAD,QAAAC,IAAAD,QAAAM,GAGAL,EAAAS,QAAA,EAGAT,EAAAD,QAvBA,GAAAQ,KAqCA,OATAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,GAGAR,EAAA,KDgBM,SAASL,EAAQD,GAEtB,YAQA,SAASe,GAAmBC,GAAO,GAAIC,MAAMC,QAAQF,GAAM,CAAE,IAAK,GAAIG,GAAI,EAAGC,EAAOH,MAAMD,EAAIK,QAASF,EAAIH,EAAIK,OAAQF,IAAOC,EAAKD,GAAKH,EAAIG,EAAM,OAAOC,GAAe,MAAOH,OAAMK,KAAKN,GE1D3L,QAASO,GAAMC,GACb,MAAIA,aAAaC,QAAeD,EACzBA,EAAEE,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,KAG/C,QAASC,GAAqBC,EAAOC,GACnC,MAAqB,KAAjBA,EAAMR,OAAqB,KAC1BO,EACEA,EACJE,MAAM,EAAGF,EAAMP,QACfU,OAAO,SAACC,EAAQC,EAAOC,GAGtB,MAFe,QAAXF,IAAiBA,MACrBA,EAAOH,EAAMK,IAAUD,EAChBD,GACN,MAPc,KAUrB,QAASG,GAAuBC,GAC9B,GAAqBC,GAAjBC,IAcJ,OAXED,GADED,YAAiBX,QACVW,EAEA,GAAIX,QACXF,EAAMa,GACLV,QAAQa,EAAkB,SAAUC,EAAMC,EAAMC,GAE/C,MADAJ,GAAWK,KAAKD,GACTE,IAERlB,QAAQmB,EAAiBC,GAAoBC,IAGzCV,SAAQC,cAGnB,QAASU,GAAYC,GACnB,MAAOA,GAAIvB,QAAQ,MAAO,IAAIwB,MAAM,KAAK7B,OAG3C,QAAS8B,GAAgBC,EAAMC,GAC7B,MAAOL,GAAYI,GAAQJ,EAAYK,GAGzC,QAASC,GAAkBL,GF8DxB,GE9D6BM,GAAAC,UAAAnC,QAAA,GAAAoC,SAAAD,UAAA,MAASA,UAAA,EACvC,OAAOD,GACJG,IAAI,SAAAtB,GF+DJ,GAAIuB,GE9D0BxB,EAAuBC,EAAMA,OAApDC,EAAAsB,EAAAtB,OAAQC,EAAAqB,EAAArB,WACVV,EAAQqB,EAAIrB,MAAMS,GAClBL,EAASL,EAAqBC,EAAOU,EAEzC,OAAOV,IAAUA,QAAOQ,QAAOJ,WAAW,IAE3C4B,OAAO,SAAAhD,GFkEP,MElEYA,KAGjB,QAASgB,GAAMqB,EAAKM,GAClB,MAAOD,GAAkBL,EAAKM,GAAQ,KAAM,EAG9C,QAASzD,GAAKmD,EAAKM,GACjB,GAAIM,GAAUP,EACZL,EACAM,EAAOK,OAAO,SAAAxB,GACZ,GAAI0B,GAAIvC,EAAMa,EAAMA,MAEpB,OAAa,KAAN0B,GAAkB,MAANA,KAGnBC,EAAcxC,EAAM0B,EAExB,OAAIY,GAAQxC,OAAS,EACZwC,EACJH,IAAI,SAAA9C,GFgEJ,MEhESW,GAAM0B,EAAIe,OAAO,EAAGpD,EAAEgB,MAAMM,UACrCH,OAAO,SAACjC,EAAMmE,GACb,MAAOA,GAAQ5C,OAASvB,EAAKuB,OAAS4C,EAAUnE,GAC/CiE,GAEAA,EAGT,QAASG,KACP,QACoB,mBAAXC,UACPA,OAAOC,UACPD,OAAOC,QAAQC,WAInB,QAASC,GAAOC,EAAGC,GACjBpE,KAAKqE,WACLrE,KAAKN,KAAO0E,GAAWD,EAAIA,EAAE7C,QAAQ,MAAO,MAAS6C,GAAK,KAC1DnE,KAAKsE,SAAWF,EAChBpE,KAAKuE,SAAU,EACfvE,KAAKwE,YAAa,EAClBxE,KAAKyE,mBAAqB,KAC1BzE,KAAK0E,iBAAmB,KACxB1E,KAAK2E,gBAAkB,KACvB3E,KAAK4E,KAAOR,GAAWN,IACvB9D,KAAK6E,UACL7E,KAAK8E,kBF/CN,GAAIC,GAA4B,kBAAXC,SAAoD,gBAApBA,QAAOC,SAAwB,SAAUC,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAXF,SAAyBE,EAAIC,cAAgBH,OAAS,eAAkBE,GAE1OE,QAAOC,eAAezF,EAAS,cAC7BiC,OAAO,GE7DV,IAAMM,GAAmB,eACnBM,EAAkB,MAClBD,EAA0B,UAC1BE,EAAmB,SACnBC,EAA2B,SAwGjCuB,GAAOoB,WACLC,SACE/D,QACA9B,OACAyB,SAEFqE,SAAU,SAAUC,EAAMC,GACxB,GAAIC,EAWJ,OATAF,GAAOA,GAAQ,GACXzF,KAAK4E,KACPe,GAAOD,EAAmC,GAAxB1F,KAAK4F,WAAa,KAAYzE,EAAMsE,GACtDE,EAAKA,EAAGrE,QAAQ,kBAAmB,OACnC0C,QAAQhE,KAAKuE,QAAU,eAAiB,gBAAiB,GAAIoB,GAC7D3F,KAAK6F,WACsB,mBAAX9B,UAChBA,OAAO+B,SAASC,KAAOhC,OAAO+B,SAASC,KAAKzE,QAAQ,SAAU,IAAM,IAAMmE,GAErEzF,MAETgG,GAAI,WF+DD,IAAK,GAFDC,GAAQjG,KAEHkG,EAAO9C,UAAUnC,OE/DZkF,EAAAtF,MAAAqF,GAAAE,EAAA,EAAAF,EAAAE,MFgEZD,EAAKC,GAAQhD,UAAUgD,EE/D1B,IAAID,EAAKlF,QAAU,EACjBjB,KAAKqG,KAAKF,EAAK,GAAIA,EAAK,QACnB,IAAuB,WAAnBpB,EAAOoB,EAAK,IAAiB,CACtC,GAAIG,GAAgBlB,OAAOmB,KAAKJ,EAAK,IAAIK,KAAKzD,EAE9CuD,GAAcG,QAAQ,SAAAzE,GACpBiE,EAAKI,KAAKrE,EAAOmE,EAAK,GAAGnE,UAEC,kBAAZmE,GAAK,KACrBnG,KAAK2E,gBAAkBwB,EAAK,GAE9B,OAAOnG,OAET0G,SAAU,SAAUC,GAClB3G,KAAK0E,iBAAmBiC,GAE1Bd,QAAS,SAAUhC,GACjB,GAAI8C,GAASnG,EACTqC,GAAOgB,GAAW7D,KAAK4G,SAAStF,QAAQtB,KAAK4F,WAAY,GAE7D,OAAI5F,MAAKuE,SAAW1B,IAAQ7C,KAAKyE,oBAA2B,GACxDzE,KAAKsE,WACPzB,EAAMA,EAAIvB,QAAQ,OAAQ,OAE5Bd,EAAIgB,EAAMqB,EAAK7C,KAAKqE,WAGlBrE,KAAKyE,mBAAqB5B,EAC1B8D,EAAUnG,EAAEwB,MAAM2E,QAClBnG,EAAEwB,MAAMA,gBAAiBX,QACvBsF,EAAAE,MAAAxD,OAAA1C,EAAYH,EAAEgB,MAAME,MAAM,EAAGlB,EAAEgB,MAAMP,UACrC0F,EAAQnG,EAAEoB,QACLpB,IACER,KAAK2E,iBAA4B,KAAR9B,GAAsB,MAARA,GAIvC7C,KAAK0E,kBACd1E,KAAK0E,oBAEA,IANL1E,KAAKyE,mBAAqB5B,EAC1B7C,KAAK2E,mBACE,KAMXmC,QAAS,WACP9G,KAAKqE,WACLrE,KAAKwE,YAAa,EAClBuC,aAAa/G,KAAKgH,qBACA,mBAAXjD,QAAyBA,OAAOkD,WAAa,KAAO,MAE7DnC,gBAAiB,WACf,GAAIoC,GAAOlH,IAEa,oBAAbmH,WAEXnH,KAAKoH,aAAaX,QAAQ,SAAAY,GACnBA,EAAKC,sBACRD,EAAKE,iBAAiB,QAAS,SAAUC,GACvC,GAAI1B,GAAWuB,EAAKI,aAAa,OAE5BP,GAAK1C,aACRgD,EAAEE,iBACFR,EAAK1B,SAASrE,EAAM2E,OAGxBuB,EAAKC,qBAAsB,MAIjCK,SAAU,SAAUrF,GFiEjB,GEjEuBsF,GAAAxE,UAAAnC,QAAA,GAAAoC,SAAAD,UAAA,MAAOA,UAAA,EAC/B,OAAOpD,MAAKqE,QAAQ1C,OAAO,SAACkG,EAAQ7F,GAClC,GAAI8F,EAEJ,IAAI9F,EAAMM,OAASA,EAAM,CACvBuF,EAAS7F,EAAMA,KACf,KAAK8F,IAAOF,GACVC,EAASA,EAAOvG,QAAQ,IAAMwG,EAAKF,EAAKE,IAG5C,MAAOD,IACN,KAELR,KAAM,SAAU5B,GACd,MAAOzF,MAAK4F,WAAaH,GAE3BsC,MAAO,SAAUC,GACfhI,KAAKuE,QAAUyD,GAEjBC,yBAA0B,WACnBnE,KACH9D,KAAK8G,WAGTT,KAAM,SAAUrE,GFmEb,GEnEoB2E,GAAAvD,UAAAnC,QAAA,GAAAoC,SAAAD,UAAA,GAAU,KAAAA,UAAA,EAM/B,OALuB,YAAZ,mBAAAuD,GAAA,YAAA5B,EAAA4B,IACT3G,KAAKqE,QAAQ9B,MAAOP,QAAO2E,QAASA,EAAQuB,KAAM5F,KAAMqE,EAAQwB,KAEhEnI,KAAKqE,QAAQ9B,MAAOP,QAAO2E,YAEtB3G,KAAKqG,MAEdT,SAAU,WACR,MAAkB,QAAd5F,KAAKN,KAAsBM,KAAKN,MACpCM,KAAKN,KAAOA,EAAKM,KAAK4G,QAAS5G,KAAKqE,SAC7BrE,KAAKN,OAEdmF,QAAS,WFqEN,GAAIuD,GAASpI,IEpEVA,MAAK4E,IACPb,OAAOkD,WAAa,WAClBmB,EAAKvC,YFyEN,WEtED,GAAIwC,GAASD,EAAKxB,QAAS/C,EAAAR,OAASiF,EAAAjF,QAEpCiF,EAAQ,WACNzE,EAAUuE,EAAKxB,QACXyB,IAAWxE,IACbwE,EAASxE,EACTuE,EAAKvC,WAEPuC,EAAKpB,oBAAsBuB,WAAWD,EAAO,aAKnD1B,MAAO,WACL,MAAsB,mBAAX7C,QACFA,OAAO+B,SAASC,KAElB,IAETqB,WAAY,WACV,SAAU1F,MAAMnB,KAAK4G,SAASqB,iBAAiB,oBF8ElD5I,aE1EcsE,EF2EdrE,EAAOD,QAAUA,EAAQ","file":"navigo.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Navigo\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Navigo\"] = factory();\n\telse\n\t\troot[\"Navigo\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Navigo\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Navigo\"] = factory();\n\telse\n\t\troot[\"Navigo\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\tvar PARAMETER_REGEXP = /([:*])(\\w+)/g;\n\tvar WILDCARD_REGEXP = /\\*/g;\n\tvar REPLACE_VARIABLE_REGEXP = '([^\\/]+)';\n\tvar REPLACE_WILDCARD = '(?:.*)';\n\tvar FOLLOWED_BY_SLASH_REGEXP = '(?:\\/|$)';\n\t\n\tfunction clean(s) {\n\t if (s instanceof RegExp) return s;\n\t return s.replace(/\\/+$/, '').replace(/^\\/+/, '/');\n\t}\n\t\n\tfunction regExpResultToParams(match, names) {\n\t if (names.length === 0) return null;\n\t if (!match) return null;\n\t return match.slice(1, match.length).reduce(function (params, value, index) {\n\t if (params === null) params = {};\n\t params[names[index]] = value;\n\t return params;\n\t }, null);\n\t}\n\t\n\tfunction replaceDynamicURLParts(route) {\n\t var paramNames = [],\n\t regexp;\n\t\n\t if (route instanceof RegExp) {\n\t regexp = route;\n\t } else {\n\t regexp = new RegExp(clean(route).replace(PARAMETER_REGEXP, function (full, dots, name) {\n\t paramNames.push(name);\n\t return REPLACE_VARIABLE_REGEXP;\n\t }).replace(WILDCARD_REGEXP, REPLACE_WILDCARD) + FOLLOWED_BY_SLASH_REGEXP);\n\t }\n\t return { regexp: regexp, paramNames: paramNames };\n\t}\n\t\n\tfunction getUrlDepth(url) {\n\t return url.replace(/\\/$/, '').split('/').length;\n\t}\n\t\n\tfunction compareUrlDepth(urlA, urlB) {\n\t return getUrlDepth(urlA) < getUrlDepth(urlB);\n\t}\n\t\n\tfunction findMatchedRoutes(url) {\n\t var routes = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];\n\t\n\t return routes.map(function (route) {\n\t var _replaceDynamicURLPar = replaceDynamicURLParts(route.route);\n\t\n\t var regexp = _replaceDynamicURLPar.regexp;\n\t var paramNames = _replaceDynamicURLPar.paramNames;\n\t\n\t var match = url.match(regexp);\n\t var params = regExpResultToParams(match, paramNames);\n\t\n\t return match ? { match: match, route: route, params: params } : false;\n\t }).filter(function (m) {\n\t return m;\n\t });\n\t}\n\t\n\tfunction match(url, routes) {\n\t return findMatchedRoutes(url, routes)[0] || false;\n\t}\n\t\n\tfunction root(url, routes) {\n\t var matched = findMatchedRoutes(url, routes.filter(function (route) {\n\t var u = clean(route.route);\n\t\n\t return u !== '' && u !== '*';\n\t }));\n\t var fallbackURL = clean(url);\n\t\n\t if (matched.length > 0) {\n\t return matched.map(function (m) {\n\t return clean(url.substr(0, m.match.index));\n\t }).reduce(function (root, current) {\n\t return current.length < root.length ? current : root;\n\t }, fallbackURL);\n\t }\n\t return fallbackURL;\n\t}\n\t\n\tfunction isPushStateAvailable() {\n\t return !!(typeof window !== 'undefined' && window.history && window.history.pushState);\n\t}\n\t\n\tfunction Navigo(r, useHash) {\n\t this._routes = [];\n\t this.root = useHash && r ? r.replace(/\\/$/, '/#') : r || null;\n\t this._useHash = useHash;\n\t this._paused = false;\n\t this._destroyed = false;\n\t this._lastRouteResolved = null;\n\t this._notFoundHandler = null;\n\t this._defaultHandler = null;\n\t this._ok = !useHash && isPushStateAvailable();\n\t this._listen();\n\t this.updatePageLinks();\n\t}\n\t\n\tNavigo.prototype = {\n\t helpers: {\n\t match: match,\n\t root: root,\n\t clean: clean\n\t },\n\t navigate: function navigate(path, absolute) {\n\t var to;\n\t\n\t path = path || '';\n\t if (this._ok) {\n\t to = (!absolute ? this._getRoot() + '/' : '') + clean(path);\n\t to = to.replace(/([^:])(\\/{2,})/g, '$1/');\n\t history[this._paused ? 'replaceState' : 'pushState']({}, '', to);\n\t this.resolve();\n\t } else if (typeof window !== 'undefined') {\n\t window.location.href = window.location.href.replace(/#(.*)$/, '') + '#' + path;\n\t }\n\t return this;\n\t },\n\t on: function on() {\n\t var _this = this;\n\t\n\t for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t args[_key] = arguments[_key];\n\t }\n\t\n\t if (args.length >= 2) {\n\t this._add(args[0], args[1]);\n\t } else if (_typeof(args[0]) === 'object') {\n\t var orderedRoutes = Object.keys(args[0]).sort(compareUrlDepth);\n\t\n\t orderedRoutes.forEach(function (route) {\n\t _this._add(route, args[0][route]);\n\t });\n\t } else if (typeof args[0] === 'function') {\n\t this._defaultHandler = args[0];\n\t }\n\t return this;\n\t },\n\t notFound: function notFound(handler) {\n\t this._notFoundHandler = handler;\n\t },\n\t resolve: function resolve(current) {\n\t var handler, m;\n\t var url = (current || this._cLoc()).replace(this._getRoot(), '');\n\t\n\t if (this._paused || url === this._lastRouteResolved) return false;\n\t if (this._useHash) {\n\t url = url.replace(/^\\/#/, '/');\n\t }\n\t m = match(url, this._routes);\n\t\n\t if (m) {\n\t this._lastRouteResolved = url;\n\t handler = m.route.handler;\n\t m.route.route instanceof RegExp ? handler.apply(undefined, _toConsumableArray(m.match.slice(1, m.match.length))) : handler(m.params);\n\t return m;\n\t } else if (this._defaultHandler && (url === '' || url === '/')) {\n\t this._lastRouteResolved = url;\n\t this._defaultHandler();\n\t return true;\n\t } else if (this._notFoundHandler) {\n\t this._notFoundHandler();\n\t }\n\t return false;\n\t },\n\t destroy: function destroy() {\n\t this._routes = [];\n\t this._destroyed = true;\n\t clearTimeout(this._listenningInterval);\n\t typeof window !== 'undefined' ? window.onpopstate = null : null;\n\t },\n\t updatePageLinks: function updatePageLinks() {\n\t var self = this;\n\t\n\t if (typeof document === 'undefined') return;\n\t\n\t this._findLinks().forEach(function (link) {\n\t if (!link.hasListenerAttached) {\n\t link.addEventListener('click', function (e) {\n\t var location = link.getAttribute('href');\n\t\n\t if (!self._destroyed) {\n\t e.preventDefault();\n\t self.navigate(clean(location));\n\t }\n\t });\n\t link.hasListenerAttached = true;\n\t }\n\t });\n\t },\n\t generate: function generate(name) {\n\t var data = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\n\t return this._routes.reduce(function (result, route) {\n\t var key;\n\t\n\t if (route.name === name) {\n\t result = route.route;\n\t for (key in data) {\n\t result = result.replace(':' + key, data[key]);\n\t }\n\t }\n\t return result;\n\t }, '');\n\t },\n\t link: function link(path) {\n\t return this._getRoot() + path;\n\t },\n\t pause: function pause(status) {\n\t this._paused = status;\n\t },\n\t disableIfAPINotAvailable: function disableIfAPINotAvailable() {\n\t if (!isPushStateAvailable()) {\n\t this.destroy();\n\t }\n\t },\n\t _add: function _add(route) {\n\t var handler = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\t\n\t if ((typeof handler === 'undefined' ? 'undefined' : _typeof(handler)) === 'object') {\n\t this._routes.push({ route: route, handler: handler.uses, name: handler.as });\n\t } else {\n\t this._routes.push({ route: route, handler: handler });\n\t }\n\t return this._add;\n\t },\n\t _getRoot: function _getRoot() {\n\t if (this.root !== null) return this.root;\n\t this.root = root(this._cLoc(), this._routes);\n\t return this.root;\n\t },\n\t _listen: function _listen() {\n\t var _this2 = this;\n\t\n\t if (this._ok) {\n\t window.onpopstate = function () {\n\t _this2.resolve();\n\t };\n\t } else {\n\t (function () {\n\t var cached = _this2._cLoc(),\n\t current = undefined,\n\t _check = undefined;\n\t\n\t _check = function check() {\n\t current = _this2._cLoc();\n\t if (cached !== current) {\n\t cached = current;\n\t _this2.resolve();\n\t }\n\t _this2._listenningInterval = setTimeout(_check, 200);\n\t };\n\t _check();\n\t })();\n\t }\n\t },\n\t _cLoc: function _cLoc() {\n\t if (typeof window !== 'undefined') {\n\t return window.location.href;\n\t }\n\t return '';\n\t },\n\t _findLinks: function _findLinks() {\n\t return [].slice.call(document.querySelectorAll('[data-navigo]'));\n\t }\n\t};\n\t\n\texports.default = Navigo;\n\tmodule.exports = exports['default'];\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** navigo.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 40591fdca58490ac6eea\n **/","const PARAMETER_REGEXP = /([:*])(\\w+)/g;\nconst WILDCARD_REGEXP = /\\*/g;\nconst REPLACE_VARIABLE_REGEXP = '([^\\/]+)';\nconst REPLACE_WILDCARD = '(?:.*)';\nconst FOLLOWED_BY_SLASH_REGEXP = '(?:\\/|$)';\n\nfunction clean(s) {\n if (s instanceof RegExp) return s;\n return s.replace(/\\/+$/, '').replace(/^\\/+/, '/');\n}\n\nfunction regExpResultToParams(match, names) {\n if (names.length === 0) return null;\n if (!match) return null;\n return match\n .slice(1, match.length)\n .reduce((params, value, index) => {\n if (params === null) params = {};\n params[names[index]] = value;\n return params;\n }, null);\n}\n\nfunction replaceDynamicURLParts(route) {\n var paramNames = [], regexp;\n\n if (route instanceof RegExp) {\n regexp = route;\n } else {\n regexp = new RegExp(\n clean(route)\n .replace(PARAMETER_REGEXP, function (full, dots, name) {\n paramNames.push(name);\n return REPLACE_VARIABLE_REGEXP;\n })\n .replace(WILDCARD_REGEXP, REPLACE_WILDCARD) + FOLLOWED_BY_SLASH_REGEXP\n );\n }\n return { regexp, paramNames };\n}\n\nfunction getUrlDepth(url) {\n return url.replace(/\\/$/, '').split('/').length;\n}\n\nfunction compareUrlDepth(urlA, urlB) {\n return getUrlDepth(urlA) < getUrlDepth(urlB);\n}\n\nfunction findMatchedRoutes(url, routes = []) {\n return routes\n .map(route => {\n var { regexp, paramNames } = replaceDynamicURLParts(route.route);\n var match = url.match(regexp);\n var params = regExpResultToParams(match, paramNames);\n\n return match ? { match, route, params } : false;\n })\n .filter(m => m);\n}\n\nfunction match(url, routes) {\n return findMatchedRoutes(url, routes)[0] || false;\n}\n\nfunction root(url, routes) {\n var matched = findMatchedRoutes(\n url,\n routes.filter(route => {\n let u = clean(route.route);\n\n return u !== '' && u !== '*';\n })\n );\n var fallbackURL = clean(url);\n\n if (matched.length > 0) {\n return matched\n .map(m => clean(url.substr(0, m.match.index)))\n .reduce((root, current) => {\n return current.length < root.length ? current : root;\n }, fallbackURL);\n }\n return fallbackURL;\n}\n\nfunction isPushStateAvailable() {\n return !!(\n typeof window !== 'undefined' &&\n window.history &&\n window.history.pushState\n );\n}\n\nfunction Navigo(r, useHash) {\n this._routes = [];\n this.root = useHash && r ? r.replace(/\\/$/, '/#') : (r || null);\n this._useHash = useHash;\n this._paused = false;\n this._destroyed = false;\n this._lastRouteResolved = null;\n this._notFoundHandler = null;\n this._defaultHandler = null;\n this._ok = !useHash && isPushStateAvailable();\n this._listen();\n this.updatePageLinks();\n}\n\nNavigo.prototype = {\n helpers: {\n match,\n root,\n clean\n },\n navigate: function (path, absolute) {\n var to;\n\n path = path || '';\n if (this._ok) {\n to = (!absolute ? this._getRoot() + '/' : '') + clean(path);\n to = to.replace(/([^:])(\\/{2,})/g, '$1/');\n history[this._paused ? 'replaceState' : 'pushState']({}, '', to);\n this.resolve();\n } else if (typeof window !== 'undefined') {\n window.location.href = window.location.href.replace(/#(.*)$/, '') + '#' + path;\n }\n return this;\n },\n on: function (...args) {\n if (args.length >= 2) {\n this._add(args[0], args[1]);\n } else if (typeof args[0] === 'object') {\n let orderedRoutes = Object.keys(args[0]).sort(compareUrlDepth);\n\n orderedRoutes.forEach(route => {\n this._add(route, args[0][route]);\n });\n } else if (typeof args[0] === 'function') {\n this._defaultHandler = args[0];\n }\n return this;\n },\n notFound: function (handler) {\n this._notFoundHandler = handler;\n },\n resolve: function (current) {\n var handler, m;\n var url = (current || this._cLoc()).replace(this._getRoot(), '');\n\n if (this._paused || url === this._lastRouteResolved) return false;\n if (this._useHash) {\n url = url.replace(/^\\/#/, '/');\n }\n m = match(url, this._routes);\n\n if (m) {\n this._lastRouteResolved = url;\n handler = m.route.handler;\n m.route.route instanceof RegExp ?\n handler(...(m.match.slice(1, m.match.length))) :\n handler(m.params);\n return m;\n } else if (this._defaultHandler && (url === '' || url === '/')) {\n this._lastRouteResolved = url;\n this._defaultHandler();\n return true;\n } else if (this._notFoundHandler) {\n this._notFoundHandler();\n }\n return false;\n },\n destroy: function () {\n this._routes = [];\n this._destroyed = true;\n clearTimeout(this._listenningInterval);\n typeof window !== 'undefined' ? window.onpopstate = null : null;\n },\n updatePageLinks: function () {\n var self = this;\n\n if (typeof document === 'undefined') return;\n\n this._findLinks().forEach(link => {\n if (!link.hasListenerAttached) {\n link.addEventListener('click', function (e) {\n var location = link.getAttribute('href');\n\n if (!self._destroyed) {\n e.preventDefault();\n self.navigate(clean(location));\n }\n });\n link.hasListenerAttached = true;\n }\n });\n },\n generate: function (name, data = {}) {\n return this._routes.reduce((result, route) => {\n var key;\n\n if (route.name === name) {\n result = route.route;\n for (key in data) {\n result = result.replace(':' + key, data[key]);\n }\n }\n return result;\n }, '');\n },\n link: function (path) {\n return this._getRoot() + path;\n },\n pause: function (status) {\n this._paused = status;\n },\n disableIfAPINotAvailable: function () {\n if (!isPushStateAvailable()) {\n this.destroy();\n }\n },\n _add: function (route, handler = null) {\n if (typeof handler === 'object') {\n this._routes.push({ route, handler: handler.uses, name: handler.as });\n } else {\n this._routes.push({ route, handler });\n }\n return this._add;\n },\n _getRoot: function () {\n if (this.root !== null) return this.root;\n this.root = root(this._cLoc(), this._routes);\n return this.root;\n },\n _listen: function () {\n if (this._ok) {\n window.onpopstate = () => {\n this.resolve();\n };\n } else {\n let cached = this._cLoc(), current, check;\n\n check = () => {\n current = this._cLoc();\n if (cached !== current) {\n cached = current;\n this.resolve();\n }\n this._listenningInterval = setTimeout(check, 200);\n };\n check();\n }\n },\n _cLoc: function () {\n if (typeof window !== 'undefined') {\n return window.location.href;\n }\n return '';\n },\n _findLinks: function () {\n return [].slice.call(document.querySelectorAll('[data-navigo]'));\n }\n};\n\nexport default Navigo;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index d9ff953b..3a310142 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "navigo", - "version": "2.3.0", + "version": "2.3.1", "description": "A simple vanilla JavaScript router with a fallback for older browsers", "main": "lib/navigo.js", "jsnext:main": "src/index.js", diff --git a/src/index.js b/src/index.js index 01ac56ed..f97ace47 100644 --- a/src/index.js +++ b/src/index.js @@ -161,6 +161,7 @@ Navigo.prototype = { handler(m.params); return m; } else if (this._defaultHandler && (url === '' || url === '/')) { + this._lastRouteResolved = url; this._defaultHandler(); return true; } else if (this._notFoundHandler) { diff --git a/test/Navigo.spec.js b/test/Navigo.spec.js index f86e331f..69a11f2c 100644 --- a/test/Navigo.spec.js +++ b/test/Navigo.spec.js @@ -110,6 +110,7 @@ describe('Given an instance of Navigo', function () { expect(action).to.be.equal('save'); done(); }; + router.on(/users\/(\d+)\/(\w+)\/?/, handler); router.resolve('site.com/app/users/42/save'); }); @@ -118,6 +119,7 @@ describe('Given an instance of Navigo', function () { describe('and when we use the destroy method', function () { it('should not be able to resolve a route', function () { var handler = sinon.spy(); + router.on('/users', handler); router.resolve('site.com/app/users'); router.destroy(); @@ -245,7 +247,7 @@ describe('Given an instance of Navigo', function () { expect(handler) .to.be.calledOnce - .and.to.be.calledWith({ productId: '42' }) + .and.to.be.calledWith({ productId: '42' }); }); }); }); @@ -271,4 +273,25 @@ describe('Given an instance of Navigo', function () { }); }); + describe('Given the issue #41 case', function () { + it('should resolve routes properly', function () { + var taskRoute = sinon.spy(); + var defaultRoute = sinon.spy(); + + router = new Navigo('http://site.com/', true); + router.on('/task/:taskId/', taskRoute); + router.on(defaultRoute); + + router.resolve('/task/frontend-1'); + router.resolve('/'); + router.resolve('/task/frontend-1'); + + expect(defaultRoute).to.be.calledOnce; + expect(taskRoute).to.be.calledTwice; + expect(taskRoute.firstCall).to.be.calledWith({ taskId: 'frontend-1' }); + expect(taskRoute.secondCall).to.be.calledWith({ taskId: 'frontend-1' }); + + }); + }); + });