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.