uikit 3.11.2-dev.19d26d0f9 → 3.11.2-dev.21a5b7139

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 (167) hide show
  1. package/.eslintrc.json +4 -49
  2. package/.prettierignore +14 -0
  3. package/.prettierrc.json +13 -0
  4. package/.webstorm.js +3 -3
  5. package/CHANGELOG.md +16 -1
  6. package/build/.eslintrc.json +1 -3
  7. package/build/build.js +26 -28
  8. package/build/icons.js +7 -11
  9. package/build/less.js +48 -36
  10. package/build/package.json +2 -2
  11. package/build/prefix.js +21 -18
  12. package/build/publishDev.js +6 -8
  13. package/build/release.js +20 -17
  14. package/build/scope.js +21 -11
  15. package/build/scss.js +72 -39
  16. package/build/util.js +71 -62
  17. package/build/wrapper/icons.js +0 -2
  18. package/dist/css/uikit-core-rtl.css +42 -17
  19. package/dist/css/uikit-core-rtl.min.css +1 -1
  20. package/dist/css/uikit-core.css +42 -17
  21. package/dist/css/uikit-core.min.css +1 -1
  22. package/dist/css/uikit-rtl.css +42 -17
  23. package/dist/css/uikit-rtl.min.css +1 -1
  24. package/dist/css/uikit.css +42 -17
  25. package/dist/css/uikit.min.css +1 -1
  26. package/dist/js/components/countdown.js +88 -133
  27. package/dist/js/components/countdown.min.js +1 -1
  28. package/dist/js/components/filter.js +410 -437
  29. package/dist/js/components/filter.min.js +1 -1
  30. package/dist/js/components/lightbox-panel.js +1116 -1305
  31. package/dist/js/components/lightbox-panel.min.js +1 -1
  32. package/dist/js/components/lightbox.js +1164 -1383
  33. package/dist/js/components/lightbox.min.js +1 -1
  34. package/dist/js/components/notification.js +94 -114
  35. package/dist/js/components/notification.min.js +1 -1
  36. package/dist/js/components/parallax.js +294 -345
  37. package/dist/js/components/parallax.min.js +1 -1
  38. package/dist/js/components/slider-parallax.js +292 -344
  39. package/dist/js/components/slider-parallax.min.js +1 -1
  40. package/dist/js/components/slider.js +724 -846
  41. package/dist/js/components/slider.min.js +1 -1
  42. package/dist/js/components/slideshow-parallax.js +292 -344
  43. package/dist/js/components/slideshow-parallax.min.js +1 -1
  44. package/dist/js/components/slideshow.js +615 -799
  45. package/dist/js/components/slideshow.min.js +1 -1
  46. package/dist/js/components/sortable.js +587 -616
  47. package/dist/js/components/sortable.min.js +1 -1
  48. package/dist/js/components/tooltip.js +324 -356
  49. package/dist/js/components/tooltip.min.js +1 -1
  50. package/dist/js/components/upload.js +153 -161
  51. package/dist/js/components/upload.min.js +1 -1
  52. package/dist/js/uikit-core.js +5293 -6602
  53. package/dist/js/uikit-core.min.js +1 -1
  54. package/dist/js/uikit-icons.js +7 -9
  55. package/dist/js/uikit-icons.min.js +1 -1
  56. package/dist/js/uikit.js +8114 -9862
  57. package/dist/js/uikit.min.js +1 -1
  58. package/jsconfig.json +1 -1
  59. package/package.json +64 -60
  60. package/src/js/api/boot.js +25 -32
  61. package/src/js/api/component.js +23 -27
  62. package/src/js/api/global.js +6 -12
  63. package/src/js/api/hooks.js +13 -32
  64. package/src/js/api/instance.js +7 -15
  65. package/src/js/api/state.js +80 -101
  66. package/src/js/components/countdown.js +23 -49
  67. package/src/js/components/filter.js +71 -66
  68. package/src/js/components/index.js +13 -13
  69. package/src/js/components/internal/lightbox-animations.js +11 -23
  70. package/src/js/components/internal/slider-transitioner.js +65 -44
  71. package/src/js/components/internal/slideshow-animations.js +42 -61
  72. package/src/js/components/lightbox-panel.js +135 -109
  73. package/src/js/components/lightbox.js +17 -38
  74. package/src/js/components/notification.js +49 -43
  75. package/src/js/components/parallax.js +16 -30
  76. package/src/js/components/slider-parallax.js +13 -23
  77. package/src/js/components/slider.js +73 -61
  78. package/src/js/components/slideshow-parallax.js +1 -1
  79. package/src/js/components/slideshow.js +8 -13
  80. package/src/js/components/sortable.js +121 -102
  81. package/src/js/components/tooltip.js +41 -31
  82. package/src/js/components/upload.js +46 -53
  83. package/src/js/core/accordion.js +54 -49
  84. package/src/js/core/alert.js +10 -17
  85. package/src/js/core/core.js +74 -53
  86. package/src/js/core/cover.js +11 -15
  87. package/src/js/core/drop.js +107 -93
  88. package/src/js/core/form-custom.js +20 -25
  89. package/src/js/core/gif.js +3 -7
  90. package/src/js/core/grid.js +57 -58
  91. package/src/js/core/height-match.js +15 -28
  92. package/src/js/core/height-viewport.js +28 -35
  93. package/src/js/core/icon.js +38 -50
  94. package/src/js/core/img.js +57 -58
  95. package/src/js/core/index.js +39 -39
  96. package/src/js/core/leader.js +9 -18
  97. package/src/js/core/margin.js +10 -24
  98. package/src/js/core/modal.js +50 -36
  99. package/src/js/core/nav.js +2 -4
  100. package/src/js/core/navbar.js +112 -84
  101. package/src/js/core/offcanvas.js +49 -53
  102. package/src/js/core/overflow-auto.js +13 -17
  103. package/src/js/core/responsive.js +14 -12
  104. package/src/js/core/scroll.js +10 -20
  105. package/src/js/core/scrollspy-nav.js +34 -31
  106. package/src/js/core/scrollspy.js +34 -51
  107. package/src/js/core/sticky.js +151 -93
  108. package/src/js/core/svg.js +60 -79
  109. package/src/js/core/switcher.js +47 -46
  110. package/src/js/core/tab.js +7 -10
  111. package/src/js/core/toggle.js +63 -65
  112. package/src/js/core/video.js +11 -22
  113. package/src/js/mixin/animate.js +19 -20
  114. package/src/js/mixin/class.js +2 -4
  115. package/src/js/mixin/container.js +7 -11
  116. package/src/js/mixin/internal/animate-fade.js +73 -30
  117. package/src/js/mixin/internal/animate-slide.js +61 -41
  118. package/src/js/mixin/internal/slideshow-animations.js +7 -14
  119. package/src/js/mixin/internal/slideshow-transitioner.js +10 -17
  120. package/src/js/mixin/media.js +5 -10
  121. package/src/js/mixin/modal.js +89 -66
  122. package/src/js/mixin/parallax.js +53 -48
  123. package/src/js/mixin/position.js +26 -20
  124. package/src/js/mixin/slider-autoplay.js +12 -21
  125. package/src/js/mixin/slider-drag.js +62 -63
  126. package/src/js/mixin/slider-nav.js +25 -34
  127. package/src/js/mixin/slider-reactive.js +2 -8
  128. package/src/js/mixin/slider.js +51 -50
  129. package/src/js/mixin/slideshow.js +13 -19
  130. package/src/js/mixin/togglable.js +90 -63
  131. package/src/js/uikit-core.js +2 -4
  132. package/src/js/uikit.js +2 -4
  133. package/src/js/util/ajax.js +27 -43
  134. package/src/js/util/animation.js +82 -75
  135. package/src/js/util/attr.js +6 -12
  136. package/src/js/util/class.js +14 -52
  137. package/src/js/util/dimensions.js +56 -43
  138. package/src/js/util/dom.js +36 -54
  139. package/src/js/util/env.js +7 -12
  140. package/src/js/util/event.js +60 -59
  141. package/src/js/util/fastdom.js +1 -6
  142. package/src/js/util/filter.js +17 -34
  143. package/src/js/util/index.js +0 -1
  144. package/src/js/util/lang.js +79 -119
  145. package/src/js/util/mouse.js +19 -17
  146. package/src/js/util/options.js +44 -49
  147. package/src/js/util/player.js +40 -36
  148. package/src/js/util/position.js +53 -45
  149. package/src/js/util/promise.js +0 -191
  150. package/src/js/util/selector.js +39 -48
  151. package/src/js/util/style.js +36 -46
  152. package/src/js/util/viewport.js +75 -64
  153. package/src/less/components/flex.less +0 -9
  154. package/src/less/components/navbar.less +0 -7
  155. package/src/less/components/utility.less +22 -0
  156. package/src/scss/components/flex.scss +0 -9
  157. package/src/scss/components/form.scss +3 -3
  158. package/src/scss/components/icon.scss +2 -2
  159. package/src/scss/components/navbar.scss +0 -7
  160. package/src/scss/components/search.scss +1 -1
  161. package/src/scss/components/utility.scss +22 -0
  162. package/src/scss/variables-theme.scss +6 -6
  163. package/src/scss/variables.scss +6 -6
  164. package/tests/js/index.js +114 -85
  165. package/tests/sticky-parallax.html +44 -41
  166. package/tests/sticky.html +20 -3
  167. package/src/js/mixin/flex-bug.js +0 -56
