PageSourceSearch

https://www.keyence.co.jp/js/core/analytics-views-kj.js?var=20260930101249

js keyence.co.jp collected 2026-10-02 03:04:14 UTC 48,565 bytes, 1,384 lines download raw bytes

1(function (win, doc, $) {
2    'use strict';
3
4    win.AnalyticsViews = {};
5
6    win.AnalyticsViews.Utility = {};
7
8    win.AnalyticsViews.Utility.Location = (function () {
9        var Location = {};
10
11        Location.matchPathname = function (patternList) {
12            var len = patternList.length;
13            var i;
14            var pathname = win.location.pathname;
15            var pattern;
16            var result = false;
17
18            for (i = 0; i < len; i++) {
19                pattern = new RegExp(patternList[i]);
20
21                if (pattern.test(pathname)) {
22                    result = true;
23
24                    break;
25                }
26            }
27
28            return result;
29        };
30
31        Location.getDomain = function () {
32            return win.location.protocol + '//' + win.location.hostname;
33        };
34
35        return Location;
36    }());
37
38    win.AnalyticsViews.Utility.Form = (function () {
39        var Form = {};
40
41        Form.getLabelPrefix = function () {
42            var FormFilter = null;
43            var isRootElement = null;
44            var prefix = '';
45            var formType = '';
46            var formSignInType = '';
47
48            if (!win.KeyenceForm) {
49                return prefix;
50            }
51
52            FormFilter = win.KeyenceForm.FormFilter;
53            isRootElement = FormFilter.General.checkRootElement();
54
55            if (!isRootElement) {
56                prefix = 'ready-'
57            } else {
58                formType = FormFilter.General.getFormType();
59                formSignInType = FormFilter.SignIn.getFormType();
60
61                if (formType === FormFilter.General.FORM_TYPE.MOBILE_NUMBER) {
62                    if (formSignInType === FormFilter.SignIn.FORM_TYPE.ASU) {
63                        prefix = 'asu-';
64                    } else {
65                        prefix = 'mobile-';
66                    }
67                } else if (formType === FormFilter.General.FORM_TYPE.EMAIL) {
68                    if (formSignInType === FormFilter.SignIn.FORM_TYPE.ASU) {
69                        prefix = 'asu-';
70                    } else {
71                        prefix = 'email-';
72                    }
73                }
74            }
75
76            return prefix;
77        };
78
79        Form.setInitialScreenName = function ($formRoot, formCategory, noticeFunction) {
80            var initialScreenName = '';
81            var formWrapper = doc.querySelector('.js-checkCurrentFormScreen');
82
83            if (!formWrapper || !$formRoot.length) {
84                return;
85            }
86
87            initialScreenName = formWrapper.dataset.currentScreenName;
88
89            if (initialScreenName) {
90                noticeFunction.noticeScreenName(
91                    initialScreenName,
92                    formCategory
93                );
94            }
95        };
96
97        Form.attachCurrentScreenObserver = function ($formRoot, formCategory, noticeFunction) {
98            var target = doc.querySelector('.js-checkCurrentFormScreen');
99            var observer = null;
100            var observerConfig = {
101                attributes: true
102            };
103            var screenName = '';
104
105            if (!target || !$formRoot.length) {
106                return;
107            }
108
109            observer = new MutationObserver(function (record) {
110                if (record[0].target === target && record[0].attributeName === 'data-current-screen-name') {
111                    screenName = record[0].target.dataset.currentScreenName;
112
113                    if (!screenName) {
114                        return;
115                    }
116
117                    noticeFunction.noticeScreenName(
118                        screenName,
119                        formCategory
120                    );
121                }
122            });
123
124            observer.observe(target, observerConfig);
125        };
126
127        return Form;
128    }());
129
130    win.AnalyticsViews.Utility.messageNames = (function () {
131        return {
132            backLink: 'backLink',
133            nextForm: 'nextForm',
134            generalForm: 'generalForm',
135            forwardLink: 'forwardLink',
136        };
137    }());
138
139    win.AnalyticsViews.MultiStepForm = (function () {
140        var Utility = win.AnalyticsViews.Utility;
141
142        var idNames = {
143            regArea: 'suz_regArea',
144            root: 'js-multiStepForm',
145            backEmail: 'js-regForm-btnBackToEmail',
146            backEmailSignIn: 'js-signinForm-btnBackToEmail',
147            backMobileSignIn: 'js-signinForm-btnBackToMobile',
148            backMobileRegister: 'js-regForm-btnBackToMobile',
149            preForm: 'js-multiStepForm-signinOrRegister',
150            signin: 'js-multiStepForm-signin',
151            registration: 'js-multiStepForm-registration',
152            loginPassword: 'loginPassword',
153            pwdAssistanceLink: 'suz-pwdAssistanceLink',
154            countryNumber: 'checkCountryNumber',
155            showNextButton: 'js-form-btnCheckRegistered',
156            mobileTag: 'js-formFilterGeneral-mobileNumber',
157            emailTag: 'js-formFilterGeneral-email',
158            changeEmail: 'js-formDescriptionFilter-email',
159            sendVerificationEmailButton: 'js-form-btnCheckSendMail',
160            backSignIn: 'js-sendEmail-btnBackToSignin',
161            backAutoSignUp: 'js-sendEmail-btnBackToAutoSignup',
162            forwardRegister: 'js-signinForm-btnForwardToRegister',
163            sendVerificationAutoSignUpEmailButton: 'js-form-btnCheckSendAutoSignupMail',
164        };
165
166        var classNames = {
167            btnPrev: 'js-regForm-btnPrevious',
168            btnNext: 'js-regForm-btnNext',
169            formGroup: 'form-utilityGroup',
170            formGroupJsr: 'm-form-layout__item',
171            errorText: 'suz_errorMsg',
172            regPanel: 'js-multiStep-target',
173            regError: 'is-register-error',
174            regFlat: 'is-register-flat',
175            isCurrent: 'is-current',
176        };
177
178        var MultiStepForm = function () {
179            this.analytics = new win.KeyenceAnalytics.Form();
180            this.$rootElement = null;
181            this.observers = {
182                errText: null,
183                filled: null,
184            };
185        };
186
187        MultiStepForm.prototype.init = function () {
188            var self = this;
189
190            self.$rootElement = $('#' + idNames.root);
191
192            if (!self.$rootElement.length) {
193                return;
194            }
195
196            self.trackInputErrorAll();
197            self.attachTrackFocus();
198            self.attachTrackClickInput();
199            self.attachTrackPrevious();
200            self.attachTrackNext();
201            self.attachTrackClickLink();
202
203            self.observers.errText = self.attachInputErrorObserver();
204            self.observers.filled = self.attachFilledFieldObserver();
205
206            self.attachRegFormObserver(function () {
207                if (self.observers.errText) {
208                    self.observers.errText.disconnect();
209                }
210
211                if (self.observers.filled) {
212                    self.observers.filled.disconnect();
213                }
214
215                self.attachInputErrorObserver();
216                self.attachFilledFieldObserver();
217            });
218
219            Utility.Form.setInitialScreenName(self.$rootElement, 'signin', self.analytics);
220            Utility.Form.attachCurrentScreenObserver(self.$rootElement, 'signin', self.analytics);
221        };
222
223        MultiStepForm.prototype.attachTrackFocus = function () {
224            var self = this;
225            var selector = 'input, select';
226            var targetIds = [
227                idNames.countryNumber,
228            ];
229            var isRootElement = null;
230            var firstFocusElement = document.activeElement;
231
232            if (win.KeyenceForm) {
233                isRootElement = win.KeyenceForm.FormFilter.General.checkRootElement();
234            }
235
236            self.$rootElement.on('focus', selector, function () {
237                self.noticeFocusEvent(this);
238            });
239
240            if (isRootElement
241                && firstFocusElement
242                && win.MultiStepForm
243                && win.MultiStepForm.isFirstFocus
244            ) {
245                if (firstFocusElement.tagName === 'INPUT' || firstFocusElement.tagName === 'SELECT') {
246                    self.analytics.noticeEvent(
247                        self.analytics.getEventType('SIGNIN_FOCUS'),
248                        firstFocusElement,
249                        'ready-'
250                    );
251                }
252            }
253        };
254
255        MultiStepForm.prototype.noticeFocusEvent = function (element) {
256            var self = this;
257            var FormSignIn = null;
258            var prefix = '';
259
260            if (element && self.isElementVisible(element)) {
261                // When you click the back link on the auto signup screen, the country number on the login screen is focused, so give it a mobile prefix instead of auto signup prefix.
262                if (win.KeyenceForm) {
263                    FormSignIn = win.KeyenceForm.FormFilter.SignIn;
264
265                    if (element.id === idNames.countryNumber && FormSignIn.getFormType() === FormSignIn.FORM_TYPE.ASU) {
266                        prefix = 'mobile-';
267                    } else {
268                        prefix = Utility.Form.getLabelPrefix();
269                    }
270                } else {
271                    prefix = Utility.Form.getLabelPrefix();
272                }
273
274                self.analytics.noticeEvent(
275                    self.analytics.getEventType('SIGNIN_FOCUS'),
276                    element,
277                    prefix
278                );
279            }
280        };
281
282        MultiStepForm.prototype.attachTrackClickInput = function () {
283            var self = this;
284            var selector = 'button, input';
285            var targetIds = [
286                idNames.backEmail,
287                idNames.backEmailSignIn,
288                idNames.backMobileSignIn,
289                idNames.backMobileRegister,
290                idNames.sendVerificationEmailButton,
291                idNames.backSignIn,
292                idNames.backAutoSignUp,
293                idNames.sendVerificationAutoSignUpEmailButton,
294            ];
295            var backLinkIds = [
296                idNames.backEmailSignIn,
297                idNames.backMobileSignIn,
298            ];
299            var showNextIds = [
300                idNames.showNextButton,
301            ];
302            var generalIds = [
303                idNames.mobileTag,
304                idNames.emailTag,
305                idNames.changeEmail,
306            ];
307            var forwardIds = [
308                idNames.forwardRegister,
309            ];
310
311            targetIds.forEach(function (id) {
312                selector += ', #' + id;
313            });
314
315            self.$rootElement.on('click', selector, function () {
316                var element = this;
317
318                if ((element && self.isRegisterPanelVisible(element)) || targetIds.includes(element.i
318d)) {
319                    self.analytics.noticeEvent(
320                        self.analytics.getEventType('SIGNIN_CLICK'),
321                        element,
322                        Utility.Form.getLabelPrefix()
323                    );
324
325                    if (backLinkIds.includes(element.id)) {
326                        win.postMessage(Utility.messageNames.backLink, Utility.Location.getDomain());
327                    } else if (showNextIds.includes(element.id)) {
328                        win.postMessage(Utility.messageNames.nextForm, Utility.Location.getDomain());
329                    } else if (generalIds.includes(element.id)) {
330                        win.postMessage(Utility.messageNames.generalForm, Utility.Location.getDomain());
331                    } else if (forwardIds.includes(element.id)) {
332                        win.postMessage(Utility.messageNames.forwardLink, Utility.Location.getDomain());
333                    }
334                }
335            });
336        };
337
338        MultiStepForm.prototype.attachTrackClickLink = function () {
339            var self = this;
340            var selector = 'a:not(#' + idNames.pwdAssistanceLink + ')';
341
342            self.$rootElement.on('click', selector, function () {
343                var element = this;
344
345                if (element && !self.isRegisterationPagination(this)) {
346                    self.analytics.noticeEvent(
347                        self.analytics.getEventType('SIGNIN_CLICK'),
348                        element,
349                        Utility.Form.getLabelPrefix()
350                    );
351                }
352            });
353        };
354
355        MultiStepForm.prototype.attachTrackPrevious = function () {
356            var self = this;
357            var selector = '.' + classNames.btnPrev;
358
359            self.$rootElement.on('mousedown keydown touchend', selector, function () {
360                var element = this;
361
362                if (element) {
363                    self.analytics.noticeEvent(
364                        self.analytics.getEventType('SIGNIN_CLICK'),
365                        element,
366                        Utility.Form.getLabelPrefix()
367                    );
368                }
369            });
370        };
371
372        MultiStepForm.prototype.attachTrackNext = function () {
373            var self = this;
374            var selector = '.' + classNames.btnNext;
375
376            self.$rootElement.on('mousedown keydown touchend', selector, function () {
377                var element = this;
378
379                if (element) {
380                    self.analytics.noticeEvent(
381                        self.analytics.getEventType('SIGNIN_CLICK'),
382                        element,
383                        Utility.Form.getLabelPrefix()
384                    );
385                }
386            });
387        };
388
389        MultiStepForm.prototype.attachRegFormObserver = function (handler) {
390            var obs;
391
392            if (typeof handler !== 'function') {
393                return null;
394            }
395
396            obs = new MutationObserver(handler);
397
398            obs.observe(doc.getElementById(idNames.regArea), {
399                childList: true,
400            });
401
402            return obs;
403        };
404
405        MultiStepForm.prototype.attachInputErrorObserver = function () {
406            var self = this;
407            var obs;
408            var callback;
409            var selector = '.' + classNames.formGroup + ' .' + classNames.errorText + ', .' + classNames.formGroupJsr + ' .' + classNames.errorText;
410
411            callback = function (records) {
412                var $target = $(self.getObservationTarget(records));
413                var $parentElement;
414
415                if ($target && $target.length) {
416                    $parentElement = $target.parents('.' + classNames.formGroup);
417
418                    if (!$parentElement.length) {
419                        $parentElement = $target.parents('.' + classNames.formGroupJsr);
420                    }
421                }
422
423                if ($parentElement && $parentElement.length) {
424                    self.trackInputError($parentElement.get(0));
425                }
426            };
427
428            obs = new MutationObserver(callback);
429
430            self.$rootElement.find(selector).each(function () {
431                obs.observe(this, {
432                    childList: true,
433                });
434            });
435
436            return obs;
437        };
438
439        MultiStepForm.prototype.isRegisterationPagination = function (element) {
440            var result = false;
441
442            if (!element) {
443                return result;
444            }
445
446            if (
447                element.classList.contains(classNames.btnNext) ||
448                element.classList.contains(classNames.btnPrev)
449            ) {
450                result = true;
451            }
452
453            return result;
454        };
455
456        MultiStepForm.prototype.getObservationTarget = function (records) {
457            var target = null;
458            var $recordItem = null;
459            var editedRecordsArray = [];
460            var i = 0;
461
462            if (records.length >= 2) {
463                for (i; i < records.length; i++) {
464                    $recordItem = $(records[i].target);
465
466                    if ($recordItem.is(':visible')) {
467                        editedRecordsArray.push(records[i]);
468                    }
469                }
470
471                records = editedRecordsArray;
472            }
473
474            if (Array.isArray(records) && (records[0] && records[0].target)) {
475                target = records[0].target;
476            }
477
478            return target;
479        };
480
481        MultiStepForm.prototype.trackInputErrorAll = function () {
482            var self = this;
483            var $formGroups = this.$rootElement.find('.' + classNames.formGroup + ', .' + classNames.formGroupJ
483sr);
484
485            if ($formGroups.length) {
486                $formGroups.each(function () {
487                    self.trackInputError(this);
488                });
489            }
490        };
491
492        MultiStepForm.prototype.trackInputError = function (formGroupElement) {
493            var self = this;
494            var $formGroup;
495            var $errorText;
496            var $targetElement;
497            var element;
498            var inputSelector = 'input, select';
499            var eventType = '';
500            var tagName = '';
501            var isInputField = false;
502            var inputField = null;
503
504            if (!formGroupElement) {
505                return;
506            }
507
508            $formGroup = $(formGroupElement);
509            $errorText = $formGroup.find('.' + classNames.errorText);
510
511            if ($errorText.length
512                && $errorText.text().length
513                && self.isElementVisible(formGroupElement)) {
514                $targetElement = $formGroup.find('#' + idNames.loginPassword);
515
516                if (!$targetElement.length) {
517                    $targetElement = $formGroup.find(inputSelector);
518                }
519            }
520
521            if (!$targetElement || !$targetElement.length) {
522                return;
523            }
524
525            element = $targetElement.get(0);
526
527            if (!element) {
528                return;
529            }
530
531            if ($formGroup.hasClass('is-unavailable')) {
532                eventType = 'SIGNIN_VALIDATE_ERROR';
533            } else if ($targetElement.length >= 2) {
534                $targetElement.each(function () {
535                    if (this.tagName === 'INPUT') {
536                        isInputField = true;
537                        inputField = this;
538
539                        return false;
540                    }
541                });
542
543                if (isInputField && inputField.value === '') {
544                    eventType = 'SIGNIN_BLANK_ERROR';
545                } else {
546                    eventType = 'SIGNIN_ERROR';
547                }
548            } else if ($targetElement.length === 1) {
549                tagName = $targetElement.get(0).tagName;
550
551                if ((tagName === 'INPUT' && $targetElement.get(0).value === '')
552                    || tagName === 'SELECT') {
553                    eventType = 'SIGNIN_BLANK_ERROR';
554                } else {
555                    eventType = 'SIGNIN_ERROR';
556                }
557            }
558
559            self.analytics.noticeEvent(
560                self.analytics.getEventType(eventType),
561                element,
562                Utility.Form.getLabelPrefix()
563            );
564        };
565
566        MultiStepForm.prototype.isRegisterElement = function (element) {
567            var $element = $(element);
568
569            if ($element.length && $element.parents('.' + classNames.regPanel).length) {
570                return true;
571            }
572
573            return false;
574        };
575
576        MultiStepForm.prototype.isRegisterPanelVisible = function (element) {
577            var $element = $(element);
578            var $regPanel;
579            var result;
580
581            if (!$element || !$element.length) {
582                return false;
583            }
584
585            if (this.isRegisterElement($element)) {
586                $regPanel = $element.parents('.' + classNames.regPanel);
587
588                if ($('#' + idNames.registration).hasClass(classNames.regFlat)) {
589                    result = true;
590                } else {
591                    if ($regPanel.hasClass(classNames.isCurrent)) {
592                        result = true;
593                    } else {
594                        result = false;
595                    }
596                }
597
598                return result;
599            }
600
601            return $element.is(':visible');
602        };
603
604        MultiStepForm.prototype.isElementVisible = function (element) {
605            var $element = $(element);
606
607            if (!$element || !$element.length) {
608                return false;
609            }
610
611            if (!$element.is(':visible')
612                || $element.css('visibility') !== 'visible'
613                || $element.css('opacity') === '0') {
614                return false;
615            }
616
617            return true;
618        };
619
620        MultiStepForm.prototype.attachFilledFieldObserver = function () {
621            var self = this;
622            var targets = doc.querySelectorAll('.js-validateValue-root');
623            var observer = null;
624            var observerConfig = {
625                attributeFilter: ['class'],
626                attributeOldValue: true,
627            };
628            var field = null;
629
630            if (!targets.length) {
631                return;
632            }
633
634            observer = new MutationObserver(function (record) {
635                if (record[0].target.classList.contains('is-field-valid') &&
636                    !record[0].target.classList.contains('is-error') &&
637                    !record[0].oldValue.includes('is-field-valid')
638                ) {
639                    field = record[0].target.querySelector('.js-validateValue-target');
640
641                    if (!field) {
642                        return;
643                    }
644
645                    self.analytics.noticeFilledFieldName(
646                        field,
647                        self.analytics.getEventType('SIGNIN_FILLED'),
648                    );
649                }
650            });
651
652            targets.forEach(function (target) {
653                observer.observe(target, observerConfig);
654            });
655
656            return observer;
657        };
658
659        return MultiStepForm;
660    }());
661
662    win.AnalyticsViews.PasswordAssistance = (function () {
663        var Utility = win.AnalyticsViews.Utility;
664
665        var idNames = {
666            emailAddress: 'js-reset-EmailAddress',
667            sendEmail: 'js-reset-sendMail',
668            histBackPwd: 'js-reset-histBackPwd',
669            pwdJsr: 'js-reset-Pwd',
670            pwd: 'suz_password',
671            resetPwd: 'suz_confirmPassword',
672            editPwd: 'js-reset-editPwd',
673            mobileNumber: 'remindMobileNumber',
674            verificationCode: 'remindVerificationCode',
675            showPassword: 'resetPassword-showPassword',
676            mobileTag: 'js-formFilterGeneral-mobileNumber',
677            emailTag: 'js-formFilterGeneral-email',
678            getVerificationCode: 'remindVerificationCode-getCode',
679        };
680
681        var classNames = {
682            isError: 'is-error',
683            formGroup: 'form-utilityGroup',
684            formGroupJsr: 'm-form-layout__item',
685            errorText: 'suz_errorMsg',
686        };
687
688        var names = {
689            passwordAssistanceActionForm: 'user_passwordAssistanceActionForm',
690            passwordAssistanceResetActionForm: 'user_passwordAssistance_resetPasswordActionForm',
691        };
692
693        var PasswordAssistance = function () {
694            this.analytics = new win.KeyenceAnalytics.Form();
695            this.urlPatternList = [
696                /^\/user\/passwordAssistance\//,
697                /^\/user\/passwordAssistance\/resetPassword\//,
698            ];
699            this.$form = null;
700        };
701
702        PasswordAssistance.prototype.init = function () {
703            var self = this;
704
705            self.$form = $('form[name="' + names.passwordAssistanceActionForm + '"]');
706            self.$resetForm = $('form[name="' + names.passwordAssistanceResetActionForm + '"]');
707
708            if (!this.canStartTracking()) {
709                return;
710            }
711
712            self.trackInputErrorAll();
713            self.attachTrackFocusEvent();
714            self.attachTrackClickEvent();
715            self.attachTrackErrorEvent();
716            self.attachInputErrorObserver();
717            self.attachFilledFieldObserver();
718
719            Utility.Form.setInitialScreenName(self.$form, 'reset', self.analytics);
720            Utility.Form.attachCurrentScreenObserver(self.$form, 'reset', self.analytics);
721        };
722
723        PasswordAssistance.prototype.canStartTracking = function () {
724            var len = this.urlPatternList.length;
725            var i;
726            var pathname = win.location.pathname;
727            var pattern;
728            var result = false;
729
730            for (i = 0; i < len; i++) {
731                pattern = new RegExp(this.urlPatternList[i]);
732
733                if (pattern.test(pathname)) {
734                    result = true;
735
736                    break;
737                }
738            }
739
740            return result;
741        };
742
743        PasswordAssistance.prototype.attachTrackFocusEvent = function () {
744            var self = this;
745            var selector = [
746                '#' + idNames.emailAddress,
747                '#' + idNames.pwdJsr,
748                '#' + idNames.pwd,
749                '#' + idNames.resetPwd,
750                '#' + idNames.mobileNumber,
751                '#' + idNames.verificationCode,
752            ].join(', ');
753            var elements = document.querySelectorAll(selector);
754            var isRootElement = null;
755            var firstFocusElement = document.activeElement;
756
757            if (win.KeyenceForm) {
758                isRootElement = win.KeyenceForm.FormFilter.General.checkRootElement();
759            }
760
761            Array.prototype.forEach.call(elements, function (elm) {
762                elm.addEventListener('focus', function () {
763                    self.noticeFocusEvent(this);
764                });
765            });
766
767            if (isRootElement
768                && firstFocusElement
769                && win.KeyenceForm.filledFieldValidator.config.isFirstFocus
770            ) {
771                if (firstFocusElement.tagName === 'INPUT' || firstFocusElement.tagName === 'SELECT') {
772                    self.analytics.noticeEvent(
773                        self.analytics.getEventType('RESET_FOCUS'),
774                        firstFocusElement,
775                        'ready-'
776                    );
777                }
778            }
779        };
780
781        PasswordAssistance.prototype.noticeFocusEvent = function (element) {
782            var self = this;
783
784            if (!self.isElementVisible(element)) {
785                return;
786            }
787
788            self.analytics.noticeEvent(
789                self.analytics.getEventType('RESET_FOCUS'),
790                element,
791                Utility.Form.getLabelPrefix()
792            );
793        };
794
795        PasswordAssistance.prototype.attachTrackClickEvent = function () {
796            var self = this;
797            var selector = [
798                '#' + idNames.sendEmail,
799                '#' + idNames.histBackPwd,
800                '#' + idNames.editPwd,
801                '#' + idNames.showPassword,
802                '#' + idNames.mobileTag,
803                '#' + idNames.emailTag,
804                '#' + idNames.getVerificationCode,
805            ].join(', ');
806            var elements = document.querySelectorAll(selector);
807            var generalIds = [
808                idNames.mobileTag,
809                idNames.emailTag,
810            ];
811
812            Array.prototype.forEach.call(elements, function (elm) {
813                elm.addEventListener('click', function () {
814                    self.analytics.noticeEvent(
815                        self.analytics.getEventType('RESET_CLICK'),
816                        elm,
817                        Utility.Form.getLabelPrefix()
818                    );
819
820                    if (generalIds.includes(elm.id)) {
821                        win.postMessage(Utility.messageNames.generalForm, Utility.Location.getDomain());
822                    }
823                });
824            });
825        };
826
827        PasswordAssistance.prototype.attachTrackErrorEvent = function () {
828            var self = this;
829            var selector = [
830                '#' + idNames.emailAddress,
831                '#' + idNames.pwd,
832            ].join(', ');
833            var elements = document.querySelectorAll(selector);
834
835            Array.prototype.forEach.call(elements, function (elm) {
836                var formCol = elm.parentNode;
837                var errorBall;
838
839                if (formCol.classList.contains('form_col')) {
840                    errorBall = formCol.nextElementSibling;
841                }
842
843                if (errorBall && errorBall.classList.contains('ErrorBall')) {
844                    self.analytics.noticeEvent(self.analytics.getEventType('RESET_ERROR'), elm);
845                }
846            });
847        };
848
849        PasswordAssistance.prototype.attachRegFormObserver = function (handler) {
850            var obs;
851
852            if (typeof handler !== 'function') {
853                return null;
854            }
855
856            obs = new MutationObserver(handler);
857
858            obs.observe(this.$form.get(0), {
859                childList: true,
860            });
861
862            return obs;
863        };
864
865        PasswordAssistance.prototype.attachInputErrorObserver = function () {
866            var self = this;
867            var obs;
868            var callback;
869            var selector = '.' + classNames.formGroup + ' .' + classNames.errorText + ', .' + classNames.formGroupJsr + ' .' + classNames.errorText;
870
871            callback = function (records) {
872                var $target = $(self.getObservationTarget(records));
873                var $parentElement;
874
875                if ($target && $target.length) {
876                    $parentElement = $target.parents('.' + classNames.formGroup);
877
878                    if (!$parentElement.length) {
879                        $parentElement = $target.parents('.' + classNames.formGroupJsr);
880                    }
881                }
882
883                if ($parentElement && $parentElement.length) {
884                    self.trackInputError($parentElement.get(0));
885                }
886            };
887
888            obs = new MutationObserver(callback);
889
890            if (self.$form.length) {
891                self.$form.find(selector).each(function () {
892                    obs.observe(this, {
893                        childList: true,
894                    });
895                });
896            } else if (self.$resetForm.length) {
897                self.$resetForm.find(selector).each(function () {
898                    obs.observe(this, {
899                        childList: true,
900                    });
901                });
902            }
903
904            return obs;
905        };
906
907        PasswordAssistance.prototype.getObservationTarget = function (records) {
908            var target = null;
909
910            if (Array.isArray(records) && (records[0] && records[0].target)) {
911                target = records[0].target;
912            }
913
914            return target;
915        };
916
917        PasswordAssistance.prototype.trackInputErrorAll = function () {
918            var self = this;
919            var $formGroups = this.$form.find('.' + classNames.formGroup + ', .' + classNames.formGroupJsr);
920            var $resetFormGroups = this.$resetForm.find('.' + classNames.formGroup + ', .' + classNames.formGroupJsr);
921
922            if ($formGroups.length) {
923                $formGroups.each(function () {
924                    self.trackInputError(this);
925                });
926            } else if ($resetFormGroups.length) {
927                $resetFormGroups.each(function () {
928                    self.trackInputError(this);
929                });
930            }
931        };
932
933        PasswordAssistance.prototype.trackInputError = function (formGroupElement) {
934            var self = this;
935            var $formGroup;
936            var $errorText;
937            var $targetElement;
938            var element;
939            var inputSelector = 'input, select';
940            var eventType = '';
941            var tagName = '';
942
943            if (!formGroupElement) {
944                return;
945            }
946
947            $formGroup = $(formGroupElement);
948            $errorText = $formGroup.find('.' + classNames.errorText);
949
950            if ($errorText.is(':visible')
951                && $errorText.text().length
952                && self.isElementVisible(formGroupElement)) {
953                $targetElement = $formGroup.find('#' + idNames.pwdJsr);
954
955                if (!$targetElement.length) {
956                    $targetElement = $formGroup.find(inputSelector);
957                }
958            }
959
960            if ($targetElement && $targetElement.length) {
961                element = $targetElement.get(0);
962
963                if ($formGroup.hasClass('is-unavailable')) {
964                    eventType = 'RESET_VALIDATE_ERROR';
965                } else if ($targetElement.length === 1) {
966                    tagName = element.tagName;
967
968                    if ((tagName === 'INPUT' && element.value === '')
969                        || tagName === 'SELECT') {
970                        eventType = 'RESET_BLANK_ERROR';
971                    } else {
972                        eventType = 'RESET_ERROR';
973                    }
974                }
975
976                if (element) {
977                    self.analytics.noticeEvent(
978                        self.analytics.getEventType(eventType),
979                        element,
980                        Utility.Form.getLabelPrefix()
981                    );
982                }
983            }
984        };
985
986        PasswordAssistance.prototype.isElementVisible = function (element) {
987            var $element = $(element);
988
989            if (!$element || !$element.length) {
990                return false;
991            }
992
993            if (!$element.is(':visible')
994                || $element.css('visibility') !== 'visible'
995                || $element.css('opacity') === '0') {
996                return false;
997            }
998
999            return true;
1000        };
1001
1002        PasswordAssistance.prototype.attachFilledFieldObserver = function () {
1003            var self = this;
1004            var targets = doc.querySelectorAll('.js-validateValue-root');
1005            var observer = null;
1006            var observerConfig = {
1007                attributeFilter: ['class'],
1008                attributeOldValue: true,
1009            };
1010            var field = null;
1011
1012            if (!targets.length) {
1013                return;
1014            }
1015
1016            observer = new MutationObserver(function (record) {
1017                if (record[0].target.classList.contains('is-field-valid') &&
1018                    !record[0].target.classList.contains('is-error') &&
1019                    !record[0].oldValue.includes('is-field-valid')
1020                ) {
1021                    field = record[0].target.querySelector('.js-validateValue-target');
1022
1023                    if (!field) {
1024                        return;
1025                    }
1026
1027                    self.analytics.noticeFilledFieldName(
1028                        field,
1029                        self.analytics.getEventType('RESET_FILLED'),
1030                    );
1031                }
1032            });
1033
1034            targets.forEach(function (target) {
1035                observer.observe(target, observerConfig);
1036            });
1037
1038            return observer;
1039        };
1040
1041        return PasswordAssistance;
1042    }());
1043
1044    win.AnalyticsViews.RegisteredMemberForm = (function () {
1045        var idNames = {
1046            loggedInButton: 'js-form-btnLoginedContinue',
1047            autoLoginButton: 'js-form-autoLoginSwitch',
1048            autoSignUpButton: 'js-form-autoSignupSwitch',
1049            multiStepFormRoot: 'js-multiStepForm',
1050        };
1051
1052        var RegisteredMemberForm = function () {
1053            this.analytics = new win.KeyenceAnalytics.Form();
1054        };
1055
1056        RegisteredMemberForm.prototype.init = function () {
1057            var self = this;
1058
1059            self.$multiStepFormRootElement = $('#' + idNames.multiStepFormRoot);
1060
1061            if (self.$multiStepFormRootElement.length) {
1062                return;
1063            }
1064
1065            self.attachTrackClickEvent();
1066        };
1067
1068        RegisteredMemberForm.prototype.attachTrackClickEvent = function () {
1069            var self = this;
1070            var selector = [
1071                '#' + idNames.loggedInButton,
1072                '#' + idNames.autoLoginButton,
1073                '#' + idNames.autoSignUpButton,
1074            ].join(', ');
1075            var elements = document.querySelectorAll(selector);
1076
1077            Array.prototype.forEach.call(elements, function (elm) {
1078                elm.addEventListener('click', function () {
1079                    self.analytics.noticeEvent(
1080                        self.analytics.getEventType('SIGNIN_CLICK'),
1081                        elm,
1082                        ''
1083                    );
1084                });
1085            });
1086        };
1087
1088        return RegisteredMemberForm;
1089    }());
1090
1091    win.AnalyticsViews.DownloadFilter = (function () {
1092        var Utility = win.AnalyticsViews.Utility;
1093
1094        var idNames = {
1095            categoriesLegacy: 'js-filterCategories',
1096            categories: 'js-searchFilterByCategories',
1097            fileTypesLegacy: 'js-filterFileTypes',
1098            fileTypes: 'js-searchFilterByFileTypes',
1099        };
1100
1101        var DownloadFilter = function () {
1102            this.analytics = new win.KeyenceAnalytics.Analytics();
1103            this.urlPatternList = [
1104                /^\/products\/[a-zA-Z0-9-_]+\/[a-zA-Z0-9-_]+\/[a-zA-Z0-9-_]+\/downloads\/$/,
1105                /^\/downloads\/$/,
1106            ];
1107        };
1108
1109        DownloadFilter.prototype.init = function () {
1110            if (!Utility.Location.matchPathname(this.urlPatternList)) {
1111                return;
1112            }
1113
1114            this.attachTrackAddCategory();
1115            this.attachTrackAddFileTypes();
1116        };
1117
1118        DownloadFilter.prototype.attachTrackAddCategory = function () {
1119            var self = this;
1120            var selector = [
1121                '#' + idNames.categoriesLegacy + ' label input[type="checkbox"]',
1122                '#' + idNames.categories + ' label input[type="checkbox"]',
1123                '#' + idNames.categories + ' [role="checkbox"]',
1124            ].join(', ');
1125            var elements = doc.querySelectorAll(selector);
1126
1127            Array.prototype.forEach.call(elements, function (checkbox) {
1128                checkbox.addEventListener('click', function (e) {
1129                    var elem = e.currentTarget.type ? checkbox.nextElementSibling : checkbox;
1130
1131                    self.analytics.noticeEvent(
1132                        win.KeyenceAnalytics.DownloadFilter.name,
1133                        win.KeyenceAnalytics.DownloadFilter.EVENT_TYPES.CLICK_CATEGORY,
1134                        elem
1135                    );
1136                });
1137            });
1138        };
1139
1140        DownloadFilter.prototype.attachTrackAddFileTypes = function () {
1141            var self = this;
1142            var selector = [
1143                '#' + idNames.fileTypesLegacy + ' label input[type="checkbox"]',
1144                '#' + idNames.fileTypes + ' label input[type="checkbox"]',
1145                '#' + idNames.fileTypes + ' [role="checkbox"]',
1146            ].join(', ');
1147            var elements = document.querySelectorAll(selector);
1148
1149            Array.prototype.forEach.call(elements, function (checkbox) {
1150                checkbox.addEventListener('click', function () {
1151                    self.analytics.noticeEvent(
1152                        win.KeyenceAnalytics.DownloadFilter.name,
1153                        win.KeyenceAnalytics.DownloadFilter.EVENT_TYPES.CLICK_FILE_TYPES,
1154                        checkbox
1155                    );
1156                });
1157            });
1158        };
1159
1160        return DownloadFilter;
1161    }());
1162
1163    win.AnalyticsViews.CTABanner = (function () {
1164        var CTABanner = function () {
1165            this.analytics = new win.KeyenceAnalytics.Analytics();
1166        };
1167
1168        CTABanner.prototype.init = function () {
1169            var self = this;
1170
1171            win.addEventListener('message', function (event) {
1172                self.attachTrackShow(event);
1173                self.attachTrackClickLink(event);
1174                self.attachTrackClickClose(event);
1175            });
1176        };
1177
1178        CTABanner.prototype.attachTrackShow = function (event) {
1179            var self = this;
1180            var eventType = '';
1181
1182            if (event.data.schema === 'image') {
1183                eventType = win.KeyenceAnalytics.CTABanner.EVENT_TYPES.SHOW_IMAGE_SCHEMA;
1184            }
1185
1186            if (event.data.schema === 'video') {
1187                eventType = win.KeyenceAnalytics.CTABanner.EVENT_TYPES.SHOW_MOVIE_SCHEMA;
1188            }
1189
1190            self.analytics.noticeEvent(
1191                win.KeyenceAnalytics.CTABanner.name,
1192                eventType,
1193                doc.body
1194            );
1195        };
1196
1197        CTABanner.prototype.attachTrackClickLink = function (event) {
1198            var self = this;
1199            var selector = [
1200                '[data-cta-measure]',
1201            ].join(', ');
1202            var links = doc.querySelectorAll(selector);
1203            var eventType = '';
1204
1205            Array.prototype.forEach.call(links, function (link) {
1206                link.addEventListener('click', function () {
1207                    if (event.data.schema === 'image') {
1208                        eventType = win.KeyenceAnalytics.CTABanner.EVENT_TYPES.CLICK_IMAGE_SCHEMA_LINK;
1209                    }
1210
1211                    if (event.data.schema === 'video') {
1212                        eventType = win.KeyenceAnalytics.CTABanner.EVENT_TYPES.CLICK_MOVIE_SCHEMA_LINK;
1213                    }
1214
1215                    self.analytics.noticeEvent(
1216                        win.KeyenceAnalytics.CTABanner.name,
1217                        eventType,
1218                        link
1219                    );
1220                });
1221            });
1222        };
1223
1224        CTABanner.prototype.attachTrackClickClose = function (event) {
1225            var self = this;
1226            var selector = [
1227                '#js-ctaBanner-closeButton',
1228            ].join(', ');
1229            var closeTriggers = doc.querySelectorAll(selector);
1230            var eventType = '';
1231
1232            Array.prototype.forEach.call(closeTriggers, function (trigger) {
1233                trigger.addEventListener('click', function () {
1234                    if (event.data.schema === 'image') {
1235                        eventType = win.KeyenceAnalytics.CTABanner.EVENT_TYPES.CLICK_IMAGE_SCHEMA_CLOSE;
1236                    }
1237
1238                    if (event.data.schema === 'video') {
1239                        eventType = win.KeyenceAnalytics.CTABanner.EVENT_TYPES.CLICK_MOVIE_SCHEMA_CLOSE;
1240                    }
1241
1242                    self.analytics.noticeEvent(
1243                        win.KeyenceAnalytics.CTABanner.name,
1244                        eventType,
1245                        doc.body
1246                    );
1247                });
1248            });
1249        };
1250
1251        return CTABanner;
1252    }());
1253
1254    win.AnalyticsViews.SideCTA = (function () {
1255        var classNames = {
1256            link: 'js-menuConversion-link',
1257            removeButton: 'js-menuConversion-removeButton'
1258        };
1259
1260        var attrSelectors = {
1261            link: '[data-floating-side-navigation-link]'
1262        }
1263
1264        var SideCTA = function () {
1265            this.analytics = new win.KeyenceAnalytics.Analytics();
1266        };
1267
1268        SideCTA.prototype.init = function () {
1269            this.attachTrackClickSideCTALink();
1270            this.attachTrackClickSideCTARemoveButton();
1271        };
1272
1273        SideCTA.prototype.attachTrackClickSideCTALink = function () {
1274            var self = this;
1275            var $doc = $(doc);
1276
1277            $doc.on('click', `.${classNames.link}, ${attrSelectors.link}`, function () {
1278                var element = this;
1279
1280                if (element) {
1281                    self.analytics.noticeEvent(
1282                        win.KeyenceAnalytics.SideCTA.name,
1283                        win.KeyenceAnalytics.SideCTA.EVENT_TYPES.CLICK_LINK,
1284                        element
1285                    );
1286                }
1287            });
1288        };
1289
1290        SideCTA.prototype.attachTrackClickSideCTARemoveButton = function () {
1291            var self = this;
1292            var $doc = $(doc);
1293
1294            $doc.on('click', '.' + classNames.removeButton, function () {
1295                var element = this;
1296
1297                if (element) {
1298                    self.analytics.noticeEvent(
1299                        win.KeyenceAnalytics.SideCTA.name,
1300                        win.KeyenceAnalytics.SideCTA.EVENT_TYPES.CLICK_REMOVE_BUTTON,
1301                        element
1302                    );
1303                }
1304            });
1305        };
1306
1307        return SideCTA;
1308    }());
1309
1310
1311    win.AnalyticsViews.ModalWindow = (function () {
1312        var classNames = {
1313            root: 'js-modalWindow',
1314            show: 'js-modalWindow-showButton',
1315        };
1316
1317        var ModalWindow = function () {
1318            this.analytics = new win.KeyenceAnalytics.Analytics();
1319        };
1320
1321        ModalWindow.prototype.init = function () {
1322            this.attachTrackShow();
1323            this.attachTrackClose();
1324        };
1325
1326        ModalWindow.prototype.attachTrackShow = function () {
1327            var self = this;
1328            var showButtons = doc.querySelectorAll(`.${classNames.show}`);
1329
1330            if (showButtons.length) {
1331                showButtons.forEach(button => {
1332                    button.addEventListener('click', function (event) {
1333                        self.analytics.noticeEvent(
1334                            win.KeyenceAnalytics.ModalWindow.name,
1335                            win.KeyenceAnalytics.ModalWindow.EVENT_TYPES.SHOW,
1336                            event.currentTarget
1337                        );
1338                    })
1339                })
1340            }
1341        };
1342
1343        ModalWindow.prototype.attachTrackClose = function () {
1344            var self = this;
1345            var roots = doc.querySelectorAll(`.${classNames.root}`)
1346
1347            if (roots.length) {
1348                roots.forEach(root => {
1349                    root.addEventListener('close', function (event) {
1350                        self.analytics.noticeEvent(
1351                            win.KeyenceAnalytics.ModalWindow.name,
1352                            win.KeyenceAnalytics.ModalWindow.EVENT_TYPES.CLOSE,
1353                            event.currentTarget
1354                        );
1355                    })
1356                })
1357            }
1358        };
1359
1360        return ModalWindow;
1361    }());
1362
1363
1364    win.AnalyticsViews.init = function () {
1365        if (win.KeyenceAnalytics) {
1366            new win.AnalyticsViews.MultiStepForm().init();
1367            new win.AnalyticsViews.PasswordAssistance().init();
1368            new win.AnalyticsViews.RegisteredMemberForm().init();
1369            new win.AnalyticsViews.DownloadFilter().init();
1370            new win.AnalyticsViews.CTABanner().init();
1371            new win.AnalyticsViews.SideCTA().init();
1372            new win.AnalyticsViews.ModalWindow().init();
1373        }
1374    };
1375
1376    doc.addEventListener('DOMContentLoaded', () => {
1377        if (win.analyticsViewsComplete === true) {
1378            return;
1379        }
1380
1381        win.AnalyticsViews.init();
1382        win.analyticsViewsComplete = true;
1383    });
1384}(window, document, this.jQuery));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.