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,321 @@
1
+ import * as utils from '../../src/utils';
2
+ import baseComponent from '../../src/baseComponent';
3
+ import appState from '../../src/appState';
4
+
5
+ const validateSettings = [
6
+ {
7
+ setting: "content",
8
+ isRequired: true,
9
+ validate: "type",
10
+ possibleValues: ["string", "object"],
11
+ errorMessage: ["GDK CurrencyInput : Content must be defined and set to a DOM selector or Node"]
12
+ },
13
+ {
14
+ setting: "numType",
15
+ isRequired: false,
16
+ validate: "value",
17
+ possibleValues: ["whole", "decimal"],
18
+ errorMessage: ["GDK CurrencyInput : numType must be set to whole or decimal"]
19
+ },
20
+ {
21
+ setting: "onCompleteFormat",
22
+ isRequired: false,
23
+ validate: "type",
24
+ possibleValues: ["function"],
25
+ errorMessage: ["GDK CurrencyInput : onCompleteFormat must be a defined and set function"]
26
+ }
27
+ ];
28
+
29
+ /**
30
+ * CurrencyInput Class
31
+ */
32
+ class CurrencyInput {
33
+ /**
34
+ * These are settings for the instantiation. Refer to the design kit section of this component for JS setting examples.
35
+ * @param {string|Object} content
36
+ * A reference to the component node of currency input field
37
+ *
38
+ * @param {string} [numType="decimal"]
39
+ * A string representing the number type of the currency input field
40
+ *
41
+ * @param {function} [onCompleteFormat]
42
+ * A callback function fired on blur after formatting is complete in the input field
43
+ */
44
+ constructor(options) {
45
+
46
+ console.log('CurrencyInput initialized');
47
+
48
+ this._internalVars = {
49
+ node: null //used for current node
50
+ };
51
+
52
+ //options with defaults set
53
+ this._defaults = {
54
+ numType: 'decimal'
55
+ };
56
+
57
+ // Create options by extending defaults with the passed in arugments
58
+ if (options && typeof options === "object") {
59
+ this._options = baseComponent.extendDefaults(this._defaults, options);
60
+ }
61
+
62
+
63
+ //if the required options are valid set up the environment
64
+ if( baseComponent.validateSettings(this._options, validateSettings) ){
65
+ this._internalVars.contentType = baseComponent.getContentType(this);
66
+ setLocalVars.call(this);
67
+ setEvents.call(this);
68
+
69
+ if(this._internalVars.node.getAttribute('type') != 'text'){
70
+ this._internalVars.node.setAttribute('type', 'text');
71
+ }
72
+
73
+ if(!this._internalVars.node.hasAttribute('placeholder') && this._options.numType == 'decimal'){
74
+ this._internalVars.node.setAttribute('placeholder', '0.00');
75
+ }else if(!this._internalVars.node.hasAttribute('placeholder') && this._options.numType == 'whole'){
76
+ this._internalVars.node.setAttribute('placeholder', '0');
77
+ }
78
+
79
+ if(this._internalVars.inputValue!==''){
80
+ this._internalVars.inputValue = parsedValue(this._internalVars.inputValue, this._options.numType);
81
+ this._internalVars.inputValue = insertCommas(this._internalVars.inputValue.toString());
82
+ this._internalVars.node.setAttribute('value', this._internalVars.inputValue);
83
+ }
84
+ }
85
+ }
86
+
87
+ //Public Methods
88
+
89
+ /**
90
+ * removes the node from the dom and any events attached
91
+ */
92
+ destroy(){
93
+ removeEvents.call(this);
94
+ this._internalVars.node.parentNode.removeChild(this._internalVars.node);
95
+
96
+ //a little garbage collection
97
+ for (var variableKey in this){
98
+ if (this.hasOwnProperty(variableKey)){
99
+ delete this[variableKey];
100
+ }
101
+ }
102
+ }
103
+
104
+ /**
105
+ * getCurrencyInput()
106
+ * return a type float number from currency input field
107
+ * @returns {float}
108
+ */
109
+ getCurrencyInput(){
110
+ return parseFloat(parsedValue(this._internalVars.node.value, this._options.numType));
111
+ }
112
+ }
113
+
114
+ // Private Methods
115
+ /**
116
+ * setEvents()
117
+ * Sets all the events needed for the component
118
+ */
119
+ function setEvents() {
120
+ this._internalVars.node.addEventListener("keydown", this._internalVars.keyDownHandler);
121
+ this._internalVars.node.addEventListener("keyup", this._internalVars.keyUpHandler);
122
+ this._internalVars.node.addEventListener("keypress", this._internalVars.keyPressHandler);
123
+ this._internalVars.node.addEventListener("blur", this._internalVars.blurHandler);
124
+ }
125
+
126
+
127
+ /**
128
+ * removeEvents()
129
+ * removes all events from the component
130
+ */
131
+ function removeEvents() {
132
+ this._internalVars.node.removeEventListener("keydown", this._internalVars.keyDownHandler);
133
+ this._internalVars.node.removeEventListener("keyup", this._internalVars.keyUpHandler);
134
+ this._internalVars.node.removeEventListener("keypress", this._internalVars.keyPressHandler);
135
+ this._internalVars.node.removeEventListener("blur", this._internalVars.blurHandler);
136
+ }
137
+
138
+
139
+
140
+ function decimalExist(value){
141
+ if(value.indexOf('.') != -1){
142
+ return true;
143
+ }else{
144
+ return false;
145
+ }
146
+ }
147
+
148
+ function numOfCharAfterDecimal(value){
149
+ return value.toString().substr(value.toString().indexOf(".") + 1).length;
150
+ }
151
+
152
+ function isCharacterValid(e, type){
153
+ var keyCode = e.which || e.keyCode;
154
+ //numeric arrow key backspace and tab enter
155
+ if((keyCode >= 48 && keyCode <= 57) || (keyCode >= 37 && keyCode <=40) || (keyCode >= 8 && keyCode <= 9) || keyCode == 13 || (type == 'decimal' && keyCode == 190 || keyCode == 46)){
156
+ return true;
157
+ }else{
158
+ return false;
159
+ }
160
+ }
161
+
162
+ function parsedValue(value, type){
163
+ if(type == 'decimal'){
164
+ return parseFloat(removeCommas(value)).toFixed(2);
165
+ }else if(type == 'whole'){
166
+ return parseInt(removeCommas(value));
167
+ }
168
+ }
169
+
170
+ function insertCommas(value){
171
+ value = value.split('.');
172
+ if(value[1] !== undefined){
173
+ return value[0].replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,") + '.' + value[1];
174
+ }else{
175
+ return value[0].replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
176
+ }
177
+ }
178
+
179
+ function removeCommas(value){
180
+ return value.replace(/[^\d\.]/g,'');
181
+ }
182
+
183
+ function commaCount(value){
184
+ var counter = 0;
185
+ for(var i=0; i < value.length;i++){
186
+ if(value.charAt(i) == ','){
187
+ counter++;
188
+ }
189
+ }
190
+ return counter;
191
+ }
192
+
193
+ function isCaretBeforeDecimal(caretPos, decimalPos){
194
+ if(caretPos <= decimalPos){
195
+ return true;
196
+ }else if(caretPos > decimalPos){
197
+ return false;
198
+ }
199
+ }
200
+
201
+ function isSelected(){
202
+ if(document.getSelection().toString() !== ''){
203
+ return true;
204
+ }else if(document.getSelection().toString === ''){
205
+ return false;
206
+ }
207
+ }
208
+
209
+ //blur
210
+ function completeDisplay(){
211
+ this._internalVars.inputValue = this._internalVars.node.value;
212
+
213
+ if(this._internalVars.node.value !== ''){
214
+ this._internalVars.node.value = insertCommas(parsedValue(this._internalVars.inputValue, this._options.numType).toString());
215
+
216
+ if(this._options.onCompleteFormat){
217
+ this._options.onCompleteFormat(parsedValue(this._internalVars.node.value, this._options.numType));
218
+ }
219
+ }
220
+ }
221
+
222
+ //keydown-initial
223
+ function inputCharacters(e){
224
+ this._internalVars.inputValue = this._internalVars.node.value;
225
+ this._internalVars.caretLocation = this._internalVars.node.selectionStart;
226
+ this._internalVars.decimalLocation = this._internalVars.node.value.indexOf('.');
227
+
228
+ if(this._options.numType == 'decimal'){
229
+ if(decimalExist(this._internalVars.inputValue)){
230
+ this._internalVars.allowDecimal = false;
231
+ }else{
232
+ this._internalVars.allowDecimal = true;
233
+ }
234
+
235
+ if(decimalExist(this._internalVars.inputValue) && !isCaretBeforeDecimal(this._internalVars.caretLocation, this._internalVars.decimalLocation) && numOfCharAfterDecimal(this._internalVars.inputValue) == 2 && !isSelected()){
236
+ this._internalVars.allowCharacters = false;
237
+ this._internalVars.node.setAttribute('maxlength', this._internalVars.inputValue.length);
238
+ }
239
+ else if(decimalExist(this._internalVars.inputValue) && isCaretBeforeDecimal(this._internalVars.caretLocation, this._internalVars.decimalLocation) && numOfCharAfterDecimal(this._internalVars.inputValue) <= 2 || isSelected()){
240
+ this._internalVars.allowCharacters = true;
241
+ this._internalVars.node.removeAttribute('maxlength');
242
+ }
243
+ else{
244
+ this._internalVars.allowCharacters = true;
245
+ this._internalVars.node.removeAttribute('maxlength');
246
+ }
247
+ }else if(this._options.numType == 'whole'){
248
+ this._internalVars.allowDecimal = false;
249
+ }
250
+
251
+ }
252
+
253
+ //keyup-after
254
+ function inputAutoCommas(e){
255
+ var keyCode = e.which || e.keyCode;
256
+ this._internalVars.inputValue = this._internalVars.node.value;
257
+ this._internalVars.caretLocation = this._internalVars.node.selectionStart;
258
+ var beforeCommaCount = commaCount(this._internalVars.inputValue);
259
+
260
+ if(keyCode != 9 && keyCode != 16 && !(keyCode >= 37 && keyCode <=40)) {
261
+ this._internalVars.node.value = insertCommas(removeCommas(this._internalVars.inputValue));
262
+
263
+ this._internalVars.inputValue = this._internalVars.node.value;
264
+
265
+ if(this._options.numType == 'whole'){
266
+ this._internalVars.node.value = this._internalVars.inputValue.replace('.', '');
267
+ }
268
+
269
+ var afterCommaCount = commaCount(this._internalVars.inputValue);
270
+
271
+ if (beforeCommaCount != afterCommaCount) {
272
+ this._internalVars.node.selectionStart = this._internalVars.caretLocation + 1;
273
+ this._internalVars.node.selectionEnd = this._internalVars.caretLocation + 1;
274
+ if (keyCode == 8) {
275
+ this._internalVars.node.selectionStart = this._internalVars.caretLocation - 1;
276
+ this._internalVars.node.selectionEnd = this._internalVars.caretLocation - 1;
277
+ }
278
+ } else {
279
+ this._internalVars.node.selectionStart = this._internalVars.caretLocation;
280
+ this._internalVars.node.selectionEnd = this._internalVars.caretLocation;
281
+ }
282
+ }
283
+ }
284
+
285
+ //keypress
286
+ function preventInput(event){
287
+ if(!isCharacterValid(event, this._options.numType) || !this._internalVars.allowCharacters && event.which != 8){
288
+ event.preventDefault();
289
+ }
290
+ if(!this._internalVars.allowDecimal && event.which == 46){
291
+ event.preventDefault();
292
+ }
293
+ if((event.shiftKey) && event.which == 37 || event.which == 38){
294
+ event.preventDefault();
295
+ }
296
+ }
297
+
298
+ /**
299
+ * setLocalVars()
300
+ * set local vars to the ones passed in options
301
+ */
302
+ function setLocalVars() {
303
+ if(this._internalVars.contentType === 'string') {
304
+ this._internalVars.node = document.querySelector(this._options.content);
305
+ } else if (this._internalVars.contentType === 'domNode') {
306
+ this._internalVars.node = this._options.content;
307
+ }
308
+
309
+ this._internalVars.keyDownHandler = inputCharacters.bind(this);
310
+ this._internalVars.keyUpHandler = inputAutoCommas.bind(this);
311
+ this._internalVars.keyPressHandler = preventInput.bind(this);
312
+ this._internalVars.blurHandler = completeDisplay.bind(this);
313
+
314
+ this._internalVars.inputValue = this._internalVars.node.value;
315
+ this._internalVars.caretLocation = this._internalVars.node.selectionStart;
316
+ this._internalVars.decimalLocation = this._internalVars.node.value.indexOf('.');
317
+ this._internalVars.allowCharacters = true;
318
+ this._internalVars.allowDecimal = true;
319
+ }
320
+
321
+ export default CurrencyInput;