UNPKG

@nent/core

Version:

Functional elements to add routing, data-binding, dynamic HTML, declarative actions, audio, video, and so much more. Supercharge static HTML files into web apps without script or builds.

4 lines 6.29 kB
/*! * NENT 2022 */ import{r as t,h as i,a as s,H as n}from"./index-916ca544.js";import{a as e,e as o}from"./index-f7016b94.js";import{f as h,e as a,w as r}from"./logging-5a93c8af.js";import{a as l}from"./state-27a8a5bc.js";import{R as d}from"./interfaces-3b78db83.js";import{s as c}from"./state-adf07580.js";import{a as u,s as m}from"./elements-4818d39b.js";import{A as v}from"./interfaces-837cdb60.js";import{A as p,b as f}from"./interfaces-89f61157.js";import{T as b}from"./interfaces-aed4a5ac.js";import"./index-4bfabbbd.js";function g(t,i,s,n){null==i||i.forEach((t=>{t.start>-1&&s>=t.start&&(!(t.end>-1)||s<t.end)&&(t.classIn&&!t.element.classList.contains(t.classIn)&&t.element.classList.add(t.classIn),t.element.hasAttribute("hidden")&&t.element.removeAttribute("hidden")),t.end>-1&&s>=t.end&&(t.classIn&&t.element.classList.contains(t.classIn)&&t.element.classList.remove(t.classIn),t.classOut?t.element.classList.contains(t.classOut)||t.element.classList.add(t.classOut):t.element.hasAttribute("hidden")||t.element.setAttribute("hidden",""))}));const e=t.querySelectorAll("[n-time-to]");null==e||e.forEach((t=>{const i=s,n=t.getAttribute("n-time-to");n?t.setAttribute(n,i.toString()):(t.childNodes.forEach((t=>t.remove())),t.append(document.createTextNode(i.toString())))}));const o=t.querySelectorAll("[n-percentage-to]");null==o||o.forEach((t=>{const i=t.getAttribute("n-percentage-to");i?t.setAttribute(i,n.toFixed(2)):(t.childNodes.forEach((t=>t.remove())),t.append(document.createTextNode(`${Math.round(100*n)}%`)))}))}class j{constructor(t,i,s=!1,n=null,e=null,o=!1){this.el=t,this.timeEmitter=i,this.elements=s,this.analyticsEvent=n,this.onEnd=e,this.debug=o,this.timedNodes=[],this.activatedActions=[],this.elements&&(this.timedNodes=function(t,i){var s;const n=[];return null===(s=t.querySelectorAll("[n-in-time], [n-out-time]"))||void 0===s||s.forEach((t=>{const s=t.getAttribute("n-in-time"),e=s?Number.parseFloat(s):0,o=t.getAttribute("n-out-time"),h=o?Number.parseFloat(o):i;n.push({start:e,end:h,classIn:t.getAttribute("n-in-class"),classOut:t.getAttribute("n-out-class"),element:t})})),n}(this.el,this.timeEmitter.durationSeconds),h(this.debug,`presentation: found ${this.timedNodes.length} timed-child elements`)),h(this.debug,"presentation: service created")}get actionActivators(){return Array.from(this.el.querySelectorAll("n-action-activator"))}get actions(){return Array.from(this.el.querySelectorAll("n-presentation-action")).map((t=>t))}async handleInterval(t){this.elements&&g(this.el,this.timedNodes,t.elapsedSeconds,t.percentage),this.analyticsEvent&&e.emit(p,{topic:p,command:f.SendViewTime,data:{event:this.analyticsEvent,time:t}}),await u(this.actionActivators,v.AtTime,(i=>!this.activatedActions.includes(i)&&!!(i.time&&t.elapsedSeconds>=i.time)&&(this.activatedActions.push(i),!0))),await m(this.actions,(i=>i.time&&t.elapsedSeconds>=i.time))}async handleEnded(t){var i;this.elements&&g(this.el,this.timedNodes,t.elapsedSeconds,t.percentage),await u(this.actionActivators,v.AtTimeEnd),await m(this.actions,(t=>"end"==t.time)),null===(i=this.onEnd)||void 0===i||i.call(this)}subscribe(){this.intervalSubscription=this.timeEmitter.on(b.OnInterval,(t=>{this.handleInterval(t).catch((t=>a(t)))})),this.endSubscription=this.timeEmitter.on(b.OnEnd,(t=>{h(this.debug,"presentation: ended"),this.handleEnded(t).catch((t=>a(t)))}))}unsubscribe(){var t,i;this.elements&&function(t,i){null==i||i.forEach((t=>{t.classIn&&t.element.classList.contains(t.classIn)&&t.element.classList.remove(t.classIn),t.classOut&&t.element.classList.contains(t.classOut)&&t.element.classList.remove(t.classOut)}));const s=t.querySelectorAll("[n-time-to]");null==s||s.forEach((t=>{const i=t.getAttribute("n-time-to");i?t.setAttribute(i,"0"):(t.childNodes.forEach((t=>t.remove())),t.append(document.createTextNode("0")))}));const n=t.querySelectorAll("[n-percentage-to]");null==n||n.forEach((t=>{const i=t.getAttribute("n-percentage-to");i?t.setAttribute(i,"0"):(t.childNodes.forEach((t=>t.remove())),t.append(document.createTextNode("100%")))}))}(this.el,this.timedNodes),null===(t=this.intervalSubscription)||void 0===t||t.call(this),null===(i=this.endSubscription)||void 0===i||i.call(this)}}const w=class{constructor(i){t(this,i),this.elementWithTimer=null,this.timer=null,this.timerElement=null,this.debug=!1,this.nextAfter=!1}get currentRoute(){var t;const i=this.el.closest("n-view-prompt")||this.el.closest("n-view");return i?i.route:(null===(t=c.router)||void 0===t?void 0:t.exactRoute)||null}componentWillLoad(){h(this.debug,"n-presentation: loading");let t=this.timerElement?this.el.querySelector(this.timerElement)||this.el.ownerDocument.querySelector(this.timerElement)||null:this.el.querySelector("n-presentation-timer")||this.el.ownerDocument.querySelector("n-presentation-timer")||this.el.querySelector("n-video")||this.el.ownerDocument.querySelector("n-video")||null;this.elementWithTimer=t||null,null!=this.elementWithTimer?this.elementWithTimer.addEventListener("ready",(()=>{var t,i,s,n;h(this.debug,"n-presentation: element ready"),this.timer=this.elementWithTimer.timer,this.presentation=new j(this.el,this.timer,l.elementsEnabled,this.analyticsEvent,(()=>{var t;this.currentRoute&&this.nextAfter&&(null===(t=this.presentation)||void 0===t||t.unsubscribe(),"string"==typeof this.nextAfter?this.currentRoute.router.goToRoute(this.nextAfter):this.currentRoute.router.goNext())}),this.debug),this.currentRoute?(h(this.debug,`n-presentation: syncing to route ${this.currentRoute.path}`),(null===(i=null===(t=this.currentRoute)||void 0===t?void 0:t.match)||void 0===i?void 0:i.isExact)&&(null===(s=this.presentation)||void 0===s||s.subscribe()),this.navigationSubscription=o.on(d.RouteChanged,(()=>{var t,i,s,n;(null===(i=null===(t=this.currentRoute)||void 0===t?void 0:t.match)||void 0===i?void 0:i.isExact)?null===(s=this.presentation)||void 0===s||s.subscribe():null===(n=this.presentation)||void 0===n||n.unsubscribe()}))):null===(n=this.presentation)||void 0===n||n.subscribe()})):r("n-presentation: no timer element found")}render(){return i(n,null)}disconnectedCallback(){var t,i;null===(t=this.presentation)||void 0===t||t.unsubscribe(),null===(i=this.navigationSubscription)||void 0===i||i.call(this)}get el(){return s(this)}};export{w as n_presentation}