@nent/core
Version:
4 lines • 4.21 kB
JavaScript
/*!
* NENT 2022
*/
import{r as t,h as i,H as s,a as n}from"./index-916ca544.js";import{f as e,w as o}from"./logging-5a93c8af.js";import{c as h,r as a}from"./remote-0f753d9a.js";import{D as r}from"./interfaces-8c5cd1b8.js";import{s as l}from"./state-adf07580.js";import{a as c}from"./state-27a8a5bc.js";import{V as d,h as v,m}from"./visits-b52975ad.js";import{s as u}from"./strings-47d55561.js";import{C as p}from"./state-subscriber-eb44164a.js";import"./tokens-78f8cdbe.js";import"./factory-acbf0d3d.js";import"./index-f7016b94.js";import"./index-4bfabbbd.js";import"./values-ddfac998.js";import"./promises-584c4ece.js";import"./mutex-e5645c85.js";import"./memory-0d63dacd.js";const w=class{constructor(i){t(this,i),this.match=null,this.exactMatch=!1,this.srcElement=null,this.contentElement=null,this.pageTitle="",this.pageDescription="",this.pageKeywords="",this.pageRobots="all",this.scrollTopOffset=0,this.exact=!1,this.mode="cors",this.resolveTokens=!1,this.debug=!1,this.noCache=!1}async getChildren(){return{activators:this.route.actionActivators,views:this.childViews,dos:this.childPrompts}}get parent(){var t;return(null===(t=this.el.parentElement)||void 0===t?void 0:t.closest("n-view"))||null}get childPrompts(){return Array.from(this.el.querySelectorAll("n-view-prompt")||[]).filter((t=>this.route.isChild(t)))}get childViews(){return Array.from(this.el.querySelectorAll("n-view")||[]).filter((t=>this.route.isChild(t)))}async componentWillLoad(){e(this.debug,`n-view: ${this.path} loading`),this.contentKey=`rem-content-${u(this.contentSrc||"none")}`,this.srcKey=`rem-source-${u(this.src||"none")}`,l.router?(this.route=l.router.createRoute(this.el,this.parent,(t=>{this.match=t?Object.assign({},t):null,this.exactMatch=(null==t?void 0:t.isExact)||!1})),c.dataEnabled&&this.resolveTokens&&(this.dataSubscription=new p(this,"dataEnabled",r.DataChanged))):o(`n-view: ${this.path} cannot load outside of an n-views element`)}async componentWillRender(){var t;if(e(this.debug,`n-view: ${this.path} will render`),this.match&&(e(this.debug,`n-view: ${this.path} route is matched `),this.src&&null==this.srcElement&&(this.srcElement=await h(window,this.src,this.mode,this.srcKey,this.resolveTokens),a(this.el,`#${this.srcKey}`,this.srcElement)),e(this.debug,`n-view: ${this.path} found ${this.childViews.length} child views and ${this.childPrompts.length} child view-prompts`),this.match.isExact)){e(this.debug,`n-view: ${this.path} route exactly matched `);const i=this.childPrompts.map((t=>{const{path:i,when:s,visit:n}=t;return{path:this.route.normalizeChildUrl(i),when:s,visit:n}})),s=await async function(t){const i=await Promise.all(t.map((t=>async function(t){let{when:i,path:s,visit:n=d.once}=t,e=await v(s);if(c.dataEnabled&&i){const{evaluatePredicate:t}=await import("./expressions-2c27c47c.js").then((function(t){return t.f}));await t(i)?(n=d.once,e=!1):n=d.optional}return{when:i,visit:n,visited:e,path:s}}(t))));return await async function(t){return t.filter((t=>t.visit!==d.optional)).find((t=>0==t.visited))||null}(i)}(i);if(s)return void this.route.replaceWithRoute(s.path);this.contentSrc&&null==this.contentElement&&(this.contentElement=await h(window,this.contentSrc,this.mode,this.contentKey,this.resolveTokens,"content")),m(null===(t=this.match)||void 0===t?void 0:t.url)}}render(){return e(this.debug,`n-view: ${this.path} render`),a(this.el,`#${this.contentKey}`,this.contentElement),i(s,null,i("slot",null),i("slot",{name:"content"}))}async componentDidRender(){var t,i,s,n;(null===(i=null===(t=this.route)||void 0===t?void 0:t.match)||void 0===i?void 0:i.isExact)||(null===(s=this.contentElement)||void 0===s||s.remove(),this.noCache&&(this.contentElement=null)),await(null===(n=this.route)||void 0===n?void 0:n.loadCompleted())}disconnectedCallback(){var t,i;null===(t=this.dataSubscription)||void 0===t||t.destroy(),null===(i=this.route)||void 0===i||i.destroy()}get el(){return n(this)}};w.style=":host{display:none}:host(.active){display:block}:host(.active) ::slotted([slot='content']),:host(.active) div[slot='content']{display:none}:host(.exact){display:block}:host(.exact) ::slotted([slot='content']),:host(.exact) div[slot='content']{display:block}";export{w as n_view}