coupdoeil 1.0.0.pre.alpha.1 → 1.0.0.pre.alpha.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 169910fbcad5cad39a93e1decd6f720e9ef85e9d51c692f3341e0112050e6161
4
- data.tar.gz: e3b4aec3d619240cfbdf1c324026f30d1ccc9e6d501fbd4a15af9aadf478b98b
3
+ metadata.gz: 692dde641a7454618ccdfced914f4a42fcba0259e69147598b0c95bc51c8fae0
4
+ data.tar.gz: 5c384435d015f13eaa720d1710c7f789dae8c3b8619cf9202abfe3284c554cc1
5
5
  SHA512:
6
- metadata.gz: e48dd152e215b65f18f298b53fb71420068acd52121d0a849fa160bee5807e090b6bee3347c75c497c7d5f248592f3b9e260ee749e84ff017ed07d7635d62ea4
7
- data.tar.gz: 68829f5765f8c808dceec92c226b820bb202093bfb66b7b4d38d1d1f41d5e902b905292201386c72c7364f221a198c754b011e6243a13f6f0ec562c09e4f86f7
6
+ metadata.gz: 84570a2fbca462e2c611b9c0064bc8864097e2bdbea4828ba09c85978d00a7bdb49fe73ef2ccf2efe9ea722c6a952507e3784c7d0faa0a052b3dddd2156e0121
7
+ data.tar.gz: fa9bddb68087382174d222bf4160973655d95433d7d222396204c08a98b9bead48bf3dfb64b6984e5ba614726d49e22493a64b5ab5c5b584fdbe170e1e544be9
data/CHANGELOG.md CHANGED
@@ -1 +1,5 @@
1
1
  # CHANGELOG
2
+
3
+ ### 1.0.0-alpha.2
4
+ - refactor `opening.js`
5
+ - fix the load of Coupdoeil::Engine
@@ -5,8 +5,6 @@ class HovercardController {
5
5
  this.children = new Set;
6
6
  this.parent = null;
7
7
  this.closingRequest = null;
8
- this.openingDelay = null;
9
- this.fetchDelay = null;
10
8
  }
