UNPKG

uav-router

Version:

Simple hash-based routing for single page apps

1 lines 2.67 kB
"use strict";!function(){var e,n;function r(e){if(!e)return"";var r=[];return Object.keys(e).forEach(function(n){void 0!==e[n]&&r.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]))}),r.join("&")}function a(n){var e={};return decodeURIComponent(n).split("&").forEach(function(n){(n=n.split("="))[0]&&(e[n[0]]=n[1])}),e}function t(n){return!h.canNavigate||h.canNavigate(n)}function o(){h.params=a(location.hash.substring(1))}function i(){var n=r(h.params);e||location.hash.substring(1)===n||(e=!0,requestAnimationFrame(function(){location.hash=n}))}function c(n){if(e)e=!1;else{if(!t(function(){location.href=n.newURL}))return e=!0,location.hash=r(h.params),n.preventDefault();o(),h.load()}}function u(n){return"string"==typeof n&&(n=a(n)),n||{}}function f(n){var e=Object.keys(n),r=Object.keys(h.params);if(e.length!==r.length)return!0;for(var a=e.length>r.length?e:r,t=0;t<a.length;t++)if(h.params[a[t]]!==n[a[t]])return!0}function l(e){var r;return e=u(e),Object.keys(e).forEach(function(n){h.params[n]!==e[n]&&(r=!0,h.params[n]=e[n])}),r}function p(){var n="#"+r(h.params);location.hash!==n&&history.replaceState(void 0,void 0,n)}function s(n){var e;return n.forEach(function(n){void 0!==h.params[n]&&(e=!0,delete h.params[n])}),e}var m={remove:function(){for(var n=arguments.length,e=new Array(n),r=0;r<n;r++)e[r]=arguments[r];s(e)&&m.set(h.params,!0)},removeReplace:function(){for(var n=arguments.length,e=new Array(n),r=0;r<n;r++)e[r]=arguments[r];s(e)&&p()},merge:function(n){l(n)&&i()},set:function(n,e){n=u(n),(e||f(n))&&(h.params=n,i())},replace:function(n){f(n=u(n))&&(h.params=n,p())},mergeReplace:function(n){l(n)&&p()}},h={params:{},url:m,load:function(){h.app&&!n&&(n=!0,requestAnimationFrame(function(){n=!1,h.app(h.params)}))},init:function(n){location.search?location.href=location.href.replace("#","&").replace("?","#"):(h.app=n,window.addEventListener("hashchange",c),o(),h.load())},remove:function(){for(var n=arguments.length,e=new Array(n),r=0;r<n;r++)e[r]=arguments[r];t(function(){return h.remove.apply(h,e)})&&(s(e),i(),h.load())},removeReplace:function(){for(var n=arguments.length,e=new Array(n),r=0;r<n;r++)e[r]=arguments[r];t(function(){return h.removeReplace.apply(h,e)})&&(s(e),p(),h.load())},merge:function(n){t(function(){return h.merge(n)})&&(l(n),i(),h.load())},set:function(n){t(function(){return h.set(n)})&&(h.params=u(n),i(),h.load())},replace:function(n){t(function(){return h.replace(n)})&&(h.params=u(n),p(),h.load())},mergeReplace:function(n){t(function(){return h.mergeReplace(n)})&&(l(n),p(),h.load())}};window.uav=window.uav||{},window.uav.router=h,"undefined"!=typeof module&&module.exports&&(module.exports=h)}();