PageSourceSearch

https://www.repetico.de/scripts/repetico2014/20260723/page/register_or_login.js

js repetico.de collected 2026-10-02 03:16:27 UTC 6,542 bytes, 163 lines download raw bytes

1// ---------------------------------------------------------------------
2// Helper: Debounce
3// ---------------------------------------------------------------------
4function debounce(func, delay) {
5    var timeoutId;
6    return function () {
7        var context = this;
8        var args = arguments;
9        clearTimeout(timeoutId);
10        timeoutId = setTimeout(function () {
11            func.apply(context, args);
12        }, delay);
13    };
14}
15
16// ---------------------------------------------------------------------
17// Helper: PUT-Request per fetch() mit Abbruch-Unterstützung
18// ---------------------------------------------------------------------
19function putJson(url, data, signal) {
20    return fetch(url, {
21        method: 'PUT',
22        headers: { 'Content-Type': 'application/json' },
23        body: JSON.stringify(data),
24        signal: signal
25    }).then(function (response) {
26        if (!response.ok) {
27            throw new Error('HTTP error ' + response.status);
28        }
29        return response.json();
30    });
31}
32
33// ---------------------------------------------------------------------
34// Username-Check
35// ---------------------------------------------------------------------
36var userNameCheckController = null;
37
38function checkUserName() {
39    var userNameField = document.getElementById('newUserName');
40    var resultField = document.getElementById('userNameValidationResult');
41    var userName = userNameField.value;
42
43    // Vorherigen, noch offenen Request abbrechen
44    if (userNameCheckController) {
45        userNameCheckController.abort();
46    }
47    userNameCheckController = new AbortController();
48
49    var dataObject = { userdata: [{ username: userName }] };
50
51    putJson('api/v5/checkforavailableusername', dataObject, userNameCheckController.signal)
52        .then(function (resultObj) {
53            if (resultObj.result === 'nok') {
54                resultField.innerHTML = '<span style="color: red;">' + i18n.gettext('Please choose a different username!') + '</span>';
55            } else {
56                resultField.innerHTML = '<span style="color: green;">' + i18n.gettext('Username is ok!') + '</span>';
57            }
58        })
59        .catch(function (err) {
60            if (err.name === 'AbortError') return; // abgebrochener Request, kein Fehler
61            console.error('checkUserName failed:', err);
62        });
63}
64
65function debouncedCheckUserNameHandler() {
66    var userName = document.getElementById('newUserName').value;
67    var resultField = document.getElementById('userNameValidationResult');
68    if (userName.length < 3) {
69        resultField.innerHTML = '';
70        return;
71    }
72    checkUserName();
73}
74
75// ---------------------------------------------------------------------
76// Passwort-Check (rein lokal, kein Debounce nötig)
77// ---------------------------------------------------------------------
78function checkPassword() {
79    var password = document.getElementById('newUserPass').value;
80    var resultField = document.getElementById('passwordValidationResult');
81    if (password.length < 10) {
82        var message = i18n.gettext('Password must have at least a length of 10 characters.');
83        resultField.innerHTML = '<span style="color: red;">' + message + '</span>';
84    } else {
85        resultField.innerHTML = '<span style="color: green;">' + i18n.gettext('Password is ok!') + '</span>';
86    }
87}
88
89function checkPasswordRepetition() {
90    var password = document.getElementById('newUserPass').value;
91    var passwordRepetition = document.getElementById('newUserPassControl').value;
92    var resultField = document.getElementById('passwordRepetitionValidationResult');
93    if (password !== passwordRepetition) {
94        var message = i18n.gettext('Password and repetition are not the same.');
95        resultField.innerHTML = '<span style="color: red;">' + message + '</span>';
96    } else {
97        resultField.innerHTML = '<span style="color: green;">' + i18n.gettext('Password repetition is ok!') + '</span>';
98    }
99}
100
101// ---------------------------------------------------------------------
102// E-Mail-Check
103// ---------------------------------------------------------------------
104var userMailCheckController = null;
105
106function checkUserMail() {
107    var emailField = document.getElementById('newUserMail');
108    var resultField = document.getElementById('userMailValidationResult');
109    var email = emailField.value;
110
111    if (userMailCheckController) {
112        userMailCheckController.abort();
113    }
114    userMailCheckController = new AbortController();
115
116    var dataObject = { userdata: [{ email: email }] };
117
118    putJson('api/v5/checkforavailableemail', dataObject, userMailCheckController.signal)
119        .then(function (resultObj) {
120            if (resultObj.result === 'nok') {
121                resultField.innerHTML = '<span style="color: red;">' + i18n.gettext('Please choose a different mail address!') + '</span>';
122            } else {
123                resultField.innerHTML = '<span style="color: green;">' + i18n.gettext('Mail address is ok!') + '</span>';
124            }
125        })
126        .catch(function (err) {
127            if (err.name === 'AbortError') return;
128            console.error('checkUserMail failed:', err);
129        });
130}
131
132function debouncedCheckUserMailHandler() {
133    var email = document.getElementById('newUserMail').value;
134    var resultField = document.getElementById('userMailValidationResult');
135    if (email.length < 5) { // kürzeste denkbare gültige Mail: [email protected]
136        resultField.innerHTML = '';
137        return;
138    }
139    checkUserMail();
140}
141
142// ---------------------------------------------------------------------
143// Event-Bindings (ersetzt die alten onkeyup="..."-Attribute im HTML)
144// ---------------------------------------------------------------------
145document.addEventListener('DOMContentLoaded', function () {
146    var userNameField = document.getElementById('newUserName');
147    var passwordField = document.getElementById('newUserPass');
148    var passwordRepeatField = document.getElementById('newUserPassControl');
149    var emailField = document.getElementById('newUserMail');
150
151    if (userNameField) {
152        userNameField.addEventListener('keyup', debounce(debouncedCheckUserNameHandler, 500));
153    }
154    if (passwordField) {
155        passwordField.addEventListener('keyup', checkPassword);
156    }
157    if (passwordRepeatField) {
158        passwordRepeatField.addEventListener('keyup', checkPasswordRepetition);
159    }
160    if (emailField) {
161        emailField.addEventListener('keyup', debounce(debouncedCheckUserMailHandler, 500));
162    }
163});

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.