{"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\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 */\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\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\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\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\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\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\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 */\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\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\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":"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"}