coupdoeil 1.0.0.pre.alpha.2 → 1.0.0.pre.alpha.3

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.
@@ -16,7 +16,6 @@ export function cancelOpenCloseActions(controller) {
16
16
  }
17
17
 
18
18
  function cancelOpening(controller) {
19
- console.log('deleting openingHovercard: ', controller.coupdoeilElement.uniqueId)
20
19
  delete controller.coupdoeilElement.openingHovercard
21
20
  }
22
21
 
@@ -27,8 +26,6 @@ export function cancelCloseRequest(controller) {
27
26
  }
28
27
 
29
28
  export function closeNow(controller, allowAnimation = true) {
30
- console.log('closing: ', controller.coupdoeilElement.uniqueId)
31
- console.log({ closing: controller.closing, isClosed: controller.isClosed && !controller.coupdoeilElement.openingHovercard })
32
29
  if (controller.closing || (controller.isClosed && !controller.coupdoeilElement.openingHovercard)) return
33
30
 
34
31
  controller.closing = true
@@ -48,7 +48,6 @@ async function loadHovercardContentHTML(controller, options, delayOptions) {
48
48
  }
49
49
 
50
50
  export async function openHovercard(controller, { parent }) {
51
- console.log('opening: ', controller.coupdoeilElement.uniqueId)
52
51
  if (controller.isOpen) {
53
52
  return cancelCloseRequest(controller)
54
53
  }
@@ -84,40 +83,34 @@ async function display(controller, options) {
84
83
  controller.card.dataset.animation = options.animation
85
84
  }
86
85
 
87
- requestAnimationFrame(async () => {
88
- if (!controller.coupdoeilElement.openingHovercard) {
89
- return clearHovercard(controller)
90
- }
91
-
92
- controller.card.style.opacity = '0'
93
- controller.card.classList.remove('hidden')
94
-
95
- requestAnimationFrame(async () => {
96
- if (!controller.coupdoeilElement.openingHovercard) {
97
- return clearHovercard(controller)
98
- }
99
-
100
- await positionHovercard(controller.coupdoeilElement, controller.card, options)
101
-
102
- controller.card.classList.add('hidden')
103
- controller.card.style.removeProperty('opacity')
86
+ executeNextFrameIfStillOpening(controller, async () => {
87
+ await positionHovercard(controller.coupdoeilElement, controller.card, options)
104
88
 
105
- requestAnimationFrame(async () => {
106
- if (!controller.coupdoeilElement.openingHovercard) {
107
- return clearHovercard(controller)
108
- }
89
+ // see buildHovercardElement() about next 2 lines
90
+ controller.card.classList.add('hidden')
91
+ controller.card.style.removeProperty('visibility')
109
92
 
110
- // // adding again the card to make sure it is in the map, could be better
111
- addToCurrents(controller.coupdoeilElement)
112
- delete controller.coupdoeilElement.openingHovercard
113
- controller.coupdoeilElement.dataset.hovercardOpen = true
93
+ executeNextFrameIfStillOpening(controller, async () => {
94
+ // // adding again the card to make sure it is in the map, could be better
95
+ addToCurrents(controller.coupdoeilElement)
96
+ delete controller.coupdoeilElement.openingHovercard
97
+ controller.coupdoeilElement.dataset.hovercardOpen = true
114
98
 
115
- await enter(controller.card, 'hovercard')
116
- })
99
+ await enter(controller.card, 'hovercard')
117
100
  })
118
101
  })
119
102
  }
120
103
 
104
+ function executeNextFrameIfStillOpening(controller, callback) {
105
+ requestAnimationFrame(() => {
106
+ if (controller.coupdoeilElement.openingHovercard) {
107
+ callback.call()
108
+ } else {
109
+ clearHovercard(controller)
110
+ }
111
+ })
112
+ }
113
+
121
114
  function getDelayOptionsForController(controller) {
122
115
  if (triggeredOnClick(controller)) {
123
116
  return { fetch: 0, opening: 0 }
@@ -135,10 +128,15 @@ function getDelayOptionsForController(controller) {
135
128
  function buildHovercardElement(controller, options) {
136
129
  const el = document.createElement('div')
137
130
  el.setAttribute('role', 'dialog')
138
- el.classList.add(HOVERCARD_CLASS_NAME, 'hidden')
131
+ el.classList.add(HOVERCARD_CLASS_NAME)
139
132
  el.style.cssText = 'position: absolute; left: 0; top: 0;'
140
133
  el.innerHTML = getHovercardContentHTML(controller)
141
134
  el.controller = controller
142
135
  el.dataset.placement = options.placement
136
+
137
+ // Initial style is not .hidden (no display: none;) and visibility: 'hidden'; so the card is inserted
138
+ // in DOM the without being visible.
139
+ // This allows the browser to compute its actual size so the positioning is computed correctly.
140
+ el.style.visibility = 'hidden'
143
141
  return el
144
142
  }
@@ -5,7 +5,6 @@ import {
5
5
  offset,
6
6
  arrow
7
7
  } from "@floating-ui/dom"
8
- import {clear as clearHovercard} from "./closing";
9
8
 
10
9
  export async function positionHovercard(target, card, options) {
11
10
  let { placement: placements, offset: offsetValue } = options
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # frozen_string_literal: true
4
-
5
3
  module Coupdoeil
6
4
  class Hovercard
7
5
  class OptionsSet
@@ -19,7 +17,7 @@ module Coupdoeil
19
17
  attr_reader :options
20
18
 
21
19
  def dup = OptionsSet.new(options.deep_dup)
22
- def preload? = options[:loading] == :preload
20
+ def preload? = options[:loading].to_s == "preload"
23
21
  def custom_animation? = options[:animation].to_s == "custom"
24
22
  def to_h = options
25
23
 
@@ -1,3 +1,3 @@
1
1
  module Coupdoeil
2
- VERSION = "1.0.0-alpha.2"
2
+ VERSION = "1.0.0-alpha.3"
3
3
  end
@@ -4,7 +4,6 @@
4
4
  padding: 1rem;
5
5
  border: 1px solid rgb(209 213 219);
6
6
  box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
7
- width: max-content;
8
7
  max-width: 24rem;
9
8
  border-radius: 0.25rem;
10
9
  "
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coupdoeil
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.alpha.2
4
+ version: 1.0.0.pre.alpha.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - PageHey