yy-vue-easytable 2.27.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 (205) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +187 -0
  3. package/libs/font/demo.css +539 -0
  4. package/libs/font/demo_index.html +400 -0
  5. package/libs/font/iconfont.css +57 -0
  6. package/libs/font/iconfont.eot +0 -0
  7. package/libs/font/iconfont.js +1 -0
  8. package/libs/font/iconfont.json +79 -0
  9. package/libs/font/iconfont.svg +56 -0
  10. package/libs/font/iconfont.ttf +0 -0
  11. package/libs/font/iconfont.woff +0 -0
  12. package/libs/font/iconfont.woff2 +0 -0
  13. package/libs/locale/lang/af-ZA.js +48 -0
  14. package/libs/locale/lang/en-US.js +48 -0
  15. package/libs/locale/lang/fr-FR.js +48 -0
  16. package/libs/locale/lang/ko-KR.js +48 -0
  17. package/libs/locale/lang/pt-BR.js +48 -0
  18. package/libs/locale/lang/ru-RU.js +48 -0
  19. package/libs/locale/lang/zh-CN.js +48 -0
  20. package/libs/locale/lang/zh-TW.js +48 -0
  21. package/libs/locale/lang/zu-ZA.js +48 -0
  22. package/libs/main.js +1 -0
  23. package/libs/theme-dark/base.css +1 -0
  24. package/libs/theme-dark/index.css +1253 -0
  25. package/libs/theme-dark/var.css +7 -0
  26. package/libs/theme-dark/ve-checkbox.css +150 -0
  27. package/libs/theme-dark/ve-contextmenu.css +71 -0
  28. package/libs/theme-dark/ve-dropdown.css +177 -0
  29. package/libs/theme-dark/ve-icon.css +10 -0
  30. package/libs/theme-dark/ve-loading.css +218 -0
  31. package/libs/theme-dark/ve-pagination.css +136 -0
  32. package/libs/theme-dark/ve-radio.css +111 -0
  33. package/libs/theme-dark/ve-select.css +50 -0
  34. package/libs/theme-dark/ve-table.css +385 -0
  35. package/libs/theme-default/base.css +1 -0
  36. package/libs/theme-default/index.css +1253 -0
  37. package/libs/theme-default/var.css +7 -0
  38. package/libs/theme-default/ve-checkbox.css +150 -0
  39. package/libs/theme-default/ve-contextmenu.css +71 -0
  40. package/libs/theme-default/ve-dropdown.css +177 -0
  41. package/libs/theme-default/ve-icon.css +10 -0
  42. package/libs/theme-default/ve-loading.css +218 -0
  43. package/libs/theme-default/ve-pagination.css +136 -0
  44. package/libs/theme-default/ve-radio.css +111 -0
  45. package/libs/theme-default/ve-select.css +50 -0
  46. package/libs/theme-default/ve-table.css +385 -0
  47. package/libs/umd/index.js +9 -0
  48. package/libs/ve-checkbox-group.js +1 -0
  49. package/libs/ve-checkbox.js +1 -0
  50. package/libs/ve-contextmenu.js +1 -0
  51. package/libs/ve-dropdown.js +1 -0
  52. package/libs/ve-icon.js +1 -0
  53. package/libs/ve-loading.js +1 -0
  54. package/libs/ve-locale.js +1 -0
  55. package/libs/ve-pagination.js +1 -0
  56. package/libs/ve-radio.js +1 -0
  57. package/libs/ve-select.js +1 -0
  58. package/libs/ve-table.js +1 -0
  59. package/package.json +142 -0
  60. package/packages/font/demo.css +539 -0
  61. package/packages/font/demo_index.html +400 -0
  62. package/packages/font/iconfont.css +57 -0
  63. package/packages/font/iconfont.eot +0 -0
  64. package/packages/font/iconfont.js +1 -0
  65. package/packages/font/iconfont.json +79 -0
  66. package/packages/font/iconfont.svg +56 -0
  67. package/packages/font/iconfont.ttf +0 -0
  68. package/packages/font/iconfont.woff +0 -0
  69. package/packages/font/iconfont.woff2 +0 -0
  70. package/packages/index.js +75 -0
  71. package/packages/src/comps/resize-observer/index.js +2 -0
  72. package/packages/src/comps/resize-observer/src/index.jsx +38 -0
  73. package/packages/src/directives/clickoutside.js +31 -0
  74. package/packages/src/directives/events-outside.js +79 -0
  75. package/packages/src/directives/focus.js +28 -0
  76. package/packages/src/locale/index.js +27 -0
  77. package/packages/src/locale/lang/af-ZA.js +29 -0
  78. package/packages/src/locale/lang/en-US.js +30 -0
  79. package/packages/src/locale/lang/fr-FR.js +29 -0
  80. package/packages/src/locale/lang/ko-KR.js +29 -0
  81. package/packages/src/locale/lang/pt-BR.js +29 -0
  82. package/packages/src/locale/lang/ru-RU.js +29 -0
  83. package/packages/src/locale/lang/zh-CN.js +30 -0
  84. package/packages/src/locale/lang/zh-TW.js +29 -0
  85. package/packages/src/locale/lang/zu-ZA.js +29 -0
  86. package/packages/src/mixins/emitter.js +39 -0
  87. package/packages/src/utils/animation-frame.js +39 -0
  88. package/packages/src/utils/auto-resize.js +179 -0
  89. package/packages/src/utils/constant.js +42 -0
  90. package/packages/src/utils/dom.js +239 -0
  91. package/packages/src/utils/event-key-codes.js +53 -0
  92. package/packages/src/utils/hooks-manager.js +76 -0
  93. package/packages/src/utils/index.js +161 -0
  94. package/packages/src/utils/mouse-event.js +24 -0
  95. package/packages/src/utils/random.js +6 -0
  96. package/packages/src/utils/request-animation-timeout.js +36 -0
  97. package/packages/src/utils/resize-event.js +40 -0
  98. package/packages/src/utils/scroll-bar.js +27 -0
  99. package/packages/style/ve-checkbox.less +179 -0
  100. package/packages/style/ve-contextmenu.less +76 -0
  101. package/packages/style/ve-dropdown.less +204 -0
  102. package/packages/style/ve-icon.less +3 -0
  103. package/packages/style/ve-loading.less +242 -0
  104. package/packages/style/ve-pagination.less +153 -0
  105. package/packages/style/ve-radio.less +126 -0
  106. package/packages/style/ve-select.less +48 -0
  107. package/packages/style/ve-table.less +539 -0
  108. package/packages/theme-dark/base.less +1 -0
  109. package/packages/theme-dark/index.less +12 -0
  110. package/packages/theme-dark/var.less +111 -0
  111. package/packages/theme-dark/ve-checkbox.less +2 -0
  112. package/packages/theme-dark/ve-contextmenu.less +2 -0
  113. package/packages/theme-dark/ve-dropdown.less +2 -0
  114. package/packages/theme-dark/ve-icon.less +2 -0
  115. package/packages/theme-dark/ve-loading.less +2 -0
  116. package/packages/theme-dark/ve-pagination.less +2 -0
  117. package/packages/theme-dark/ve-radio.less +2 -0
  118. package/packages/theme-dark/ve-select.less +2 -0
  119. package/packages/theme-dark/ve-table.less +2 -0
  120. package/packages/theme-default/base.less +1 -0
  121. package/packages/theme-default/index.less +12 -0
  122. package/packages/theme-default/var.less +111 -0
  123. package/packages/theme-default/ve-checkbox.less +2 -0
  124. package/packages/theme-default/ve-contextmenu.less +2 -0
  125. package/packages/theme-default/ve-dropdown.less +2 -0
  126. package/packages/theme-default/ve-icon.less +2 -0
  127. package/packages/theme-default/ve-loading.less +2 -0
  128. package/packages/theme-default/ve-pagination.less +2 -0
  129. package/packages/theme-default/ve-radio.less +2 -0
  130. package/packages/theme-default/ve-select.less +2 -0
  131. package/packages/theme-default/ve-table.less +2 -0
  132. package/packages/ve-checkbox/index.js +7 -0
  133. package/packages/ve-checkbox/src/index.jsx +175 -0
  134. package/packages/ve-checkbox/src/util/constant.js +14 -0
  135. package/packages/ve-checkbox/src/util/index.js +10 -0
  136. package/packages/ve-checkbox-group/index.js +7 -0
  137. package/packages/ve-checkbox-group/src/index.jsx +53 -0
  138. package/packages/ve-checkbox-group/src/util/constant.js +14 -0
  139. package/packages/ve-checkbox-group/src/util/index.js +10 -0
  140. package/packages/ve-contextmenu/index.js +7 -0
  141. package/packages/ve-contextmenu/src/index.jsx +731 -0
  142. package/packages/ve-contextmenu/src/util/constant.js +29 -0
  143. package/packages/ve-contextmenu/src/util/index.js +10 -0
  144. package/packages/ve-dropdown/index.js +7 -0
  145. package/packages/ve-dropdown/src/index.jsx +720 -0
  146. package/packages/ve-dropdown/src/util/constant.js +15 -0
  147. package/packages/ve-dropdown/src/util/index.js +10 -0
  148. package/packages/ve-icon/index.js +7 -0
  149. package/packages/ve-icon/src/index.jsx +52 -0
  150. package/packages/ve-icon/src/util/constant.js +10 -0
  151. package/packages/ve-icon/src/util/index.js +10 -0
  152. package/packages/ve-loading/index.js +8 -0
  153. package/packages/ve-loading/src/bounce.jsx +50 -0
  154. package/packages/ve-loading/src/flow.jsx +51 -0
  155. package/packages/ve-loading/src/grid.jsx +57 -0
  156. package/packages/ve-loading/src/index.js +106 -0
  157. package/packages/ve-loading/src/loading.jsx +63 -0
  158. package/packages/ve-loading/src/plane.jsx +38 -0
  159. package/packages/ve-loading/src/pulse.jsx +38 -0
  160. package/packages/ve-loading/src/util/constant.js +31 -0
  161. package/packages/ve-loading/src/util/index.js +10 -0
  162. package/packages/ve-loading/src/wave.jsx +53 -0
  163. package/packages/ve-locale/index.js +28 -0
  164. package/packages/ve-pagination/index.js +7 -0
  165. package/packages/ve-pagination/src/index.jsx +304 -0
  166. package/packages/ve-pagination/src/pager.jsx +166 -0
  167. package/packages/ve-pagination/src/util/constant.js +16 -0
  168. package/packages/ve-pagination/src/util/index.js +10 -0
  169. package/packages/ve-radio/index.js +7 -0
  170. package/packages/ve-radio/src/index.jsx +121 -0
  171. package/packages/ve-radio/src/util/constant.js +13 -0
  172. package/packages/ve-radio/src/util/index.js +10 -0
  173. package/packages/ve-select/index.js +7 -0
  174. package/packages/ve-select/src/index.jsx +193 -0
  175. package/packages/ve-select/src/util/constant.js +13 -0
  176. package/packages/ve-select/src/util/index.js +10 -0
  177. package/packages/ve-table/index.js +7 -0
  178. package/packages/ve-table/src/body/body-checkbox-content.jsx +126 -0
  179. package/packages/ve-table/src/body/body-radio-content.jsx +113 -0
  180. package/packages/ve-table/src/body/body-td.jsx +671 -0
  181. package/packages/ve-table/src/body/body-tr-scrolling.jsx +38 -0
  182. package/packages/ve-table/src/body/body-tr.jsx +383 -0
  183. package/packages/ve-table/src/body/expand-tr-icon.jsx +80 -0
  184. package/packages/ve-table/src/body/expand-tr.jsx +147 -0
  185. package/packages/ve-table/src/body/index.jsx +943 -0
  186. package/packages/ve-table/src/colgroup/index.jsx +48 -0
  187. package/packages/ve-table/src/column-resizer/index.jsx +318 -0
  188. package/packages/ve-table/src/editor/constant.js +5 -0
  189. package/packages/ve-table/src/editor/index.jsx +533 -0
  190. package/packages/ve-table/src/footer/footer-td.jsx +396 -0
  191. package/packages/ve-table/src/footer/footer-tr.jsx +249 -0
  192. package/packages/ve-table/src/footer/index.jsx +108 -0
  193. package/packages/ve-table/src/header/header-checkbox-content.jsx +69 -0
  194. package/packages/ve-table/src/header/header-filter-content.jsx +100 -0
  195. package/packages/ve-table/src/header/header-filter-custom-content.jsx +110 -0
  196. package/packages/ve-table/src/header/header-th.jsx +664 -0
  197. package/packages/ve-table/src/header/header-tr.jsx +255 -0
  198. package/packages/ve-table/src/header/index.jsx +195 -0
  199. package/packages/ve-table/src/index.jsx +4196 -0
  200. package/packages/ve-table/src/selection/constant.js +5 -0
  201. package/packages/ve-table/src/selection/index.jsx +1643 -0
  202. package/packages/ve-table/src/util/clipboard.js +428 -0
  203. package/packages/ve-table/src/util/constant.js +269 -0
  204. package/packages/ve-table/src/util/index.js +1585 -0
  205. package/packages/ve-table/src/util/store.js +14 -0
