@joyzl/eno 1.0.0 → 1.0.2

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.
Files changed (2) hide show
  1. package/index.js +99 -34
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -11,14 +11,15 @@ export default {
11
11
  query,
12
12
  on,
13
13
 
14
- toggle,
15
14
  show,
16
15
  hide,
16
+ toggle,
17
17
 
18
18
  gets,
19
19
  sets,
20
20
  entity,
21
- action
21
+ action,
22
+ element,
22
23
  }
23
24
 
24
25
  /**
@@ -40,6 +41,7 @@ function show(element) {
40
41
  }
41
42
  }
42
43
  }
44
+
43
45
  /**
44
46
  * 隐藏单个/多个元素
45
47
  * @param {Element} element
@@ -59,26 +61,37 @@ function hide(element) {
59
61
  }
60
62
  }
61
63
  }
64
+
62
65
  /**
63
- * 切换指定元素显示,其余元素隐藏
64
- * @param {Object} parent 父级
65
- * @param {Object} element 要显示的元素
66
+ * 切换指定元素显示,其余元素隐藏;
67
+ * 如果指定样式类名,则当前原始添加样式类,其余元素移除样式类
68
+ * @param {Element} parent 父级
69
+ * @param {Element} element 当前元素
70
+ * @param {String} className 类名称
66
71
  */
