geico-design-kit 7.0.0

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.

Potentially problematic release.


This version of geico-design-kit might be problematic. Click here for more details.

Files changed (107) hide show
  1. package/.babelrc +5 -0
  2. package/LICENSE +0 -0
  3. package/dist/analytics.js +119 -0
  4. package/dist/appState.js +56 -0
  5. package/dist/baseComponent.js +110 -0
  6. package/dist/components/Accordion.js +312 -0
  7. package/dist/components/AddressAutoComplete.js +220 -0
  8. package/dist/components/Alert.js +145 -0
  9. package/dist/components/BackgroundPattern.js +99 -0
  10. package/dist/components/BackgroundPatternPortfolio.js +242 -0
  11. package/dist/components/ButtonSwitch.js +236 -0
  12. package/dist/components/CardSelections.js +230 -0
  13. package/dist/components/CommonQuestionsSquares.js +169 -0
  14. package/dist/components/Confirmation.js +156 -0
  15. package/dist/components/ConsolidatedSummary.js +489 -0
  16. package/dist/components/CoverageGraph.js +201 -0
  17. package/dist/components/CreditCard.js +591 -0
  18. package/dist/components/CurrencyInput.js +302 -0
  19. package/dist/components/DatePicker.js +468 -0
  20. package/dist/components/DockedMessage.js +146 -0
  21. package/dist/components/DotNavigation.js +200 -0
  22. package/dist/components/EditComponent.js +128 -0
  23. package/dist/components/EditableTable.js +113 -0
  24. package/dist/components/InPageNavigation.js +360 -0
  25. package/dist/components/Loader.js +232 -0
  26. package/dist/components/MakePayment.js +361 -0
  27. package/dist/components/Modal.js +254 -0
  28. package/dist/components/MoreInfoButton.js +227 -0
  29. package/dist/components/MultipleSelectBox.js +217 -0
  30. package/dist/components/NavigationalBox.js +161 -0
  31. package/dist/components/Navigator.js +294 -0
  32. package/dist/components/PasswordMeter.js +201 -0
  33. package/dist/components/PayPlans.js +534 -0
  34. package/dist/components/SegmentedControl.js +327 -0
  35. package/dist/components/SortableTable.js +166 -0
  36. package/dist/components/Tabs.js +1 -0
  37. package/dist/components/TextAreaCountdown.js +219 -0
  38. package/dist/components/Timeline.js +498 -0
  39. package/dist/components/TimelineFilter.js +492 -0
  40. package/dist/components/ToTopArrow.js +153 -0
  41. package/dist/components/Tooltip.js +329 -0
  42. package/dist/components/Upsell.js +168 -0
  43. package/dist/components/VIN.js +271 -0
  44. package/dist/components/ValidateForm.js +938 -0
  45. package/dist/components/ViewMoreLess.js +191 -0
  46. package/dist/components/ZipCode.js +191 -0
  47. package/dist/components/portfolio.js +99 -0
  48. package/dist/geico-design-kit.js +141 -0
  49. package/dist/global/components.js +98 -0
  50. package/dist/global/footer.js +26 -0
  51. package/dist/global/nav.js +1257 -0
  52. package/dist/services/CharacterTypeService.js +106 -0
  53. package/dist/services/UserAgentService.js +73 -0
  54. package/dist/utils.js +79 -0
  55. package/package.json +32 -0
  56. package/src/analytics.js +82 -0
  57. package/src/appState.js +56 -0
  58. package/src/baseComponent.js +156 -0
  59. package/src/components/Accordion.js +336 -0
  60. package/src/components/AddressAutoComplete.js +236 -0
  61. package/src/components/Alert.js +135 -0
  62. package/src/components/BackgroundPattern.js +96 -0
  63. package/src/components/BackgroundPatternPortfolio.js +284 -0
  64. package/src/components/ButtonSwitch.js +241 -0
  65. package/src/components/CardSelections.js +240 -0
  66. package/src/components/CommonQuestionsSquares.js +179 -0
  67. package/src/components/Confirmation.js +160 -0
  68. package/src/components/ConsolidatedSummary.js +505 -0
  69. package/src/components/CoverageGraph.js +203 -0
  70. package/src/components/CreditCard.js +595 -0
  71. package/src/components/CurrencyInput.js +321 -0
  72. package/src/components/DatePicker.js +487 -0
  73. package/src/components/DockedMessage.js +142 -0
  74. package/src/components/DotNavigation.js +206 -0
  75. package/src/components/EditComponent.js +130 -0
  76. package/src/components/EditableTable.js +106 -0
  77. package/src/components/InPageNavigation.js +391 -0
  78. package/src/components/Loader.js +272 -0
  79. package/src/components/MakePayment.js +397 -0
  80. package/src/components/Modal.js +279 -0
  81. package/src/components/MoreInfoButton.js +243 -0
  82. package/src/components/MultipleSelectBox.js +211 -0
  83. package/src/components/NavigationalBox.js +163 -0
  84. package/src/components/Navigator.js +338 -0
  85. package/src/components/PasswordMeter.js +209 -0
  86. package/src/components/PayPlans.js +604 -0
  87. package/src/components/SegmentedControl.js +365 -0
  88. package/src/components/SortableTable.js +176 -0
  89. package/src/components/Tabs.js +0 -0
  90. package/src/components/TextAreaCountdown.js +231 -0
  91. package/src/components/Timeline.js +532 -0
  92. package/src/components/TimelineFilter.js +533 -0
  93. package/src/components/ToTopArrow.js +153 -0
  94. package/src/components/Tooltip.js +344 -0
  95. package/src/components/Upsell.js +196 -0
  96. package/src/components/VIN.js +289 -0
  97. package/src/components/ValidateForm.js +1030 -0
  98. package/src/components/ViewMoreLess.js +193 -0
  99. package/src/components/ZipCode.js +193 -0
  100. package/src/components/portfolio.js +106 -0
  101. package/src/geico-design-kit.js +144 -0
  102. package/src/global/components.js +92 -0
  103. package/src/global/footer.js +25 -0
  104. package/src/global/nav.js +1457 -0
  105. package/src/services/CharacterTypeService.js +107 -0
  106. package/src/services/UserAgentService.js +59 -0
  107. package/src/utils.js +82 -0
