haori-bootstrap 0.5.54 → 0.5.55
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.
- package/README.ja.md +9 -6
- package/README.md +10 -7
- package/dist/haori-bootstrap.iife.js +1 -1
- package/dist/haori-bootstrap.iife.js.map +1 -1
- package/dist/haori-bootstrap.js +1 -1
- package/dist/haori-bootstrap.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/package.json +1 -1
package/README.ja.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Haori.js Bootstrap は、Haori.js 向けの Bootstrap ベース UI 拡張ライブラリです。
|
|
4
4
|
|
|
5
|
-
Version: 0.5.
|
|
5
|
+
Version: 0.5.55
|
|
6
6
|
|
|
7
7
|
## 概要
|
|
8
8
|
|
|
@@ -41,9 +41,9 @@ npm install haori-bootstrap
|
|
|
41
41
|
rel="stylesheet"
|
|
42
42
|
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css"
|
|
43
43
|
/>
|
|
44
|
-
<script src="https://cdn.jsdelivr.net/npm/haori@0.57.
|
|
44
|
+
<script src="https://cdn.jsdelivr.net/npm/haori@0.57.1/dist/haori.iife.js"></script>
|
|
45
45
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js"></script>
|
|
46
|
-
<script src="https://cdn.jsdelivr.net/npm/haori-bootstrap@0.5.
|
|
46
|
+
<script src="https://cdn.jsdelivr.net/npm/haori-bootstrap@0.5.55/dist/haori-bootstrap.iife.js"></script>
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
IIFE 版は、window.Haori と window.bootstrap が利用可能な場合に自動で有効化されます。
|
|
@@ -214,7 +214,10 @@ Bootstrap collapse 要素に `data-haori-persist="キー名"` を付与すると
|
|
|
214
214
|
```
|
|
215
215
|
|
|
216
216
|
- 属性の値は見ません。属性があれば閉じません(値を書かずに付けると、常に Haori の閉じる操作でだけ閉じるモーダルになります)。
|
|
217
|
-
- 式で書いた場合は、Haori コアが通常の属性として評価します。結果が `false` / `null` / `undefined` になると属性が消え、Bootstrap の既定どおり閉じられるようになります。`
|
|
217
|
+
- 式で書いた場合は、Haori コアが通常の属性として評価します。結果が `false` / `null` / `undefined` になると属性が消え、Bootstrap の既定どおり閉じられるようになります。`true` なら `"true"` が入ります。
|
|
218
|
+
- `_fetch` を参照するときは、上の例のように `{{!!_fetch.loading}}` と `!!` で真偽へ揃えてください。理由は 2 つです。
|
|
219
|
+
- `_fetch` は最初の取得まで注入されません。`{{_fetch.loading}}` のままだと、取得の前は未解決参照になり、Haori コアの開発モードで警告が出ます(`?.` を付けても出ます)。`!!` を付けると「無い=偽」として結論が出るため、警告は出ません。
|
|
220
|
+
- `0` や空文字の結果では属性が残り、閉じなくなります。
|
|
218
221
|
- `_fetch` は、`data-{event}-fetch-state` で `.modal` 自身かその祖先へ注入してください。`.modal` の内側の要素へ注入すると、`.modal` の属性からは参照できません。
|
|
219
222
|
- 画面のスクリプトが直接呼ぶ `bootstrap.Modal` の `hide()` でも閉じません。閉じる操作は `hide.bs.modal` を取り消して止めます。
|
|
220
223
|
- 止めたときに、`data-bs-backdrop="static"` のような揺れる表示は出しません。閉じるボタンを押せなくするには、上の例のように `disabled` を式で書きます(Bootstrap は `disabled` の `data-bs-dismiss` を処理しません)。
|
|
@@ -284,12 +287,12 @@ push 後に、そのタグから GitHub Release を published にします。公
|
|
|
284
287
|
次回 patch リリースの例:
|
|
285
288
|
|
|
286
289
|
```bash
|
|
287
|
-
# version が 0.5.
|
|
290
|
+
# version が 0.5.56 になる
|
|
288
291
|
npm version patch
|
|
289
292
|
git push origin main --follow-tags
|
|
290
293
|
```
|
|
291
294
|
|
|
292
|
-
その後、push 済みタグの GitHub Release を作成して published にします。例として次回は `0.5.
|
|
295
|
+
その後、push 済みタグの GitHub Release を作成して published にします。例として次回は `0.5.56` タグになります。
|
|
293
296
|
|
|
294
297
|
自動公開:
|
|
295
298
|
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Haori.js Bootstrap is a Bootstrap-based UI extension library for Haori.js.
|
|
4
4
|
|
|
5
|
-
Version: 0.5.
|
|
5
|
+
Version: 0.5.55
|
|
6
6
|
|
|
7
7
|
## Overview
|
|
8
8
|
|
|
@@ -41,9 +41,9 @@ Load dependencies in this order for browser direct loading:
|
|
|
41
41
|
rel="stylesheet"
|
|
42
42
|
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css"
|
|
43
43
|
/>
|
|
44
|
-
<script src="https://cdn.jsdelivr.net/npm/haori@0.57.
|
|
44
|
+
<script src="https://cdn.jsdelivr.net/npm/haori@0.57.1/dist/haori.iife.js"></script>
|
|
45
45
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js"></script>
|
|
46
|
-
<script src="https://cdn.jsdelivr.net/npm/haori-bootstrap@0.5.
|
|
46
|
+
<script src="https://cdn.jsdelivr.net/npm/haori-bootstrap@0.5.55/dist/haori-bootstrap.iife.js"></script>
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
The IIFE build auto-enables when both window.Haori and window.bootstrap are available.
|
|
@@ -214,7 +214,10 @@ Add `data-haori-dismiss-lock` to a `.modal` to stop the Escape key, backdrop cli
|
|
|
214
214
|
```
|
|
215
215
|
|
|
216
216
|
- The value is not inspected: the modal stays open whenever the attribute is present. Adding it without a value makes a modal that only Haori's close operations can close.
|
|
217
|
-
- When written as an expression, Haori core evaluates it as an ordinary attribute. A result of `false` / `null` / `undefined` removes the attribute, and the modal closes as Bootstrap normally does. `
|
|
217
|
+
- When written as an expression, Haori core evaluates it as an ordinary attribute. A result of `false` / `null` / `undefined` removes the attribute, and the modal closes as Bootstrap normally does. `true` writes `"true"`.
|
|
218
|
+
- When referring to `_fetch`, normalize to a boolean with `!!`, as in `{{!!_fetch.loading}}` above, for two reasons:
|
|
219
|
+
- `_fetch` is not injected until the first fetch. A plain `{{_fetch.loading}}` is an unresolved reference before that, and Haori core warns in development mode (adding `?.` does not help). With `!!`, the expression concludes "absent means false" and no warning is shown.
|
|
220
|
+
- A result of `0` or an empty string keeps the attribute, and the modal stays locked.
|
|
218
221
|
- Inject `_fetch` into the `.modal` itself or one of its ancestors with `data-{event}-fetch-state`. State injected into an element inside the `.modal` is not visible to the `.modal`'s attributes.
|
|
219
222
|
- A `hide()` call on the `bootstrap.Modal` instance from page scripts is stopped too: the lock works by cancelling `hide.bs.modal`.
|
|
220
223
|
- No bounce animation (as with `data-bs-backdrop="static"`) is shown when a close is stopped. To disable the close button, bind `disabled` as in the example (Bootstrap ignores `data-bs-dismiss` on disabled elements).
|
|
@@ -281,15 +284,15 @@ git push origin main --follow-tags
|
|
|
281
284
|
|
|
282
285
|
After pushing, publish a GitHub Release from the generated version tag. The release workflow then publishes the package and uploads `dist.zip` automatically.
|
|
283
286
|
|
|
284
|
-
Example next patch release after `0.5.
|
|
287
|
+
Example next patch release after `0.5.55`:
|
|
285
288
|
|
|
286
289
|
```bash
|
|
287
|
-
# version becomes 0.5.
|
|
290
|
+
# version becomes 0.5.56
|
|
288
291
|
npm version patch
|
|
289
292
|
git push origin main --follow-tags
|
|
290
293
|
```
|
|
291
294
|
|
|
292
|
-
Create and publish the GitHub Release for the pushed tag such as `0.5.
|
|
295
|
+
Create and publish the GitHub Release for the pushed tag such as `0.5.56`.
|
|
293
296
|
|
|
294
297
|
Release automation:
|
|
295
298
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
var HaoriBootstrap=(function(E){"use strict";function X(e){return typeof e=="function"}function Q(e){return X(e?.Modal)?e?.Modal:void 0}function Y(e){return X(e?.Toast)?e?.Toast:void 0}function N(e){return!!Q(e)}function Oe(e){return!!Y(e)}function H(e,n,t){const o=Q(t);if(o)return typeof o.getOrCreateInstance=="function"?o.getOrCreateInstance(e,n):new o(e,n)}function xe(e,n,t){const o=Y(t);if(o)return typeof o.getOrCreateInstance=="function"?o.getOrCreateInstance(e,n):new o(e,n)}const qe="data-haori-dialog",$e="data-haori-confirm",Ue="data-haori-dialog-title",Z="data-haori-dialog-ok",ee="data-haori-confirm-ok",te="data-haori-confirm-cancel",Fe="OK",We="Cancel";let ze=0;function ne(){return{backdrop:"static",keyboard:!1}}function oe(e,n){if(n.dialogContainerSelector){const t=e.querySelector(n.dialogContainerSelector);if(t)return t}return e.body}function re(e,n,t,o){const r=o.dialogTitle,s=e.createElement("div");s.className="modal fade",s.tabIndex=-1,s.setAttribute(t?$e:qe,"true"),s.setAttribute("aria-hidden","true");const c=e.createElement("div");c.className="modal-dialog modal-dialog-centered";const a=e.createElement("div");if(a.className="modal-content",r){const b=`haori-dialog-title-${++ze}`,I=e.createElement("div");I.className="modal-header";const A=e.createElement("h5");A.className="modal-title",A.id=b,A.setAttribute(Ue,"true"),A.textContent=r,I.appendChild(A),a.appendChild(I),s.setAttribute("aria-labelledby",b)}const f=e.createElement("div");f.className="modal-body";const l=e.createElement("p");l.className="mb-0",l.style.whiteSpace="pre-line",l.textContent=n,f.appendChild(l);const m=e.createElement("div");if(m.className="modal-footer",t){const b=e.createElement("button");b.type="button",b.className="btn btn-secondary",b.setAttribute(te,"true"),b.textContent=o.dialogCancelLabel??We,m.appendChild(b)}const d=e.createElement("button");return d.type="button",d.className="btn btn-primary",d.setAttribute(t?ee:Z,"true"),d.textContent=o.dialogOkLabel??Fe,m.appendChild(d),a.append(f,m),c.appendChild(a),s.appendChild(c),s}function se(e){let n=!1,t=!1;return{requestClose:o=>{n||(n=!0,o?.(),t&&e.hide())},handleShown:()=>{t=!0,n&&e.hide()}}}function Ge(e,n){const t=globalThis.document,o=re(t,e,!1,n);oe(t,n).appendChild(o);const r=H(o,ne(),n.bootstrap);return r?new Promise((s,c)=>{const a=()=>{o.removeEventListener("shown.bs.modal",m),o.removeEventListener("hidden.bs.modal",f),o.remove(),r.dispose?.(),s()},f=()=>{a()},l=se(r),m=l.handleShown;o.querySelector(`[${Z}]`)?.addEventListener("click",()=>{l.requestClose()}),o.addEventListener("shown.bs.modal",m),o.addEventListener("hidden.bs.modal",f,{once:!0});try{r.show()}catch(b){o.removeEventListener("shown.bs.modal",m),o.removeEventListener("hidden.bs.modal",f),o.remove(),r.dispose?.(),c(b)}}):(o.remove(),Promise.reject(new Error("Bootstrap Modal is unavailable.")))}function Ke(e,n){const t=globalThis.document,o=re(t,e,!0,n);oe(t,n).appendChild(o);const r=H(o,ne(),n.bootstrap);return r?new Promise((s,c)=>{let a=!1;const f=()=>{o.removeEventListener("shown.bs.modal",d),o.removeEventListener("hidden.bs.modal",l),o.remove(),r.dispose?.(),s(a)},l=()=>{f()},m=se(r),d=m.handleShown,b=o.querySelector(`[${ee}]`),I=o.querySelector(`[${te}]`);b?.addEventListener("click",()=>{m.requestClose(()=>{a=!0})}),I?.addEventListener("click",()=>{m.requestClose(()=>{a=!1})}),o.addEventListener("shown.bs.modal",d),o.addEventListener("hidden.bs.modal",l,{once:!0});try{r.show()}catch(A){o.removeEventListener("shown.bs.modal",d),o.removeEventListener("hidden.bs.modal",l),o.remove(),r.dispose?.(),c(A)}}):(o.remove(),Promise.reject(new Error("Bootstrap Modal is unavailable.")))}const v="data-haori-owned",h="data-haori-message-container",C="data-haori-invalid-target",L="data-haori-valid-target";function S(e){return e instanceof HTMLInputElement&&(e.type==="checkbox"||e.type==="radio")}function p(e){return e instanceof HTMLInputElement&&e.type==="radio"}function M(e){return e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement}function k(e){return Array.from(e.children).find(n=>n instanceof HTMLElement&&n.getAttribute(h)==="true")}function ie(e,n){const t=e.createElement("div");return t.setAttribute(v,"true"),t.textContent=n,t}function ae(e){return k(e)}function y(e){if(e.name){const n=e.form??e.ownerDocument,t=typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e.name):e.name.replace(/(["\\])/g,"\\$1"),o=Array.from(n.querySelectorAll(`input[type="radio"][name="${t}"]`));if(o.length>0)return o}return[e]}function Ve(e){const[n,...t]=e;if(!n)return;let o=n;for(;o;){if(t.every(r=>o?.contains(r)))return o;o=o.parentElement}}function U(e){const t=y(e).map(o=>o.closest(".form-check")).filter(o=>o instanceof HTMLElement);if(t.length>1){const o=Ve(t);if(o&&!t.includes(o))return o}return R(e)}function R(e){const n=e.closest(".form-check");return n instanceof HTMLElement?n:void 0}function le(e){const n=e.nextElementSibling;if(n instanceof HTMLElement&&n.getAttribute(h)==="true")return n;const t=document.createElement("div");return t.className="invalid-feedback d-block",t.setAttribute(v,"true"),t.setAttribute(h,"true"),e.insertAdjacentElement("afterend",t),t}function je(e){const n=p(e)?U(e):R(e);if(!n)return le(e);const t=k(n);if(t)return t;const o=document.createElement("div");return o.className="invalid-feedback d-block",o.setAttribute(v,"true"),o.setAttribute(h,"true"),n.appendChild(o),o}function Je(e){const n=ae(e);if(n)return n;const t=document.createElement("div");return t.className="alert alert-danger",t.setAttribute("role","alert"),t.setAttribute(v,"true"),t.setAttribute(h,"true"),e.insertAdjacentElement("afterbegin",t),t}function g(e){e.getAttribute(C)==="true"&&(e.classList.remove("is-invalid"),e.removeAttribute(C))}function T(e){e.getAttribute(L)==="true"&&(e.classList.remove("is-valid"),e.removeAttribute(L))}function ce(e){switch(e){case"success":return"alert alert-success";case"warning":return"alert alert-warning";case"info":return"alert alert-info";default:return"alert alert-danger"}}function _(e){return e==="success"?"valid-feedback d-block":"invalid-feedback d-block"}function de(e){(p(e)?y(e):[e]).forEach(t=>{t.classList.add("is-invalid"),t.setAttribute(C,"true")})}function Xe(e){(p(e)?y(e):[e]).forEach(t=>{g(t)})}function ue(e,n){const t=e.nextElementSibling;if(t instanceof HTMLElement&&t.getAttribute(h)==="true")return t.className=_(n),t;const o=document.createElement("div");return o.className=_(n),o.setAttribute(v,"true"),o.setAttribute(h,"true"),e.insertAdjacentElement("afterend",o),o}function Qe(e,n){const t=p(e)?U(e):R(e);if(!t)return ue(e,n);const o=k(t);if(o)return o.className=_(n),o;const r=document.createElement("div");return r.className=_(n),r.setAttribute(v,"true"),r.setAttribute(h,"true"),t.appendChild(r),r}function Ye(e,n){const t=ae(e);if(t)return t.className=ce(n),t;const o=document.createElement("div");return o.className=ce(n),o.setAttribute("role","alert"),o.setAttribute(v,"true"),o.setAttribute(h,"true"),e.insertAdjacentElement("afterbegin",o),o}function Ze(e,n){return(S(e)?je(e):M(e)?le(e):Je(e)).appendChild(ie(document,n)),S(e)?de(e):M(e)&&(e.classList.add("is-invalid"),e.setAttribute(C,"true")),Promise.resolve()}function et(e,n,t){if((S(e)?Qe(e,t):M(e)?ue(e,t):Ye(e,t)).appendChild(ie(document,n)),S(e)){const r=p(e)?y(e):[e];t==="success"?r.forEach(s=>{g(s),s.classList.add("is-valid"),s.setAttribute(L,"true")}):!t||t==="error"?(r.forEach(s=>T(s)),de(e)):r.forEach(s=>{T(s),g(s)})}else M(e)&&(t==="success"?(g(e),e.classList.add("is-valid"),e.setAttribute(L,"true")):!t||t==="error"?(T(e),e.classList.add("is-invalid"),e.setAttribute(C,"true")):(T(e),g(e)));return Promise.resolve()}function fe(e){if(S(e)){const r=p(e)?U(e):R(e);(r?k(r):void 0)?.remove(),Xe(e),(p(e)?y(e):[e]).forEach(a=>T(a))}else if(M(e)){const r=e.nextElementSibling;r instanceof HTMLElement&&r.getAttribute(h)==="true"&&r.remove(),g(e),T(e)}return e.querySelectorAll(`[${h}="true"]`).forEach(r=>{r.remove()}),e.querySelectorAll(`[${C}="true"]`).forEach(r=>{g(r)}),e.querySelectorAll(`[${L}="true"]`).forEach(r=>{T(r)}),Promise.resolve()}const F=new WeakSet,tt="data-haori-dismiss-lock",W=new WeakSet;let B=!1,z;const me=e=>{e.target instanceof HTMLElement&&F.add(e.target)},be=e=>{e.target instanceof HTMLElement&&F.delete(e.target)},he=e=>{const n=e.target;n instanceof HTMLElement&&n.hasAttribute(tt)&&!W.has(n)&&e.preventDefault()};function Ee(e,n){W.add(e);try{n.hide()}finally{W.delete(e)}}function nt(e=document){B||(B=!0,z=e,e.addEventListener("show.bs.modal",me),e.addEventListener("shown.bs.modal",be),e.addEventListener("hide.bs.modal",he))}function ot(e=z??document){B&&(B=!1,e.removeEventListener("show.bs.modal",me),e.removeEventListener("shown.bs.modal",be),e.removeEventListener("hide.bs.modal",he),z=void 0)}function ve(e){return e.classList.contains("modal")?e:e.closest(".modal")}function pe(e){e.tabIndex<0&&(e.tabIndex=-1),e.hasAttribute("aria-hidden")||e.setAttribute("aria-hidden","true")}function rt(e,n){const t=ve(e);if(!t)return Promise.reject(new Error('No ancestor ".modal" element was found for the target.'));pe(t),fe(t);const o=H(t,void 0,n.bootstrap);return o?(o.show(),Promise.resolve()):Promise.reject(new Error("Bootstrap Modal is unavailable."))}function st(e,n){const t=ve(e);if(!t)return Promise.reject(new Error('No ancestor ".modal" element was found for the target.'));pe(t);const o=H(t,void 0,n.bootstrap);return o?F.has(t)?(t.addEventListener("shown.bs.modal",()=>{Ee(t,o)},{once:!0}),Promise.resolve()):(Ee(t,o),Promise.resolve()):Promise.reject(new Error("Bootstrap Modal is unavailable."))}const ge="data-haori-toast-container",it="data-haori-toast",at="data-haori-toast-level",lt="data-haori-toast-accent",ct="data-haori-toast-dismiss",Te={"top-start":"top-0 start-0","top-center":"top-0 start-50 translate-middle-x","top-end":"top-0 end-0","bottom-start":"bottom-0 start-0","bottom-center":"bottom-0 start-50 translate-middle-x","bottom-end":"bottom-0 end-0"};function dt(e){switch(e){case"success":return{accentClassName:"bg-success",level:"success"};case"warning":return{accentClassName:"bg-warning",level:"warning"};case"error":return{accentClassName:"bg-danger",level:"error"};default:return{accentClassName:"bg-info",level:"info"}}}function ut(e,n){if(n.toastContainerSelector){const t=e.querySelector(n.toastContainerSelector);if(t)return t}return e.body}function ft(e,n){const t=ut(e,n),o=Te[n.toastPosition??"bottom-end"],r=t.querySelector(`[${ge}="true"]`);if(r){const c=Object.values(Te).flatMap(a=>a.split(" "));return r.classList.remove(...c),r.classList.add(...o.split(" ")),r}const s=e.createElement("div");return s.className=`toast-container position-fixed ${o} p-3`,s.setAttribute(ge,"true"),t.appendChild(s),s}function mt(e,n,t){const o=globalThis.document,r=dt(n),s=o.createElement("div");s.className="toast border bg-body text-body shadow-sm",s.setAttribute("role","status"),s.setAttribute("aria-live","polite"),s.setAttribute("aria-atomic","true"),s.setAttribute(it,"true"),s.setAttribute(at,r.level);const c=o.createElement("div");c.className="d-flex align-items-stretch";const a=o.createElement("div");a.className=`flex-shrink-0 rounded-start ${r.accentClassName}`,a.style.width="0.375rem",a.setAttribute(lt,"true");const f=o.createElement("div");f.className="toast-body",f.style.whiteSpace="pre-line",f.textContent=e;const l=o.createElement("button");l.type="button",l.className="btn-close me-2 m-auto flex-shrink-0",l.setAttribute("aria-label","Close"),l.setAttribute(ct,"true"),c.appendChild(a),c.appendChild(f),c.appendChild(l),s.appendChild(c),ft(o,t).appendChild(s);const m=t.toastDelay!==void 0?{delay:t.toastDelay}:void 0,d=xe(s,m,t.bootstrap);if(!d)return s.remove(),Promise.reject(new Error("Bootstrap Toast is unavailable."));l.addEventListener("click",()=>{d.hide?.()}),s.addEventListener("hidden.bs.toast",()=>{s.remove(),d.dispose?.()},{once:!0});try{return d.show(),Promise.resolve()}catch(b){return s.remove(),d.dispose?.(),Promise.reject(b)}}let u={options:{fallbackToNative:!0}};function w(e){return e?String(e).replace(/\\n/g,`
|
|
2
|
-
`):""}function Ae(){return globalThis.window}function G(e){return Promise.resolve(e).then(()=>{})}function D(e){const n=u.originalHaori?.[e];return typeof n=="function"?n:void 0}function P(e){console.warn(`[haori-bootstrap] ${e} skipped because Bootstrap support is unavailable.`)}function Ce(e){const n=w(e),t=D("dialog");if(t)return G(t(n));const o=Ae();return u.options.fallbackToNative&&typeof o?.alert=="function"?(o.alert(n),Promise.resolve()):(P("dialog"),Promise.resolve())}function we(e){const n=w(e),t=D("confirm");if(t)return Promise.resolve(t(n)).then(r=>!!r);const o=Ae();return u.options.fallbackToNative&&typeof o?.confirm=="function"?Promise.resolve(o.confirm(n)):(P("confirm"),Promise.resolve(!1))}function Le(e,n){const t=w(e),o=D("toast");return o?G(o(t,n)):(P("toast"),Promise.resolve())}function O(e,n){const t=D(e);return t?G(t(n)):(P(e),Promise.resolve())}function bt(e){u=e}class Se{static dialog(n){const t=w(n);return N(u.options.bootstrap)?Ge(t,u.options).catch(()=>Ce(t)):Ce(t)}static confirm(n){const t=w(n);return N(u.options.bootstrap)?Ke(t,u.options).catch(()=>we(t)):we(t)}static toast(n,t){const o=w(n);return Oe(u.options.bootstrap)?mt(o,t,u.options).catch(()=>Le(o,t)):Le(o,t)}static openDialog(n){return N(u.options.bootstrap)?rt(n,u.options).catch(()=>O("openDialog",n)):O("openDialog",n)}static closeDialog(n){return N(u.options.bootstrap)?st(n,u.options).catch(()=>O("closeDialog",n)):O("closeDialog",n)}static addErrorMessage(n,t){return Ze(n,t)}static addMessage(n,t,o){return et(n,t,o)}static clearMessages(n){return fe(n)}}const ht="haori-bootstrap:collapse:",x="data-haori-persist";let q=!1,$,K;function Me(e){return ht+e}function Et(e){try{const n=window.sessionStorage.getItem(Me(e));return n==="shown"||n==="hidden"?n:void 0}catch{return}}function vt(e,n){try{window.sessionStorage.setItem(Me(e),n)}catch{}}function ye(e,n){const t=e.id,o=[`[data-bs-toggle="collapse"][data-bs-target="#${t}"]`];if(t&&o.push(`[data-bs-toggle="collapse"][href="#${t}"]`),!t)return;e.ownerDocument.querySelectorAll(o.join(",")).forEach(s=>{s.setAttribute("aria-expanded",n?"true":"false"),s.classList.toggle("collapsed",!n)})}function Ie(e){const n=e.getAttribute(x);if(!n)return;const t=Et(n);if(!t)return;const o=e.classList.contains("show");t==="shown"&&!o?(e.classList.add("show"),ye(e,!0)):t==="hidden"&&o&&(e.classList.remove("show"),ye(e,!1))}function Ne(e){e instanceof HTMLElement&&e.hasAttribute(x)&&Ie(e),e.querySelectorAll(`[${x}]`).forEach(Ie)}function He(e,n){const t=e.target;if(!(t instanceof HTMLElement))return;const o=t.getAttribute(x);o&&vt(o,n)}const ke=e=>He(e,"shown"),Re=e=>He(e,"hidden");function pt(e=document){if(q)return;q=!0,K=e,e.addEventListener("shown.bs.collapse",ke),e.addEventListener("hidden.bs.collapse",Re);const n=()=>{Ne(e),$=new MutationObserver(t=>{for(const o of t)o.addedNodes.forEach(r=>{r instanceof HTMLElement&&Ne(r)})}),e.body&&$.observe(e.body,{childList:!0,subtree:!0})};e.body?n():e.addEventListener("DOMContentLoaded",n,{once:!0})}function gt(e=K??document){q&&(q=!1,e.removeEventListener("shown.bs.collapse",ke),e.removeEventListener("hidden.bs.collapse",Re),$?.disconnect(),$=void 0,K=void 0)}const Tt=[{attribute:"dialog-ok-label",apply:(e,n)=>{e.dialogOkLabel=n}},{attribute:"dialog-cancel-label",apply:(e,n)=>{e.dialogCancelLabel=n}}],At=typeof document<"u"&&document.currentScript instanceof HTMLScriptElement?document.currentScript:null;function V(e,n){const t=e?.getAttribute(n)??null;if(!(t===null||t.trim()===""))return t}function Ct(e=typeof document>"u"?null:document,n=At){const t={};for(const{attribute:o,apply:r}of Tt){const s=V(n,`data-${o}`)??V(e?.documentElement??null,`data-haori-${o}`)??V(e?.body??null,`data-haori-${o}`);s!==void 0&&r(t,s)}return t}const j={fallbackToNative:!0},_e=new Set(["dialog","confirm","toast","openDialog","closeDialog","addErrorMessage","addMessage","clearMessages"]);function wt(e){const n=Se;return new Proxy(e,{get(t,o,r){return typeof o=="string"&&_e.has(o)?n[o]:Reflect.get(t,o,r)},has(t,o){return typeof o=="string"&&_e.has(o)?!0:Reflect.has(t,o)}})}const i={installed:!1,options:j};function J(){return globalThis.window}function Lt(e,n){const t=Ct();return{bootstrap:e.bootstrap??n?.bootstrap,fallbackToNative:e.fallbackToNative??j.fallbackToNative,runtime:e.runtime??i.options.runtime??n?.Haori?.runtime,toastContainerSelector:e.toastContainerSelector??i.options.toastContainerSelector,dialogContainerSelector:e.dialogContainerSelector??i.options.dialogContainerSelector,dialogTitle:e.dialogTitle??i.options.dialogTitle,dialogOkLabel:e.dialogOkLabel??i.options.dialogOkLabel??t.dialogOkLabel,dialogCancelLabel:e.dialogCancelLabel??i.options.dialogCancelLabel??t.dialogCancelLabel,toastPosition:e.toastPosition??i.options.toastPosition,toastDelay:e.toastDelay??i.options.toastDelay}}function Be(e=J()){return!!(e?.Haori&&e.bootstrap)}function De(e={}){const n=J();if(!n?.Haori)throw new Error("window.Haori is required before calling install().");if(i.originalHaori||(i.originalHaori=n.Haori,i.originalRuntime=n.Haori.runtime),i.options=Lt(e,n),i.options.runtime){const t=i.originalHaori??n.Haori;typeof t.setRuntime=="function"?t.setRuntime(i.options.runtime):console.warn("[haori-bootstrap] Haori.setRuntime が利用できません。runtime 設定は無視されます。")}bt({originalHaori:i.originalHaori,options:i.options}),n.Haori=wt(i.originalHaori),pt(),nt(),i.installed=!0}function St(){const e=J();if(!e||!i.originalHaori)return;const n=i.originalHaori;typeof n.setRuntime=="function"?n.setRuntime(i.originalRuntime):n.runtime=i.originalRuntime,e.Haori=i.originalHaori,gt(),ot(),i.installed=!1,i.originalHaori=void 0,i.originalRuntime=void 0,i.options=j}function Mt(){return i.installed}const Pe="__haoriJsBootstrapAutoEnabled__";function yt(){return globalThis.window}function It(e){return!!e[Pe]}function Nt(e){e[Pe]=!0}function Ht(){const e=yt();if(!(!e||It(e))){if(!Be(e)){console.warn("[haori-bootstrap] Auto-enable skipped because window.Haori or window.bootstrap is missing.");return}try{De({bootstrap:e.bootstrap}),Nt(e)}catch(n){console.warn("[haori-bootstrap] Auto-enable failed.",n)}}}Ht();const kt="0.5.
|
|
2
|
+
`):""}function Ae(){return globalThis.window}function G(e){return Promise.resolve(e).then(()=>{})}function D(e){const n=u.originalHaori?.[e];return typeof n=="function"?n:void 0}function P(e){console.warn(`[haori-bootstrap] ${e} skipped because Bootstrap support is unavailable.`)}function Ce(e){const n=w(e),t=D("dialog");if(t)return G(t(n));const o=Ae();return u.options.fallbackToNative&&typeof o?.alert=="function"?(o.alert(n),Promise.resolve()):(P("dialog"),Promise.resolve())}function we(e){const n=w(e),t=D("confirm");if(t)return Promise.resolve(t(n)).then(r=>!!r);const o=Ae();return u.options.fallbackToNative&&typeof o?.confirm=="function"?Promise.resolve(o.confirm(n)):(P("confirm"),Promise.resolve(!1))}function Le(e,n){const t=w(e),o=D("toast");return o?G(o(t,n)):(P("toast"),Promise.resolve())}function O(e,n){const t=D(e);return t?G(t(n)):(P(e),Promise.resolve())}function bt(e){u=e}class Se{static dialog(n){const t=w(n);return N(u.options.bootstrap)?Ge(t,u.options).catch(()=>Ce(t)):Ce(t)}static confirm(n){const t=w(n);return N(u.options.bootstrap)?Ke(t,u.options).catch(()=>we(t)):we(t)}static toast(n,t){const o=w(n);return Oe(u.options.bootstrap)?mt(o,t,u.options).catch(()=>Le(o,t)):Le(o,t)}static openDialog(n){return N(u.options.bootstrap)?rt(n,u.options).catch(()=>O("openDialog",n)):O("openDialog",n)}static closeDialog(n){return N(u.options.bootstrap)?st(n,u.options).catch(()=>O("closeDialog",n)):O("closeDialog",n)}static addErrorMessage(n,t){return Ze(n,t)}static addMessage(n,t,o){return et(n,t,o)}static clearMessages(n){return fe(n)}}const ht="haori-bootstrap:collapse:",x="data-haori-persist";let q=!1,$,K;function Me(e){return ht+e}function Et(e){try{const n=window.sessionStorage.getItem(Me(e));return n==="shown"||n==="hidden"?n:void 0}catch{return}}function vt(e,n){try{window.sessionStorage.setItem(Me(e),n)}catch{}}function ye(e,n){const t=e.id,o=[`[data-bs-toggle="collapse"][data-bs-target="#${t}"]`];if(t&&o.push(`[data-bs-toggle="collapse"][href="#${t}"]`),!t)return;e.ownerDocument.querySelectorAll(o.join(",")).forEach(s=>{s.setAttribute("aria-expanded",n?"true":"false"),s.classList.toggle("collapsed",!n)})}function Ie(e){const n=e.getAttribute(x);if(!n)return;const t=Et(n);if(!t)return;const o=e.classList.contains("show");t==="shown"&&!o?(e.classList.add("show"),ye(e,!0)):t==="hidden"&&o&&(e.classList.remove("show"),ye(e,!1))}function Ne(e){e instanceof HTMLElement&&e.hasAttribute(x)&&Ie(e),e.querySelectorAll(`[${x}]`).forEach(Ie)}function He(e,n){const t=e.target;if(!(t instanceof HTMLElement))return;const o=t.getAttribute(x);o&&vt(o,n)}const ke=e=>He(e,"shown"),Re=e=>He(e,"hidden");function pt(e=document){if(q)return;q=!0,K=e,e.addEventListener("shown.bs.collapse",ke),e.addEventListener("hidden.bs.collapse",Re);const n=()=>{Ne(e),$=new MutationObserver(t=>{for(const o of t)o.addedNodes.forEach(r=>{r instanceof HTMLElement&&Ne(r)})}),e.body&&$.observe(e.body,{childList:!0,subtree:!0})};e.body?n():e.addEventListener("DOMContentLoaded",n,{once:!0})}function gt(e=K??document){q&&(q=!1,e.removeEventListener("shown.bs.collapse",ke),e.removeEventListener("hidden.bs.collapse",Re),$?.disconnect(),$=void 0,K=void 0)}const Tt=[{attribute:"dialog-ok-label",apply:(e,n)=>{e.dialogOkLabel=n}},{attribute:"dialog-cancel-label",apply:(e,n)=>{e.dialogCancelLabel=n}}],At=typeof document<"u"&&document.currentScript instanceof HTMLScriptElement?document.currentScript:null;function V(e,n){const t=e?.getAttribute(n)??null;if(!(t===null||t.trim()===""))return t}function Ct(e=typeof document>"u"?null:document,n=At){const t={};for(const{attribute:o,apply:r}of Tt){const s=V(n,`data-${o}`)??V(e?.documentElement??null,`data-haori-${o}`)??V(e?.body??null,`data-haori-${o}`);s!==void 0&&r(t,s)}return t}const j={fallbackToNative:!0},_e=new Set(["dialog","confirm","toast","openDialog","closeDialog","addErrorMessage","addMessage","clearMessages"]);function wt(e){const n=Se;return new Proxy(e,{get(t,o,r){return typeof o=="string"&&_e.has(o)?n[o]:Reflect.get(t,o,r)},has(t,o){return typeof o=="string"&&_e.has(o)?!0:Reflect.has(t,o)}})}const i={installed:!1,options:j};function J(){return globalThis.window}function Lt(e,n){const t=Ct();return{bootstrap:e.bootstrap??n?.bootstrap,fallbackToNative:e.fallbackToNative??j.fallbackToNative,runtime:e.runtime??i.options.runtime??n?.Haori?.runtime,toastContainerSelector:e.toastContainerSelector??i.options.toastContainerSelector,dialogContainerSelector:e.dialogContainerSelector??i.options.dialogContainerSelector,dialogTitle:e.dialogTitle??i.options.dialogTitle,dialogOkLabel:e.dialogOkLabel??i.options.dialogOkLabel??t.dialogOkLabel,dialogCancelLabel:e.dialogCancelLabel??i.options.dialogCancelLabel??t.dialogCancelLabel,toastPosition:e.toastPosition??i.options.toastPosition,toastDelay:e.toastDelay??i.options.toastDelay}}function Be(e=J()){return!!(e?.Haori&&e.bootstrap)}function De(e={}){const n=J();if(!n?.Haori)throw new Error("window.Haori is required before calling install().");if(i.originalHaori||(i.originalHaori=n.Haori,i.originalRuntime=n.Haori.runtime),i.options=Lt(e,n),i.options.runtime){const t=i.originalHaori??n.Haori;typeof t.setRuntime=="function"?t.setRuntime(i.options.runtime):console.warn("[haori-bootstrap] Haori.setRuntime が利用できません。runtime 設定は無視されます。")}bt({originalHaori:i.originalHaori,options:i.options}),n.Haori=wt(i.originalHaori),pt(),nt(),i.installed=!0}function St(){const e=J();if(!e||!i.originalHaori)return;const n=i.originalHaori;typeof n.setRuntime=="function"?n.setRuntime(i.originalRuntime):n.runtime=i.originalRuntime,e.Haori=i.originalHaori,gt(),ot(),i.installed=!1,i.originalHaori=void 0,i.originalRuntime=void 0,i.options=j}function Mt(){return i.installed}const Pe="__haoriJsBootstrapAutoEnabled__";function yt(){return globalThis.window}function It(e){return!!e[Pe]}function Nt(e){e[Pe]=!0}function Ht(){const e=yt();if(!(!e||It(e))){if(!Be(e)){console.warn("[haori-bootstrap] Auto-enable skipped because window.Haori or window.bootstrap is missing.");return}try{De({bootstrap:e.bootstrap}),Nt(e)}catch(n){console.warn("[haori-bootstrap] Auto-enable failed.",n)}}}Ht();const kt="0.5.55";return E.BootstrapHaori=Se,E.hasAutoEnablePrerequisites=Be,E.install=De,E.isInstalled=Mt,E.uninstall=St,E.version=kt,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"}),E})({});
|
|
3
3
|
//# sourceMappingURL=haori-bootstrap.iife.js.map
|