@brandup/ui-app 1.0.44 → 2.0.2

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.
Files changed (39) hide show
  1. package/README.md +7 -4
  2. package/dist/cjs/app.js +397 -0
  3. package/dist/cjs/app.js.map +1 -0
  4. package/dist/cjs/builder.js +53 -0
  5. package/dist/cjs/builder.js.map +1 -0
  6. package/dist/cjs/constants.js +21 -0
  7. package/dist/cjs/constants.js.map +1 -0
  8. package/dist/cjs/ext.js +39 -0
  9. package/dist/cjs/ext.js.map +1 -0
  10. package/dist/cjs/helpers/url.js +206 -0
  11. package/dist/cjs/helpers/url.js.map +1 -0
  12. package/dist/cjs/index.js +11 -760
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/middlewares/hyperlink.js +75 -0
  15. package/dist/cjs/middlewares/hyperlink.js.map +1 -0
  16. package/dist/cjs/middlewares/invoker.js +55 -0
  17. package/dist/cjs/middlewares/invoker.js.map +1 -0
  18. package/dist/cjs/middlewares/state.js +86 -0
  19. package/dist/cjs/middlewares/state.js.map +1 -0
  20. package/dist/mjs/app.js +393 -0
  21. package/dist/mjs/app.js.map +1 -0
  22. package/dist/mjs/builder.js +51 -0
  23. package/dist/mjs/builder.js.map +1 -0
  24. package/dist/mjs/constants.js +17 -0
  25. package/dist/mjs/constants.js.map +1 -0
  26. package/dist/mjs/ext.js +37 -0
  27. package/dist/mjs/ext.js.map +1 -0
  28. package/dist/mjs/helpers/url.js +202 -0
  29. package/dist/mjs/helpers/url.js.map +1 -0
  30. package/dist/mjs/index.js +7 -759
  31. package/dist/mjs/index.js.map +1 -1
  32. package/dist/mjs/middlewares/hyperlink.js +70 -0
  33. package/dist/mjs/middlewares/hyperlink.js.map +1 -0
  34. package/dist/mjs/middlewares/invoker.js +53 -0
  35. package/dist/mjs/middlewares/invoker.js.map +1 -0
  36. package/dist/mjs/middlewares/state.js +81 -0
  37. package/dist/mjs/middlewares/state.js.map +1 -0
  38. package/dist/types.d.ts +155 -7
  39. package/package.json +11 -4
