@trullock/page-manager 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/index.js +119 -60
- package/tests/dist/index.html +20 -0
- package/tests/dist/loading.htm +3 -0
- package/tests/dist/main.js +1648 -0
- package/tests/dist/main.js.map +1 -0
- package/tests/dist/page1.htm +6 -0
- package/tests/dist/page2.htm +6 -0
- package/tests/dist/page3.htm +5 -0
- package/tests/dist/page4.htm +4 -0
- package/tests/dist/page404.htm +3 -0
- package/tests/dist/pageX.htm +4 -0
- package/tests/helpers.js +11 -0
- package/tests/index.html +0 -3
- package/tests/loading.htm +3 -0
- package/tests/lolpack.js +5 -4
- package/tests/page-loading.js +11 -4
- package/tests/page-page1.js +17 -11
- package/tests/page-page2.js +18 -7
- package/tests/page-page3.js +16 -10
- package/tests/page-page4.js +14 -8
- package/tests/page-page404.js +10 -4
- package/tests/page-pageX.js +15 -9
- package/tests/page-show-fail.js +14 -9
- package/tests/page2.htm +3 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","mappings":";;;;;;;;;;;;;;AAAA,iEAAe,qBAAuB,gBAAgB;;;;;;;;;;;;;;ACAtD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;ACApD,iEAAe,qBAAuB,gBAAgB;;;;;;;;;;;;;;ACAtD,iEAAe,qBAAuB,cAAc;;;;;;;;;;;;;;;ACAP;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,eAAe,cAAc,6BAA6B;AAC1G;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe;AACf;AACA;AACA;AACA;AACA;AACA,sBAAsB,6DAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,sCAAsC,oBAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE;;;;;;;;;;;;;;AC1OH,6BAAe,sCAAY;AAC3B;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC,wBAAwB,OAAO,SAAS;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB,SAAS,UAAU;AACnE,cAAc,sBAAsB;AACpC,eAAe,IAAI;AACnB;AACA,IAAI;AACJ;AACA;AACA,sCAAsC,SAAS;AAC/C,cAAc,QAAQ;AACtB,eAAe,IAAI;AACnB;AACA,IAAI;AACJ;AACA,sDAAsD,GAAG;AACzD,YAAY,MAAM,KAAK;AACvB;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,4CAA4C,EAAE;AAC9C,YAAY,IAAI,OAAO;AACvB;AACA,IAAI;AACJ;AACA;AACA,+CAA+C;AAC/C,YAAY,IAAI,KAAK;AACrB;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,IAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3OsC;AAEtC,IAAIC,SAAS,GAAG,CAAC,CAAC;EACjBC,iBAAiB,GAAG,CAAC,CAAC;EACtBC,KAAK,GAAG,EAAE;EACVC,YAAY,GAAG,CAAC,CAAC;AAElB,IAAIC,wBAAwB,GAAG,KAAK;AACpC,IAAIC,kBAAkB,GAAG,KAAK;AAC9B,IAAIC,sBAAsB,GAAG,IAAI;AAEjC,IAAIC,IAAI,GAAG,IAAI;AACf,IAAIC,QAAQ,GAAG,CAAC,CAAC;AACjB,IAAIC,OAAO,GAAG;EACbC,aAAa,EAAEC,WAAW,IAAI,IAAI;EAClCC,YAAY,EAAEC,KAAK,IAAIC,QAAQ,CAACC,IAAI,CAACC,WAAW,CAACH,KAAK,CAAC;EACvDI,aAAa,EAAEJ,KAAK,IAAI,CAAE,CAAC;EAC3BK,eAAe,EAAE,SAAS;EAC1BC,gBAAgB,EAAE,WAAW;EA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","sources":["webpack://@trullock/page-manager/./tests/loading.htm","webpack://@trullock/page-manager/./tests/page1.htm","webpack://@trullock/page-manager/./tests/page2.htm","webpack://@trullock/page-manager/./tests/page3.htm","webpack://@trullock/page-manager/./tests/page4.htm","webpack://@trullock/page-manager/./tests/page404.htm","webpack://@trullock/page-manager/./tests/pageX.htm","webpack://@trullock/page-manager/./node_modules/@trullock/router/src/index.js","webpack://@trullock/page-manager/./node_modules/@trullock/router/src/pattern-lexer.js","webpack://@trullock/page-manager/./src/index.js","webpack://@trullock/page-manager/./tests/helpers.js","webpack://@trullock/page-manager/./tests/page-loading.js","webpack://@trullock/page-manager/./tests/page-page1.js","webpack://@trullock/page-manager/./tests/page-page2.js","webpack://@trullock/page-manager/./tests/page-page3.js","webpack://@trullock/page-manager/./tests/page-page4.js","webpack://@trullock/page-manager/./tests/page-page404.js","webpack://@trullock/page-manager/./tests/page-pageX.js","webpack://@trullock/page-manager/./tests/page-show-fail.js","webpack://@trullock/page-manager/./tests/page.js","webpack://@trullock/page-manager/webpack/bootstrap","webpack://@trullock/page-manager/webpack/runtime/define property getters","webpack://@trullock/page-manager/webpack/runtime/hasOwnProperty shorthand","webpack://@trullock/page-manager/webpack/runtime/make namespace object","webpack://@trullock/page-manager/webpack/runtime/publicPath","webpack://@trullock/page-manager/./tests/lolpack.js"],"sourcesContent":["export default __webpack_public_path__ + \"loading.htm\";","export default __webpack_public_path__ + \"page1.htm\";","export default __webpack_public_path__ + \"page2.htm\";","export default __webpack_public_path__ + \"page3.htm\";","export default __webpack_public_path__ + \"page4.htm\";","export default __webpack_public_path__ + \"page404.htm\";","export default __webpack_public_path__ + \"pageX.htm\";","import PatternLexer from './pattern-lexer.js'\r\n\r\nfunction isKind(val, kind)\r\n{\r\n\treturn '[object ' + kind + ']' === Object.prototype.toString.call(val);\r\n}\r\n\r\nfunction isRegExp(val)\r\n{\r\n\treturn isKind(val, 'RegExp');\r\n}\r\n\r\nfunction decodeQueryString(queryStr)\r\n{\r\n\tlet queryArr = (queryStr || '').replace('?', '').split('&'),\r\n\t\ti = -1,\r\n\t\tobj = {},\r\n\t\tequalIndex, cur, pValue, pName;\r\n\r\n\twhile ((cur = queryArr[++i]))\r\n\t{\r\n\t\tequalIndex = cur.indexOf('=');\r\n\t\tpName = cur.substring(0, equalIndex);\r\n\t\tpValue = decodeURIComponent(cur.substring(equalIndex + 1));\r\n\r\n\t\tif (pName in obj)\r\n\t\t{\r\n\t\t\tif(isArray(obj[pName]))\r\n\t\t\t\tobj[pName].push(pValue);\r\n\t\t\telse\r\n\t\t\t\tobj[pName] = [obj[pName], pValue];\r\n\t\t\t\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tobj[pName] = pValue;\r\n\t }\r\n\t}\r\n\treturn obj;\r\n}\r\n\r\nfunction Route(name, pattern, data, priority, router) {\r\n\tvar isRegexPattern = isRegExp(pattern);\r\n\tthis._name = name;\r\n\tthis._router = router;\r\n\tthis._pattern = pattern;\r\n\tthis._paramsIds = isRegexPattern ? null : router.patternLexer.getParamIds(pattern);\r\n\tthis._optionalParamsIds = isRegexPattern ? null : router.patternLexer.getOptionalParamsIds(pattern);\r\n\tthis._matchRegexp = isRegexPattern ? pattern : router.patternLexer.compilePattern(pattern, router.ignoreCase);\r\n\tthis._data = data;\r\n\tthis._priority = priority || 0;\r\n}\r\n\r\nRoute.prototype = {\r\n\r\n\tmatch: function (request) {\r\n\t\treturn this._matchRegexp.test(request);\r\n\t},\r\n\r\n\t_isValidParam: function (request, prop, values) {\r\n\t\tvar validationRule = this.rules[prop],\r\n\t\t\tval = values[prop],\r\n\t\t\tisValid = false,\r\n\t\t\tisQuery = (prop.indexOf('?') === 0);\r\n\r\n\t\tif (val == null && this._optionalParamsIds && arrayIndexOf(this._optionalParamsIds, prop) !== -1) {\r\n\t\t\tisValid = true;\r\n\t\t}\r\n\t\telse if (isRegExp(validationRule)) {\r\n\t\t\tif (isQuery)\r\n\t\t\t\tval = values[prop + '_']; //use raw string\r\n\r\n\t\t\tisValid = validationRule.test(val);\r\n\t\t}\r\n\t\telse if (isArray(validationRule)) {\r\n\t\t\tif (isQuery)\r\n\t\t\t\tval = values[prop + '_']; //use raw string\r\n\r\n\t\t\tisValid = this._isValidArrayRule(validationRule, val);\r\n\t\t}\r\n\t\telse if (isFunction(validationRule)) {\r\n\t\t\tisValid = validationRule(val, request, values);\r\n\t\t}\r\n\r\n\t\treturn isValid; //fail silently if validationRule is from an unsupported type\r\n\t},\r\n\r\n\t_isValidArrayRule: function (arr, val) {\r\n\t\tif (!this._router.ignoreCase) {\r\n\t\t\treturn arrayIndexOf(arr, val) !== -1;\r\n\t\t}\r\n\r\n\t\tif (typeof val === 'string') {\r\n\t\t\tval = val.toLowerCase();\r\n\t\t}\r\n\r\n\t\tvar n = arr.length,\r\n\t\t\titem,\r\n\t\t\tcompareVal;\r\n\r\n\t\twhile (n--) {\r\n\t\t\titem = arr[n];\r\n\t\t\tcompareVal = (typeof item === 'string') ? item.toLowerCase() : item;\r\n\t\t\tif (compareVal === val) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_getParamsObject: function (request) {\r\n\t\tvar shouldTypecast = this._router.shouldTypecast,\r\n\t\t\tvalues = this._router.patternLexer.getParamValues(request, this._matchRegexp, shouldTypecast),\r\n\t\t\to = {},\r\n\t\t\tn = values.length,\r\n\t\t\tparam, val;\r\n\t\twhile (n--) {\r\n\t\t\tval = values[n];\r\n\t\t\tif (this._paramsIds) {\r\n\t\t\t\tparam = this._paramsIds[n];\r\n\t\t\t\tif (param.indexOf('?') === 0 && val) {\r\n\t\t\t\t\tval = decodeQueryString(val, shouldTypecast);\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor(var key in val){\r\n\t\t\t\t\t\tif(!o[key])\r\n\t\t\t\t\t\t\to[key] = val[key];\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\to['?' + key] = val[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t\to[n] = val;\r\n\t\t\t\t} \r\n\t\t\t\telse \r\n\t\t\t\t\to[param] = val;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn o;\r\n\t},\r\n\r\n\tinterpolate: function (replacements) {\r\n\t\ttry {\r\n\t\t\tvar str = this._router.patternLexer.interpolate(this._pattern, replacements);\r\n\t\t\treturn str;\r\n\t\t}\r\n\t\tcatch(e) {\r\n\t\t\tthrow new Error(`Error interpolating route ${this._pattern} with values ${JSON.stringify(replacements)}\\n` + e);\r\n\t\t}\r\n\t},\r\n\r\n\ttoString: function () {\r\n\t\treturn '[Route pattern:\"' + this._pattern + '\", numListeners:' + this.matched.getNumListeners() + ']';\r\n\t}\r\n\r\n};\r\n\r\n\r\nexport default new class\r\n{\r\n\tconstructor()\r\n\t{\r\n\t\tthis.routes = [];\r\n\t\tthis.routesByName = {};\r\n\t\tthis.patternLexer = PatternLexer();\r\n\t}\r\n\r\n\taddRoute (name, pattern, data, priority)\r\n\t{\r\n\t\tpattern += pattern.endsWith('/') ? ':?query:' : '/:?query:';\r\n\t\tvar route = new Route(name, pattern, data, priority, this);\r\n\r\n\t\tvar n = this.routes.length;\r\n\t\tdo\r\n\t\t{ \r\n\t\t\t--n; \r\n\t\t} while (this.routes[n] && route._priority <= this.routes[n]._priority);\r\n\r\n\t\tthis.routes.splice(n + 1, 0, route);\r\n\r\n\t\tthis.routesByName[name] = route;\r\n\t\tObject.defineProperty(this, name, { get: () => pattern });\r\n\r\n\t\treturn route;\r\n\t}\r\n\r\n\tinterpolate(name, data)\r\n\t{\r\n\t\tif(!this.routesByName[name])\r\n\t\t\tthrow new Error(`Cannot find route by name ${name}`);\r\n\t\t\t\r\n\t\treturn this.routesByName[name].interpolate(data);\r\n\t}\r\n\r\n\tparse (request)\r\n\t{\r\n\t\tvar n = this.routes.length;\r\n\t\tvar route, hash, path;\r\n\r\n\t\tvar index = request.indexOf('#');\r\n\t\tif(index > -1)\r\n\t\t{\r\n\t\t\thash = request.substr(index + 1);\r\n\t\t\trequest = request.substr(0, index);\r\n\t\t}\r\n\r\n\t\tindex = request.indexOf('?');\r\n\t\tif(index > -1)\r\n\t\t\tpath = request.substr(0, index)\r\n\t\telse\r\n\t\t\tpath = request;\t\r\n\t\t\r\n\t\twhile (route = this.routes[--n])\r\n\t\t{\r\n\t\t\tif (route.match(request))\r\n\t\t\t{\r\n\t\t\t\tvar params = route._getParamsObject(request);\r\n\t\t\t\tparams.hash = hash;\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tpath: path.toLowerCase(),\r\n\t\t\t\t\tname: route._name,\r\n\t\t\t\t\tpattern: route._pattern,\r\n\t\t\t\t\tdata: route._data,\r\n\t\t\t\t\tparams: params\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\ttoString ()\r\n\t{\r\n\t\treturn '[Router numRoutes:' + this.getNumRoutes() + ']';\r\n\t}\r\n}();","export default function () {\r\n\r\n\tvar\r\n\t\t//match chars that should be escaped on string regexp\r\n\t\tESCAPE_CHARS_REGEXP = /[\\\\.+*?\\^$\\[\\](){}\\/'#]/g,\r\n\r\n\t\t//trailing slashes (begin/end of string)\r\n\t\tLOOSE_SLASHES_REGEXP = /^\\/|\\/$/g,\r\n\t\tLEGACY_SLASHES_REGEXP = /\\/$/g,\r\n\r\n\t\t//params - everything between `{ }` or `: :`\r\n\t\tPARAMS_REGEXP = /(?:\\{|:)([^}:]+)(?:\\}|:)/g,\r\n\r\n\t\t//used to save params during compile (avoid escaping things that\r\n\t\t//shouldn't be escaped).\r\n\t\tTOKENS = {\r\n\t\t\t'OS': {\r\n\t\t\t\t//optional slashes\r\n\t\t\t\t//slash between `::` or `}:` or `\\w:` or `:{?` or `}{?` or `\\w{?`\r\n\t\t\t\trgx: /([:}]|\\w(?=\\/))\\/?(:|(?:\\{\\?))/g,\r\n\t\t\t\tsave: '$1{{id}}$2',\r\n\t\t\t\tres: '\\\\/?'\r\n\t\t\t},\r\n\t\t\t'RS': {\r\n\t\t\t\t//required slashes\r\n\t\t\t\t//used to insert slash between `:{` and `}{`\r\n\t\t\t\trgx: /([:}])\\/?(\\{)/g,\r\n\t\t\t\tsave: '$1{{id}}$2',\r\n\t\t\t\tres: '\\\\/'\r\n\t\t\t},\r\n\t\t\t'RQ': {\r\n\t\t\t\t//required query string - everything in between `{? }`\r\n\t\t\t\trgx: /\\{\\?([^}]+)\\}/g,\r\n\t\t\t\t//everything from `?` till `#` or end of string\r\n\t\t\t\tres: '\\\\?([^#]+)'\r\n\t\t\t},\r\n\t\t\t'OQ': {\r\n\t\t\t\t//optional query string - everything in between `:? :`\r\n\t\t\t\trgx: /:\\?([^:]+):/g,\r\n\t\t\t\t//everything from `?` till `#` or end of string\r\n\t\t\t\tres: '(?:\\\\?([^#]*))?'\r\n\t\t\t},\r\n\t\t\t'OR': {\r\n\t\t\t\t//optional rest - everything in between `: *:`\r\n\t\t\t\trgx: /:([^:]+)\\*:/g,\r\n\t\t\t\tres: '(.*)?' // optional group to avoid passing empty string as captured\r\n\t\t\t},\r\n\t\t\t'RR': {\r\n\t\t\t\t//rest param - everything in between `{ *}`\r\n\t\t\t\trgx: /\\{([^}]+)\\*\\}/g,\r\n\t\t\t\tres: '(.+)'\r\n\t\t\t},\r\n\t\t\t// required/optional params should come after rest segments\r\n\t\t\t'RP': {\r\n\t\t\t\t//required params - everything between `{ }`\r\n\t\t\t\trgx: /\\{([^}]+)\\}/g,\r\n\t\t\t\tres: '([^\\\\/?]+)'\r\n\t\t\t},\r\n\t\t\t'OP': {\r\n\t\t\t\t//optional params - everything between `: :`\r\n\t\t\t\trgx: /:([^:]+):/g,\r\n\t\t\t\tres: '([^\\\\/?]+)?\\/?'\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tLOOSE_SLASH = 1,\r\n\t\tSTRICT_SLASH = 2,\r\n\t\tLEGACY_SLASH = 3,\r\n\r\n\t\t_slashMode = LOOSE_SLASH;\r\n\r\n\r\n\tfunction precompileTokens() {\r\n\t\tvar key, cur;\r\n\t\tfor (key in TOKENS) {\r\n\t\t\tif (TOKENS.hasOwnProperty(key)) {\r\n\t\t\t\tcur = TOKENS[key];\r\n\t\t\t\tcur.id = '__CR_' + key + '__';\r\n\t\t\t\tcur.save = ('save' in cur) ? cur.save.replace('{{id}}', cur.id) : cur.id;\r\n\t\t\t\tcur.rRestore = new RegExp(cur.id, 'g');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tprecompileTokens();\r\n\r\n\r\n\tfunction captureVals(regex, pattern) {\r\n\t\tvar vals = [], match;\r\n\t\t// very important to reset lastIndex since RegExp can have \"g\" flag\r\n\t\t// and multiple runs might affect the result, specially if matching\r\n\t\t// same string multiple times on IE 7-8\r\n\t\tregex.lastIndex = 0;\r\n\t\twhile (match = regex.exec(pattern)) {\r\n\t\t\tvals.push(match[1]);\r\n\t\t}\r\n\t\treturn vals;\r\n\t}\r\n\r\n\tfunction getParamIds(pattern) {\r\n\t\treturn captureVals(PARAMS_REGEXP, pattern);\r\n\t}\r\n\r\n\tfunction getOptionalParamsIds(pattern) {\r\n\t\treturn captureVals(TOKENS.OP.rgx, pattern);\r\n\t}\r\n\r\n\tfunction compilePattern(pattern, ignoreCase) {\r\n\t\tpattern = pattern || '';\r\n\r\n\t\tif (pattern) {\r\n\t\t\tif (_slashMode === LOOSE_SLASH) {\r\n\t\t\t\tpattern = pattern.replace(LOOSE_SLASHES_REGEXP, '');\r\n\t\t\t}\r\n\t\t\telse if (_slashMode === LEGACY_SLASH) {\r\n\t\t\t\tpattern = pattern.replace(LEGACY_SLASHES_REGEXP, '');\r\n\t\t\t}\r\n\r\n\t\t\t//save tokens\r\n\t\t\tpattern = replaceTokens(pattern, 'rgx', 'save');\r\n\t\t\t//regexp escape\r\n\t\t\tpattern = pattern.replace(ESCAPE_CHARS_REGEXP, '\\\\$&');\r\n\t\t\t//restore tokens\r\n\t\t\tpattern = replaceTokens(pattern, 'rRestore', 'res');\r\n\r\n\t\t\tif (_slashMode === LOOSE_SLASH) {\r\n\t\t\t\tpattern = '\\\\/?' + pattern;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (_slashMode !== STRICT_SLASH) {\r\n\t\t\t//single slash is treated as empty and end slash is optional\r\n\t\t\tpattern += '\\\\/?';\r\n\t\t}\r\n\t\treturn new RegExp('^' + pattern + '$', ignoreCase ? 'i' : '');\r\n\t}\r\n\r\n\tfunction replaceTokens(pattern, regexpName, replaceName) {\r\n\t\tvar cur, key;\r\n\t\tfor (key in TOKENS) {\r\n\t\t\tif (TOKENS.hasOwnProperty(key)) {\r\n\t\t\t\tcur = TOKENS[key];\r\n\t\t\t\tpattern = pattern.replace(cur[regexpName], cur[replaceName]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn pattern;\r\n\t}\r\n\r\n\tfunction getParamValues(request, regexp, shouldTypecast) {\r\n\t\tvar vals = regexp.exec(request);\r\n\t\tif (vals) {\r\n\t\t\tvals.shift();\r\n\t\t\tif (shouldTypecast) {\r\n\t\t\t\tvals = typecastArrayValues(vals);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn vals;\r\n\t}\r\n\r\n\tfunction interpolate(pattern, replacements) {\r\n\t\t// default to an empty object because pattern might have just\r\n\t\t// optional arguments\r\n\t\treplacements = replacements || {};\r\n\t\tif (typeof pattern !== 'string') {\r\n\t\t\tthrow new Error('Route pattern should be a string.');\r\n\t\t}\r\n\t\t\r\n\t\tvar replaceFn = function (match, prop) {\r\n\t\t\tvar val;\r\n\t\t\tprop = (prop.substr(0, 1) === '?') ? prop.substr(1) : prop;\r\n\t\t\tif (replacements[prop] != null) {\r\n\t\t\t\tif (typeof replacements[prop] === 'object') {\r\n\t\t\t\t\tvar queryParts = [], rep;\r\n\t\t\t\t\tfor (var key in replacements[prop]) {\r\n\t\t\t\t\t\trep = replacements[prop][key];\r\n\t\t\t\t\t\tif (isArray(rep)) {\r\n\t\t\t\t\t\t\tfor (var k in rep) {\r\n\t\t\t\t\t\t\t\tif (key.slice(-2) == '[]') {\r\n\t\t\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key.slice(0, -2)) + '[]=' + encodeURIComponent(rep[k]));\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key + '=' + rep[k]));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tqueryParts.push(encodeURIComponent(key + '=' + rep));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tval = '?' + queryParts.join('&');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// make sure value is a string see #gh-54\r\n\t\t\t\t\tval = String(replacements[prop]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (match.indexOf('*') === -1 && val.indexOf('/') !== -1) {\r\n\t\t\t\t\tthrow new Error('Invalid value \"' + val + '\" for segment \"' + match + '\".');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (match.indexOf('{') !== -1) {\r\n\t\t\t\tthrow new Error('The segment ' + match + ' is required.');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tval = '';\r\n\t\t\t}\r\n\t\t\treturn val;\r\n\t\t};\r\n\r\n\t\tif (!TOKENS.OS.trail) {\r\n\t\t\tTOKENS.OS.trail = new RegExp('(?:' + TOKENS.OS.id + ')+$');\r\n\t\t}\r\n\r\n\t\treturn pattern\r\n\t\t\t.replace(TOKENS.OS.rgx, TOKENS.OS.save)\r\n\t\t\t.replace(PARAMS_REGEXP, replaceFn)\r\n\t\t\t.replace(TOKENS.OS.trail, '') // remove trailing\r\n\t\t\t.replace(TOKENS.OS.rRestore, '/'); // add slash between segments\r\n\t}\r\n\r\n\t//API\r\n\treturn {\r\n\t\tstrict: function () {\r\n\t\t\t_slashMode = STRICT_SLASH;\r\n\t\t},\r\n\t\tloose: function () {\r\n\t\t\t_slashMode = LOOSE_SLASH;\r\n\t\t},\r\n\t\tlegacy: function () {\r\n\t\t\t_slashMode = LEGACY_SLASH;\r\n\t\t},\r\n\t\tgetParamIds: getParamIds,\r\n\t\tgetOptionalParamsIds: getOptionalParamsIds,\r\n\t\tgetParamValues: getParamValues,\r\n\t\tcompilePattern: compilePattern,\r\n\t\tinterpolate: interpolate\r\n\t};\r\n\r\n}","import router from '@trullock/router';\n\nvar pageCache = {},\n\tpageTemplateCache = {},\n\tstack = [],\n\tstackPointer = -1;\n\nvar manuallyAdjustingHistory = false;\nvar handlingBeforeHide = false;\nvar beforeHideNavDirection = null;\n\nvar goal = null;\nvar backData = {};\nvar options = {\n\tpageInterrupt: routeResult => null,\n\tattachMarkup: $html => document.body.appendChild($html),\n\tprepareMarkup: $html => { },\n\tloadingPageName: 'loading',\n\terror404PageName: 'error-404',\n\tdefaultPageName: 'root',\n\tbeforeHide: null\n}\n\nexport function registerPage(opts) {\n\n\tlet loadPageClass = opts.pageClass ? (() => opts.pageClass) : opts.loadPageClass;\n\tlet namedRoutes = opts.namedRoutes || { [opts.name]: opts.route };\n\tlet cacheMarkupBy = opts.cacheMarkupBy || 'path'\n\tlet extra = opts.extra || {}\n\n\tfor (const [name, route] of Object.entries(namedRoutes)) {\n\t\trouter.addRoute(name, route, {\n\t\t\troute,\n\t\t\tloadPageClass,\n\t\t\tloadMarkup: opts.loadMarkup,\n\t\t\tcacheMarkupBy,\n\t\t\textra\n\t\t});\n\t}\n}\n\nexport function getPath(name, values) {\n\tlet url = router.interpolate(name, values);\n\tif (values?.hash)\n\t\turl += '#' + values.hash;\n\treturn url;\n}\n\nexport function refresh() {\n\tlet frame = stack[stackPointer];\n\tshowPage(frame.data.route.url, frame.data, 'replace');\n}\n\nfunction emitUrlChanged(url)\n{\n\twindow.dispatchEvent(new CustomEvent('page-manager.url-changed', { \n\t\tdetail: {\n\t\t\turl: url\n\t\t},\n\t\tbubbles: true\n\t}))\n}\n\n// TODO: 404 and error too?\nfunction initLoading()\n{\n\tvar url = router.interpolate(options.loadingPageName, {});\n\tvar routeResult = router.parse(url);\n\treturn loadPage(routeResult, {});\n}\n\nfunction showLoading() {\n\tvar url = router.interpolate(options.loadingPageName, {});\n\tvar route = router.parse(url);\n\tvar data = {\n\t\troute: route,\n\t\tscrollY: window.scrollY,\n\t\tevent: {\n\t\t\taction: 'replace'\n\t\t}\n\t};\n\n\tvar page = (pageCache[route.path] || pageCache[route.pattern]).page;\n\treturn Promise.resolve(page.show(data));\n}\n\nfunction hideLoading() {\n\tvar url = router.interpolate(options.loadingPageName, {});\n\tvar route = router.parse(url);\n\tvar page = (pageCache[route.path] || pageCache[route.pattern]).page;\n\treturn Promise.resolve(page.hide());\n}\n\nasync function loadPage(routeResult, data)\n{\n\tif(!pageTemplateCache[routeResult.pattern])\n\t\tpageTemplateCache[routeResult.pattern] = await routeResult.data.loadMarkup(routeResult);\n\tlet $template = pageTemplateCache[routeResult.pattern]\n\n\tvar $html = $template.cloneNode(true);\n\toptions.prepareMarkup($html);\n\toptions.attachMarkup($html);\n\t\n\trouteResult.data.pageClass = await Promise.resolve(routeResult.data.loadPageClass());\n\tlet page = new (routeResult.data.pageClass)($html);\n\t\n\tawait Promise.resolve(page.boot(data));\n\t\n\tlet cacheKey = routeResult.data.cacheMarkupBy == 'path' ? routeResult.path : routeResult.pattern;\n\tpageCache[cacheKey] = {\n\t\t$html,\n\t\tpage\n\t};\n\t\n\treturn page;\n}\n\nasync function showPage(url, data, event)\n{\n\tvar routeResult = router.parse(url);\n\tif (routeResult == null) {\n\t\tconsole.error(`Can't find page: '${url}'`);\n\t\t\n\t\tlet url = router.interpolate(options.error404PageName, {});\n\t\trouteResult = router.parse(url)\n\t}\n\n\tdata = data || {};\n\tfor (let key in routeResult.params)\n\t\tdata[key] = routeResult.params[key];\n\n\tdata.route = {\n\t\turl: url,\n\t\tpath: routeResult.path,\n\t\tname: routeResult.name,\n\t\tparams: routeResult.params\n\t};\n\tdata.event = event;\n\n\tlet interrupt = await Promise.resolve(options.pageInterrupt(routeResult));\n\tif(interrupt)\n\t{\n\t\tgoal = { url, data };\n\t\treturn showPage(interrupt.url, null, event);\n\t}\n\t\n\tawait showLoading();\n\n\tvar getPage = null\n\tif (pageCache[routeResult.path])\n\t\tgetPage = pageCache[routeResult.path].page;\n\telse if (pageCache[routeResult.pattern])\n\t\tgetPage = pageCache[routeResult.pattern].page;\n\telse\n\t\tgetPage = loadPage(routeResult, data)\n\n\t// handle initial page\n\tif (event.action == 'load')\n\t{\n\t\tconst page = await getPage;\n\t\tawait doShow(page, data);\n\t\tawait hideLoading();\n\n\t\t// clean initial load\n\t\tif (stackPointer == -1) {\n\t\t\tstack.push({ uid: 0, data, page });\n\t\t\tstackPointer = 0;\n\t\t}\n\n\t\t// page refresh\n\t\telse {\n\t\t\tstack[stackPointer].page = page;\n\t\t\tstack[stackPointer].data = data;\n\t\t}\n\t\treturn page;\n\t}\n\n\tlet currentState = stack[stackPointer];\n\n\tif (currentState.data.route.path == routeResult.path) {\n\t\thandleHistoryAction(event, url, data, currentState.page);\n\t\tconst page = await getPage;\n\t\tawait doUpdate(page, data);\n\t\tawait hideLoading();\n\t\treturn page;\n\t}\n\n\tcurrentState.data.scrollY = window.scrollY;\n\n\tconst results = await Promise.all([\n\t\tcurrentState.page.hide(event),\n\t\tgetPage\n\t]);\n\tconst page = results[1];\n\thandleHistoryAction(event, url, data, page);\n\tawait doShow(page, data);\n\t\t\t// .catch(e => {\n\t\t\t// \t// TODO: what case is this?\n\t\t\t// \tmanuallyAdjustingHistory = () => manuallyAdjustingHistory = false;\n\t\t\t// \tif (event.action == 'back')\n\t\t\t// \t\thistory.go(1);\n\t\t\t// \telse if (event.action == 'fwd')\n\t\t\t// \t\thistory.go(-1);\n\t\t\t// });\n\tawait hideLoading();\n\treturn page\n}\n\nasync function doShow(page, data) {\n\n\twindow.scroll(0, 0);\n\n\tawait Promise.resolve(page.show(data));\n\tdocument.title = page.title;\n}\n\nasync function doUpdate(page, data) {\n\n\tawait Promise.resolve(page.update(data));\n\tdocument.title = page.title\n}\n\nasync function handleHistoryAction(event, url, data, page) {\n\tif (event.action == 'push') {\n\t\tlet newUid = stack[stackPointer].uid + 1;\n\n\t\twindow.history.pushState({ uid: newUid }, null, url);\n\t\temitUrlChanged(url);\n\n\t\t// remove future\n\t\tstack.splice(stackPointer + 1, stack.length - stackPointer);\n\n\t\tstack.push({ uid: newUid, data, page });\n\t\tstackPointer++;\n\t}\n\telse if (event.action == 'replace') \n\t{\n\t\tlet currentUid = stack[stackPointer].uid;\n\t\twindow.history.replaceState({ uid: currentUid }, null, url);\n\t\temitUrlChanged(url);\n\t\tstack[stackPointer] = { uid: currentUid, data, page };\n\t\t\n\t\tif(stack[stackPointer].data.route.url == stack[stackPointer - 1]?.data?.route?.url)\n\t\t{\n\t\t\tlet statesToKeep = [];\n\t\t\tfor (var i = 0; i < stackPointer - 1; i++)\n\t\t\t\tstatesToKeep.push(stack[i]);\n\t\t\tstatesToKeep.push(stack[stackPointer]);\n\n\t\t\tawait modifyHistory(statesToKeep);\n\t\t}\n\t}\n\telse if(event.action == 'back')\n\t{\n\t\tstackPointer -= event.distance;\n\t}\n\telse if (event.action == 'fwd')\n\t{\n\t\tstackPointer += event.distance;\n\t}\t\n}\n\nfunction doNavigate(url, data) {\n\n\tif (url === 'goal') {\n\t\turl = goal ? goal.url : data?.fallback || getPath(options.defaultPageName);\n\t\tdata = goal?.data || {}\n\t\tgoal = null;\n\t}\n\n\treturn showPage(url, data, { action: 'push', distance: 0 });\n}\n\nfunction storageAvailable() {\n try {\n var x = '__storage_test__';\n window.sessionStorage.setItem(x, x);\n window.sessionStorage.removeItem(x);\n return true;\n }\n catch(e) {\n return false;\n }\n}\n\nexport async function init(opts) {\n\n\tObject.assign(options, opts);\n\n\tif(storageAvailable())\n\t{\n\t\tlet storedStack = window.sessionStorage.getItem(\"stack\");\n\t\tif(storedStack)\n\t\t{\n\t\t\tstoredStack = JSON.parse(storedStack);\n\t\t\tstack = storedStack.stack;\n\t\t\tstackPointer = storedStack.stackPointer;\n\t\t\twindow.sessionStorage.removeItem(\"stack\");\n\t\t}\n\t}\n\n\tawait initLoading();\n\tawait showLoading();\n}\n\nexport async function ready()\n{\n\t// set initial page\n\temitUrlChanged(window.location.pathname + window.location.search + window.location.hash);\n\tshowPage(window.location.pathname + window.location.search + window.location.hash, null, { action: 'load', distance: 0 }).catch(e => {\n\t\tconsole.error(e);\n\t\t\n\t\tif (e instanceof PageShowError)\n\t\t{\n\t\t\treturn showPage(e.url, e.data, { action: 'load', distance: 0 }).then(async page => {\n\t\t\t\tif(e.action == 'replace')\n\t\t\t\t\tawait handleHistoryAction({ action: e.action }, e.url, e.data, page);\n\t\t\t\treturn page;\n\t\t\t});\n\t\t}\n\t});\n\n\tasync function handlePopstate(context, direction, distance) {\n\n\t\tif (manuallyAdjustingHistory) {\n\t\t\tawait manuallyAdjustingHistory(context, { action: direction, distance });\n\t\t\treturn;\n\t\t}\n\n\t\tif (direction == 'back')\n\t\t\tObject.assign(context.data, backData);\n\t\tbackData = {};\n\n\t\temitUrlChanged(context.data.route.url);\n\n\t\tshowPage(context.data.route.url, context.data, { action: direction, distance }).catch(e => {\n\t\t\tconsole.error(e);\n\t\t\tif (e instanceof PageShowError)\n\t\t\t\treturn showPage(e.url, e.data, { action: e.action || 'show' });\n\t\t}).then(page => {\n\t\t\t// set page as it can be missing in the case of refreshes\n\t\t\tcontext.page = page;\n\t\t})\n\t}\n\n\tfunction handleBeforeHidePart1(lastNavDirection) {\n\t\t// if we're ignoring beforeHide this navigation\n\t\tif (handlingBeforeHide === 'ignore') {\n\t\t\thandlingBeforeHide = false;\n\t\t\treturn false;\n\t\t}\n\n\t\t// if we have a before-unload confirm to show\n\t\tif (stack[stackPointer].page.beforeHide && options.beforeHide && handlingBeforeHide === false) {\n\t\t\tbeforeHideNavDirection = lastNavDirection;\n\n\t\t\tvar interrupt = stack[stackPointer].page.beforeHide();\n\t\t\tif (interrupt) {\n\t\t\t\thandlingBeforeHide = 'step1';\n\n\t\t\t\t// do this in a new thread, you cant call history actions from inside a history-aciton-handler\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\t// undo the navigation so the URL remains correct whilst we show the confirm dialog\n\t\t\t\t\tif (beforeHideNavDirection == 'fwd')\n\t\t\t\t\t\thistory.back();\n\t\t\t\t\telse if (beforeHideNavDirection == 'back')\n\t\t\t\t\t\thistory.forward();\n\t\t\t\t}, 1);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// we've finished beforeHiding\n\t\tif (handlingBeforeHide === 'step2')\n\t\t{\n\t\t\thandlingBeforeHide = false;\n\t\t\tbeforeHideNavDirection = null;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfunction handleBeforeHidePart2() {\n\t\tif (handlingBeforeHide !== 'step1')\n\t\t\treturn false;\n\n\t\tif(manuallyAdjustingHistory)\n\t\t\treturn false;\n\n\t\t// do the beforeHide action, then...\n\t\toptions.beforeHide(stack[stackPointer].page.beforeHide()).then(result => {\n\n\t\t\t// if the user confirmed, redo the original action\n\t\t\tif (result)\n\t\t\t{\n\t\t\t\thandlingBeforeHide = 'step2';\n\n\t\t\t\tif (beforeHideNavDirection == 'fwd')\n\t\t\t\t\thistory.forward();\n\t\t\t\telse if (beforeHideNavDirection == 'back')\n\t\t\t\t\thistory.back();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\thandlingBeforeHide = false;\n\t\t\t\tbeforeHideNavDirection = null;\n\t\t\t}\n\t\t});\n\n\t\treturn true;\n\t}\n\n\t// listen for browser navigations\n\twindow.addEventListener(\"popstate\", async e => {\n\t\tlet newUid = e.state?.uid || 0;\n\t\tlet previousUid = stack[stackPointer].uid;\n\t\tlet lastNavigationDirection = newUid > previousUid ? 'fwd' : 'back';\n\t\tlet distance = Math.abs(newUid - previousUid);\n\n\t\tvar interrupted = handleBeforeHidePart2();\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tvar interrupted = handleBeforeHidePart1(lastNavigationDirection);\n\t\tif (interrupted)\n\t\t\treturn;\n\n\t\tvar context = findContext(newUid);\n\t\tawait handlePopstate(context, lastNavigationDirection, distance);\n\t});\n\n\tif(storageAvailable())\n\t{\n\t\twindow.addEventListener(\"beforeunload\", () => {\n\n\t\t\tlet stackToSerialize = stack.map(s => ({\n\t\t\t\tuid: s.uid,\n\t\t\t\tdata: s.data\n\t\t\t}));\n\t\t\tlet stackToStore = {\n\t\t\t\tstack: stackToSerialize,\n\t\t\t\tstackPointer\n\t\t\t}\n\t\t\twindow.sessionStorage.setItem('stack', JSON.stringify(stackToStore));\n\t\t});\n\t}\n}\n\nfunction findContext(uid){\n\tfor (var i = 0; i < stack.length; i++) {\n\t\tif (stack[i].uid == uid)\n\t\t\treturn stack[i];\n\t}\n\treturn null;\n}\n\nfunction expandOnlyHash(url)\n{\n\tif(url.startsWith('#'))\n\t{\n\t\tlet currentState = stack[stackPointer];\n\t\tlet currentUrl = currentState.data.route.url;\n\t\tlet hashIndex = currentUrl.indexOf('#');\n\t\tif(hashIndex > -1)\n\t\t\treturn currentUrl.substr(0, hashIndex);\n\t\treturn currentUrl + url;\n\t}\n\n\treturn url;\n}\n\nexport function navigate(url, data, checkBeforeHide = true) {\n\n\turl = expandOnlyHash(url);\n\n\tif (checkBeforeHide === true && options.beforeHide && stack[stackPointer].page.beforeHide) {\n\n\t\tvar interrupt = stack[stackPointer].page.beforeHide();\n\t\tif (interrupt) {\n\t\t\toptions.beforeHide(interrupt).then(result => {\n\t\t\t\tif (result)\n\t\t\t\t\tdoNavigate(url, data);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t}\n\n\tdoNavigate(url, data).catch(e => {\n\t\tconsole.error(e);\n\t\tif (e instanceof PageShowError)\n\t\t\treturn showPage(e.url, e.data, { action: e.action || 'show' });\n\t});\n}\n\nexport function replace(url, data) {\n\turl = expandOnlyHash(url);\n\treturn showPage(url, data, { action: 'replace', distance: 0 });\n}\n\nexport function show(url, data) {\n\treturn showPage(url, data, { action: 'show', distance: 0 });\n}\n\nexport function back(data, checkBeforeHide) {\n\tbackData = data || {};\n\thandlingBeforeHide = checkBeforeHide === false ? 'ignore' : false;\n\thistory.go(-1);\n}\n\nexport function printStack() {\n\tconsole.log(\"Stack length: \" + stack.length);\n\tconsole.log(\"Stack pointer: \" + stackPointer);\n\tfor(var i = 0; i < stack.length; i++)\n\t\tconsole.log(stack[i]);\n}\n\nfunction modifyHistory(statesToKeep)\n{\n\t// BUG: You can't remove the 2nd stack frame. This is because you'd have to go back to -1, to then go forward to 0 (removing frame 1)\n\t// For clarity, you can remove (replace) frame 0 (1st), and frame 2+ (3rd+)\n\t// As a workaround, we replace the 2nd stack frame, if it is the tail, with the root \"/\". \n\t// This at least hopefully removes any meaning from it, simply taking you \"home\" rather than to wherever you were likely trying to remove.\n\n\tif (statesToKeep.length == stack.length)\n\t\treturn Promise.resolve();\n\n\treturn new Promise(async (resolve, reject) => {\n\n\t\tlet backsToDo = stackPointer;\n\t\tlet currentUid = -1;\n\n\t\t// TODO: handle stack pointer not being at the tail when this process starts\n\t\t\n\t\t// see BUG comments at the top of this method\n\t\tlet apply2ndFrameHack = statesToKeep.length == 1 && stack.length > 1\n\t\tlet defaultPageRouteResult = null;\n\t\tlet defaultPage = null;\n\t\tif(apply2ndFrameHack)\n\t\t{\n\t\t\tlet url = getPath(options.defaultPageName);\n\t\t\tdefaultPageRouteResult = router.parse(url);\n\t\t\tdefaultPage = await loadPage(defaultPageRouteResult, {});\n\t\t}\n\n\t\tmanuallyAdjustingHistory = async _ => {\n\t\t\t// rewind to the first history position\n\t\t\tif(backsToDo > 0)\n\t\t\t{\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\t// see BUG comments at the top of this method\n\t\t\t\t\tif(apply2ndFrameHack && backsToDo == 1)\n\t\t\t\t\t{\n\t\t\t\t\t\twindow.history.replaceState({ uid: stack[1].uid }, defaultPage.title, defaultPageRouteResult.path);\n\t\t\t\t\t\tdocument.title = defaultPage.title;\n\t\t\t\t\t}\n\n\t\t\t\t\tbacksToDo--;\n\t\t\t\t\thistory.back();\n\t\t\t\t}, 1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// reset the stack\n\t\t\t\n\t\t\tstack = [];\n\n\t\t\tfor (var k = 0; k < statesToKeep.length; k++) {\n\t\t\t\tlet currentState = statesToKeep[k];\n\t\t\t\tcurrentState.uid = ++currentUid;\n\n\t\t\t\tif (k == 0)\n\t\t\t\t\twindow.history.replaceState({ uid: currentState.uid }, currentState.page.title, currentState.data.route.url);\n\t\t\t\telse\n\t\t\t\t\twindow.history.pushState({ uid: currentState.uid }, currentState.page.title, currentState.data.route.url);\n\t\t\t\t\n\t\t\t\temitUrlChanged(currentState.data.route.url)\n\n\t\t\t\t// TODO: this doesnt seem to work when k=0\n\t\t\t\tdocument.title = currentState.page.title;\n\n\t\t\t\tstack.push(currentState);\n\t\t\t}\n\n\t\t\t// see BUG comments at the top of this method\n\t\t\tif(apply2ndFrameHack)\n\t\t\t{\n\t\t\t\tstack.push({\n\t\t\t\t\tuid: 1,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\troute: {\n\t\t\t\t\t\t\turl: defaultPageRouteResult.path,\n\t\t\t\t\t\t\tpath: defaultPageRouteResult.path,\n\t\t\t\t\t\t\tname: defaultPageRouteResult.name,\n\t\t\t\t\t\t\tparams: defaultPageRouteResult.params\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tpage: defaultPage\n\t\t\t\t})\n\n\t\t\t\tstackPointer = 0;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tstackPointer = stack.length - 1;\n\t\t\t}\n\t\t\t\n\t\t\tmanuallyAdjustingHistory = false;\n\n\t\t\tresolve();\n\t\t};\n\n\t\thistory.back();\n\t});\n}\n\n\nexport function removeHistory(predicate)\n{\n\tlet statesToKeep = [];\n\tfor (var i = 0; i < stack.length; i++)\n\t{\n\t\tif (!predicate(stack[i], i))\n\t\t\tstatesToKeep.push(stack[i]);\n\t}\n\n\treturn modifyHistory(statesToKeep);\n}\n\nexport function purgeCache() {\n\tfor (const key in pageCache)\n\t{\n\t\tpageCache[key].page.destroy && pageCache[key].page.destroy();\n\t\tif (!pageCache[key].page.constructor.existingDomSelector)\n\t\t{\n\t\t\tpageCache[key].$html.remove();\n\t\t\tdelete pageCache[key];\n\t\t}\n\t}\n}\n\nexport class PageShowError extends Error {\n\tconstructor(url, message, data, action) {\n\t\tsuper(message || 'Error showing requested page')\n\n\t\t// Maintains proper stack trace for where our error was thrown (only available on V8)\n\t\tif (Error.captureStackTrace)\n\t\t\tError.captureStackTrace(this, PageShowError)\n\n\t\tthis.name = 'PageShowError'\n\t\tthis.url = url;\n\t\tthis.data = data;\n\t\tthis.action = action;\n\t}\n}","export async function loadMarkup (routeResult) {\n\tlet url = '/pages/' + routeResult.name + '.htm';\n\tlet response = await fetch(url)\n\tlet text = await response.text();\n\n const parser = new DOMParser()\n const doc = parser.parseFromString(text, \"text/html\")\n\tconst elem = doc.querySelector('body').firstElementChild;\n\t\n\treturn elem;\n}","import './loading.htm'\r\nimport { loadMarkup } from './helpers.js';\r\nimport Page from './page.js';\r\nimport {registerPage} from '@trullock/page-manager';\r\n\r\nexport default registerPage({\r\n\tname: 'loading', \r\n\troute: '/loading', \r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\tstatic existingDomSelector = '#page-loading';\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\t}\r\n});","import './page1.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, refresh} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'page1', \r\n\troute: '/page1',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 1\";\r\n\r\n\t\ttype = 'A';\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\r\n\t\t\t$page.querySelector('button').addEventListener('click', e => {\r\n\t\t\t\trefresh();\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tupdate(data) {\r\n\t\t\tthis.$page.querySelector('.js-time').textContent = new Date().getTime();\r\n\t\t}\r\n\t}\r\n});","import './page2.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, replace} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'page2', \r\n\troute: '/page2', \r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 2\";\r\n\r\n\t\ttype = 'A';\r\n\t\t\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\r\n\t\t\t$page.querySelector('button').addEventListener('click', e => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treplace('/page3')\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n});","import './page3.htm'\r\nimport Page from './page.js';\r\nimport * as pageManager from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default pageManager.registerPage({\r\n\tname: 'page3', \r\n\troute: '/page3', \r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 3\";\r\n\t\t\r\n\t\tbeforeHide = () => 'Are you sure?'\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\r\n\t\t\t$page.querySelector('.btnRemove').addEventListener('click', e => {\r\n\t\t\t\tpageManager.removeHistory(state => {\r\n\t\t\t\t\treturn state.page.type == 'A';\r\n\t\t\t\t})\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n});","import './page4.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'page4', \r\n\troute: '/page4',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 4\";\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\r\n\t\tshow(opts)\r\n\t\t{\r\n\t\t\tthrow new PageShowError('/page1', 'Cant show page4, showing page1 instead', {}, 'replace')\r\n\t\t}\r\n\t}\r\n});","import './page404.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'page404', \r\n\troute: '/404',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page 404\";\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\t}\r\n});","import './pageX.htm'\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'pageX', \r\n\troute: '/page/{x}',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\r\n\t\ttitle = \"Page X\";\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\r\n\t\tshow(opts)\r\n\t\t{\r\n\t\t\tthis.$page.querySelector('#PageX').textContent = \"Page: \" + opts.x;\r\n\t\t\treturn super.show(opts);\r\n\t\t}\r\n\t}\r\n});","import './page404.htm' // doesnt matter\r\nimport Page from './page.js';\r\nimport {registerPage, PageShowError} from '@trullock/page-manager';\r\nimport { loadMarkup } from './helpers.js';\r\n\r\nexport default registerPage({\r\n\tname: 'pageShowFail', \r\n\troute: '/show-fail',\r\n\tloadMarkup,\r\n\tpageClass: class extends Page {\r\n\t\ttitle = \"Page 4\";\r\n\r\n\t\tconstructor($page) {\r\n\t\t\tsuper($page);\r\n\t\t}\r\n\r\n\t\tshow(opts)\r\n\t\t{\r\n\t\t\tthrow new PageShowError('/page1', 'Cant show pageShowFail, showing page1 instead', {}, 'replace')\r\n\t\t}\r\n\t}\r\n});","export const cacheMarkupBy = 'route'\r\n\r\nexport default class Page {\r\n\t\r\n\tconstructor($page){\r\n\t\tthis.$page = $page;\r\n\t}\r\n\r\n\tget title() {\r\n\t\treturn this.$page.dataset['title'] || 'PageManager'\r\n\t}\r\n\r\n\tboot(opts){\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\tshow(opts) {\r\n\t\tthis.$page.style.display = 'block';\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\tupdate() {\r\n\t\treturn Promise.resolve();\r\n\t }\r\n\r\n\thide() {\r\n\t\tthis.$page.style.display = 'none';\r\n\t\treturn Promise.resolve();\r\n\t}\r\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","import * as pageManager from '../src/index.js'\r\n\r\nimport pageLoading from './page-loading.js'\r\nimport page1 from './page-page1.js'\r\nimport page2 from './page-page2.js'\r\nimport page3 from './page-page3.js'\r\nimport page4 from './page-page4.js'\r\nimport pageX from './page-pageX.js'\r\nimport page404 from './page-page404.js'\r\nimport pageShowFail from './page-show-fail.js'\r\n\r\nwindow.addEventListener('DOMContentLoaded', async function () {\r\n\tawait pageManager.init({\r\n\t\terror404PageName: 'page404',\r\n\t\tdefaultPageName: 'page1',\r\n\t\tbeforeHide: message => new Promise(resolve => {\r\n\t\t\tresolve(confirm(message))\r\n\t\t})\r\n\t});\r\n\r\n\r\n\t// listen for navigations\r\n\tdocument.addEventListener('click', e => {\r\n\t\tif (e.ctrlKey || e.metaKey)\r\n\t\t\treturn;\r\n\r\n\t\tvar $a = e.target.matches('a') ? e.target : e.target.closest('a');\r\n\t\tif (!$a)\r\n\t\t\treturn;\r\n\r\n\t\tvar href = $a.pathname + $a.search + $a.hash;\r\n\t\tpageManager.navigate(href)\r\n\t\t\r\n\t\te.preventDefault();\r\n\t}, false);\r\n\r\n\tdocument.querySelector('.btnStack').addEventListener('click', e => {\r\n\t\tpageManager.printStack();\r\n\t})\r\n\r\n\t\r\n\twindow.addEventListener(\"page-manager.url-changed\", e => {\r\n\t\tconsole.log(e.detail.url);\r\n\t});\r\n\r\n\tawait pageManager.ready()\r\n});"],"names":["router","pageCache","pageTemplateCache","stack","stackPointer","manuallyAdjustingHistory","handlingBeforeHide","beforeHideNavDirection","goal","backData","options","pageInterrupt","routeResult","attachMarkup","$html","document","body","appendChild","prepareMarkup","loadingPageName","error404PageName","defaultPageName","beforeHide","registerPage","opts","loadPageClass","pageClass","namedRoutes","name","route","cacheMarkupBy","extra","Object","entries","addRoute","loadMarkup","getPath","values","url","interpolate","hash","refresh","frame","showPage","data","emitUrlChanged","window","dispatchEvent","CustomEvent","detail","bubbles","initLoading","parse","loadPage","showLoading","scrollY","event","action","page","path","pattern","Promise","resolve","show","hideLoading","hide","$template","cloneNode","boot","cacheKey","console","error","key","params","interrupt","getPage","doShow","push","uid","currentState","handleHistoryAction","doUpdate","results","all","scroll","title","update","newUid","history","pushState","splice","length","currentUid","replaceState","statesToKeep","i","modifyHistory","distance","doNavigate","fallback","storageAvailable","x","sessionStorage","setItem","removeItem","e","init","assign","storedStack","getItem","JSON","ready","location","pathname","search","catch","PageShowError","then","handlePopstate","context","direction","handleBeforeHidePart1","lastNavDirection","setTimeout","back","forward","handleBeforeHidePart2","result","addEventListener","state","previousUid","lastNavigationDirection","Math","abs","interrupted","findContext","stackToSerialize","map","s","stackToStore","stringify","expandOnlyHash","startsWith","currentUrl","hashIndex","indexOf","substr","navigate","checkBeforeHide","replace","go","printStack","log","reject","backsToDo","apply2ndFrameHack","defaultPageRouteResult","defaultPage","_","k","removeHistory","predicate","purgeCache","destroy","constructor","existingDomSelector","remove","Error","message","captureStackTrace","response","fetch","text","parser","DOMParser","doc","parseFromString","elem","querySelector","firstElementChild","Page","_class","$page","_defineProperty","textContent","Date","getTime","preventDefault","pageManager","type","dataset","style","display","pageLoading","page1","page2","page3","page4","pageX","page404","pageShowFail","confirm","ctrlKey","metaKey","$a","target","matches","closest","href"],"sourceRoot":""}
|
package/tests/helpers.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export async function loadMarkup (routeResult) {
|
|
2
|
+
let url = '/pages/' + routeResult.name + '.htm';
|
|
3
|
+
let response = await fetch(url)
|
|
4
|
+
let text = await response.text();
|
|
5
|
+
|
|
6
|
+
const parser = new DOMParser()
|
|
7
|
+
const doc = parser.parseFromString(text, "text/html")
|
|
8
|
+
const elem = doc.querySelector('body').firstElementChild;
|
|
9
|
+
|
|
10
|
+
return elem;
|
|
11
|
+
}
|
package/tests/index.html
CHANGED
package/tests/lolpack.js
CHANGED
|
@@ -9,11 +9,10 @@ import pageX from './page-pageX.js'
|
|
|
9
9
|
import page404 from './page-page404.js'
|
|
10
10
|
import pageShowFail from './page-show-fail.js'
|
|
11
11
|
|
|
12
|
-
window.addEventListener('DOMContentLoaded', function () {
|
|
13
|
-
pageManager.init({
|
|
14
|
-
pageContainer: () => document.body,
|
|
15
|
-
fetchPath: route => '/pages/' + route.name + '.htm',
|
|
12
|
+
window.addEventListener('DOMContentLoaded', async function () {
|
|
13
|
+
await pageManager.init({
|
|
16
14
|
error404PageName: 'page404',
|
|
15
|
+
defaultPageName: 'page1',
|
|
17
16
|
beforeHide: message => new Promise(resolve => {
|
|
18
17
|
resolve(confirm(message))
|
|
19
18
|
})
|
|
@@ -43,4 +42,6 @@ window.addEventListener('DOMContentLoaded', function () {
|
|
|
43
42
|
window.addEventListener("page-manager.url-changed", e => {
|
|
44
43
|
console.log(e.detail.url);
|
|
45
44
|
});
|
|
45
|
+
|
|
46
|
+
await pageManager.ready()
|
|
46
47
|
});
|
package/tests/page-loading.js
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
|
+
import './loading.htm'
|
|
2
|
+
import { loadMarkup } from './helpers.js';
|
|
1
3
|
import Page from './page.js';
|
|
2
4
|
import {registerPage} from '@trullock/page-manager';
|
|
3
5
|
|
|
4
|
-
export default registerPage(
|
|
6
|
+
export default registerPage({
|
|
7
|
+
name: 'loading',
|
|
8
|
+
route: '/loading',
|
|
9
|
+
loadMarkup,
|
|
10
|
+
pageClass: class extends Page {
|
|
5
11
|
|
|
6
|
-
|
|
12
|
+
static existingDomSelector = '#page-loading';
|
|
7
13
|
|
|
8
|
-
|
|
9
|
-
|
|
14
|
+
constructor($page) {
|
|
15
|
+
super($page);
|
|
16
|
+
}
|
|
10
17
|
}
|
|
11
18
|
});
|
package/tests/page-page1.js
CHANGED
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
import './page1.htm'
|
|
2
2
|
import Page from './page.js';
|
|
3
3
|
import {registerPage, refresh} from '@trullock/page-manager';
|
|
4
|
+
import { loadMarkup } from './helpers.js';
|
|
4
5
|
|
|
5
|
-
export default registerPage(
|
|
6
|
+
export default registerPage({
|
|
7
|
+
name: 'page1',
|
|
8
|
+
route: '/page1',
|
|
9
|
+
loadMarkup,
|
|
10
|
+
pageClass: class extends Page {
|
|
6
11
|
|
|
7
|
-
|
|
12
|
+
title = "Page 1";
|
|
8
13
|
|
|
9
|
-
|
|
14
|
+
type = 'A';
|
|
10
15
|
|
|
11
|
-
|
|
12
|
-
|
|
16
|
+
constructor($page) {
|
|
17
|
+
super($page);
|
|
13
18
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
$page.querySelector('button').addEventListener('click', e => {
|
|
20
|
+
refresh();
|
|
21
|
+
})
|
|
22
|
+
}
|
|
18
23
|
|
|
19
|
-
|
|
20
|
-
|
|
24
|
+
update(data) {
|
|
25
|
+
this.$page.querySelector('.js-time').textContent = new Date().getTime();
|
|
26
|
+
}
|
|
21
27
|
}
|
|
22
28
|
});
|
package/tests/page-page2.js
CHANGED
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
import './page2.htm'
|
|
2
2
|
import Page from './page.js';
|
|
3
|
-
import {registerPage} from '@trullock/page-manager';
|
|
3
|
+
import {registerPage, replace} from '@trullock/page-manager';
|
|
4
|
+
import { loadMarkup } from './helpers.js';
|
|
4
5
|
|
|
5
|
-
export default registerPage(
|
|
6
|
+
export default registerPage({
|
|
7
|
+
name: 'page2',
|
|
8
|
+
route: '/page2',
|
|
9
|
+
loadMarkup,
|
|
10
|
+
pageClass: class extends Page {
|
|
6
11
|
|
|
7
|
-
|
|
12
|
+
title = "Page 2";
|
|
8
13
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
14
|
+
type = 'A';
|
|
15
|
+
|
|
16
|
+
constructor($page) {
|
|
17
|
+
super($page);
|
|
18
|
+
|
|
19
|
+
$page.querySelector('button').addEventListener('click', e => {
|
|
20
|
+
e.preventDefault();
|
|
21
|
+
replace('/page3')
|
|
22
|
+
})
|
|
23
|
+
}
|
|
13
24
|
}
|
|
14
25
|
});
|
package/tests/page-page3.js
CHANGED
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
import './page3.htm'
|
|
2
2
|
import Page from './page.js';
|
|
3
3
|
import * as pageManager from '@trullock/page-manager';
|
|
4
|
+
import { loadMarkup } from './helpers.js';
|
|
4
5
|
|
|
5
|
-
export default pageManager.registerPage(
|
|
6
|
+
export default pageManager.registerPage({
|
|
7
|
+
name: 'page3',
|
|
8
|
+
route: '/page3',
|
|
9
|
+
loadMarkup,
|
|
10
|
+
pageClass: class extends Page {
|
|
6
11
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
12
|
+
title = "Page 3";
|
|
13
|
+
|
|
14
|
+
beforeHide = () => 'Are you sure?'
|
|
10
15
|
|
|
11
|
-
|
|
12
|
-
|
|
16
|
+
constructor($page) {
|
|
17
|
+
super($page);
|
|
13
18
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
19
|
+
$page.querySelector('.btnRemove').addEventListener('click', e => {
|
|
20
|
+
pageManager.removeHistory(state => {
|
|
21
|
+
return state.page.type == 'A';
|
|
22
|
+
})
|
|
17
23
|
})
|
|
18
|
-
}
|
|
24
|
+
}
|
|
19
25
|
}
|
|
20
26
|
});
|
package/tests/page-page4.js
CHANGED
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import './page4.htm'
|
|
2
2
|
import Page from './page.js';
|
|
3
3
|
import {registerPage, PageShowError} from '@trullock/page-manager';
|
|
4
|
+
import { loadMarkup } from './helpers.js';
|
|
4
5
|
|
|
5
|
-
export default registerPage(
|
|
6
|
+
export default registerPage({
|
|
7
|
+
name: 'page4',
|
|
8
|
+
route: '/page4',
|
|
9
|
+
loadMarkup,
|
|
10
|
+
pageClass: class extends Page {
|
|
6
11
|
|
|
7
|
-
|
|
12
|
+
title = "Page 4";
|
|
8
13
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
constructor($page) {
|
|
15
|
+
super($page);
|
|
16
|
+
}
|
|
12
17
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
18
|
+
show(opts)
|
|
19
|
+
{
|
|
20
|
+
throw new PageShowError('/page1', 'Cant show page4, showing page1 instead', {}, 'replace')
|
|
21
|
+
}
|
|
16
22
|
}
|
|
17
23
|
});
|
package/tests/page-page404.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import './page404.htm'
|
|
2
2
|
import Page from './page.js';
|
|
3
3
|
import {registerPage, PageShowError} from '@trullock/page-manager';
|
|
4
|
+
import { loadMarkup } from './helpers.js';
|
|
4
5
|
|
|
5
|
-
export default registerPage(
|
|
6
|
+
export default registerPage({
|
|
7
|
+
name: 'page404',
|
|
8
|
+
route: '/404',
|
|
9
|
+
loadMarkup,
|
|
10
|
+
pageClass: class extends Page {
|
|
6
11
|
|
|
7
|
-
|
|
12
|
+
title = "Page 404";
|
|
8
13
|
|
|
9
|
-
|
|
10
|
-
|
|
14
|
+
constructor($page) {
|
|
15
|
+
super($page);
|
|
16
|
+
}
|
|
11
17
|
}
|
|
12
18
|
});
|
package/tests/page-pageX.js
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
import './pageX.htm'
|
|
2
2
|
import Page from './page.js';
|
|
3
3
|
import {registerPage, PageShowError} from '@trullock/page-manager';
|
|
4
|
+
import { loadMarkup } from './helpers.js';
|
|
4
5
|
|
|
5
|
-
export default registerPage(
|
|
6
|
+
export default registerPage({
|
|
7
|
+
name: 'pageX',
|
|
8
|
+
route: '/page/{x}',
|
|
9
|
+
loadMarkup,
|
|
10
|
+
pageClass: class extends Page {
|
|
6
11
|
|
|
7
|
-
|
|
12
|
+
title = "Page X";
|
|
8
13
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
constructor($page) {
|
|
15
|
+
super($page);
|
|
16
|
+
}
|
|
12
17
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
show(opts)
|
|
19
|
+
{
|
|
20
|
+
this.$page.querySelector('#PageX').textContent = "Page: " + opts.x;
|
|
21
|
+
return super.show(opts);
|
|
22
|
+
}
|
|
17
23
|
}
|
|
18
24
|
});
|
package/tests/page-show-fail.js
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
import './page404.htm' // doesnt matter
|
|
2
2
|
import Page from './page.js';
|
|
3
3
|
import {registerPage, PageShowError} from '@trullock/page-manager';
|
|
4
|
+
import { loadMarkup } from './helpers.js';
|
|
4
5
|
|
|
5
|
-
export default registerPage(
|
|
6
|
+
export default registerPage({
|
|
7
|
+
name: 'pageShowFail',
|
|
8
|
+
route: '/show-fail',
|
|
9
|
+
loadMarkup,
|
|
10
|
+
pageClass: class extends Page {
|
|
11
|
+
title = "Page 4";
|
|
6
12
|
|
|
7
|
-
|
|
13
|
+
constructor($page) {
|
|
14
|
+
super($page);
|
|
15
|
+
}
|
|
8
16
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
show(opts)
|
|
14
|
-
{
|
|
15
|
-
throw new PageShowError('/page1', 'Cant show pageShowFail, showing page1 instead', {}, 'replace')
|
|
17
|
+
show(opts)
|
|
18
|
+
{
|
|
19
|
+
throw new PageShowError('/page1', 'Cant show pageShowFail, showing page1 instead', {}, 'replace')
|
|
20
|
+
}
|
|
16
21
|
}
|
|
17
22
|
});
|
package/tests/page2.htm
CHANGED