PageSourceSearch

https://zdravka-plzen.cz/bakaweb/next/js/ls-capslock.js?v=20260917

js zdravka-plzen.cz collected 2026-09-24 10:10:59 UTC 7,147 bytes, 204 lines download raw bytes

1; (function (document, window, commonjs) {
2    var _isCapsPressed = false,
3        _position = null,
4        _customClasses = null;
5
6    function setMessagePosition(element, parent, position) {
7        switch (position) {
8            case 'top':
9                element.style.top = (parent.offsetTop - element.offsetHeight) + 'px';
10                element.style.left = (parent.offsetLeft) + 'px';
11                break;
12            case 'bottom':
13                element.style.top = (parent.offsetTop + parent.offsetHeight) + 'px';
14                element.style.left = (parent.offsetLeft) + 'px';
15                break;
16            case 'left':
17                element.style.top = (parent.offsetTop) + 'px';
18                element.style.left = (parent.offsetLeft - element.offsetWidth) + 'px';
19                break;
20            case 'right':
21                element.style.top = (parent.offsetTop) + 'px';
22                element.style.left = (parent.offsetLeft + parent.offsetWidth) + 'px';
23                break;
24        }
25    };
26
27    function showMessage(element, show) {
28        if (!element) return;
29
30        var message = element.nextSibling;
31
32        if (!message) return;
33
34        if (message.className.indexOf('ls-capslock-message') === -1) return;
35
36        if (!!show) {
37			if (element.className.indexOf('ls-capslock-active') === -1) {
38				element.classList.add('ls-capslock-active');
39			}
40			
41            if (message.className.indexOf('ls-capslock-message-showed') === -1) {
42				message.classList.add('ls-capslock-message-showed');	
43			}
44        } else {
45			if (element.className.indexOf('ls-capslock-active') !== -1) {
46				element.classList.remove('ls-capslock-active');
47			}
48			
49            if (message.className.indexOf('ls-capslock-message-showed') !== -1) {
50				message.classList.remove('ls-capslock-message-showed');	
51			}
52        }
53
54        setMessagePosition(message, element, _position);
55
56        if (message.className.indexOf(_customClasses) !== -1) return;
57
58        for (var i = 0; i < _customClasses.length; i++) {
59            var nc = _customClasses[i];
60            message.classList.add(nc.trim());
61        }
62    };
63
64    function startKeyDownHandler(e, callback) {
65        if (!!e.getModifierState) {
66            _isCapsPressed = e.getModifierState && e.getModifierState('CapsLock');
67        } else {
68            var kc = e.keyCode ? e.keyCode : e.which,
69                sk = e.shiftKey ? e.shiftKey : ((kc == 16) ? true : false);
70
71            _isCapsPressed = ((kc >= 65 && kc <= 90) && !sk) || ((kc >= 97 && kc <= 122) && sk);
72        }
73
74        !!callback && typeof callback == 'function' && callback();
75    }
76
77    function keyDownHandler(e) {
78        var self = this;
79        startKeyDownHandler(e, function () {
80            showMessage(self, _isCapsPressed);
81        });
82    };
83
84    function docKeyDownHandler(e) {
85        startKeyDownHandler(e);
86    };
87
88    function mouseClickHandler(e) {
89        if (!e.getModifierState) return;
90
91        _isCapsPressed = e.getModifierState && e.getModifierState('CapsLock');
92
93        showMessage(this, _isCapsPressed);
94    };
95
96    function blurHandler(e) {
97        showMessage(this, false);
98    };
99
100    function onFocusHandler(e) {
101        showMessage(this, _isCapsPressed);
102    }
103
104    function setUpElement(element, message, customClasses, position) {
105        var isInputText = element instanceof HTMLInputElement && (element.type == 'text' || element.type == 'password' || element.type == 'email' || element.type == 'search' || element.type == 'url');
106
107        if (!isInputText) throw 'Element must be a valid text input!';
108
109        if (element.className.indexOf('ls-capslock') !== -1) return;
110
111        element.classList.add('ls-capslock-input');
112
113        element.parentNode.classList.add('ls-capslock');
114
115        var messageNode = document.createElement('div');
116        messageNode.classList.add('ls-capslock-message');
117        messageNode.innerText = message;
118
119        element.parentNode.insertBefore(messageNode, element.nextSibling);
120
121        element.addEventListener('keydown', keyDownHandler);
122        element.addEventListener('click', mouseClickHandler);
123        element.addEventListener('focus', onFocusHandler);
124        element.addEventListener('blur', blurHandler);
125        document.addEventListener('keydown', docKeyDownHandler);
126
127        _customClasses = customClasses;
128        _position = position;
129    };
130
131    /* 
132        Setup the elments actions and properties.
133        
134        Usage: ls_capslock.init(options);
135
136        Possibles arguments:
137			options = {
138				element, [string element id, string element class, HTMLInputElement, HTMLCollection, Array of HTMLInputElement] [REQUIRED]
139				message, [string] [OPTIONAL] [DEFAULT 'Caps Lock is pressed!']
140				customClasses, [Array of string] [OPTIONAL] [DEFAULT NULL]
141				position [string (top, bottom, left, right)] [OPTIONAL] [DEFAULT 'bottom']
142			}
143    */
144    var ls_capslock = {
145		init: function (options) {
146			options = options || {};
147			
148			// Define default properties
149			options.message = options.message || 'Caps Lock is pressed!';
150			options.customClasses = options.customClasses || [];
151			options.position = options.position || 'bottom';
152			
153			if(!options.element) throw 'The "element" options is required';
154			
155			if(options.element instanceof String || typeof options.element === 'string') {
156				var element = null,
157                    id = options.element;
158
159                if (id.indexOf('#') !== -1) //Was provided an ID to find the element
160                    element = document.getElementById(id.replace('#', ''));
161
162                if (id.indexOf('.') !== -1) //Was provided a class to find the elements
163                    element = document.getElementsByClassName(id.replace('.', ''));
164			
165				options.element = element || document.getElementsByTagName(id); //Was provided an element tag to find the elements
166
167                window.ls_capslock.init(options);
168				
169				return;
170			}
171			
172			if(options.element instanceof HTMLInputElement) {
173				setUpElement(options.element, options.message, options.customClasses, options.position);
174				
175				return;
176			}
177			
178			if(options.element instanceof Array || options.element instanceof HTMLCollection) {
179				for (var i = 0; i < options.element.length; i++) {
180                    var element = options.element[i];
181
182                    if (element instanceof HTMLInputElement) {
183                        setUpElement(element, options.message, options.customClasses, options.position);
184                    } else {
185                        options.element = element;
186						window.ls_capslock.init(options);
187                    }
188                }
189				
190				return;
191			}
192			
193			// Not match by any valid type of element
194			throw 'Element must be a valid text input!';
195		}
196    };
197
198    if (!!commonjs) {
199        module.export = ls_capslock;
200    } else {
201        window.ls_capslock = ls_capslock;
202    }
203
204})(document, window, typeof (exports) !== "undefined");

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.