All files / scrambling-text/js scramble-ES5.js

0% Statements 0/89
0% Branches 0/90
0% Functions 0/20
0% Lines 0/74

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;
}