estreui 1.2.2 → 1.2.3
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.md +10 -0
- package/package.json +6 -2
- package/scripts/estreU0EEOZ.js +39 -2
- package/scripts/estreUi.js +93 -50
- package/serviceWorker.js +2 -2
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# EstreUI.js
|
|
2
2
|
|
|
3
|
+

|
|
4
|
+
|
|
3
5
|
EstreUI is a "Rimwork" (Runnable Frame) designed to bridge the gap between classic web development and modern native-like web applications. It provides a structured, mobile-first environment for developers familiar with jQuery, ASP, PHP, or JSP, as well as native app developers looking to transition to the web.
|
|
4
6
|
|
|
5
7
|
[한국어 문서 (Korean Documentation)](#estre-ui-rimwork-korean)
|
|
@@ -27,6 +29,10 @@ EstreUI is not just a library, nor a full-blown framework in the traditional sen
|
|
|
27
29
|
* **Browsers**: Chromium 92+, Safari 15+ (iOS 15+).
|
|
28
30
|
* **Recommendation**: **iOS 16+** is strongly recommended due to severe CSS limitations in iOS 15.
|
|
29
31
|
|
|
32
|
+
### Developer & AI Agent Documentation
|
|
33
|
+
* **[EstreUI.js Developer Docs](.agent/estreui/README.md)**: In-depth, case-based developer documentation covering foundations, page system, handles, markup conventions, boot sequence, navigation API, and template engine.
|
|
34
|
+
* **[Project Adaptation Guide](.agent/project/README.md)**: Reference material for integrating EstreUI.js into a new project or modifying code in an existing one — includes upstream file classification, adaptation patterns, and style guide.
|
|
35
|
+
|
|
30
36
|
---
|
|
31
37
|
|
|
32
38
|
## Getting Started
|
|
@@ -292,6 +298,10 @@ EstreUI는 단순한 라이브러리도, 전통적인 의미의 완전한 프레
|
|
|
292
298
|
* **브라우저**: Chromium 92+, Safari 15+ (iOS 15+).
|
|
293
299
|
* **권장 사항**: iOS 15의 CSS 제한으로 인해 **iOS 16 이상**을 강력히 권장합니다.
|
|
294
300
|
|
|
301
|
+
### 개발자 및 AI 에이전트 문서
|
|
302
|
+
* **[EstreUI.js 개발문서](.agent/estreui/README.md)**: 기초, 페이지 시스템, 핸들, 마크업 컨벤션, 부트 시퀀스, 네비게이션 API, 템플릿 엔진을 다루는 사례 기반 상세 개발문서입니다.
|
|
303
|
+
* **[프로젝트 적용 가이드](.agent/project/README.md)**: EstreUI.js를 새 프로젝트에 통합하거나 기존 프로젝트의 코드를 수정할 때 필요한 참고 자료 — 업스트림 파일 분류, 적용 패턴, 스타일 가이드를 포함합니다.
|
|
304
|
+
|
|
295
305
|
---
|
|
296
306
|
|
|
297
307
|
## 시작하기 (Getting Started)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "estreui",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.3",
|
|
4
4
|
"description": "EstreUI Core Library - A comprehensive UI framework for web applications",
|
|
5
5
|
"main": "scripts/estreUi.js",
|
|
6
6
|
"files": [
|
|
@@ -32,7 +32,11 @@
|
|
|
32
32
|
"mobile-ui",
|
|
33
33
|
"desktop-ui",
|
|
34
34
|
"web-desktop",
|
|
35
|
-
"jquery-plugin"
|
|
35
|
+
"jquery-plugin",
|
|
36
|
+
"legacy-modernization",
|
|
37
|
+
"no-build",
|
|
38
|
+
"jquery4",
|
|
39
|
+
"ai-ready"
|
|
36
40
|
],
|
|
37
41
|
"author": "SoliEstre",
|
|
38
42
|
"license": "MIT",
|
package/scripts/estreU0EEOZ.js
CHANGED
|
@@ -593,6 +593,44 @@ const cvt = {
|
|
|
593
593
|
|
|
594
594
|
|
|
595
595
|
|
|
596
|
+
/** Data Attribute name alias constant and Data prefixed Kebab Case Characters loopback (2 letters and more) */
|
|
597
|
+
const dd = new Proxy({
|
|
598
|
+
get a() { return ; }, // *reserved*
|
|
599
|
+
get b() { return ; }, // *reserved*
|
|
600
|
+
get c() { return ; }, // *reserved*
|
|
601
|
+
get d() { return "data-disabled"; },
|
|
602
|
+
get e() { return ; }, // *reserved*
|
|
603
|
+
get f() { return ; }, // *reserved*
|
|
604
|
+
get g() { return ; }, // *reserved*
|
|
605
|
+
get h() { return ; }, // *reserved*
|
|
606
|
+
get i() { return ; }, // *reserved*
|
|
607
|
+
get j() { return ; }, // *reserved*
|
|
608
|
+
get k() { return ; }, // *reserved*
|
|
609
|
+
get l() { return ; }, // *reserved*
|
|
610
|
+
get m() { return ; }, // *reserved*
|
|
611
|
+
get n() { return ; }, // *reserved*
|
|
612
|
+
get o() { return ; }, // *reserved*
|
|
613
|
+
get p() { return ; }, // *reserved*
|
|
614
|
+
get q() { return ; }, // *reserved*
|
|
615
|
+
get r() { return ; }, // *reserved*
|
|
616
|
+
get s() { return ; }, // *reserved*
|
|
617
|
+
get t() { return ; }, // *reserved*
|
|
618
|
+
get u() { return ; }, // *reserved*
|
|
619
|
+
get v() { return ; }, // *reserved*
|
|
620
|
+
get w() { return ; }, // *reserved*
|
|
621
|
+
get x() { return ; }, // *reserved*
|
|
622
|
+
get y() { return ; }, // *reserved*
|
|
623
|
+
get z() { return ; }, // *reserved*
|
|
624
|
+
}, {
|
|
625
|
+
get: (target, prop) => {
|
|
626
|
+
if (prop in target) return target[prop];
|
|
627
|
+
else return "data-" + prop.replace(/([a-z0-9])([A-Z])/g, '$1-$2')
|
|
628
|
+
.replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
|
|
629
|
+
.replace(/^([A-Z])/, '-$1').toLowerCase();
|
|
630
|
+
}
|
|
631
|
+
});
|
|
632
|
+
|
|
633
|
+
|
|
596
634
|
// Utility constants block --
|
|
597
635
|
|
|
598
636
|
// Text alias constant
|
|
@@ -899,8 +937,7 @@ class LocalStyle {
|
|
|
899
937
|
}
|
|
900
938
|
localPrefix += specifier;
|
|
901
939
|
}
|
|
902
|
-
|
|
903
|
-
const localizedStyles = styles.replace(/([^#])##([^#])/g, "$1" + localPrefix + "$2").replace(/^##([^#])/gm, localPrefix + "$1");
|
|
940
|
+
const localizedStyles = styles.replace(/(^|[^#])##(?!#)/gm, "$1" + localPrefix);
|
|
904
941
|
|
|
905
942
|
const styleSheet = doc.ce("style");
|
|
906
943
|
if (elem == null) location.append(styleSheet);
|
package/scripts/estreUi.js
CHANGED
|
@@ -3118,7 +3118,7 @@ class EstreComponent extends EstrePageHostHandle {
|
|
|
3118
3118
|
|
|
3119
3119
|
openContainer(id, intent, instanceOrigin) {
|
|
3120
3120
|
if (this.isClosing) return false;
|
|
3121
|
-
const page = pageManager.
|
|
3121
|
+
const page = pageManager.getContainer(id, this.id, this.sectionBound);
|
|
3122
3122
|
if (page == null) return null;
|
|
3123
3123
|
if (page.statement == "static") return null;
|
|
3124
3124
|
this.$host.append(page.live);
|
|
@@ -5782,7 +5782,7 @@ class EstreUiPageManager {
|
|
|
5782
5782
|
else return null;
|
|
5783
5783
|
}
|
|
5784
5784
|
|
|
5785
|
-
|
|
5785
|
+
getContainer(id, componentId, sectionBound, statement) {
|
|
5786
5786
|
var pid = this.findPid(EstreUiPage.getPidContainer(id, componentId, sectionBound, statement));
|
|
5787
5787
|
if (pid != null) return this.get(pid);
|
|
5788
5788
|
else return null;
|
|
@@ -5895,12 +5895,14 @@ class EstreUiPageManager {
|
|
|
5895
5895
|
if (!isIntentNone && existArticle && (page.isArticle || page.article == "main")) targetProcessed.article = container.showArticle(page.article, intent, articleInstanceOrigin);
|
|
5896
5896
|
else targetProcessed.article = article.show();
|
|
5897
5897
|
success = targetProcessed.article;
|
|
5898
|
+
// falls through
|
|
5898
5899
|
case "container":
|
|
5899
5900
|
if (success) {
|
|
5900
5901
|
if (!isIntentNone && existContainer && (page.isContainer || isRootMain)) targetProcessed.container = component.showContainer(page.container, intent, containerInstanceOrigin);
|
|
5901
5902
|
else targetProcessed.container = container.show();
|
|
5902
5903
|
success = targetProcessed.container;
|
|
5903
5904
|
}
|
|
5905
|
+
// falls through
|
|
5904
5906
|
case "component":
|
|
5905
5907
|
if (success) {
|
|
5906
5908
|
if (page.isHeader) {
|
|
@@ -5966,12 +5968,14 @@ class EstreUiPageManager {
|
|
|
5966
5968
|
if (!isIntentNone && (page.isArticle || page.article == "main")) targetProcessed.article = container.showArticle(page.article, intent, articleInstanceOrigin);
|
|
5967
5969
|
else targetProcessed.article = article.show();
|
|
5968
5970
|
success = targetProcessed.article;
|
|
5971
|
+
// falls through
|
|
5969
5972
|
case "container":
|
|
5970
5973
|
if (success) {
|
|
5971
5974
|
if (!isIntentNone && (page.isContainer || (page.article == "main" && page.container == "root"))) targetProcessed.container = component.showContainer(page.container, intent, containerInstanceOrigin);
|
|
5972
5975
|
else targetProcessed.container = container.show();
|
|
5973
5976
|
success = targetProcessed.container;
|
|
5974
5977
|
}
|
|
5978
|
+
// falls through
|
|
5975
5979
|
case "component":
|
|
5976
5980
|
if (success) {
|
|
5977
5981
|
const isRootMain = page.container == "root" && page.article == "main";
|
|
@@ -6053,18 +6057,18 @@ class EstreUiPageManager {
|
|
|
6053
6057
|
return postPromise(resolve => {
|
|
6054
6058
|
postQueue(async _ => {
|
|
6055
6059
|
if (pid.indexOf("!") > -1) pid = this.#managedPidMap[pid.replace(/^\!/, "")];
|
|
6056
|
-
if (pid == null) resolve(null);
|
|
6060
|
+
if (pid == null) return resolve(null);
|
|
6057
6061
|
if (pid.indexOf("*") > -1) pid = this.extPidMap[pid.replace(/^\*/, "")];
|
|
6058
|
-
if (pid == null) resolve(null);
|
|
6062
|
+
if (pid == null) return resolve(null);
|
|
6059
6063
|
if (pid.indexOf("$") < 0) pid = this.findPid(pid);
|
|
6060
6064
|
const page = this.get(pid);
|
|
6061
|
-
if (page == null) resolve(null);
|
|
6065
|
+
if (page == null) return resolve(null);
|
|
6062
6066
|
page.setInstanceOrigin(instanceOrigin);
|
|
6063
6067
|
const sections = page.sections;
|
|
6064
|
-
if (sections == null) resolve(null);
|
|
6068
|
+
if (sections == null) return resolve(null);
|
|
6065
6069
|
|
|
6066
6070
|
var component = sections[page.componentInstanceId];
|
|
6067
|
-
if (component == null) resolve(null);
|
|
6071
|
+
if (component == null) return resolve(null);
|
|
6068
6072
|
var container = null;
|
|
6069
6073
|
var article = null;
|
|
6070
6074
|
const componentInstanceOrigin = page.componentInstanceOrigin;
|
|
@@ -6150,8 +6154,7 @@ class EstreUiCustomPageManager {
|
|
|
6150
6154
|
}
|
|
6151
6155
|
|
|
6152
6156
|
showOrBringPage(id, intent, instanceOrigin) {
|
|
6153
|
-
|
|
6154
|
-
return pageManager.showOrBringPage(id, intent, instanceOrigin);
|
|
6157
|
+
return pageManager.showOrBringPage("*" + id, intent, instanceOrigin);
|
|
6155
6158
|
}
|
|
6156
6159
|
|
|
6157
6160
|
hidePage(id, hideHost = false, instanceOrigin = null) {
|
|
@@ -6174,7 +6177,7 @@ class EstreHandle {
|
|
|
6174
6177
|
// constants
|
|
6175
6178
|
static #handles = {
|
|
6176
6179
|
get [uis.unifiedCalendar]() { return EstreUnifiedCalendarHandle; },
|
|
6177
|
-
get [uis.dedicatedCalendar]() { return
|
|
6180
|
+
get [uis.dedicatedCalendar]() { return EstreDedicatedCalendarHandle; },
|
|
6178
6181
|
|
|
6179
6182
|
get [uis.scalable]() { return EstreScalableHandle; },
|
|
6180
6183
|
get [uis.collapsible]() { return EstreCollapsibleHandle; },
|
|
@@ -9610,7 +9613,7 @@ const scheduleDataSet = new ScheduleDataSet();
|
|
|
9610
9613
|
|
|
9611
9614
|
|
|
9612
9615
|
|
|
9613
|
-
class
|
|
9616
|
+
class EstreDedicatedCalendarHandle extends EstreHandle {
|
|
9614
9617
|
|
|
9615
9618
|
// constants
|
|
9616
9619
|
|
|
@@ -12005,17 +12008,19 @@ class EstreMultiDialSlotHandle extends EstreHandle {
|
|
|
12005
12008
|
});
|
|
12006
12009
|
|
|
12007
12010
|
|
|
12008
|
-
const threshold =
|
|
12011
|
+
const threshold = 0.99;
|
|
12009
12012
|
const rootMargin = "0px";
|
|
12010
12013
|
|
|
12011
12014
|
this.#itemSelectionObserver[index] = new IntersectionObserver(entries => {
|
|
12015
|
+
let best = n;
|
|
12012
12016
|
for (const entry of entries) {
|
|
12013
|
-
if (entry.
|
|
12014
|
-
|
|
12015
|
-
|
|
12016
|
-
|
|
12017
|
-
|
|
12018
|
-
|
|
12017
|
+
if (entry.intersectionRatio > (best?.intersectionRatio ?? 0)) best = entry;
|
|
12018
|
+
}
|
|
12019
|
+
if (best != n && best.intersectionRatio >= threshold) {
|
|
12020
|
+
const idx = best.target.dataset.index;
|
|
12021
|
+
const i = parseInt(idx);
|
|
12022
|
+
itemBound.dataset.selected = idx;
|
|
12023
|
+
this.#onSelected(index, i);
|
|
12019
12024
|
}
|
|
12020
12025
|
}, {
|
|
12021
12026
|
root: itemBound,
|
|
@@ -12038,13 +12043,15 @@ class EstreMultiDialSlotHandle extends EstreHandle {
|
|
|
12038
12043
|
if (current != null) for (const elem of items) current.unobserve(elem);
|
|
12039
12044
|
|
|
12040
12045
|
this.#itemSelectionObserver[index] = new IntersectionObserver(entries => {
|
|
12046
|
+
let best = n;
|
|
12041
12047
|
for (const entry of entries) {
|
|
12042
|
-
if (entry.
|
|
12043
|
-
|
|
12044
|
-
|
|
12045
|
-
|
|
12046
|
-
|
|
12047
|
-
|
|
12048
|
+
if (entry.intersectionRatio > (best?.intersectionRatio ?? 0)) best = entry;
|
|
12049
|
+
}
|
|
12050
|
+
if (best != n && best.intersectionRatio >= threshold) {
|
|
12051
|
+
const idx = best.target.dataset.index;
|
|
12052
|
+
const i = parseInt(idx);
|
|
12053
|
+
itemBound.dataset.selected = idx;
|
|
12054
|
+
this.#onSelected(index, i);
|
|
12048
12055
|
}
|
|
12049
12056
|
}, {
|
|
12050
12057
|
root: itemBound,
|
|
@@ -12052,12 +12059,33 @@ class EstreMultiDialSlotHandle extends EstreHandle {
|
|
|
12052
12059
|
threshold
|
|
12053
12060
|
});
|
|
12054
12061
|
|
|
12055
|
-
for (const item of items) this.#setItemEvent(index, item.dataset.index, item);
|
|
12062
|
+
for (const item of items) this.#setItemEvent(index, item.dataset.index.int, item);
|
|
12056
12063
|
}
|
|
12057
12064
|
});
|
|
12058
12065
|
|
|
12059
12066
|
ro.observe(itemBound);
|
|
12060
12067
|
|
|
12068
|
+
// Safari/WebKit does not re-evaluate IntersectionObserver entries
|
|
12069
|
+
// when scrolling occurs in an intermediate scroll container (dialHost)
|
|
12070
|
+
// between the IO root (dialBound) and the observed targets (li items).
|
|
12071
|
+
// Force IO re-evaluation on scroll by cycling unobserve/observe.
|
|
12072
|
+
{
|
|
12073
|
+
const dialHost = this.$dialHosts[index];
|
|
12074
|
+
let scrollRaf = 0;
|
|
12075
|
+
dialHost?.addEventListener("scroll", () => {
|
|
12076
|
+
cancelAnimationFrame(scrollRaf);
|
|
12077
|
+
scrollRaf = requestAnimationFrame(() => {
|
|
12078
|
+
const observer = this.#itemSelectionObserver[index];
|
|
12079
|
+
if (observer == n) return;
|
|
12080
|
+
const items = this.getDialItems(index);
|
|
12081
|
+
for (const item of items) {
|
|
12082
|
+
observer.unobserve(item);
|
|
12083
|
+
observer.observe(item);
|
|
12084
|
+
}
|
|
12085
|
+
});
|
|
12086
|
+
}, { passive: true });
|
|
12087
|
+
}
|
|
12088
|
+
|
|
12061
12089
|
return ro;
|
|
12062
12090
|
}
|
|
12063
12091
|
|
|
@@ -12133,7 +12161,6 @@ class EstreMultiDialSlotHandle extends EstreHandle {
|
|
|
12133
12161
|
observer.observe(item);
|
|
12134
12162
|
$(item).off(c.click).click(function (e) {
|
|
12135
12163
|
e.preventDefault();
|
|
12136
|
-
|
|
12137
12164
|
inst.#scrollSmooth(this);
|
|
12138
12165
|
|
|
12139
12166
|
return false;
|
|
@@ -14887,83 +14914,99 @@ const estreUi = {
|
|
|
14887
14914
|
|
|
14888
14915
|
|
|
14889
14916
|
let loadExportedFixedBottom;
|
|
14890
|
-
loadExportedFixedBottom = _ => loadExported("fixedBottom.html").then(htmlContent => {
|
|
14917
|
+
loadExportedFixedBottom = (_, attempt = 0) => loadExported("fixedBottom.html").then(htmlContent => {
|
|
14891
14918
|
this.$fixedBottom.prepend(htmlContent);
|
|
14892
14919
|
return onLoadedFixedBottom();
|
|
14893
14920
|
}).catch(error => {
|
|
14921
|
+
const delay = Math.min(1000 * Math.pow(2, attempt), 30000);
|
|
14894
14922
|
console.error("There has been a problem with your fetch operation for fixedBottom: ", error);
|
|
14895
|
-
console.log(
|
|
14896
|
-
return
|
|
14923
|
+
console.log(`Retrying to load fixedBottom in ${delay}ms...`);
|
|
14924
|
+
return postPromise(resolve => setTimeout(resolve, delay))
|
|
14925
|
+
.then(() => loadExportedFixedBottom(_, attempt + 1));
|
|
14897
14926
|
});
|
|
14898
14927
|
|
|
14899
14928
|
let loadExportedFixedTop;
|
|
14900
|
-
loadExportedFixedTop = subTerm => loadExported("fixedTop.html").then(htmlContent => {
|
|
14929
|
+
loadExportedFixedTop = (subTerm, attempt = 0) => loadExported("fixedTop.html").then(htmlContent => {
|
|
14901
14930
|
this.$fixedTop.prepend(htmlContent);
|
|
14902
14931
|
return onLoadedFixedTop(subTerm);
|
|
14903
14932
|
}).catch(error => {
|
|
14933
|
+
const delay = Math.min(1000 * Math.pow(2, attempt), 30000);
|
|
14904
14934
|
console.error("There has been a problem with your fetch operation for fixedTop: ", error);
|
|
14905
|
-
console.log(
|
|
14906
|
-
return
|
|
14935
|
+
console.log(`Retrying to load fixedTop in ${delay}ms...`);
|
|
14936
|
+
return postPromise(resolve => setTimeout(resolve, delay))
|
|
14937
|
+
.then(() => loadExportedFixedTop(subTerm, attempt + 1));
|
|
14907
14938
|
});
|
|
14908
14939
|
|
|
14909
14940
|
let loadExportedStaticDoc;
|
|
14910
|
-
loadExportedStaticDoc = subTerm => loadExported("staticDoc.html").then(htmlContent => {
|
|
14941
|
+
loadExportedStaticDoc = (subTerm, attempt = 0) => loadExported("staticDoc.html").then(htmlContent => {
|
|
14911
14942
|
this.$mainArea.prepend(htmlContent);
|
|
14912
14943
|
return onLoadedStaticDoc(subTerm);
|
|
14913
14944
|
}).catch(error => {
|
|
14945
|
+
const delay = Math.min(1000 * Math.pow(2, attempt), 30000);
|
|
14914
14946
|
console.error("There has been a problem with your fetch operation for staticDoc: ", error);
|
|
14915
|
-
console.log(
|
|
14916
|
-
return
|
|
14947
|
+
console.log(`Retrying to load staticDoc in ${delay}ms...`);
|
|
14948
|
+
return postPromise(resolve => setTimeout(resolve, delay))
|
|
14949
|
+
.then(() => loadExportedStaticDoc(subTerm, attempt + 1));
|
|
14917
14950
|
});
|
|
14918
14951
|
|
|
14919
14952
|
let loadExportedInstantDoc;
|
|
14920
|
-
loadExportedInstantDoc = subTerm => loadExported("instantDoc.html").then(htmlContent => {
|
|
14953
|
+
loadExportedInstantDoc = (subTerm, attempt = 0) => loadExported("instantDoc.html").then(htmlContent => {
|
|
14921
14954
|
this.$blindArea.prepend(htmlContent);
|
|
14922
14955
|
return onLoadedInstantDoc(subTerm);
|
|
14923
14956
|
}).catch(error => {
|
|
14957
|
+
const delay = Math.min(1000 * Math.pow(2, attempt), 30000);
|
|
14924
14958
|
console.error("There has been a problem with your fetch operation for instantDoc: ", error);
|
|
14925
|
-
console.log(
|
|
14926
|
-
return
|
|
14959
|
+
console.log(`Retrying to load instantDoc in ${delay}ms...`);
|
|
14960
|
+
return postPromise(resolve => setTimeout(resolve, delay))
|
|
14961
|
+
.then(() => loadExportedInstantDoc(subTerm, attempt + 1));
|
|
14927
14962
|
});
|
|
14928
14963
|
|
|
14929
14964
|
let loadExportedManagedOverlay;
|
|
14930
|
-
loadExportedManagedOverlay = subTerm => loadExported("managedOverlay.html").then(htmlContent => {
|
|
14965
|
+
loadExportedManagedOverlay = (subTerm, attempt = 0) => loadExported("managedOverlay.html").then(htmlContent => {
|
|
14931
14966
|
this.$overlayArea.prepend(htmlContent);
|
|
14932
14967
|
return onLoadedManagedOverlay(subTerm);
|
|
14933
14968
|
}).catch(error => {
|
|
14969
|
+
const delay = Math.min(1000 * Math.pow(2, attempt), 30000);
|
|
14934
14970
|
console.error("There has been a problem with your fetch operation for managedOverlay: ", error);
|
|
14935
|
-
console.log(
|
|
14936
|
-
return
|
|
14971
|
+
console.log(`Retrying to load managedOverlay in ${delay}ms...`);
|
|
14972
|
+
return postPromise(resolve => setTimeout(resolve, delay))
|
|
14973
|
+
.then(() => loadExportedManagedOverlay(subTerm, attempt + 1));
|
|
14937
14974
|
});
|
|
14938
14975
|
|
|
14939
14976
|
let loadExportedMainMenu;
|
|
14940
|
-
loadExportedMainMenu = subTerm => loadExported("mainMenu.html").then(htmlContent => {
|
|
14977
|
+
loadExportedMainMenu = (subTerm, attempt = 0) => loadExported("mainMenu.html").then(htmlContent => {
|
|
14941
14978
|
this.$mainMenu.prepend(htmlContent);
|
|
14942
14979
|
return onLoadedMainMenu(subTerm);
|
|
14943
14980
|
}).catch(error => {
|
|
14981
|
+
const delay = Math.min(1000 * Math.pow(2, attempt), 30000);
|
|
14944
14982
|
console.error("There has been a problem with your fetch operation for mainMenu: ", error);
|
|
14945
|
-
console.log(
|
|
14946
|
-
return
|
|
14983
|
+
console.log(`Retrying to load mainMenu in ${delay}ms...`);
|
|
14984
|
+
return postPromise(resolve => setTimeout(resolve, delay))
|
|
14985
|
+
.then(() => loadExportedMainMenu(subTerm, attempt + 1));
|
|
14947
14986
|
});
|
|
14948
14987
|
|
|
14949
14988
|
let loadExportedStockHandlePrototypes;
|
|
14950
|
-
loadExportedStockHandlePrototypes = _ => loadExported("stockHandlePrototypes.html").then(htmlContent => {
|
|
14989
|
+
loadExportedStockHandlePrototypes = (_, attempt = 0) => loadExported("stockHandlePrototypes.html").then(htmlContent => {
|
|
14951
14990
|
this.$handlePrototypes.prepend(htmlContent);
|
|
14952
14991
|
return true;
|
|
14953
14992
|
}).catch(error => {
|
|
14993
|
+
const delay = Math.min(1000 * Math.pow(2, attempt), 30000);
|
|
14954
14994
|
console.error("There has been a problem with your fetch operation for stockHandlePrototypes: ", error);
|
|
14955
|
-
console.log(
|
|
14956
|
-
return
|
|
14995
|
+
console.log(`Retrying to load stockHandlePrototypes in ${delay}ms...`);
|
|
14996
|
+
return postPromise(resolve => setTimeout(resolve, delay))
|
|
14997
|
+
.then(() => loadExportedStockHandlePrototypes(_, attempt + 1));
|
|
14957
14998
|
});
|
|
14958
14999
|
|
|
14959
15000
|
let loadExportedCustomHandlePrototypes;
|
|
14960
|
-
loadExportedCustomHandlePrototypes = _ => loadExported("customHandlePrototypes.html").then(htmlContent => {
|
|
15001
|
+
loadExportedCustomHandlePrototypes = (_, attempt = 0) => loadExported("customHandlePrototypes.html").then(htmlContent => {
|
|
14961
15002
|
this.$handlePrototypes.append(htmlContent);
|
|
14962
15003
|
return true;
|
|
14963
15004
|
}).catch(error => {
|
|
15005
|
+
const delay = Math.min(1000 * Math.pow(2, attempt), 30000);
|
|
14964
15006
|
console.error("There has been a problem with your fetch operation for customHandlePrototypes: ", error);
|
|
14965
|
-
console.log(
|
|
14966
|
-
return
|
|
15007
|
+
console.log(`Retrying to load customHandlePrototypes in ${delay}ms...`);
|
|
15008
|
+
return postPromise(resolve => setTimeout(resolve, delay))
|
|
15009
|
+
.then(() => loadExportedCustomHandlePrototypes(_, attempt + 1));
|
|
14967
15010
|
});
|
|
14968
15011
|
|
|
14969
15012
|
|
package/serviceWorker.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const INSTALLATION_VERSION_NAME = "1.2.
|
|
1
|
+
const INSTALLATION_VERSION_NAME = "1.2.3-r20260416";
|
|
2
2
|
// ^^ Use for check new update "Native application(webview) version(or Android/iOS version combo) - PWA release version"
|
|
3
3
|
// ex) "1.0.1/1.0.0-r20251101k"
|
|
4
4
|
|
|
@@ -21,7 +21,7 @@ const INSTALLATION_FILE_LIST = [
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
// Common files cache - Be changes some time but, well not changed very often
|
|
24
|
-
const CACHE_NAME_COMMON_FILES = "common-files-cache-v1-
|
|
24
|
+
const CACHE_NAME_COMMON_FILES = "common-files-cache-v1-20260416";
|
|
25
25
|
|
|
26
26
|
const COMMON_FILES_TO_CACHE = [
|
|
27
27
|
"./",
|