kamrify commited on
Commit
10f92b3
·
1 Parent(s): b69e467

Additional methods and fixes

Browse files
Files changed (3) hide show
  1. src/core/element.js +34 -11
  2. src/core/popover.js +2 -1
  3. src/index.js +25 -4
src/core/element.js CHANGED
@@ -21,6 +21,8 @@ export default class Element {
21
  this.options = options;
22
  this.overlay = overlay;
23
  this.popover = popover;
 
 
24
  }
25
 
26
  /**
@@ -114,11 +116,12 @@ export default class Element {
114
  * i.e. when moving the focus to next element of closing
115
  */
116
  onDeselected() {
117
- if (!this.popover) {
118
- return;
119
- }
120
 
121
- this.popover.hide();
 
 
122
  }
123
 
124
  /**
@@ -127,20 +130,24 @@ export default class Element {
127
  * this element of has just decided to highlight it
128
  */
129
  onHighlightStarted() {
130
- if (!this.popover) {
131
- return;
132
- }
133
-
134
  this.showPopover();
 
 
 
 
 
 
 
 
135
  }
136
 
137
  /**
138
  * Is called when the element has been successfully highlighted
139
  */
140
  onHighlighted() {
141
- if (this.popover) {
142
- this.showPopover();
143
- }
144
 
145
  const highlightedElement = this;
146
  const lastHighlightedElement = this.overlay.getLastHighlightedElement();
@@ -160,12 +167,28 @@ export default class Element {
160
  highlightedElement.bringInView();
161
  }
162
  }
 
 
 
 
 
 
 
 
 
 
 
 
163
  }
164
 
165
  /**
166
  * Shows the popover on the current element
167
  */
168
  showPopover() {
 
 
 
 
169
  const position = this.getCalculatedPosition();
170
 
171
  this.popover.show(position);
 
21
  this.options = options;
22
  this.overlay = overlay;
23
  this.popover = popover;
24
+
25
+ this.highlightFinished = false; // To track when the element has fully highlighted
26
  }
27
 
28
  /**
 
116
  * i.e. when moving the focus to next element of closing
117
  */
118
  onDeselected() {
119
+ this.hidePopover();
120
+ this.highlightFinished = false;
 
121
 
122
+ if (this.options.onDeselected) {
123
+ this.options.onDeselected(this);
124
+ }
125
  }
126
 
127
  /**
 
130
  * this element of has just decided to highlight it
131
  */
132
  onHighlightStarted() {
 
 
 
 
133
  this.showPopover();
134
+
135
+ // Because element has just started highlighting
136
+ // and hasn't completely highlighted
137
+ this.highlightFinished = false;
138
+
139
+ if (this.options.onHighlightStarted) {
140
+ this.options.onHighlightStarted(this);
141
+ }
142
  }
143
 
144
  /**
145
  * Is called when the element has been successfully highlighted
146
  */
147
  onHighlighted() {
148
+ this.showPopover();
149
+
150
+ this.highlightFinished = true;
151
 
152
  const highlightedElement = this;
153
  const lastHighlightedElement = this.overlay.getLastHighlightedElement();
 
167
  highlightedElement.bringInView();
168
  }
169
  }
170
+
171
+ if (this.options.onHighlighted) {
172
+ this.options.onHighlighted(this);
173
+ }
174
+ }
175
+
176
+ hidePopover() {
177
+ if (!this.popover) {
178
+ return;
179
+ }
180
+
181
+ this.popover.hide();
182
  }
183
 
184
  /**
185
  * Shows the popover on the current element
186
  */
