@whitesev/domutils 1.9.5 → 1.9.7

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.
@@ -3,7 +3,7 @@ System.register('DOMUtils', [], (function (exports) {
3
3
  return {
4
4
  execute: (function () {
5
5
 
6
- const version = "1.9.5";
6
+ const version = "1.9.6";
7
7
 
8
8
  class WindowApi {
9
9
  /** 默认的配置 */
@@ -593,10 +593,7 @@ System.register('DOMUtils', [], (function (exports) {
593
593
  "slideDown",
594
594
  "slideToggle",
595
595
  "slideUp",
596
- "sort",
597
- "splice",
598
596
  "text",
599
- "toArray",
600
597
  "toggle",
601
598
  "toggleClass",
602
599
  "trigger",
@@ -1862,35 +1859,43 @@ System.register('DOMUtils', [], (function (exports) {
1862
1859
  else {
1863
1860
  $elList.push(element);
1864
1861
  }
1862
+ /**
1863
+ * 主动添加属性
1864
+ */
1865
+ const addExtraProp = (event, obj) => {
1866
+ if (event instanceof Event && typeof obj === "object" && obj != null && !Array.isArray(obj)) {
1867
+ const detailKeys = Object.keys(obj);
1868
+ detailKeys.forEach((keyName) => {
1869
+ const value = Reflect.get(obj, keyName);
1870
+ // 在event上添加属性
1871
+ Reflect.set(event, keyName, value);
1872
+ });
1873
+ }
1874
+ };
1865
1875
  let eventTypeList = [];
1876
+ /**
1877
+ * 主动传递的事件
1878
+ */
1879
+ let __event__ = null;
1866
1880
  if (Array.isArray(eventType)) {
1867
1881
  eventTypeList = eventType.filter((it) => typeof it === "string" && it.trim() !== "");
1868
1882
  }
1869
1883
  else if (typeof eventType === "string") {
1870
1884
  eventTypeList = eventType.split(" ");
1871
1885
  }
1886
+ else if (eventType instanceof Event) {
1887
+ __event__ = eventType;
1888
+ addExtraProp(__event__, extraDetails);
1889
+ }
1872
1890
  $elList.forEach(($elItem) => {
1873
1891
  /* 获取对象上的事件 */
1874
1892
  const elementEvents = Reflect.get($elItem, GlobalData.domEventSymbol) || {};
1875
- eventTypeList.forEach((eventTypeItem) => {
1876
- let event = null;
1877
- if (extraDetails && extraDetails instanceof Event) {
1878
- event = extraDetails;
1879
- }
1880
- else {
1881
- // 构造事件
1882
- event = new Event(eventTypeItem);
1883
- if (typeof extraDetails === "object" && extraDetails != null) {
1884
- const detailKeys = Object.keys(extraDetails);
1885
- detailKeys.forEach((keyName) => {
1886
- const value = Reflect.get(extraDetails, keyName);
1887
- // 在event上添加属性
1888
- Reflect.set(event, keyName, value);
1889
- });
1890
- }
1891
- }
1893
+ /**
1894
+ * 触发事件
1895
+ */
1896
+ const dispatchEvent = (event, eventTypeItem) => {
1892
1897
  if (useDispatchToTriggerEvent == false && eventTypeItem in elementEvents) {
1893
- // 直接调用监听的事件
1898
+ // 直接调用.on监听的事件
1894
1899
  elementEvents[eventTypeItem].forEach((eventsItem) => {
1895
1900
  eventsItem.handlerCallBack(event);
1896
1901
  });
@@ -1898,7 +1903,21 @@ System.register('DOMUtils', [], (function (exports) {
1898
1903
  else {
1899
1904
  $elItem.dispatchEvent(event);
1900
1905
  }
1901
- });
1906
+ };
1907
+ if (__event__) {
1908
+ // 使用主动传递的事件直接触发
1909
+ const event = __event__;
1910
+ const eventTypeItem = event.type;
1911
+ dispatchEvent(event, eventTypeItem);
1912
+ }
1913
+ else {
1914
+ eventTypeList.forEach((eventTypeItem) => {
1915
+ // 构造事件
1916
+ const event = new Event(eventTypeItem);
1917
+ addExtraProp(event, extraDetails);
1918
+ dispatchEvent(event, eventTypeItem);
1919
+ });
1920
+ }
1902
1921
  });
1903
1922
  }
1904
1923
  /**
@@ -1934,7 +1953,8 @@ System.register('DOMUtils', [], (function (exports) {
1934
1953
  that.emit(element, "click", details, useDispatchToEmit);
1935
1954
  }
1936
1955
  else {
1937
- that.on(element, "click", null, handler);
1956
+ const listener = that.on(element, "click", null, handler);
1957
+ return listener;
1938
1958
  }
1939
1959
  }
1940
1960
  /**
@@ -1970,7 +1990,8 @@ System.register('DOMUtils', [], (function (exports) {
1970
1990
  that.emit(element, "blur", details, useDispatchToEmit);
1971
1991
  }
1972
1992
  else {
1973
- that.on(element, "blur", null, handler);
1993
+ const listener = that.on(element, "blur", null, handler);
1994
+ return listener;
1974
1995
  }
1975
1996
  }
1976
1997
  /**
@@ -2006,7 +2027,8 @@ System.register('DOMUtils', [], (function (exports) {
2006
2027
  that.emit(element, "focus", details, useDispatchToEmit);
2007
2028
  }
2008
2029
  else {
2009
- that.on(element, "focus", null, handler);
2030
+ const listener = that.on(element, "focus", null, handler);
2031
+ return listener;
2010
2032
  }
2011
2033
  }
2012
2034
  /**
@@ -2033,13 +2055,30 @@ System.register('DOMUtils', [], (function (exports) {
2033
2055
  }
2034
2056
  if (CommonUtils.isNodeList(element)) {
2035
2057
  // 设置
2058
+ const listenerList = [];
2036
2059
  element.forEach(($ele) => {
2037
- that.onHover($ele, handler, option);
2060
+ const listener = that.onHover($ele, handler, option);
2061
+ listenerList.push(listener);
2038
2062
  });
2039
- return;
2063
+ return {
2064
+ off() {
2065
+ listenerList.forEach((listener) => {
2066
+ if (!listener) {
2067
+ return;
2068
+ }
2069
+ listener.off();
2070
+ });
2071
+ },
2072
+ };
2040
2073
  }
2041
- that.on(element, "mouseenter", null, handler, option);
2042
- that.on(element, "mouseleave", null, handler, option);
2074
+ const mouseenter_listener = that.on(element, "mouseenter", null, handler, option);
2075
+ const mouseleave_listener = that.on(element, "mouseleave", null, handler, option);
2076
+ return {
2077
+ off() {
2078
+ mouseenter_listener.off();
2079
+ mouseleave_listener.off();
2080
+ },
2081
+ };
2043
2082
  }
2044
2083
  /**
2045
2084
  * 监听动画结束
@@ -2122,12 +2161,23 @@ System.register('DOMUtils', [], (function (exports) {
2122
2161
  }
2123
2162
  if (CommonUtils.isNodeList(element)) {
2124
2163
  // 设置
2164
+ const listenerList = [];
2125
2165
  element.forEach(($ele) => {
2126
- that.onKeyup($ele, handler, option);
2166
+ const listener = that.onKeyup($ele, handler, option);
2167
+ listenerList.push(listener);
2127
2168
  });
2128
- return;
2169
+ return {
2170
+ off() {
2171
+ listenerList.forEach((listener) => {
2172
+ if (!listener) {
2173
+ return;
2174
+ }
2175
+ listener.off();
2176
+ });
2177
+ },
2178
+ };
2129
2179
  }
2130
- that.on(element, "keyup", null, handler, option);
2180
+ return that.on(element, "keyup", null, handler, option);
2131
2181
  }
2132
2182
  /**
2133
2183
  * 当按键按下时触发事件
@@ -2154,12 +2204,23 @@ System.register('DOMUtils', [], (function (exports) {
2154
2204
  }
2155
2205
  if (CommonUtils.isNodeList(element)) {
2156
2206
  // 设置
2207
+ const listenerList = [];
2157
2208
  element.forEach(($ele) => {
2158
- that.onKeydown($ele, handler, option);
2209
+ const listener = that.onKeydown($ele, handler, option);
2210
+ listenerList.push(listener);
2159
2211
  });
2160
- return;
2212
+ return {
2213
+ off() {
2214
+ listenerList.forEach((listener) => {
2215
+ if (!listener) {
2216
+ return;
2217
+ }
2218
+ listener.off();
2219
+ });
2220
+ },
2221
+ };
2161
2222
  }
2162
- that.on(element, "keydown", null, handler, option);
2223
+ return that.on(element, "keydown", null, handler, option);
2163
2224
  }
2164
2225
  /**
2165
2226
  * 当按键按下时触发事件
@@ -2186,12 +2247,23 @@ System.register('DOMUtils', [], (function (exports) {
2186
2247
  }
2187
2248
  if (CommonUtils.isNodeList(element)) {
2188
2249
  // 设置
2250
+ const listenerList = [];
2189
2251
  element.forEach(($ele) => {
2190
- that.onKeypress($ele, handler, option);
2252
+ const listener = that.onKeypress($ele, handler, option);
2253
+ listenerList.push(listener);
2191
2254
  });
2192
- return;
2255
+ return {
2256
+ off() {
2257
+ listenerList.forEach((listener) => {
2258
+ if (!listener) {
2259
+ return;
2260
+ }
2261
+ listener.off();
2262
+ });
2263
+ },
2264
+ };
2193
2265
  }
2194
- that.on(element, "keypress", null, handler, option);
2266
+ return that.on(element, "keypress", null, handler, option);
2195
2267
  }
2196
2268
  /**
2197
2269
  * 监听某个元素键盘按键事件或window全局按键事件
@@ -2284,12 +2356,8 @@ System.register('DOMUtils', [], (function (exports) {
2284
2356
  handler(keyName, keyValue, otherCodeList, event);
2285
2357
  }
2286
2358
  };
2287
- that.on(element, eventName, keyboardEventCallBack, options);
2288
- return {
2289
- removeListen: () => {
2290
- that.off(element, eventName, keyboardEventCallBack, options);
2291
- },
2292
- };
2359
+ const listener = that.on(element, eventName, keyboardEventCallBack, options);
2360
+ return listener;
2293
2361
  }
2294
2362
  /**
2295
2363
  * 监input、textarea的输入框值改变的事件(当输入法输入时,不会触发该监听)
@@ -2320,11 +2388,14 @@ System.register('DOMUtils', [], (function (exports) {
2320
2388
  const compositionStartListener = this.on($el, "compositionstart", __composition_start_callback, option);
2321
2389
  const compositionEndListener = this.on($el, "compositionend", __composition_end_callback, option);
2322
2390
  return {
2323
- off: () => {
2391
+ off() {
2324
2392
  inputListener.off();
2325
2393
  compositionStartListener.off();
2326
2394
  compositionEndListener.off();
2327
2395
  },
2396
+ emit(details, useDispatchToEmit) {
2397
+ inputListener.emit(details, useDispatchToEmit);
2398
+ },
2328
2399
  };
2329
2400
  }
2330
2401
  onDoubleClick(...args) {
@@ -2407,28 +2478,56 @@ System.register('DOMUtils', [], (function (exports) {
2407
2478
  /**
2408
2479
  * 阻止事件的默认行为发生,并阻止事件传播
2409
2480
  */
2410
- const stopEvent = (event) => {
2411
- /* 阻止事件的默认行为发生。例如,当点击一个链接时,浏览器会默认打开链接的URL */
2481
+ const stopEvent = (event, onlyStopPropagation) => {
2482
+ if (typeof onlyStopPropagation === "boolean" && onlyStopPropagation) {
2483
+ // 停止事件的传播,阻止它继续向更上层的元素冒泡,事件将不会再传播给其他的元素
2484
+ event?.stopPropagation();
2485
+ // 阻止事件传播,并且还能阻止元素上的其他事件处理程序被触发
2486
+ event?.stopImmediatePropagation();
2487
+ return;
2488
+ }
2489
+ // 阻止事件的默认行为发生。例如,当点击一个链接时,浏览器会默认打开链接的URL,或者在输入框内输入文字
2412
2490
  event?.preventDefault();
2413
- /* 停止事件的传播,阻止它继续向更上层的元素冒泡,事件将不会再传播给其他的元素 */
2414
- event?.stopPropagation();
2415
- /* 阻止事件传播,并且还能阻止元素上的其他事件处理程序被触发 */
2416
- event?.stopImmediatePropagation();
2417
2491
  return false;
2418
2492
  };
2419
- if (args.length === 1) {
2420
- /* 直接阻止事件 */
2421
- return stopEvent(args[0]);
2493
+ if (args[0] instanceof Event) {
2494
+ // 直接阻止事件
2495
+ const onlyStopPropagation = args[1];
2496
+ return stopEvent(args[0], onlyStopPropagation);
2422
2497
  }
2423
2498
  else {
2424
2499
  const $el = args[0];
2425
2500
  let eventNameList = args[1];
2426
- const capture = args[2];
2427
- /* 添加对应的事件来阻止触发 */
2501
+ let selector = void 0;
2502
+ let capture = false;
2503
+ let onlyStopPropagation = false;
2504
+ // 添加对应的事件来阻止触发
2428
2505
  if (typeof eventNameList === "string") {
2429
2506
  eventNameList = [eventNameList];
2430
2507
  }
2431
- this.on($el, eventNameList, stopEvent, { capture: Boolean(capture) });
2508
+ let option = void 0;
2509
+ if (typeof args[2] === "string" || Array.isArray(args[2])) {
2510
+ // selector
2511
+ selector = args[2];
2512
+ if (typeof args[3] === "object" && args[3] != null) {
2513
+ option = args[3];
2514
+ }
2515
+ }
2516
+ else if (typeof args[2] === "object" && args[2] != null && !Array.isArray(args[2])) {
2517
+ // option
2518
+ option = args[2];
2519
+ }
2520
+ else {
2521
+ throw new TypeError("Invalid argument");
2522
+ }
2523
+ if (option) {
2524
+ capture = Boolean(option.capture);
2525
+ onlyStopPropagation = Boolean(option.onlyStopPropagation);
2526
+ }
2527
+ const listener = this.on($el, eventNameList, selector, (evt) => {
2528
+ return stopEvent(evt, onlyStopPropagation);
2529
+ }, { capture: capture });
2530
+ return listener;
2432
2531
  }
2433
2532
  }
2434
2533
  }