@@ -0,0 +1,393 @@
1
+ import { UIElement, initUICommands } from '@brandup/ui';
2
+ import { MiddlewareInvoker } from './middlewares/invoker.js';
3
+ import { enableNavExtensions } from './ext.js';
4
+ import StateMiddlewareFactory from './middlewares/state.js';
5
+ import HyperLinkMiddlewareFactory from './middlewares/hyperlink.js';
6
+ import urlHelper from './helpers/url.js';
7
+ import result from './constants.js';
8
+ import { Guid } from '@brandup/ui-helpers';
9
+
10
+ /** Type name of the base {@link Application} class. */
11
+ const APP_TYPENAME = "brandup-ui-app";
12
+ /** Reason value thrown when a navigation is overridden (e.g. by a redirect). */
13
+ const NAV_OVERIDE_ERROR = "NavigationOveride";
14
+ /**
15
+ * Base application class.
16
+ */
17
+ class Application extends UIElement {
18
+ /** Application environment. */
19
+ env;
20
+ /** Application model. */
21
+ model;
22
+ /** Application middleware invoker. */
23
+ invoker;
24
+ __abort;
25
+ __isInited;
26
+ __isRuned;
27
+ __middlewares = {};
28
+ __globalSubmit;
29
+ __onPopStateHandler;
30
+ __execNav; // current navigation invoking
31
+ __lastNav; // last success navigation
32
+ /**
33
+ * @param env Application environment.
34
+ * @param model Application model.
35
+ */
36
+ constructor(env, model, ..._args) {
37
+ super();
38
+ this.env = env;
39
+ this.model = model;
40
+ const core = { name: "app-root" };
41
+ this.invoker = new MiddlewareInvoker(core);
42
+ this.__abort = new AbortController();
43
+ }
44
+ /** Type name of the application. */
45
+ get typeName() { return APP_TYPENAME; }
46
+ /** Current navigation context. */
47
+ get current() { return this.__lastNav?.context; }
48
+ /** Application destroy signal. */
49
+ get abort() { return this.__abort.signal; }
50
+ /** @internal */
51
+ initialize(middlewares) {
52
+ if (this.__isInited)
53
+ throw new Error('Application already initialized.');
54
+ this.__isInited = true;
55
+ this.onInitialize();
56
+ middlewares.forEach(middleware => {
57
+ const name = middleware.name;
58
+ if (this.__middlewares.hasOwnProperty(name))
59
+ throw new Error(`Middleware "${name}" already registered.`);
60
+ this.__middlewares[name] = middleware;
61
+ this.invoker.next(middleware);
62
+ });
63
+ }
64
+ /**
65
+ * Initialize application instance. Override to register additional middlewares.
66
+ * Registers the built-in state and hyperlink middlewares by default.
67
+ */
68
+ onInitialize() {
69
+ this.invoker.next(StateMiddlewareFactory());
70
+ this.invoker.next(HyperLinkMiddlewareFactory());
71
+ }
72
+ /**
73
+ * Called at the beginning of application run, before middlewares start.
74
+ * Override to perform async setup work.
75
+ * @returns Promise resolved when starting work is complete.
76
+ */
77
+ onStarting() { return Promise.resolve(); }
78
+ /**
79
+ * Called after the application has fully started.
80
+ * Override to perform async work after start.
81
+ * @returns Promise resolved when post-start work is complete.
82
+ */
83
+ onStared() { return Promise.resolve(); }
84
+ /**
85
+ * Get registered middleware by its unique name.
86
+ * @param name Unique name of middleware.
87
+ * @returns Middleware instance.
88
+ */
89
+ middleware(name) {
90
+ this.__abort.signal.throwIfAborted();
91
+ const middleware = this.__middlewares[name];
92
+ if (!middleware)
93
+ throw new Error(`Middleware ${name} is not registered.`);
94
+ return middleware;
95
+ }
96
+ /**
97
+ * Run application.
98
+ * @param contextData Run context data.
99
+ * @param element HTMLElement of application. Default is document.body.
100
+ * @returns Promise of runned result.
101
+ */
102
+ async run(contextData, element) {
103
+ if (this.__abort.signal.aborted)
104
+ throw new Error('Application is destroyed.');
105
+ if (this.__isRuned)
106
+ throw new Error('Application already run.');
107
+ this.__isRuned = true;
108
+ if (!contextData)
109
+ contextData = {};
110
+ // register the global command click handler and the nav HTMLElement helpers
111
+ // (both opt-in now; no-op if already enabled or no DOM)
112
+ initUICommands();
113
+ enableNavExtensions();
114
+ element = element || document.body;
115
+ this.setElement(element);
116
+ const context = {
117
+ abort: this.__abort.signal,
118
+ app: this,
119
+ data: contextData
120
+ };
121
+ try {
122
+ await this.onStarting();
123
+ await this.invoker.invoke("start", context);
124
+ console.info("app start success");
125
+ this.__abort.signal.throwIfAborted();
126
+ await this.invoker.invoke("loaded", context);
127
+ console.info("app load success");
128
+ this.__abort.signal.throwIfAborted();
129
+ window.addEventListener("popstate", this.__onPopStateHandler = (e) => this.__onPopState(context, e));
130
+ element.addEventListener("submit", this.__globalSubmit = (e) => {
131
+ const form = e.target;
132
+ if (!form.classList.contains(result.FormClassName))
133
+ return;
134
+ e.preventDefault();
135
+ this.__onSubmit({ form, button: e.submitter instanceof HTMLButtonElement ? e.submitter : null })
136
+ .catch(() => { });
137
+ }, false);
138
+ }
139
+ catch (reason) {
140
+ console.error(`app run error: ${reason}`);
141
+ throw reason;
142
+ }
143
+ // Run the first navigation before onStared(): its navigate middleware always
144
+ // closes the startup loading state (in a finally, even on error), so the app
145
+ // can never get stuck "loading" if onStared throws.
146
+ try {
147
+ await this.nav({ data: context.data, abort: this.__abort.signal });
148
+ }
149
+ catch (reason) {
150
+ if (reason !== NAV_OVERIDE_ERROR)
151
+ throw reason;
152
+ console.info(`app run nav overided`);
153
+ }
154
+ await this.onStared();
155
+ console.info("app runned");
156
+ return context;
157
+ }
158
+ /**
159
+ * Navigate application to url.
160
+ * @param options Navigate options.
161
+ * @returns Promise of navigated result.
162
+ */
163
+ async nav(options) {
164
+ const opt = (!options || typeof options === "string") ? { url: options } : options;
165
+ let { url = null, query, replace = false, scope = null, data = {}, abort } = opt;
166
+ const navUrl = urlHelper.parseUrl(this.env.basePath, url);
167
+ if (query)
168
+ urlHelper.extendQuery(navUrl, query);
169
+ let isFirst = !this.__lastNav && !this.__execNav;
170
+ let action;
171
+ if (isFirst)
172
+ action = "first";
173
+ else {
174
+ const isChangedUrl = this.__lastNav?.context.url.toLowerCase() !== navUrl.url.toLowerCase();
175
+ const hasHash = !!navUrl.hash;
176
+ if (isChangedUrl)
177
+ action = "url-change"; // url changed
178
+ else
179
+ action = hasHash ? "hash" : "url-no-change";
180
+ }
181
+ const base = this.__beginNav(abort);
182
+ const context = {
183
+ ...this.__createContext(base, navUrl, isFirst ? "first" : "nav", action, data, replace),
184
+ scope
185
+ };
186
+ const currentNav = { method: "navigate", context, abort: base.navAbort, status: "work" };
187
+ return await this.__execNavigate(currentNav, base.parentNav);
188
+ }
189
+ /**
190
+ * Reload page with nav.
191
+ */
192
+ reload() {
193
+ this.__abort.signal.throwIfAborted();
194
+ return this.nav({ replace: true });
195
+ }
196
+ /**
197
+ * Global reload page in browser.
198
+ */
199
+ restart() {
200
+ this.__abort.signal.throwIfAborted();
201
+ window.location.reload();
202
+ }
203
+ /**
204
+ * Destroy application: abort pending navigations, run the middleware "stop" chain and release listeners.
205
+ * @param contextData Stop context data.
206
+ * @returns Promise of the stop context.
207
+ */
208
+ async destroy(contextData) {
209
+ if (this.__abort.signal.aborted)
210
+ return Promise.reject(new Error('Application already destroyed.'));
211
+ this.__abort.abort();
212
+ console.info("app destroy begin");
213
+ if (this.__execNav)
214
+ this.__execNav.abort.abort();
215
+ if (this.__lastNav)
216
+ this.__lastNav.abort.abort();
217
+ if (this.__globalSubmit)
218
+ this.element?.removeEventListener("submit", this.__globalSubmit);
219
+ if (this.__onPopStateHandler)
220
+ window.removeEventListener("popstate", this.__onPopStateHandler);
221
+ const destroyAbort = new AbortController();
222
+ const context = {
223
+ abort: destroyAbort.signal,
224
+ app: this,
225
+ data: contextData || {}
226
+ };
227
+ try {
228
+ await this.invoker.invoke("stop", context);
229
+ console.info("app destroy success");
230
+ return context;
231
+ }
232
+ catch (reason) {
233
+ console.error(`app destroy error: ${reason}`);
234
+ throw reason;
235
+ }
236
+ finally {
237
+ super.destroy();
238
+ }
239
+ }
240
+ /**
241
+ * Generate url of application base url.
242
+ * @param path Add optional path of base url.
243
+ * @param query Add optional query params.
244
+ * @param hash Add optional hash.
245
+ * @returns Relative url with base path.
246
+ */
247
+ buildUrl(path, query, hash) {
248
+ this.__abort.signal.throwIfAborted();
249
+ return urlHelper.buildUrl(this.env.basePath, path, query, hash);
250
+ }
251
+ async __onSubmit(options) {
252
+ const opt = options instanceof HTMLFormElement ? { form: options } : options;
253
+ const { form, button = null, query, data = {} } = opt;
254
+ if ((!button || !button.formNoValidate) && !form.checkValidity())
255
+ throw new Error('Form is invalid.');
256
+ // guard before applying any loading class, otherwise a rejected re-entrant
257
+ // submit would leave the button stuck in the loading state
258
+ if (form.classList.contains(result.LoadingElementClass))
259
+ throw new Error('Form already submitting.');
260
+ let replace = form.hasAttribute(result.NavUrlReplaceAttributeName);
261
+ let method = form.method;
262
+ let enctype = form.enctype;
263
+ let url = form.action;
264
+ if (button) {
265
+ if (button.hasAttribute("formmethod"))
266
+ method = button.formMethod;
267
+ if (button.hasAttribute("formenctype"))
268
+ enctype = button.formEnctype;
269
+ if (button.hasAttribute("formaction"))
270
+ url = button.formAction;
271
+ button.classList.add(result.LoadingElementClass);
272
+ if (button.hasAttribute(result.NavUrlReplaceAttributeName))
273
+ replace = true;
274
+ }
275
+ form.classList.add(result.LoadingElementClass);
276
+ method = method.toUpperCase();
277
+ try {
278
+ if (method === "GET") {
279
+ const getUrl = urlHelper.parseUrl(this.env.basePath, url);
280
+ urlHelper.extendQuery(getUrl, new FormData(form));
281
+ if (query)
282
+ urlHelper.extendQuery(getUrl, query);
283
+ await this.nav({ url: getUrl.url, data: data, replace, abort: opt.abort });
284
+ }
285
+ else {
286
+ const navUrl = urlHelper.parseUrl(this.env.basePath, url);
287
+ if (query)
288
+ urlHelper.extendQuery(navUrl, query);
289
+ const base = this.__beginNav(opt.abort);
290
+ const context = {
291
+ ...this.__createContext(base, navUrl, "submit", "submit", data, replace),
292
+ form,
293
+ button,
294
+ method,
295
+ enctype
296
+ };
297
+ const currentNav = { method: "submit", context, abort: base.navAbort, status: "work" };
298
+ await this.__execNavigate(currentNav, base.parentNav);
299
+ }
300
+ }
301
+ finally {
302
+ form.classList.remove(result.LoadingElementClass);
303
+ if (button)
304
+ button.classList.remove(result.LoadingElementClass);
305
+ }
306
+ }
307
+ __onPopState(_context, event) {
308
+ const popUrl = location.href;
309
+ console.log(`popstate: ${popUrl}`, event.state);
310
+ this.nav({ url: popUrl, data: { popstate: event.state } })
311
+ .catch(() => { });
312
+ }
313
+ /** Detect parent (overriding) navigation and compose the abort signal shared by a new navigation. */
314
+ __beginNav(abort) {
315
+ let parentNav;
316
+ if (this.__execNav && this.__execNav.status === "work") {
317
+ parentNav = this.__execNav;
318
+ parentNav.abort.abort(NAV_OVERIDE_ERROR);
319
+ parentNav.context.overided = true;
320
+ }
321
+ const navAbort = new AbortController();
322
+ const aborts = [this.__abort.signal, navAbort.signal];
323
+ if (abort)
324
+ aborts.push(abort);
325
+ return { parentNav, navAbort, abort: AbortSignal.any(aborts) };
326
+ }
327
+ /** Build the navigation context fields shared by nav and submit. */
328
+ __createContext(base, navUrl, source, action, data, replace) {
329
+ const { parentNav, abort } = base;
330
+ return {
331
+ index: parentNav ? parentNav.context.index + 1 : 1,
332
+ id: Guid.createGuid(),
333
+ source,
334
+ app: this,
335
+ abort,
336
+ current: this.__lastNav?.context,
337
+ parent: parentNav?.context,
338
+ overided: false,
339
+ action,
340
+ data,
341
+ url: navUrl.url,
342
+ origin: navUrl.origin,
343
+ pathAndQuery: navUrl.relative,
344
+ basePath: navUrl.basePath,
345
+ path: navUrl.path,
346
+ query: navUrl.query,
347
+ hash: navUrl.hash,
348
+ external: navUrl.external,
349
+ replace,
350
+ redirect: async (options) => {
351
+ abort.throwIfAborted();
352
+ const result = await this.nav(options);
353
+ abort.throwIfAborted();
354
+ return result;
355
+ }
356
+ };
357
+ }
358
+ async __execNavigate(nav, parent) {
359
+ if (parent)
360
+ parent.overide = nav;
361
+ try {
362
+ console.info(`${nav.method} begin`, nav.context);
363
+ nav.context.abort.throwIfAborted();
364
+ this.__execNav = nav;
365
+ await this.invoker.invoke(nav.method, nav.context);
366
+ this.__lastNav = nav;
367
+ nav.status = "success";
368
+ console.info(`${nav.method} ${nav.status} ${nav.context.url}`);
369
+ return nav.context;
370
+ }
371
+ catch (reason) {
372
+ if (reason?.name === "AbortError") {
373
+ nav.status = "cancelled";
374
+ console.warn(`${nav.method} ${nav.status} ${nav.context.url}`);
375
+ }
376
+ else if (reason === NAV_OVERIDE_ERROR) {
377
+ if (!nav.context.overided || !nav.overide)
378
+ throw new Error("Nav is not overided.");
379
+ nav.status = "overided";
380
+ console.warn(`${nav.method} ${nav.status} ${nav.context.url}`);
381
+ return nav.overide.context; // return redirected navigation
382
+ }
383
+ else {
384
+ nav.status = "error";
385
+ console.error(`${nav.method} ${nav.status} ${nav.context.url}: ${reason}`);
386
+ }
387
+ throw reason;
388
+ }
389
+ }
390
+ }
391
+
392
+ export { APP_TYPENAME, Application, NAV_OVERIDE_ERROR };
393
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sources":["../../../source/app.ts"],"sourcesContent":[null],"names":["StateMiddleware","HyperLinkMiddleware","CONSTANTS"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { Application } from './app.js';
2
+
3
+ /** Fluent builder that configures the application type, middlewares and model, then constructs an {@link Application}. */
4
+ class ApplicationBuilder {
5
+ __model;
6
+ __appType = (Application);
7
+ __middlewares = [];
8
+ /**
9
+ * @param model Application model used when building the application.
10
+ */
11
+ constructor(model) {
12
+ this.__model = model;
13
+ }
14
+ /**
15
+ * Set a custom application type to instantiate instead of the base {@link Application}.
16
+ * @param appType Application class constructor.
17
+ * @returns The builder, for chaining.
18
+ */
19
+ useApp(appType) {
20
+ this.__appType = appType;
21
+ return this;
22
+ }
23
+ /**
24
+ * Register a middleware via its factory function. Middlewares run in registration order.
25
+ * @param createFunc Factory that creates the middleware instance.
26
+ * @param params Optional arguments passed to the factory.
27
+ * @returns The builder, for chaining.
28
+ */
29
+ useMiddleware(createFunc, ...params) {
30
+ let midl = createFunc(...params);
31
+ this.__middlewares.push(midl);
32
+ return this;
33
+ }
34
+ /**
35
+ * Build and initialize the application instance.
36
+ * @param env Application environment (a base path of `/` is normalized to empty).
37
+ * @param args Extra arguments forwarded to the application constructor.
38
+ * @returns The initialized application instance.
39
+ */
40
+ build(env, ...args) {
41
+ const appEnv = { ...env };
42
+ if (!appEnv.basePath || appEnv.basePath == '/')
43
+ appEnv.basePath = '';
44
+ const app = new this.__appType(appEnv, this.__model, ...args);
45
+ app.initialize(this.__middlewares);
46
+ return app;
47
+ }
48
+ }
49
+
50
+ export { ApplicationBuilder };
51
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sources":["../../../source/builder.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIA;MACa,kBAAkB,CAAA;AACtB,IAAA,OAAO;AACP,IAAA,SAAS,IAAG,WAAmB;IAC/B,aAAa,GAAiB,EAAE;AAExC;;AAEG;AACH,IAAA,WAAA,CAAY,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACrB;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,OAAmC,EAAA;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO;AACxB,QAAA,OAAO,IAAI;IACZ;AAEA;;;;;AAKG;AACH,IAAA,aAAa,CAAC,UAAmD,EAAE,GAAG,MAAkB,EAAA;AACvF,QAAA,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC;AAChC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,QAAA,OAAO,IAAI;IACZ;AAEA;;;;;AAKG;AACH,IAAA,KAAK,CAAC,GAAqB,EAAE,GAAG,IAAW,EAAA;AAC1C,QAAA,MAAM,MAAM,GAAqB,EAAE,GAAG,GAAG,EAAE;QAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,GAAG;AAC7C,YAAA,MAAM,CAAC,QAAQ,GAAG,EAAE;AAErB,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AAC7D,QAAA,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;AAClC,QAAA,OAAO,GAAG;IACX;AACA;;;;"}
@@ -0,0 +1,17 @@
1
+ const result = {
2
+ LoadingElementClass: "loading",
3
+ NavUrlClassName: "applink",
4
+ FormClassName: "appform",
5
+ NavUrlAttributeName: "data-nav-url",
6
+ NavUrlReplaceAttributeName: "data-nav-replace",
7
+ NavUrlScopeAttributeName: "data-nav-scope",
8
+ NavIgnoreAttributeName: "data-nav-ignore",
9
+ STATE_CLASS: {
10
+ LOADING: "bp-state-loading",
11
+ LOADED: "bp-state-loaded",
12
+ READY: "bp-state-ready"
13
+ }
14
+ };
15
+
16
+ export { result as default };
17
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../../source/constants.ts"],"sourcesContent":[null],"names":[],"mappings":"AAeA,MAAM,MAAM,GAAc;AACzB,IAAA,mBAAmB,EAAE,SAAS;AAC9B,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,aAAa,EAAE,SAAS;AACxB,IAAA,mBAAmB,EAAE,cAAc;AACnC,IAAA,0BAA0B,EAAE,kBAAkB;AAC9C,IAAA,wBAAwB,EAAE,gBAAgB;AAC1C,IAAA,sBAAsB,EAAE,iBAAiB;AACzC,IAAA,WAAW,EAAE;AACZ,QAAA,OAAO,EAAE,kBAAkB;AAC3B,QAAA,MAAM,EAAE,iBAAiB;AACzB,QAAA,KAAK,EAAE;AACP;;;;;"}
@@ -0,0 +1,37 @@
1
+ import result from './constants.js';
2
+
3
+ let __inited = false;
4
+ /**
5
+ * Install the `HTMLElement.prototype` navigation helpers (`nav`, `navUrl`, `navReplace`,
6
+ * `navScope`). Opt-in (no longer a side effect on import) so bundlers can tree-shake them
7
+ * away when unused. {@link Application} calls this automatically on `run`; call it yourself
8
+ * only if you use the helpers before the application starts. Idempotent; no-op without a DOM.
9
+ */
10
+ function enableNavExtensions() {
11
+ if (__inited || typeof HTMLElement === "undefined")
12
+ return;
13
+ __inited = true;
14
+ HTMLElement.prototype.navUrl = function (url) {
15
+ if (this instanceof HTMLAnchorElement)
16
+ this.href = url;
17
+ else
18
+ this.dataset.navUrl = url;
19
+ this.classList.add(result.NavUrlClassName);
20
+ return this;
21
+ };
22
+ HTMLElement.prototype.nav = function (app, path, query, hash) {
23
+ const url = app.buildUrl(path, query, hash);
24
+ return this.navUrl(url);
25
+ };
26
+ HTMLElement.prototype.navReplace = function () {
27
+ this.setAttribute(result.NavUrlReplaceAttributeName, "");
28
+ return this;
29
+ };
30
+ HTMLElement.prototype.navScope = function (scope) {
31
+ this.setAttribute(result.NavUrlScopeAttributeName, scope);
32
+ return this;
33
+ };
34
+ }
35
+
36
+ export { enableNavExtensions };
37
+ //# sourceMappingURL=ext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ext.js","sources":["../../../source/ext.ts"],"sourcesContent":[null],"names":["CONSTANTS"],"mappings":";;AAiBA,IAAI,QAAQ,GAAG,KAAK;AAEpB;;;;;AAKG;SACa,mBAAmB,GAAA;AAClC,IAAA,IAAI,QAAQ,IAAI,OAAO,WAAW,KAAK,WAAW;QACjD;IACD,QAAQ,GAAG,IAAI;AAEf,IAAA,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,GAAW,EAAA;QACnD,IAAI,IAAI,YAAY,iBAAiB;AACpC,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;;AAEf,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG;QAE1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAACA,MAAS,CAAC,eAAe,CAAC;AAE7C,QAAA,OAAO,IAAI;AACZ,IAAA,CAAC;AAED,IAAA,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,UAAU,GAAgB,EAAE,IAAa,EAAE,KAAgD,EAAE,IAAa,EAAA;AACrI,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;AAC3C,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACxB,IAAA,CAAC;AAED,IAAA,WAAW,CAAC,SAAS,CAAC,UAAU,GAAG,YAAA;QAClC,IAAI,CAAC,YAAY,CAACA,MAAS,CAAC,0BAA0B,EAAE,EAAE,CAAC;AAC3D,QAAA,OAAO,IAAI;AACZ,IAAA,CAAC;AAED,IAAA,WAAW,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,KAAa,EAAA;QACvD,IAAI,CAAC,YAAY,CAACA,MAAS,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC5D,QAAA,OAAO,IAAI;AACZ,IAAA,CAAC;AACF;;;;"}