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 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`, `onShow`, `onPause` equivalent) and intent system very familiar.
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`, `onShow`, `onPause` 등과 유사)와 인텐트 시스템은 매우 친숙할 것입니다.
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.7",
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.8.2",
42
- "doctre": "^1.1.0",
43
- "modernism": "^0.6.0",
44
- "alienese": "^0.6.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
  }
@@ -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.6.0 / release 2026.01.03
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
- defineStaticGetterAndSetter(dt, "n", function () { return new Date(...arguments); });
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 (this.it.H % 12).let(it => it == 0 ? 12 : it); });
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 + this.it.Zmm; });
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 + this.it.M0; });
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.0 / release 2025.12.10
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
- forReplaced = JSON.stringify(replacer);
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
- forReplaced = JSON.stringify(replacer);
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;
@@ -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 g() { return ti; },
307
- get w() { return ak; },
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": "주간",