@@ -0,0 +1,487 @@
1
+ import baseComponent from '../../src/baseComponent';
2
+ import appState from '../../src/appState';
3
+ import * as utils from '../../src/utils';
4
+ import $ from 'jquery';
5
+ import datepickerFactory from 'jquery-datepicker';
6
+ datepickerFactory($);
7
+
8
+ const validateSettings = [
9
+ {
10
+ setting : "content",
11
+ isRequired : true,
12
+ validate : "type",
13
+ possibleValues : ["string","object"],
14
+ errorMessage : ["GDK DatePicker : Content must be defined and set to a DOM selector or Node"]
15
+ },
16
+ {
17
+ setting : "monthYearDropdowns",
18
+ isRequired : false,
19
+ validate : "type",
20
+ possibleValues : ["boolean"],
21
+ errorMessage : ["GDK DatePicker : monthYearDropdowns must be set to a boolean"]
22
+ },
23
+ {
24
+ setting : "dateFormatShort",
25
+ isRequired : false,
26
+ validate : "type",
27
+ possibleValues : ["boolean"],
28
+ errorMessage : ["GDK DatePicker : dateFormatShort must be set to a boolean"]
29
+ },
30
+ {
31
+ setting : "minDate",
32
+ isRequired : false,
33
+ validate : "type",
34
+ possibleValues : ["number","date","string","object"],
35
+ errorMessage : ["GDK DatePicker : minDate must be set to a number, date, or string"]
36
+ },
37
+ {
38
+ setting : "maxDate",
39
+ isRequired : false,
40
+ validate : "type",
41
+ possibleValues : ["number","date","string","object"],
42
+ errorMessage : ["GDK DatePicker : maxDate must be set to a number, date, or string"]
43
+ },
44
+ {
45
+ setting : "showWeekends",
46
+ isRequired : false,
47
+ validate : "type",
48
+ possibleValues : ["boolean"],
49
+ errorMessage : ["GDK DatePicker : showWeekends must be set to a boolean"]
50
+ },
51
+ {
52
+ setting : "dateSelected",
53
+ isRequired : false,
54
+ validate : "type",
55
+ possibleValues : ["function"],
56
+ errorMessage : ["GDK DatePicker : dateSelected must be a callback function"]
57
+ },
58
+ {
59
+ setting : "disabled",
60
+ isRequired : false,
61
+ validate : "type",
62
+ possibleValues : ["boolean"],
63
+ errorMessage : ["GDK DatePicker : disabled must be a boolean"]
64
+ }
65
+ ];
66
+
67
+ /**
68
+ * DatePicker Class
69
+ */
70
+ class DatePicker{
71
+
72
+ /**
73
+ * These are settings for the instantiation. Refer to the design kit section of this component for JS setting examples.
74
+ * @param {string|Object} content
75
+ * A reference to the html date node
76
+ *
77
+ * @param {boolean} [monthYearDropdowns=false]
78
+ * Determines whether or not to show select boxes for the month and year
79
+ *
80
+ * @param {boolean} [dateFormatShort=false]
81
+ * Determines whether to use the short format date instead of the default long format
82
+ *
83
+ * @param {function} [dateSelected]
84
+ * Callback gets fired when a user selects a date
85
+ *
86
+ * @param {Date|number|string} [minDate=null]
87
+ * The minimum selectable date. When set to null, there is no minimum.
88
+ *
89
+ * @param {Date|number|string} [maxDate=null]
90
+ * The maximum selectable date. When set to null, there is no maximum.
91
+ *
92
+ * @param {boolean} [hideWeekends=false]
93
+ * Set to true if you would like to disable the weekends in the calender.
94
+ *
95
+ * @param {boolean} [disabled]
96
+ * Set to true if you would like to disable the input and calendar button.
97
+ *
98
+ */
99
+ constructor(options) {
100
+
101
+ this._internalVars = {
102
+ node: null,//used for content item
103
+ button: null,
104
+ wrapper : null,
105
+ wrapperElementId : "wrapper",
106
+ marginLeft : 15,
107
+ marginTopBottomLeft : 10,
108
+ marginTopBottomRight : 28,
109
+ breakpoint : 768,
110
+ calendarWidth: 300,
111
+ borderWidth: 4
112
+ };
113
+
114
+ //options with defaults set
115
+ this._defaults = {
116
+ monthYearDropdowns: false,
117
+ dateFormatShort: false,
118
+ minDate: null,
119
+ maxDate: null,
120
+ hideWeekends : false
121
+ };
122
+
123
+ // Create options by extending defaults with the passed in arugments
124
+ if (options && typeof options === "object") {
125
+ this._options = baseComponent.extendDefaults(this._defaults, options);
126
+ }
127
+
128
+ //if the required options are valid set up the environment
129
+ if( baseComponent.validateSettings(this._options, validateSettings) ){
130
+ this._internalVars.contentType = baseComponent.getContentType(this);
131
+ setLocalVars.call(this);
132
+ setEvents.call(this);
133
+ init.call(this);
134
+ this._internalVars.button.setAttribute('tabindex', '-1');
135
+
136
+ }
137
+ }
138
+
139
+ //Public Methods
140
+
141
+ /**
142
+ * removes the node from the dom and any events attached
143
+ */
144
+ destroy(){
145
+ removeEvents.call(this);
146
+ $(this._internalVars.node).datepicker("destroy");
147
+ this._internalVars.node.parentNode.removeChild(this._internalVars.node);
148
+
149
+ //a little garbage collection
150
+ for (var variableKey in this){
151
+ if (this.hasOwnProperty(variableKey)){
152
+ delete this[variableKey];
153
+ }
154
+ }
155
+ }
156
+
157
+ /**
158
+ * Set Min Date for the DatePicker Instance
159
+ * @param {number|Date|string|object} minDate The starting date for the date picker instance
160
+ */
161
+ setMinDate(minDate) {
162
+ this._options.minDate = new Date(minDate);
163
+ }
164
+
165
+ /**
166
+ * Set Max Date for the DatePicker Instance
167
+ * @param {number|Date|string|object} maxDate The ending date for the date picker instance
168
+ */
169
+ setMaxDate(maxDate) {
170
+ this._options.maxDate = new Date(maxDate);
171
+ }
172
+
173
+ /**
174
+ * Set Min and Max Dates for the DatePicker Instance
175
+ * @param {number|Date|string|object} minDate The starting date for the date picker instance
176
+ * @param {number|Date|string|object} maxDate The ending date for the date picker instance
177
+ */
178
+ setMinMaxDateLimits(minDate, maxDate) {
179
+ this._options.minDate = new Date(minDate);
180
+ this._options.maxDate = new Date(maxDate);
181
+ }
182
+
183
+ /**
184
+ * Disables a specific date picker
185
+ * @param {String} datePickerId ID of the date picker to be disabled
186
+ */
187
+ disableDatePicker() {
188
+ let option = 'disable';
189
+ datePickerState.call(this, option);
190
+ }
191
+
192
+ /**
193
+ * Enable a specif date picker
194
+ * @param {Object} datePickerId ID of the date picker to be enabled
195
+ */
196
+ enableDatePicker(datePickerId) {
197
+ let option = 'enable';
198
+ datePickerState.call(this, option);
199
+ }
200
+ }
201
+
202
+
203
+ /**
204
+ * set all the local vars to passed in options
205
+ */
206
+ function setLocalVars() {
207
+
208
+ var _this = this;
209
+
210
+ try{
211
+ //determine the type of content passed in
212
+ if(this._internalVars.contentType === 'string'){
213
+ this._internalVars.node = document.querySelector(this._options.content);
214
+ }else if(this._internalVars.contentType === 'domNode'){
215
+ this._internalVars.node = this._options.content;
216
+ }
217
+
218
+ let dpOptions = {
219
+ showOtherMonths: false,
220
+ showOn: "button",
221
+ buttonText: "",
222
+ nextText: "",
223
+ prevText: "",
224
+ dayNamesMin: [ "S", "M", "T", "W", "T", "F", "S" ],
225
+ changeMonth: false,
226
+ changeYear: false,
227
+ showOptions: { direction: "left" },
228
+ beforeShow: updateDatepicker.bind(this),
229
+ onClose: closedDatepicker.bind(this),
230
+ onSelect: function(dateText, inst) {
231
+ var date = $(this).val();
232
+
233
+ _this._internalVars.node.parentNode.classList.remove("form-field--error");
234
+
235
+ // Get all spans and remove ones bearing class "form-message"
236
+ var spans = _this._internalVars.node.parentNode.getElementsByTagName('span');
237
+ for(var e = 0; spans.length > e; e++) {
238
+ if(-1 !== spans[e].className.indexOf("form-message")) {
239
+ spans[e].parentNode.removeChild(spans[e]);
240
+ }
241
+ }
242
+
243
+ if(_this._options.dateSelected){
244
+ _this._options.dateSelected(date);
245
+ }
246
+ }
247
+ };
248
+
249
+ if(this._options.hideWeekends){
250
+ dpOptions.beforeShowDay = $.datepicker.noWeekends;
251
+ }
252
+
253
+ $( this._internalVars.node ).datepicker(dpOptions);
254
+
255
+ this._internalVars.button = this._internalVars.node.nextElementSibling;
256
+ this._internalVars.wrapper = document.querySelector("#" + this._internalVars.wrapperElementId);
257
+ this._internalVars.handler = toggleHover.bind(this);
258
+ this._internalVars.handlerOverride = calendarPositionOverride.bind(this);
259
+
260
+ let $datapicker = $(".ui-datepicker");
261
+
262
+ if($datapicker.data("initialized") !== true){
263
+ $datapicker.data("initialized", true);
264
+ document.addEventListener("animationstart", insertListener, false); // standard + firefox
265
+ document.addEventListener("MSAnimationStart", insertListener, false); // IE
266
+ document.addEventListener("webkitAnimationStart", insertListener, false); // Chrome + Safari
267
+ }
268
+ } catch (ex) {
269
+ console.error("Error : ", ex.message);
270
+ }
271
+ }
272
+
273
+ /**
274
+ * Sets all the events needed for the component
275
+ */
276
+ function setEvents() {
277
+ this._internalVars.button.addEventListener("mouseover", this._internalVars.handler, false);
278
+ this._internalVars.button.addEventListener("mouseout", this._internalVars.handler, false);
279
+ window.addEventListener('resize', handleResize.bind(this));
280
+
281
+ //special case if a datepicker exist in a modal - override third party jquery snippet
282
+ if(utils.isChild('modal', this._internalVars.button)){
283
+ this._internalVars.button.addEventListener("click", this._internalVars.handlerOverride);
284
+ }
285
+ }
286
+
287
+ function init() {
288
+ if (this._options.disabled === true) {
289
+ let option = 'disable';
290
+
291
+ datePickerState.call(this, option);
292
+ }
293
+ }
294
+
295
+ /**
296
+ * removes all events from the component
297
+ */
298
+ function removeEvents(){
299
+ this._internalVars.button.removeEventListener("mouseoout", this._internalVars.handler, false);
300
+ }
301
+
302
+ /**
303
+ * Checks if the ID passed from the enable or disable public method exists
304
+ * @param {string} option Variable identifying enable or disable
305
+ */
306
+ function datePickerState(option) {
307
+ let datePickerId = this._internalVars.node.id,
308
+ datePicker = document.getElementById(datePickerId),
309
+ parent = datePicker.parentNode,
310
+ button = parent.querySelector(".ui-datepicker-trigger"),
311
+ hasButton = false;
312
+
313
+ if(button) {
314
+ hasButton = true;
315
+ }
316
+
317
+ if (option === 'disable') {
318
+ disable.call(this, datePicker, button, hasButton);
319
+ } else if (option === 'enable') {
320
+ enable.call(this, datePicker, button, hasButton);
321
+ }
322
+ }
323
+
324
+ /**
325
+ * Disables the specified date picker
326
+ * @param {object} datePicker The date picker HTML element
327
+ * @param {object} button The date picker calendar button HTML element
328
+ * @param {boolean} hasButton Boolean indicating if calendar button exists
329
+ */
330
+ function disable(datePicker, button, hasButton) {
331
+ datePicker.setAttribute('disabled', 'disabled');
332
+ if(hasButton === true) {
333
+ button.setAttribute('disabled', 'disabled');
334
+ }
335
+ }
336
+
337
+ /**
338
+ * Enables the specified date picker
339
+ * @param {object} datePicker The date picker HTML element
340
+ * @param {object} button The date picker calendar button HTML element
341
+ * @param {boolean} hasButton Boolean indicating if calendar button exists
342
+ */
343
+ function enable(datePicker, button, hasButton) {
344
+ datePicker.removeAttribute('disabled');
345
+ if(hasButton === true) {
346
+ button.removeAttribute('disabled');
347
+ }
348
+ }
349
+
350
+ /**
351
+ * toggles the active state of the neighboring input field
352
+ */
353
+ function toggleHover(){
354
+ if(this._internalVars.node.classList.contains("active"))
355
+ this._internalVars.node.classList.remove("active");
356
+ else
357
+ this._internalVars.node.classList.add("active");
358
+ }
359
+
360
+ /**
361
+ * listens for the select box to be inserted and wraps it in a container
362
+ */
363
+ function insertListener(event){
364
+ if (event.animationName == "nodeInserted") {
365
+ if(!$(".ui-datepicker-year").parent().hasClass("select-box"))
366
+ $(".ui-datepicker-year").wrap( "<div class=\"select-box\"></div>" );
367
+
368
+ if(!$(".ui-datepicker-month").parent().hasClass("select-box"))
369
+ $(".ui-datepicker-month").wrap( "<div class=\"select-box\"></div>" );
370
+ }
371
+ }
372
+
373
+ /**
374
+ * runs when the datepicker window closes
375
+ */
376
+ function closedDatepicker() {
377
+ //re-assign button variable since datepicker replaces the original node
378
+ this._internalVars.button = this._internalVars.node.nextElementSibling;
379
+ setEvents.call(this);
380
+ this._internalVars.button.setAttribute('tabindex', '-1');
381
+ }
382
+
383
+ /**
384
+ * runs before displaying the datapicker and updates it based on the current options
385
+ */
386
+ function updateDatepicker(el,obj) {
387
+
388
+ let changeOptions = {};
389
+
390
+ changeOptions.minDate = this._options.minDate;
391
+ changeOptions.maxDate = this._options.maxDate;
392
+
393
+ if(this._options.monthYearDropdowns){
394
+ //adds the month and year dropdowns
395
+ changeOptions.changeMonth = true;
396
+ changeOptions.changeYear = true;
397
+
398
+ //hide the month arrows
399
+ $(".ui-datepicker").addClass("date-picker-hide-arrows");
400
+
401
+ } else {
402
+ //removes the month and year dropdowns
403
+ changeOptions.changeMonth = false;
404
+ changeOptions.changeYear = false;
405
+
406
+ //displays the month arrows
407
+ $(".ui-datepicker").removeClass("date-picker-hide-arrows");
408
+ }
409
+
410
+ //set the date format to full or short
411
+ if(this._options.dateFormatShort){
412
+ changeOptions.dateFormat = "mm/yy";
413
+ } else {
414
+ changeOptions.dateFormat = "mm/dd/yy";
415
+ }
416
+
417
+ $(el).datepicker(
418
+ "change",
419
+ changeOptions
420
+ );
421
+
422
+
423
+ positionDatePicker.call(this, el);
424
+
425
+
426
+ $.datepicker._shouldFocusInput = function(){return false;};
427
+
428
+ }
429
+
430
+ /**
431
+ * Positions calendar
432
+ * @param {object} el HTML element
433
+ */
434
+ function positionDatePicker(el){
435
+ //need to add code to check if position has changed before recalculating
436
+ let winWidth = document.body.clientWidth;
437
+ let winHeight = window.innerHeight || document.documentElement.clientHeight;
438
+ let inputOffset = this._internalVars.node.getBoundingClientRect();
439
+ let containerOffset = this._internalVars.wrapper.getBoundingClientRect();
440
+ let containerOffsetLeft = containerOffset.left;
441
+ let containerWidth = this._internalVars.wrapper.offsetWidth;
442
+ let inputWidth = this._internalVars.node.offsetWidth + this._internalVars.node.nextElementSibling.offsetWidth;
443
+ let isRight = false;
444
+
445
+ if(winWidth >= this._internalVars.breakpoint){
446
+
447
+ $.datepicker._pos = $.datepicker._findPos(el);
448
+ //figure out correct horizontal direction
449
+ if( $.datepicker._pos[0] + this._internalVars.calendarWidth + inputWidth < containerWidth){
450
+ $.datepicker._pos[0] += (inputWidth + this._internalVars.marginLeft);
451
+ }else{
452
+ $.datepicker._pos[0] -= (this._internalVars.calendarWidth-inputWidth);
453
+ isRight = true;
454
+ }
455
+
456
+ //figure out correct vertical direction
457
+ if( inputOffset.top + this._internalVars.calendarWidth < winHeight ){
458
+ if(!isRight){
459
+ $.datepicker._pos[1] -= this._internalVars.marginTopBottomLeft;
460
+ } else {
461
+ $.datepicker._pos[1] += ((inputOffset.bottom - inputOffset.top) - this._internalVars.borderWidth) + this._internalVars.marginTopBottomLeft;
462
+ }
463
+ }else{
464
+ if(!isRight){
465
+ $.datepicker._pos[1] -= (this._internalVars.calendarWidth - this._internalVars.marginTopBottomRight);
466
+ } else {
467
+ $.datepicker._pos[1] -= (this._internalVars.calendarWidth + this._internalVars.marginTopBottomRight);
468
+ }
469
+ }
470
+ }
471
+ }
472
+
473
+ /**
474
+ * handles window resize
475
+ */
476
+ function handleResize(){
477
+ $( this._internalVars.node ).datepicker( "hide" );
478
+ }
479
+
480
+ function calendarPositionOverride(){
481
+ if(appState.mode == 'desktop'){
482
+ document.querySelector('#ui-datepicker-div').style.top = document.querySelector('.modal .hasDatepicker').offsetTop + 'px';
483
+ }
484
+ }
485
+
486
+
487
+ export default DatePicker;
@@ -0,0 +1,142 @@
1
+ import baseComponent from "../../src/baseComponent";
2
+
3
+ const validateSettings = [
4
+ {
5
+ setting: "content",
6
+ isRequired: true,
7
+ validate: "type",
8
+ possibleValues: ["string", "object"],
9
+ errorMessage: ["GDK DockedMessage : Content must be defined and set to a DOM selector or Node"]
10
+ },
11
+ {
12
+ setting: "autoHide",
13
+ isRequired: false,
14
+ validate: "type",
15
+ possibleValues: ["boolean"],
16
+ errorMessage: ["GDK DockedMessage : AutoHide must be defined as true or false"]
17
+ }
18
+ ];
19
+
20
+ class DockedMessage {
21
+ /**
22
+ * These are settings for the instantiation. Refer to the design kit section of this component for JS setting examples.
23
+ * @param {string|Object} content
24
+ * A reference to the docked real time message node
25
+ */
26
+ constructor(options) {
27
+ this._internalVars = {
28
+ node: null//used for current node
29
+ };
30
+
31
+ //options with defaults set
32
+ this._defaults = {
33
+ autoHide: false
34
+ };
35
+ // Create options by extending defaults with the passed in arugments
36
+ if (options && typeof options === "object") {
37
+ this._options = baseComponent.extendDefaults(this._defaults, options);
38
+ }
39
+ //if the required options are valid set up the environment
40
+ if (baseComponent.validateSettings(this._options, validateSettings)) {
41
+ this._internalVars.contentType = baseComponent.getContentType(this);
42
+ setLocalVars.call(this);
43
+ init.call(this);
44
+ }
45
+ }
46
+
47
+ //Public Methods
48
+
49
+ /**
50
+ * hides/shows the component
51
+ */
52
+ toggleDockedMessage() {
53
+ toggleComponent.call(this);
54
+ }
55
+
56
+ /**
57
+ * removes the node from the dom and any events attached
58
+ */
59
+ destroy(){
60
+ this._internalVars.node.parentNode.removeChild(this._internalVars.node);
61
+
62
+ //a little garbage collection
63
+ for (var variableKey in this){
64
+ if (this.hasOwnProperty(variableKey)){
65
+ delete this[variableKey];
66
+ }
67
+ }
68
+ }
69
+ }
70
+
71
+
72
+ function init() {
73
+ if (this._options.autoHide) {
74
+ if (this._options.autoHide === true) {
75
+ hideComponent.call(this);
76
+ } else {
77
+ showComponent.call(this);
78
+ }
79
+ } else {
80
+ showComponent.call(this);
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Toggle Component Function
86
+ * Displays and hides the component
87
+ */
88
+ function toggleComponent() {
89
+ if(this._internalVars.node.classList.contains('hidden')){
90
+ showComponent.call(this);
91
+ }
92
+ else {
93
+ hideComponent.call(this);
94
+ }
95
+ }
96
+
97
+ function showComponent() {
98
+ this._internalVars.node.classList.remove('hidden');
99
+ this._internalVars.main.classList.add("docked-message-on");
100
+ if (this._internalVars.toTopExists === true) {
101
+ this._internalVars.toTop.classList.add("docked-message-on");
102
+ }
103
+ if (!this._internalVars.footer) {
104
+ this._internalVars.footerPush.classList.add('no-footer');
105
+ }
106
+ else {
107
+ this._internalVars.footer.classList.add("docked-message-on");
108
+ }
109
+ }
110
+
111
+ function hideComponent() {
112
+ this._internalVars.node.classList.add('hidden');
113
+ this._internalVars.main.classList.remove("docked-message-on");
114
+ if (this._internalVars.toTopExists === true) {
115
+ this._internalVars.toTop.classList.remove("docked-message-on");
116
+ }
117
+ if (!this._internalVars.footer) {
118
+ this._internalVars.footerPush.classList.remove('no-footer');
119
+ }
120
+ else {
121
+ this._internalVars.footer.classList.remove("docked-message-on");
122
+ }
123
+ }
124
+
125
+ function setLocalVars() {
126
+ if (this._internalVars.contentType === 'string') {
127
+ this._internalVars.node = document.querySelector(this._options.content);
128
+ } else if (this._internalVars.contentType === 'domNode') {
129
+ this._internalVars.node = this._options.content;
130
+ }
131
+ this._internalVars.toTopExists = false;
132
+ if(document.querySelector(".to-top-arrow") !== null && document.querySelector(".to-top-arrow") !== 'undefined') {
133
+ this._internalVars.toTopExists = true;
134
+ this._internalVars.toTop = document.querySelector(".to-top-arrow");
135
+ }
136
+ this._internalVars.main = document.querySelector('#wrapper');
137
+ this._internalVars.footer = document.querySelector('#primary-footer');
138
+ this._internalVars.footerPush = document.querySelector('.footer-push');
139
+ }
140
+
141
+ export default DockedMessage;
142
+