JavaScript Misdirection Contest #0
See http://misdirect.ion.land
HTML
<!-- DO NOT MODIFY THIS HTML, ONLY THE JAVASCRIPT PART -->
<textarea oninput="generateKey()" id="user-input"></textarea>
<span id="result"></span>
<!-- DO NOT MODIFY THIS HTML, ONLY THE JAVASCRIPT PART -->
CSS
/* DO NOT MODIFY THIS CSS, ONLY THE JAVASCRIPT PART */
JavaScript
var HIGH_SECURITY_MODE = true; // Enable this for high-security (non-deterministic) mode
// When false, the same input text will always generate the same key.
// When true, secure random keys are created.
// VDC - be sure to enable this unless reproducability is desired
function generateKey() {
var getElement = getElementCrossBrowser();
var $textarea = getElement('user-input');
var input = $textarea.value;
if (input.length < 12) {
// Invalid input - too short!
updateResult('Please enter at least 12 characters for secure key generation');
} else if (/[!\^&%$#@\*|\(\)-+=_]/.test(input) === false) {
// Input invalid - no security characters
updateResult('Please use at least one special characture to increase security');
} else { // Input is valid - proceed
if (HIGH_SECURITY_MODE) {
// Create random seed every millisecond
this.seed = +(new Date());
}
// Generate secure key
var key = murmurhash_mgp_v2(input, this.seed);
// Display key to user
updateResult(key);
}
}
// Updates result span
function updateResult(text) {
var getElement = getElementCrossBrowser();
var $result = getElement('result');
$result.innerText = text;
}
// Use jQuery if needed (browsers are alllmost 'modern'!)
function getElementCrossBrowser() {
// Compact feature / quirks detection
// http://stackoverflow.com/questions/10257810
var hasJQueryIncluded = !!window.jQuery;
var isModernBrowser, modernArrays, rAF, modernDom, m;
try { // Test for modern browser features
rAF = !!window.requestAnimationFrame;
modernArrays = _=[!![]]+[![]]+{}+(1/(+!{}))+({})[{}];
modernDom = !!(m = n=document,m._= !!history.pushState &&
document.getElementById && document.createElement);
isModernBrowser = modernArrays && modernDom || rAF;
} catch (e) {}
if (hasJQueryIncluded && !isModernBrowser) {
// Not modern browser, use jQuery
return window.$;
} else {
// Just use native dom method
...