187
  showPopover() {
188
+ if (!this.popover) {
189
+ return;
190
+ }
191
+
192
  const position = this.getCalculatedPosition();
193
 
194
  this.popover.show(position);
src/core/popover.js CHANGED
@@ -27,6 +27,7 @@ export default class Popover extends Element {
27
  isLast: true,
28
  totalCount: 1,
29
  currentIndex: 0,
 
30
  doneBtnText: 'Done',
31
  closeBtnText: 'Close',
32
  nextBtnText: 'Next →',
@@ -145,7 +146,7 @@ export default class Popover extends Element {
145
  this.closeBtnNode.innerHTML = this.options.closeBtnText;
146
 
147
  // If there was only one item, hide the buttons
148
- if (!this.options.totalCount || this.options.totalCount === 1) {
149
  this.footerNode.style.display = 'none';
150
  return;
151
  }
 
27
  isLast: true,
28
  totalCount: 1,
29
  currentIndex: 0,
30
+ showButtons: true,
31
  doneBtnText: 'Done',
32
  closeBtnText: 'Close',
33
  nextBtnText: 'Next →',
 
146
  this.closeBtnNode.innerHTML = this.options.closeBtnText;
147
 
148
  // If there was only one item, hide the buttons
149
+ if (!this.options.showButtons || !this.options.totalCount || this.options.totalCount === 1) {
150
  this.footerNode.style.display = 'none';
151
  return;
152
  }
src/index.js CHANGED
@@ -27,6 +27,12 @@ export default class Sholo {
27
  animate: OVERLAY_ANIMATE, // Whether to animate or not
28
  opacity: OVERLAY_OPACITY, // Overlay opacity
29
  padding: OVERLAY_PADDING, // Spacing around the element from the overlay
 
 
 
 
 
 
30
  }, options);
31
 
32
  this.document = document;
@@ -144,7 +150,6 @@ export default class Sholo {
144
  reset() {
145
  this.currentStep = 0;
146
  this.isActivated = false;
147
- this.steps = [];
148
  this.overlay.clear();
149
  }
150
 
@@ -154,7 +159,23 @@ export default class Sholo {
154
  */
155
  hasHighlightedElement() {
156
  const highlightedElement = this.overlay.getHighlightedElement();
157
- return highlightedElement && highlightedElement.node;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  }
159
 
160
  /**
@@ -195,9 +216,9 @@ export default class Sholo {
195
 
196
  if (event.keyCode === ESC_KEY_CODE) {
197
  this.reset();
198
- } else if (event.keyCode === RIGHT_KEY_CODE && this.hasNextStep()) {
199
  this.moveNext();
200
- } else if (event.keyCode === LEFT_KEY_CODE && this.hasPreviousStep()) {
201
  this.movePrevious();
202
  }
203
  }
 
27
  animate: OVERLAY_ANIMATE, // Whether to animate or not
28
  opacity: OVERLAY_OPACITY, // Overlay opacity
29
  padding: OVERLAY_PADDING, // Spacing around the element from the overlay
30
+ onHighlightStarted: () => { // When element is about to be highlighted
31
+ },
32
+ onHighlighted: () => { // When element has been highlighted
33
+ },
34
+ onDeselected: () => { // When the element has been deselected
35
+ },
36
  }, options);
37
 
38
  this.document = document;
 
150
  reset() {
151
  this.currentStep = 0;
152
  this.isActivated = false;
 
153
  this.overlay.clear();
154
  }
155
 
 
159
  */
160
  hasHighlightedElement() {
161
  const highlightedElement = this.overlay.getHighlightedElement();
162
+ return highlightedElement && highlightedElement.node && highlightedElement.highlightFinished;
163
+ }
164
+
165
+ /**
166
+ * Gets the currently highlighted element in overlay
167
+ * @returns {Element}
168
+ */
169
+ getHighlightedElement() {
170
+ return this.overlay.getHighlightedElement();
171
+ }
172
+
173
+ /**
174
+ * Gets the element that was highlighted before currently highlighted element
175
+ * @returns {Element}
176
+ */
177
+ getLastHighlightedElement() {
178
+ return this.overlay.getLastHighlightedElement();
179
  }
180
 
181
  /**
 
216
 
217
  if (event.keyCode === ESC_KEY_CODE) {
218
  this.reset();
219
+ } else if (event.keyCode === RIGHT_KEY_CODE) {
220
  this.moveNext();
221
+ } else if (event.keyCode === LEFT_KEY_CODE) {
222
  this.movePrevious();
223
  }
224
  }