silentium-components 0.0.1
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/.husky/pre-commit +1 -0
- package/.vscode/settings.json +4 -0
- package/CHANGELOG.md +165 -0
- package/LICENSE.md +7 -0
- package/README.md +4 -0
- package/beforeRelease.sh +11 -0
- package/commitizen.cjs +50 -0
- package/dist/patron-components.cjs +372 -0
- package/dist/patron-components.cjs.map +1 -0
- package/dist/patron-components.d.ts +158 -0
- package/dist/patron-components.js +358 -0
- package/dist/patron-components.js.map +1 -0
- package/dist/patron-components.min.js +1 -0
- package/dist/patron-components.min.mjs +2 -0
- package/dist/patron-components.min.mjs.map +1 -0
- package/dist/patron-components.mjs +358 -0
- package/dist/patron-components.mjs.map +1 -0
- package/dist/silentium-components.cjs +372 -0
- package/dist/silentium-components.cjs.map +1 -0
- package/dist/silentium-components.d.ts +169 -0
- package/dist/silentium-components.js +358 -0
- package/dist/silentium-components.js.map +1 -0
- package/dist/silentium-components.min.js +1 -0
- package/dist/silentium-components.min.mjs +2 -0
- package/dist/silentium-components.min.mjs.map +1 -0
- package/dist/silentium-components.mjs +358 -0
- package/dist/silentium-components.mjs.map +1 -0
- package/docs/assets/css/base.css +3 -0
- package/docs/assets/img/github_16.jpg +0 -0
- package/docs/assets/js/index.mjs +70 -0
- package/docs/assets/lib/StyleFetched.mjs +16 -0
- package/docs/build.sh +25 -0
- package/docs/buildRoutes.sh +15 -0
- package/docs/favicon.ico +0 -0
- package/docs/index-dev.html +233 -0
- package/docs/index.html +233 -0
- package/docs/pages/404.html +1 -0
- package/docs/pages/index.html +7 -0
- package/docs/pages/navigation/navigation.html +1 -0
- package/docs/pages/navigation/router.html +1 -0
- package/docs/pages/navigation.html +12 -0
- package/docs/routes.json +1 -0
- package/docs/template.html +233 -0
- package/eslint.config.mjs +42 -0
- package/package.json +63 -0
- package/rollup.config.js +52 -0
- package/src/behaviors/Dirty.test.ts +20 -0
- package/src/behaviors/Dirty.ts +62 -0
- package/src/behaviors/Touched.ts +0 -0
- package/src/controls/ComputedElement.ts +51 -0
- package/src/controls/GroupActiveClass.test.ts +26 -0
- package/src/controls/GroupActiveClass.ts +29 -0
- package/src/controls/Input.ts +40 -0
- package/src/controls/Link.ts +53 -0
- package/src/controls/Text.ts +16 -0
- package/src/controls/Visible.ts +16 -0
- package/src/controls/index.ts +6 -0
- package/src/index.ts +3 -0
- package/src/jsdom/JSDomDocument.ts +15 -0
- package/src/jsdom/JSDomElement.ts +28 -0
- package/src/jsdom/JSDomQuerySelector.ts +28 -0
- package/src/navigation/CurrentPage.ts +27 -0
- package/src/navigation/Navigation.default.test.ts +53 -0
- package/src/navigation/Navigation.main.test.ts +46 -0
- package/src/navigation/Navigation.ts +92 -0
- package/src/navigation/Navigation.wildcard.test.ts +52 -0
- package/src/navigation/PageFetchTransport.ts +26 -0
- package/src/navigation/RouteDisplay.ts +18 -0
- package/src/navigation/RoutePageType.ts +3 -0
- package/src/navigation/Router.ts +118 -0
- package/src/navigation/index.ts +7 -0
- package/src/page/EntryPointPage.ts +20 -0
- package/src/page/Page.ts +12 -0
- package/src/page/PageFake.ts +8 -0
- package/src/page/index.ts +2 -0
- package/tsconfig.json +26 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patron-components.cjs","sources":["../src/navigation/PageFetchTransport.ts","../src/navigation/Navigation.ts","../src/navigation/RouteDisplay.ts","../src/navigation/CurrentPage.ts","../src/controls/Input.ts","../src/controls/Visible.ts","../src/controls/Text.ts","../src/controls/Link.ts","../src/controls/ComputedElement.ts","../src/controls/GroupActiveClass.ts","../src/navigation/Router.ts","../src/page/Page.ts","../src/page/EntryPointPage.ts"],"sourcesContent":["import { give, GuestType } from \"patron-oop\";\n\nexport interface RoutePageTransportType {\n content(guest: GuestType<string>): void;\n}\n\n/**\n * Not needed anymore same thing in web api existed\n * @deprecated\n */\nexport class PageFetchTransport implements RoutePageTransportType {\n public constructor(\n private basePath: string,\n private template: string,\n ) {}\n\n public content(guest: GuestType<string>): void {\n fetch(this.basePath + \"/\" + this.template)\n .then((result) => {\n return result.text();\n })\n .then((result) => {\n give(result, guest);\n });\n }\n}\n","import {\n SourceAll,\n Patron,\n PrivateType,\n SourceType,\n value,\n give,\n SourceWithPoolType,\n} from \"patron-oop\";\nimport { RoutePageTransportType } from \"src/navigation/PageFetchTransport\";\nimport { RouteDisplayType } from \"src/navigation/RouteDisplay\";\nimport { RoutePageType } from \"src/navigation/RoutePageType\";\n\nexport interface RouteDocument {\n url: string;\n template: string;\n aliases?: string[];\n page: RoutePageType;\n default?: boolean;\n}\n\nexport class Navigation {\n public constructor(\n private loading: SourceWithPoolType<boolean>,\n private basePath: SourceType<string>,\n private currentPage: SourceWithPoolType<string>,\n private display: RouteDisplayType,\n private pageTransport: PrivateType<RoutePageTransportType>,\n ) {}\n\n public routes(routes: RouteDocument[]) {\n const defaultRoute = routes.find((route) => route.default);\n const all = new SourceAll<{\n basePath: string;\n currentPage: string;\n }>();\n value(this.basePath, new Patron(all.guestKey(\"basePath\")));\n value(this.currentPage, new Patron(all.guestKey(\"currentPage\")));\n\n all.value(\n new Patron(({ basePath, currentPage }) => {\n const urlWithoutBasePath = currentPage.replace(basePath, \"\");\n const routeMatchedToAlias = routes.find(\n (route) =>\n route.aliases &&\n (route.aliases.includes(currentPage) ||\n route.aliases.includes(urlWithoutBasePath)),\n );\n\n if (routeMatchedToAlias) {\n const correctUrl = basePath + routeMatchedToAlias.url;\n\n if (correctUrl !== currentPage) {\n give(correctUrl, this.currentPage);\n return;\n }\n }\n\n let route = routes.find((route) => {\n if (route.url.indexOf(\"*\") >= 0) {\n const regexp = new RegExp(\n route.url.replaceAll(\"*\", \".*\").replaceAll(\"/\", \"/\"),\n );\n return regexp.test(urlWithoutBasePath);\n }\n return route.url.replaceAll(\"*\", \"\") === urlWithoutBasePath;\n });\n\n if (!route && defaultRoute) {\n route = defaultRoute;\n }\n\n if (route) {\n const basePathWithoutHash = basePath\n .replace(\"/#\", \"\")\n .replace(\"#\", \"\")\n .replace(/[^/]+\\.html$/, \"\");\n give(true, this.loading);\n this.pageTransport\n .get(basePathWithoutHash, route.template)\n .content((templateContent) => {\n this.display.display(templateContent);\n route.page.mounted();\n give(false, this.loading);\n });\n } else {\n throw new Error(\"No matching route in Navigation\");\n }\n }),\n );\n }\n}\n","export interface RouteDisplayType {\n display(content: string): void;\n}\n\n/**\n * Renders content on selector\n * @deprecated move to web api\n */\nexport class RouteDisplay implements RouteDisplayType {\n public constructor(private selector: string) {}\n\n public display(content: string): void {\n const contentEl = document.querySelector(this.selector);\n if (contentEl) {\n contentEl.innerHTML = content;\n }\n }\n}\n","import { GuestType, SourceWithPool, SourceWithPoolType } from \"patron-oop\";\n\n/**\n * @deprecated move to web api\n */\nexport class CurrentPage implements SourceWithPoolType<string> {\n private source: SourceWithPoolType<string>;\n\n public constructor() {\n const correctUrl = location.href.replace(location.origin, \"\");\n this.source = new SourceWithPool(correctUrl);\n }\n\n public give(value: string): this {\n this.source.give(value);\n return this;\n }\n\n public value(guest: GuestType<string>) {\n this.source.value(guest);\n return guest;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestType, Patron, SourceWithPoolType } from \"patron-oop\";\n\ntype InputValue = number | string;\n\n/**\n * @deprecated move to web api\n */\nexport class Input implements SourceWithPoolType<InputValue> {\n public constructor(\n private source: SourceWithPoolType<InputValue>,\n selector: string,\n ) {\n const el = document.querySelector(selector) as HTMLInputElement;\n this.source.value(\n new Patron((value) => {\n el.value = String(value);\n }),\n );\n el.addEventListener(\"keyup\", () => {\n this.give(el.value);\n });\n el.addEventListener(\"change\", () => {\n this.give(el.value);\n });\n }\n\n public value(guest: GuestType<InputValue>) {\n this.source.value(guest);\n return this;\n }\n\n public give(value: InputValue) {\n this.source.give(value);\n return this;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestObjectType } from \"patron-oop\";\n\n/**\n * @deprecated move to web api\n */\nexport class Visible implements GuestObjectType<boolean> {\n public constructor(private selector: string) {}\n\n public give(isVisible: boolean): this {\n const el = document.querySelector(this.selector) as HTMLElement;\n if (el) {\n el.style.display = isVisible ? \"block\" : \"none\";\n }\n return this;\n }\n}\n","import { GuestObjectType } from \"patron-oop\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Text implements GuestObjectType {\n public constructor(private selector: string) {}\n\n public give(value: unknown) {\n const element = document.querySelector(this.selector) as HTMLElement;\n if (element) {\n element.innerText = String(value);\n }\n return this;\n }\n}\n","import { GuestObjectType, SourceType, value } from \"patron-oop\";\n\n/**\n * @deprecated move to web api\n */\nexport class Link {\n public constructor(\n private linkSource: GuestObjectType<string>,\n private basePath: SourceType<string>,\n ) {}\n\n public watchClick(selector: string, subselector?: string) {\n const wrapperEl = document.querySelectorAll(selector);\n if (wrapperEl.length) {\n wrapperEl.forEach((theElement) => {\n theElement.addEventListener(\"click\", (e) => {\n if (subselector) {\n theElement\n .querySelectorAll(subselector)\n .forEach((theSubElement) => {\n if (\n e?.target === theSubElement ||\n e?.currentTarget === theSubElement\n ) {\n this.handleClick({\n preventDefault: e.preventDefault.bind(e),\n target: theSubElement,\n } as unknown as Event);\n }\n });\n } else {\n this.handleClick(e);\n }\n });\n });\n } else {\n throw new Error(`Link wrapper not found for selector ${selector}`);\n }\n }\n\n private handleClick(e: Event) {\n let href = (e?.target as HTMLElement)?.getAttribute(\"href\");\n if (!href) {\n href = (e?.currentTarget as HTMLElement)?.getAttribute(\"href\");\n }\n if (href && href.indexOf(\"http\") !== 0) {\n e.preventDefault();\n value(this.basePath, (basePath) => {\n this.linkSource.give(basePath + href);\n });\n }\n }\n}\n","import {\n give,\n SourceAll,\n SourceObjectType,\n GuestCast,\n GuestType,\n} from \"patron-oop\";\n\ntype SourceDetailType = {\n source: SourceObjectType<any>;\n placeholder: string;\n};\n\n/**\n * @deprecated use https://kosukhin.github.io/patron-web-api/#/dom/element\n */\nexport class ComputedElement {\n public constructor(\n private sources: SourceDetailType[],\n private selectorTemplate: string,\n ) {}\n\n public element(guest: GuestType<HTMLElement>) {\n const chain = new SourceAll();\n this.sources.forEach((source) => {\n source.source.value(\n new GuestCast(guest as GuestType, chain.guestKey(source.placeholder)),\n );\n });\n\n chain.value(\n new GuestCast(\n guest as GuestType,\n (placeholders: Record<string, string>) => {\n let selectorTemplate = this.selectorTemplate;\n\n Object.entries(placeholders).map((entry) => {\n selectorTemplate = selectorTemplate.replaceAll(entry[0], entry[1]);\n });\n\n const element = document.querySelector(\n selectorTemplate,\n ) as HTMLElement;\n if (element) {\n give(element, guest);\n }\n },\n ),\n );\n }\n}\n","import { GuestObjectType, PatronOnce, SourceType, value } from \"patron-oop\";\n\n/**\n * Sets activeClass to one element of group\n * and resets activeClass on other group elements\n * suitable for menu active class\n *\n * @deprecated heavily related to web api needs refactoring\n */\nexport class GroupActiveClass implements GuestObjectType<HTMLElement> {\n public constructor(\n private activeClass: string,\n private groupSelector: string,\n private document: SourceType<Document>,\n ) {}\n\n public give(element: HTMLElement): this {\n value(\n this.document,\n new PatronOnce((document) => {\n document.querySelectorAll(this.groupSelector).forEach((el) => {\n el.classList.remove(this.activeClass);\n });\n element.classList.add(this.activeClass);\n }),\n );\n return this;\n }\n}\n","import {\n Source,\n SourceAll,\n GuestCast,\n Patron,\n PrivateClass,\n SourceWithPool,\n give,\n sourceOf,\n} from \"patron-oop\";\nimport { HistoryNewPage, HistoryPoppedPage } from \"patron-web-api\";\nimport { ComputedElement, GroupActiveClass, Link, Visible } from \"../controls\";\nimport { CurrentPage } from \"../navigation/CurrentPage\";\nimport { Navigation } from \"../navigation/Navigation\";\nimport { PageFetchTransport } from \"../navigation/PageFetchTransport\";\nimport { RouteDisplay } from \"../navigation/RouteDisplay\";\n\ntype Route = {\n url: string;\n template: string;\n aliases: string[];\n page: any;\n};\n\nexport class Router {\n public constructor(\n private loaderSelector: string,\n private navigationResultSelector: string,\n private menuSelector: string,\n ) {}\n\n routes(\n routes: Route[],\n currentPage: any,\n basePathSource: any,\n afterPageLoaded?: () => void,\n ) {\n if (!currentPage) {\n currentPage = new CurrentPage();\n }\n currentPage.value(new Patron(new HistoryNewPage()));\n\n const [basePath] = location.href.replace(location.origin, \"\").split(\"#\");\n if (!basePathSource) {\n basePathSource = new SourceWithPool(\n `${basePath}#`.replace(\"index.html\", \"\").replace(\"//\", \"/\"),\n );\n }\n\n const pageLoading = new SourceWithPool(false);\n pageLoading.value(new Patron(new Visible(this.loaderSelector)));\n\n const historyPoppedPage = new HistoryPoppedPage(currentPage);\n historyPoppedPage.watchPop();\n\n const navigation = new Navigation(\n pageLoading,\n basePathSource,\n currentPage,\n new RouteDisplay(this.navigationResultSelector),\n new PrivateClass(PageFetchTransport),\n );\n navigation.routes(routes);\n\n const link = new Link(currentPage, basePathSource);\n link.watchClick(this.menuSelector);\n\n const urlChain = new SourceAll<any>();\n basePathSource.value(new Patron(urlChain.guestKey(\"basePath\")));\n currentPage.value(new Patron(urlChain.guestKey(\"page\")));\n const url = new Source((guest) => {\n urlChain.value(\n new GuestCast(guest, ({ basePath, page }) => {\n give(page.replace(basePath, \"\"), guest);\n }),\n );\n });\n\n const activeLink = new ComputedElement(\n [{ source: url, placeholder: \"{url}\" }],\n `${this.menuSelector} a[href=\"{url}\"]`,\n );\n activeLink.element(\n new Patron(\n new GroupActiveClass(\n \"active\",\n `${this.menuSelector} a`,\n sourceOf(document),\n ),\n ),\n );\n\n pageLoading.value(\n new Patron((isInLoading) => {\n if (isInLoading) {\n return;\n }\n\n if (afterPageLoaded) {\n afterPageLoaded();\n }\n\n const divDestination = document.querySelector(\n this.navigationResultSelector,\n );\n if (divDestination) {\n // Оживляем script тэги\n divDestination.querySelectorAll(\"script\").forEach((x) => {\n const sc = document.createElement(\"script\");\n sc.setAttribute(\"type\", \"module\");\n sc.appendChild(document.createTextNode(x.innerText));\n divDestination.appendChild(sc);\n });\n }\n }),\n );\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Page implements RoutePageType {\n public constructor(private title: string) {}\n\n public mounted() {\n document.title = this.title;\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated not needed\n */\nexport class EntryPointPage implements RoutePageType {\n public constructor(\n private title: string,\n private entryPointUrl: string,\n ) {}\n\n public mounted() {\n document.title = this.title;\n import(this.entryPointUrl).then((module) => {\n if (module.main) {\n module.main();\n }\n });\n }\n}\n"],"names":["give","SourceAll","value","Patron","route","SourceWithPool","GuestCast","PatronOnce","HistoryNewPage","HistoryPoppedPage","PrivateClass","Source","basePath","sourceOf"],"mappings":";;;;;AAUO,MAAM,kBAAqD,CAAA;AAAA,EACzD,WAAA,CACG,UACA,QACR,EAAA;AAFQ,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA;AACP,EAEI,QAAQ,KAAgC,EAAA;AAC7C,IAAM,KAAA,CAAA,IAAA,CAAK,WAAW,GAAM,GAAA,IAAA,CAAK,QAAQ,CACtC,CAAA,IAAA,CAAK,CAAC,MAAW,KAAA;AAChB,MAAA,OAAO,OAAO,IAAK,EAAA;AAAA,KACpB,CAAA,CACA,IAAK,CAAA,CAAC,MAAW,KAAA;AAChB,MAAAA,cAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,KACnB,CAAA;AAAA;AAEP;;ACJO,MAAM,UAAW,CAAA;AAAA,EACf,WACG,CAAA,OAAA,EACA,QACA,EAAA,WAAA,EACA,SACA,aACR,EAAA;AALQ,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AAAA;AACP,EAEI,OAAO,MAAyB,EAAA;AACrC,IAAA,MAAM,eAAe,MAAO,CAAA,IAAA,CAAK,CAAC,KAAA,KAAU,MAAM,OAAO,CAAA;AACzD,IAAM,MAAA,GAAA,GAAM,IAAIC,mBAGb,EAAA;AACH,IAAMC,eAAA,CAAA,IAAA,CAAK,UAAU,IAAIC,gBAAA,CAAO,IAAI,QAAS,CAAA,UAAU,CAAC,CAAC,CAAA;AACzD,IAAMD,eAAA,CAAA,IAAA,CAAK,aAAa,IAAIC,gBAAA,CAAO,IAAI,QAAS,CAAA,aAAa,CAAC,CAAC,CAAA;AAE/D,IAAI,GAAA,CAAA,KAAA;AAAA,MACF,IAAIA,gBAAO,CAAA,CAAC,EAAE,QAAA,EAAU,aAAkB,KAAA;AACxC,QAAA,MAAM,kBAAqB,GAAA,WAAA,CAAY,OAAQ,CAAA,QAAA,EAAU,EAAE,CAAA;AAC3D,QAAA,MAAM,sBAAsB,MAAO,CAAA,IAAA;AAAA,UACjC,CAACC,MAAAA,KACCA,MAAM,CAAA,OAAA,KACLA,MAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,WAAW,CACjCA,IAAAA,MAAAA,CAAM,OAAQ,CAAA,QAAA,CAAS,kBAAkB,CAAA;AAAA,SAC/C;AAEA,QAAA,IAAI,mBAAqB,EAAA;AACvB,UAAM,MAAA,UAAA,GAAa,WAAW,mBAAoB,CAAA,GAAA;AAElD,UAAA,IAAI,eAAe,WAAa,EAAA;AAC9B,YAAKJ,cAAA,CAAA,UAAA,EAAY,KAAK,WAAW,CAAA;AACjC,YAAA;AAAA;AACF;AAGF,QAAA,IAAI,KAAQ,GAAA,MAAA,CAAO,IAAK,CAAA,CAACI,MAAU,KAAA;AACjC,UAAA,IAAIA,MAAM,CAAA,GAAA,CAAI,OAAQ,CAAA,GAAG,KAAK,CAAG,EAAA;AAC/B,YAAA,MAAM,SAAS,IAAI,MAAA;AAAA,cACjBA,MAAAA,CAAM,IAAI,UAAW,CAAA,GAAA,EAAK,IAAI,CAAE,CAAA,UAAA,CAAW,KAAK,GAAG;AAAA,aACrD;AACA,YAAO,OAAA,MAAA,CAAO,KAAK,kBAAkB,CAAA;AAAA;AAEvC,UAAA,OAAOA,MAAM,CAAA,GAAA,CAAI,UAAW,CAAA,GAAA,EAAK,EAAE,CAAM,KAAA,kBAAA;AAAA,SAC1C,CAAA;AAED,QAAI,IAAA,CAAC,SAAS,YAAc,EAAA;AAC1B,UAAQ,KAAA,GAAA,YAAA;AAAA;AAGV,QAAA,IAAI,KAAO,EAAA;AACT,UAAA,MAAM,mBAAsB,GAAA,QAAA,CACzB,OAAQ,CAAA,IAAA,EAAM,EAAE,CAAA,CAChB,OAAQ,CAAA,GAAA,EAAK,EAAE,CAAA,CACf,OAAQ,CAAA,cAAA,EAAgB,EAAE,CAAA;AAC7B,UAAKJ,cAAA,CAAA,IAAA,EAAM,KAAK,OAAO,CAAA;AACvB,UAAK,IAAA,CAAA,aAAA,CACF,IAAI,mBAAqB,EAAA,KAAA,CAAM,QAAQ,CACvC,CAAA,OAAA,CAAQ,CAAC,eAAoB,KAAA;AAC5B,YAAK,IAAA,CAAA,OAAA,CAAQ,QAAQ,eAAe,CAAA;AACpC,YAAA,KAAA,CAAM,KAAK,OAAQ,EAAA;AACnB,YAAKA,cAAA,CAAA,KAAA,EAAO,KAAK,OAAO,CAAA;AAAA,WACzB,CAAA;AAAA,SACE,MAAA;AACL,UAAM,MAAA,IAAI,MAAM,iCAAiC,CAAA;AAAA;AACnD,OACD;AAAA,KACH;AAAA;AAEJ;;ACnFO,MAAM,YAAyC,CAAA;AAAA,EAC7C,YAAoB,QAAkB,EAAA;AAAlB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA;AAAmB,EAEvC,QAAQ,OAAuB,EAAA;AACpC,IAAA,MAAM,SAAY,GAAA,QAAA,CAAS,aAAc,CAAA,IAAA,CAAK,QAAQ,CAAA;AACtD,IAAA,IAAI,SAAW,EAAA;AACb,MAAA,SAAA,CAAU,SAAY,GAAA,OAAA;AAAA;AACxB;AAEJ;;;;;ACZO,MAAM,WAAkD,CAAA;AAAA,EAGtD,WAAc,GAAA;AAFrB,IAAQ,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AAGN,IAAA,MAAM,aAAa,QAAS,CAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAS,QAAQ,EAAE,CAAA;AAC5D,IAAK,IAAA,CAAA,MAAA,GAAS,IAAIK,wBAAA,CAAe,UAAU,CAAA;AAAA;AAC7C,EAEO,KAAK,KAAqB,EAAA;AAC/B,IAAK,IAAA,CAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACtB,IAAO,OAAA,IAAA;AAAA;AACT,EAEO,MAAM,KAA0B,EAAA;AACrC,IAAK,IAAA,CAAA,MAAA,CAAO,MAAM,KAAK,CAAA;AACvB,IAAO,OAAA,KAAA;AAAA;AACT,EAEO,IAAO,GAAA;AACZ,IAAO,OAAA,IAAA,CAAK,OAAO,IAAK,EAAA;AAAA;AAE5B;;ACnBO,MAAM,KAAgD,CAAA;AAAA,EACpD,WAAA,CACG,QACR,QACA,EAAA;AAFQ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAGR,IAAM,MAAA,EAAA,GAAK,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA;AAC1C,IAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,MACV,IAAIF,gBAAO,CAAA,CAAC,KAAU,KAAA;AACpB,QAAG,EAAA,CAAA,KAAA,GAAQ,OAAO,KAAK,CAAA;AAAA,OACxB;AAAA,KACH;AACA,IAAG,EAAA,CAAA,gBAAA,CAAiB,SAAS,MAAM;AACjC,MAAK,IAAA,CAAA,IAAA,CAAK,GAAG,KAAK,CAAA;AAAA,KACnB,CAAA;AACD,IAAG,EAAA,CAAA,gBAAA,CAAiB,UAAU,MAAM;AAClC,MAAK,IAAA,CAAA,IAAA,CAAK,GAAG,KAAK,CAAA;AAAA,KACnB,CAAA;AAAA;AACH,EAEO,MAAM,KAA8B,EAAA;AACzC,IAAK,IAAA,CAAA,MAAA,CAAO,MAAM,KAAK,CAAA;AACvB,IAAO,OAAA,IAAA;AAAA;AACT,EAEO,KAAK,KAAmB,EAAA;AAC7B,IAAK,IAAA,CAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACtB,IAAO,OAAA,IAAA;AAAA;AACT,EAEO,IAAO,GAAA;AACZ,IAAO,OAAA,IAAA,CAAK,OAAO,IAAK,EAAA;AAAA;AAE5B;;AClCO,MAAM,OAA4C,CAAA;AAAA,EAChD,YAAoB,QAAkB,EAAA;AAAlB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA;AAAmB,EAEvC,KAAK,SAA0B,EAAA;AACpC,IAAA,MAAM,EAAK,GAAA,QAAA,CAAS,aAAc,CAAA,IAAA,CAAK,QAAQ,CAAA;AAC/C,IAAA,IAAI,EAAI,EAAA;AACN,MAAG,EAAA,CAAA,KAAA,CAAM,OAAU,GAAA,SAAA,GAAY,OAAU,GAAA,MAAA;AAAA;AAE3C,IAAO,OAAA,IAAA;AAAA;AAEX;;ACVO,MAAM,IAAgC,CAAA;AAAA,EACpC,YAAoB,QAAkB,EAAA;AAAlB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA;AAAmB,EAEvC,KAAK,KAAgB,EAAA;AAC1B,IAAA,MAAM,OAAU,GAAA,QAAA,CAAS,aAAc,CAAA,IAAA,CAAK,QAAQ,CAAA;AACpD,IAAA,IAAI,OAAS,EAAA;AACX,MAAQ,OAAA,CAAA,SAAA,GAAY,OAAO,KAAK,CAAA;AAAA;AAElC,IAAO,OAAA,IAAA;AAAA;AAEX;;ACVO,MAAM,IAAK,CAAA;AAAA,EACT,WAAA,CACG,YACA,QACR,EAAA;AAFQ,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA;AACP,EAEI,UAAA,CAAW,UAAkB,WAAsB,EAAA;AACxD,IAAM,MAAA,SAAA,GAAY,QAAS,CAAA,gBAAA,CAAiB,QAAQ,CAAA;AACpD,IAAA,IAAI,UAAU,MAAQ,EAAA;AACpB,MAAU,SAAA,CAAA,OAAA,CAAQ,CAAC,UAAe,KAAA;AAChC,QAAW,UAAA,CAAA,gBAAA,CAAiB,OAAS,EAAA,CAAC,CAAM,KAAA;AAC1C,UAAA,IAAI,WAAa,EAAA;AACf,YAAA,UAAA,CACG,gBAAiB,CAAA,WAAW,CAC5B,CAAA,OAAA,CAAQ,CAAC,aAAkB,KAAA;AAC1B,cAAA,IACE,CAAG,EAAA,MAAA,KAAW,aACd,IAAA,CAAA,EAAG,kBAAkB,aACrB,EAAA;AACA,gBAAA,IAAA,CAAK,WAAY,CAAA;AAAA,kBACf,cAAgB,EAAA,CAAA,CAAE,cAAe,CAAA,IAAA,CAAK,CAAC,CAAA;AAAA,kBACvC,MAAQ,EAAA;AAAA,iBACW,CAAA;AAAA;AACvB,aACD,CAAA;AAAA,WACE,MAAA;AACL,YAAA,IAAA,CAAK,YAAY,CAAC,CAAA;AAAA;AACpB,SACD,CAAA;AAAA,OACF,CAAA;AAAA,KACI,MAAA;AACL,MAAA,MAAM,IAAI,KAAA,CAAM,CAAuC,oCAAA,EAAA,QAAQ,CAAE,CAAA,CAAA;AAAA;AACnE;AACF,EAEQ,YAAY,CAAU,EAAA;AAC5B,IAAA,IAAI,IAAQ,GAAA,CAAA,EAAG,MAAwB,EAAA,YAAA,CAAa,MAAM,CAAA;AAC1D,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAQ,IAAA,GAAA,CAAA,EAAG,aAA+B,EAAA,YAAA,CAAa,MAAM,CAAA;AAAA;AAE/D,IAAA,IAAI,IAAQ,IAAA,IAAA,CAAK,OAAQ,CAAA,MAAM,MAAM,CAAG,EAAA;AACtC,MAAA,CAAA,CAAE,cAAe,EAAA;AACjB,MAAMD,eAAA,CAAA,IAAA,CAAK,QAAU,EAAA,CAAC,QAAa,KAAA;AACjC,QAAK,IAAA,CAAA,UAAA,CAAW,IAAK,CAAA,QAAA,GAAW,IAAI,CAAA;AAAA,OACrC,CAAA;AAAA;AACH;AAEJ;;ACpCO,MAAM,eAAgB,CAAA;AAAA,EACpB,WAAA,CACG,SACA,gBACR,EAAA;AAFQ,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,gBAAA,GAAA,gBAAA;AAAA;AACP,EAEI,QAAQ,KAA+B,EAAA;AAC5C,IAAM,MAAA,KAAA,GAAQ,IAAID,mBAAU,EAAA;AAC5B,IAAK,IAAA,CAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,MAAW,KAAA;AAC/B,MAAA,MAAA,CAAO,MAAO,CAAA,KAAA;AAAA,QACZ,IAAIK,mBAAU,CAAA,KAAA,EAAoB,MAAM,QAAS,CAAA,MAAA,CAAO,WAAW,CAAC;AAAA,OACtE;AAAA,KACD,CAAA;AAED,IAAM,KAAA,CAAA,KAAA;AAAA,MACJ,IAAIA,mBAAA;AAAA,QACF,KAAA;AAAA,QACA,CAAC,YAAyC,KAAA;AACxC,UAAA,IAAI,mBAAmB,IAAK,CAAA,gBAAA;AAE5B,UAAA,MAAA,CAAO,OAAQ,CAAA,YAAY,CAAE,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA;AAC1C,YAAA,gBAAA,GAAmB,iBAAiB,UAAW,CAAA,KAAA,CAAM,CAAC,CAAG,EAAA,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,WAClE,CAAA;AAED,UAAA,MAAM,UAAU,QAAS,CAAA,aAAA;AAAA,YACvB;AAAA,WACF;AACA,UAAA,IAAI,OAAS,EAAA;AACX,YAAAN,cAAA,CAAK,SAAS,KAAK,CAAA;AAAA;AACrB;AACF;AACF,KACF;AAAA;AAEJ;;ACzCO,MAAM,gBAAyD,CAAA;AAAA,EAC7D,WAAA,CACG,WACA,EAAA,aAAA,EACA,QACR,EAAA;AAHQ,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA;AACP,EAEI,KAAK,OAA4B,EAAA;AACtC,IAAAE,eAAA;AAAA,MACE,IAAK,CAAA,QAAA;AAAA,MACL,IAAIK,oBAAW,CAAA,CAAC,QAAa,KAAA;AAC3B,QAAA,QAAA,CAAS,iBAAiB,IAAK,CAAA,aAAa,CAAE,CAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;AAC5D,UAAG,EAAA,CAAA,SAAA,CAAU,MAAO,CAAA,IAAA,CAAK,WAAW,CAAA;AAAA,SACrC,CAAA;AACD,QAAQ,OAAA,CAAA,SAAA,CAAU,GAAI,CAAA,IAAA,CAAK,WAAW,CAAA;AAAA,OACvC;AAAA,KACH;AACA,IAAO,OAAA,IAAA;AAAA;AAEX;;ACJO,MAAM,MAAO,CAAA;AAAA,EACX,WAAA,CACG,cACA,EAAA,wBAAA,EACA,YACR,EAAA;AAHQ,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AACA,IAAA,IAAA,CAAA,wBAAA,GAAA,wBAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AAAA;AACP,EAEH,MACE,CAAA,MAAA,EACA,WACA,EAAA,cAAA,EACA,eACA,EAAA;AACA,IAAA,IAAI,CAAC,WAAa,EAAA;AAChB,MAAA,WAAA,GAAc,IAAI,WAAY,EAAA;AAAA;AAEhC,IAAA,WAAA,CAAY,MAAM,IAAIJ,gBAAA,CAAO,IAAIK,2BAAA,EAAgB,CAAC,CAAA;AAElD,IAAM,MAAA,CAAC,QAAQ,CAAA,GAAI,QAAS,CAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAS,MAAQ,EAAA,EAAE,CAAE,CAAA,KAAA,CAAM,GAAG,CAAA;AACvE,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAA,cAAA,GAAiB,IAAIH,wBAAA;AAAA,QACnB,CAAA,EAAG,QAAQ,CAAI,CAAA,CAAA,CAAA,OAAA,CAAQ,cAAc,EAAE,CAAA,CAAE,OAAQ,CAAA,IAAA,EAAM,GAAG;AAAA,OAC5D;AAAA;AAGF,IAAM,MAAA,WAAA,GAAc,IAAIA,wBAAA,CAAe,KAAK,CAAA;AAC5C,IAAY,WAAA,CAAA,KAAA,CAAM,IAAIF,gBAAO,CAAA,IAAI,QAAQ,IAAK,CAAA,cAAc,CAAC,CAAC,CAAA;AAE9D,IAAM,MAAA,iBAAA,GAAoB,IAAIM,8BAAA,CAAkB,WAAW,CAAA;AAC3D,IAAA,iBAAA,CAAkB,QAAS,EAAA;AAE3B,IAAA,MAAM,aAAa,IAAI,UAAA;AAAA,MACrB,WAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAI,YAAa,CAAA,IAAA,CAAK,wBAAwB,CAAA;AAAA,MAC9C,IAAIC,uBAAa,kBAAkB;AAAA,KACrC;AACA,IAAA,UAAA,CAAW,OAAO,MAAM,CAAA;AAExB,IAAA,MAAM,IAAO,GAAA,IAAI,IAAK,CAAA,WAAA,EAAa,cAAc,CAAA;AACjD,IAAK,IAAA,CAAA,UAAA,CAAW,KAAK,YAAY,CAAA;AAEjC,IAAM,MAAA,QAAA,GAAW,IAAIT,mBAAe,EAAA;AACpC,IAAA,cAAA,CAAe,MAAM,IAAIE,gBAAA,CAAO,SAAS,QAAS,CAAA,UAAU,CAAC,CAAC,CAAA;AAC9D,IAAA,WAAA,CAAY,MAAM,IAAIA,gBAAA,CAAO,SAAS,QAAS,CAAA,MAAM,CAAC,CAAC,CAAA;AACvD,IAAA,MAAM,GAAM,GAAA,IAAIQ,gBAAO,CAAA,CAAC,KAAU,KAAA;AAChC,MAAS,QAAA,CAAA,KAAA;AAAA,QACP,IAAIL,oBAAU,KAAO,EAAA,CAAC,EAAE,QAAAM,EAAAA,SAAAA,EAAU,MAAW,KAAA;AAC3C,UAAAZ,cAAA,CAAK,IAAK,CAAA,OAAA,CAAQY,SAAU,EAAA,EAAE,GAAG,KAAK,CAAA;AAAA,SACvC;AAAA,OACH;AAAA,KACD,CAAA;AAED,IAAA,MAAM,aAAa,IAAI,eAAA;AAAA,MACrB,CAAC,EAAE,MAAA,EAAQ,GAAK,EAAA,WAAA,EAAa,SAAS,CAAA;AAAA,MACtC,CAAA,EAAG,KAAK,YAAY,CAAA,gBAAA;AAAA,KACtB;AACA,IAAW,UAAA,CAAA,OAAA;AAAA,MACT,IAAIT,gBAAA;AAAA,QACF,IAAI,gBAAA;AAAA,UACF,QAAA;AAAA,UACA,CAAA,EAAG,KAAK,YAAY,CAAA,EAAA,CAAA;AAAA,UACpBU,mBAAS,QAAQ;AAAA;AACnB;AACF,KACF;AAEA,IAAY,WAAA,CAAA,KAAA;AAAA,MACV,IAAIV,gBAAO,CAAA,CAAC,WAAgB,KAAA;AAC1B,QAAA,IAAI,WAAa,EAAA;AACf,UAAA;AAAA;AAGF,QAAA,IAAI,eAAiB,EAAA;AACnB,UAAgB,eAAA,EAAA;AAAA;AAGlB,QAAA,MAAM,iBAAiB,QAAS,CAAA,aAAA;AAAA,UAC9B,IAAK,CAAA;AAAA,SACP;AACA,QAAA,IAAI,cAAgB,EAAA;AAElB,UAAA,cAAA,CAAe,gBAAiB,CAAA,QAAQ,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACvD,YAAM,MAAA,EAAA,GAAK,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA;AAC1C,YAAG,EAAA,CAAA,YAAA,CAAa,QAAQ,QAAQ,CAAA;AAChC,YAAA,EAAA,CAAG,WAAY,CAAA,QAAA,CAAS,cAAe,CAAA,CAAA,CAAE,SAAS,CAAC,CAAA;AACnD,YAAA,cAAA,CAAe,YAAY,EAAE,CAAA;AAAA,WAC9B,CAAA;AAAA;AACH,OACD;AAAA,KACH;AAAA;AAEJ;;AChHO,MAAM,IAA8B,CAAA;AAAA,EAClC,YAAoB,KAAe,EAAA;AAAf,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA;AAAgB,EAEpC,OAAU,GAAA;AACf,IAAA,QAAA,CAAS,QAAQ,IAAK,CAAA,KAAA;AAAA;AAE1B;;ACNO,MAAM,cAAwC,CAAA;AAAA,EAC5C,WAAA,CACG,OACA,aACR,EAAA;AAFQ,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AAAA;AACP,EAEI,OAAU,GAAA;AACf,IAAA,QAAA,CAAS,QAAQ,IAAK,CAAA,KAAA;AACtB,IAAA,OAAO,IAAK,CAAA,aAAA,CAAA,CAAe,IAAK,CAAA,CAAC,MAAW,KAAA;AAC1C,MAAA,IAAI,OAAO,IAAM,EAAA;AACf,QAAA,MAAA,CAAO,IAAK,EAAA;AAAA;AACd,KACD,CAAA;AAAA;AAEL;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import * as patron_oop from 'patron-oop';
|
|
2
|
+
import { GuestType, SourceWithPoolType, SourceType, PrivateType, GuestObjectType, SourceObjectType } from 'patron-oop';
|
|
3
|
+
import { RoutePageTransportType as RoutePageTransportType$1 } from 'src/navigation/PageFetchTransport';
|
|
4
|
+
import { RouteDisplayType as RouteDisplayType$1 } from 'src/navigation/RouteDisplay';
|
|
5
|
+
import { RoutePageType as RoutePageType$1 } from 'src/navigation/RoutePageType';
|
|
6
|
+
|
|
7
|
+
interface RoutePageTransportType {
|
|
8
|
+
content(guest: GuestType<string>): void;
|
|
9
|
+
}
|
|
10
|
+
declare class PageFetchTransport implements RoutePageTransportType {
|
|
11
|
+
private basePath;
|
|
12
|
+
private template;
|
|
13
|
+
constructor(basePath: string, template: string);
|
|
14
|
+
content(guest: GuestType<string>): void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface RouteDocument {
|
|
18
|
+
url: string;
|
|
19
|
+
template: string;
|
|
20
|
+
aliases?: string[];
|
|
21
|
+
page: RoutePageType$1;
|
|
22
|
+
default?: boolean;
|
|
23
|
+
}
|
|
24
|
+
declare class Navigation {
|
|
25
|
+
private loading;
|
|
26
|
+
private basePath;
|
|
27
|
+
private currentPage;
|
|
28
|
+
private display;
|
|
29
|
+
private pageTransport;
|
|
30
|
+
constructor(loading: SourceWithPoolType<boolean>, basePath: SourceType<string>, currentPage: SourceWithPoolType<string>, display: RouteDisplayType$1, pageTransport: PrivateType<RoutePageTransportType$1>);
|
|
31
|
+
routes(routes: RouteDocument[]): void;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
interface RouteDisplayType {
|
|
35
|
+
display(content: string): void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Renders content on selector
|
|
39
|
+
*/
|
|
40
|
+
declare class RouteDisplay implements RouteDisplayType {
|
|
41
|
+
private selector;
|
|
42
|
+
constructor(selector: string);
|
|
43
|
+
display(content: string): void;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
interface RoutePageType {
|
|
47
|
+
mounted(): void;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @deprecated move to web api
|
|
52
|
+
*/
|
|
53
|
+
declare class CurrentPage implements SourceWithPoolType<string> {
|
|
54
|
+
private source;
|
|
55
|
+
constructor();
|
|
56
|
+
give(value: string): this;
|
|
57
|
+
value(guest: GuestType<string>): GuestType<string>;
|
|
58
|
+
pool(): patron_oop.PatronPool<string>;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
type Route = {
|
|
62
|
+
url: string;
|
|
63
|
+
template: string;
|
|
64
|
+
aliases: string[];
|
|
65
|
+
page: any;
|
|
66
|
+
};
|
|
67
|
+
declare class Router {
|
|
68
|
+
private loaderSelector;
|
|
69
|
+
private navigationResultSelector;
|
|
70
|
+
private menuSelector;
|
|
71
|
+
constructor(loaderSelector: string, navigationResultSelector: string, menuSelector: string);
|
|
72
|
+
routes(routes: Route[], currentPage: any, basePathSource: any, afterPageLoaded?: () => void): void;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
type InputValue = number | string;
|
|
76
|
+
/**
|
|
77
|
+
* @deprecated move to web api
|
|
78
|
+
*/
|
|
79
|
+
declare class Input implements SourceWithPoolType<InputValue> {
|
|
80
|
+
private source;
|
|
81
|
+
constructor(source: SourceWithPoolType<InputValue>, selector: string);
|
|
82
|
+
value(guest: GuestType<InputValue>): this;
|
|
83
|
+
give(value: InputValue): this;
|
|
84
|
+
pool(): patron_oop.PatronPool<InputValue>;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @deprecated move to web api
|
|
89
|
+
*/
|
|
90
|
+
declare class Visible implements GuestObjectType<boolean> {
|
|
91
|
+
private selector;
|
|
92
|
+
constructor(selector: string);
|
|
93
|
+
give(isVisible: boolean): this;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* @deprecated Move to web api
|
|
98
|
+
*/
|
|
99
|
+
declare class Text implements GuestObjectType {
|
|
100
|
+
private selector;
|
|
101
|
+
constructor(selector: string);
|
|
102
|
+
give(value: unknown): this;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @deprecated move to web api
|
|
107
|
+
*/
|
|
108
|
+
declare class Link {
|
|
109
|
+
private linkSource;
|
|
110
|
+
private basePath;
|
|
111
|
+
constructor(linkSource: GuestObjectType<string>, basePath: SourceType<string>);
|
|
112
|
+
watchClick(selector: string, subselector?: string): void;
|
|
113
|
+
private handleClick;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
type SourceDetailType = {
|
|
117
|
+
source: SourceObjectType<any>;
|
|
118
|
+
placeholder: string;
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* @deprecated use https://kosukhin.github.io/patron-web-api/#/dom/element
|
|
122
|
+
*/
|
|
123
|
+
declare class ComputedElement {
|
|
124
|
+
private sources;
|
|
125
|
+
private selectorTemplate;
|
|
126
|
+
constructor(sources: SourceDetailType[], selectorTemplate: string);
|
|
127
|
+
element(guest: GuestType<HTMLElement>): void;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Sets activeClass to one element of group
|
|
132
|
+
* and resets activeClass on other group elements
|
|
133
|
+
* suitable for menu active class
|
|
134
|
+
*
|
|
135
|
+
* @deprecated heavily related to web api needs refactoring
|
|
136
|
+
*/
|
|
137
|
+
declare class GroupActiveClass implements GuestObjectType<HTMLElement> {
|
|
138
|
+
private activeClass;
|
|
139
|
+
private groupSelector;
|
|
140
|
+
private document;
|
|
141
|
+
constructor(activeClass: string, groupSelector: string, document: SourceType<Document>);
|
|
142
|
+
give(element: HTMLElement): this;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
declare class Page implements RoutePageType {
|
|
146
|
+
private title;
|
|
147
|
+
constructor(title: string);
|
|
148
|
+
mounted(): void;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
declare class EntryPointPage implements RoutePageType {
|
|
152
|
+
private title;
|
|
153
|
+
private entryPointUrl;
|
|
154
|
+
constructor(title: string, entryPointUrl: string);
|
|
155
|
+
mounted(): void;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export { ComputedElement, CurrentPage, EntryPointPage, GroupActiveClass, Input, Link, Navigation, Page, PageFetchTransport, RouteDisplay, type RouteDisplayType, type RouteDocument, type RoutePageTransportType, type RoutePageType, Router, Text, Visible };
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
import { give, SourceAll, value, Patron, SourceWithPool, GuestCast, PatronOnce, PrivateClass, Source, sourceOf } from 'patron-oop';
|
|
2
|
+
import { HistoryNewPage, HistoryPoppedPage } from 'patron-web-api';
|
|
3
|
+
|
|
4
|
+
class PageFetchTransport {
|
|
5
|
+
constructor(basePath, template) {
|
|
6
|
+
this.basePath = basePath;
|
|
7
|
+
this.template = template;
|
|
8
|
+
}
|
|
9
|
+
content(guest) {
|
|
10
|
+
fetch(this.basePath + "/" + this.template).then((result) => {
|
|
11
|
+
return result.text();
|
|
12
|
+
}).then((result) => {
|
|
13
|
+
give(result, guest);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
class Navigation {
|
|
19
|
+
constructor(loading, basePath, currentPage, display, pageTransport) {
|
|
20
|
+
this.loading = loading;
|
|
21
|
+
this.basePath = basePath;
|
|
22
|
+
this.currentPage = currentPage;
|
|
23
|
+
this.display = display;
|
|
24
|
+
this.pageTransport = pageTransport;
|
|
25
|
+
}
|
|
26
|
+
routes(routes) {
|
|
27
|
+
const defaultRoute = routes.find((route) => route.default);
|
|
28
|
+
const all = new SourceAll();
|
|
29
|
+
value(this.basePath, new Patron(all.guestKey("basePath")));
|
|
30
|
+
value(this.currentPage, new Patron(all.guestKey("currentPage")));
|
|
31
|
+
all.value(
|
|
32
|
+
new Patron(({ basePath, currentPage }) => {
|
|
33
|
+
const urlWithoutBasePath = currentPage.replace(basePath, "");
|
|
34
|
+
const routeMatchedToAlias = routes.find(
|
|
35
|
+
(route2) => route2.aliases && (route2.aliases.includes(currentPage) || route2.aliases.includes(urlWithoutBasePath))
|
|
36
|
+
);
|
|
37
|
+
if (routeMatchedToAlias) {
|
|
38
|
+
const correctUrl = basePath + routeMatchedToAlias.url;
|
|
39
|
+
if (correctUrl !== currentPage) {
|
|
40
|
+
give(correctUrl, this.currentPage);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
let route = routes.find((route2) => {
|
|
45
|
+
if (route2.url.indexOf("*") >= 0) {
|
|
46
|
+
const regexp = new RegExp(
|
|
47
|
+
route2.url.replaceAll("*", ".*").replaceAll("/", "/")
|
|
48
|
+
);
|
|
49
|
+
return regexp.test(urlWithoutBasePath);
|
|
50
|
+
}
|
|
51
|
+
return route2.url.replaceAll("*", "") === urlWithoutBasePath;
|
|
52
|
+
});
|
|
53
|
+
if (!route && defaultRoute) {
|
|
54
|
+
route = defaultRoute;
|
|
55
|
+
}
|
|
56
|
+
if (route) {
|
|
57
|
+
const basePathWithoutHash = basePath.replace("/#", "").replace("#", "").replace(/[^/]+\.html$/, "");
|
|
58
|
+
give(true, this.loading);
|
|
59
|
+
this.pageTransport.get(basePathWithoutHash, route.template).content((templateContent) => {
|
|
60
|
+
this.display.display(templateContent);
|
|
61
|
+
route.page.mounted();
|
|
62
|
+
give(false, this.loading);
|
|
63
|
+
});
|
|
64
|
+
} else {
|
|
65
|
+
throw new Error("No matching route in Navigation");
|
|
66
|
+
}
|
|
67
|
+
})
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
class RouteDisplay {
|
|
73
|
+
constructor(selector) {
|
|
74
|
+
this.selector = selector;
|
|
75
|
+
}
|
|
76
|
+
display(content) {
|
|
77
|
+
const contentEl = document.querySelector(this.selector);
|
|
78
|
+
if (contentEl) {
|
|
79
|
+
contentEl.innerHTML = content;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
var __defProp = Object.defineProperty;
|
|
85
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
86
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
|
|
87
|
+
class CurrentPage {
|
|
88
|
+
constructor() {
|
|
89
|
+
__publicField(this, "source");
|
|
90
|
+
const correctUrl = location.href.replace(location.origin, "");
|
|
91
|
+
this.source = new SourceWithPool(correctUrl);
|
|
92
|
+
}
|
|
93
|
+
give(value) {
|
|
94
|
+
this.source.give(value);
|
|
95
|
+
return this;
|
|
96
|
+
}
|
|
97
|
+
value(guest) {
|
|
98
|
+
this.source.value(guest);
|
|
99
|
+
return guest;
|
|
100
|
+
}
|
|
101
|
+
pool() {
|
|
102
|
+
return this.source.pool();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
class Input {
|
|
107
|
+
constructor(source, selector) {
|
|
108
|
+
this.source = source;
|
|
109
|
+
const el = document.querySelector(selector);
|
|
110
|
+
this.source.value(
|
|
111
|
+
new Patron((value) => {
|
|
112
|
+
el.value = String(value);
|
|
113
|
+
})
|
|
114
|
+
);
|
|
115
|
+
el.addEventListener("keyup", () => {
|
|
116
|
+
this.give(el.value);
|
|
117
|
+
});
|
|
118
|
+
el.addEventListener("change", () => {
|
|
119
|
+
this.give(el.value);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
value(guest) {
|
|
123
|
+
this.source.value(guest);
|
|
124
|
+
return this;
|
|
125
|
+
}
|
|
126
|
+
give(value) {
|
|
127
|
+
this.source.give(value);
|
|
128
|
+
return this;
|
|
129
|
+
}
|
|
130
|
+
pool() {
|
|
131
|
+
return this.source.pool();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
class Visible {
|
|
136
|
+
constructor(selector) {
|
|
137
|
+
this.selector = selector;
|
|
138
|
+
}
|
|
139
|
+
give(isVisible) {
|
|
140
|
+
const el = document.querySelector(this.selector);
|
|
141
|
+
if (el) {
|
|
142
|
+
el.style.display = isVisible ? "block" : "none";
|
|
143
|
+
}
|
|
144
|
+
return this;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
class Text {
|
|
149
|
+
constructor(selector) {
|
|
150
|
+
this.selector = selector;
|
|
151
|
+
}
|
|
152
|
+
give(value) {
|
|
153
|
+
const element = document.querySelector(this.selector);
|
|
154
|
+
if (element) {
|
|
155
|
+
element.innerText = String(value);
|
|
156
|
+
}
|
|
157
|
+
return this;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
class Link {
|
|
162
|
+
constructor(linkSource, basePath) {
|
|
163
|
+
this.linkSource = linkSource;
|
|
164
|
+
this.basePath = basePath;
|
|
165
|
+
}
|
|
166
|
+
watchClick(selector, subselector) {
|
|
167
|
+
const wrapperEl = document.querySelectorAll(selector);
|
|
168
|
+
if (wrapperEl.length) {
|
|
169
|
+
wrapperEl.forEach((theElement) => {
|
|
170
|
+
theElement.addEventListener("click", (e) => {
|
|
171
|
+
if (subselector) {
|
|
172
|
+
theElement.querySelectorAll(subselector).forEach((theSubElement) => {
|
|
173
|
+
if (e?.target === theSubElement || e?.currentTarget === theSubElement) {
|
|
174
|
+
this.handleClick({
|
|
175
|
+
preventDefault: e.preventDefault.bind(e),
|
|
176
|
+
target: theSubElement
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
} else {
|
|
181
|
+
this.handleClick(e);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
} else {
|
|
186
|
+
throw new Error(`Link wrapper not found for selector ${selector}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
handleClick(e) {
|
|
190
|
+
let href = e?.target?.getAttribute("href");
|
|
191
|
+
if (!href) {
|
|
192
|
+
href = e?.currentTarget?.getAttribute("href");
|
|
193
|
+
}
|
|
194
|
+
if (href && href.indexOf("http") !== 0) {
|
|
195
|
+
e.preventDefault();
|
|
196
|
+
value(this.basePath, (basePath) => {
|
|
197
|
+
this.linkSource.give(basePath + href);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
class ComputedElement {
|
|
204
|
+
constructor(sources, selectorTemplate) {
|
|
205
|
+
this.sources = sources;
|
|
206
|
+
this.selectorTemplate = selectorTemplate;
|
|
207
|
+
}
|
|
208
|
+
element(guest) {
|
|
209
|
+
const chain = new SourceAll();
|
|
210
|
+
this.sources.forEach((source) => {
|
|
211
|
+
source.source.value(
|
|
212
|
+
new GuestCast(guest, chain.guestKey(source.placeholder))
|
|
213
|
+
);
|
|
214
|
+
});
|
|
215
|
+
chain.value(
|
|
216
|
+
new GuestCast(
|
|
217
|
+
guest,
|
|
218
|
+
(placeholders) => {
|
|
219
|
+
let selectorTemplate = this.selectorTemplate;
|
|
220
|
+
Object.entries(placeholders).map((entry) => {
|
|
221
|
+
selectorTemplate = selectorTemplate.replaceAll(entry[0], entry[1]);
|
|
222
|
+
});
|
|
223
|
+
const element = document.querySelector(
|
|
224
|
+
selectorTemplate
|
|
225
|
+
);
|
|
226
|
+
if (element) {
|
|
227
|
+
give(element, guest);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
)
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
class GroupActiveClass {
|
|
236
|
+
constructor(activeClass, groupSelector, document) {
|
|
237
|
+
this.activeClass = activeClass;
|
|
238
|
+
this.groupSelector = groupSelector;
|
|
239
|
+
this.document = document;
|
|
240
|
+
}
|
|
241
|
+
give(element) {
|
|
242
|
+
value(
|
|
243
|
+
this.document,
|
|
244
|
+
new PatronOnce((document) => {
|
|
245
|
+
document.querySelectorAll(this.groupSelector).forEach((el) => {
|
|
246
|
+
el.classList.remove(this.activeClass);
|
|
247
|
+
});
|
|
248
|
+
element.classList.add(this.activeClass);
|
|
249
|
+
})
|
|
250
|
+
);
|
|
251
|
+
return this;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
class Router {
|
|
256
|
+
constructor(loaderSelector, navigationResultSelector, menuSelector) {
|
|
257
|
+
this.loaderSelector = loaderSelector;
|
|
258
|
+
this.navigationResultSelector = navigationResultSelector;
|
|
259
|
+
this.menuSelector = menuSelector;
|
|
260
|
+
}
|
|
261
|
+
routes(routes, currentPage, basePathSource, afterPageLoaded) {
|
|
262
|
+
if (!currentPage) {
|
|
263
|
+
currentPage = new CurrentPage();
|
|
264
|
+
}
|
|
265
|
+
currentPage.value(new Patron(new HistoryNewPage()));
|
|
266
|
+
const [basePath] = location.href.replace(location.origin, "").split("#");
|
|
267
|
+
if (!basePathSource) {
|
|
268
|
+
basePathSource = new SourceWithPool(
|
|
269
|
+
`${basePath}#`.replace("index.html", "").replace("//", "/")
|
|
270
|
+
);
|
|
271
|
+
}
|
|
272
|
+
const pageLoading = new SourceWithPool(false);
|
|
273
|
+
pageLoading.value(new Patron(new Visible(this.loaderSelector)));
|
|
274
|
+
const historyPoppedPage = new HistoryPoppedPage(currentPage);
|
|
275
|
+
historyPoppedPage.watchPop();
|
|
276
|
+
const navigation = new Navigation(
|
|
277
|
+
pageLoading,
|
|
278
|
+
basePathSource,
|
|
279
|
+
currentPage,
|
|
280
|
+
new RouteDisplay(this.navigationResultSelector),
|
|
281
|
+
new PrivateClass(PageFetchTransport)
|
|
282
|
+
);
|
|
283
|
+
navigation.routes(routes);
|
|
284
|
+
const link = new Link(currentPage, basePathSource);
|
|
285
|
+
link.watchClick(this.menuSelector);
|
|
286
|
+
const urlChain = new SourceAll();
|
|
287
|
+
basePathSource.value(new Patron(urlChain.guestKey("basePath")));
|
|
288
|
+
currentPage.value(new Patron(urlChain.guestKey("page")));
|
|
289
|
+
const url = new Source((guest) => {
|
|
290
|
+
urlChain.value(
|
|
291
|
+
new GuestCast(guest, ({ basePath: basePath2, page }) => {
|
|
292
|
+
give(page.replace(basePath2, ""), guest);
|
|
293
|
+
})
|
|
294
|
+
);
|
|
295
|
+
});
|
|
296
|
+
const activeLink = new ComputedElement(
|
|
297
|
+
[{ source: url, placeholder: "{url}" }],
|
|
298
|
+
`${this.menuSelector} a[href="{url}"]`
|
|
299
|
+
);
|
|
300
|
+
activeLink.element(
|
|
301
|
+
new Patron(
|
|
302
|
+
new GroupActiveClass(
|
|
303
|
+
"active",
|
|
304
|
+
`${this.menuSelector} a`,
|
|
305
|
+
sourceOf(document)
|
|
306
|
+
)
|
|
307
|
+
)
|
|
308
|
+
);
|
|
309
|
+
pageLoading.value(
|
|
310
|
+
new Patron((isInLoading) => {
|
|
311
|
+
if (isInLoading) {
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
if (afterPageLoaded) {
|
|
315
|
+
afterPageLoaded();
|
|
316
|
+
}
|
|
317
|
+
const divDestination = document.querySelector(
|
|
318
|
+
this.navigationResultSelector
|
|
319
|
+
);
|
|
320
|
+
if (divDestination) {
|
|
321
|
+
divDestination.querySelectorAll("script").forEach((x) => {
|
|
322
|
+
const sc = document.createElement("script");
|
|
323
|
+
sc.setAttribute("type", "module");
|
|
324
|
+
sc.appendChild(document.createTextNode(x.innerText));
|
|
325
|
+
divDestination.appendChild(sc);
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
})
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
class Page {
|
|
334
|
+
constructor(title) {
|
|
335
|
+
this.title = title;
|
|
336
|
+
}
|
|
337
|
+
mounted() {
|
|
338
|
+
document.title = this.title;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
class EntryPointPage {
|
|
343
|
+
constructor(title, entryPointUrl) {
|
|
344
|
+
this.title = title;
|
|
345
|
+
this.entryPointUrl = entryPointUrl;
|
|
346
|
+
}
|
|
347
|
+
mounted() {
|
|
348
|
+
document.title = this.title;
|
|
349
|
+
import(this.entryPointUrl).then((module) => {
|
|
350
|
+
if (module.main) {
|
|
351
|
+
module.main();
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
export { ComputedElement, CurrentPage, EntryPointPage, GroupActiveClass, Input, Link, Navigation, Page, PageFetchTransport, RouteDisplay, Router, Text, Visible };
|
|
358
|
+
//# sourceMappingURL=patron-components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patron-components.js","sources":["../src/navigation/PageFetchTransport.ts","../src/navigation/Navigation.ts","../src/navigation/RouteDisplay.ts","../src/navigation/CurrentPage.ts","../src/controls/Input.ts","../src/controls/Visible.ts","../src/controls/Text.ts","../src/controls/Link.ts","../src/controls/ComputedElement.ts","../src/controls/GroupActiveClass.ts","../src/navigation/Router.ts","../src/page/Page.ts","../src/page/EntryPointPage.ts"],"sourcesContent":["import { give, GuestType } from \"patron-oop\";\n\nexport interface RoutePageTransportType {\n content(guest: GuestType<string>): void;\n}\n\n/**\n * Not needed anymore same thing in web api existed\n * @deprecated\n */\nexport class PageFetchTransport implements RoutePageTransportType {\n public constructor(\n private basePath: string,\n private template: string,\n ) {}\n\n public content(guest: GuestType<string>): void {\n fetch(this.basePath + \"/\" + this.template)\n .then((result) => {\n return result.text();\n })\n .then((result) => {\n give(result, guest);\n });\n }\n}\n","import {\n SourceAll,\n Patron,\n PrivateType,\n SourceType,\n value,\n give,\n SourceWithPoolType,\n} from \"patron-oop\";\nimport { RoutePageTransportType } from \"src/navigation/PageFetchTransport\";\nimport { RouteDisplayType } from \"src/navigation/RouteDisplay\";\nimport { RoutePageType } from \"src/navigation/RoutePageType\";\n\nexport interface RouteDocument {\n url: string;\n template: string;\n aliases?: string[];\n page: RoutePageType;\n default?: boolean;\n}\n\nexport class Navigation {\n public constructor(\n private loading: SourceWithPoolType<boolean>,\n private basePath: SourceType<string>,\n private currentPage: SourceWithPoolType<string>,\n private display: RouteDisplayType,\n private pageTransport: PrivateType<RoutePageTransportType>,\n ) {}\n\n public routes(routes: RouteDocument[]) {\n const defaultRoute = routes.find((route) => route.default);\n const all = new SourceAll<{\n basePath: string;\n currentPage: string;\n }>();\n value(this.basePath, new Patron(all.guestKey(\"basePath\")));\n value(this.currentPage, new Patron(all.guestKey(\"currentPage\")));\n\n all.value(\n new Patron(({ basePath, currentPage }) => {\n const urlWithoutBasePath = currentPage.replace(basePath, \"\");\n const routeMatchedToAlias = routes.find(\n (route) =>\n route.aliases &&\n (route.aliases.includes(currentPage) ||\n route.aliases.includes(urlWithoutBasePath)),\n );\n\n if (routeMatchedToAlias) {\n const correctUrl = basePath + routeMatchedToAlias.url;\n\n if (correctUrl !== currentPage) {\n give(correctUrl, this.currentPage);\n return;\n }\n }\n\n let route = routes.find((route) => {\n if (route.url.indexOf(\"*\") >= 0) {\n const regexp = new RegExp(\n route.url.replaceAll(\"*\", \".*\").replaceAll(\"/\", \"/\"),\n );\n return regexp.test(urlWithoutBasePath);\n }\n return route.url.replaceAll(\"*\", \"\") === urlWithoutBasePath;\n });\n\n if (!route && defaultRoute) {\n route = defaultRoute;\n }\n\n if (route) {\n const basePathWithoutHash = basePath\n .replace(\"/#\", \"\")\n .replace(\"#\", \"\")\n .replace(/[^/]+\\.html$/, \"\");\n give(true, this.loading);\n this.pageTransport\n .get(basePathWithoutHash, route.template)\n .content((templateContent) => {\n this.display.display(templateContent);\n route.page.mounted();\n give(false, this.loading);\n });\n } else {\n throw new Error(\"No matching route in Navigation\");\n }\n }),\n );\n }\n}\n","export interface RouteDisplayType {\n display(content: string): void;\n}\n\n/**\n * Renders content on selector\n * @deprecated move to web api\n */\nexport class RouteDisplay implements RouteDisplayType {\n public constructor(private selector: string) {}\n\n public display(content: string): void {\n const contentEl = document.querySelector(this.selector);\n if (contentEl) {\n contentEl.innerHTML = content;\n }\n }\n}\n","import { GuestType, SourceWithPool, SourceWithPoolType } from \"patron-oop\";\n\n/**\n * @deprecated move to web api\n */\nexport class CurrentPage implements SourceWithPoolType<string> {\n private source: SourceWithPoolType<string>;\n\n public constructor() {\n const correctUrl = location.href.replace(location.origin, \"\");\n this.source = new SourceWithPool(correctUrl);\n }\n\n public give(value: string): this {\n this.source.give(value);\n return this;\n }\n\n public value(guest: GuestType<string>) {\n this.source.value(guest);\n return guest;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestType, Patron, SourceWithPoolType } from \"patron-oop\";\n\ntype InputValue = number | string;\n\n/**\n * @deprecated move to web api\n */\nexport class Input implements SourceWithPoolType<InputValue> {\n public constructor(\n private source: SourceWithPoolType<InputValue>,\n selector: string,\n ) {\n const el = document.querySelector(selector) as HTMLInputElement;\n this.source.value(\n new Patron((value) => {\n el.value = String(value);\n }),\n );\n el.addEventListener(\"keyup\", () => {\n this.give(el.value);\n });\n el.addEventListener(\"change\", () => {\n this.give(el.value);\n });\n }\n\n public value(guest: GuestType<InputValue>) {\n this.source.value(guest);\n return this;\n }\n\n public give(value: InputValue) {\n this.source.give(value);\n return this;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestObjectType } from \"patron-oop\";\n\n/**\n * @deprecated move to web api\n */\nexport class Visible implements GuestObjectType<boolean> {\n public constructor(private selector: string) {}\n\n public give(isVisible: boolean): this {\n const el = document.querySelector(this.selector) as HTMLElement;\n if (el) {\n el.style.display = isVisible ? \"block\" : \"none\";\n }\n return this;\n }\n}\n","import { GuestObjectType } from \"patron-oop\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Text implements GuestObjectType {\n public constructor(private selector: string) {}\n\n public give(value: unknown) {\n const element = document.querySelector(this.selector) as HTMLElement;\n if (element) {\n element.innerText = String(value);\n }\n return this;\n }\n}\n","import { GuestObjectType, SourceType, value } from \"patron-oop\";\n\n/**\n * @deprecated move to web api\n */\nexport class Link {\n public constructor(\n private linkSource: GuestObjectType<string>,\n private basePath: SourceType<string>,\n ) {}\n\n public watchClick(selector: string, subselector?: string) {\n const wrapperEl = document.querySelectorAll(selector);\n if (wrapperEl.length) {\n wrapperEl.forEach((theElement) => {\n theElement.addEventListener(\"click\", (e) => {\n if (subselector) {\n theElement\n .querySelectorAll(subselector)\n .forEach((theSubElement) => {\n if (\n e?.target === theSubElement ||\n e?.currentTarget === theSubElement\n ) {\n this.handleClick({\n preventDefault: e.preventDefault.bind(e),\n target: theSubElement,\n } as unknown as Event);\n }\n });\n } else {\n this.handleClick(e);\n }\n });\n });\n } else {\n throw new Error(`Link wrapper not found for selector ${selector}`);\n }\n }\n\n private handleClick(e: Event) {\n let href = (e?.target as HTMLElement)?.getAttribute(\"href\");\n if (!href) {\n href = (e?.currentTarget as HTMLElement)?.getAttribute(\"href\");\n }\n if (href && href.indexOf(\"http\") !== 0) {\n e.preventDefault();\n value(this.basePath, (basePath) => {\n this.linkSource.give(basePath + href);\n });\n }\n }\n}\n","import {\n give,\n SourceAll,\n SourceObjectType,\n GuestCast,\n GuestType,\n} from \"patron-oop\";\n\ntype SourceDetailType = {\n source: SourceObjectType<any>;\n placeholder: string;\n};\n\n/**\n * @deprecated use https://kosukhin.github.io/patron-web-api/#/dom/element\n */\nexport class ComputedElement {\n public constructor(\n private sources: SourceDetailType[],\n private selectorTemplate: string,\n ) {}\n\n public element(guest: GuestType<HTMLElement>) {\n const chain = new SourceAll();\n this.sources.forEach((source) => {\n source.source.value(\n new GuestCast(guest as GuestType, chain.guestKey(source.placeholder)),\n );\n });\n\n chain.value(\n new GuestCast(\n guest as GuestType,\n (placeholders: Record<string, string>) => {\n let selectorTemplate = this.selectorTemplate;\n\n Object.entries(placeholders).map((entry) => {\n selectorTemplate = selectorTemplate.replaceAll(entry[0], entry[1]);\n });\n\n const element = document.querySelector(\n selectorTemplate,\n ) as HTMLElement;\n if (element) {\n give(element, guest);\n }\n },\n ),\n );\n }\n}\n","import { GuestObjectType, PatronOnce, SourceType, value } from \"patron-oop\";\n\n/**\n * Sets activeClass to one element of group\n * and resets activeClass on other group elements\n * suitable for menu active class\n *\n * @deprecated heavily related to web api needs refactoring\n */\nexport class GroupActiveClass implements GuestObjectType<HTMLElement> {\n public constructor(\n private activeClass: string,\n private groupSelector: string,\n private document: SourceType<Document>,\n ) {}\n\n public give(element: HTMLElement): this {\n value(\n this.document,\n new PatronOnce((document) => {\n document.querySelectorAll(this.groupSelector).forEach((el) => {\n el.classList.remove(this.activeClass);\n });\n element.classList.add(this.activeClass);\n }),\n );\n return this;\n }\n}\n","import {\n Source,\n SourceAll,\n GuestCast,\n Patron,\n PrivateClass,\n SourceWithPool,\n give,\n sourceOf,\n} from \"patron-oop\";\nimport { HistoryNewPage, HistoryPoppedPage } from \"patron-web-api\";\nimport { ComputedElement, GroupActiveClass, Link, Visible } from \"../controls\";\nimport { CurrentPage } from \"../navigation/CurrentPage\";\nimport { Navigation } from \"../navigation/Navigation\";\nimport { PageFetchTransport } from \"../navigation/PageFetchTransport\";\nimport { RouteDisplay } from \"../navigation/RouteDisplay\";\n\ntype Route = {\n url: string;\n template: string;\n aliases: string[];\n page: any;\n};\n\nexport class Router {\n public constructor(\n private loaderSelector: string,\n private navigationResultSelector: string,\n private menuSelector: string,\n ) {}\n\n routes(\n routes: Route[],\n currentPage: any,\n basePathSource: any,\n afterPageLoaded?: () => void,\n ) {\n if (!currentPage) {\n currentPage = new CurrentPage();\n }\n currentPage.value(new Patron(new HistoryNewPage()));\n\n const [basePath] = location.href.replace(location.origin, \"\").split(\"#\");\n if (!basePathSource) {\n basePathSource = new SourceWithPool(\n `${basePath}#`.replace(\"index.html\", \"\").replace(\"//\", \"/\"),\n );\n }\n\n const pageLoading = new SourceWithPool(false);\n pageLoading.value(new Patron(new Visible(this.loaderSelector)));\n\n const historyPoppedPage = new HistoryPoppedPage(currentPage);\n historyPoppedPage.watchPop();\n\n const navigation = new Navigation(\n pageLoading,\n basePathSource,\n currentPage,\n new RouteDisplay(this.navigationResultSelector),\n new PrivateClass(PageFetchTransport),\n );\n navigation.routes(routes);\n\n const link = new Link(currentPage, basePathSource);\n link.watchClick(this.menuSelector);\n\n const urlChain = new SourceAll<any>();\n basePathSource.value(new Patron(urlChain.guestKey(\"basePath\")));\n currentPage.value(new Patron(urlChain.guestKey(\"page\")));\n const url = new Source((guest) => {\n urlChain.value(\n new GuestCast(guest, ({ basePath, page }) => {\n give(page.replace(basePath, \"\"), guest);\n }),\n );\n });\n\n const activeLink = new ComputedElement(\n [{ source: url, placeholder: \"{url}\" }],\n `${this.menuSelector} a[href=\"{url}\"]`,\n );\n activeLink.element(\n new Patron(\n new GroupActiveClass(\n \"active\",\n `${this.menuSelector} a`,\n sourceOf(document),\n ),\n ),\n );\n\n pageLoading.value(\n new Patron((isInLoading) => {\n if (isInLoading) {\n return;\n }\n\n if (afterPageLoaded) {\n afterPageLoaded();\n }\n\n const divDestination = document.querySelector(\n this.navigationResultSelector,\n );\n if (divDestination) {\n // Оживляем script тэги\n divDestination.querySelectorAll(\"script\").forEach((x) => {\n const sc = document.createElement(\"script\");\n sc.setAttribute(\"type\", \"module\");\n sc.appendChild(document.createTextNode(x.innerText));\n divDestination.appendChild(sc);\n });\n }\n }),\n );\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Page implements RoutePageType {\n public constructor(private title: string) {}\n\n public mounted() {\n document.title = this.title;\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated not needed\n */\nexport class EntryPointPage implements RoutePageType {\n public constructor(\n private title: string,\n private entryPointUrl: string,\n ) {}\n\n public mounted() {\n document.title = this.title;\n import(this.entryPointUrl).then((module) => {\n if (module.main) {\n module.main();\n }\n });\n }\n}\n"],"names":["route","basePath"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(e,t,r){"use strict";class s{constructor(e,t){this.basePath=e,this.template=t}content(e){fetch(this.basePath+"/"+this.template).then((e=>e.text())).then((r=>{t.give(r,e)}))}}class n{constructor(e,t,r,s,n){this.loading=e,this.basePath=t,this.currentPage=r,this.display=s,this.pageTransport=n}routes(e){const r=e.find((e=>e.default)),s=new t.SourceAll;t.value(this.basePath,new t.Patron(s.guestKey("basePath"))),t.value(this.currentPage,new t.Patron(s.guestKey("currentPage"))),s.value(new t.Patron((({basePath:s,currentPage:n})=>{const o=n.replace(s,""),i=e.find((e=>e.aliases&&(e.aliases.includes(n)||e.aliases.includes(o))));if(i){const e=s+i.url;if(e!==n)return void t.give(e,this.currentPage)}let l=e.find((e=>{if(e.url.indexOf("*")>=0){return new RegExp(e.url.replaceAll("*",".*").replaceAll("/","/")).test(o)}return e.url.replaceAll("*","")===o}));if(!l&&r&&(l=r),!l)throw new Error("No matching route in Navigation");{const e=s.replace("/#","").replace("#","").replace(/[^/]+\.html$/,"");t.give(!0,this.loading),this.pageTransport.get(e,l.template).content((e=>{this.display.display(e),l.page.mounted(),t.give(!1,this.loading)}))}})))}}class o{constructor(e){this.selector=e}display(e){const t=document.querySelector(this.selector);t&&(t.innerHTML=e)}}var i=Object.defineProperty,l=(e,t,r)=>((e,t,r)=>t in e?i(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,t+"",r);class a{constructor(){l(this,"source");const e=location.href.replace(location.origin,"");this.source=new t.SourceWithPool(e)}give(e){return this.source.give(e),this}value(e){return this.source.value(e),e}pool(){return this.source.pool()}}class c{constructor(e){this.selector=e}give(e){const t=document.querySelector(this.selector);return t&&(t.style.display=e?"block":"none"),this}}class u{constructor(e,t){this.linkSource=e,this.basePath=t}watchClick(e,t){const r=document.querySelectorAll(e);if(!r.length)throw new Error(`Link wrapper not found for selector ${e}`);r.forEach((e=>{e.addEventListener("click",(r=>{t?e.querySelectorAll(t).forEach((e=>{r?.target!==e&&r?.currentTarget!==e||this.handleClick({preventDefault:r.preventDefault.bind(r),target:e})})):this.handleClick(r)}))}))}handleClick(e){let r=e?.target?.getAttribute("href");r||(r=e?.currentTarget?.getAttribute("href")),r&&0!==r.indexOf("http")&&(e.preventDefault(),t.value(this.basePath,(e=>{this.linkSource.give(e+r)})))}}class h{constructor(e,t){this.sources=e,this.selectorTemplate=t}element(e){const r=new t.SourceAll;this.sources.forEach((s=>{s.source.value(new t.GuestCast(e,r.guestKey(s.placeholder)))})),r.value(new t.GuestCast(e,(r=>{let s=this.selectorTemplate;Object.entries(r).map((e=>{s=s.replaceAll(e[0],e[1])}));const n=document.querySelector(s);n&&t.give(n,e)})))}}class p{constructor(e,t,r){this.activeClass=e,this.groupSelector=t,this.document=r}give(e){return t.value(this.document,new t.PatronOnce((t=>{t.querySelectorAll(this.groupSelector).forEach((e=>{e.classList.remove(this.activeClass)})),e.classList.add(this.activeClass)}))),this}}e.ComputedElement=h,e.CurrentPage=a,e.EntryPointPage=class{constructor(e,t){this.title=e,this.entryPointUrl=t}mounted(){document.title=this.title,import(this.entryPointUrl).then((e=>{e.main&&e.main()}))}},e.GroupActiveClass=p,e.Input=class{constructor(e,r){this.source=e;const s=document.querySelector(r);this.source.value(new t.Patron((e=>{s.value=String(e)}))),s.addEventListener("keyup",(()=>{this.give(s.value)})),s.addEventListener("change",(()=>{this.give(s.value)}))}value(e){return this.source.value(e),this}give(e){return this.source.give(e),this}pool(){return this.source.pool()}},e.Link=u,e.Navigation=n,e.Page=class{constructor(e){this.title=e}mounted(){document.title=this.title}},e.PageFetchTransport=s,e.RouteDisplay=o,e.Router=class{constructor(e,t,r){this.loaderSelector=e,this.navigationResultSelector=t,this.menuSelector=r}routes(e,i,l,g){i||(i=new a),i.value(new t.Patron(new r.HistoryNewPage));const[d]=location.href.replace(location.origin,"").split("#");l||(l=new t.SourceWithPool(`${d}#`.replace("index.html","").replace("//","/")));const v=new t.SourceWithPool(!1);v.value(new t.Patron(new c(this.loaderSelector)));new r.HistoryPoppedPage(i).watchPop();new n(v,l,i,new o(this.navigationResultSelector),new t.PrivateClass(s)).routes(e);new u(i,l).watchClick(this.menuSelector);const w=new t.SourceAll;l.value(new t.Patron(w.guestKey("basePath"))),i.value(new t.Patron(w.guestKey("page")));const P=new t.Source((e=>{w.value(new t.GuestCast(e,(({basePath:r,page:s})=>{t.give(s.replace(r,""),e)})))}));new h([{source:P,placeholder:"{url}"}],`${this.menuSelector} a[href="{url}"]`).element(new t.Patron(new p("active",`${this.menuSelector} a`,t.sourceOf(document)))),v.value(new t.Patron((e=>{if(e)return;g&&g();const t=document.querySelector(this.navigationResultSelector);t&&t.querySelectorAll("script").forEach((e=>{const r=document.createElement("script");r.setAttribute("type","module"),r.appendChild(document.createTextNode(e.innerText)),t.appendChild(r)}))})))}},e.Text=class{constructor(e){this.selector=e}give(e){const t=document.querySelector(this.selector);return t&&(t.innerText=String(e)),this}},e.Visible=c}({},patronOop,patronWebApi);
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{give as e,SourceAll as t,value as r,Patron as s,SourceWithPool as n,GuestCast as o,PatronOnce as c,PrivateClass as i,Source as l,sourceOf as a}from"patron-oop";import{HistoryNewPage as u,HistoryPoppedPage as h}from"patron-web-api";class p{constructor(e,t){this.basePath=e,this.template=t}content(t){fetch(this.basePath+"/"+this.template).then((e=>e.text())).then((r=>{e(r,t)}))}}class d{constructor(e,t,r,s,n){this.loading=e,this.basePath=t,this.currentPage=r,this.display=s,this.pageTransport=n}routes(n){const o=n.find((e=>e.default)),c=new t;r(this.basePath,new s(c.guestKey("basePath"))),r(this.currentPage,new s(c.guestKey("currentPage"))),c.value(new s((({basePath:t,currentPage:r})=>{const s=r.replace(t,""),c=n.find((e=>e.aliases&&(e.aliases.includes(r)||e.aliases.includes(s))));if(c){const s=t+c.url;if(s!==r)return void e(s,this.currentPage)}let i=n.find((e=>{if(e.url.indexOf("*")>=0){return new RegExp(e.url.replaceAll("*",".*").replaceAll("/","/")).test(s)}return e.url.replaceAll("*","")===s}));if(!i&&o&&(i=o),!i)throw new Error("No matching route in Navigation");{const r=t.replace("/#","").replace("#","").replace(/[^/]+\.html$/,"");e(!0,this.loading),this.pageTransport.get(r,i.template).content((t=>{this.display.display(t),i.page.mounted(),e(!1,this.loading)}))}})))}}class g{constructor(e){this.selector=e}display(e){const t=document.querySelector(this.selector);t&&(t.innerHTML=e)}}var v=Object.defineProperty,m=(e,t,r)=>((e,t,r)=>t in e?v(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,t+"",r);class w{constructor(){m(this,"source");const e=location.href.replace(location.origin,"");this.source=new n(e)}give(e){return this.source.give(e),this}value(e){return this.source.value(e),e}pool(){return this.source.pool()}}class f{constructor(e,t){this.source=e;const r=document.querySelector(t);this.source.value(new s((e=>{r.value=String(e)}))),r.addEventListener("keyup",(()=>{this.give(r.value)})),r.addEventListener("change",(()=>{this.give(r.value)}))}value(e){return this.source.value(e),this}give(e){return this.source.give(e),this}pool(){return this.source.pool()}}class y{constructor(e){this.selector=e}give(e){const t=document.querySelector(this.selector);return t&&(t.style.display=e?"block":"none"),this}}class S{constructor(e){this.selector=e}give(e){const t=document.querySelector(this.selector);return t&&(t.innerText=String(e)),this}}class b{constructor(e,t){this.linkSource=e,this.basePath=t}watchClick(e,t){const r=document.querySelectorAll(e);if(!r.length)throw new Error(`Link wrapper not found for selector ${e}`);r.forEach((e=>{e.addEventListener("click",(r=>{t?e.querySelectorAll(t).forEach((e=>{r?.target!==e&&r?.currentTarget!==e||this.handleClick({preventDefault:r.preventDefault.bind(r),target:e})})):this.handleClick(r)}))}))}handleClick(e){let t=e?.target?.getAttribute("href");t||(t=e?.currentTarget?.getAttribute("href")),t&&0!==t.indexOf("http")&&(e.preventDefault(),r(this.basePath,(e=>{this.linkSource.give(e+t)})))}}class P{constructor(e,t){this.sources=e,this.selectorTemplate=t}element(r){const s=new t;this.sources.forEach((e=>{e.source.value(new o(r,s.guestKey(e.placeholder)))})),s.value(new o(r,(t=>{let s=this.selectorTemplate;Object.entries(t).map((e=>{s=s.replaceAll(e[0],e[1])}));const n=document.querySelector(s);n&&e(n,r)})))}}class E{constructor(e,t,r){this.activeClass=e,this.groupSelector=t,this.document=r}give(e){return r(this.document,new c((t=>{t.querySelectorAll(this.groupSelector).forEach((e=>{e.classList.remove(this.activeClass)})),e.classList.add(this.activeClass)}))),this}}class k{constructor(e,t,r){this.loaderSelector=e,this.navigationResultSelector=t,this.menuSelector=r}routes(r,c,v,m){c||(c=new w),c.value(new s(new u));const[f]=location.href.replace(location.origin,"").split("#");v||(v=new n(`${f}#`.replace("index.html","").replace("//","/")));const S=new n(!1);S.value(new s(new y(this.loaderSelector)));new h(c).watchPop();new d(S,v,c,new g(this.navigationResultSelector),new i(p)).routes(r);new b(c,v).watchClick(this.menuSelector);const k=new t;v.value(new s(k.guestKey("basePath"))),c.value(new s(k.guestKey("page")));const A=new l((t=>{k.value(new o(t,(({basePath:r,page:s})=>{e(s.replace(r,""),t)})))}));new P([{source:A,placeholder:"{url}"}],`${this.menuSelector} a[href="{url}"]`).element(new s(new E("active",`${this.menuSelector} a`,a(document)))),S.value(new s((e=>{if(e)return;m&&m();const t=document.querySelector(this.navigationResultSelector);t&&t.querySelectorAll("script").forEach((e=>{const r=document.createElement("script");r.setAttribute("type","module"),r.appendChild(document.createTextNode(e.innerText)),t.appendChild(r)}))})))}}class A{constructor(e){this.title=e}mounted(){document.title=this.title}}class q{constructor(e,t){this.title=e,this.entryPointUrl=t}mounted(){document.title=this.title,import(this.entryPointUrl).then((e=>{e.main&&e.main()}))}}export{P as ComputedElement,w as CurrentPage,q as EntryPointPage,E as GroupActiveClass,f as Input,b as Link,d as Navigation,A as Page,p as PageFetchTransport,g as RouteDisplay,k as Router,S as Text,y as Visible};
|
|
2
|
+
//# sourceMappingURL=patron-components.min.mjs.map
|