@@ -1,43 +1,38 @@
1
- import {once} from './event';
2
- import {Promise} from './promise';
3
- import {assign, includes, noop} from './lang';
1
+ import { once } from './event';
2
+ import { assign, includes, noop } from './lang';
4
3
 
5
4
  export function play(el) {
6
-
7
5
  if (isIFrame(el)) {
8
- call(el, {func: 'playVideo', method: 'play'});
6
+ call(el, { func: 'playVideo', method: 'play' });
9
7
  }
10
8
 
11
9
  if (isHTML5(el)) {
12
10
  try {
13
11
  el.play().catch(noop);
14
- } catch (e) {}
12
+ } catch (e) {
13
+ // noop
14
+ }
15
15
  }
16
-
17
16
  }
18
17
 
19
18
  export function pause(el) {
20
-
21
19
  if (isIFrame(el)) {
22
- call(el, {func: 'pauseVideo', method: 'pause'});
20
+ call(el, { func: 'pauseVideo', method: 'pause' });
23
21
  }
24
22
 
25
23
  if (isHTML5(el)) {
26
24
  el.pause();
27
25
  }
28
-
29
26
  }
30
27
 
31
28
  export function mute(el) {
32
-
33
29
  if (isIFrame(el)) {
34
- call(el, {func: 'mute', method: 'setVolume', value: 0});
30
+ call(el, { func: 'mute', method: 'setVolume', value: 0 });
35
31
  }
36
32
 
37
33
  if (isHTML5(el)) {
38
34
  el.muted = true;
39
35
  }
40
-
41
36
  }
