estreui 1.2.2 → 1.2.4

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.
@@ -12,7 +12,11 @@
12
12
 
13
13
  Doctre?.patch?.();
14
14
 
15
- // document aliases
15
+ /**
16
+ * Document access shorthand object — DOM queries, element creation, Doctre integration.
17
+ * `doc.b` = document.body, `doc.ce()` = Doctre.createElement, `doc.l()` = Doctre.live, etc.
18
+ * @type {Object}
19
+ */
16
20
  const doc = {
17
21
  get b() { return document.body; },
18
22
  get $b() { return $(this.b); },
@@ -593,6 +597,44 @@ const cvt = {
593
597
 
594
598
 
595
599
 
600
+ /** Data Attribute name alias constant and Data prefixed Kebab Case Characters loopback (2 letters and more) */
601
+ const dd = new Proxy({
602
+ get a() { return ; }, // *reserved*
603
+ get b() { return ; }, // *reserved*
604
+ get c() { return ; }, // *reserved*
605
+ get d() { return "data-disabled"; },
606
+ get e() { return ; }, // *reserved*
607
+ get f() { return ; }, // *reserved*
608
+ get g() { return ; }, // *reserved*
609
+ get h() { return ; }, // *reserved*
610
+ get i() { return ; }, // *reserved*
611
+ get j() { return ; }, // *reserved*
612
+ get k() { return ; }, // *reserved*
613
+ get l() { return ; }, // *reserved*
614
+ get m() { return ; }, // *reserved*
615
+ get n() { return ; }, // *reserved*
616
+ get o() { return ; }, // *reserved*
617
+ get p() { return ; }, // *reserved*
618
+ get q() { return ; }, // *reserved*
619
+ get r() { return ; }, // *reserved*
620
+ get s() { return ; }, // *reserved*
621
+ get t() { return ; }, // *reserved*
622
+ get u() { return ; }, // *reserved*
623
+ get v() { return ; }, // *reserved*
624
+ get w() { return ; }, // *reserved*
625
+ get x() { return ; }, // *reserved*
626
+ get y() { return ; }, // *reserved*
627
+ get z() { return ; }, // *reserved*
628
+ }, {
629
+ get: (target, prop) => {
630
+ if (prop in target) return target[prop];
631
+ else return "data-" + prop.replace(/([a-z0-9])([A-Z])/g, '$1-$2')
632
+ .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
633
+ .replace(/^([A-Z])/, '-$1').toLowerCase();
634
+ }
635
+ });
636
+
637
+
596
638
  // Utility constants block --
597
639
 
598
640
  // Text alias constant
@@ -841,10 +883,20 @@ class EUX {
841
883
 
842
884
 
843
885
  /**
844
- * Estre Local styler
886
+ * Estre Local Styler — generates local-scope styles by replacing `##` tokens with the CSS path up to the parent element.
887
+ *
888
+ * When `##` is used in an HTML `<style>` tag, it is automatically replaced based on the style tag's position
889
+ * with a parent → ancestor CSS selector chain. Achieves scoped style effect without Shadow DOM.
890
+ * @class
845
891
  */
846
892
  class LocalStyle {
847
893
 
894
+ /**
895
+ * Replaces `##` in the element's style text with the local CSS selector path.
896
+ * @param {Element|null} elem - Element containing style text. If null, adds directly to location.
897
+ * @param {string} [styleText=elem.innerHTML] - Style text to replace.
898
+ * @param {Element} [location=elem.parentElement] - Base element for the local path.
899
+ */
848
900
  static localize(elem, styleText = elem.innerHTML, location = elem.parentElement) {
849
901
  const htmlEntities = {
850
902
  "&nbsp;": " ",
@@ -899,8 +951,7 @@ class LocalStyle {
899
951
  }
900
952
  localPrefix += specifier;
901
953
  }
902
- // const localizedStyles = styles.replace(/^([\t\s]*)##/gm, "$1" + localPrefix);
903
- const localizedStyles = styles.replace(/([^#])##([^#])/g, "$1" + localPrefix + "$2").replace(/^##([^#])/gm, localPrefix + "$1");
954
+ const localizedStyles = styles.replace(/(^|[^#])##(?!#)/gm, "$1" + localPrefix);
904
955
 
905
956
  const styleSheet = doc.ce("style");
906
957
  if (elem == null) location.append(styleSheet);
@@ -910,6 +961,11 @@ class LocalStyle {
910
961
  }
911
962
  }
912
963
 
964
+ /**
965
+ * Directly adds a local style at the given location.
966
+ * @param {Element} location - Base element to insert the style at.
967
+ * @param {string} localStyle - Style text containing `##`.
968
+ */
913
969
  static appendLocalize(location, localStyle) {
914
970
  this.localize(null, localStyle, location);
915
971
  }
@@ -917,7 +973,9 @@ class LocalStyle {
917
973
 
918
974
 
919
975
  /**
920
- * Locale constants
976
+ * Estre locale constants — per-language weekday names, month names, date/time prefix/suffix collections.
977
+ * Detects the current language via `EsLocale.currentLanguage` and looks up locale strings from `EsLocale.collections`.
978
+ * @class
921
979
  */
922
980
  class EsLocale {
923
981
  static get currentLocale() { return navigator.language; }
@@ -1537,7 +1595,7 @@ const Ecal = {
1537
1595
  }
1538
1596
  },
1539
1597
 
1540
- /** 시간순 정렬 함수 */
1598
+ /** Chronological sort function */
1541
1599
  byTime: (a, b) => a.time - b.time,
1542
1600
 
1543
1601
  eoo
@@ -0,0 +1,555 @@
1
+ /*
2
+ EstreUI rimwork for MangoEdu @ MP Solutions inc.
3
+
4
+ Author: Estre Soliette
5
+ Established: 2024.06.10
6
+
7
+ NOTE: Required jQuery latest version
8
+
9
+ Visit this rim-work's official site(GitHub)
10
+ https://estreui.mpsolutions.kr
11
+ */
12
+
13
+ // initializing essential states
14
+
15
+ // ======================================================================
16
+ // MODULE: Core -- registries, constants, typedefs
17
+ // ======================================================================
18
+
19
+ // ──────────────────────────────────────────────
20
+ // @typedef — reusable type shapes
21
+ // ──────────────────────────────────────────────
22
+
23
+ /**
24
+ * Intent object passed to page handlers during navigation.
25
+ * Properties vary by page type; the fields below are the common base.
26
+ * @typedef {Object} EstreIntent
27
+ * @property {string} [action] - Intent action identifier.
28
+ * @property {*} [data] - Arbitrary payload. Shape depends on the target page.
29
+ * @property {EstreIntentBringOnBack} [bringOnBack] - Intent to execute when navigating back.
30
+ * @property {EstreIntentAction[]} [onBring] - Actions to run on bring.
31
+ * @property {EstreIntentAction[]} [onOpen] - Actions to run on open.
32
+ * @property {EstreIntentAction[]} [onShow] - Actions to run on show.
33
+ * @property {EstreIntentAction[]} [onFocus] - Actions to run on focus.
34
+ * @property {EstreIntentAction[]} [onIntentUpdated] - Actions to run on intent update.
35
+ * @property {EstreIntentAction[]} [onBlur] - Actions to run on blur.
36
+ * @property {EstreIntentAction[]} [onHide] - Actions to run on hide.
37
+ * @property {EstreIntentAction[]} [onClose] - Actions to run on close.
38
+ * @property {EstreIntentAction[]} [onRelease] - Actions to run on release.
39
+ * @property {Function} [onDissmiss] - Callback when dismissed (dialog pages).
40
+ * @property {Function} [onOk] - Confirm callback (alert dialog).
41
+ * @property {Function} [onPositive] - Positive callback (confirm dialog).
42
+ * @property {Function} [onNegative] - Negative callback (confirm dialog).
43
+ * @property {Function} [onNeutral] - Neutral callback (confirm dialog).
44
+ * @property {Function} [onConfirm] - Confirm callback (prompt/selection/dials dialog).
45
+ * @property {Function} [onAnother] - Another-action callback (selection/dials dialog).
46
+ * @property {Function} [onSelected] - Option selected callback (option dialog).
47
+ * @property {Function} [onSelect] - Item select callback (selection/dials dialog).
48
+ * @property {Function} [resolver] - Promise resolver for programmatic intent completion.
49
+ */
50
+
51
+ /**
52
+ * Back-navigation intent embedded in an EstreIntent.
53
+ * @typedef {Object} EstreIntentBringOnBack
54
+ * @property {string} pid - PID to navigate to on back.
55
+ * @property {string} [hostType] - Host type scope ("component"|"container"|"article").
56
+ */
57
+
58
+ /**
59
+ * Declarative lifecycle action entry within an EstreIntent.
60
+ * @typedef {Object} EstreIntentAction
61
+ * @property {string} from - Host type that triggers this action ("component"|"container"|"article").
62
+ * @property {string} action - Action identifier (e.g. "autoClose", "closePage").
63
+ * @property {boolean} [disabled] - If true, this action is skipped.
64
+ * @property {string} [host] - Target host type for autoClose.
65
+ * @property {number|string} [time] - Delay in ms for autoClose.
66
+ * @property {string} [targetPid] - Target PID for closePage.
67
+ */
68
+
69
+
70
+ /**
71
+ * UI specifier constants — CSS-selector-based UI widget identifier registry.
72
+ * EstreHandle uses these values as specifiers when searching for handles in the DOM.
73
+ * Access via `uis.calendar`, `uis.collapsible`, etc.
74
+ * @type {Object<string, string>}
75
+ */
76
+ const uis = {
77
+ // lottie player //
78
+ dotlottiePlayer: "dotlottie-player",
79
+ dotlottieLoader: "dotlottie-loader",
80
+
81
+ // rim ui //
82
+ prefix: ".prefix",
83
+ suffix: ".suffix",
84
+ divider: ".divider",
85
+
86
+ // component //
87
+ container: ".container",
88
+ rootTabContent: "root_tab_content",
89
+
90
+ // container //
91
+ stepNavigation: ".step_navigation",
92
+ stepTitleBar: ".step_title_bar",
93
+ stepIndicator: ".step_indicator",
94
+ stepPointer: ".step_pointer",
95
+ stepDivider: ".step_divider",
96
+
97
+ // session manager //
98
+ pageShortCut: ".page_short_cut",
99
+
100
+ // common
101
+ section: "section",
102
+ toggle: ".toggle",
103
+ toggleArea: "div.toggle",
104
+ toggleBtn: "button.toggle",
105
+ basic: ".basic",
106
+ settings: ".settings",
107
+ settingsPanel: ".settings_panel",
108
+ toSmaller: ".to_smaller",
109
+ toLarger: ".to_larger",
110
+ controlArea: ".control_area",
111
+ areaHandler: ".area_handler",
112
+ areaResizer: ".area_resizer",
113
+ placeholder: ".placeholder",
114
+
115
+ // unified calendar
116
+ unifiedCalendar: ".unified_calendar",
117
+ calendarArea: "section.calendar_area",
118
+ scheduleList: "section.schedule_list",
119
+
120
+ // variable calendar
121
+ variableCalendar: ".variable_calendar",
122
+ dateIndicateArea: ".date_indicate_area",
123
+ dateIndicator: ".date_indicator",
124
+
125
+ calendarStructure: ".calendar_structure",
126
+ unicalShowToday: "input#unicalShowToday",
127
+
128
+ calendarBar: ".calendar_bar",
129
+ scheduleFilter: ".schedule_filter",
130
+ filterFixed: "ul.fixed",
131
+ filterVariable: "ul.variable",
132
+ dataSelection: "ul.data_selection",
133
+
134
+ // unified scheduler
135
+ unifiedScheduler: ".unified_scheduler",
136
+ scheduleHolder: ".schedule_holder",
137
+ scheduleItem: ".schedule_item",
138
+
139
+ // dedicated calendar
140
+ dedicatedCalendar: ".dedicated_calendar",
141
+ calendarBlock: ".calendar_block",
142
+ scheduleBlock: ".schedule_block",
143
+
144
+ // micro calendar
145
+ microCalendar: ".micro_calendar",
146
+ stretchHandle: ".stretch_handle",
147
+ handle: ".handle",
148
+
149
+ // minimal scheduler
150
+ minimalScheduler: ".minimal_scheduler",
151
+ minimalScheduleList: ".schedule_list",
152
+ schedule: ".schedule",
153
+
154
+ // calendar common
155
+ scaler: ".scaler",
156
+ daysSubjects: ".days_subjects",
157
+ daysHolder: ".days_holder",
158
+ years: ".years",
159
+ year: ".year",
160
+ months: ".months",
161
+ month: ".month",
162
+ weeks: ".weeks",
163
+ week: ".week",
164
+ days: ".days",
165
+ day: ".day",
166
+ dday: ".dday",
167
+ today: ".today",
168
+ date: ".date",
169
+ scheduled: ".scheduled",
170
+
171
+
172
+ // scalable
173
+ scalable: ".scalable",
174
+ summary: ".summary",
175
+
176
+ // collapsible
177
+ collapsible: ".collapsible",
178
+ notBasic: ":not(.basic)",
179
+ notBasicAndToggle: ":not(.basic, button.toggle)",
180
+
181
+ // toggle block
182
+ toggleBlock: ".toggle_block",
183
+
184
+ // tab block and toggle tab block
185
+ tabBlock: ".tab_block",
186
+ toggleTabBlock: ".toggle_tab_block",
187
+ titledTabBlock: ".titled_tab_block",
188
+ tabSet: "ul.tab_set",
189
+ slidingSubjectBlock: ".sliding_subject_block",
190
+ tabContentBlocks: ".tab_content_blocks",
191
+
192
+ // scoped tab block
193
+ pageHandle: "button.page_handle",
194
+ infiniteHPager: ".infinite_h_pager",
195
+ boundHost: ".bound_host",
196
+
197
+
198
+ // dynamic section block
199
+ dynamicSectionHost: ".dynamic_section_host",
200
+ dynamicSectionBlock: ".dynamic_section_block",
201
+ hostItem: ".host_item",
202
+ blockItem: ".block_item",
203
+
204
+
205
+ // custom selector bar
206
+ customSelectorBar: ".custom_selector_bar",
207
+
208
+ // month selector bar
209
+ monthSelectorBar: ".month_selector_bar",
210
+
211
+
212
+ // date shower
213
+ dateShower: ".date_shower",
214
+ dateReplacer: ".dete_replacer",
215
+ fullYear: ".full_year",
216
+ year2d: ".year_2d",
217
+ month2d: ".month_2d",
218
+ date2d: ".date_2d",
219
+ paddedMonth: ".padded_month",
220
+ paddedDate: ".padded_date",
221
+ shortDay: ".short_day",
222
+
223
+ // live timestamp
224
+ liveTimestamp: "[data-live-timestamp]",
225
+
226
+
227
+ // on click set text
228
+ onClickSetText: "[data-on-click-set-text]",
229
+
230
+ // on click set html
231
+ onClickSetHtml: "[data-on-click-set-html]",
232
+
233
+
234
+ // help alert
235
+ dataHelpAlert: "[data-help-alert]",
236
+
237
+ // num keypad
238
+ numKeypad: ".num_keypad",
239
+
240
+ // checkbox set
241
+ checkboxSet: ".checkbox_set",
242
+
243
+ // checkbox ally
244
+ checkboxAlly: ".checkbox_ally",
245
+
246
+ // toaster slot
247
+ toasterSlot: ".toaster_slot",
248
+
249
+ // multi dial slot
250
+ multiDialSlot: ".multi_dial_slot",
251
+ dialHolder: ".dialHolder",
252
+ dialBound: ".dial_bound",
253
+ dialHost: ".dial_host",
254
+
255
+
256
+ // exported content
257
+ exportedContent: ".exported_content",
258
+
259
+
260
+ // quick transitions
261
+ ezHidable: ".ez_hidable",
262
+ fixedAccess: ".fixed_access",
263
+
264
+
265
+ // swipe handler
266
+ allowSwipe: ".allow_swipe",
267
+ blockSwipe: ".block_swipe",
268
+ blockSwipeFilter: "*:not(.block_swipe)",
269
+
270
+
271
+
272
+ // data related using //
273
+
274
+
275
+ eoo: eoo
276
+ };
277
+
278
+ /**
279
+ * Element data specifier constants — `data-*` attribute name registry.
280
+ * Used to reference DOM data attributes in Active Struct bindings, page manager, handles, etc.
281
+ * Access via `eds.bind`, `eds.active`, `eds.exported`, etc.
282
+ * @type {Object<string, string>}
283
+ */
284
+ const eds = {
285
+ // for rim ui
286
+ onReady: "data-on-ready",
287
+ opened: "data-opened",
288
+ tabId: "data-tab-id",
289
+ active: "data-active",
290
+ onTop: "data-on-top",
291
+ static: "data-static",
292
+ exported: "data-exported",
293
+ multiInstance: "data-multi-instance",
294
+ instanceOrigin: "data-instance-origin",
295
+
296
+ // for bind data
297
+ index: "data-index",
298
+
299
+ // for container
300
+ articleStepsId: "data-article-steps-id",
301
+
302
+ // for article
303
+ wideDynamicSection: "data-wide-dynamic-section",
304
+
305
+ // for page manager
306
+
307
+ // for session manager
308
+ containerType: "data-container-type",
309
+ containerId: "data-container-id",
310
+ articleId: "data-article-id",
311
+
312
+ // for page handle
313
+ appbarLeft: "data-appbar-left",
314
+ appbarCenter: "data-appbar-center",
315
+ appbarRight: "data-appbar-right",
316
+ bind: "data-bind",
317
+ bindAmount: "data-bind-amount",
318
+ bindValue: "data-bind-value",
319
+ bindAttr: "data-bind-attr",
320
+ bindStyle: "data-bind-style",
321
+ bindArray: "data-bind-array",
322
+ bindArrayItem: "data-bind-array-item",
323
+ bindArrayAmount: "data-bind-array-amount",
324
+ bindArrayValue: "data-bind-array-value",
325
+ bindArrayAttr: "data-bind-array-attr",
326
+ bindArrayStyle: "data-bind-array-style",
327
+ bindArrayIndex: "data-bind-array-index",
328
+ bindArrayIndexAmount: "data-bind-array-index-amount",
329
+ bindArrayIndexValue: "data-bind-array-index-value",
330
+ bindArrayIndexAttr: "data-bind-array-index-attr",
331
+ bindObjectArrayItem: "data-bind-object-array-item",
332
+ bindObjectArrayAmount: "data-bind-object-array-amount",
333
+ bindObjectArrayValue: "data-bind-object-array-value",
334
+ bindObjectArrayAttr: "data-bind-object-array-attr",
335
+ bindObjectArrayStyle: "data-bind-object-array-style",
336
+ showOnExists: "data-show-on-exists",
337
+ showOnNotExists: "data-show-on-not-exists",
338
+ showOnEquals: "data-show-on-equals",
339
+ showOnExistsObjectArrayItem: "data-show-on-exists-object-array-item",
340
+ showOnNotExistsObjectArrayItem: "data-show-on-not-exists-object-array-item",
341
+ showOnEqualsObjectArrayItem: "data-show-on-equals-object-array-item",
342
+
343
+ frozenPlaceholder: "data-frozen-placeholder",
344
+ frozenItem: "data-frozen-item",
345
+
346
+ // for handle
347
+ handle: "data-handle",
348
+
349
+ // for estre ui attribute
350
+ lead: "data-lead",
351
+ trail: "data-trail",
352
+ prefix: "data-prefix",
353
+ suffix: "data-suffix",
354
+ fore: "data-fore",
355
+ hind: "data-hind",
356
+ nose: "data-nose",
357
+ tail: "data-tail",
358
+ hat: "data-hat",
359
+ shoe: "data-shoe",
360
+
361
+ // for common
362
+ id: "data-id",
363
+ size: "data-size",
364
+ count: "data-count",
365
+ contained: "data-contained",
366
+ noTransition: "data-no-transition",
367
+ year: "data-year",
368
+ month: "data-month",
369
+ adjoin: "data-adjoin",
370
+ adjoinYear: "data-adjoin-year",
371
+ adjoinMonth: "data-adjoin-month",
372
+ adjoinWeek: "data-adjoin-week",
373
+ week: "data-week",
374
+ day: "data-day",
375
+ date: "data-date",
376
+ holiday: "data-holiday",
377
+ dateY: "data-date-y",
378
+ dateM: "data-date-m",
379
+ dateD: "data-date-d",
380
+ today: "data-today",
381
+ selected: "data-selected",
382
+ category: "data-category",
383
+ group: "data-group",
384
+ origin: "data-origin",
385
+ selection: "data-selection",
386
+ slide: "data-slide",
387
+ subject: "data-subject",
388
+ type: "data-type",
389
+ transition: "data-transition",
390
+ satisfy: "data-satisfy",
391
+ show: "data-show",
392
+ showing: "data-showing",
393
+ length: "data-length",
394
+ title: "data-title",
395
+ for: "data-for",
396
+ name: "data-name",
397
+ ally: "data-ally",
398
+ current: "data-current",
399
+ autoInit: "data-auto-init",
400
+ placeholder: "data-placeholder",
401
+ options: "data-options",
402
+ code: "data-code",
403
+ value: "data-value",
404
+ align: "data-align",
405
+ initial: "data-initial",
406
+ intersectionRootMargin: "data-intersection-root-margin",
407
+ intersectionThreshold: "data-intersection-threshold",
408
+
409
+ // message datas
410
+ messageOnNoSelection: "data-message-on-no-selection",
411
+ messageOnLoading: "data-message-on-loading",
412
+ messageOnNoData: "data-message-on-no-data",
413
+
414
+ // body global switch
415
+ onResizing: "data-on-resizing",
416
+ onMoving: "data-on-moving",
417
+ notAllowed: "data-not-allowed",
418
+
419
+ // for component
420
+ focusOnBring: "data-focus-on-bring",
421
+
422
+ // for unified calendar
423
+ fitCalendar: "data-fit-calendar",
424
+ scaleOverride: "data-scale-override",
425
+
426
+ // for variable calendar
427
+ structureType: "data-structure-type",
428
+ showSchedulePrefix: "data-show-schedule-",
429
+ /** @type {function(string): string} Generates origin-specific schedule attribute name. */
430
+ currentScheduleOrigin: (origin) => "data-current-schedule-" + origin + "-origin",
431
+ currentScheduleBasicOrigin: "data-current-schedule-basic-origin",
432
+ currentScheduleDataOrigin: "data-current-schedule-data-origin",
433
+ scale: "data-scale",
434
+ scaleId: "data-scale-id",
435
+ scaleSelected: "data-scale-selected",
436
+ beginScale: "data-begin-scale",
437
+ showToday: "data-show-today",
438
+ loaded: "data-loaded",
439
+ scheduleUnit: "data-schedule-unit",
440
+
441
+ // for calendar structure
442
+ todayYear: "data-today-y",
443
+ todayMonth: "data-today-m",
444
+ todayWeek: "data-today-w",
445
+ todayDay: "data-today-d",
446
+ focusYear: "data-focus-y",
447
+ focusMonth: "data-focus-m",
448
+ focusWeek: "data-focus-w",
449
+ focusDay: "data-focus-d",
450
+ boundYear: "data-bound-y",
451
+ boundMonth: "data-bound-m",
452
+ boundWeek: "data-bound-w",
453
+ hideWeekage: "data-hide-weekage",
454
+ hideWeekend: "data-hide-weekend",
455
+
456
+ // for scheduler
457
+ preload: "data-preload",
458
+ division: "data-division",
459
+ dateId: "data-date-id",
460
+ scheduleId: "data-schedule-id",
461
+
462
+ // for scelable
463
+ lookScale: "data-look-scale",
464
+ maxScale: "data-max-scale",
465
+
466
+ // for collapsible & toggle blocks
467
+ collapsed: "data-collapsed",
468
+ contentCollapsed: "data-content-collapsed",
469
+
470
+ // for toggle tab block
471
+ beginTab: "data-begin-tab",
472
+ tabSelected: "data-tab-selected",
473
+
474
+ // for scoped tab block
475
+ scope: "data-scope",
476
+ direction: "data-direction",
477
+ bound: "data-bound",
478
+ pageSelected: "data-page-selected",
479
+
480
+
481
+ // for checkbox set
482
+ checkboxSelection: "data-checkbox-selection",
483
+
484
+ // for toaster slot
485
+ toast: "data-toast",
486
+ customToast: "data-custom-toast",
487
+ toastTitle: "data-toast-title",
488
+ toastMessage: "data-toast-message",
489
+
490
+
491
+ // for date shower
492
+ dateFrom: "data-date-from",
493
+ withPrefix: "data-with-prefix",
494
+ withSuffix: "data-with-suffix",
495
+
496
+ // for live timestamp
497
+ liveTimestamp: "data-live-timestamp",
498
+ shortSuffix: "data-short-suffix",
499
+
500
+
501
+ // for on click set text
502
+ onClickSetText: "data-on-click-set-text",
503
+
504
+ // for on click set html
505
+ onClickSetHtml: "data-on-click-set-html",
506
+
507
+
508
+ // for month selector bar
509
+ dropdownOpen: "data-dropdown-open",
510
+ showFuture: "data-show-future",
511
+ usePopupSelector: "data-use-popup-selector",
512
+
513
+
514
+ // multi dial slot
515
+ itemTable: "data-item-table", // [['item1', 'item2', 'item3', ...], ['item1', 'item2', 'item3', ...], ...]
516
+ itemAligns: "data-item-aligns", // [t, n, f, ...] :: f: left, n: center, t: right
517
+ itemPrefixes: "data-item-prefixes", // ['prefix1', 'prefix2', ...]
518
+ itemSuffixes: "data-item-suffixes", // ['suffix1', 'suffix2', ...]
519
+ itemDividers: "data-item-dividers", // ['before', 'dividerForAll', 'after'] / ['divider0', 'divider1', ...]
520
+
521
+
522
+ // for solid point
523
+ solid: "data-solid",
524
+
525
+ // for internal link and page link
526
+ openTarget: "data-open-target",
527
+ openContainer: "data-open-container",
528
+ openId: "data-open-id",
529
+ openPage: "data-open-page",
530
+ showPage: "data-show-page",
531
+ closePage: "data-close-page",
532
+ openAction: "data-open-action",
533
+ openBringOnBack: "data-open-bring-on-back",
534
+ openData: "data-open-data",
535
+ showAction: "data-show-action",
536
+ showBringOnBack: "data-show-bring-on-back",
537
+ showData: "data-show-data",
538
+
539
+
540
+ // for swipe handler
541
+ onSwipe: "data-on-swipe",
542
+ onGrab: "data-on-grab",
543
+
544
+
545
+ // data related using //
546
+ // common
547
+ registered: "data-registered",
548
+
549
+
550
+ eoo: eoo
551
+ }
552
+
553
+
554
+
555
+ // ======================================================================