geico-design-kit 7.0.0

Sign up to get free protection for your applications and to get access to all the features.

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
+