web-manager 3.2.53 → 3.2.56
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.
- package/index.js +1437 -1374
- package/package.json +3 -3
package/index.js
CHANGED
|
@@ -133,1603 +133,1666 @@ function Manager() {
|
|
|
133
133
|
store = self.storage();
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
136
|
+
/**
|
|
137
|
+
* METHODS
|
|
138
|
+
*/
|
|
139
|
+
Manager.prototype.get = function(path) {
|
|
140
|
+
var self = this;
|
|
141
141
|
|
|
142
|
-
|
|
143
|
-
|
|
142
|
+
return utilities.get(self, 'properties.' + path);
|
|
143
|
+
}
|
|
144
144
|
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
Manager.prototype.set = function(path, value) {
|
|
146
|
+
var self = this;
|
|
147
147
|
|
|
148
|
-
|
|
149
|
-
|
|
148
|
+
return utilities.set(self, 'properties.' + path, value);
|
|
149
|
+
}
|
|
150
150
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
// Setup click handler
|
|
155
|
-
document.addEventListener('click', function (event) {
|
|
156
|
-
var target = event.target;
|
|
157
|
-
|
|
158
|
-
// auth events
|
|
159
|
-
if (target.matches('.auth-signin-email-btn')) {
|
|
160
|
-
self.auth().signIn('email');
|
|
161
|
-
} else if (target.matches('.auth-signup-email-btn')) {
|
|
162
|
-
self.auth().signUp('email');
|
|
163
|
-
} else if (target.matches('.auth-signin-provider-btn')) {
|
|
164
|
-
self.auth().signIn(target.getAttribute('data-provider'));
|
|
165
|
-
} else if (target.matches('.auth-signup-provider-btn')) {
|
|
166
|
-
self.auth().signUp(target.getAttribute('data-provider'));
|
|
167
|
-
} else if (target.matches('.auth-signout-all-btn')) {
|
|
168
|
-
self.auth().signOut();
|
|
169
|
-
} else if (target.matches('.auth-forgot-email-btn')) {
|
|
170
|
-
self.auth().forgot();
|
|
171
|
-
} else if (target.matches('#prechat-btn')) {
|
|
172
|
-
load_chatsy(self, self.properties.options);
|
|
173
|
-
} else if (target.matches('.auth-subscribe-notifications-btn')) {
|
|
174
|
-
self.notifications().subscribe()
|
|
175
|
-
} else if (target.matches('.master-alert-close')) {
|
|
176
|
-
target.parentElement.setAttribute('hidden', true);
|
|
177
|
-
}
|
|
151
|
+
Manager.prototype.setEventListeners = function() {
|
|
152
|
+
var self = this;
|
|
178
153
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
154
|
+
// Setup click handler
|
|
155
|
+
document.addEventListener('click', function (event) {
|
|
156
|
+
var target = event.target;
|
|
157
|
+
|
|
158
|
+
// auth events
|
|
159
|
+
if (target.matches('.auth-signin-email-btn')) {
|
|
160
|
+
self.auth().signIn('email');
|
|
161
|
+
} else if (target.matches('.auth-signup-email-btn')) {
|
|
162
|
+
self.auth().signUp('email');
|
|
163
|
+
} else if (target.matches('.auth-signin-provider-btn')) {
|
|
164
|
+
self.auth().signIn(target.getAttribute('data-provider'));
|
|
165
|
+
} else if (target.matches('.auth-signup-provider-btn')) {
|
|
166
|
+
self.auth().signUp(target.getAttribute('data-provider'));
|
|
167
|
+
} else if (target.matches('.auth-signout-all-btn')) {
|
|
168
|
+
self.auth().signOut();
|
|
169
|
+
} else if (target.matches('.auth-forgot-email-btn')) {
|
|
170
|
+
self.auth().forgot();
|
|
171
|
+
} else if (target.matches('#prechat-btn')) {
|
|
172
|
+
load_chatsy(self, self.properties.options);
|
|
173
|
+
} else if (target.matches('.auth-subscribe-notifications-btn')) {
|
|
174
|
+
self.notifications().subscribe()
|
|
175
|
+
} else if (target.matches('.master-alert-close')) {
|
|
176
|
+
target.parentElement.setAttribute('hidden', true);
|
|
177
|
+
}
|
|
182
178
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}
|
|
179
|
+
// Autorequest
|
|
180
|
+
if (!self._notificationRequested && self.properties.options.pushNotifications.autoRequest) {
|
|
181
|
+
self._notificationRequested = true;
|
|
187
182
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
183
|
+
setTimeout(function () {
|
|
184
|
+
self.notifications().subscribe()
|
|
185
|
+
}, self.properties.options.pushNotifications.autoRequest * 1000);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
// Mouse leave event
|
|
191
|
+
document.addEventListener('mouseleave', function () {
|
|
192
|
+
showExitPopup(self);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
// Window blur event
|
|
196
|
+
window.addEventListener('blur', function () {
|
|
197
|
+
showExitPopup(self);
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
// Re-focus events
|
|
201
|
+
window.addEventListener('focus', function () {
|
|
202
|
+
refreshNewVersion(self);
|
|
203
|
+
});
|
|
204
|
+
window.addEventListener('online', function () {
|
|
205
|
+
refreshNewVersion(self);
|
|
206
|
+
});
|
|
207
|
+
setInterval(function () {
|
|
208
|
+
refreshNewVersion(self);
|
|
209
|
+
}, 1000 * 60 * 60); // Fetch new version every 1 hour
|
|
210
210
|
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
function _authStateHandler(self, user) {
|
|
214
|
+
// self.log('----authStateHandler', user);
|
|
215
|
+
if (!user || user.isAnonymous) {
|
|
216
|
+
return _authHandle_out(self);
|
|
211
217
|
}
|
|
212
218
|
|
|
213
|
-
|
|
214
|
-
// self.log('----authStateHandler', user);
|
|
215
|
-
if (!user || user.isAnonymous) {
|
|
216
|
-
return _authHandle_out(self);
|
|
217
|
-
}
|
|
219
|
+
_authHandle_in_normal(self, user);
|
|
218
220
|
|
|
219
|
-
|
|
221
|
+
self.notifications().subscribe().catch(function (e) {
|
|
222
|
+
console.error(e);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
220
225
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
226
|
+
// MOVED TO UJ - 12/15/23
|
|
227
|
+
// function _authHandle_in(self, user) {
|
|
228
|
+
// // self.log('_authHandle_in', user);
|
|
229
|
+
// // if (self.properties.page.status.didSignUp) {
|
|
230
|
+
// var done;
|
|
231
|
+
// var hoursSinceCreation = Math.abs(new Date() - new Date(+user.metadata.createdAt)) / 36e5;
|
|
232
|
+
|
|
233
|
+
// function _done() {
|
|
234
|
+
// if (!done) {
|
|
235
|
+
// done = true;
|
|
236
|
+
// store.set('didSignUp', true)
|
|
237
|
+
// _authHandle_in_normal(self, user);
|
|
238
|
+
// }
|
|
239
|
+
// }
|
|
240
|
+
|
|
241
|
+
// if (!store.get('didSignUp') && hoursSinceCreation < 0.5) {
|
|
242
|
+
// user.getIdToken(false)
|
|
243
|
+
// .then(function(token) {
|
|
244
|
+
|
|
245
|
+
// fetch('https://us-central1-' + self.properties.options.libraries.firebase_app.config.projectId + '.cloudfunctions.net/bm_api', {
|
|
246
|
+
// method: 'POST',
|
|
247
|
+
// body: JSON.stringify({
|
|
248
|
+
// authenticationToken: token,
|
|
249
|
+
// command: 'user:sign-up',
|
|
250
|
+
// payload: {
|
|
251
|
+
// newsletterSignUp: select('.auth-newsletter-input').getValue(),
|
|
252
|
+
// // affiliateCode: store.get('auth.affiliateCode', ''),
|
|
253
|
+
// affiliateCode: store.get('affiliateCode', ''),
|
|
254
|
+
// },
|
|
255
|
+
// }),
|
|
256
|
+
// })
|
|
257
|
+
// .catch(function () {})
|
|
258
|
+
// .finally(_done);
|
|
259
|
+
|
|
260
|
+
// setTimeout(function () {
|
|
261
|
+
// _done()
|
|
262
|
+
// }, 5000);
|
|
263
|
+
|
|
264
|
+
// })
|
|
265
|
+
// .catch(function(error) {
|
|
266
|
+
// console.error(error);
|
|
267
|
+
// _done();
|
|
268
|
+
// });
|
|
269
|
+
// } else {
|
|
270
|
+
// _done();
|
|
271
|
+
// }
|
|
272
|
+
// }
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
function _authHandle_in_normal(self, user) {
|
|
277
|
+
var returnUrl = self.properties.page.queryString.get('auth_redirect');
|
|
278
|
+
|
|
279
|
+
// Check if we have a return URL and it is valid
|
|
280
|
+
if (returnUrl && self.isValidRedirectUrl(returnUrl)) {
|
|
281
|
+
window.location.href = decodeURIComponent(returnUrl);
|
|
282
|
+
return;
|
|
224
283
|
}
|
|
225
284
|
|
|
226
|
-
//
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
// var done;
|
|
231
|
-
// var hoursSinceCreation = Math.abs(new Date() - new Date(+user.metadata.createdAt)) / 36e5;
|
|
232
|
-
|
|
233
|
-
// function _done() {
|
|
234
|
-
// if (!done) {
|
|
235
|
-
// done = true;
|
|
236
|
-
// store.set('didSignUp', true)
|
|
237
|
-
// _authHandle_in_normal(self, user);
|
|
238
|
-
// }
|
|
239
|
-
// }
|
|
240
|
-
|
|
241
|
-
// if (!store.get('didSignUp') && hoursSinceCreation < 0.5) {
|
|
242
|
-
// user.getIdToken(false)
|
|
243
|
-
// .then(function(token) {
|
|
244
|
-
|
|
245
|
-
// fetch('https://us-central1-' + self.properties.options.libraries.firebase_app.config.projectId + '.cloudfunctions.net/bm_api', {
|
|
246
|
-
// method: 'POST',
|
|
247
|
-
// body: JSON.stringify({
|
|
248
|
-
// authenticationToken: token,
|
|
249
|
-
// command: 'user:sign-up',
|
|
250
|
-
// payload: {
|
|
251
|
-
// newsletterSignUp: select('.auth-newsletter-input').getValue(),
|
|
252
|
-
// // affiliateCode: store.get('auth.affiliateCode', ''),
|
|
253
|
-
// affiliateCode: store.get('affiliateCode', ''),
|
|
254
|
-
// },
|
|
255
|
-
// }),
|
|
256
|
-
// })
|
|
257
|
-
// .catch(function () {})
|
|
258
|
-
// .finally(_done);
|
|
259
|
-
|
|
260
|
-
// setTimeout(function () {
|
|
261
|
-
// _done()
|
|
262
|
-
// }, 5000);
|
|
263
|
-
|
|
264
|
-
// })
|
|
265
|
-
// .catch(function(error) {
|
|
266
|
-
// console.error(error);
|
|
267
|
-
// _done();
|
|
268
|
-
// });
|
|
269
|
-
// } else {
|
|
270
|
-
// _done();
|
|
271
|
-
// }
|
|
272
|
-
// }
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
function _authHandle_in_normal(self, user) {
|
|
277
|
-
var returnUrl = self.properties.page.queryString.get('auth_redirect');
|
|
278
|
-
if (returnUrl && self.isValidRedirectUrl(returnUrl)) {
|
|
279
|
-
window.location.href = decodeURIComponent(returnUrl);
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
if (self.properties.options.auth.state === 'prohibited') {
|
|
283
|
-
window.location.href = self.properties.options.auth.sends.prohibited;
|
|
284
|
-
return;
|
|
285
|
-
}
|
|
286
|
-
select('.auth-signedin-true-element').show();
|
|
287
|
-
select('.auth-signedin-false-element').hide();
|
|
288
|
-
select('.auth-email-element').each(function(e, i) {
|
|
289
|
-
if (e.tagName === 'INPUT') {
|
|
290
|
-
select(e).setValue(user.email)
|
|
291
|
-
} else {
|
|
292
|
-
select(e).setInnerHTML(user.email)
|
|
293
|
-
}
|
|
294
|
-
});
|
|
295
|
-
select('.auth-uid-element').each(function(e, i) {
|
|
296
|
-
if (e.tagName === 'INPUT') {
|
|
297
|
-
select(e).setValue(user.uid)
|
|
298
|
-
} else {
|
|
299
|
-
select(e).setInnerHTML(user.uid)
|
|
300
|
-
}
|
|
301
|
-
});
|
|
285
|
+
// If auth is prohibited, redirect to the prohibited page
|
|
286
|
+
if (self.properties.options.auth.state === 'prohibited') {
|
|
287
|
+
window.location.href = self.properties.options.auth.sends.prohibited;
|
|
288
|
+
return;
|
|
302
289
|
}
|
|
303
290
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
291
|
+
// Handle visibility
|
|
292
|
+
// select('.auth-signedin-true-element').show();
|
|
293
|
+
// select('.auth-signedin-false-element').hide();
|
|
294
|
+
select('.auth-signedin-true-element').each(function ($el) {
|
|
295
|
+
var $el2 = select($el);
|
|
296
|
+
$el2.show();
|
|
297
|
+
|
|
298
|
+
console.warn('DEPRECATED: auth-signedin-true-element', $el);
|
|
299
|
+
});
|
|
300
|
+
select('.auth-signedin-false-element').each(function ($el) {
|
|
301
|
+
var $el2 = select($el);
|
|
302
|
+
$el2.hide();
|
|
303
|
+
|
|
304
|
+
console.warn('DEPRECATED: auth-signedin-false-element', $el);
|
|
305
|
+
});
|
|
306
|
+
_authHandleState(self, 'signed-in');
|
|
307
|
+
|
|
308
|
+
// Set user email
|
|
309
|
+
select('.auth-email-element').each(function(e, i) {
|
|
310
|
+
if (e.tagName === 'INPUT') {
|
|
311
|
+
select(e).setValue(user.email)
|
|
312
|
+
} else {
|
|
313
|
+
select(e).setInnerHTML(user.email)
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
// Set user id
|
|
318
|
+
select('.auth-uid-element').each(function(e, i) {
|
|
319
|
+
if (e.tagName === 'INPUT') {
|
|
320
|
+
select(e).setValue(user.uid)
|
|
321
|
+
} else {
|
|
322
|
+
select(e).setInnerHTML(user.uid)
|
|
311
323
|
}
|
|
324
|
+
});
|
|
325
|
+
}
|
|
312
326
|
|
|
313
|
-
|
|
314
|
-
|
|
327
|
+
function _authHandle_out(self) {
|
|
328
|
+
// If auth is required, redirect to the required page
|
|
329
|
+
if (self.properties.options.auth.state === 'required') {
|
|
330
|
+
var sendSplit = self.properties.options.auth.sends.required.split('?');
|
|
331
|
+
var newQuery = new URLSearchParams(sendSplit[1]);
|
|
332
|
+
newQuery.set('auth_redirect', window.location.href);
|
|
333
|
+
window.location.href = sendSplit[0] + '?' + newQuery.toString();
|
|
334
|
+
return;
|
|
315
335
|
}
|
|
316
336
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
337
|
+
// select('.auth-signedin-true-element').hide();
|
|
338
|
+
// select('.auth-signedin-false-element').show();
|
|
339
|
+
select('.auth-signedin-true-element').each(function ($el) {
|
|
340
|
+
var $el2 = select($el);
|
|
341
|
+
$el2.hide();
|
|
320
342
|
|
|
321
|
-
|
|
322
|
-
|
|
343
|
+
console.warn('DEPRECATED: auth-signedin-true-element', $el);
|
|
344
|
+
});
|
|
345
|
+
select('.auth-signedin-false-element').each(function ($el) {
|
|
346
|
+
var $el2 = select($el);
|
|
347
|
+
$el2.show();
|
|
323
348
|
|
|
324
|
-
|
|
349
|
+
console.warn('DEPRECATED: auth-signedin-false-element', $el);
|
|
350
|
+
});
|
|
325
351
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
// Performance
|
|
332
|
-
self.performance().mark('manager_ready');
|
|
352
|
+
_authHandleState(self, 'signed-out');
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
function _authHandleState(self, state) {
|
|
356
|
+
var $stateAll = select('.auth-state-listener');
|
|
333
357
|
|
|
334
|
-
|
|
358
|
+
// Loop through all elements with the class and hide first
|
|
359
|
+
$stateAll
|
|
360
|
+
.each(function ($el) {
|
|
361
|
+
$el.setAttribute('hidden', true);
|
|
362
|
+
})
|
|
363
|
+
|
|
364
|
+
// Loop through all elements with the class and check the data-state attribute
|
|
365
|
+
$stateAll
|
|
366
|
+
.each(function ($el) {
|
|
367
|
+
var s = $el.getAttribute('data-state');
|
|
368
|
+
|
|
369
|
+
// If we are in the correct status
|
|
370
|
+
if (s !== state) {
|
|
371
|
+
// Hide the element
|
|
372
|
+
return $el.setAttribute('hidden', true);
|
|
335
373
|
}
|
|
374
|
+
|
|
375
|
+
// Show the element
|
|
376
|
+
$el.removeAttribute('hidden');
|
|
377
|
+
})
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
Manager.prototype.ready = function(fn, options) {
|
|
381
|
+
var self = this;
|
|
382
|
+
var waitFor = true;
|
|
383
|
+
|
|
384
|
+
options = options || {};
|
|
385
|
+
options.interval = options.interval || 100;
|
|
386
|
+
|
|
387
|
+
waitFor = !options.waitFor || (options.waitFor && options.waitFor())
|
|
388
|
+
|
|
389
|
+
if (!utilities.get(this, 'properties.page.status.ready', false) || !waitFor) {
|
|
390
|
+
setTimeout(function () {
|
|
391
|
+
self.ready(fn, options);
|
|
392
|
+
}, options.interval);
|
|
393
|
+
} else {
|
|
394
|
+
// Performance
|
|
395
|
+
self.performance().mark('manager_ready');
|
|
396
|
+
|
|
397
|
+
return fn();
|
|
336
398
|
}
|
|
399
|
+
}
|
|
337
400
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
401
|
+
Manager.prototype.serviceWorker = function() {
|
|
402
|
+
var self = this;
|
|
403
|
+
var SWAvailable = 'serviceWorker' in navigator;
|
|
341
404
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
405
|
+
if (SWAvailable) {
|
|
406
|
+
try {
|
|
407
|
+
var swref = self.properties.references.serviceWorker.active || navigator.serviceWorker.controller;
|
|
408
|
+
} catch (e) {}
|
|
409
|
+
}
|
|
347
410
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
try {
|
|
355
|
-
var messageChannel = new MessageChannel();
|
|
356
|
-
messageChannel.port1.onmessage = function(event) {
|
|
357
|
-
if (!event.data.error && args[1]) {
|
|
358
|
-
args[1](event.data);
|
|
359
|
-
}
|
|
360
|
-
};
|
|
361
|
-
// navigator.serviceWorker.controller.postMessage(args[0], [messageChannel.port2]);
|
|
362
|
-
swref.postMessage(args[0], [messageChannel.port2]);
|
|
363
|
-
} catch (e) {
|
|
364
|
-
console.error(e);
|
|
365
|
-
}
|
|
411
|
+
return {
|
|
412
|
+
postMessage: function() {
|
|
413
|
+
// var args = getArgs(arguments);
|
|
414
|
+
var args = arguments;
|
|
415
|
+
if (!SWAvailable) {return};
|
|
366
416
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
//
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
// }
|
|
379
|
-
// };
|
|
380
|
-
// navigator.serviceWorker.controller.postMessage(args[0], [messageChannel.port2])
|
|
381
|
-
// }
|
|
417
|
+
try {
|
|
418
|
+
var messageChannel = new MessageChannel();
|
|
419
|
+
messageChannel.port1.onmessage = function(event) {
|
|
420
|
+
if (!event.data.error && args[1]) {
|
|
421
|
+
args[1](event.data);
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
// navigator.serviceWorker.controller.postMessage(args[0], [messageChannel.port2]);
|
|
425
|
+
swref.postMessage(args[0], [messageChannel.port2]);
|
|
426
|
+
} catch (e) {
|
|
427
|
+
console.error(e);
|
|
382
428
|
}
|
|
429
|
+
|
|
430
|
+
// if (!navigator.serviceWorker.controller) {
|
|
431
|
+
// self.log('postMessage...');
|
|
432
|
+
// setTimeout(function () {
|
|
433
|
+
// self.serviceWorker().postMessage(args[0], args[1]);
|
|
434
|
+
// }, 100);
|
|
435
|
+
// } else {
|
|
436
|
+
// // post message: https://stackoverflow.com/questions/30177782/chrome-serviceworker-postmessage
|
|
437
|
+
// var messageChannel = new MessageChannel();
|
|
438
|
+
// messageChannel.port1.onmessage = function(event) {
|
|
439
|
+
// if (!event.data.error && args[1]) {
|
|
440
|
+
// args[1](event.data);
|
|
441
|
+
// }
|
|
442
|
+
// };
|
|
443
|
+
// navigator.serviceWorker.controller.postMessage(args[0], [messageChannel.port2])
|
|
444
|
+
// }
|
|
383
445
|
}
|
|
384
446
|
}
|
|
447
|
+
}
|
|
385
448
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
449
|
+
// init with polyfills
|
|
450
|
+
Manager.prototype.init = function(configuration, callback) {
|
|
451
|
+
var self = this;
|
|
452
|
+
var status = self.properties.page.status;
|
|
453
|
+
|
|
454
|
+
if (
|
|
455
|
+
!status.ready
|
|
456
|
+
&& !status.initilizing
|
|
457
|
+
) {
|
|
458
|
+
|
|
459
|
+
// Performance
|
|
460
|
+
self.performance().mark('manager_init');
|
|
461
|
+
|
|
462
|
+
// set initializing to true
|
|
463
|
+
self.properties.page.status.initializing = true;
|
|
464
|
+
|
|
465
|
+
// set other properties
|
|
466
|
+
self.properties.meta.environment = window.location.host.match(/:40|ngrok/)
|
|
467
|
+
? 'development'
|
|
468
|
+
: 'production';
|
|
469
|
+
|
|
470
|
+
// Load polyfills
|
|
471
|
+
init_loadPolyfills(self, configuration, function() {
|
|
472
|
+
self.properties.page.status.initializing = false;
|
|
473
|
+
// self.properties.genericPromise = new Promise(resolve => { resolve() });
|
|
474
|
+
var options_defaults = {
|
|
475
|
+
// debug: {
|
|
476
|
+
// environment: self.properties.meta.environment,
|
|
477
|
+
// },
|
|
478
|
+
// queryString: {
|
|
479
|
+
// saveToStorage: false
|
|
480
|
+
// },
|
|
481
|
+
pushNotifications: {
|
|
482
|
+
autoRequest: 60, // how long to wait before auto ask, 0 to disable
|
|
483
|
+
},
|
|
484
|
+
serviceWorker: {
|
|
485
|
+
path: '',
|
|
486
|
+
},
|
|
487
|
+
initChecks: {
|
|
488
|
+
features: [], // an array of javascript and dom features to check for (NIY)
|
|
489
|
+
},
|
|
490
|
+
auth: {
|
|
491
|
+
state: 'default', // required, prohibited, default
|
|
492
|
+
sends: {
|
|
493
|
+
required: '/signup',
|
|
494
|
+
prohibited: '/',
|
|
426
495
|
},
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
496
|
+
},
|
|
497
|
+
exitPopup: {
|
|
498
|
+
enabled: true,
|
|
499
|
+
config: {
|
|
500
|
+
timeout: 1000 * 60 * 60 * 4,
|
|
501
|
+
handler: null,
|
|
502
|
+
title: 'Special Offer!',
|
|
503
|
+
message: 'Get 15% off your purchase of our <strong>Premium plans</strong>. <br><br> Get access to all features and unlimited usage.',
|
|
504
|
+
okButton: {
|
|
505
|
+
text: 'Claim 15% Discount',
|
|
506
|
+
link: '/pricing?utm_source=exit-popup&utm_medium=popup&utm_campaign={pathname}',
|
|
432
507
|
},
|
|
433
508
|
},
|
|
434
|
-
|
|
509
|
+
},
|
|
510
|
+
libraries: {
|
|
511
|
+
firebase_app: {
|
|
435
512
|
enabled: true,
|
|
513
|
+
load: false,
|
|
436
514
|
config: {
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
515
|
+
apiKey: '',
|
|
516
|
+
authDomain: '',
|
|
517
|
+
databaseURL: '',
|
|
518
|
+
projectId: '',
|
|
519
|
+
storageBucket: '',
|
|
520
|
+
messagingSenderId: '',
|
|
521
|
+
appId: '',
|
|
522
|
+
measurementId: '',
|
|
445
523
|
},
|
|
446
524
|
},
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
load: false,
|
|
465
|
-
},
|
|
466
|
-
firebase_firestore: {
|
|
467
|
-
enabled: true,
|
|
468
|
-
load: false,
|
|
469
|
-
},
|
|
470
|
-
firebase_messaging: {
|
|
471
|
-
enabled: true,
|
|
472
|
-
load: false,
|
|
473
|
-
},
|
|
474
|
-
firebase_appCheck: {
|
|
475
|
-
enabled: true,
|
|
476
|
-
load: false,
|
|
477
|
-
config: {
|
|
478
|
-
siteKey: '',
|
|
479
|
-
},
|
|
480
|
-
},
|
|
481
|
-
lazysizes: {
|
|
482
|
-
enabled: true,
|
|
525
|
+
firebase_auth: {
|
|
526
|
+
enabled: true,
|
|
527
|
+
load: false,
|
|
528
|
+
},
|
|
529
|
+
firebase_firestore: {
|
|
530
|
+
enabled: true,
|
|
531
|
+
load: false,
|
|
532
|
+
},
|
|
533
|
+
firebase_messaging: {
|
|
534
|
+
enabled: true,
|
|
535
|
+
load: false,
|
|
536
|
+
},
|
|
537
|
+
firebase_appCheck: {
|
|
538
|
+
enabled: true,
|
|
539
|
+
load: false,
|
|
540
|
+
config: {
|
|
541
|
+
siteKey: '',
|
|
483
542
|
},
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
543
|
+
},
|
|
544
|
+
lazysizes: {
|
|
545
|
+
enabled: true,
|
|
546
|
+
},
|
|
547
|
+
sentry: {
|
|
548
|
+
enabled: true,
|
|
549
|
+
config: {
|
|
550
|
+
dsn: '',
|
|
551
|
+
release: '',
|
|
552
|
+
replaysSessionSampleRate: 0.1,
|
|
553
|
+
replaysOnErrorSampleRate: 1.0,
|
|
492
554
|
},
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
555
|
+
},
|
|
556
|
+
chatsy: {
|
|
557
|
+
enabled: true,
|
|
558
|
+
config: {
|
|
559
|
+
accountId: '',
|
|
560
|
+
chatId: '',
|
|
561
|
+
settings: {
|
|
562
|
+
openChatButton: {
|
|
563
|
+
background: '#237afc',
|
|
564
|
+
text: '#fff',
|
|
503
565
|
},
|
|
504
566
|
},
|
|
505
567
|
},
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
button: {
|
|
515
|
-
background: '#fff',
|
|
516
|
-
text: '#237afc',
|
|
517
|
-
},
|
|
568
|
+
},
|
|
569
|
+
cookieconsent: {
|
|
570
|
+
enabled: true,
|
|
571
|
+
config: {
|
|
572
|
+
palette: {
|
|
573
|
+
popup: {
|
|
574
|
+
background: '#237afc',
|
|
575
|
+
text: '#fff',
|
|
518
576
|
},
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
showLink: false,
|
|
523
|
-
content: {
|
|
524
|
-
message: 'We use cookies to ensure you get the best experience on our website. By continuing to use the site, you agree to our<a href="/terms/" class="cc-link" style="padding-right: 0">terms of service</a>.',
|
|
525
|
-
// dismiss: 'Got it!',
|
|
526
|
-
dismiss: 'I understand',
|
|
577
|
+
button: {
|
|
578
|
+
background: '#fff',
|
|
579
|
+
text: '#237afc',
|
|
527
580
|
},
|
|
528
581
|
},
|
|
582
|
+
theme: 'classic',
|
|
583
|
+
position: 'bottom-left',
|
|
584
|
+
type: '',
|
|
585
|
+
showLink: false,
|
|
586
|
+
content: {
|
|
587
|
+
message: 'We use cookies to ensure you get the best experience on our website. By continuing to use the site, you agree to our<a href="/terms" class="cc-link" style="padding-right: 0">terms of service</a>.',
|
|
588
|
+
// dismiss: 'Got it!',
|
|
589
|
+
dismiss: 'I understand',
|
|
590
|
+
},
|
|
529
591
|
},
|
|
530
592
|
},
|
|
531
|
-
}
|
|
593
|
+
},
|
|
594
|
+
};
|
|
532
595
|
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
596
|
+
var options_user = {};
|
|
597
|
+
function eachRecursive(obj, parent) {
|
|
598
|
+
parent = (!parent) ? '' : parent;
|
|
536
599
|
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
}
|
|
600
|
+
for (var key in obj) {
|
|
601
|
+
if (typeof obj[key] === 'object' && obj[key] !== null && !Array.isArray(obj[key])) {
|
|
602
|
+
eachRecursive(obj[key], parent + key + '.');
|
|
603
|
+
} else {
|
|
604
|
+
utilities.set(options_user, parent + key, utilities.get(options_defaults, parent + key) );
|
|
605
|
+
var t_globalItem = utilities.get(configuration, 'global.settings.' + parent + key, undefined);
|
|
606
|
+
var t_pageItem = utilities.get(configuration, 'page.settings.' + parent + key, undefined);
|
|
607
|
+
if (typeof t_globalItem !== 'undefined') {
|
|
608
|
+
utilities.set(options_user, parent + key, t_globalItem);
|
|
609
|
+
}
|
|
610
|
+
if (typeof t_pageItem !== 'undefined') {
|
|
611
|
+
utilities.set(options_user, parent + key, t_pageItem);
|
|
550
612
|
}
|
|
551
613
|
}
|
|
552
614
|
}
|
|
615
|
+
}
|
|
553
616
|
|
|
554
|
-
|
|
555
|
-
|
|
617
|
+
eachRecursive(options_defaults);
|
|
618
|
+
self.properties.options = options_user;
|
|
556
619
|
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
620
|
+
// set non-option properties
|
|
621
|
+
self.properties.global.app = configuration.global.app;
|
|
622
|
+
self.properties.global.version = configuration.global.version;
|
|
623
|
+
self.properties.global.url = configuration.global.url;
|
|
624
|
+
self.properties.global.buildTime = new Date((+configuration.global.buildTime * 1000) || new Date())
|
|
625
|
+
self.properties.global.cacheBreaker = configuration.global.cacheBreaker;
|
|
563
626
|
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
627
|
+
self.properties.global.brand = configuration.global.brand;
|
|
628
|
+
self.properties.global.contact = configuration.global.contact;
|
|
629
|
+
self.properties.global.download = configuration.global.download;
|
|
630
|
+
self.properties.global.extension = configuration.global.extension;
|
|
568
631
|
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
632
|
+
self.properties.global.validRedirectHosts = configuration.global.validRedirectHosts;
|
|
633
|
+
self.properties.meta.environment = utilities.get(configuration, 'global.settings.debug.environment', self.properties.meta.environment);
|
|
634
|
+
self.properties.page.queryString = new URLSearchParams(window.location.search);
|
|
572
635
|
|
|
573
|
-
|
|
574
|
-
|
|
636
|
+
var pagePathname = window.location.pathname;
|
|
637
|
+
var redirect = false;
|
|
575
638
|
|
|
576
|
-
|
|
577
|
-
|
|
639
|
+
var previousUTMTimestamp = new Date(store.get('utm.timestamp', 0));
|
|
640
|
+
var UTMDifferenceInHours = (new Date() - previousUTMTimestamp) / 36e5;
|
|
578
641
|
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
642
|
+
self.properties.page.queryString.forEach(function (value, key) {
|
|
643
|
+
if (key.startsWith('utm_') && UTMDifferenceInHours > 72) {
|
|
644
|
+
store.set('utm.tags.' + key, value);
|
|
645
|
+
store.set('utm.timestamp', new Date().toISOString());
|
|
646
|
+
}
|
|
584
647
|
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
648
|
+
if (key === 'aff') {
|
|
649
|
+
store.set('affiliateCode', value);
|
|
650
|
+
}
|
|
588
651
|
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
652
|
+
if (key === 'redirect') {
|
|
653
|
+
// redirect = decodeURIComponent(value) // 9/22/23 - Removed this and replace without the decode
|
|
654
|
+
redirect = value;
|
|
655
|
+
}
|
|
656
|
+
})
|
|
657
|
+
|
|
658
|
+
if (redirect && self.isValidRedirectUrl(redirect)) {
|
|
659
|
+
return window.location.href = redirect;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
if (pagePathname.match(/\/(authentication-required|authentication-success|authentication-token|forgot|oauth2|signin|signout|signup)/)) {
|
|
663
|
+
import('./helpers/auth-pages.js')
|
|
664
|
+
.then(function(mod) {
|
|
665
|
+
mod.default()
|
|
593
666
|
})
|
|
667
|
+
}
|
|
594
668
|
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
669
|
+
// load critical libraries
|
|
670
|
+
function postCrucial() {
|
|
671
|
+
// console.log('HERE 5');
|
|
598
672
|
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
.
|
|
602
|
-
|
|
673
|
+
// handle firebase user
|
|
674
|
+
if (typeof firebase !== 'undefined' && firebase.auth) {
|
|
675
|
+
firebase.auth().onAuthStateChanged(function(user) {
|
|
676
|
+
self.properties.page.status.authReady = true;
|
|
677
|
+
self.properties.auth.user = user || false;
|
|
678
|
+
_authStateHandler(self, user);
|
|
603
679
|
})
|
|
604
680
|
}
|
|
605
681
|
|
|
606
|
-
//
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
if (
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
self.properties.auth.user = user || false;
|
|
615
|
-
_authStateHandler(self, user);
|
|
616
|
-
})
|
|
682
|
+
// setup
|
|
683
|
+
self.setEventListeners();
|
|
684
|
+
|
|
685
|
+
// display outdated if it is
|
|
686
|
+
try {
|
|
687
|
+
if (!self.properties.page.isSupportedBrowser) {
|
|
688
|
+
var box = document.getElementsByClassName('master-alert-outdated')[0];
|
|
689
|
+
box.removeAttribute('hidden');
|
|
617
690
|
}
|
|
691
|
+
} catch (e) {
|
|
692
|
+
console.error(e);
|
|
693
|
+
}
|
|
618
694
|
|
|
619
|
-
|
|
620
|
-
|
|
695
|
+
// run the init callback
|
|
696
|
+
self.properties.page.status.ready = true;
|
|
621
697
|
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
698
|
+
try {
|
|
699
|
+
callback();
|
|
700
|
+
} catch (e) {
|
|
701
|
+
console.error(e);
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
var chatsyOps = options_user.libraries.chatsy;
|
|
705
|
+
if (chatsyOps.enabled) {
|
|
706
|
+
var $preChatBtn = select('#prechat-btn');
|
|
707
|
+
var $preChatBtnSvg = select('#prechat-btn svg path');
|
|
708
|
+
var openChatButtonSettings = chatsyOps.config.settings.openChatButton;
|
|
631
709
|
|
|
632
|
-
|
|
633
|
-
|
|
710
|
+
$preChatBtn.css({
|
|
711
|
+
background: openChatButtonSettings.background,
|
|
712
|
+
})
|
|
713
|
+
.show();
|
|
714
|
+
|
|
715
|
+
$preChatBtnSvg.each(function ($el) {
|
|
716
|
+
$el.setAttribute('fill', openChatButtonSettings.text)
|
|
717
|
+
})
|
|
634
718
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
console.error(e);
|
|
719
|
+
window.chatsy = {};
|
|
720
|
+
window.chatsy.open = function() {
|
|
721
|
+
$preChatBtn.get(0).click();
|
|
639
722
|
}
|
|
723
|
+
}
|
|
640
724
|
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
var openChatButtonSettings = chatsyOps.config.settings.openChatButton;
|
|
725
|
+
// load non-critical libraries
|
|
726
|
+
load_lazysizes(self, options_user);
|
|
727
|
+
load_cookieconsent(self, options_user);
|
|
728
|
+
subscriptionManager(self, options_user);
|
|
646
729
|
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
.show();
|
|
730
|
+
// self.log('Manager', self);
|
|
731
|
+
return;
|
|
732
|
+
}
|
|
651
733
|
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
734
|
+
Promise.all([
|
|
735
|
+
load_sentry(self, options_user),
|
|
736
|
+
load_firebase(self, options_user),
|
|
737
|
+
])
|
|
738
|
+
.then(function() {
|
|
739
|
+
postCrucial();
|
|
740
|
+
})
|
|
741
|
+
.catch(function (e) {
|
|
742
|
+
console.error('Lib error', e);
|
|
743
|
+
})
|
|
744
|
+
})
|
|
655
745
|
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
}
|
|
660
|
-
}
|
|
746
|
+
} else {
|
|
747
|
+
return;
|
|
748
|
+
}
|
|
661
749
|
|
|
662
|
-
|
|
663
|
-
load_lazysizes(self, options_user);
|
|
664
|
-
load_cookieconsent(self, options_user);
|
|
665
|
-
subscriptionManager(self, options_user);
|
|
750
|
+
}
|
|
666
751
|
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
752
|
+
Manager.prototype.sentry = function() {
|
|
753
|
+
// var en = (Sentry && Sentry)
|
|
754
|
+
return {
|
|
755
|
+
configureScope: function (cb) {
|
|
756
|
+
try {
|
|
757
|
+
Sentry.configureScope(function (scope) {
|
|
758
|
+
cb(scope);
|
|
759
|
+
})
|
|
760
|
+
} catch (e) {
|
|
670
761
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
})
|
|
678
|
-
.catch(function (e) {
|
|
679
|
-
console.error('Lib error', e);
|
|
680
|
-
})
|
|
681
|
-
})
|
|
762
|
+
}
|
|
763
|
+
},
|
|
764
|
+
captureException: function (e) {
|
|
765
|
+
try {
|
|
766
|
+
Sentry.captureException(e)
|
|
767
|
+
} catch (e) {
|
|
682
768
|
|
|
683
|
-
|
|
684
|
-
return;
|
|
769
|
+
}
|
|
685
770
|
}
|
|
771
|
+
};
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
Manager.prototype.auth = function() {
|
|
775
|
+
var self = this;
|
|
776
|
+
var firebaseActive = typeof firebase !== 'undefined';
|
|
777
|
+
var $error = select('.auth-error-message-element');
|
|
686
778
|
|
|
779
|
+
function _displayError(msg) {
|
|
780
|
+
console.error(msg);
|
|
781
|
+
$error.show().setInnerHTML(msg);
|
|
782
|
+
}
|
|
783
|
+
function _preDisplayError() {
|
|
784
|
+
$error.hide().setInnerHTML('');
|
|
687
785
|
}
|
|
688
786
|
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
787
|
+
function setAuthButtonDisabled(button, status) {
|
|
788
|
+
var el = select('.auth-' + button + '-email-btn');
|
|
789
|
+
var disabled = 'disabled';
|
|
790
|
+
if (status) {
|
|
791
|
+
el.setAttribute(disabled, true);
|
|
792
|
+
} else {
|
|
793
|
+
el.removeAttribute(disabled);
|
|
794
|
+
}
|
|
795
|
+
}
|
|
698
796
|
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
797
|
+
function selectAuthInput(mode, input) {
|
|
798
|
+
var prefix = '.auth-';
|
|
799
|
+
var inputSelector = prefix + input + '-input';
|
|
800
|
+
var formSelector = prefix + mode + '-form ';
|
|
801
|
+
var formInput = select(formSelector + inputSelector);
|
|
802
|
+
var input = select(inputSelector);
|
|
705
803
|
|
|
706
|
-
|
|
707
|
-
}
|
|
708
|
-
};
|
|
804
|
+
return formInput.exists() ? formInput : input;
|
|
709
805
|
}
|
|
710
806
|
|
|
711
|
-
|
|
712
|
-
var
|
|
713
|
-
var firebaseActive = typeof firebase !== 'undefined';
|
|
714
|
-
var $error = select('.auth-error-message-element');
|
|
807
|
+
function resolveAuthInputValue(existing, mode, input) {
|
|
808
|
+
var result = existing || selectAuthInput(mode, input).getValue();
|
|
715
809
|
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
$error.show().setInnerHTML(msg);
|
|
719
|
-
}
|
|
720
|
-
function _preDisplayError() {
|
|
721
|
-
$error.hide().setInnerHTML('');
|
|
722
|
-
}
|
|
810
|
+
return input === 'email' ? result.trim().toLowerCase() : result;
|
|
811
|
+
}
|
|
723
812
|
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
813
|
+
function uxHandler(email, password, passwordConfirm, mode) {
|
|
814
|
+
if (!email) {
|
|
815
|
+
selectAuthInput(mode, 'email').get(0).focus();
|
|
816
|
+
} else {
|
|
817
|
+
selectAuthInput(mode, 'password').get(0).focus();
|
|
818
|
+
if (mode === 'signup') {
|
|
819
|
+
selectAuthInput(mode, 'password-confirm').get(0).focus();
|
|
731
820
|
}
|
|
732
821
|
}
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
return {
|
|
825
|
+
isAuthenticated: function () {
|
|
826
|
+
return firebaseActive ? !!firebase.auth().currentUser : false;
|
|
827
|
+
},
|
|
828
|
+
getUser: function () {
|
|
829
|
+
var defaultUser = {email: null, uid: null};
|
|
830
|
+
return firebaseActive ? firebase.auth().currentUser || defaultUser : defaultUser;
|
|
831
|
+
},
|
|
832
|
+
ready: function (fn, options) {
|
|
833
|
+
options = options || {};
|
|
834
|
+
options.interval = options.interval || 100;
|
|
733
835
|
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
var input = select(inputSelector);
|
|
836
|
+
if (!utilities.get(self, 'properties.page.status.authReady', false)) {
|
|
837
|
+
setTimeout(function () {
|
|
838
|
+
self.auth().ready(fn, options);
|
|
839
|
+
}, options.interval);
|
|
840
|
+
} else {
|
|
740
841
|
|
|
741
|
-
|
|
742
|
-
|
|
842
|
+
// Set up listener for redirect (for provider login)
|
|
843
|
+
// @@@ DISABLED NOV 8, 2023
|
|
844
|
+
// if (!self._redirectResultSetup) {
|
|
845
|
+
// self._redirectResultSetup = true;
|
|
846
|
+
// firebase.auth()
|
|
847
|
+
// .getRedirectResult()
|
|
848
|
+
// .catch(function (error) {
|
|
849
|
+
// _displayError(error.message);
|
|
850
|
+
// });
|
|
851
|
+
// }
|
|
743
852
|
|
|
744
|
-
|
|
745
|
-
|
|
853
|
+
// Performance
|
|
854
|
+
self.performance().mark('manager_authReady');
|
|
746
855
|
|
|
747
|
-
|
|
748
|
-
|
|
856
|
+
return fn(self.auth().getUser());
|
|
857
|
+
}
|
|
858
|
+
},
|
|
859
|
+
signIn: function (method, email, password) {
|
|
860
|
+
var mode = 'signin';
|
|
861
|
+
method = method || 'email';
|
|
862
|
+
_preDisplayError();
|
|
863
|
+
// self.log('Signin attempt: ', method, email, password);
|
|
864
|
+
if (method === 'email') {
|
|
865
|
+
// email = (email || select('.auth-email-input').getValue()).trim().toLowerCase();
|
|
866
|
+
email = resolveAuthInputValue(email, mode, 'email');
|
|
867
|
+
// password = password || select('.auth-password-input').getValue();
|
|
868
|
+
password = resolveAuthInputValue(password, mode, 'password');
|
|
869
|
+
// console.log('Signin attempt: ', method, email, password);
|
|
870
|
+
|
|
871
|
+
// Handler
|
|
872
|
+
uxHandler(email, password, undefined, mode);
|
|
873
|
+
|
|
874
|
+
// signinButtonDisabled(true);
|
|
875
|
+
setAuthButtonDisabled(mode, true);
|
|
749
876
|
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
877
|
+
firebase.auth().signInWithEmailAndPassword(email, password)
|
|
878
|
+
.then(function(credential) {
|
|
879
|
+
// _postAuthSubscriptionCheck(self)
|
|
880
|
+
// .then(function () {
|
|
881
|
+
//
|
|
882
|
+
// })
|
|
883
|
+
self.properties.page.status.didSignIn = true;
|
|
884
|
+
// signinButtonDisabled(false);
|
|
885
|
+
setAuthButtonDisabled(mode, false);
|
|
886
|
+
// self.log('Good signin');
|
|
887
|
+
})
|
|
888
|
+
.catch(function(error) {
|
|
889
|
+
// signinButtonDisabled(false);
|
|
890
|
+
setAuthButtonDisabled(mode, false);
|
|
891
|
+
_displayError(error.message);
|
|
892
|
+
// self.log('Error', error.message);
|
|
893
|
+
});
|
|
753
894
|
} else {
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
}
|
|
895
|
+
firebase.auth().signInWithRedirect(new firebase.auth.OAuthProvider(method))
|
|
896
|
+
.catch(function (e) {
|
|
897
|
+
_displayError(e);
|
|
898
|
+
})
|
|
899
|
+
}
|
|
900
|
+
},
|
|
901
|
+
signUp: function(method, email, password, passwordConfirm) {
|
|
902
|
+
var mode = 'signup';
|
|
903
|
+
method = method || 'email';
|
|
904
|
+
|
|
905
|
+
_preDisplayError();
|
|
906
|
+
// self.log('Signup attempt: ', method, email, password, passwordConfirm);
|
|
907
|
+
// var acceptedTerms
|
|
908
|
+
// var termEl = select('.auth-terms-input');
|
|
909
|
+
// if (termEl.exists() && !termEl.getValue() === true) {
|
|
910
|
+
// _displayError('Please review and accept our terms.');
|
|
911
|
+
// return;
|
|
912
|
+
// }
|
|
913
|
+
var termsSelector = '.auth-terms-input';
|
|
914
|
+
var termSpecificEl = select('.auth-signup-form ' + termsSelector)
|
|
915
|
+
var termGenericEl = select(termsSelector)
|
|
916
|
+
if ((termSpecificEl.exists() && !termSpecificEl.getValue() === true) || (termGenericEl.exists() && !termGenericEl.getValue() === true)) {
|
|
917
|
+
_displayError('Please review and accept our terms.');
|
|
918
|
+
return;
|
|
758
919
|
}
|
|
759
|
-
}
|
|
760
920
|
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
ready: function (fn, options) {
|
|
770
|
-
options = options || {};
|
|
771
|
-
options.interval = options.interval || 100;
|
|
772
|
-
|
|
773
|
-
if (!utilities.get(self, 'properties.page.status.authReady', false)) {
|
|
774
|
-
setTimeout(function () {
|
|
775
|
-
self.auth().ready(fn, options);
|
|
776
|
-
}, options.interval);
|
|
777
|
-
} else {
|
|
921
|
+
if (method === 'email') {
|
|
922
|
+
// email = (email || select('.auth-email-input').getValue()).trim().toLowerCase();
|
|
923
|
+
email = resolveAuthInputValue(email, mode, 'email');
|
|
924
|
+
// password = password || select('.auth-password-input').getValue();
|
|
925
|
+
password = resolveAuthInputValue(password, mode, 'password');
|
|
926
|
+
// passwordConfirm = passwordConfirm || select('.auth-password-confirm-input').getValue();
|
|
927
|
+
passwordConfirm = resolveAuthInputValue(passwordConfirm, mode, 'password-confirm');
|
|
928
|
+
// console.log('Signup attempt: ', method, email, password, passwordConfirm);
|
|
778
929
|
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
// if (!self._redirectResultSetup) {
|
|
782
|
-
// self._redirectResultSetup = true;
|
|
783
|
-
// firebase.auth()
|
|
784
|
-
// .getRedirectResult()
|
|
785
|
-
// .catch(function (error) {
|
|
786
|
-
// _displayError(error.message);
|
|
787
|
-
// });
|
|
788
|
-
// }
|
|
789
|
-
|
|
790
|
-
// Performance
|
|
791
|
-
self.performance().mark('manager_authReady');
|
|
792
|
-
|
|
793
|
-
return fn(self.auth().getUser());
|
|
794
|
-
}
|
|
795
|
-
},
|
|
796
|
-
signIn: function (method, email, password) {
|
|
797
|
-
var mode = 'signin';
|
|
798
|
-
method = method || 'email';
|
|
799
|
-
_preDisplayError();
|
|
800
|
-
// self.log('Signin attempt: ', method, email, password);
|
|
801
|
-
if (method === 'email') {
|
|
802
|
-
// email = (email || select('.auth-email-input').getValue()).trim().toLowerCase();
|
|
803
|
-
email = resolveAuthInputValue(email, mode, 'email');
|
|
804
|
-
// password = password || select('.auth-password-input').getValue();
|
|
805
|
-
password = resolveAuthInputValue(password, mode, 'password');
|
|
806
|
-
// console.log('Signin attempt: ', method, email, password);
|
|
807
|
-
|
|
808
|
-
// Handler
|
|
809
|
-
uxHandler(email, password, undefined, mode);
|
|
810
|
-
|
|
811
|
-
// signinButtonDisabled(true);
|
|
812
|
-
setAuthButtonDisabled(mode, true);
|
|
930
|
+
// Handler
|
|
931
|
+
uxHandler(email, password, passwordConfirm, mode);
|
|
813
932
|
|
|
814
|
-
|
|
933
|
+
if (password === passwordConfirm) {
|
|
934
|
+
// signupButtonDisabled(true);
|
|
935
|
+
setAuthButtonDisabled(mode, true);
|
|
936
|
+
firebase.auth().createUserWithEmailAndPassword(email, password)
|
|
815
937
|
.then(function(credential) {
|
|
816
|
-
//
|
|
817
|
-
// .
|
|
818
|
-
//
|
|
819
|
-
// })
|
|
820
|
-
self.properties.page.status.didSignIn = true;
|
|
821
|
-
// signinButtonDisabled(false);
|
|
822
|
-
setAuthButtonDisabled(mode, false);
|
|
823
|
-
// self.log('Good signin');
|
|
938
|
+
// self.properties.page.status.didSignUp = true;
|
|
939
|
+
// self.log('Good signup');
|
|
940
|
+
// signupButtonDisabled(false);
|
|
824
941
|
})
|
|
825
942
|
.catch(function(error) {
|
|
826
|
-
//
|
|
943
|
+
// signupButtonDisabled(false);
|
|
827
944
|
setAuthButtonDisabled(mode, false);
|
|
828
945
|
_displayError(error.message);
|
|
829
|
-
// self.log('
|
|
946
|
+
// self.log('error', error.message);
|
|
830
947
|
});
|
|
831
948
|
} else {
|
|
832
|
-
|
|
833
|
-
.catch(function (e) {
|
|
834
|
-
_displayError(e);
|
|
835
|
-
})
|
|
836
|
-
}
|
|
837
|
-
},
|
|
838
|
-
signUp: function(method, email, password, passwordConfirm) {
|
|
839
|
-
var mode = 'signup';
|
|
840
|
-
method = method || 'email';
|
|
841
|
-
|
|
842
|
-
_preDisplayError();
|
|
843
|
-
// self.log('Signup attempt: ', method, email, password, passwordConfirm);
|
|
844
|
-
// var acceptedTerms
|
|
845
|
-
// var termEl = select('.auth-terms-input');
|
|
846
|
-
// if (termEl.exists() && !termEl.getValue() === true) {
|
|
847
|
-
// _displayError('Please review and accept our terms.');
|
|
848
|
-
// return;
|
|
849
|
-
// }
|
|
850
|
-
var termsSelector = '.auth-terms-input';
|
|
851
|
-
var termSpecificEl = select('.auth-signup-form ' + termsSelector)
|
|
852
|
-
var termGenericEl = select(termsSelector)
|
|
853
|
-
if ((termSpecificEl.exists() && !termSpecificEl.getValue() === true) || (termGenericEl.exists() && !termGenericEl.getValue() === true)) {
|
|
854
|
-
_displayError('Please review and accept our terms.');
|
|
855
|
-
return;
|
|
856
|
-
}
|
|
857
|
-
|
|
858
|
-
if (method === 'email') {
|
|
859
|
-
// email = (email || select('.auth-email-input').getValue()).trim().toLowerCase();
|
|
860
|
-
email = resolveAuthInputValue(email, mode, 'email');
|
|
861
|
-
// password = password || select('.auth-password-input').getValue();
|
|
862
|
-
password = resolveAuthInputValue(password, mode, 'password');
|
|
863
|
-
// passwordConfirm = passwordConfirm || select('.auth-password-confirm-input').getValue();
|
|
864
|
-
passwordConfirm = resolveAuthInputValue(passwordConfirm, mode, 'password-confirm');
|
|
865
|
-
// console.log('Signup attempt: ', method, email, password, passwordConfirm);
|
|
866
|
-
|
|
867
|
-
// Handler
|
|
868
|
-
uxHandler(email, password, passwordConfirm, mode);
|
|
869
|
-
|
|
870
|
-
if (password === passwordConfirm) {
|
|
871
|
-
// signupButtonDisabled(true);
|
|
872
|
-
setAuthButtonDisabled(mode, true);
|
|
873
|
-
firebase.auth().createUserWithEmailAndPassword(email, password)
|
|
874
|
-
.then(function(credential) {
|
|
875
|
-
// self.properties.page.status.didSignUp = true;
|
|
876
|
-
// self.log('Good signup');
|
|
877
|
-
// signupButtonDisabled(false);
|
|
878
|
-
})
|
|
879
|
-
.catch(function(error) {
|
|
880
|
-
// signupButtonDisabled(false);
|
|
881
|
-
setAuthButtonDisabled(mode, false);
|
|
882
|
-
_displayError(error.message);
|
|
883
|
-
// self.log('error', error.message);
|
|
884
|
-
});
|
|
885
|
-
} else {
|
|
886
|
-
_displayError("Passwords don't match.");
|
|
887
|
-
}
|
|
888
|
-
} else {
|
|
889
|
-
self.auth().signIn(method);
|
|
949
|
+
_displayError("Passwords don't match.");
|
|
890
950
|
}
|
|
951
|
+
} else {
|
|
952
|
+
self.auth().signIn(method);
|
|
953
|
+
}
|
|
891
954
|
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
955
|
+
},
|
|
956
|
+
signOut: function() {
|
|
957
|
+
// self.log('signOut()');
|
|
958
|
+
// var self = this;
|
|
959
|
+
return firebase.auth().signOut()
|
|
960
|
+
.catch(function(e) {
|
|
961
|
+
console.error(e);
|
|
962
|
+
// self.log('signOut failed: ', error);
|
|
963
|
+
});
|
|
964
|
+
// return firebase.auth().signOut()
|
|
965
|
+
// .then(function() {
|
|
966
|
+
// // self.log('signOut success.');
|
|
967
|
+
// })
|
|
968
|
+
// .catch(function(e) {
|
|
969
|
+
// // console.error(e);
|
|
970
|
+
// // self.log('signOut failed: ', error);
|
|
971
|
+
// });
|
|
972
|
+
},
|
|
973
|
+
forgot: function(email) {
|
|
974
|
+
// self.log('forgot()');
|
|
975
|
+
var mode = 'forgot';
|
|
976
|
+
// email = email || select('.auth-email-input').getValue();
|
|
977
|
+
email = resolveAuthInputValue(email, mode, 'email')
|
|
978
|
+
|
|
979
|
+
// forgotButtonDisabled(true);
|
|
980
|
+
setAuthButtonDisabled(mode, true);
|
|
981
|
+
_preDisplayError();
|
|
982
|
+
|
|
983
|
+
firebase.auth().sendPasswordResetEmail(email)
|
|
984
|
+
.then(function() {
|
|
985
|
+
// forgotButtonDisabled(false);
|
|
986
|
+
setAuthButtonDisabled(mode, false);
|
|
987
|
+
// self.log('forgot success.');
|
|
988
|
+
_displayError('A reset link has been sent to you.');
|
|
989
|
+
})
|
|
990
|
+
.catch(function(error) {
|
|
991
|
+
// forgotButtonDisabled(false);
|
|
992
|
+
setAuthButtonDisabled(mode, false);
|
|
993
|
+
// self.log('forgot failed: ', error);
|
|
994
|
+
_displayError(error.message);
|
|
995
|
+
});
|
|
996
|
+
},
|
|
934
997
|
|
|
935
|
-
}
|
|
936
998
|
}
|
|
999
|
+
}
|
|
937
1000
|
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
1001
|
+
//@@@NOTIFICATIONS
|
|
1002
|
+
Manager.prototype.notifications = function(options) {
|
|
1003
|
+
var self = this;
|
|
1004
|
+
var supported = (typeof firebase.messaging !== 'undefined') && ('serviceWorker' in navigator) && ('Notification' in window);
|
|
1005
|
+
|
|
1006
|
+
return {
|
|
1007
|
+
isSubscribed: function () {
|
|
1008
|
+
// self.log('isSubscribed()');
|
|
1009
|
+
return new Promise(function(resolve, reject) {
|
|
1010
|
+
if (!supported || Notification.permission !== 'granted') {return resolve(false)};
|
|
1011
|
+
return resolve(true);
|
|
1012
|
+
})
|
|
1013
|
+
},
|
|
1014
|
+
subscribe: function () {
|
|
1015
|
+
// self.log('subscribe()');
|
|
1016
|
+
return new Promise(function(resolve, reject) {
|
|
1017
|
+
// var subscribed = !self.notifications().isSubscribed();
|
|
1018
|
+
if (!supported) {
|
|
1019
|
+
return resolve(false)
|
|
1020
|
+
}
|
|
1021
|
+
firebase.messaging().getToken({
|
|
1022
|
+
serviceWorkerRegistration: self.properties.references.serviceWorker,
|
|
949
1023
|
})
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
.
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
var
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
// Run if local hash is different than the user hash OR it was last updated more than 1 day ago
|
|
975
|
-
if (localHash !== userHash || dateDifference > 1) {
|
|
976
|
-
var timestamp = currentDate.toISOString();
|
|
977
|
-
var timestampUNIX = Math.floor((+new Date(timestamp)) / 1000);
|
|
978
|
-
var subscriptionRef = firebase.firestore().doc('notifications/subscriptions/all/' + token);
|
|
979
|
-
|
|
980
|
-
function saveLocal() {
|
|
981
|
-
// console.log('---------saveLocal');
|
|
982
|
-
// self.log('Saved local token: ', token);
|
|
983
|
-
store.set('notifications', {uid: user.uid, token: token, lastSynced: timestamp});
|
|
984
|
-
}
|
|
1024
|
+
.then(function (token) {
|
|
1025
|
+
var user = self.auth().getUser();
|
|
1026
|
+
var localSubscription = store.get('notifications', {});
|
|
1027
|
+
var localHash = localSubscription.token + '|' + localSubscription.uid;
|
|
1028
|
+
var userHash = token + '|' + user.uid;
|
|
1029
|
+
// console.log('user', user);
|
|
1030
|
+
// console.log('localHash', localHash);
|
|
1031
|
+
// console.log('userHash', userHash);
|
|
1032
|
+
|
|
1033
|
+
// var override = false;
|
|
1034
|
+
var currentDate = new Date();
|
|
1035
|
+
var dateDifference = (currentDate.getTime() - new Date(localSubscription.lastSynced || 0).getTime()) / (1000 * 3600 * 24);
|
|
1036
|
+
|
|
1037
|
+
// Run if local hash is different than the user hash OR it was last updated more than 1 day ago
|
|
1038
|
+
if (localHash !== userHash || dateDifference > 1) {
|
|
1039
|
+
var timestamp = currentDate.toISOString();
|
|
1040
|
+
var timestampUNIX = Math.floor((+new Date(timestamp)) / 1000);
|
|
1041
|
+
var subscriptionRef = firebase.firestore().doc('notifications/subscriptions/all/' + token);
|
|
1042
|
+
|
|
1043
|
+
function saveLocal() {
|
|
1044
|
+
// console.log('---------saveLocal');
|
|
1045
|
+
// self.log('Saved local token: ', token);
|
|
1046
|
+
store.set('notifications', {uid: user.uid, token: token, lastSynced: timestamp});
|
|
1047
|
+
}
|
|
985
1048
|
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
1049
|
+
function saveServer(doc) {
|
|
1050
|
+
// console.log('-------saveServer', !doc.exists, !self.utilities().get(doc.data(), 'link.user.data.uid', ''), user.uid);
|
|
1051
|
+
// Run if it (DOES NOT EXIST on server) OR (it does AND the uid field is null AND the current user is not null)
|
|
1052
|
+
if (!doc.exists || (doc.exists && !self.utilities().get(doc.data(), 'link.user.data.uid', '') && user.uid)) {
|
|
1053
|
+
subscriptionRef
|
|
1054
|
+
.set(
|
|
1055
|
+
{
|
|
1056
|
+
meta: {
|
|
1057
|
+
dateSubscribed: {
|
|
1058
|
+
timestamp: timestamp,
|
|
1059
|
+
timestampUNIX: timestampUNIX
|
|
1060
|
+
},
|
|
1061
|
+
url: window.location.href,
|
|
1062
|
+
},
|
|
1063
|
+
token: token,
|
|
1064
|
+
link: {
|
|
1065
|
+
user: {
|
|
1066
|
+
lastLinked: {
|
|
995
1067
|
timestamp: timestamp,
|
|
996
1068
|
timestampUNIX: timestampUNIX
|
|
997
1069
|
},
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
user: {
|
|
1003
|
-
lastLinked: {
|
|
1004
|
-
timestamp: timestamp,
|
|
1005
|
-
timestampUNIX: timestampUNIX
|
|
1006
|
-
},
|
|
1007
|
-
pk: user.uid,
|
|
1008
|
-
data: {
|
|
1009
|
-
uid: user.uid,
|
|
1010
|
-
email: user.email
|
|
1011
|
-
}
|
|
1070
|
+
pk: user.uid,
|
|
1071
|
+
data: {
|
|
1072
|
+
uid: user.uid,
|
|
1073
|
+
email: user.email
|
|
1012
1074
|
}
|
|
1013
|
-
}
|
|
1014
|
-
tags: ['general']
|
|
1075
|
+
}
|
|
1015
1076
|
},
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
})
|
|
1025
|
-
} else {
|
|
1077
|
+
tags: ['general']
|
|
1078
|
+
},
|
|
1079
|
+
{
|
|
1080
|
+
merge: true
|
|
1081
|
+
}
|
|
1082
|
+
)
|
|
1083
|
+
.then(function(data) {
|
|
1084
|
+
// self.log('Updated token: ', token);
|
|
1026
1085
|
saveLocal();
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1086
|
+
resolve(true);
|
|
1087
|
+
})
|
|
1088
|
+
} else {
|
|
1089
|
+
saveLocal();
|
|
1090
|
+
// self.log('Skip sync, server data exists.');
|
|
1091
|
+
resolve(false);
|
|
1030
1092
|
}
|
|
1031
|
-
|
|
1032
|
-
// Get the doc first and then run a check to see if it needs to be updated
|
|
1033
|
-
subscriptionRef
|
|
1034
|
-
.get()
|
|
1035
|
-
.then(function (doc) {
|
|
1036
|
-
saveServer(doc);
|
|
1037
|
-
})
|
|
1038
|
-
.catch(function () {
|
|
1039
|
-
saveServer({exists: false})
|
|
1040
|
-
})
|
|
1041
|
-
} else {
|
|
1042
|
-
// self.log('Skip sync, recently done.');
|
|
1043
|
-
resolve(false);
|
|
1044
1093
|
}
|
|
1045
1094
|
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1095
|
+
// Get the doc first and then run a check to see if it needs to be updated
|
|
1096
|
+
subscriptionRef
|
|
1097
|
+
.get()
|
|
1098
|
+
.then(function (doc) {
|
|
1099
|
+
saveServer(doc);
|
|
1100
|
+
})
|
|
1101
|
+
.catch(function () {
|
|
1102
|
+
saveServer({exists: false})
|
|
1103
|
+
})
|
|
1104
|
+
} else {
|
|
1105
|
+
// self.log('Skip sync, recently done.');
|
|
1106
|
+
resolve(false);
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1050
1109
|
})
|
|
1051
|
-
|
|
1110
|
+
.catch(function (e) {
|
|
1111
|
+
reject(e);
|
|
1112
|
+
})
|
|
1113
|
+
})
|
|
1052
1114
|
}
|
|
1053
1115
|
}
|
|
1116
|
+
}
|
|
1054
1117
|
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1118
|
+
/*
|
|
1119
|
+
HELPERS
|
|
1120
|
+
*/
|
|
1121
|
+
function subscriptionManager(self, options_user) {
|
|
1122
|
+
if (
|
|
1123
|
+
!('serviceWorker' in navigator)
|
|
1124
|
+
|| (typeof firebase === 'undefined')
|
|
1125
|
+
|| (typeof firebase.messaging === 'undefined')
|
|
1126
|
+
) {
|
|
1127
|
+
return
|
|
1128
|
+
}
|
|
1066
1129
|
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1130
|
+
// service worker guide: https://developers.google.com/web/updates/2018/06/fresher-sw
|
|
1131
|
+
navigator.serviceWorker.register(
|
|
1132
|
+
'/' + (options_user.serviceWorker.path || 'master-service-worker.js')
|
|
1133
|
+
+ '?config=' + encodeURIComponent(JSON.stringify({
|
|
1134
|
+
name: self.properties.global.brand.name,
|
|
1135
|
+
app: self.properties.global.app,
|
|
1136
|
+
env: self.properties.meta.environment,
|
|
1137
|
+
v: self.properties.global.version,
|
|
1138
|
+
cb: self.properties.global.cacheBreaker,
|
|
1139
|
+
firebase: options_user.libraries.firebase_app.config
|
|
1140
|
+
}))
|
|
1141
|
+
)
|
|
1142
|
+
.then(function (registration) {
|
|
1143
|
+
// firebase.messaging().useServiceWorker(registration);
|
|
1144
|
+
self.properties.references.serviceWorker = registration;
|
|
1145
|
+
|
|
1146
|
+
// TODO: https://googlechrome.github.io/samples/service-worker/post-message/
|
|
1147
|
+
// --- leverage this example ^^^ for caching! It's grat and you can do one page at a time through postMessage!
|
|
1148
|
+
|
|
1149
|
+
// function listenForWaitingServiceWorker(reg, callback) {
|
|
1150
|
+
// function awaitStateChange() {
|
|
1151
|
+
// reg.installing.addEventListener('statechange', function() {
|
|
1152
|
+
// if (this.state === 'installed') callback(reg);
|
|
1153
|
+
// });
|
|
1154
|
+
// }
|
|
1155
|
+
// if (!reg) return;
|
|
1156
|
+
// if (reg.waiting) return callback(reg);
|
|
1157
|
+
// if (reg.installing) awaitStateChange();
|
|
1158
|
+
// reg.addEventListener('updatefound', awaitStateChange);
|
|
1159
|
+
// }
|
|
1160
|
+
//
|
|
1161
|
+
// // reload once when the new Service Worker starts activating
|
|
1162
|
+
// var refreshing;
|
|
1163
|
+
// navigator.serviceWorker.addEventListener('controllerchange',
|
|
1164
|
+
// function() {
|
|
1165
|
+
// if (refreshing) return;
|
|
1166
|
+
// refreshing = true;
|
|
1167
|
+
// window.location.reload();
|
|
1168
|
+
// }
|
|
1169
|
+
// );
|
|
1170
|
+
// function promptUserToRefresh(reg) {
|
|
1171
|
+
// // this is just an example
|
|
1172
|
+
// // don't use window.confirm in real life; it's terrible
|
|
1173
|
+
// if (window.confirm("New version available! OK to refresh?")) {
|
|
1174
|
+
// reg.waiting.postMessage({command: 'skipWaiting'});
|
|
1175
|
+
// }
|
|
1176
|
+
// }
|
|
1177
|
+
// listenForWaitingServiceWorker(registration, promptUserToRefresh);
|
|
1178
|
+
|
|
1179
|
+
// self.log('SW Registered.');
|
|
1180
|
+
//@@@NOTIFICATIONS
|
|
1181
|
+
// _setupTokenRefreshHandler(self);
|
|
1115
1182
|
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1183
|
+
try {
|
|
1184
|
+
// Normally, notifications are not displayed when user is ON PAGE but we will display it here anyway
|
|
1185
|
+
firebase.messaging().onMessage(function (payload) {
|
|
1186
|
+
new Notification(payload.notification.title, payload.notification)
|
|
1187
|
+
.onclick = function(event) {
|
|
1188
|
+
event.preventDefault(); // prevent the browser from focusing the Notification's tab
|
|
1189
|
+
window.open(payload.notification.click_action, '_blank');
|
|
1190
|
+
}
|
|
1191
|
+
})
|
|
1192
|
+
} catch (e) {
|
|
1193
|
+
console.error(e);
|
|
1194
|
+
}
|
|
1119
1195
|
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
event.preventDefault(); // prevent the browser from focusing the Notification's tab
|
|
1126
|
-
window.open(payload.notification.click_action, '_blank');
|
|
1127
|
-
}
|
|
1128
|
-
})
|
|
1129
|
-
} catch (e) {
|
|
1130
|
-
console.error(e);
|
|
1131
|
-
}
|
|
1196
|
+
})
|
|
1197
|
+
.catch(function (e) {
|
|
1198
|
+
// console.log('***2');
|
|
1199
|
+
console.error(e);
|
|
1200
|
+
});
|
|
1132
1201
|
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
});
|
|
1202
|
+
// Service Worker Ready
|
|
1203
|
+
// navigator.serviceWorker.ready.then(function(registration) {
|
|
1204
|
+
// });
|
|
1205
|
+
}
|
|
1138
1206
|
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1207
|
+
function showExitPopup(self) {
|
|
1208
|
+
var exitPopupSettings = self.properties.options.exitPopup;
|
|
1209
|
+
|
|
1210
|
+
if (!exitPopupSettings.enabled) {
|
|
1211
|
+
return;
|
|
1212
|
+
};
|
|
1143
1213
|
|
|
1144
|
-
|
|
1145
|
-
|
|
1214
|
+
var lastTriggered = new Date(storage.get('exitPopup.lastTriggered', 0));
|
|
1215
|
+
var now = new Date();
|
|
1216
|
+
var diff = now - lastTriggered;
|
|
1146
1217
|
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1218
|
+
if (diff < exitPopupSettings.config.timeout) {
|
|
1219
|
+
return;
|
|
1220
|
+
};
|
|
1150
1221
|
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
var diff = now - lastTriggered;
|
|
1222
|
+
showBootstrapModal(exitPopupSettings);
|
|
1223
|
+
}
|
|
1154
1224
|
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1225
|
+
function showBootstrapModal(exitPopupSettings) {
|
|
1226
|
+
var proceed = exitPopupSettings.config.handler
|
|
1227
|
+
? exitPopupSettings.config.handler()
|
|
1228
|
+
: true;
|
|
1158
1229
|
|
|
1159
|
-
|
|
1230
|
+
if (!proceed) {
|
|
1231
|
+
return;
|
|
1160
1232
|
}
|
|
1161
1233
|
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1234
|
+
var $el = document.getElementById('modal-exit-popup');
|
|
1235
|
+
try {
|
|
1236
|
+
var modal = new bootstrap.Modal($el);
|
|
1237
|
+
modal.show();
|
|
1238
|
+
$el.removeAttribute('hidden');
|
|
1166
1239
|
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1240
|
+
var $title = $el.querySelector('.modal-title');
|
|
1241
|
+
var $message = $el.querySelector('.modal-body');
|
|
1242
|
+
var $okButton = $el.querySelector('.modal-footer .btn-primary');
|
|
1243
|
+
var config = exitPopupSettings.config;
|
|
1170
1244
|
|
|
1171
|
-
var
|
|
1172
|
-
|
|
1173
|
-
var modal = new bootstrap.Modal($el);
|
|
1174
|
-
modal.show();
|
|
1175
|
-
$el.removeAttribute('hidden');
|
|
1245
|
+
var link = config.okButton.link
|
|
1246
|
+
.replace(/{pathname}/ig, window.location.pathname)
|
|
1176
1247
|
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1248
|
+
$title.innerHTML = config.title;
|
|
1249
|
+
$message.innerHTML = config.message;
|
|
1250
|
+
$okButton.innerHTML = config.okButton.text;
|
|
1251
|
+
$okButton.setAttribute('href', link);
|
|
1181
1252
|
|
|
1182
|
-
|
|
1183
|
-
|
|
1253
|
+
storage.set('exitPopup.lastTriggered', new Date().toISOString());
|
|
1254
|
+
} catch (e) {
|
|
1255
|
+
console.warn(e);
|
|
1256
|
+
}
|
|
1257
|
+
}
|
|
1184
1258
|
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
$okButton.innerHTML = config.okButton.text;
|
|
1188
|
-
$okButton.setAttribute('href', link);
|
|
1259
|
+
function refreshNewVersion(self) {
|
|
1260
|
+
console.log('refreshNewVersion()');
|
|
1189
1261
|
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1262
|
+
// Make request to get the build time (live)
|
|
1263
|
+
fetch('/@output/build/build.json?cb=' + new Date().getTime())
|
|
1264
|
+
.then(function (res) {
|
|
1265
|
+
if (res.ok) {
|
|
1266
|
+
return res.json();
|
|
1267
|
+
} else {
|
|
1268
|
+
throw new Error('Bad response');
|
|
1193
1269
|
}
|
|
1194
|
-
}
|
|
1270
|
+
})
|
|
1271
|
+
.then(function (data) {
|
|
1272
|
+
var buildTimeCurrent = self.properties.global.buildTime;
|
|
1273
|
+
var buildTimeLive = new Date(data['npm-build'].timestamp);
|
|
1195
1274
|
|
|
1196
|
-
|
|
1197
|
-
|
|
1275
|
+
// Set buildTimeCurrent to 1 hour ahead to account for the npm-build time which will ALWAYS be set to later since it happens later
|
|
1276
|
+
buildTimeCurrent.setHours(buildTimeCurrent.getHours() + 1);
|
|
1198
1277
|
|
|
1199
|
-
//
|
|
1200
|
-
|
|
1201
|
-
.then(function (res) {
|
|
1202
|
-
if (res.ok) {
|
|
1203
|
-
return res.json();
|
|
1204
|
-
} else {
|
|
1205
|
-
throw new Error('Bad response');
|
|
1206
|
-
}
|
|
1207
|
-
})
|
|
1208
|
-
.then(function (data) {
|
|
1209
|
-
var buildTimeCurrent = self.properties.global.buildTime;
|
|
1210
|
-
var buildTimeLive = new Date(data['npm-build'].timestamp);
|
|
1211
|
-
|
|
1212
|
-
// Set buildTimeCurrent to 1 hour ahead to account for the npm-build time which will ALWAYS be set to later since it happens later
|
|
1213
|
-
buildTimeCurrent.setHours(buildTimeCurrent.getHours() + 1);
|
|
1278
|
+
// Log
|
|
1279
|
+
console.log('refreshNewVersion()', data, buildTimeCurrent, buildTimeLive);
|
|
1214
1280
|
|
|
1215
|
-
|
|
1216
|
-
|
|
1281
|
+
// If the live time is newer, refresh
|
|
1282
|
+
if (buildTimeCurrent < buildTimeLive) {
|
|
1283
|
+
console.log('refreshNewVersion(): Refreshing...');
|
|
1217
1284
|
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1285
|
+
if (self.isDevelopment()) {
|
|
1286
|
+
return;
|
|
1287
|
+
}
|
|
1221
1288
|
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1289
|
+
// Force page reload
|
|
1290
|
+
window.onbeforeunload = function () {
|
|
1291
|
+
return undefined;
|
|
1292
|
+
}
|
|
1225
1293
|
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1294
|
+
// Refresh
|
|
1295
|
+
window.location.reload(true);
|
|
1296
|
+
}
|
|
1297
|
+
})
|
|
1298
|
+
.catch(function (e) {
|
|
1299
|
+
console.error(e);
|
|
1300
|
+
})
|
|
1301
|
+
}
|
|
1230
1302
|
|
|
1231
|
-
|
|
1232
|
-
|
|
1303
|
+
/*
|
|
1304
|
+
EXTERNAL LIBS
|
|
1305
|
+
*/
|
|
1306
|
+
var load_firebase = function(self, options) {
|
|
1307
|
+
return new Promise(function(resolve, reject) {
|
|
1308
|
+
// if (typeof window.firebase !== 'undefined') {
|
|
1309
|
+
// return resolve();
|
|
1310
|
+
// }
|
|
1311
|
+
var setting = options.libraries.firebase_app
|
|
1312
|
+
if (setting.enabled === true) {
|
|
1313
|
+
function _post() {
|
|
1314
|
+
// self.log('Loaded Firebase.');
|
|
1315
|
+
// console.log('_post.');
|
|
1316
|
+
window.app = firebase.initializeApp(setting.config);
|
|
1317
|
+
|
|
1318
|
+
Promise.all([
|
|
1319
|
+
load_firebase_auth(self, options),
|
|
1320
|
+
load_firebase_firestore(self, options),
|
|
1321
|
+
load_firebase_messaging(self, options),
|
|
1322
|
+
load_firebase_appCheck(self, options),
|
|
1323
|
+
])
|
|
1324
|
+
.then(resolve)
|
|
1325
|
+
.catch(reject);
|
|
1233
1326
|
}
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
}
|
|
1239
|
-
|
|
1240
|
-
/*
|
|
1241
|
-
EXTERNAL LIBS
|
|
1242
|
-
*/
|
|
1243
|
-
var load_firebase = function(self, options) {
|
|
1244
|
-
return new Promise(function(resolve, reject) {
|
|
1245
|
-
// if (typeof window.firebase !== 'undefined') {
|
|
1246
|
-
// return resolve();
|
|
1247
|
-
// }
|
|
1248
|
-
var setting = options.libraries.firebase_app
|
|
1249
|
-
if (setting.enabled === true) {
|
|
1250
|
-
function _post() {
|
|
1251
|
-
// self.log('Loaded Firebase.');
|
|
1252
|
-
// console.log('_post.');
|
|
1253
|
-
window.app = firebase.initializeApp(setting.config);
|
|
1254
|
-
|
|
1255
|
-
Promise.all([
|
|
1256
|
-
load_firebase_auth(self, options),
|
|
1257
|
-
load_firebase_firestore(self, options),
|
|
1258
|
-
load_firebase_messaging(self, options),
|
|
1259
|
-
load_firebase_appCheck(self, options),
|
|
1260
|
-
])
|
|
1261
|
-
.then(resolve)
|
|
1262
|
-
.catch(reject);
|
|
1263
|
-
}
|
|
1264
|
-
if (setting.load) {
|
|
1265
|
-
setting.load(self)
|
|
1266
|
-
.then(_post)
|
|
1267
|
-
.catch(reject);
|
|
1268
|
-
} else {
|
|
1269
|
-
// import('firebase/app')
|
|
1270
|
-
import('firebase/compat/app')
|
|
1271
|
-
.then(function(mod) {
|
|
1272
|
-
window.firebase = mod.default;
|
|
1273
|
-
_post()
|
|
1274
|
-
})
|
|
1275
|
-
.catch(reject);
|
|
1276
|
-
}
|
|
1327
|
+
if (setting.load) {
|
|
1328
|
+
setting.load(self)
|
|
1329
|
+
.then(_post)
|
|
1330
|
+
.catch(reject);
|
|
1277
1331
|
} else {
|
|
1278
|
-
|
|
1332
|
+
// import('firebase/app')
|
|
1333
|
+
import('firebase/compat/app')
|
|
1334
|
+
.then(function(mod) {
|
|
1335
|
+
window.firebase = mod.default;
|
|
1336
|
+
_post()
|
|
1337
|
+
})
|
|
1338
|
+
.catch(reject);
|
|
1279
1339
|
}
|
|
1280
|
-
}
|
|
1281
|
-
|
|
1340
|
+
} else {
|
|
1341
|
+
resolve();
|
|
1342
|
+
}
|
|
1343
|
+
});
|
|
1344
|
+
}
|
|
1282
1345
|
|
|
1283
1346
|
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
} else {
|
|
1296
|
-
// import('firebase/auth')
|
|
1297
|
-
import('firebase/compat/auth')
|
|
1298
|
-
.then(resolve)
|
|
1299
|
-
.catch(reject);
|
|
1300
|
-
}
|
|
1347
|
+
var load_firebase_auth = function(self, options) {
|
|
1348
|
+
return new Promise(function(resolve, reject) {
|
|
1349
|
+
// if (typeof utilities.get(window, 'firebase.auth', undefined) !== 'undefined') {
|
|
1350
|
+
// return resolve();
|
|
1351
|
+
// }
|
|
1352
|
+
var setting = options.libraries.firebase_auth;
|
|
1353
|
+
if (setting.enabled === true) {
|
|
1354
|
+
if (setting.load) {
|
|
1355
|
+
setting.load(self)
|
|
1356
|
+
.then(resolve)
|
|
1357
|
+
.catch(reject);
|
|
1301
1358
|
} else {
|
|
1302
|
-
|
|
1359
|
+
// import('firebase/auth')
|
|
1360
|
+
import('firebase/compat/auth')
|
|
1361
|
+
.then(resolve)
|
|
1362
|
+
.catch(reject);
|
|
1303
1363
|
}
|
|
1364
|
+
} else {
|
|
1365
|
+
resolve();
|
|
1366
|
+
}
|
|
1304
1367
|
|
|
1305
|
-
|
|
1306
|
-
|
|
1368
|
+
});
|
|
1369
|
+
}
|
|
1307
1370
|
|
|
1308
1371
|
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
} else {
|
|
1321
|
-
// import('firebase/firestore')
|
|
1322
|
-
import('firebase/compat/firestore')
|
|
1323
|
-
.then(resolve)
|
|
1324
|
-
.catch(reject);
|
|
1325
|
-
}
|
|
1372
|
+
var load_firebase_firestore = function(self, options) {
|
|
1373
|
+
return new Promise(function(resolve, reject) {
|
|
1374
|
+
// if (typeof utilities.get(window, 'firebase.firestore', undefined) !== 'undefined') {
|
|
1375
|
+
// return resolve();
|
|
1376
|
+
// }
|
|
1377
|
+
var setting = options.libraries.firebase_firestore;
|
|
1378
|
+
if (setting.enabled === true) {
|
|
1379
|
+
if (setting.load) {
|
|
1380
|
+
setting.load(self)
|
|
1381
|
+
.then(resolve)
|
|
1382
|
+
.catch(reject);
|
|
1326
1383
|
} else {
|
|
1327
|
-
|
|
1384
|
+
// import('firebase/firestore')
|
|
1385
|
+
import('firebase/compat/firestore')
|
|
1386
|
+
.then(resolve)
|
|
1387
|
+
.catch(reject);
|
|
1328
1388
|
}
|
|
1329
|
-
}
|
|
1330
|
-
|
|
1389
|
+
} else {
|
|
1390
|
+
resolve();
|
|
1391
|
+
}
|
|
1392
|
+
});
|
|
1393
|
+
}
|
|
1331
1394
|
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
} else {
|
|
1344
|
-
// import('firebase/messaging')
|
|
1345
|
-
import('firebase/compat/messaging')
|
|
1346
|
-
.then(resolve)
|
|
1347
|
-
.catch(reject);
|
|
1348
|
-
}
|
|
1395
|
+
var load_firebase_messaging = function(self, options) {
|
|
1396
|
+
return new Promise(function(resolve, reject) {
|
|
1397
|
+
// if (typeof utilities.get(window, 'firebase.messaging', undefined) !== 'undefined') {
|
|
1398
|
+
// return resolve();
|
|
1399
|
+
// }
|
|
1400
|
+
var setting = options.libraries.firebase_messaging;
|
|
1401
|
+
if (setting.enabled === true) {
|
|
1402
|
+
if (setting.load) {
|
|
1403
|
+
setting.load(self)
|
|
1404
|
+
.then(resolve)
|
|
1405
|
+
.catch(reject);
|
|
1349
1406
|
} else {
|
|
1350
|
-
|
|
1407
|
+
// import('firebase/messaging')
|
|
1408
|
+
import('firebase/compat/messaging')
|
|
1409
|
+
.then(resolve)
|
|
1410
|
+
.catch(reject);
|
|
1351
1411
|
}
|
|
1352
|
-
}
|
|
1353
|
-
|
|
1412
|
+
} else {
|
|
1413
|
+
resolve();
|
|
1414
|
+
}
|
|
1415
|
+
});
|
|
1416
|
+
}
|
|
1354
1417
|
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
if (!siteKey) {
|
|
1371
|
-
return resolve();
|
|
1372
|
-
}
|
|
1418
|
+
var load_firebase_appCheck = function(self, options) {
|
|
1419
|
+
return new Promise(function(resolve, reject) {
|
|
1420
|
+
var setting = options.libraries.firebase_appCheck;
|
|
1421
|
+
if (setting.enabled === true) {
|
|
1422
|
+
if (setting.load) {
|
|
1423
|
+
setting.load(self)
|
|
1424
|
+
.then(resolve)
|
|
1425
|
+
.catch(reject);
|
|
1426
|
+
} else {
|
|
1427
|
+
// import('firebase/app-check')
|
|
1428
|
+
import('firebase/compat/app-check')
|
|
1429
|
+
.then(function (mod) {
|
|
1430
|
+
var appCheck = firebase.appCheck;
|
|
1431
|
+
var siteKey = setting.config.siteKey;
|
|
1373
1432
|
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
);
|
|
1433
|
+
if (!siteKey) {
|
|
1434
|
+
return resolve();
|
|
1435
|
+
}
|
|
1378
1436
|
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
} else {
|
|
1384
|
-
resolve();
|
|
1385
|
-
}
|
|
1386
|
-
});
|
|
1387
|
-
}
|
|
1437
|
+
appCheck().activate(
|
|
1438
|
+
new appCheck.ReCaptchaEnterpriseProvider(siteKey),
|
|
1439
|
+
true,
|
|
1440
|
+
);
|
|
1388
1441
|
|
|
1389
|
-
|
|
1390
|
-
return new Promise(function(resolve, reject) {
|
|
1391
|
-
// if (typeof window.lazysizes !== 'undefined') {
|
|
1392
|
-
// return resolve();
|
|
1393
|
-
// }
|
|
1394
|
-
if (options.libraries.lazysizes.enabled === true) {
|
|
1395
|
-
import('lazysizes')
|
|
1396
|
-
.then(function (mod) {
|
|
1397
|
-
window.lazysizes = mod.default;
|
|
1398
|
-
|
|
1399
|
-
// configs come from official lazysizes demo
|
|
1400
|
-
var expand = Math.max(Math.min(document.documentElement.clientWidth, document.documentElement.clientHeight, 1222) - 1, 359);
|
|
1401
|
-
window.lazySizesConfig = {
|
|
1402
|
-
loadMode: 1,
|
|
1403
|
-
expand: expand,
|
|
1404
|
-
expFactor: expand < 380 ? 3 : 2,
|
|
1405
|
-
};
|
|
1406
|
-
// self.log('Loaded Lazysizes.');
|
|
1442
|
+
resolve();
|
|
1407
1443
|
})
|
|
1408
1444
|
.catch(reject);
|
|
1409
|
-
} else {
|
|
1410
|
-
resolve();
|
|
1411
1445
|
}
|
|
1412
|
-
}
|
|
1413
|
-
|
|
1446
|
+
} else {
|
|
1447
|
+
resolve();
|
|
1448
|
+
}
|
|
1449
|
+
});
|
|
1450
|
+
}
|
|
1414
1451
|
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
.
|
|
1428
|
-
|
|
1452
|
+
var load_lazysizes = function(self, options) {
|
|
1453
|
+
return new Promise(function(resolve, reject) {
|
|
1454
|
+
// if (typeof window.lazysizes !== 'undefined') {
|
|
1455
|
+
// return resolve();
|
|
1456
|
+
// }
|
|
1457
|
+
if (options.libraries.lazysizes.enabled === true) {
|
|
1458
|
+
import('lazysizes')
|
|
1459
|
+
.then(function (mod) {
|
|
1460
|
+
window.lazysizes = mod.default;
|
|
1461
|
+
|
|
1462
|
+
// configs come from official lazysizes demo
|
|
1463
|
+
var expand = Math.max(Math.min(document.documentElement.clientWidth, document.documentElement.clientHeight, 1222) - 1, 359);
|
|
1464
|
+
window.lazySizesConfig = {
|
|
1465
|
+
loadMode: 1,
|
|
1466
|
+
expand: expand,
|
|
1467
|
+
expFactor: expand < 380 ? 3 : 2,
|
|
1468
|
+
};
|
|
1469
|
+
// self.log('Loaded Lazysizes.');
|
|
1470
|
+
})
|
|
1471
|
+
.catch(reject);
|
|
1472
|
+
} else {
|
|
1473
|
+
resolve();
|
|
1474
|
+
}
|
|
1475
|
+
});
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
var load_cookieconsent = function(self, options) {
|
|
1479
|
+
return new Promise(function(resolve, reject) {
|
|
1480
|
+
// if (typeof window.cookieconsent !== 'undefined') {
|
|
1481
|
+
// return resolve();
|
|
1482
|
+
// }
|
|
1483
|
+
if (options.libraries.cookieconsent.enabled === true) {
|
|
1484
|
+
import('cookieconsent')
|
|
1485
|
+
.then(function(mod) {
|
|
1486
|
+
window.cookieconsent.initialise(options.libraries.cookieconsent.config);
|
|
1487
|
+
// self.log('Loaded Cookieconsent.');
|
|
1429
1488
|
resolve();
|
|
1430
|
-
}
|
|
1489
|
+
})
|
|
1490
|
+
.catch(reject);
|
|
1491
|
+
} else {
|
|
1492
|
+
resolve();
|
|
1493
|
+
}
|
|
1431
1494
|
|
|
1432
|
-
|
|
1433
|
-
|
|
1495
|
+
});
|
|
1496
|
+
}
|
|
1434
1497
|
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
if (
|
|
1439
|
-
options.libraries.chatsy.enabled === true
|
|
1440
|
-
&& !self.properties.page._chatsyRequested
|
|
1441
|
-
) {
|
|
1442
|
-
var chatsyPath = 'libraries.chatsy.config';
|
|
1443
|
-
|
|
1444
|
-
// Immediately hide the fake button
|
|
1445
|
-
select('#prechat-btn').hide();
|
|
1446
|
-
|
|
1447
|
-
// Load the script
|
|
1448
|
-
loadScript({
|
|
1449
|
-
src: 'https://app.chatsy.ai/resources/script.js',
|
|
1450
|
-
// src: 'http://localhost:4001/resources/script.js',
|
|
1451
|
-
attributes: [
|
|
1452
|
-
{name: 'data-account-id', value: utilities.get(options, chatsyPath + '.accountId', '')},
|
|
1453
|
-
{name: 'data-chat-id', value: utilities.get(options, chatsyPath + '.chatId', '')},
|
|
1454
|
-
{name: 'data-settings', value: JSON.stringify(utilities.get(options, chatsyPath + '.settings', ''))},
|
|
1455
|
-
],
|
|
1456
|
-
crossorigin: true,
|
|
1457
|
-
})
|
|
1458
|
-
.then(function () {
|
|
1459
|
-
// Listen for Chatsy status
|
|
1460
|
-
chatsy.on('status', function(event, status) {
|
|
1461
|
-
if (status === 'loaded') {
|
|
1462
|
-
chatsy.open();
|
|
1463
|
-
}
|
|
1464
|
-
})
|
|
1498
|
+
var load_chatsy = function(self, options) {
|
|
1499
|
+
return new Promise(function(resolve, reject) {
|
|
1465
1500
|
|
|
1466
|
-
|
|
1501
|
+
if (
|
|
1502
|
+
options.libraries.chatsy.enabled === true
|
|
1503
|
+
&& !self.properties.page._chatsyRequested
|
|
1504
|
+
) {
|
|
1505
|
+
var chatsyPath = 'libraries.chatsy.config';
|
|
1506
|
+
|
|
1507
|
+
// Immediately hide the fake button
|
|
1508
|
+
select('#prechat-btn').hide();
|
|
1509
|
+
|
|
1510
|
+
// Load the script
|
|
1511
|
+
loadScript({
|
|
1512
|
+
src: 'https://app.chatsy.ai/resources/script.js',
|
|
1513
|
+
// src: 'http://localhost:4001/resources/script.js',
|
|
1514
|
+
attributes: [
|
|
1515
|
+
{name: 'data-account-id', value: utilities.get(options, chatsyPath + '.accountId', '')},
|
|
1516
|
+
{name: 'data-chat-id', value: utilities.get(options, chatsyPath + '.chatId', '')},
|
|
1517
|
+
{name: 'data-settings', value: JSON.stringify(utilities.get(options, chatsyPath + '.settings', ''))},
|
|
1518
|
+
],
|
|
1519
|
+
crossorigin: true,
|
|
1520
|
+
})
|
|
1521
|
+
.then(function () {
|
|
1522
|
+
// Listen for Chatsy status
|
|
1523
|
+
chatsy.on('status', function(event, status) {
|
|
1524
|
+
if (status === 'loaded') {
|
|
1525
|
+
chatsy.open();
|
|
1526
|
+
}
|
|
1467
1527
|
})
|
|
1468
1528
|
|
|
1469
|
-
self.properties.page._chatsyRequested = true;
|
|
1470
|
-
} else {
|
|
1471
1529
|
resolve();
|
|
1472
|
-
}
|
|
1473
|
-
});
|
|
1474
|
-
}
|
|
1530
|
+
})
|
|
1475
1531
|
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
window.Sentry = mod;
|
|
1483
|
-
|
|
1484
|
-
// Set config
|
|
1485
|
-
var config = options.libraries.sentry.config;
|
|
1486
|
-
config.release = config.release + '@' + self.properties.global.version;
|
|
1487
|
-
config.environment = self.properties.meta.environment;
|
|
1488
|
-
config.integrations = config.integrations || [];
|
|
1489
|
-
|
|
1490
|
-
// if (self.isDevelopment()) {
|
|
1491
|
-
// config.dsn = 'https://901db748bbb9469f860dc36fb07a4374@o1120154.ingest.sentry.io/6155285';
|
|
1492
|
-
// }
|
|
1493
|
-
|
|
1494
|
-
// Add integration: browser tracing
|
|
1495
|
-
config.integrations.push(Sentry.browserTracingIntegration());
|
|
1496
|
-
|
|
1497
|
-
// Add integration: replay
|
|
1498
|
-
if (config.replaysSessionSampleRate > 0 || config.replaysOnErrorSampleRate > 0) {
|
|
1499
|
-
config.integrations.push(Sentry.replayIntegration({
|
|
1500
|
-
maskAllText: false,
|
|
1501
|
-
blockAllMedia: false,
|
|
1502
|
-
}));
|
|
1503
|
-
}
|
|
1532
|
+
self.properties.page._chatsyRequested = true;
|
|
1533
|
+
} else {
|
|
1534
|
+
resolve();
|
|
1535
|
+
}
|
|
1536
|
+
});
|
|
1537
|
+
}
|
|
1504
1538
|
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
console.error('[SENTRY] Caught error', event, hint);
|
|
1526
|
-
|
|
1527
|
-
// Skip processing the event
|
|
1528
|
-
if (self.isDevelopment()) {
|
|
1529
|
-
return null;
|
|
1530
|
-
}
|
|
1539
|
+
var load_sentry = function(self, options) {
|
|
1540
|
+
return new Promise(function(resolve, reject) {
|
|
1541
|
+
if (options.libraries.sentry.enabled === true) {
|
|
1542
|
+
import('@sentry/browser')
|
|
1543
|
+
.then(function(mod) {
|
|
1544
|
+
// Set global
|
|
1545
|
+
window.Sentry = mod;
|
|
1546
|
+
|
|
1547
|
+
// Set config
|
|
1548
|
+
var config = options.libraries.sentry.config;
|
|
1549
|
+
config.release = config.release + '@' + self.properties.global.version;
|
|
1550
|
+
config.environment = self.properties.meta.environment;
|
|
1551
|
+
config.integrations = config.integrations || [];
|
|
1552
|
+
|
|
1553
|
+
// if (self.isDevelopment()) {
|
|
1554
|
+
// config.dsn = 'https://901db748bbb9469f860dc36fb07a4374@o1120154.ingest.sentry.io/6155285';
|
|
1555
|
+
// }
|
|
1556
|
+
|
|
1557
|
+
// Add integration: browser tracing
|
|
1558
|
+
config.integrations.push(Sentry.browserTracingIntegration());
|
|
1531
1559
|
|
|
1532
|
-
|
|
1533
|
-
|
|
1560
|
+
// Add integration: replay
|
|
1561
|
+
if (config.replaysSessionSampleRate > 0 || config.replaysOnErrorSampleRate > 0) {
|
|
1562
|
+
config.integrations.push(Sentry.replayIntegration({
|
|
1563
|
+
maskAllText: false,
|
|
1564
|
+
blockAllMedia: false,
|
|
1565
|
+
}));
|
|
1566
|
+
}
|
|
1567
|
+
|
|
1568
|
+
// Setup before send
|
|
1569
|
+
config.beforeSend = function (event, hint) {
|
|
1570
|
+
var startTime = self.properties.page.startTime;
|
|
1571
|
+
var hoursSinceStart = (new Date() - startTime) / (1000 * 3600);
|
|
1572
|
+
|
|
1573
|
+
// Setup tags
|
|
1574
|
+
event.tags = event.tags || {};
|
|
1575
|
+
event.tags['process.type'] = event.tags['process.type'] || 'browser';
|
|
1576
|
+
// event.tags['usage.total.opens'] = parseInt(usage.total.opens);
|
|
1577
|
+
// event.tags['usage.total.hours'] = usage.total.hours;
|
|
1578
|
+
event.tags['usage.session.hours'] = hoursSinceStart.toFixed(2);
|
|
1579
|
+
// event.tags['store'] = self.properties().isStore();
|
|
1580
|
+
|
|
1581
|
+
// Setup user
|
|
1582
|
+
event.user = event.user || {};
|
|
1583
|
+
event.user.email = storage.get('user.auth.email', '')
|
|
1584
|
+
event.user.uid = storage.get('user.auth.uid', '');
|
|
1585
|
+
// event.user.ip = storage.get('user.ip', '');
|
|
1586
|
+
|
|
1587
|
+
// Log to console
|
|
1588
|
+
console.error('[SENTRY] Caught error', event, hint);
|
|
1589
|
+
|
|
1590
|
+
// Skip processing the event
|
|
1591
|
+
if (self.isDevelopment()) {
|
|
1592
|
+
return null;
|
|
1534
1593
|
}
|
|
1535
1594
|
|
|
1536
|
-
//
|
|
1537
|
-
|
|
1595
|
+
// Process the event
|
|
1596
|
+
return event;
|
|
1597
|
+
}
|
|
1538
1598
|
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
})
|
|
1542
|
-
.catch(reject);
|
|
1543
|
-
} else {
|
|
1544
|
-
resolve();
|
|
1545
|
-
}
|
|
1546
|
-
});
|
|
1547
|
-
}
|
|
1599
|
+
// Initialize
|
|
1600
|
+
Sentry.init(config);
|
|
1548
1601
|
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
// 2. Prepend log prefix log string
|
|
1557
|
-
args.unshift('[DEV @ ' + new Date().toLocaleTimeString() + ']');
|
|
1558
|
-
|
|
1559
|
-
// 3. Pass along arguments to console.log
|
|
1560
|
-
if (args[1] === 'error') {
|
|
1561
|
-
args.splice(1,1);
|
|
1562
|
-
console.error.apply(console, args);
|
|
1563
|
-
} else if (args[1] === 'warn') {
|
|
1564
|
-
args.splice(1,1);
|
|
1565
|
-
console.warn.apply(console, args);
|
|
1566
|
-
} else if (args[1] === 'log') {
|
|
1567
|
-
args.splice(1,1);
|
|
1568
|
-
console.log.apply(console, args);
|
|
1569
|
-
} else {
|
|
1570
|
-
console.log.apply(console, args);
|
|
1571
|
-
}
|
|
1602
|
+
// Resolve
|
|
1603
|
+
resolve();
|
|
1604
|
+
})
|
|
1605
|
+
.catch(reject);
|
|
1606
|
+
} else {
|
|
1607
|
+
resolve();
|
|
1572
1608
|
}
|
|
1573
|
-
}
|
|
1609
|
+
});
|
|
1610
|
+
}
|
|
1574
1611
|
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
var featuresDefault = (
|
|
1578
|
-
typeof Symbol !== 'undefined'
|
|
1579
|
-
)
|
|
1580
|
-
var featuresCustom = true;
|
|
1612
|
+
Manager.prototype.log = function() {
|
|
1613
|
+
var self = this;
|
|
1581
1614
|
|
|
1582
|
-
|
|
1583
|
-
|
|
1615
|
+
if (self.isDevelopment()) {
|
|
1616
|
+
// 1. Convert args to a normal array
|
|
1617
|
+
var args = Array.prototype.slice.call(arguments);
|
|
1618
|
+
|
|
1619
|
+
// 2. Prepend log prefix log string
|
|
1620
|
+
args.unshift('[DEV @ ' + new Date().toLocaleTimeString() + ']');
|
|
1621
|
+
|
|
1622
|
+
// 3. Pass along arguments to console.log
|
|
1623
|
+
if (args[1] === 'error') {
|
|
1624
|
+
args.splice(1,1);
|
|
1625
|
+
console.error.apply(console, args);
|
|
1626
|
+
} else if (args[1] === 'warn') {
|
|
1627
|
+
args.splice(1,1);
|
|
1628
|
+
console.warn.apply(console, args);
|
|
1629
|
+
} else if (args[1] === 'log') {
|
|
1630
|
+
args.splice(1,1);
|
|
1631
|
+
console.log.apply(console, args);
|
|
1584
1632
|
} else {
|
|
1585
|
-
|
|
1586
|
-
.then(function() {
|
|
1587
|
-
cb();
|
|
1588
|
-
})
|
|
1633
|
+
console.log.apply(console, args);
|
|
1589
1634
|
}
|
|
1590
|
-
|
|
1591
1635
|
}
|
|
1636
|
+
}
|
|
1592
1637
|
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1638
|
+
function init_loadPolyfills(self, configuration, cb) {
|
|
1639
|
+
// https://github.com/jquintozamora/polyfill-io-feature-detection/blob/master/index.js
|
|
1640
|
+
var featuresDefault = (
|
|
1641
|
+
typeof Symbol !== 'undefined'
|
|
1642
|
+
)
|
|
1643
|
+
var featuresCustom = true;
|
|
1644
|
+
|
|
1645
|
+
if (featuresDefault && featuresCustom) {
|
|
1646
|
+
cb();
|
|
1647
|
+
} else {
|
|
1648
|
+
loadScript({src: 'https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?flags=always%2Cgated&features=default%2Ces5%2Ces6%2Ces7%2CPromise.prototype.finally%2C%7Ehtml5-elements%2ClocalStorage%2Cfetch%2CURLSearchParams'})
|
|
1649
|
+
.then(function() {
|
|
1650
|
+
cb();
|
|
1651
|
+
})
|
|
1598
1652
|
}
|
|
1599
1653
|
|
|
1600
|
-
|
|
1601
|
-
* STORAGE
|
|
1602
|
-
*/
|
|
1603
|
-
Manager.prototype.storage = function() {
|
|
1604
|
-
return storage;
|
|
1605
|
-
}
|
|
1654
|
+
}
|
|
1606
1655
|
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1656
|
+
/**
|
|
1657
|
+
* UTILITIES
|
|
1658
|
+
*/
|
|
1659
|
+
Manager.prototype.utilities = function() {
|
|
1660
|
+
return utilities;
|
|
1661
|
+
}
|
|
1613
1662
|
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1663
|
+
/**
|
|
1664
|
+
* STORAGE
|
|
1665
|
+
*/
|
|
1666
|
+
Manager.prototype.storage = function() {
|
|
1667
|
+
return storage;
|
|
1668
|
+
}
|
|
1620
1669
|
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1670
|
+
/**
|
|
1671
|
+
* QUERIES
|
|
1672
|
+
*/
|
|
1673
|
+
// Manager.prototype.query = function() {
|
|
1674
|
+
// return query;
|
|
1675
|
+
// }
|
|
1676
|
+
|
|
1677
|
+
/**
|
|
1678
|
+
* DOM OPERATIONS
|
|
1679
|
+
*/
|
|
1680
|
+
Manager.prototype.dom = function() {
|
|
1681
|
+
return dom;
|
|
1682
|
+
}
|
|
1683
|
+
|
|
1684
|
+
/**
|
|
1685
|
+
* ACCOUNT
|
|
1686
|
+
*/
|
|
1687
|
+
// Manager.prototype.account = function() {
|
|
1688
|
+
// var self = this;
|
|
1689
|
+
// return {
|
|
1690
|
+
// resolve: function (options) {
|
|
1691
|
+
// return import('./lib/account.js')
|
|
1692
|
+
// .then(function(mod) {
|
|
1693
|
+
// self.account = function () { return mod.default }
|
|
1694
|
+
// return self.account().resolve(options);
|
|
1695
|
+
// })
|
|
1696
|
+
// }
|
|
1697
|
+
// }
|
|
1698
|
+
// }
|
|
1699
|
+
|
|
1700
|
+
Manager.prototype.account = function() {
|
|
1701
|
+
var self = this;
|
|
1702
|
+
|
|
1703
|
+
return {
|
|
1704
|
+
import: function () {
|
|
1705
|
+
return import('./lib/account.js')
|
|
1706
|
+
.then(function(mod) {
|
|
1707
|
+
self.account = function () { return mod.default }
|
|
1708
|
+
mod.default.prototype.Manager = self;
|
|
1709
|
+
return self.account();
|
|
1710
|
+
})
|
|
1649
1711
|
}
|
|
1650
1712
|
}
|
|
1713
|
+
}
|
|
1651
1714
|
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1715
|
+
// Manager.prototype.fetch = function(url, options) {
|
|
1716
|
+
// var response = {
|
|
1717
|
+
// status: 500,
|
|
1718
|
+
// };
|
|
1719
|
+
// return new Promise(function(resolve, reject) {
|
|
1720
|
+
// fetch(url, options)
|
|
1721
|
+
// .then(function (res) {
|
|
1722
|
+
// response = res;
|
|
1723
|
+
// if (res.status >= 200 && res.status < 300) {
|
|
1724
|
+
// return resolve({response: res});
|
|
1725
|
+
// } else {
|
|
1726
|
+
// return res.text()
|
|
1727
|
+
// .then(function (data) {
|
|
1728
|
+
// throw new Error(data || res.statusTest || 'Unknown error.')
|
|
1729
|
+
// })
|
|
1730
|
+
// }
|
|
1731
|
+
// })
|
|
1732
|
+
// .catch(function (e) {
|
|
1733
|
+
// return reject({response: response, error: e});
|
|
1734
|
+
// });
|
|
1735
|
+
// });
|
|
1736
|
+
// }
|
|
1737
|
+
|
|
1738
|
+
// Manager.prototype.ajax = function() {
|
|
1739
|
+
// return ajax;
|
|
1740
|
+
// }
|
|
1678
1741
|
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
}
|
|
1742
|
+
/**
|
|
1743
|
+
* OTHER
|
|
1744
|
+
*/
|
|
1745
|
+
// Manager.prototype.performance = function() {
|
|
1746
|
+
// var supported = ('performance' in window);
|
|
1747
|
+
// return {
|
|
1748
|
+
// mark: function(mark) {
|
|
1749
|
+
// if (!supported) {return};
|
|
1750
|
+
// window.performance.mark(mark);
|
|
1751
|
+
// }
|
|
1752
|
+
// }
|
|
1753
|
+
// }
|
|
1754
|
+
Manager.prototype.performance = function () {
|
|
1755
|
+
return {
|
|
1756
|
+
mark: function(mark) {
|
|
1757
|
+
try {
|
|
1758
|
+
window.performance.mark(mark);
|
|
1759
|
+
} catch (e) {
|
|
1698
1760
|
}
|
|
1699
1761
|
}
|
|
1700
1762
|
}
|
|
1763
|
+
}
|
|
1701
1764
|
|
|
1702
|
-
|
|
1703
|
-
|
|
1765
|
+
Manager.prototype.isValidRedirectUrl = function (url) {
|
|
1766
|
+
var self = this;
|
|
1704
1767
|
|
|
1705
|
-
|
|
1706
|
-
|
|
1768
|
+
var returnUrlObject = new URL(decodeURIComponent(url));
|
|
1769
|
+
var currentUrlObject = new URL(window.location.href);
|
|
1707
1770
|
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1771
|
+
return returnUrlObject.host === currentUrlObject.host
|
|
1772
|
+
|| returnUrlObject.protocol === this.properties.global.app + ':'
|
|
1773
|
+
|| self.properties.global.validRedirectHosts.includes(returnUrlObject.host)
|
|
1774
|
+
}
|
|
1712
1775
|
|
|
1713
|
-
|
|
1714
|
-
|
|
1776
|
+
Manager.prototype.isDevelopment = function () {
|
|
1777
|
+
var self = this;
|
|
1715
1778
|
|
|
1716
|
-
|
|
1717
|
-
|
|
1779
|
+
return self.properties.meta.environment === 'development';
|
|
1780
|
+
}
|
|
1718
1781
|
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1782
|
+
// Manager.prototype.performance = function() {
|
|
1783
|
+
// var self = this;
|
|
1784
|
+
//
|
|
1785
|
+
// return {
|
|
1786
|
+
// mark2: function () {
|
|
1787
|
+
// return firebaseActive ? !!firebase.auth().currentUser : false;
|
|
1788
|
+
// },
|
|
1789
|
+
//
|
|
1790
|
+
// }
|
|
1791
|
+
// }
|
|
1729
1792
|
|
|
1730
1793
|
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1794
|
+
/**
|
|
1795
|
+
* HELPERS
|
|
1796
|
+
*/
|
|
1734
1797
|
|
|
1735
1798
|
module.exports = Manager;
|