@@ -0,0 +1,179 @@
1
+ /**
2
+ * autoResize - resizes a DOM element to the width and height of another DOM element
3
+ *
4
+ * Copyright 2014, Marcin Warpechowski
5
+ * Licensed under the MIT license
6
+ * refer to https://github.com/handsontable/handsontable/blob/HEAD/handsontable/src/3rdparty/autoResize/index.js
7
+ */
8
+
9
+ export function autoResize() {
10
+ var defaults = {
11
+ minHeight: 200,
12
+ maxHeight: 300,
13
+ minWidth: 100,
14
+ maxWidth: 300,
15
+ // text padding
16
+ paddingWidth: 16,
17
+ },
18
+ el,
19
+ body = document.body,
20
+ text = document.createTextNode(""),
21
+ span = document.createElement("SPAN"),
22
+ observe = function (element, event, handler) {
23
+ element.addEventListener(event, handler, false);
24
+ },
25
+ unObserve = function (element, event, handler) {
26
+ element.removeEventListener(event, handler, false);
27
+ },
28
+ resize = function (newChar) {
29
+ var width, scrollHeight;
30
+
31
+ if (!newChar) {
32
+ newChar = "";
33
+ } else if (!/^[a-zA-Z \.,\\\/\|0-9]$/.test(newChar)) {
34
+ newChar = ".";
35
+ }
36
+
37
+ if (text.textContent !== void 0) {
38
+ text.textContent = el.value + newChar;
39
+ } else {
40
+ text.data = el.value + newChar; //IE8
41
+ }
42
+ span.style.fontSize = getComputedStyle(el).fontSize;
43
+ span.style.fontFamily = getComputedStyle(el).fontFamily;
44
+ span.style.whiteSpace = "pre";
45
+
46
+ body.appendChild(span);
47
+ width = span.clientWidth + defaults.paddingWidth;
48
+ body.removeChild(span);
49
+
50
+ el.style.height = defaults.minHeight + "px";
51
+
52
+ if (defaults.minWidth > width) {
53
+ el.style.width = defaults.minWidth + "px";
54
+ } else if (width > defaults.maxWidth) {
55
+ el.style.width = defaults.maxWidth + "px";
56
+ } else {
57
+ el.style.width = width + "px";
58
+ }
59
+ scrollHeight = el.scrollHeight ? el.scrollHeight - 1 : 0;
60
+
61
+ if (defaults.minHeight > scrollHeight) {
62
+ el.style.height = defaults.minHeight + "px";
63
+ } else if (defaults.maxHeight < scrollHeight) {
64
+ el.style.height = defaults.maxHeight + "px";
65
+ el.style.overflowY = "visible";
66
+ } else {
67
+ el.style.height = scrollHeight + "px";
68
+ }
69
+ },
70
+ delayedResize = function () {
71
+ window.setTimeout(resize, 0);
72
+ },
73
+ extendDefaults = function (config) {
74
+ if (config && config.minHeight) {
75
+ if (config.minHeight == "inherit") {
76
+ defaults.minHeight = el.clientHeight;
77
+ } else {
78
+ var minHeight = parseInt(config.minHeight);
79
+ if (!isNaN(minHeight)) {
80
+ defaults.minHeight = minHeight;
81
+ }
82
+ }
83
+ }
84
+
85
+ if (config && config.maxHeight) {
86
+ if (config.maxHeight == "inherit") {
87
+ defaults.maxHeight = el.clientHeight;
88
+ } else {
89
+ var maxHeight = parseInt(config.maxHeight);
90
+ if (!isNaN(maxHeight)) {
91
+ defaults.maxHeight = maxHeight;
92
+ }
93
+ }
94
+ }
95
+
96
+ if (config && config.minWidth) {
97
+ if (config.minWidth == "inherit") {
98
+ defaults.minWidth = el.clientWidth;
99
+ } else {
100
+ var minWidth = parseInt(config.minWidth);
101
+ if (!isNaN(minWidth)) {
102
+ defaults.minWidth = minWidth;
103
+ }
104
+ }
105
+ }
106
+
107
+ if (config && config.maxWidth) {
108
+ if (config.maxWidth == "inherit") {
109
+ defaults.maxWidth = el.clientWidth;
110
+ } else {
111
+ var maxWidth = parseInt(config.maxWidth);
112
+ if (!isNaN(maxWidth)) {
113
+ defaults.maxWidth = maxWidth;
114
+ }
115
+ }
116
+ }
117
+
118
+ if (!span.firstChild) {
119
+ span.className = "autoResize";
120
+ span.style.display = "inline-block";
121
+ span.appendChild(text);
122
+ }
123
+ },
124
+ init = function (el_, config, doObserve) {
125
+ el = el_;
126
+ extendDefaults(config);
127
+
128
+ if (el.nodeName == "TEXTAREA") {
129
+ el.style.resize = "none";
130
+ el.style.overflowY = "";
131
+ el.style.height = defaults.minHeight + "px";
132
+ el.style.minWidth = defaults.minWidth + "px";
133
+ el.style.maxWidth = defaults.maxWidth + "px";
134
+ el.style.overflowY = "hidden";
135
+ }
136
+
137
+ if (doObserve) {
138
+ observe(el, "change", resize);
139
+ observe(el, "cut", delayedResize);
140
+ observe(el, "paste", delayedResize);
141
+ observe(el, "drop", delayedResize);
142
+ observe(el, "keydown", delayedResize);
143
+ observe(el, "focus", resize);
144
+ observe(el, "compositionstart", delayedResize);
145
+ observe(el, "compositionupdate", delayedResize);
146
+ observe(el, "compositionend", delayedResize);
147
+ }
148
+
149
+ resize();
150
+ };
151
+
152
+ function getComputedStyle(element) {
153
+ return (
154
+ element.currentStyle ||
155
+ document.defaultView.getComputedStyle(element)
156
+ );
157
+ }
158
+
159
+ return {
160
+ init: function (el_, config, doObserve) {
161
+ init(el_, config, doObserve);
162
+ },
163
+ unObserve: function () {
164
+ if (!el) {
165
+ return false;
166
+ }
167
+ unObserve(el, "change", resize);
168
+ unObserve(el, "cut", delayedResize);
169
+ unObserve(el, "paste", delayedResize);
170
+ unObserve(el, "drop", delayedResize);
171
+ unObserve(el, "keydown", delayedResize);
172
+ unObserve(el, "focus", resize);
173
+ unObserve(el, "compositionstart", delayedResize);
174
+ unObserve(el, "compositionupdate", delayedResize);
175
+ unObserve(el, "compositionend", delayedResize);
176
+ },
177
+ resize: resize,
178
+ };
179
+ }
@@ -0,0 +1,42 @@
1
+ // key codes
2
+ export const KEY_CODES = {
3
+ BACK_SPACE: 8,
4
+ TAB: 9,
5
+ ENTER: 13,
6
+ SHIFT: 16,
7
+ SPACE: 32,
8
+
9
+ ARROW_LEFT: 37,
10
+ ARROW_UP: 38,
11
+ ARROW_RIGHT: 39,
12
+ ARROW_DOWN: 40,
13
+
14
+ DELETE: 46,
15
+
16
+ F2: 113,
17
+ };
18
+
19
+ // icon name
20
+ export const ICON_NAMES = {
21
+ FILTER: "filter",
22
+
23
+ DOUBLE_RIGHT_ARROW: "double-right-arrow",
24
+ DOUBLE_LEFT_ARROW: "double-left-arrow",
25
+
26
+ TOP_ARROW: "top-arrow",
27
+ RIGHT_ARROW: "right-arrow",
28
+ BOTTOM_ARROW: "bottom-arrow",
29
+ LEFT_ARROW: "left-arrow",
30
+
31
+ SORT_TOP_ARROW: "sort-top-arrow",
32
+ SORT_BOTTOM_ARROW: "sort-bottom-arrow",
33
+
34
+ SEARCH: "search",
35
+ };
36
+
37
+ // mouse event key type
38
+ export const MOUSE_EVENT_CLICK_TYPE = {
39
+ LEFT_MOUSE: 1,
40
+ MIDDLE_MOUSE: 2,
41
+ RIGHT_MOUSE: 2,
42
+ };
@@ -0,0 +1,239 @@
1
+ /*
2
+ fork from:
3
+ https://github.com/ElemeFE/element
4
+ */
5
+
6
+ const trim = function (string) {
7
+ return (string || "").replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, "");
8
+ };
9
+
10
+ // add class
11
+ export function addClass(el, cls) {
12
+ if (!el) return;
13
+ var curClass = el.className;
14
+ var classes = (cls || "").split(" ");
15
+
16
+ for (var i = 0, j = classes.length; i < j; i++) {
17
+ var clsName = classes[i];
18
+ if (!clsName) continue;
19
+
20
+ if (el.classList) {
21
+ el.classList.add(clsName);
22
+ } else if (!hasClass(el, clsName)) {
23
+ curClass += " " + clsName;
24
+ }
25
+ }
26
+ if (!el.classList) {
27
+ el.className = curClass;
28
+ }
29
+ }
30
+
31
+ // remove class
32
+ export function removeClass(el, cls) {
33
+ if (!el || !cls) return;
34
+ var classes = cls.split(" ");
35
+ var curClass = " " + el.className + " ";
36
+
37
+ for (var i = 0, j = classes.length; i < j; i++) {
38
+ var clsName = classes[i];
39
+ if (!clsName) continue;
40
+
41
+ if (el.classList) {
42
+ el.classList.remove(clsName);
43
+ } else if (hasClass(el, clsName)) {
44
+ curClass = curClass.replace(" " + clsName + " ", " ");
45
+ }
46
+ }
47
+ if (!el.classList) {
48
+ el.className = trim(curClass);
49
+ }
50
+ }
51
+
52
+ // has class
53
+ export function hasClass(el, cls) {
54
+ if (!el || !cls) return false;
55
+ if (cls.indexOf(" ") !== -1)
56
+ throw new Error("className should not contain space.");
57
+ if (el.classList) {
58
+ return el.classList.contains(cls);
59
+ } else {
60
+ return (" " + el.className + " ").indexOf(" " + cls + " ") > -1;
61
+ }
62
+ }
63
+
64
+ /*获取当前元素的偏移(相对于整个document)
65
+ * offsetTop:元素最顶端距离文档顶端的距离,包含滚动条
66
+ * offsetleft:元素最左侧距离文档左侧的距离,包含滚动条
67
+ * left:元素最左侧距离文档左侧的距离,不包含滚动条
68
+ * top:元素最顶端距离文档顶端的距离,不包含滚动条
69
+ * right:元素最右侧距离文档右侧的距离,不包含滚动条
70
+ * bottom:元素最底端距离文档底端的距离,不包含滚动条
71
+ * right2:元素最左侧距离文档右侧的距离,不包含滚动条
72
+ * bottom2:元素最底端距离文档最底部的距离,不包含滚动条
73
+ * */
74
+ export function getViewportOffset(triggerEl) {
75
+ var doc = document.documentElement,
76
+ box =
77
+ typeof triggerEl.getBoundingClientRect !== "undefined"
78
+ ? triggerEl.getBoundingClientRect()
79
+ : 0,
80
+ scrollLeft =
81
+ (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0),
82
+ scrollTop =
83
+ (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0),
84
+ offsetLeft = box.left + window.pageXOffset,
85
+ offsetTop = box.top + window.pageYOffset;
86
+
87
+ var left = offsetLeft - scrollLeft,
88
+ top = offsetTop - scrollTop;
89
+
90
+ return {
91
+ offsetTop,
92
+ offsetLeft,
93
+ left,
94
+ top,
95
+ right: window.document.documentElement.clientWidth - box.width - left,
96
+ bottom: window.document.documentElement.clientHeight - box.height - top,
97
+ right2: window.document.documentElement.clientWidth - left,
98
+ bottom2: window.document.documentElement.clientHeight - top,
99
+ };
100
+ }
101
+
102
+ /*获取当前元素的偏移(相对于外层容器)
103
+ * offsetTop:元素最顶端距离文档顶端的距离,包含滚动条
104
+ * offsetleft:元素最左侧距离文档左侧的距离,包含滚动条
105
+ * left:元素最左侧距离文档左侧的距离,不包含滚动条
106
+ * top:元素最顶端距离文档顶端的距离,不包含滚动条
107
+ * right:元素最右侧距离文档右侧的距离,不包含滚动条
108
+ * bottom:元素最底端距离文档底端的距离,不包含滚动条
109
+ * right2:元素最左侧距离文档右侧的距离,不包含滚动条
110
+ * bottom2:元素最底端距离文档最底部的距离,不包含滚动条
111
+ * */
112
+ export function getViewportOffsetWithinContainer(triggerEl, containerEl) {
113
+ const {
114
+ offsetTop: tElOffsetTop,
115
+ offsetLeft: tElOffsetLeft,
116
+ left: tElLef,
117
+ top: tElTop,
118
+ right: tElRight,
119
+ bottom: tElBottom,
120
+ right2: tElRight2,
121
+ bottom2: tElBottom2,
122
+ } = getViewportOffset(triggerEl);
123
+
124
+ const {
125
+ offsetTop: cElOffsetTop,
126
+ offsetLeft: cElOffsetLeft,
127
+ left: cElLef,
128
+ top: cElTop,
129
+ right: cElRight,
130
+ bottom: cElBottom,
131
+ right2: cElRight2,
132
+ bottom2: cElBottom2,
133
+ } = getViewportOffset(containerEl);
134
+
135
+ return {
136
+ offsetTop: tElOffsetTop - cElOffsetTop,
137
+ offsetLeft: tElOffsetLeft - cElOffsetLeft,
138
+ left: tElLef - cElLef,
139
+ top: tElTop - cElTop,
140
+ right: tElRight - cElRight,
141
+ bottom: tElBottom - cElBottom,
142
+ right2: tElRight2 - cElRight2,
143
+ bottom2: tElBottom2 - cElBottom2,
144
+ };
145
+ }
146
+
147
+ /*获取鼠标相对于文档的坐标
148
+ * left:鼠标点击位置距离文档左侧的距离,包含滚动条
149
+ * top: 鼠标点击位置距离文档顶端的距离,包含滚动条
150
+ * right:鼠标点击位置距离文档右侧的距离,不包含滚动条
151
+ * bottom:鼠标点击位置距离文档底端的距离,不包含滚动条
152
+ * */
153
+ export function getMousePosition(event) {
154
+ var x = 0,
155
+ y = 0,
156
+ doc = document.documentElement,
157
+ body = document.body;
158
+ if (!event) event = window.event;
159
+ if (window.pageYoffset) {
160
+ //pageYoffset是Netscape特有
161
+ x = window.pageXOffset;
162
+ y = window.pageYOffset;
163
+ } else {
164
+ x =
165
+ ((doc && doc.scrollLeft) || (body && body.scrollLeft) || 0) -
166
+ ((doc && doc.clientLeft) || (body && body.clientLeft) || 0);
167
+ y =
168
+ ((doc && doc.scrollTop) || (body && body.scrollTop) || 0) -
169
+ ((doc && doc.clientTop) || (body && body.clientTop) || 0);
170
+ }
171
+ x += event.clientX;
172
+ y += event.clientY;
173
+
174
+ let right = doc.clientWidth - event.clientX;
175
+ let bottom = doc.clientHeight - event.clientY;
176
+
177
+ return { left: x, top: y, right, bottom };
178
+ }
179
+
180
+ /**
181
+ * Returns caret position in text input.
182
+ *
183
+ * @author https://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea
184
+ * @param {HTMLElement} el An element to check.
185
+ * @returns {number}
186
+ */
187
+ export function getCaretPosition(el) {
188
+ const rootDocument = document;
189
+
190
+ if (el.selectionStart) {
191
+ return el.selectionStart;
192
+ } else if (rootDocument.selection) {
193
+ // IE8
194
+ el.focus();
195
+
196
+ const r = rootDocument.selection.createRange();
197
+
198
+ if (r === null) {
199
+ return 0;
200
+ }
201
+ const re = el.createTextRange();
202
+ const rc = re.duplicate();
203
+
204
+ re.moveToBookmark(r.getBookmark());
205
+ rc.setEndPoint("EndToStart", re);
206
+
207
+ return rc.text.length;
208
+ }
209
+
210
+ return 0;
211
+ }
212
+
213
+ /**
214
+ * Sets caret position in text input.
215
+ *
216
+ * @author http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/
217
+ * @param {Element} element An element to process.
218
+ * @param {number} pos The selection start position.
219
+ * @param {number} endPos The selection end position.
220
+ */
221
+ export function setCaretPosition(element, pos, endPos) {
222
+ if (endPos === void 0) {
223
+ endPos = pos;
224
+ }
225
+ if (element.setSelectionRange) {
226
+ element.focus();
227
+
228
+ try {
229
+ element.setSelectionRange(pos, endPos);
230
+ } catch (err) {
231
+ const elementParent = element.parentNode;
232
+ const parentDisplayValue = elementParent.style.display;
233
+
234
+ elementParent.style.display = "block";
235
+ element.setSelectionRange(pos, endPos);
236
+ elementParent.style.display = parentDisplayValue;
237
+ }
238
+ }
239
+ }
@@ -0,0 +1,53 @@
1
+ // is input key code
2
+ export function isInputKeyCode(event) {
3
+ let result = false;
4
+
5
+ const { keyCode, altKey, ctrlKey, shiftKey, metaKey } = event;
6
+
7
+ // exclude keys
8
+ if (altKey || ctrlKey || shiftKey || metaKey) {
9
+ return result;
10
+ }
11
+
12
+ // Digit0 to Digit9
13
+ if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105)) {
14
+ result = true;
15
+ }
16
+ // A to Z
17
+ else if (keyCode >= 65 && keyCode <= 90) {
18
+ result = true;
19
+ } else if (
20
+ [186, 187, 188, 189, 190, 191, 192, 219, 220, 221, 222].indexOf(
21
+ keyCode,
22
+ ) > -1
23
+ ) {
24
+ /*
25
+ Semicolon:186
26
+ Equal("="):187
27
+ Comma (","):188
28
+ Minus("-"):189
29
+ Period("."):190
30
+ Slash("/"):191
31
+ Backquote("`"):192
32
+ Open square bracket ("["):219
33
+ Backslash("\"):220
34
+ Close square bracket ("]"):221
35
+ Quote("'"):222
36
+ */
37
+ result = true;
38
+ }
39
+ // Support non-English languages. Chinese, Japanese, French, etc.
40
+ else if (keyCode == 229) {
41
+ result = true;
42
+ }
43
+
44
+ return result;
45
+ }
46
+
47
+ // is direction key code
48
+ export function isDirectionKeyCode(keyCode) {
49
+ return [37, 38, 39, 40].indexOf(keyCode) > -1;
50
+ }
51
+
52
+ // is single key
53
+ // export function isSingleKey() {}
@@ -0,0 +1,76 @@
1
+ /*
2
+ hook system
3
+
4
+ */
5
+ export default class Hooks {
6
+ constructor() {
7
+ // ...
8
+
9
+ this.hooks = {
10
+ /*
11
+ table-scroll1:[
12
+ function(){},
13
+ function(){}
14
+ ],
15
+ table-scroll2:[
16
+ function(){},
17
+ function(){}
18
+ ]
19
+
20
+ */
21
+ };
22
+ }
23
+
24
+ /**
25
+ * Add listener to plugin hooks system.
26
+ *
27
+ * @param {string} hookName The hook name.
28
+ * @param {Function} callback The listener function to add.
29
+ */
30
+ addHook(hookName, callback) {
31
+ let hooks;
32
+
33
+ if (!this.hooks[hookName]) {
34
+ this.hooks[hookName] = [];
35
+ }
36
+
37
+ hooks = this.hooks[hookName];
38
+
39
+ // exclude repeat hook
40
+ let isRepeat = false;
41
+ for (let i = 0; i < hooks.length; i++) {
42
+ if (hooks[i] === callback) {
43
+ isRepeat = true;
44
+ break;
45
+ }
46
+ }
47
+
48
+ if (isRepeat) {
49
+ console.warn(`Repeat hook name:${hookName}`);
50
+ } else {
51
+ hooks.push(callback);
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Trigger hook.
57
+ *
58
+ * @param {string} hookName The hook name.
59
+ * @param {Argument} args
60
+ */
61
+ triggerHook(hookName) {
62
+ const hooks = this.hooks[hookName];
63
+
64
+ if (hooks && hooks.length) {
65
+ const args = Array.prototype.slice.call(arguments);
66
+
67
+ hooks.forEach((hook) => {
68
+ // exclude hookName param
69
+ hook.apply(null, args.slice(1));
70
+ });
71
+ }
72
+ // else {
73
+ // console.warn(`Can't find hook name:${hookName}`);
74
+ // }
75
+ }
76
+ }