@unabridged/midwest 0.26.0 → 0.27.0

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.
@@ -2,21 +2,19 @@ import { Controller } from '@hotwired/stimulus';
2
2
 
3
3
  class Assets extends Controller {
4
4
  static values = {
5
- css: String,
6
- js: String
5
+ css: Array,
6
+ js: Array
7
7
  };
8
8
  connect() {
9
- if (this.cssValue)
10
- this.ensureStylesheet(this.cssValue);
11
- if (this.jsValue)
12
- this.ensureScript(this.jsValue);
9
+ this.cssValue.forEach((href) => {
10
+ this.ensureStylesheet(href);
11
+ });
12
+ this.jsValue.forEach((src) => {
13
+ this.ensureScript(src);
14
+ });
13
15
  }
14
16
  ensureStylesheet(href) {
15
- const url = this.absolute(href);
16
- const present = Array.from(
17
- document.querySelectorAll('link[rel="stylesheet"]')
18
- ).some((link2) => link2.href === url);
19
- if (present)
17
+ if (!href || this.present('link[rel="stylesheet"]', "href", href))
20
18
  return;
21
19
  const link = document.createElement("link");
22
20
  link.rel = "stylesheet";
@@ -24,17 +22,19 @@ class Assets extends Controller {
24
22
  document.head.appendChild(link);
25
23
  }
26
24
  ensureScript(src) {
27
- const url = this.absolute(src);
28
- const present = Array.from(
29
- document.querySelectorAll("script[src]")
30
- ).some((script2) => script2.src === url);
31
- if (present)
25
+ if (!src || this.present("script[src]", "src", src))
32
26
  return;
33
27
  const script = document.createElement("script");
34
28
  script.type = "module";
35
29
  script.src = src;
36
30
  document.head.appendChild(script);
37
31
  }
32
+ present(selector, attribute, url) {
33
+ const absolute = this.absolute(url);
34
+ return Array.from(document.querySelectorAll(selector)).some(
35
+ (element) => element[attribute] === absolute
36
+ );
37
+ }
38
38
  // Resolve a possibly-relative URL to its absolute form for comparison.
39
39
  absolute(url) {
40
40
  const anchor = document.createElement("a");
@@ -1 +1 @@
1
- {"version":3,"file":"assets_component_controller.js","sources":["../../../../../../../app/components/midwest/assets_component/assets_component_controller.ts"],"sourcesContent":["import { Controller } from '@hotwired/stimulus'\n\n// Injects Midwest's bundled stylesheet/script into <head> once, so a component\n// delivered via Turbo (Frame/Stream) into a page that does not already load\n// Midwest's assets still styles and behaves correctly. Idempotent: each URL is\n// compared, resolved to an absolute form, against what is already in the head.\nexport default class Assets extends Controller<HTMLElement> {\n static values = {\n css: String,\n js: String\n }\n\n declare cssValue: string\n declare jsValue: string\n\n connect (): void {\n if (this.cssValue) this.ensureStylesheet(this.cssValue)\n if (this.jsValue) this.ensureScript(this.jsValue)\n }\n\n private ensureStylesheet (href: string): void {\n const url = this.absolute(href)\n const present = Array.from(\n document.querySelectorAll<HTMLLinkElement>('link[rel=\"stylesheet\"]')\n ).some((link) => link.href === url)\n if (present) return\n\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = href\n document.head.appendChild(link)\n }\n\n private ensureScript (src: string): void {\n const url = this.absolute(src)\n const present = Array.from(\n document.querySelectorAll<HTMLScriptElement>('script[src]')\n ).some((script) => script.src === url)\n if (present) return\n\n const script = document.createElement('script')\n script.type = 'module'\n script.src = src\n document.head.appendChild(script)\n }\n\n // Resolve a possibly-relative URL to its absolute form for comparison.\n private absolute (url: string): string {\n const anchor = document.createElement('a')\n anchor.href = url\n return anchor.href\n }\n}\n"],"names":["link","script"],"mappings":";;AAMA,MAAqB,eAAe,UAAwB,CAAA;AAAA,EAC1D,OAAO,MAAS,GAAA;AAAA,IACd,GAAK,EAAA,MAAA;AAAA,IACL,EAAI,EAAA,MAAA;AAAA,GACN,CAAA;AAAA,EAKA,OAAiB,GAAA;AACf,IAAA,IAAI,IAAK,CAAA,QAAA;AAAU,MAAK,IAAA,CAAA,gBAAA,CAAiB,KAAK,QAAQ,CAAA,CAAA;AACtD,IAAA,IAAI,IAAK,CAAA,OAAA;AAAS,MAAK,IAAA,CAAA,YAAA,CAAa,KAAK,OAAO,CAAA,CAAA;AAAA,GAClD;AAAA,EAEQ,iBAAkB,IAAoB,EAAA;AAC5C,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAC9B,IAAA,MAAM,UAAU,KAAM,CAAA,IAAA;AAAA,MACpB,QAAA,CAAS,iBAAkC,wBAAwB,CAAA;AAAA,MACnE,IAAK,CAAA,CAACA,KAASA,KAAAA,KAAAA,CAAK,SAAS,GAAG,CAAA,CAAA;AAClC,IAAI,IAAA,OAAA;AAAS,MAAA,OAAA;AAEb,IAAM,MAAA,IAAA,GAAO,QAAS,CAAA,aAAA,CAAc,MAAM,CAAA,CAAA;AAC1C,IAAA,IAAA,CAAK,GAAM,GAAA,YAAA,CAAA;AACX,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,IAAS,QAAA,CAAA,IAAA,CAAK,YAAY,IAAI,CAAA,CAAA;AAAA,GAChC;AAAA,EAEQ,aAAc,GAAmB,EAAA;AACvC,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,QAAA,CAAS,GAAG,CAAA,CAAA;AAC7B,IAAA,MAAM,UAAU,KAAM,CAAA,IAAA;AAAA,MACpB,QAAA,CAAS,iBAAoC,aAAa,CAAA;AAAA,MAC1D,IAAK,CAAA,CAACC,OAAWA,KAAAA,OAAAA,CAAO,QAAQ,GAAG,CAAA,CAAA;AACrC,IAAI,IAAA,OAAA;AAAS,MAAA,OAAA;AAEb,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA,CAAA;AAC9C,IAAA,MAAA,CAAO,IAAO,GAAA,QAAA,CAAA;AACd,IAAA,MAAA,CAAO,GAAM,GAAA,GAAA,CAAA;AACb,IAAS,QAAA,CAAA,IAAA,CAAK,YAAY,MAAM,CAAA,CAAA;AAAA,GAClC;AAAA;AAAA,EAGQ,SAAU,GAAqB,EAAA;AACrC,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,GAAG,CAAA,CAAA;AACzC,IAAA,MAAA,CAAO,IAAO,GAAA,GAAA,CAAA;AACd,IAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAAA,GAChB;AACF;;;;"}
1
+ {"version":3,"file":"assets_component_controller.js","sources":["../../../../../../../app/components/midwest/assets_component/assets_component_controller.ts"],"sourcesContent":["import { Controller } from '@hotwired/stimulus'\n\n// Injects Midwest's stylesheets/modules into <head> once, so components\n// delivered via Turbo (Frame or Stream) into a page that does not already load\n// them still style and behave correctly.\n//\n// Takes arrays rather than single URLs because async mode injects one file per\n// component. Idempotent: each URL is compared, resolved to an absolute form,\n// against what is already in the head — so a fragment carrying a component the\n// page already had costs nothing.\nexport default class Assets extends Controller<HTMLElement> {\n static values = {\n css: Array,\n js: Array\n }\n\n declare cssValue: string[]\n declare jsValue: string[]\n\n connect (): void {\n this.cssValue.forEach((href) => { this.ensureStylesheet(href) })\n this.jsValue.forEach((src) => { this.ensureScript(src) })\n }\n\n private ensureStylesheet (href: string): void {\n if (!href || this.present('link[rel=\"stylesheet\"]', 'href', href)) return\n\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = href\n document.head.appendChild(link)\n }\n\n private ensureScript (src: string): void {\n if (!src || this.present('script[src]', 'src', src)) return\n\n const script = document.createElement('script')\n script.type = 'module'\n script.src = src\n document.head.appendChild(script)\n }\n\n private present (selector: string, attribute: 'href' | 'src', url: string): boolean {\n const absolute = this.absolute(url)\n return Array.from(document.querySelectorAll(selector)).some(\n (element) => (element as HTMLLinkElement & HTMLScriptElement)[attribute] === absolute\n )\n }\n\n // Resolve a possibly-relative URL to its absolute form for comparison.\n private absolute (url: string): string {\n const anchor = document.createElement('a')\n anchor.href = url\n return anchor.href\n }\n}\n"],"names":[],"mappings":";;AAUA,MAAqB,eAAe,UAAwB,CAAA;AAAA,EAC1D,OAAO,MAAS,GAAA;AAAA,IACd,GAAK,EAAA,KAAA;AAAA,IACL,EAAI,EAAA,KAAA;AAAA,GACN,CAAA;AAAA,EAKA,OAAiB,GAAA;AACf,IAAK,IAAA,CAAA,QAAA,CAAS,OAAQ,CAAA,CAAC,IAAS,KAAA;AAAE,MAAA,IAAA,CAAK,iBAAiB,IAAI,CAAA,CAAA;AAAA,KAAG,CAAA,CAAA;AAC/D,IAAK,IAAA,CAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,GAAQ,KAAA;AAAE,MAAA,IAAA,CAAK,aAAa,GAAG,CAAA,CAAA;AAAA,KAAG,CAAA,CAAA;AAAA,GAC1D;AAAA,EAEQ,iBAAkB,IAAoB,EAAA;AAC5C,IAAA,IAAI,CAAC,IAAQ,IAAA,IAAA,CAAK,OAAQ,CAAA,wBAAA,EAA0B,QAAQ,IAAI,CAAA;AAAG,MAAA,OAAA;AAEnE,IAAM,MAAA,IAAA,GAAO,QAAS,CAAA,aAAA,CAAc,MAAM,CAAA,CAAA;AAC1C,IAAA,IAAA,CAAK,GAAM,GAAA,YAAA,CAAA;AACX,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,IAAS,QAAA,CAAA,IAAA,CAAK,YAAY,IAAI,CAAA,CAAA;AAAA,GAChC;AAAA,EAEQ,aAAc,GAAmB,EAAA;AACvC,IAAA,IAAI,CAAC,GAAO,IAAA,IAAA,CAAK,OAAQ,CAAA,aAAA,EAAe,OAAO,GAAG,CAAA;AAAG,MAAA,OAAA;AAErD,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA,CAAA;AAC9C,IAAA,MAAA,CAAO,IAAO,GAAA,QAAA,CAAA;AACd,IAAA,MAAA,CAAO,GAAM,GAAA,GAAA,CAAA;AACb,IAAS,QAAA,CAAA,IAAA,CAAK,YAAY,MAAM,CAAA,CAAA;AAAA,GAClC;AAAA,EAEQ,OAAA,CAAS,QAAkB,EAAA,SAAA,EAA2B,GAAsB,EAAA;AAClF,IAAM,MAAA,QAAA,GAAW,IAAK,CAAA,QAAA,CAAS,GAAG,CAAA,CAAA;AAClC,IAAA,OAAO,MAAM,IAAK,CAAA,QAAA,CAAS,gBAAiB,CAAA,QAAQ,CAAC,CAAE,CAAA,IAAA;AAAA,MACrD,CAAC,OAAA,KAAa,OAAgD,CAAA,SAAS,CAAM,KAAA,QAAA;AAAA,KAC/E,CAAA;AAAA,GACF;AAAA;AAAA,EAGQ,SAAU,GAAqB,EAAA;AACrC,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,GAAG,CAAA,CAAA;AACzC,IAAA,MAAA,CAAO,IAAO,GAAA,GAAA,CAAA;AACd,IAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAAA,GAChB;AACF;;;;"}
@@ -9428,21 +9428,19 @@ class SplitView extends Controller {
9428
9428
 
9429
9429
  class Assets extends Controller {
9430
9430
  static values = {
9431
- css: String,
9432
- js: String
9431
+ css: Array,
9432
+ js: Array
9433
9433
  };
9434
9434
  connect() {
9435
- if (this.cssValue)
9436
- this.ensureStylesheet(this.cssValue);
9437
- if (this.jsValue)
9438
- this.ensureScript(this.jsValue);
9435
+ this.cssValue.forEach((href) => {
9436
+ this.ensureStylesheet(href);
9437
+ });
9438
+ this.jsValue.forEach((src) => {
9439
+ this.ensureScript(src);
9440
+ });
9439
9441
  }
9440
9442
  ensureStylesheet(href) {
9441
- const url = this.absolute(href);
9442
- const present = Array.from(
9443
- document.querySelectorAll('link[rel="stylesheet"]')
9444
- ).some((link2) => link2.href === url);
9445
- if (present)
9443
+ if (!href || this.present('link[rel="stylesheet"]', "href", href))
9446
9444
  return;
9447
9445
  const link = document.createElement("link");
9448
9446
  link.rel = "stylesheet";
@@ -9450,17 +9448,19 @@ class Assets extends Controller {
9450
9448
  document.head.appendChild(link);
9451
9449
  }
9452
9450
  ensureScript(src) {
9453
- const url = this.absolute(src);
9454
- const present = Array.from(
9455
- document.querySelectorAll("script[src]")
9456
- ).some((script2) => script2.src === url);
9457
- if (present)
9451
+ if (!src || this.present("script[src]", "src", src))
9458
9452
  return;
9459
9453
  const script = document.createElement("script");
9460
9454
  script.type = "module";
9461
9455
  script.src = src;
9462
9456
  document.head.appendChild(script);
9463
9457
  }
9458
+ present(selector, attribute, url) {
9459
+ const absolute = this.absolute(url);
9460
+ return Array.from(document.querySelectorAll(selector)).some(
9461
+ (element) => element[attribute] === absolute
9462
+ );
9463
+ }
9464
9464
  // Resolve a possibly-relative URL to its absolute form for comparison.
9465
9465
  absolute(url) {
9466
9466
  const anchor = document.createElement("a");