Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | "use strict"; function _instanceof(left, right) { if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) { return right[Symbol.hasInstance](left); } else { return left instanceof right; } } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var Scrambler = function Scrambler(scrambleArgs) { // call action fn var scrambleFire = function scrambleFire(scrambleArgs) { // remember, hoisted // get chosen scramble items var scramble = passedAsObject ? _toConsumableArray(document.querySelectorAll(scrambleArgs.target)) : _toConsumableArray(document.querySelectorAll(scrambleArgs)); // for each scramble element scramble.forEach(function (element, which) { if (element.getAttribute('data-scramble-active') !== 'true') { element.setAttribute('data-scramble-active', 'true'); var truth = element.textContent.split(''); // get letters var truthHTML = element.innerHTML; // get html var startText = truth; var newLetters = element.textContent.split(''); var revert = []; // init empty kill switch array var speed = scrambleArgs.speed ? scrambleArgs.speed : 100; var HTMLreset = false; // if user defines an ending text string then use that instead of the original text var defineEndText = function defineEndText(end) { var endText = end || element.textContent; truth = endText.split(''); newLetters = endText.split(''); startText = []; truth.forEach(function (item, index) { if (' \t\n\r\v'.indexOf(truth[index]) > -1) { startText.push(' '); } else { startText.push(randomChar()); } }); startText = startText; }; // first check passed option and then data-attribute if (scrambleArgs.text && scrambleArgs.text !== "" && (typeof scrambleArgs.text === 'string' || _instanceof(scrambleArgs.text, String))) { defineEndText(scrambleArgs.text); HTMLreset = true; } else if (element.getAttribute('data-scramble-text') && element.getAttribute('data-scramble-text') !== "") { defineEndText(element.getAttribute('data-scramble-text')); HTMLreset = true; } var ticker = setInterval(function () { // map over letters and replace with random or revert back to truth startText.map(function (letter, i) { // break if a space if (' \t\n\r\v'.indexOf(letter) > -1) return; // set new random letter newLetters[i] = randomChar(); // set random timeout to make letters reset at different times setTimeout(function () { revert[i] = true; }, randomTime()); // reset individual letter if kill switch if (revert[i] === true) { newLetters[i] = truth[i]; } ; // set html element.textContent = newLetters.join(''); }); // kill interval after all letter returned to normal to save stack var killCheck = newLetters.length == truth.length && newLetters.every(function (e, i) { return e === truth[i]; }); if (killCheck) { element.innerHTML = truthHTML; if (HTMLreset) { var innerContent = element.children[0]; if (innerContent && innerContent !== "") { innerContent.textContent = newLetters.join(''); } else { element.textContent = newLetters.join(''); } } clearInterval(ticker); // stop looping element.setAttribute('data-scramble-active', 'false'); } ; }, speed); // end ticker } // end check for active }); // end forEach }; /*** helper functions ***/ // utility fn to get a random character var randomChar = function randomChar(length) { var l = length || 1; var r = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, l); if (' \t\n\r\v'.indexOf(r) < 0) return r; }; // object test var isObject = function isObject(a) { return !!a && a.constructor === Object; }; // did the user pass an object as an argument? var passedAsObject = isObject(scrambleArgs) || _typeof(scrambleArgs) == 'object'; // set function default arguments if it was an object if (passedAsObject) { scrambleArgs.target = typeof scrambleArgs.target !== 'undefined' && passedAsObject ? scrambleArgs.target : '[data-scrambler]'; scrambleArgs.random = typeof scrambleArgs.random !== 'undefined' && passedAsObject ? scrambleArgs.random : [1000, 3000]; scrambleArgs.speed = typeof scrambleArgs.speed !== 'undefined' && passedAsObject ? scrambleArgs.speed : 100; scrambleArgs.text = typeof scrambleArgs.text !== 'undefined' && passedAsObject ? scrambleArgs.text : false; } // utility fn to get a random delay time var randomTime = function randomTime() { if (passedAsObject) { return scrambleArgs.random[0] + (Math.random() * (1 - scrambleArgs.random[1]) + scrambleArgs.random[1]); } return 1000 + (Math.random() * (1 - 3000) + 3000); }; scrambleFire(scrambleArgs); ; // end scrambleFire }; // end Scramble if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { module.exports = Scrambler; } |