42
37
 
43
38
  export function isVideo(el) {
@@ -45,35 +40,39 @@ export function isVideo(el) {
45
40
  }
46
41
 
47
42
  function isHTML5(el) {
48
- return el && el.tagName === 'VIDEO';
43
+ return el?.tagName === 'VIDEO';
49
44
  }
50
45
 
51
46
  function isIFrame(el) {
52
- return el && el.tagName === 'IFRAME' && (isYoutube(el) || isVimeo(el));
47
+ return el?.tagName === 'IFRAME' && (isYoutube(el) || isVimeo(el));
53
48
  }
54
49
 
55
50
  function isYoutube(el) {
56
- return !!el.src.match(/\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/);
51
+ return !!el.src.match(
52
+ /\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/
53
+ );
57
54
  }
58
55
 
59
56
  function isVimeo(el) {
60
57
  return !!el.src.match(/vimeo\.com\/video\/.*/);
61
58
  }
62
59
 
63
- function call(el, cmd) {
64
- enableApi(el).then(() => post(el, cmd));
60
+ async function call(el, cmd) {
61
+ await enableApi(el);
62
+ post(el, cmd);
65
63
  }
66
64
 
67
65
  function post(el, cmd) {
68
66
  try {
69
- el.contentWindow.postMessage(JSON.stringify(assign({event: 'command'}, cmd)), '*');
70
- } catch (e) {}
67
+ el.contentWindow.postMessage(JSON.stringify(assign({ event: 'command' }, cmd)), '*');
68
+ } catch (e) {
69
+ // noop
70
+ }
71
71
  }
72
72
 
73
73
  const stateKey = '_ukPlayer';
74
74
  let counter = 0;
75
75
  function enableApi(el) {
76
-
77
76
  if (el[stateKey]) {
78
77
  return el[stateKey];
79
78
  }
@@ -84,24 +83,29 @@ function enableApi(el) {
84
83
  const id = ++counter;
85
84
  let poller;
86
85
 
87
- return el[stateKey] = new Promise(resolve => {
88
-
89
- youtube && once(el, 'load', () => {
90
- const listener = () => post(el, {event: 'listening', id});
91
- poller = setInterval(listener, 100);
92
- listener();
93
- });
94
-
95
- once(window, 'message', resolve, false, ({data}) => {
86
+ return (el[stateKey] = new Promise((resolve) => {
87
+ youtube &&
88
+ once(el, 'load', () => {
89
+ const listener = () => post(el, { event: 'listening', id });
90
+ poller = setInterval(listener, 100);
91
+ listener();
92
+ });
96
93
 
94
+ once(window, 'message', resolve, false, ({ data }) => {
97
95
  try {
98
96
  data = JSON.parse(data);
99
- return data && (youtube && data.id === id && data.event === 'onReady' || vimeo && Number(data.player_id) === id);
100
- } catch (e) {}
101
-
97
+ return (
98
+ data &&
99
+ ((youtube && data.id === id && data.event === 'onReady') ||
100
+ (vimeo && Number(data.player_id) === id))
101
+ );
102
+ } catch (e) {
103
+ // noop
104
+ }
102
105
  });
103
106
 
104
- el.src = `${el.src}${includes(el.src, '?') ? '&' : '?'}${youtube ? 'enablejsapi=1' : `api=1&player_id=${id}`}`;
105
-
106
- }).then(() => clearInterval(poller));
107
+ el.src = `${el.src}${includes(el.src, '?') ? '&' : '?'}${
108
+ youtube ? 'enablejsapi=1' : `api=1&player_id=${id}`
109
+ }`;
110
+ }).then(() => clearInterval(poller)));
107
111
  }
@@ -1,18 +1,26 @@
1
- import {offset} from './dimensions';
2
- import {each, endsWith, includes, toFloat} from './lang';
3
- import {getViewport, scrollParents} from './viewport';
1
+ import { offset } from './dimensions';
2
+ import { each, endsWith, includes, toFloat } from './lang';
3
+ import { getViewport, scrollParents } from './viewport';
4
4
 
5
5
  const dirs = {
6
6
  width: ['x', 'left', 'right'],
7
- height: ['y', 'top', 'bottom']
7
+ height: ['y', 'top', 'bottom'],
8
8
  };
9
9
 
10
- export function positionAt(element, target, elAttach, targetAttach, elOffset, targetOffset, flip, boundary) {
11
-
10
+ export function positionAt(
11
+ element,
12
+ target,
13
+ elAttach,
14
+ targetAttach,
15
+ elOffset,
16
+ targetOffset,
17
+ flip,
18
+ boundary
19
+ ) {
12
20
  elAttach = getPos(elAttach);
13
21
  targetAttach = getPos(targetAttach);
14
22
 
15
- const flipped = {element: elAttach, target: targetAttach};
23
+ const flipped = { element: elAttach, target: targetAttach };
16
24
 
17
25
  if (!element || !target) {
18
26
  return flipped;
@@ -35,69 +43,71 @@ export function positionAt(element, target, elAttach, targetAttach, elOffset, ta
35
43
  position.top += elOffset['y'];
36
44
 
37
45
  if (flip) {
38
-
39
46
  let boundaries = scrollParents(element).map(getViewport);
40
47
 
41
48
  if (boundary && !includes(boundaries, boundary)) {
42
49
  boundaries.unshift(boundary);
43
50
  }
44
51
 
45
- boundaries = boundaries.map(el => offset(el));
52
+ boundaries = boundaries.map((el) => offset(el));
46
53
 
47
54
  each(dirs, ([dir, align, alignFlip], prop) => {
48
-
49
55
  if (!(flip === true || includes(flip, dir))) {
50
56
  return;
51
57
  }
52
58
 
53
- boundaries.some(boundary => {
54
-
55
- const elemOffset = elAttach[dir] === align
56
- ? -dim[prop]
57
- : elAttach[dir] === alignFlip
59
+ boundaries.some((boundary) => {
60
+ const elemOffset =
61
+ elAttach[dir] === align
62
+ ? -dim[prop]
63
+ : elAttach[dir] === alignFlip
58
64
  ? dim[prop]
59
65
  : 0;
60
66
 
61
- const targetOffset = targetAttach[dir] === align
62
- ? targetDim[prop]
63
- : targetAttach[dir] === alignFlip
67
+ const targetOffset =
68
+ targetAttach[dir] === align
69
+ ? targetDim[prop]
70
+ : targetAttach[dir] === alignFlip
64
71
  ? -targetDim[prop]
65
72
  : 0;
66
73
 
67
- if (position[align] < boundary[align] || position[align] + dim[prop] > boundary[alignFlip]) {
68
-
74
+ if (
75
+ position[align] < boundary[align] ||
76
+ position[align] + dim[prop] > boundary[alignFlip]
77
+ ) {
69
78
  const centerOffset = dim[prop] / 2;
70
- const centerTargetOffset = targetAttach[dir] === 'center' ? -targetDim[prop] / 2 : 0;
71
-
72
- return elAttach[dir] === 'center' && (
73
- apply(centerOffset, centerTargetOffset)
74
- || apply(-centerOffset, -centerTargetOffset)
75
- ) || apply(elemOffset, targetOffset);
76
-
79
+ const centerTargetOffset =
80
+ targetAttach[dir] === 'center' ? -targetDim[prop] / 2 : 0;
81
+
82
+ return (
83
+ (elAttach[dir] === 'center' &&
84
+ (apply(centerOffset, centerTargetOffset) ||
85
+ apply(-centerOffset, -centerTargetOffset))) ||
86
+ apply(elemOffset, targetOffset)
87
+ );
77
88
  }
78
89
 
79
90
  function apply(elemOffset, targetOffset) {
80
-
81
- const newVal = toFloat((position[align] + elemOffset + targetOffset - elOffset[dir] * 2).toFixed(4));
91
+ const newVal = toFloat(
92
+ (position[align] + elemOffset + targetOffset - elOffset[dir] * 2).toFixed(4)
93
+ );
82
94
 
83
95
  if (newVal >= boundary[align] && newVal + dim[prop] <= boundary[alignFlip]) {
84
96
  position[align] = newVal;
85
97
 
86
- ['element', 'target'].forEach(el => {
87
- flipped[el][dir] = !elemOffset
88
- ? flipped[el][dir]
89
- : flipped[el][dir] === dirs[prop][1]
90
- ? dirs[prop][2]
91
- : dirs[prop][1];
98
+ ['element', 'target'].forEach((el) => {
99
+ if (elemOffset) {
100
+ flipped[el][dir] =
101
+ flipped[el][dir] === dirs[prop][1]
102
+ ? dirs[prop][2]
103
+ : dirs[prop][1];
104
+ }
92
105
  });
93
106
 
94
107
  return true;
95
108
  }
96
-
97
109
  }
98
-
99
110
  });
100
-
101
111
  });
102
112
  }
103
113
 
@@ -111,13 +121,12 @@ function moveTo(position, attach, dim, factor) {
111
121
  if (attach[dir] === alignFlip) {
112
122
  position[align] += dim[prop] * factor;
113
123
  } else if (attach[dir] === 'center') {
114
- position[align] += dim[prop] * factor / 2;
124
+ position[align] += (dim[prop] * factor) / 2;
115
125
  }
116
126
  });
117
127
  }
118
128
 
119
129
  function getPos(pos) {
120
-
121
130
  const x = /left|center|right/;
122
131
  const y = /top|center|bottom/;
123
132
 
@@ -127,22 +136,21 @@ function getPos(pos) {
127
136
  pos = x.test(pos[0])
128
137
  ? pos.concat('center')
129
138
  : y.test(pos[0])
130
- ? ['center'].concat(pos)
131
- : ['center', 'center'];
139
+ ? ['center'].concat(pos)
140
+ : ['center', 'center'];
132
141
  }
133
142
 
134
143
  return {
135
144
  x: x.test(pos[0]) ? pos[0] : 'center',
136
- y: y.test(pos[1]) ? pos[1] : 'center'
145
+ y: y.test(pos[1]) ? pos[1] : 'center',
137
146
  };
138
147
  }
139
148
 
140
149
  function getOffsets(offsets, width, height) {
141
-
142
150
  const [x, y] = (offsets || '').split(' ');
143
151
 
144
152
  return {
145
153
  x: x ? toFloat(x) * (endsWith(x, '%') ? width / 100 : 1) : 0,
146
- y: y ? toFloat(y) * (endsWith(y, '%') ? height / 100 : 1) : 0
154
+ y: y ? toFloat(y) * (endsWith(y, '%') ? height / 100 : 1) : 0,
147
155
  };
148
156
  }
@@ -1,191 +0,0 @@
1
- /* global setImmediate */
2
- import {inBrowser} from './env';
3
- import {isFunction, isObject} from './lang';
4
-
5
- export const Promise = inBrowser && window.Promise || PromiseFn;
6
-
7
- export class Deferred {
8
- constructor() {
9
- this.promise = new Promise((resolve, reject) => {
10
- this.reject = reject;
11
- this.resolve = resolve;
12
- });
13
- }
14
- }
15
-
16
- /**
17
- * Promises/A+ polyfill v1.1.4 (https://github.com/bramstein/promis)
18
- */
19
-
20
- const RESOLVED = 0;
21
- const REJECTED = 1;
22
- const PENDING = 2;
23
-
24
- const async = inBrowser && window.setImmediate || setTimeout;
25
-
26
- function PromiseFn(executor) {
27
-
28
- this.state = PENDING;
29
- this.value = undefined;
30
- this.deferred = [];
31
-
32
- const promise = this;
33
-
34
- try {
35
- executor(
36
- x => {
37
- promise.resolve(x);
38
- },
39
- r => {
40
- promise.reject(r);
41
- }
42
- );
43
- } catch (e) {
44
- promise.reject(e);
45
- }
46
- }
47
-
48
- PromiseFn.reject = function (r) {
49
- return new PromiseFn((resolve, reject) => {
50
- reject(r);
51
- });
52
- };
53
-
54
- PromiseFn.resolve = function (x) {
55
- return new PromiseFn((resolve, reject) => {
56
- resolve(x);
57
- });
58
- };
59
-
60
- PromiseFn.all = function all(iterable) {
61
- return new PromiseFn((resolve, reject) => {
62
- const result = [];
63
- let count = 0;
64
-
65
- if (iterable.length === 0) {
66
- resolve(result);
67
- }
68
-
69
- function resolver(i) {
70
- return function (x) {
71
- result[i] = x;
72
- count += 1;
73
-
74
- if (count === iterable.length) {
75
- resolve(result);
76
- }
77
- };
78
- }
79
-
80
- for (let i = 0; i < iterable.length; i += 1) {
81
- PromiseFn.resolve(iterable[i]).then(resolver(i), reject);
82
- }
83
- });
84
- };
85
-
86
- PromiseFn.race = function race(iterable) {
87
- return new PromiseFn((resolve, reject) => {
88
- for (let i = 0; i < iterable.length; i += 1) {
89
- PromiseFn.resolve(iterable[i]).then(resolve, reject);
90
- }
91
- });
92
- };
93
-
94
- const p = PromiseFn.prototype;
95
-
96
- p.resolve = function resolve(x) {
97
- const promise = this;
98
-
99
- if (promise.state === PENDING) {
100
- if (x === promise) {
101
- throw new TypeError('Promise settled with itself.');
102
- }
103
-
104
- let called = false;
105
-
106
- try {
107
- const then = x && x.then;
108
-
109
- if (x !== null && isObject(x) && isFunction(then)) {
110
- then.call(
111
- x,
112
- x => {
113
- if (!called) {
114
- promise.resolve(x);
115
- }
116
- called = true;
117
- },
118
- r => {
119
- if (!called) {
120
- promise.reject(r);
121
- }
122
- called = true;
123
- }
124
- );
125
- return;
126
- }
127
- } catch (e) {
128
- if (!called) {
129
- promise.reject(e);
130
- }
131
- return;
132
- }
133
-
134
- promise.state = RESOLVED;
135
- promise.value = x;
136
- promise.notify();
137
- }
138
- };
139
-
140
- p.reject = function reject(reason) {
141
- const promise = this;
142
-
143
- if (promise.state === PENDING) {
144
- if (reason === promise) {
145
- throw new TypeError('Promise settled with itself.');
146
- }
147
-
148
- promise.state = REJECTED;
149
- promise.value = reason;
150
- promise.notify();
151
- }
152
- };
153
-
154
- p.notify = function notify() {
155
- async(() => {
156
- if (this.state !== PENDING) {
157
- while (this.deferred.length) {
158
- const [onResolved, onRejected, resolve, reject] = this.deferred.shift();
159
-
160
- try {
161
- if (this.state === RESOLVED) {
162
- if (isFunction(onResolved)) {
163
- resolve(onResolved.call(undefined, this.value));
164
- } else {
165
- resolve(this.value);
166
- }
167
- } else if (this.state === REJECTED) {
168
- if (isFunction(onRejected)) {
169
- resolve(onRejected.call(undefined, this.value));
170
- } else {
171
- reject(this.value);
172
- }
173
- }
174
- } catch (e) {
175
- reject(e);
176
- }
177
- }
178
- }
179
- });
180
- };
181
-
182
- p.then = function then(onResolved, onRejected) {
183
- return new PromiseFn((resolve, reject) => {
184
- this.deferred.push([onResolved, onRejected, resolve, reject]);
185
- this.notify();
186
- });
187
- };
188
-
189
- p.catch = function (onRejected) {
190
- return this.then(undefined, onRejected);
191
- };
@@ -1,7 +1,7 @@
1
- import {attr} from './attr';
2
- import {inBrowser} from './env';
3
- import {closest, index, matches, parent} from './filter';
4
- import {isDocument, isString, memoize, toNode, toNodes} from './lang';
1
+ import { attr } from './attr';
2
+ import { inBrowser } from './env';
3
+ import { closest, index, matches, parent } from './filter';
4
+ import { isDocument, isString, memoize, toNode, toNodes } from './lang';
5
5
 
6
6
  export function query(selector, context) {
7
7
  return find(selector, getContext(selector, context));
@@ -12,7 +12,7 @@ export function queryAll(selector, context) {
12
12
  }
13
13
 
14
14
  function getContext(selector, context = document) {
15
- return isString(selector) && isContextSelector(selector) || isDocument(context)
15
+ return (isString(selector) && isContextSelector(selector)) || isDocument(context)
16
16
  ? context
17
17
  : context.ownerDocument;
18
18
  }
@@ -26,7 +26,6 @@ export function findAll(selector, context) {
26
26
  }
27
27
 
28
28
  function _query(selector, context = document, queryFn) {
29
-
30
29
  if (!selector || !isString(selector)) {
31
30
  return selector;
32
31
  }
@@ -34,63 +33,51 @@ function _query(selector, context = document, queryFn) {
34
33
  selector = selector.replace(contextSanitizeRe, '$1 *');
35
34
 
36
35
  if (isContextSelector(selector)) {
37
-
38
- selector = splitSelector(selector).map(selector => {
39
-
40
- let ctx = context;
41
-
42
- if (selector[0] === '!') {
43
-
44
- const selectors = selector.substr(1).trim().split(' ');
45
- ctx = closest(parent(context), selectors[0]);
46
- selector = selectors.slice(1).join(' ').trim();
47
-
48
- }
49
-
50
- if (selector[0] === '-') {
51
-
52
- const selectors = selector.substr(1).trim().split(' ');
53
- const prev = (ctx || context).previousElementSibling;
54
- ctx = matches(prev, selector.substr(1)) ? prev : null;
55
- selector = selectors.slice(1).join(' ');
56
-
57
- }
58
-
59
- if (!ctx) {
60
- return null;
61
- }
62
-
63
- return `${domPath(ctx)} ${selector}`;
64
-
65
- }).filter(Boolean).join(',');
36
+ selector = splitSelector(selector)
37
+ .map((selector) => {
38
+ let ctx = context;
39
+
40
+ if (selector[0] === '!') {
41
+ const selectors = selector.substr(1).trim().split(' ');
42
+ ctx = closest(parent(context), selectors[0]);
43
+ selector = selectors.slice(1).join(' ').trim();
44
+ }
45
+
46
+ if (selector[0] === '-') {
47
+ const selectors = selector.substr(1).trim().split(' ');
48
+ const prev = (ctx || context).previousElementSibling;
49
+ ctx = matches(prev, selector.substr(1)) ? prev : null;
50
+ selector = selectors.slice(1).join(' ');
51
+ }
52
+
53
+ if (!ctx) {
54
+ return null;
55
+ }
56
+
57
+ return `${domPath(ctx)} ${selector}`;
58
+ })
59
+ .filter(Boolean)
60
+ .join(',');
66
61
 
67
62
  context = document;
68
-
69
63
  }
70
64
 
71
65
  try {
72
-
73
66
  return context[queryFn](selector);
74
-
75
67
  } catch (e) {
76
-
77
68
  return null;
78
-
79
69
  }
80
-
81
70
  }
82
71
 
83
72
  const contextSelectorRe = /(^|[^\\],)\s*[!>+~-]/;
84
73
  const contextSanitizeRe = /([!>+~-])(?=\s+[!>+~-]|\s*$)/g;
85
74
 
86
- const isContextSelector = memoize(selector => selector.match(contextSelectorRe));
75
+ const isContextSelector = memoize((selector) => selector.match(contextSelectorRe));
87
76
 
88
77
  const selectorRe = /.*?[^\\](?:,|$)/g;
89
78
 
90
- const splitSelector = memoize(selector =>
91
- selector.match(selectorRe).map(selector =>
92
- selector.replace(/,$/, '').trim()
93
- )
79
+ const splitSelector = memoize((selector) =>
80
+ selector.match(selectorRe).map((selector) => selector.replace(/,$/, '').trim())
94
81
  );
95
82
 
96
83
  function domPath(element) {
@@ -101,7 +88,7 @@ function domPath(element) {
101
88
  names.unshift(`#${escape(id)}`);
102
89
  break;
103
90
  } else {
104
- let {tagName} = element;
91
+ let { tagName } = element;
105
92
  if (tagName !== 'HTML') {
106
93
  tagName += `:nth-child(${index(element) + 1})`;
107
94
  }
@@ -112,7 +99,11 @@ function domPath(element) {
112
99
  return names.join(' > ');
113
100
  }
114
101
 
115
- const escapeFn = inBrowser && window.CSS && CSS.escape || function (css) { return css.replace(/([^\x7f-\uFFFF\w-])/g, match => `\\${match}`); };
102
+ const escapeFn =
103
+ (inBrowser && window.CSS && CSS.escape) ||
104
+ function (css) {
105
+ return css.replace(/([^\x7f-\uFFFF\w-])/g, (match) => `\\${match}`);
106
+ };
116
107
  export function escape(css) {
117
108
  return isString(css) ? escapeFn.call(null, css) : '';
118
109
  }