11
9
  get isOpen() {
12
10
  return !!this.coupdoeilElement.dataset.hovercardOpen;
@@ -57,7 +55,7 @@ const ANIMATIONS = [ false, "slide-in", "fade-in", "slide-out", "custom" ];
57
55
 
58
56
  const PLACEMENTS = [ "auto", "top", "top-start", "top-end", "right", "right-start", "right-end", "bottom", "bottom-start", "bottom-end", "left", "left-start", "left-end" ];
59
57
 
60
- const LOADINGS = [ "asyn", "preload", "lazy" ];
58
+ const LOADINGS = [ "async", "preload", "lazy" ];
61
59
 
62
60
  function parseCSSSize(value) {
63
61
  if (typeof value === "number") {
@@ -103,7 +101,7 @@ function getCache(optionsInt) {
103
101
  }
104
102
 
105
103
  function getLoading(optionsInt) {
106
- return LOADINGS[optionsInt & 3 >> 1];
104
+ return LOADINGS[optionsInt >> 1 & 3];
107
105
  }
108
106
 
109
107
  function getTrigger$1(optionsInt) {
@@ -187,180 +185,10 @@ function setHovercardContentHTML(controller, value) {
187
185
  hovercardContentHTMLMap.set(cacheMapKey(controller), value);
188
186
  }
189
187
 
190
- async function enter(element, transitionName = null) {
191
- element.classList.remove("hidden");
192
- await transition("enter", element, transitionName);
193
- }
194
-
195
- async function leave(element, transitionName = null) {
196
- await transition("leave", element, transitionName);
197
- element.classList.add("hidden");
198
- }
199
-
200
- async function transition(direction, element, animation) {
201
- const dataset = element.dataset;
202
- const animationClass = animation ? `${animation}-${direction}` : direction;
203
- let transition = `transition${direction.charAt(0).toUpperCase() + direction.slice(1)}`;
204
- const genesis = dataset[transition] ? dataset[transition].split(" ") : [ animationClass ];
205
- const start = dataset[`${transition}Start`] ? dataset[`${transition}Start`].split(" ") : [ `${animationClass}-start` ];
206
- const end = dataset[`${transition}End`] ? dataset[`${transition}End`].split(" ") : [ `${animationClass}-end` ];
207
- addClasses(element, genesis);
208
- addClasses(element, start);
209
- await nextFrame();
210
- removeClasses(element, start);
211
- addClasses(element, end);
212
- await afterTransition(element);
213
- removeClasses(element, end);
214
- removeClasses(element, genesis);
215
- }
216
-
217
- function addClasses(element, classes) {
218
- element.classList.add(...classes);
219
- }
220
-
221
- function removeClasses(element, classes) {
222
- element.classList.remove(...classes);
223
- }
224
-
225
- function nextFrame() {
226
- return new Promise((resolve => {
227
- requestAnimationFrame((() => {
228
- requestAnimationFrame(resolve);
229
- }));
230
- }));
231
- }
232
-
233
- function afterTransition(element) {
234
- return new Promise((resolve => {
235
- const computedDuration = getComputedStyle(element).transitionDuration.split(",")[0];
236
- const duration = Number(computedDuration.replace("s", "")) * 1e3;
237
- setTimeout((() => {
238
- resolve();
239
- }), duration);
240
- }));
241
- }
242
-
243
- function detachFromParent(controller) {
244
- if (controller.parent) {
245
- controller.parent.children.delete(controller);
246
- controller.parent = null;
247
- }
248
- }
249
-
250
- function cancelCloseRequest(controller) {
251
- clearTimeout(controller.closingRequest);
252
- controller.closingRequest = null;
253
- }
254
-
255
- function closeNow(controller, allowAnimation = true) {
256
- if (controller.closing || controller.isClosed) return;
257
- controller.closing = true;
258
- cancelOpenCloseActions(controller);
259
- controller.children.forEach((childController => {
260
- closeNow(childController);
261
- }));
262
- detachFromParent(controller);
263
- if (allowAnimation && controller.card.dataset.animation) {
264
- closeWithAnimation(controller);
265
- } else {
266
- closeWithoutAnimation(controller);
267
- }
268
- }
269
-
270
- async function closeWithAnimation(controller) {
271
- await leave(controller.card, "hovercard");
272
- closeWithoutAnimation(controller);
273
- }
274
-
275
- function closeWithoutAnimation(controller) {
276
- controller.card.remove();
277
- controller.card = null;
278
- delete controller.closing;
279
- delete controller.coupdoeilElement.dataset.hovercardOpen;
280
- }
281
-
282
- function clear(controller) {
283
- closeNow(controller, false);
284
- }
285
-
286
- function closeLater(controller) {
287
- cancelOpenCloseActions(controller);
288
- controller.closingRequest = setTimeout((() => {
289
- closeNow(controller);
290
- }), defaultConfig.closingDelay);
291
- }
292
-
293
- function closeChildrenNow(controller) {
294
- controller.children.forEach((childController => {
295
- closeNow(childController);
296
- }));
297
- }
298
-
299
- function closeOnHoverChildrenLater(controller) {
300
- controller.children.forEach((childController => {
301
- if (triggeredOnHover(childController)) {
302
- closeLater(childController);
303
- }
304
- }));
305
- }
306
-
307
- const CURRENT_HOVERCARDS_BY_ID = new Map;
308
-
309
- window.hovercads = CURRENT_HOVERCARDS_BY_ID;
310
-
311
188
  function clearHovercardContentCache() {
312
189
  hovercardContentHTMLMap.clear();
313
190
  }
314
191
 
315
- function currentHovercardsById() {
316
- return CURRENT_HOVERCARDS_BY_ID;
317
- }
318
-
319
- function addToCurrents(coupdoeilElement) {
320
- CURRENT_HOVERCARDS_BY_ID.set(coupdoeilElement.uniqueId, coupdoeilElement);
321
- }
322
-
323
- function closeAllNow() {
324
- for (const coupdoeilElement of CURRENT_HOVERCARDS_BY_ID.values()) {
325
- closeNow(coupdoeilElement.hovercardController);
326
- removeFromCurrents(coupdoeilElement);
327
- }
328
- }
329
-
330
- function clearAll() {
331
- for (const coupdoeilElement of CURRENT_HOVERCARDS_BY_ID.values()) {
332
- clear(coupdoeilElement.hovercardController);
333
- removeFromCurrents(coupdoeilElement);
334
- }
335
- }
336
-
337
- function closeTriggeredOnHoverNow() {
338
- for (const coupdoeilElement of CURRENT_HOVERCARDS_BY_ID.values()) {
339
- if (triggeredOnHover(coupdoeilElement.hovercardController)) {
340
- closeNow(coupdoeilElement.hovercardController);
341
- removeFromCurrents(coupdoeilElement);
342
- }
343
- }
344
- }
345
-
346
- function closeTriggeredOnHoverLater() {
347
- for (const coupdoeilElement of CURRENT_HOVERCARDS_BY_ID.values()) {
348
- if (triggeredOnHover(coupdoeilElement.hovercardController)) {
349
- closeLater(coupdoeilElement.hovercardController);
350
- removeFromCurrents(coupdoeilElement);
351
- }
352
- }
353
- }
354
-
355
- function removeFromCurrents(coupdoeilElement) {
356
- CURRENT_HOVERCARDS_BY_ID.delete(coupdoeilElement.uniqueId);
357
- }
358
-
359
- function cancelOpenCloseActions(controller) {
360
- cancelOpening(controller);
361
- cancelCloseRequest(controller);
362
- }
363
-
364
192
  const sides = [ "top", "right", "bottom", "left" ];
365
193
 
366
194
  const alignments = [ "start", "end" ];
@@ -1935,10 +1763,191 @@ const computePosition = (reference, floating, options) => {
1935
1763
  });
1936
1764
  };
1937
1765
 
1938
- async function positionHovercard(controller, options) {
1766
+ async function enter(element, transitionName = null) {
1767
+ element.classList.remove("hidden");
1768
+ await transition("enter", element, transitionName);
1769
+ }
1770
+
1771
+ async function leave(element, transitionName = null) {
1772
+ await transition("leave", element, transitionName);
1773
+ element.classList.add("hidden");
1774
+ }
1775
+
1776
+ async function transition(direction, element, animation) {
1777
+ const dataset = element.dataset;
1778
+ const animationClass = animation ? `${animation}-${direction}` : direction;
1779
+ let transition = `transition${direction.charAt(0).toUpperCase() + direction.slice(1)}`;
1780
+ const genesis = dataset[transition] ? dataset[transition].split(" ") : [ animationClass ];
1781
+ const start = dataset[`${transition}Start`] ? dataset[`${transition}Start`].split(" ") : [ `${animationClass}-start` ];
1782
+ const end = dataset[`${transition}End`] ? dataset[`${transition}End`].split(" ") : [ `${animationClass}-end` ];
1783
+ addClasses(element, genesis);
1784
+ addClasses(element, start);
1785
+ await nextFrame();
1786
+ removeClasses(element, start);
1787
+ addClasses(element, end);
1788
+ await afterTransition(element);
1789
+ removeClasses(element, end);
1790
+ removeClasses(element, genesis);
1791
+ }
1792
+
1793
+ function addClasses(element, classes) {
1794
+ element.classList.add(...classes);
1795
+ }
1796
+
1797
+ function removeClasses(element, classes) {
1798
+ element.classList.remove(...classes);
1799
+ }
1800
+
1801
+ function nextFrame() {
1802
+ return new Promise((resolve => {
1803
+ requestAnimationFrame((() => {
1804
+ requestAnimationFrame(resolve);
1805
+ }));
1806
+ }));
1807
+ }
1808
+
1809
+ function afterTransition(element) {
1810
+ return new Promise((resolve => {
1811
+ const computedDuration = getComputedStyle(element).transitionDuration.split(",")[0];
1812
+ const duration = Number(computedDuration.replace("s", "")) * 1e3;
1813
+ setTimeout((() => {
1814
+ resolve();
1815
+ }), duration);
1816
+ }));
1817
+ }
1818
+
1819
+ const CURRENT_HOVERCARDS_BY_ID = new Map;
1820
+
1821
+ function currentHovercardsById() {
1822
+ return CURRENT_HOVERCARDS_BY_ID;
1823
+ }
1824
+
1825
+ function addToCurrents(coupdoeilElement) {
1826
+ CURRENT_HOVERCARDS_BY_ID.set(coupdoeilElement.uniqueId, coupdoeilElement);
1827
+ }
1828
+
1829
+ function removeFromCurrents(coupdoeilElement) {
1830
+ CURRENT_HOVERCARDS_BY_ID.delete(coupdoeilElement.uniqueId);
1831
+ }
1832
+
1833
+ function detachFromParent(controller) {
1834
+ if (controller.parent) {
1835
+ controller.parent.children.delete(controller);
1836
+ controller.parent = null;
1837
+ }
1838
+ }
1839
+
1840
+ function cancelOpenCloseActions(controller) {
1841
+ cancelOpening(controller);
1842
+ cancelCloseRequest(controller);
1843
+ }
1844
+
1845
+ function cancelOpening(controller) {
1846
+ console.log("deleting openingHovercard: ", controller.coupdoeilElement.uniqueId);
1847
+ delete controller.coupdoeilElement.openingHovercard;
1848
+ }
1849
+
1850
+ function cancelCloseRequest(controller) {
1851
+ clearTimeout(controller.closingRequest);
1852
+ controller.closingRequest = null;
1853
+ addToCurrents(controller.coupdoeilElement);
1854
+ }
1855
+
1856
+ function closeNow(controller, allowAnimation = true) {
1857
+ console.log("closing: ", controller.coupdoeilElement.uniqueId);
1858
+ console.log({
1859
+ closing: controller.closing,
1860
+ isClosed: controller.isClosed && !controller.coupdoeilElement.openingHovercard
1861
+ });
1862
+ if (controller.closing || controller.isClosed && !controller.coupdoeilElement.openingHovercard) return;
1863
+ controller.closing = true;
1864
+ cancelOpenCloseActions(controller);
1865
+ controller.children.forEach((childController => {
1866
+ closeNow(childController);
1867
+ }));
1868
+ detachFromParent(controller);
1869
+ if (allowAnimation && controller.card && controller.card.dataset.animation) {
1870
+ closeWithAnimation(controller);
1871
+ } else {
1872
+ closeWithoutAnimation(controller);
1873
+ }
1874
+ }
1875
+
1876
+ async function closeWithAnimation(controller) {
1877
+ await leave(controller.card, "hovercard");
1878
+ closeWithoutAnimation(controller);
1879
+ }
1880
+
1881
+ function closeWithoutAnimation(controller) {
1882
+ if (controller.card) {
1883
+ controller.card.remove();
1884
+ controller.card = null;
1885
+ }
1886
+ delete controller.closing;
1887
+ delete controller.coupdoeilElement.dataset.hovercardOpen;
1888
+ }
1889
+
1890
+ function clear(controller) {
1891
+ closeNow(controller, false);
1892
+ }
1893
+
1894
+ function closeLater(controller) {
1895
+ cancelOpenCloseActions(controller);
1896
+ controller.closingRequest = setTimeout((() => {
1897
+ closeNow(controller);
1898
+ }), defaultConfig.closingDelay);
1899
+ }
1900
+
1901
+ function closeChildrenNow(controller) {
1902
+ controller.children.forEach((childController => {
1903
+ closeNow(childController);
1904
+ }));
1905
+ }
1906
+
1907
+ function closeOnHoverChildrenLater(controller) {
1908
+ controller.children.forEach((childController => {
1909
+ if (triggeredOnHover(childController)) {
1910
+ closeLater(childController);
1911
+ }
1912
+ }));
1913
+ }
1914
+
1915
+ function closeAllNow() {
1916
+ for (const coupdoeilElement of CURRENT_HOVERCARDS_BY_ID.values()) {
1917
+ closeNow(coupdoeilElement.hovercardController);
1918
+ removeFromCurrents(coupdoeilElement);
1919
+ }
1920
+ }
1921
+
1922
+ function clearAll() {
1923
+ for (const coupdoeilElement of CURRENT_HOVERCARDS_BY_ID.values()) {
1924
+ clearHovercard(coupdoeilElement.hovercardController);
1925
+ removeFromCurrents(coupdoeilElement);
1926
+ }
1927
+ }
1928
+
1929
+ function closeTriggeredOnHoverNow() {
1930
+ for (const coupdoeilElement of CURRENT_HOVERCARDS_BY_ID.values()) {
1931
+ if (triggeredOnHover(coupdoeilElement.hovercardController)) {
1932
+ closeNow(coupdoeilElement.hovercardController);
1933
+ removeFromCurrents(coupdoeilElement);
1934
+ }
1935
+ }
1936
+ }
1937
+
1938
+ function closeTriggeredOnHoverLater() {
1939
+ for (const coupdoeilElement of CURRENT_HOVERCARDS_BY_ID.values()) {
1940
+ if (triggeredOnHover(coupdoeilElement.hovercardController)) {
1941
+ closeLater(coupdoeilElement.hovercardController);
1942
+ removeFromCurrents(coupdoeilElement);
1943
+ }
1944
+ }
1945
+ }
1946
+
1947
+ async function positionHovercard(target, card, options) {
1939
1948
  let {placement: placements, offset: offsetValue} = options;
1940
1949
  const placement = placements[0];
1941
- const arrowElement = controller.card.querySelector("[data-hovercard-arrow]");
1950
+ const arrowElement = card.querySelector("[data-hovercard-arrow]");
1942
1951
  const middleware = [ AutoPositioningWithFallbacks(placements) ];
1943
1952
  if (arrowElement) {
1944
1953
  const arrowSize = arrowElement.clientWidth;
@@ -1948,7 +1957,7 @@ async function positionHovercard(controller, options) {
1948
1957
  }));
1949
1958
  }
1950
1959
  middleware.push(offset(offsetValue));
1951
- const computedPosition = await computePosition(controller.coupdoeilElement, controller.card, {
1960
+ const computedPosition = await computePosition(target, card, {
1952
1961
  placement: placement,
1953
1962
  middleware: middleware
1954
1963
  });
@@ -1956,8 +1965,8 @@ async function positionHovercard(controller, options) {
1956
1965
  if (arrowElement) {
1957
1966
  positionArrow(arrowElement, computedPosition);
1958
1967
  }
1959
- controller.card.dataset.placement = actualPlacement;
1960
- Object.assign(controller.card.style, {
1968
+ card.dataset.placement = actualPlacement;
1969
+ Object.assign(card.style, {
1961
1970
  left: `${x}px`,
1962
1971
  top: `${y}px`
1963
1972
  });
@@ -2009,49 +2018,64 @@ function positionArrow(arrowElement, computedData) {
2009
2018
  });
2010
2019
  }
2011
2020
 
2012
- function cancelOpening(controller) {
2013
- clearTimeout(controller.openingDelay);
2014
- controller.openingDelay = null;
2015
- clearTimeout(controller.fetchDelay);
2016
- controller.fetchDelay = null;
2017
- delete controller.coupdoeilElement.openingHovercard;
2021
+ function fetchHovercardContent(controller) {
2022
+ const type = getType(controller);
2023
+ const params = getParams(controller);
2024
+ const authenticityToken = document.querySelector("meta[name=csrf-token]").content;
2025
+ let url = `/coupdoeil/hovercard`;
2026
+ const opts = {
2027
+ method: "POST",
2028
+ headers: {
2029
+ "Content-Type": "application/json"
2030
+ },
2031
+ body: JSON.stringify({
2032
+ params: params,
2033
+ action_name: type,
2034
+ authenticity_token: authenticityToken
2035
+ })
2036
+ };
2037
+ return fetch(url, opts).then((response => {
2038
+ if (response.status >= 400) {
2039
+ throw "error while fetching hovercard content";
2040
+ }
2041
+ return response.text();
2042
+ }));
2043
+ }
2044
+
2045
+ async function loadHovercardContentHTML(controller, options, delayOptions) {
2046
+ return new Promise((resolve => {
2047
+ setTimeout((async () => {
2048
+ if (!controller.coupdoeilElement.openingHovercard) return;
2049
+ if (options.cache === false || options.cache && !getHovercardContentHTML(controller)) {
2050
+ let html;
2051
+ if (options.loading === "preload") {
2052
+ html = preloadedContentElement(controller).innerHTML;
2053
+ } else {
2054
+ html = await fetchHovercardContent(controller);
2055
+ }
2056
+ setHovercardContentHTML(controller, html);
2057
+ }
2058
+ resolve();
2059
+ }), delayOptions.fetch);
2060
+ }));
2018
2061
  }
2019
2062
 
2020
2063
  async function openHovercard(controller, {parent: parent}) {
2064
+ console.log("opening: ", controller.coupdoeilElement.uniqueId);
2021
2065
  if (controller.isOpen) {
2022
- cancelCloseRequest(controller);
2023
- return addToCurrents(controller.coupdoeilElement);
2066
+ return cancelCloseRequest(controller);
2024
2067
  }
2025
2068
  if (parent) {
2026
2069
  controller.parent = parent;
2027
2070
  parent.children.add(controller);
2028
2071
  }
2029
- const delayOptions = getDelayOptionsForController(controller);
2072
+ const delays = getDelayOptionsForController(controller);
2030
2073
  const options = extractOptionsFromElement(controller.coupdoeilElement);
2031
- const {cache: cache} = options;
2032
- controller.openingDelay = new Promise((resolve => {
2033
- if (getHovercardContentHTML(controller) && cache) {
2034
- setTimeout(resolve, delayOptions.reOpening);
2035
- } else {
2036
- setTimeout(resolve, delayOptions.actualOpening);
2037
- }
2038
- }));
2039
- if (!getHovercardContentHTML(controller) || !cache) {
2040
- controller.fetchDelay = new Promise((resolve => {
2041
- setTimeout(resolve, delayOptions.fetch);
2042
- }));
2043
- await controller.fetchDelay;
2044
- if (!controller.fetchDelay) {
2045
- return;
2046
- }
2047
- controller.fetchDelay = null;
2048
- const html = preloadedContentElement(controller)?.innerHTML || await fetchHovercardContent(controller);
2049
- setHovercardContentHTML(controller, html);
2050
- }
2051
- await controller.openingDelay;
2074
+ const openingDelay = new Promise((resolve => setTimeout(resolve, delays.opening)));
2075
+ const fetchDelay = loadHovercardContentHTML(controller, options, delays);
2076
+ await Promise.all([ fetchDelay, openingDelay ]);
2052
2077
  const parentIsClosedOrClosing = controller.parent && (controller.parent.isClosed || controller.parent.closingRequest);
2053
- if (controller.openingDelay && !parentIsClosedOrClosing) {
2054
- controller.openingDelay = null;
2078
+ if (controller.coupdoeilElement.openingHovercard && !parentIsClosedOrClosing) {
2055
2079
  await display(controller, options);
2056
2080
  }
2057
2081
  }
@@ -2065,13 +2089,22 @@ async function display(controller, options) {
2065
2089
  controller.card.dataset.animation = options.animation;
2066
2090
  }
2067
2091
  requestAnimationFrame((async () => {
2092
+ if (!controller.coupdoeilElement.openingHovercard) {
2093
+ return clear(controller);
2094
+ }
2068
2095
  controller.card.style.opacity = "0";
2069
2096
  controller.card.classList.remove("hidden");
2070
2097
  requestAnimationFrame((async () => {
2071
- await positionHovercard(controller, options);
2098
+ if (!controller.coupdoeilElement.openingHovercard) {
2099
+ return clear(controller);
2100
+ }
2101
+ await positionHovercard(controller.coupdoeilElement, controller.card, options);
2072
2102
  controller.card.classList.add("hidden");
2073
2103
  controller.card.style.removeProperty("opacity");
2074
2104
  requestAnimationFrame((async () => {
2105
+ if (!controller.coupdoeilElement.openingHovercard) {
2106
+ return clear(controller);
2107
+ }
2075
2108
  addToCurrents(controller.coupdoeilElement);
2076
2109
  delete controller.coupdoeilElement.openingHovercard;
2077
2110
  controller.coupdoeilElement.dataset.hovercardOpen = true;
@@ -2084,42 +2117,20 @@ async function display(controller, options) {
2084
2117
  function getDelayOptionsForController(controller) {
2085
2118
  if (triggeredOnClick(controller)) {
2086
2119
  return {
2087
- reOpening: 0,
2088
- actualOpening: 0,
2089
- fetch: 0
2120
+ fetch: 0,
2121
+ opening: 0
2090
2122
  };
2091
2123
  }
2124
+ let fetchDelay;
2125
+ {
2126
+ fetchDelay = defaultConfig.openingDelay / 2;
2127
+ }
2092
2128
  return {
2093
- fetch: defaultConfig.fetchDelay,
2094
- reOpening: defaultConfig.fetchDelay + defaultConfig.openingDelay,
2095
- actualOpening: defaultConfig.openingDelay - defaultConfig.fetchDelay
2129
+ fetch: fetchDelay,
2130
+ opening: defaultConfig.openingDelay
2096
2131
  };
2097
2132
  }
2098
2133
 
2099
- function fetchHovercardContent(controller) {
2100
- const type = getType(controller);
2101
- const params = getParams(controller);
2102
- const authenticityToken = document.querySelector("meta[name=csrf-token]").content;
2103
- let url = `/coupdoeil/hovercard`;
2104
- const opts = {
2105
- method: "POST",
2106
- headers: {
2107
- "Content-Type": "application/json"
2108
- },
2109
- body: JSON.stringify({
2110
- params: params,
2111
- action_name: type,
2112
- authenticity_token: authenticityToken
2113
- })
2114
- };
2115
- return fetch(url, opts).then((response => {
2116
- if (response.status >= 400) {
2117
- throw "error while fetching hovercard content";
2118
- }
2119
- return response.text();
2120
- }));
2121
- }
2122
-
2123
2134
  function buildHovercardElement(controller, options) {
2124
2135
  const el = document.createElement("div");
2125
2136
  el.setAttribute("role", "dialog");