estreui 1.0.7 → 1.1.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.
- package/README.md +2 -2
- package/index.html +3 -1
- package/package.json +5 -5
- package/scripts/alienese.js +49 -5
- package/scripts/doctre.js +17 -3
- package/scripts/estreU0EEOZ.js +82 -9
- package/scripts/estreUi.js +1138 -40
- package/scripts/jcodd.js +34 -10
- package/scripts/modernism.js +353 -41
- package/serviceWorker.js +6 -4
- package/stockHandlePrototypes.html +13 -1
- package/styles/estreUi.css +25 -102
- package/styles/estreUiCore.css +1 -0
- package/styles/estreUiCore2.css +2 -2
- package/styles/estreUiHandles.css +122 -4
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ EstreUI is not just a library, nor a full-blown framework in the traditional sen
|
|
|
13
13
|
|
|
14
14
|
### Target Audience
|
|
15
15
|
* **Classic Web Developers**: If you are comfortable with jQuery, ASP, PHP, or JSP but want to build modern, single-page applications (SPA) with mobile-app-like experiences, EstreUI is for you.
|
|
16
|
-
* **Native App Developers**: If you are moving from Android or iOS development to the web, you will find EstreUI's lifecycle events (`onCreate`, `
|
|
16
|
+
* **Native App Developers**: If you are moving from Android or iOS development to the web, you will find EstreUI's lifecycle events (`onCreate`, `onStart`, `onResume` equivalent) and intent system very familiar.
|
|
17
17
|
|
|
18
18
|
### Key Features
|
|
19
19
|
* **MVC Pattern**: Structured separation of concerns.
|
|
@@ -278,7 +278,7 @@ EstreUI는 단순한 라이브러리도, 전통적인 의미의 완전한 프레
|
|
|
278
278
|
|
|
279
279
|
### 타겟 독자
|
|
280
280
|
* **클래식 웹 개발자**: jQuery, ASP, PHP, JSP에 익숙하지만 모바일 앱과 같은 경험을 제공하는 현대적인 SPA(Single Page Application)를 구축하고 싶은 분.
|
|
281
|
-
* **네이티브 앱 개발자**: Android나 iOS 개발에서 웹으로 전환하려는 분들에게 EstreUI의 라이프사이클 이벤트(`onCreate`, `
|
|
281
|
+
* **네이티브 앱 개발자**: Android나 iOS 개발에서 웹으로 전환하려는 분들에게 EstreUI의 라이프사이클 이벤트(`onCreate`, `onStart`, `onResume` 등과 유사)와 인텐트 시스템은 매우 친숙할 것입니다.
|
|
282
282
|
|
|
283
283
|
### 주요 특징
|
|
284
284
|
* **MVC 패턴**: 관심사의 구조적 분리.
|
package/index.html
CHANGED
|
@@ -51,7 +51,9 @@
|
|
|
51
51
|
<style>
|
|
52
52
|
/* in html styles */
|
|
53
53
|
</style>
|
|
54
|
-
<script defer src="https://code.jquery.com/jquery-3.7.1.js" integrity="sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4=" crossorigin="anonymous"></script>
|
|
54
|
+
<!-- <script defer src="https://code.jquery.com/jquery-3.7.1.js" integrity="sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4=" crossorigin="anonymous"></script> -->
|
|
55
|
+
<!-- <script dafer src="https://code.jquery.com/jquery-4.0.0.slim.min.js"></script> -->
|
|
56
|
+
<script dafer src="https://code.jquery.com/jquery-4.0.0.min.js"></script>
|
|
55
57
|
<script defer src="https://unpkg.com/@dotlottie/player-component@latest/dist/dotlottie-player.mjs" type="module"></script>
|
|
56
58
|
<script defer type="text/javascript" src="./scripts/jcodd.js"></script>
|
|
57
59
|
<script defer type="text/javascript" src="./scripts/doctre.js"></script>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "estreui",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "EstreUI Core Library - A comprehensive UI framework for web applications",
|
|
5
5
|
"main": "scripts/estreUi.js",
|
|
6
6
|
"files": [
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
"license": "MIT",
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"jquery": "^3.7.1",
|
|
41
|
-
"jcodd": "^0.
|
|
42
|
-
"doctre": "^1.1.
|
|
43
|
-
"modernism": "^0.
|
|
44
|
-
"alienese": "^0.
|
|
41
|
+
"jcodd": "^0.9.0",
|
|
42
|
+
"doctre": "^1.1.1",
|
|
43
|
+
"modernism": "^0.7.0",
|
|
44
|
+
"alienese": "^0.7.0"
|
|
45
45
|
}
|
|
46
46
|
}
|
package/scripts/alienese.js
CHANGED
|
@@ -32,7 +32,7 @@ SOFTWARE.
|
|
|
32
32
|
// This patch aims to create smaller (quicker) and more concise (lighter) JavaScript code.
|
|
33
33
|
// It makes the code more implicit and serves as an alternative to obfuscation.
|
|
34
34
|
//
|
|
35
|
-
// v0.
|
|
35
|
+
// v0.7.0 / release 2026.02.06
|
|
36
36
|
//
|
|
37
37
|
// * Must be loaded modernism.js before this script.
|
|
38
38
|
//
|
|
@@ -239,12 +239,14 @@ const oj = Object;
|
|
|
239
239
|
|
|
240
240
|
// frequent object types alias constant
|
|
241
241
|
const DT = _DATE;
|
|
242
|
+
const TT = _TIME;
|
|
242
243
|
|
|
243
244
|
const RA = _ARRAY;
|
|
244
245
|
const SA = _SET;
|
|
245
246
|
const MA = _MAP;
|
|
246
247
|
|
|
247
248
|
const dt = Date;
|
|
249
|
+
const tt = Time;
|
|
248
250
|
|
|
249
251
|
const ra = Array;
|
|
250
252
|
const sa = Set;
|
|
@@ -252,6 +254,8 @@ const ma = Map;
|
|
|
252
254
|
|
|
253
255
|
|
|
254
256
|
// frequent assign types alias constant
|
|
257
|
+
const fnd = FORE_NOT_DEFAULT;
|
|
258
|
+
const mnd = MORE_NOT_DEFAULT;
|
|
255
259
|
const def = DEFAULT;
|
|
256
260
|
const fin = FINALLY;
|
|
257
261
|
|
|
@@ -260,6 +264,7 @@ const fin = FINALLY;
|
|
|
260
264
|
const x = {
|
|
261
265
|
get a() { return new Array(); },
|
|
262
266
|
get d() { return new Date(); },
|
|
267
|
+
get m() { return new Time(); },
|
|
263
268
|
get t() { return new Set(); },
|
|
264
269
|
get p() { return new Map(); },
|
|
265
270
|
};
|
|
@@ -450,11 +455,15 @@ const rigm = regex => new RegExp(regex, "igm");
|
|
|
450
455
|
|
|
451
456
|
|
|
452
457
|
// additional static function for classes
|
|
453
|
-
|
|
458
|
+
defineGetterAndSetter(fn, "n", function () { return new this(); });
|
|
459
|
+
defineProperty(fn, "w", function () { return new this(...arguments); });
|
|
460
|
+
|
|
454
461
|
defineStaticGetterAndSetter(dt, "t", function () { return this.now(); });
|
|
455
462
|
defineStaticGetterAndSetter(dt, "ms", function () { return dt.n.millis; });
|
|
456
463
|
defineStaticGetterAndSetter(dt, "msd", function () { return this.ms.string.padStart(3, "0"); });
|
|
457
464
|
|
|
465
|
+
defineStaticGetterAndSetter(tt, "t", function () { return this.now(); });
|
|
466
|
+
|
|
458
467
|
|
|
459
468
|
// additional global prototype functions
|
|
460
469
|
definePropertyPlex("mc", function () { return matchCase(this.it, ...arguments); });
|
|
@@ -504,6 +513,7 @@ definePropertyPlex("ifneq", function (that, process = it => it, ornot = it => {}
|
|
|
504
513
|
|
|
505
514
|
|
|
506
515
|
// additional primitive prototype functions
|
|
516
|
+
defineProperty(num, "div", function (by) { return this.it.divided(by); });
|
|
507
517
|
defineGetterAndSetter(num, "str", function () { return this.it.string; });
|
|
508
518
|
defineGetterAndSetter(num, "prc", function () { return this.it.pricision; });
|
|
509
519
|
defineGetterAndSetter(num, "prs", function () { return this.it.pricisionString; });
|
|
@@ -554,7 +564,7 @@ defineGetterAndSetter(dt, "H", function () { return this.it.hours; });
|
|
|
554
564
|
defineGetterAndSetter(dt, "HH", function () { return this.it.H.d00; });
|
|
555
565
|
defineGetterAndSetter(dt, "a", function () { return this.it.H < 12 ? _A : _P; });
|
|
556
566
|
defineGetterAndSetter(dt, "aa", function () { return this.it.a + _M; });
|
|
557
|
-
defineGetterAndSetter(dt, "h", function () { return
|
|
567
|
+
defineGetterAndSetter(dt, "h", function () { return this.it.hours12; });
|
|
558
568
|
defineGetterAndSetter(dt, "hh", function () { return this.it.h.d00; });
|
|
559
569
|
defineGetterAndSetter(dt, "m", function () { return this.it.minutes; });
|
|
560
570
|
defineGetterAndSetter(dt, "mm", function () { return this.it.m.d00; });
|
|
@@ -570,19 +580,52 @@ defineGetterAndSetter(dt, "Zm", function () { return this.it.zoneMinutes; });
|
|
|
570
580
|
defineGetterAndSetter(dt, "Zmm", function () { return this.it.Zm.d00; });
|
|
571
581
|
defineGetterAndSetter(dt, "Zh", function () { return this.it.Z.int; });
|
|
572
582
|
defineGetterAndSetter(dt, "Zhh", function () { return this.it.Zh.d00; });
|
|
573
|
-
defineGetterAndSetter(dt, "X", function () { return this.it.Zhh + cl +
|
|
583
|
+
defineGetterAndSetter(dt, "X", function () { return this.it.let(it => it.Zhh + cl + it.Zmm); });
|
|
574
584
|
defineGetterAndSetter(dt, "t", function () { return this.it.time; });
|
|
575
585
|
defineGetterAndSetter(dt, "ut", function () { return this.it.unix; });
|
|
576
|
-
defineGetterAndSetter(dt, "mo", function () { return this.it.y * 12 +
|
|
586
|
+
defineGetterAndSetter(dt, "mo", function () { return this.it.let(it => it.y * 12 + it.M0); });
|
|
577
587
|
defineGetterAndSetter(dt, "do", function () { return this.it.dateOffset; });
|
|
588
|
+
defineGetterAndSetter(dt, "ymia0", function () { return this.it.yearMonthIntArray0; });
|
|
589
|
+
defineGetterAndSetter(dt, "ymia", function () { return this.it.yearMonthIntArray; });
|
|
578
590
|
defineGetterAndSetter(dt, "yma", function () { return this.it.yearMonthArray; });
|
|
579
591
|
defineGetterAndSetter(dt, "ym", function () { return this.it.yearMonth; });
|
|
592
|
+
defineGetterAndSetter(dt, "da0", function () { return this.it.dateArray0; });
|
|
593
|
+
defineGetterAndSetter(dt, "da", function () { return this.it.dateArray; });
|
|
580
594
|
defineGetterAndSetter(dt, "ymda", function () { return this.it.dateStringArray; });
|
|
581
595
|
defineGetterAndSetter(dt, "ymd", function () { return this.it.dateString; });
|
|
596
|
+
defineGetterAndSetter(dt, "hmia", function () { return this.it.hourMinutesIntArray; });
|
|
582
597
|
defineGetterAndSetter(dt, "hma", function () { return this.it.hourMinutesArray; });
|
|
583
598
|
defineGetterAndSetter(dt, "hm", function () { return this.it.hourMinutes; });
|
|
599
|
+
defineGetterAndSetter(dt, "ta", function () { return this.it.timeArray; });
|
|
584
600
|
defineGetterAndSetter(dt, "hmsa", function () { return this.it.timeStringArray; });
|
|
585
601
|
defineGetterAndSetter(dt, "hms", function () { return this.it.timeString; });
|
|
602
|
+
defineGetterAndSetter(dt, "tp", function () { return this.it.timePart; });
|
|
603
|
+
defineGetterAndSetter(dt, "tt", function () { return this.it.asTime; });
|
|
604
|
+
defineProperty(dt, "sdt", function (time, m, s, ms) { return this.it.setDayTime(time, m, s, ms); });
|
|
605
|
+
defineProperty(dt, "at", function (time) { return this.it.addTime(time); });
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
defineGetterAndSetter(tt, "d", function () { return this.it.days; });
|
|
609
|
+
defineGetterAndSetter(tt, "dd", function () { return this.it.d.d00; });
|
|
610
|
+
defineGetterAndSetter(tt, "H", function () { return this.it.hours; });
|
|
611
|
+
defineGetterAndSetter(tt, "HH", function () { return this.it.H.d00; });
|
|
612
|
+
defineGetterAndSetter(tt, "a", function () { return this.it.H < 12 ? _A : _P; });
|
|
613
|
+
defineGetterAndSetter(tt, "aa", function () { return this.it.a + _M; });
|
|
614
|
+
defineGetterAndSetter(tt, "h", function () { return (this.it.H % 12).let(it => it == 0 ? 12 : it); });
|
|
615
|
+
defineGetterAndSetter(tt, "hh", function () { return this.it.h.d00; });
|
|
616
|
+
defineGetterAndSetter(tt, "m", function () { return this.it.minutes; });
|
|
617
|
+
defineGetterAndSetter(tt, "mm", function () { return this.it.m.d00; });
|
|
618
|
+
defineGetterAndSetter(tt, "s", function () { return this.it.seconds; });
|
|
619
|
+
defineGetterAndSetter(tt, "ss", function () { return this.it.s.d00; });
|
|
620
|
+
defineGetterAndSetter(tt, "ms", function () { return this.it.millis; });
|
|
621
|
+
defineGetterAndSetter(tt, "S", function () { return this.it.ms; });
|
|
622
|
+
defineGetterAndSetter(tt, "SSS", function () { return this.it.S.d000; });
|
|
623
|
+
defineGetterAndSetter(tt, "hmia", function () { return this.it.hourMinutesIntArray; });
|
|
624
|
+
defineGetterAndSetter(tt, "hma", function () { return this.it.hourMinutesArray; });
|
|
625
|
+
defineGetterAndSetter(tt, "hm", function () { return this.it.hourMinutes; });
|
|
626
|
+
defineGetterAndSetter(tt, "ta", function () { return this.it.timeArray; });
|
|
627
|
+
defineGetterAndSetter(tt, "hmsa", function () { return this.it.timeStringArray; });
|
|
628
|
+
defineGetterAndSetter(tt, "hms", function () { return this.it.timeString; });
|
|
586
629
|
|
|
587
630
|
|
|
588
631
|
// Bind to global when not a browser
|
|
@@ -770,6 +813,7 @@ if (typeof window === U) {
|
|
|
770
813
|
dfg("MA", MA);
|
|
771
814
|
|
|
772
815
|
dfg("dt", dt);
|
|
816
|
+
dfg("tt", tt);
|
|
773
817
|
|
|
774
818
|
dfg("ra", ra);
|
|
775
819
|
dfg("sa", sa);
|
package/scripts/doctre.js
CHANGED
|
@@ -30,7 +30,7 @@ SOFTWARE.
|
|
|
30
30
|
//
|
|
31
31
|
// Cold(array object) assigning of HTML Tree for make to JSON string.
|
|
32
32
|
//
|
|
33
|
-
// v1.1.
|
|
33
|
+
// v1.1.1 / release 2026.02.20
|
|
34
34
|
//
|
|
35
35
|
// cold = [] - Cold HTML child node list
|
|
36
36
|
// cold[0] - Tag name, classes, id, name, type = "tag.class1.class2#id@name$type" : string
|
|
@@ -178,6 +178,12 @@ class Doctre {
|
|
|
178
178
|
return jsonContent;
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
+
static copyPrimitives(obj) {
|
|
182
|
+
return Object.fromEntries(
|
|
183
|
+
Object.entries(obj).filter(([, v]) => v !== Object(v))
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
|
|
181
187
|
static matchReplace(frostOrString, matchReplacer = {}) {
|
|
182
188
|
if (typeof frostOrString != "string") return this.matchReplaceObject(frostOrString, matchReplacer);
|
|
183
189
|
|
|
@@ -198,7 +204,11 @@ class Doctre {
|
|
|
198
204
|
forReplaced = replacer(key);
|
|
199
205
|
break;
|
|
200
206
|
case "object":
|
|
201
|
-
|
|
207
|
+
try {
|
|
208
|
+
forReplaced = JSON.stringify(replacer);
|
|
209
|
+
} catch (error) {
|
|
210
|
+
forReplaced = JSON.stringify(this.copyPrimitives(replacer));
|
|
211
|
+
}
|
|
202
212
|
break;
|
|
203
213
|
default:
|
|
204
214
|
forReplaced = "" + replacer;
|
|
@@ -221,7 +231,11 @@ class Doctre {
|
|
|
221
231
|
forReplaced = replacer(match);
|
|
222
232
|
break;
|
|
223
233
|
case "object":
|
|
224
|
-
|
|
234
|
+
try {
|
|
235
|
+
forReplaced = JSON.stringify(replacer);
|
|
236
|
+
} catch (error) {
|
|
237
|
+
forReplaced = JSON.stringify(this.copyPrimitives(replacer));
|
|
238
|
+
}
|
|
225
239
|
break;
|
|
226
240
|
default:
|
|
227
241
|
forReplaced = "" + replacer;
|
package/scripts/estreU0EEOZ.js
CHANGED
|
@@ -217,6 +217,9 @@ const m = {
|
|
|
217
217
|
get st() { return "style"; },
|
|
218
218
|
get ph() { return "placeholder"; },
|
|
219
219
|
get t() { return "title"; },
|
|
220
|
+
get u() { return "value"; },
|
|
221
|
+
get vl() { return "value"; },
|
|
222
|
+
get val() { return "value"; },
|
|
220
223
|
};
|
|
221
224
|
|
|
222
225
|
// Tag type case constants
|
|
@@ -297,15 +300,40 @@ const g = {
|
|
|
297
300
|
}
|
|
298
301
|
|
|
299
302
|
|
|
300
|
-
// CSS combinator constants
|
|
301
|
-
const c = {
|
|
302
|
-
get a() { return ad; },
|
|
303
|
-
get b() { return s; },
|
|
304
|
-
get c() { return gt; },
|
|
305
|
-
get d() { return s; },
|
|
306
|
-
get
|
|
307
|
-
get
|
|
308
|
-
}
|
|
303
|
+
// CSS combinator/operator/option constants and Characters loopback (2 letters and more)
|
|
304
|
+
const c = new Proxy({
|
|
305
|
+
get a() { return ad; }, // next sibling combinator
|
|
306
|
+
get b() { return s; }, // descendant combinator
|
|
307
|
+
get c() { return gt; }, // child combinator
|
|
308
|
+
get d() { return s; }, // descendant combinator
|
|
309
|
+
get e() { return wq; }, // equal operator
|
|
310
|
+
get f() { return ak; }, // contains operator
|
|
311
|
+
get g() { return ti; }, // subsequent sibling combinator / contains match operator
|
|
312
|
+
get h() { return vl; }, // head match operator
|
|
313
|
+
get i() { return _i; }, // ignore case option
|
|
314
|
+
get j() { return ; }, // *reserved*
|
|
315
|
+
get k() { return ; }, // *reserved*
|
|
316
|
+
get l() { return vl + vl; }, // column combinator
|
|
317
|
+
get m() { return ; }, // *reserved*
|
|
318
|
+
get n() { return ad; }, // next sibling combinator
|
|
319
|
+
get o() { return ; }, // *reserved*
|
|
320
|
+
get p() { return cf; }, // prefix match operator
|
|
321
|
+
get q() { return ; }, // *reserved*
|
|
322
|
+
get r() { return ; }, // *reserved*
|
|
323
|
+
get s() { return ds; }, // suffix match operator
|
|
324
|
+
get t() { return _s; }, // strict case option
|
|
325
|
+
get u() { return ; }, // *reserved*
|
|
326
|
+
get v() { return ; }, // *reserved*
|
|
327
|
+
get w() { return ak; }, // contains operator
|
|
328
|
+
get x() { return ; }, // *reserved*
|
|
329
|
+
get y() { return ; }, // *reserved*
|
|
330
|
+
get z() { return ; }, // *reserved*
|
|
331
|
+
}, {
|
|
332
|
+
get: (target, prop) => {
|
|
333
|
+
if (prop in target) return target[prop];
|
|
334
|
+
else return prop;
|
|
335
|
+
}
|
|
336
|
+
});
|
|
309
337
|
|
|
310
338
|
// CSS group constant
|
|
311
339
|
const cor = l;
|
|
@@ -862,6 +890,28 @@ class EsLocale {
|
|
|
862
890
|
"secondPrefix": "",
|
|
863
891
|
"secondSuffix": "",
|
|
864
892
|
|
|
893
|
+
|
|
894
|
+
"yearsSuffix": "years",
|
|
895
|
+
"monthsSuffix": "months",
|
|
896
|
+
"weeksSuffix": "weeks",
|
|
897
|
+
"daysSuffix": "days",
|
|
898
|
+
"yearsShortSuffix": "y",
|
|
899
|
+
"monthsShortSuffix": "m",
|
|
900
|
+
"weeksShortSuffix": "w",
|
|
901
|
+
"daysShortSuffix": "d",
|
|
902
|
+
|
|
903
|
+
"hoursSuffix": "hours",
|
|
904
|
+
"minutesSuffix": "minutes",
|
|
905
|
+
"secondsSuffix": "seconds",
|
|
906
|
+
"hoursShortSuffix": "h",
|
|
907
|
+
"minutesShortSuffix": "m",
|
|
908
|
+
"secondsShortSuffix": "s",
|
|
909
|
+
|
|
910
|
+
"just": "just",
|
|
911
|
+
"ago": "ago",
|
|
912
|
+
"now": "now",
|
|
913
|
+
|
|
914
|
+
|
|
865
915
|
"yearly": "Yearly",
|
|
866
916
|
"monthly": "Monthly",
|
|
867
917
|
"weekly": "Weekly",
|
|
@@ -935,6 +985,29 @@ class EsLocale {
|
|
|
935
985
|
"secondPrefix": "",
|
|
936
986
|
"secondSuffix": "초",
|
|
937
987
|
|
|
988
|
+
|
|
989
|
+
"yearsSuffix": "년",
|
|
990
|
+
"monthsSuffix": "개월",
|
|
991
|
+
"weeksSuffix": "주",
|
|
992
|
+
"daysSuffix": "일",
|
|
993
|
+
"yearsShortSuffix": "년",
|
|
994
|
+
"monthsShortSuffix": "개월",
|
|
995
|
+
"weeksShortSuffix": "주",
|
|
996
|
+
"daysShortSuffix": "일",
|
|
997
|
+
|
|
998
|
+
"hoursSuffix": "시간",
|
|
999
|
+
"minutesSuffix": "분",
|
|
1000
|
+
"secondsSuffix": "초",
|
|
1001
|
+
"hoursShortSuffix": "시간",
|
|
1002
|
+
"minutesShortSuffix": "분",
|
|
1003
|
+
"secondsShortSuffix": "초",
|
|
1004
|
+
|
|
1005
|
+
"just": "방금",
|
|
1006
|
+
"ago": "전",
|
|
1007
|
+
"now": "지금",
|
|
1008
|
+
|
|
1009
|
+
|
|
1010
|
+
|
|
938
1011
|
"yearly": "연간",
|
|
939
1012
|
"monthly": "월간",
|
|
940
1013
|
"weekly": "주간",
|