67
- function toggle(parent, element) {
68
- if (arguments.length == 1) {
69
- // toggle(element);
70
-
72
+ function toggle(parent, element, className) {
73
+ if (parent && parent.trim) {
74
+ parent = select(parent);
71
75
  }
72
- if (parent && element) {
73
- if (parent.trim) {
74
- parent = select(parent);
75
- }
76
- if (element.trim) {
77
- element = select(element);
78
- }
76
+ if (element && element.trim) {
77
+ element = select(parent, element);
78
+
79
79
  if (element.parentElement != parent) {
80
80
  parent.appendChild(element);
81
81
  }
82
+ }
83
+
84
+ if (arguments.length == 1) {
85
+ // toggle(element);
86
+ if (parent.hidden) {
87
+ parent.hidden = false;
88
+ } else {
89
+ parent.hidden = true;
90
+ }
91
+ } else
92
+ if (arguments.length == 2) {
93
+ // toggle(parent,element);
94
+ // display:flex 导致 hidden 属性失效而不会隐藏
82
95
  for (let i = 0; i < parent.children.length; i++) {
83
96
  if (element == parent.children[i]) {
84
97
  parent.children[i].hidden = false;
@@ -86,6 +99,16 @@ function toggle(parent, element) {
86
99
  parent.children[i].hidden = true;
87
100
  }
88
101
  }
102
+ } else
103
+ if (arguments.length == 3) {
104
+ // toggle(parent,element,className);
105
+ for (let i = 0; i < parent.children.length; i++) {
106
+ parent.children[i].hidden = false;
107
+ parent.children[i].classList.remove(className);
108
+ if (element == parent.children[i]) {
109
+ parent.children[i].classList.add(className);
110
+ }
111
+ }
89
112
  }
90
113
  }
91
114
 
@@ -384,6 +407,7 @@ function gets(element, converter = defaultConverter) {
384
407
  }
385
408
  }
386
409
  }
410
+
387
411
  /**
388
412
  * 从指定JSON设置元素值,以name属性作为标识
389
413
  * @param {Element} element 元素
@@ -418,12 +442,14 @@ function sets(element, parameter, converter = defaultConverter) {
418
442
  // }
419
443
 
420
444
  let i = 0;
445
+ // 利用ENO_SET记录并判定是否首次
421
446
  if (element.ENO_SETS) {
422
447
  element.ENO_SETS = element.ENO_SETS + 1;
423
448
  } else {
424
449
  element.ENO_SETS = 1;
425
450
  // ...<template>...
426
451
  for (; i < element.children.length; i++) {
452
+ // 只有<template>模板具有content属性
427
453
  if (element.children[i].content) {
428
454
  element.template = element.children[i];
429
455
  element.a = ++i;
@@ -450,14 +476,12 @@ function sets(element, parameter, converter = defaultConverter) {
450
476
  } else {
451
477
  // 克隆新的元素(DocumentFragment)
452
478
  node = element.template.content.cloneNode(true);
453
- n = i * element.template.content.childElementCount;
454
- node = element.insertBefore(node, element.children[element.a + n]);
455
- node = node.children;
456
- for (n = 0; n < node.length; n++) {
457
- node[n].userData = parameter[i];
458
- set(node[n], parameter[i], converter);
459
- node[n].hidden = false;
479
+ for (n = 0; n < node.childElementCount; n++) {
480
+ node.children.item(n).userData = parameter[i];
481
+ set(node.children.item(n), parameter[i], converter);
482
+ node.children.item(n).hidden = false;
460
483
  }
484
+ element.insertBefore(node, element.children[element.a + i * node.childElementCount]);
461
485
  }
462
486
  }
463
487
  // 移除多余元素
@@ -501,11 +525,13 @@ function sets(element, parameter, converter = defaultConverter) {
501
525
  }
502
526
  return element;
503
527
  } else { // []
504
- // 保留模板
505
- element.children[0].hidden = true;
506
- // 移除多余元素
507
- while (element.children.length > 1) {
508
- element.children[1].remove();
528
+ if (element.children.length) {
529
+ // 保留模板
530
+ element.children[0].hidden = true;
531
+ // 移除多余元素
532
+ while (element.children.length > 1) {
533
+ element.children[1].remove();
534
+ }
509
535
  }
510
536
  return element;
511
537
  }
@@ -543,6 +569,7 @@ function sets(element, parameter, converter = defaultConverter) {
543
569
  }
544
570
  }
545
571
  }
572
+
546
573
  /**
547
574
  * 获取元素值
548
575
  * <input name="AAA" value="123"/>
@@ -568,10 +595,11 @@ function get(element, parameter, converter) {
568
595
  }
569
596
  if (element.childElementCount) {
570
597
  for (let i = 0; i < element.children.length; i++) {
571
- get(element.children[i], parameter);
598
+ get(element.children[i], parameter, converter);
572
599
  }
573
600
  }
574
601
  }
602
+
575
603
  /**
576
604
  * 设置元素值
577
605
  * <input name="AAA" value="123"/>
@@ -601,6 +629,7 @@ function set(element, parameter, converter) {
601
629
  }
602
630
  }
603
631
  }
632
+
604
633
  /**
605
634
  * 根据名称获取对象值
606
635
  * @param {Object} o 对象
@@ -628,6 +657,7 @@ function vale(o, name) {
628
657
  }
629
658
  return o;
630
659
  }
660
+
631
661
  /**
632
662
  * 根据名称设置对象值
633
663
  * @param {Object} o
@@ -649,6 +679,7 @@ function valu(o, name, value) {
649
679
  o[name[i]] = value;
650
680
  return o;
651
681
  }
682
+
652
683
  /**
653
684
  * 转换为字符串值
654
685
  * @param {Object} o
@@ -663,15 +694,26 @@ function text(o) {
663
694
  }
664
695
  return "";
665
696
  }
697
+
666
698
  /**
667
699
  * 根据事件或元素获取由sets关联的实体对象
668
700
  */
669
- function entity(e) {
670
- if (e.target) {
671
- e = e.target;
701
+ function entity(e, selector) {
702
+ if (arguments.length == 1) {
703
+ // entity(event);
704
+ if (e.nodeType) {
705
+ e = e;
706
+ } else
707
+ if (e && e.target) {
708
+ e = e.target;
709
+ } else
710
+ if (e && e.srcElement) {
711
+ e = e.srcElement;
712
+ }
672
713
  } else
673
- if (e.srcElement) {
674
- e = e.srcElement;
714
+ if (arguments.length == 2) {
715
+ // entity(element,selector);
716
+ e = select(e, selector);
675
717
  }
676
718
 
677
719
  while (e) {
@@ -683,6 +725,7 @@ function entity(e) {
683
725
  }
684
726
  return null;
685
727
  }
728
+
686
729
  /**
687
730
  * 根据事件或元素获取属性指定的动作
688
731
  * @param {Event} e
@@ -704,4 +747,26 @@ function action(e, a) {
704
747
  }
705
748
  }
706
749
  return false;
750
+ }
751
+
752
+ /**
753
+ * 根据事件获取绑定实体的元素
754
+ * @param {Event} e
755
+ */
756
+ function element(e) {
757
+ if (e && e.target) {
758
+ e = e.target;
759
+ } else
760
+ if (e && e.srcElement) {
761
+ e = e.srcElement;
762
+ }
763
+
764
+ while (e) {
765
+ if (e.userData) {
766
+ return e;
767
+ } else {
768
+ e = e.parentElement;
769
+ }
770
+ }
771
+ return null;
707
772
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joyzl/eno",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Easy Node Object",
5
5
  "main": "index.js",
6
6
  "scripts": {