@umijs/history
Version:
Manage session history with JavaScript
3 lines (2 loc) • 6.4 kB
JavaScript
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("query-string")):"function"==typeof define&&define.amd?define(["exports","query-string"],n):n((t="undefined"!=typeof globalThis?globalThis:t||self).HistoryLibrary={},t.queryString)}(this,(function(t,n){"use strict";function e(){return(e=Object.assign||function(t){for(var n=1;n<arguments.length;n++){var e=arguments[n];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t}).apply(this,arguments)}var r;t.Action=void 0,(r=t.Action||(t.Action={})).Pop="POP",r.Push="PUSH",r.Replace="REPLACE";var i="beforeunload",a="popstate";function o(t,n,e){return Math.min(Math.max(t,n),e)}function u(t){t.preventDefault(),t.returnValue=""}function c(){var t=[];return{get length(){return t.length},push:function(n){return t.push(n),function(){t=t.filter((function(t){return t!==n}))}},call:function(n){t.forEach((function(t){return t&&t(n)}))}}}function s(){return Math.random().toString(36).substr(2,8)}function f(t){var e=t.pathname,r=void 0===e?"/":e,i=t.search,a=void 0===i?"":i,o=t.query,u=t.hash,c=void 0===u?"":u;if(a&&"?"!==a)r+="?"===a.charAt(0)?a:"?"+a;else if(o){var s=n.stringify(o);s&&(r+="?"+s)}return c&&"#"!==c&&(r+="#"===c.charAt(0)?c:"#"+c),r}function l(t){var e={};if(t){var r=t.indexOf("#");r>=0&&(e.hash=t.substr(r),t=t.substr(0,r));var i=t.indexOf("?");i>=0&&(e.search=t.substr(i),e.query=e.query||n.parse(e.search||"")||{},t=t.substr(0,i)),t&&(e.pathname=t)}return e}t.createBrowserHistory=function(r){void 0===r&&(r={});var o=r.window,h=void 0===o?document.defaultView:o,p=h.history;function v(){var t=h.location,e=t.pathname,r=t.search,i=t.hash,a=p.state||{},o=n.parse(r)||{};return[a.idx,{pathname:e,search:r,query:o,hash:i,state:a.usr||null,key:a.key||"default"}]}var d=null;h.addEventListener(a,(function(){if(d)P.call(d),d=null;else{var n=t.Action.Pop,e=v(),r=e[0],i=e[1];if(P.length){if(null!=r){var a=m-r;a&&(d={action:n,location:i,retry:function(){S(-1*a)}},S(a))}}else E(n)}}));var y=t.Action.Pop,g=v(),m=g[0],b=g[1],A=c(),P=c();function k(t){return"string"==typeof t?t:f(t)}function x(t,n){return void 0===n&&(n=null),e({pathname:b.pathname,hash:"",search:"",query:{}},"string"==typeof t?l(t):t,{state:n,key:s()})}function q(t,n){return[{usr:t.state,key:t.key,idx:n},k(t)]}function w(t,n,e){return!P.length||(P.call({action:t,location:n,retry:e}),!1)}function E(t){y=t;var n=v();m=n[0],b=n[1],A.call({action:y,location:b})}function S(t){p.go(t)}return null==m&&(m=0,p.replaceState(e({},p.state,{idx:m}),"")),{get action(){return y},get location(){return b},createHref:k,push:function n(e,r){var i=t.Action.Push,a=x(e,r);if(w(i,a,(function(){n(e,r)}))){var o=q(a,m+1),u=o[0],c=o[1];try{p.pushState(u,"",c)}catch(t){h.location.assign(c)}E(i)}},replace:function n(e,r){var i=t.Action.Replace,a=x(e,r);if(w(i,a,(function(){n(e,r)}))){var o=q(a,m),u=o[0],c=o[1];p.replaceState(u,"",c),E(i)}},go:S,back:function(){S(-1)},forward:function(){S(1)},listen:function(t){return A.push(t)},block:function(t){var n=P.push(t);return 1===P.length&&h.addEventListener(i,u),function(){n(),P.length||h.removeEventListener(i,u)}}}},t.createHashHistory=function(r){void 0===r&&(r={});var o=r.window,h=void 0===o?document.defaultView:o,p=h.history;function v(){var t=l(h.location.hash.substr(1)),e=t.pathname,r=void 0===e?"/":e,i=t.search,a=void 0===i?"":i,o=t.hash,u=void 0===o?"":o,c=p.state||{};return[c.idx,{pathname:r,search:a,query:n.parse(a)||{},hash:u,state:c.usr||null,key:c.key||"default"}]}var d=null;function y(){if(d)k.call(d),d=null;else{var n=t.Action.Pop,e=v(),r=e[0],i=e[1];if(k.length){if(null!=r){var a=b-r;a&&(d={action:n,location:i,retry:function(){H(-1*a)}},H(a))}}else S(n)}}h.addEventListener(a,y),h.addEventListener("hashchange",(function(){f(v()[1])!==f(A)&&y()}));var g=t.Action.Pop,m=v(),b=m[0],A=m[1],P=c(),k=c();function x(t){return function(){var t=document.querySelector("base"),n="";if(t&&t.getAttribute("href")){var e=h.location.href,r=e.indexOf("#");n=-1===r?e:e.slice(0,r)}return n}()+"#"+("string"==typeof t?t:f(t))}function q(t,n){return void 0===n&&(n=null),e({pathname:A.pathname,hash:"",search:"",query:{}},"string"==typeof t?l(t):t,{state:n,key:s()})}function w(t,n){return[{usr:t.state,key:t.key,idx:n},x(t)]}function E(t,n,e){return!k.length||(k.call({action:t,location:n,retry:e}),!1)}function S(t){g=t;var n=v();b=n[0],A=n[1],P.call({action:g,location:A})}function H(t){p.go(t)}return null==b&&(b=0,p.replaceState(e({},p.state,{idx:b}),"")),{get action(){return g},get location(){return A},createHref:x,push:function n(e,r){var i=t.Action.Push,a=q(e,r);if(E(i,a,(function(){n(e,r)}))){var o=w(a,b+1),u=o[0],c=o[1];try{p.pushState(u,"",c)}catch(t){h.location.assign(c)}S(i)}},replace:function n(e,r){var i=t.Action.Replace,a=q(e,r);if(E(i,a,(function(){n(e,r)}))){var o=w(a,b),u=o[0],c=o[1];p.replaceState(u,"",c),S(i)}},go:H,back:function(){H(-1)},forward:function(){H(1)},listen:function(t){return P.push(t)},block:function(t){var n=k.push(t);return 1===k.length&&h.addEventListener(i,u),function(){n(),k.length||h.removeEventListener(i,u)}}}},t.createMemoryHistory=function(n){void 0===n&&(n={});var r=n,i=r.initialEntries,a=void 0===i?["/"]:i,u=r.initialIndex,h=a.map((function(t){return e({pathname:"/",search:"",hash:"",query:{},state:null,key:s()},"string"==typeof t?l(t):t)})),p=o(null==u?h.length-1:u,0,h.length-1),v=t.Action.Pop,d=h[p],y=c(),g=c();function m(t,n){return void 0===n&&(n=null),e({pathname:d.pathname,search:"",query:{},hash:""},"string"==typeof t?l(t):t,{state:n,key:s()})}function b(t,n,e){return!g.length||(g.call({action:t,location:n,retry:e}),!1)}function A(t,n){v=t,d=n,y.call({action:v,location:d})}function P(n){var e=o(p+n,0,h.length-1),r=t.Action.Pop,i=h[e];b(r,i,(function(){P(n)}))&&(p=e,A(r,i))}return{get index(){return p},get action(){return v},get location(){return d},createHref:function(t){return"string"==typeof t?t:f(t)},push:function n(e,r){var i=t.Action.Push,a=m(e,r);b(i,a,(function(){n(e,r)}))&&(p+=1,h.splice(p,h.length,a),A(i,a))},replace:function n(e,r){var i=t.Action.Replace,a=m(e,r);b(i,a,(function(){n(e,r)}))&&(h[p]=a,A(i,a))},go:P,back:function(){P(-1)},forward:function(){P(1)},listen:function(t){return y.push(t)},block:function(t){return g.push(t)}}},t.createPath=f,t.parsePath=l,Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=history.production.min.js.map