@iasiv5/dsh-quota-watch 0.1.6 → 0.1.8
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/lib/client.js +5 -91
- package/package.json +1 -1
- package/src/client.mjs +13 -72
package/lib/client.js
CHANGED
|
@@ -234,13 +234,6 @@ var STYLE_TEXT = `
|
|
|
234
234
|
.dqw-chev { font-size: 9px; line-height: 14px; opacity: .6; flex: none; width: 10px; text-align: center; }
|
|
235
235
|
.dqw-stale-mark { flex: none; font-size: 9px; line-height: 14px; color: var(--dsw-alias-label-warning, #b46900); cursor: help; }
|
|
236
236
|
.dqw-errtext { font-size: 10px; line-height: 14px; opacity: .7; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
237
|
-
.dqw-rail-trigger { display: none; flex: none; align-items: center; justify-content: center; width: 36px; height: 36px; margin: 0; padding: 0; border: 0; border-radius: 50%; background: transparent; color: var(--dsw-alias-label-primary, inherit); cursor: pointer; transition: background-color .12s, color .12s; }
|
|
238
|
-
.dqw-rail-trigger svg { display: block; width: 16px; height: 16px; }
|
|
239
|
-
.dqw-rail-trigger:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover, rgba(128,128,128,.12)); color: var(--dsw-alias-label-primary, inherit); }
|
|
240
|
-
.dqw-rail-trigger:active:not(:disabled), .dqw-rail-trigger[aria-expanded="true"] { background: var(--dsw-alias-interactive-bg-active, rgba(128,128,128,.18)); color: var(--dsw-alias-label-primary, inherit); }
|
|
241
|
-
.dqw-rail-trigger:focus-visible { outline: 2px solid var(--dsw-alias-brand-primary, #5b8def); outline-offset: 2px; }
|
|
242
|
-
:host([data-dsh-quota-watch-sidebar-collapsed]) .dqw-card { display: none; }
|
|
243
|
-
:host([data-dsh-quota-watch-sidebar-collapsed]) .dqw-rail-trigger { display: inline-flex; }
|
|
244
237
|
@media print { :host { display: none !important; } }
|
|
245
238
|
`;
|
|
246
239
|
var FLOAT_STYLE_TEXT = `
|
|
@@ -353,36 +346,6 @@ function text(doc, tag, className, value) {
|
|
|
353
346
|
node.textContent = String(value ?? "");
|
|
354
347
|
return node;
|
|
355
348
|
}
|
|
356
|
-
function quotaIcon(doc) {
|
|
357
|
-
const namespace = "http://www.w3.org/2000/svg";
|
|
358
|
-
const svg = doc.createElementNS(namespace, "svg");
|
|
359
|
-
svg.setAttribute("viewBox", "0 0 24 24");
|
|
360
|
-
svg.setAttribute("width", "16");
|
|
361
|
-
svg.setAttribute("height", "16");
|
|
362
|
-
svg.setAttribute("fill", "none");
|
|
363
|
-
svg.setAttribute("stroke", "currentColor");
|
|
364
|
-
svg.setAttribute("stroke-width", "2");
|
|
365
|
-
svg.setAttribute("stroke-linecap", "round");
|
|
366
|
-
svg.setAttribute("stroke-linejoin", "round");
|
|
367
|
-
svg.setAttribute("aria-hidden", "true");
|
|
368
|
-
svg.setAttribute("focusable", "false");
|
|
369
|
-
const dial = doc.createElementNS(namespace, "circle");
|
|
370
|
-
dial.setAttribute("cx", "12");
|
|
371
|
-
dial.setAttribute("cy", "12");
|
|
372
|
-
dial.setAttribute("r", "10");
|
|
373
|
-
const ticks = doc.createElementNS(namespace, "path");
|
|
374
|
-
ticks.setAttribute("d", "M12 2.4v1.6M12 20v1.6M2.4 12h1.6M20 12h1.6M5.2 5.2l1.1 1.1M18.8 18.8l-1.1-1.1M18.8 5.2l-1.1 1.1M5.2 18.8l1.1-1.1");
|
|
375
|
-
const needle = doc.createElementNS(namespace, "path");
|
|
376
|
-
needle.setAttribute("d", "M12 12l4.5-4");
|
|
377
|
-
const hub = doc.createElementNS(namespace, "circle");
|
|
378
|
-
hub.setAttribute("cx", "12");
|
|
379
|
-
hub.setAttribute("cy", "12");
|
|
380
|
-
hub.setAttribute("r", "1.4");
|
|
381
|
-
hub.setAttribute("fill", "currentColor");
|
|
382
|
-
hub.setAttribute("stroke", "none");
|
|
383
|
-
svg.append(dial, ticks, needle, hub);
|
|
384
|
-
return svg;
|
|
385
|
-
}
|
|
386
349
|
function menuItem(doc, action, label) {
|
|
387
350
|
const item = doc.createElement("button");
|
|
388
351
|
item.type = "button";
|
|
@@ -489,16 +452,7 @@ function mountQuotaCard({
|
|
|
489
452
|
const lastUpdated = text(doc, "p", "dqw-meta", copy.loading);
|
|
490
453
|
lastUpdated.dataset.role = "updated";
|
|
491
454
|
body.append(lastUpdated);
|
|
492
|
-
|
|
493
|
-
railTrigger.type = "button";
|
|
494
|
-
railTrigger.className = "dqw-rail-trigger";
|
|
495
|
-
railTrigger.dataset.dshQuotaWatchRail = "";
|
|
496
|
-
railTrigger.title = copy.title;
|
|
497
|
-
railTrigger.setAttribute("aria-label", copy.title);
|
|
498
|
-
railTrigger.setAttribute("aria-haspopup", "dialog");
|
|
499
|
-
railTrigger.setAttribute("aria-expanded", "false");
|
|
500
|
-
railTrigger.append(quotaIcon(doc));
|
|
501
|
-
card.append(body, railTrigger);
|
|
455
|
+
card.append(body);
|
|
502
456
|
cardRoot.append(style, card);
|
|
503
457
|
const panel = doc.createElement("div");
|
|
504
458
|
panel.className = "dqw-panel";
|
|
@@ -531,7 +485,7 @@ function mountQuotaCard({
|
|
|
531
485
|
surface.hidden = dataHidden;
|
|
532
486
|
floatHost.hidden = dataHidden;
|
|
533
487
|
};
|
|
534
|
-
doc.
|
|
488
|
+
doc.body.append(floatHost);
|
|
535
489
|
const applyFloatGeometry = () => {
|
|
536
490
|
const viewWidth = win.innerWidth ?? 1024;
|
|
537
491
|
const viewHeight = win.innerHeight ?? 768;
|
|
@@ -831,7 +785,6 @@ function mountQuotaCard({
|
|
|
831
785
|
lastAnchor = null;
|
|
832
786
|
panelNav = false;
|
|
833
787
|
surface.setAttribute("aria-expanded", "false");
|
|
834
|
-
railTrigger.setAttribute("aria-expanded", "false");
|
|
835
788
|
return;
|
|
836
789
|
}
|
|
837
790
|
if (openKey === "overview") {
|
|
@@ -842,7 +795,6 @@ function mountQuotaCard({
|
|
|
842
795
|
panel.hidden = false;
|
|
843
796
|
placePanel();
|
|
844
797
|
surface.setAttribute("aria-expanded", "true");
|
|
845
|
-
railTrigger.setAttribute("aria-expanded", "true");
|
|
846
798
|
return;
|
|
847
799
|
}
|
|
848
800
|
const provider = (snapshot?.providers ?? []).find((item) => item?.key === openKey);
|
|
@@ -859,7 +811,6 @@ function mountQuotaCard({
|
|
|
859
811
|
panel.hidden = false;
|
|
860
812
|
placePanel();
|
|
861
813
|
surface.setAttribute("aria-expanded", "true");
|
|
862
|
-
railTrigger.setAttribute("aria-expanded", "true");
|
|
863
814
|
};
|
|
864
815
|
const renderFloatFace = () => {
|
|
865
816
|
const providers = snapshot?.providers ?? [];
|
|
@@ -931,14 +882,6 @@ function mountQuotaCard({
|
|
|
931
882
|
event.preventDefault();
|
|
932
883
|
openMenu();
|
|
933
884
|
};
|
|
934
|
-
const onRailClick = () => {
|
|
935
|
-
if (openKey !== void 0 && !panel.hidden) {
|
|
936
|
-
openKey = void 0;
|
|
937
|
-
syncPop();
|
|
938
|
-
return;
|
|
939
|
-
}
|
|
940
|
-
openOverview(railTrigger);
|
|
941
|
-
};
|
|
942
885
|
const onMenuClick = (event) => {
|
|
943
886
|
const item = event.target?.closest?.("[data-menu]");
|
|
944
887
|
if (!item) return;
|
|
@@ -959,22 +902,9 @@ function mountQuotaCard({
|
|
|
959
902
|
};
|
|
960
903
|
const syncCardVisibility = () => {
|
|
961
904
|
syncFootNarrowness();
|
|
962
|
-
const
|
|
963
|
-
|
|
964
|
-
const showCard = cardOn && !narrowOrCollapsed && !noDataHidden;
|
|
965
|
-
const showRail = cardOn && narrowOrCollapsed && !noDataHidden;
|
|
966
|
-
container.hidden = !showCard && !showRail;
|
|
967
|
-
if (showRail) container.dataset.dshQuotaWatchSidebarCollapsed = "";
|
|
968
|
-
else delete container.dataset.dshQuotaWatchSidebarCollapsed;
|
|
905
|
+
const showCard = !surfaceFlags.cardHidden && !footTooNarrow && !noDataHidden;
|
|
906
|
+
container.hidden = !showCard;
|
|
969
907
|
card.style.display = showCard ? "" : "none";
|
|
970
|
-
railTrigger.style.display = showRail ? "inline-flex" : "none";
|
|
971
|
-
if (showRail) {
|
|
972
|
-
container.style.height = SURFACE_SIZE + "px";
|
|
973
|
-
container.style.flex = "0 0 auto";
|
|
974
|
-
} else {
|
|
975
|
-
container.style.height = "";
|
|
976
|
-
container.style.flex = "";
|
|
977
|
-
}
|
|
978
908
|
};
|
|
979
909
|
const footResizeObserver = typeof win.ResizeObserver === "function" ? new win.ResizeObserver(() => {
|
|
980
910
|
syncCardVisibility();
|
|
@@ -1040,24 +970,10 @@ function mountQuotaCard({
|
|
|
1040
970
|
if (!disposed) place();
|
|
1041
971
|
});
|
|
1042
972
|
};
|
|
1043
|
-
let sidebarCollapsed = Boolean(doc.querySelector("[data-sidebar-collapsed]"));
|
|
1044
|
-
const syncSidebarCollapsed = () => {
|
|
1045
|
-
const next = Boolean(doc.querySelector("[data-sidebar-collapsed]"));
|
|
1046
|
-
if (next !== sidebarCollapsed) {
|
|
1047
|
-
sidebarCollapsed = next;
|
|
1048
|
-
renderAll();
|
|
1049
|
-
}
|
|
1050
|
-
};
|
|
1051
973
|
const observer = new win.MutationObserver(() => {
|
|
1052
|
-
syncSidebarCollapsed();
|
|
1053
974
|
schedulePlace();
|
|
1054
975
|
});
|
|
1055
|
-
observer.observe(doc.body, {
|
|
1056
|
-
childList: true,
|
|
1057
|
-
subtree: true,
|
|
1058
|
-
attributes: true,
|
|
1059
|
-
attributeFilter: ["data-sidebar-collapsed"]
|
|
1060
|
-
});
|
|
976
|
+
observer.observe(doc.body, { childList: true, subtree: true });
|
|
1061
977
|
place();
|
|
1062
978
|
const startPolling = () => {
|
|
1063
979
|
if (timer !== void 0 || doc.visibilityState === "hidden" || disposed) return;
|
|
@@ -1172,7 +1088,6 @@ function mountQuotaCard({
|
|
|
1172
1088
|
surface.addEventListener("click", onSurfaceClick);
|
|
1173
1089
|
surface.addEventListener("keydown", onSurfaceKeydown);
|
|
1174
1090
|
surface.addEventListener("contextmenu", onSurfaceContext);
|
|
1175
|
-
railTrigger.addEventListener("click", onRailClick);
|
|
1176
1091
|
let disposeDrag = attachDrag(surface);
|
|
1177
1092
|
doc.addEventListener("visibilitychange", onVisibilityChange);
|
|
1178
1093
|
doc.addEventListener("pointerdown", onDocPointerDown, true);
|
|
@@ -1195,7 +1110,6 @@ function mountQuotaCard({
|
|
|
1195
1110
|
surface.removeEventListener("click", onSurfaceClick);
|
|
1196
1111
|
surface.removeEventListener("keydown", onSurfaceKeydown);
|
|
1197
1112
|
surface.removeEventListener("contextmenu", onSurfaceContext);
|
|
1198
|
-
railTrigger.removeEventListener("click", onRailClick);
|
|
1199
1113
|
menu.removeEventListener("click", onMenuClick);
|
|
1200
1114
|
disposeDrag();
|
|
1201
1115
|
container.remove();
|
package/package.json
CHANGED
package/src/client.mjs
CHANGED
|
@@ -107,13 +107,6 @@ const STYLE_TEXT = `
|
|
|
107
107
|
.dqw-chev { font-size: 9px; line-height: 14px; opacity: .6; flex: none; width: 10px; text-align: center; }
|
|
108
108
|
.dqw-stale-mark { flex: none; font-size: 9px; line-height: 14px; color: var(--dsw-alias-label-warning, #b46900); cursor: help; }
|
|
109
109
|
.dqw-errtext { font-size: 10px; line-height: 14px; opacity: .7; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
110
|
-
.dqw-rail-trigger { display: none; flex: none; align-items: center; justify-content: center; width: 36px; height: 36px; margin: 0; padding: 0; border: 0; border-radius: 50%; background: transparent; color: var(--dsw-alias-label-primary, inherit); cursor: pointer; transition: background-color .12s, color .12s; }
|
|
111
|
-
.dqw-rail-trigger svg { display: block; width: 16px; height: 16px; }
|
|
112
|
-
.dqw-rail-trigger:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover, rgba(128,128,128,.12)); color: var(--dsw-alias-label-primary, inherit); }
|
|
113
|
-
.dqw-rail-trigger:active:not(:disabled), .dqw-rail-trigger[aria-expanded="true"] { background: var(--dsw-alias-interactive-bg-active, rgba(128,128,128,.18)); color: var(--dsw-alias-label-primary, inherit); }
|
|
114
|
-
.dqw-rail-trigger:focus-visible { outline: 2px solid var(--dsw-alias-brand-primary, #5b8def); outline-offset: 2px; }
|
|
115
|
-
:host([data-dsh-quota-watch-sidebar-collapsed]) .dqw-card { display: none; }
|
|
116
|
-
:host([data-dsh-quota-watch-sidebar-collapsed]) .dqw-rail-trigger { display: inline-flex; }
|
|
117
110
|
@media print { :host { display: none !important; } }
|
|
118
111
|
`
|
|
119
112
|
|
|
@@ -392,18 +385,7 @@ export function mountQuotaCard({
|
|
|
392
385
|
const lastUpdated = text(doc, 'p', 'dqw-meta', copy.loading)
|
|
393
386
|
lastUpdated.dataset.role = 'updated'
|
|
394
387
|
body.append(lastUpdated)
|
|
395
|
-
|
|
396
|
-
// replaces the card body; the shadow CSS swaps them on the host's collapsed flag.
|
|
397
|
-
const railTrigger = doc.createElement('button')
|
|
398
|
-
railTrigger.type = 'button'
|
|
399
|
-
railTrigger.className = 'dqw-rail-trigger'
|
|
400
|
-
railTrigger.dataset.dshQuotaWatchRail = ''
|
|
401
|
-
railTrigger.title = copy.title
|
|
402
|
-
railTrigger.setAttribute('aria-label', copy.title)
|
|
403
|
-
railTrigger.setAttribute('aria-haspopup', 'dialog')
|
|
404
|
-
railTrigger.setAttribute('aria-expanded', 'false')
|
|
405
|
-
railTrigger.append(quotaIcon(doc))
|
|
406
|
-
card.append(body, railTrigger)
|
|
388
|
+
card.append(body)
|
|
407
389
|
cardRoot.append(style, card)
|
|
408
390
|
// Details open in a viewport-level floating panel — the only detail surface.
|
|
409
391
|
const panel = doc.createElement('div')
|
|
@@ -440,7 +422,12 @@ export function mountQuotaCard({
|
|
|
440
422
|
surface.hidden = dataHidden
|
|
441
423
|
floatHost.hidden = dataHidden
|
|
442
424
|
}
|
|
443
|
-
|
|
425
|
+
// Mount under <body>, NOT <html>: the DSH theme tokens (--dsw-alias-*) are
|
|
426
|
+
// defined on <body>, and a sibling of <body> never inherits them — mounting
|
|
427
|
+
// on documentElement silently stranded the float shell on hardcoded dark
|
|
428
|
+
// fallbacks (broke the light theme). <body> is also transform-free, so
|
|
429
|
+
// position:fixed stays viewport-anchored.
|
|
430
|
+
doc.body.append(floatHost)
|
|
444
431
|
const applyFloatGeometry = () => {
|
|
445
432
|
const viewWidth = win.innerWidth ?? 1024
|
|
446
433
|
const viewHeight = win.innerHeight ?? 768
|
|
@@ -771,7 +758,6 @@ export function mountQuotaCard({
|
|
|
771
758
|
lastAnchor = null
|
|
772
759
|
panelNav = false
|
|
773
760
|
surface.setAttribute('aria-expanded', 'false')
|
|
774
|
-
railTrigger.setAttribute('aria-expanded', 'false')
|
|
775
761
|
return
|
|
776
762
|
}
|
|
777
763
|
if (openKey === 'overview') {
|
|
@@ -782,7 +768,6 @@ export function mountQuotaCard({
|
|
|
782
768
|
panel.hidden = false
|
|
783
769
|
placePanel()
|
|
784
770
|
surface.setAttribute('aria-expanded', 'true')
|
|
785
|
-
railTrigger.setAttribute('aria-expanded', 'true')
|
|
786
771
|
return
|
|
787
772
|
}
|
|
788
773
|
const provider = (snapshot?.providers ?? []).find((item) => item?.key === openKey)
|
|
@@ -799,7 +784,6 @@ export function mountQuotaCard({
|
|
|
799
784
|
panel.hidden = false
|
|
800
785
|
placePanel()
|
|
801
786
|
surface.setAttribute('aria-expanded', 'true')
|
|
802
|
-
railTrigger.setAttribute('aria-expanded', 'true')
|
|
803
787
|
}
|
|
804
788
|
|
|
805
789
|
const renderFloatFace = () => {
|
|
@@ -877,15 +861,6 @@ export function mountQuotaCard({
|
|
|
877
861
|
event.preventDefault()
|
|
878
862
|
openMenu()
|
|
879
863
|
}
|
|
880
|
-
/** Collapsed-rail gauge icon: toggles the panel, exactly like the capsule. */
|
|
881
|
-
const onRailClick = () => {
|
|
882
|
-
if (openKey !== undefined && !panel.hidden) {
|
|
883
|
-
openKey = undefined
|
|
884
|
-
syncPop()
|
|
885
|
-
return
|
|
886
|
-
}
|
|
887
|
-
openOverview(railTrigger)
|
|
888
|
-
}
|
|
889
864
|
const onMenuClick = (event) => {
|
|
890
865
|
const item = event.target?.closest?.('[data-menu]')
|
|
891
866
|
if (!item) return
|
|
@@ -915,26 +890,12 @@ export function mountQuotaCard({
|
|
|
915
890
|
// build (0.2.0-rc.2 web) never writes data-sidebar-collapsed on collapse
|
|
916
891
|
// (verified via CDP + bundle grep), but the foot container measurably
|
|
917
892
|
// narrows — and the 36px gauge icon fits any rail.
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
const
|
|
922
|
-
container.hidden = !showCard
|
|
923
|
-
if (showRail) container.dataset.dshQuotaWatchSidebarCollapsed = ''
|
|
924
|
-
else delete container.dataset.dshQuotaWatchSidebarCollapsed
|
|
925
|
-
// The card ↔ rail swap is driven by INLINE styles (know-how 017's lesson),
|
|
926
|
-
// AND the collapsed rail gets an explicit 38px box: CDP layout-chain dump
|
|
927
|
-
// showed the 0.2.0 framework flex-collapsing unknown foot children to 0px
|
|
928
|
-
// height, so the gauge must opt out of the flex squeeze to be visible.
|
|
893
|
+
// The sidebar card shows ONLY in an expanded sidebar: the width guard hides
|
|
894
|
+
// it in narrow rails / squeezed containers (works on every profile), and no
|
|
895
|
+
// host collapse signal is consulted at all (they proved host-specific).
|
|
896
|
+
const showCard = !surfaceFlags.cardHidden && !footTooNarrow && !noDataHidden
|
|
897
|
+
container.hidden = !showCard
|
|
929
898
|
card.style.display = showCard ? '' : 'none'
|
|
930
|
-
railTrigger.style.display = showRail ? 'inline-flex' : 'none'
|
|
931
|
-
if (showRail) {
|
|
932
|
-
container.style.height = SURFACE_SIZE + 'px'
|
|
933
|
-
container.style.flex = '0 0 auto'
|
|
934
|
-
} else {
|
|
935
|
-
container.style.height = ''
|
|
936
|
-
container.style.flex = ''
|
|
937
|
-
}
|
|
938
899
|
}
|
|
939
900
|
const footResizeObserver = typeof win.ResizeObserver === 'function'
|
|
940
901
|
? new win.ResizeObserver(() => { syncCardVisibility() })
|
|
@@ -1009,28 +970,10 @@ export function mountQuotaCard({
|
|
|
1009
970
|
})
|
|
1010
971
|
}
|
|
1011
972
|
|
|
1012
|
-
// Web narrow-rail collapse: the host keeps the footArea but squeezes it, which
|
|
1013
|
-
// clips the card into garbled text — hide the card and let the capsule carry
|
|
1014
|
-
// the entry (0.0.18 shipped dedicated rail CSS; 0.1.0 retired it, and 0.1.2
|
|
1015
|
-
// reintroduces only this visibility signal — zero layout coupling).
|
|
1016
|
-
let sidebarCollapsed = Boolean(doc.querySelector('[data-sidebar-collapsed]'))
|
|
1017
|
-
const syncSidebarCollapsed = () => {
|
|
1018
|
-
const next = Boolean(doc.querySelector('[data-sidebar-collapsed]'))
|
|
1019
|
-
if (next !== sidebarCollapsed) {
|
|
1020
|
-
sidebarCollapsed = next
|
|
1021
|
-
renderAll()
|
|
1022
|
-
}
|
|
1023
|
-
}
|
|
1024
973
|
const observer = new win.MutationObserver(() => {
|
|
1025
|
-
syncSidebarCollapsed()
|
|
1026
974
|
schedulePlace()
|
|
1027
975
|
})
|
|
1028
|
-
observer.observe(doc.body, {
|
|
1029
|
-
childList: true,
|
|
1030
|
-
subtree: true,
|
|
1031
|
-
attributes: true,
|
|
1032
|
-
attributeFilter: ['data-sidebar-collapsed'],
|
|
1033
|
-
})
|
|
976
|
+
observer.observe(doc.body, { childList: true, subtree: true })
|
|
1034
977
|
place()
|
|
1035
978
|
|
|
1036
979
|
const startPolling = () => {
|
|
@@ -1144,7 +1087,6 @@ export function mountQuotaCard({
|
|
|
1144
1087
|
surface.addEventListener('click', onSurfaceClick)
|
|
1145
1088
|
surface.addEventListener('keydown', onSurfaceKeydown)
|
|
1146
1089
|
surface.addEventListener('contextmenu', onSurfaceContext)
|
|
1147
|
-
railTrigger.addEventListener('click', onRailClick)
|
|
1148
1090
|
let disposeDrag = attachDrag(surface)
|
|
1149
1091
|
doc.addEventListener('visibilitychange', onVisibilityChange)
|
|
1150
1092
|
doc.addEventListener('pointerdown', onDocPointerDown, true)
|
|
@@ -1168,7 +1110,6 @@ export function mountQuotaCard({
|
|
|
1168
1110
|
surface.removeEventListener('click', onSurfaceClick)
|
|
1169
1111
|
surface.removeEventListener('keydown', onSurfaceKeydown)
|
|
1170
1112
|
surface.removeEventListener('contextmenu', onSurfaceContext)
|
|
1171
|
-
railTrigger.removeEventListener('click', onRailClick)
|
|
1172
1113
|
menu.removeEventListener('click', onMenuClick)
|
|
1173
1114
|
disposeDrag()
|
|
1174
1115
|
container.remove()
|