{"version":3,"sources":["autotyper.js"],"names":["window","document","autoTyper","opts","options","selector","words","charSpeed","delay","loop","flipflop","position","currentWord","element","isStopped","opt","hasOwnProperty","applyNewOptions","putChar","length","setTimeout","remChar","next","innerHTML","substr","processWord","word","exec","timeoutDelay","i","tmp","this","start","Array","isArray","el","querySelector","stop"],"mappings":";;;;;;CAAA,SAAAA,EAAAC,GAEAD,EAAAE,UAAA,SAAAC,GAEA,IAAAC,EAAA,CACAC,SAAA,GALAC,MAAA,GACAC,UAAA,GACAC,MAAA,KACAC,MAAA,EACAC,UAAA,EACAC,SAAA,EACAC,YAAA,GACAC,QAAA,KACAC,WAAA,IAIA,SAAAX,GAEA,GAAAA,EAGA,IAAA,IAAAY,KAAAZ,EACAA,EAAAa,eAAAD,KACAX,EAAAW,GAAAZ,EAAAY,IAIAE,CAAAd,GAGA,IAAAe,EAAA,aAEAd,EAAAO,WAAAP,EAAAQ,YAAAO,QAAAf,EAAAU,aAEAV,EAAAM,iBACAU,WAAA,WAEAC,IAAAC,QACAlB,EAAAI,cAIA,MAIAJ,EAAAS,QAAAU,WAAAnB,EAAAQ,YAAAR,EAAAO,kBAGAS,WAAA,WACAF,IAAAI,QACAlB,EAAAO,SAAAP,EAAAQ,YAAAO,OAAAf,EAAAG,UAAA,IAIAc,EAAA,aAEA,IAAAjB,EAAAO,UAAAP,EAAAU,mBAAA,MAGAV,EAAAS,QAAAU,UAAAnB,EAAAQ,YAAAY,OAAA,IAAApB,EAAAO,gBAGAS,WAAA,WACAC,IAAAC,QACAlB,EAAAO,SAAA,EAAAP,EAAAG,UAAA,IAIAkB,EAAA,UAAAC,EAAAlB,SACAY,WAAA,WAEAhB,EAAAO,SAAA,EACAP,EAAAQ,YAAAc,EAEAtB,EAAAS,QAAAU,UAAA,GAGAL,IAAAI,QACAd,IAIAmB,EAAA,YAEAvB,EAAAU,kBAAA,MAIA,IAFA,IAAAc,EAAA,EAEAC,EAAA,EAAAA,EAAAzB,EAAAE,MAAAa,OAAAU,IAAA,CAKA,GAHAzB,EAAAE,MAAAuB,GAGA,CAEAJ,EAAArB,EAAAE,MAAAuB,GAAAD,GAAAN,OAEA,IAAAQ,EAAA1B,EAAAE,MAAAuB,GAAAV,OAAAf,EAAAG,UACAH,EAAAM,WAAAoB,GAAA,GAEAF,GAAAE,EAAA1B,EAAAI,aAGAY,WAAA,WACAhB,EAAAK,MAAAkB,IAAAL,QACAM,IAIAG,KAAAC,MAAA,WAEA,GAAA,iBAAA5B,EAAAC,UAAAD,EAAAC,UACA4B,MAAAC,QAAA9B,EAAAE,QAAAF,EAAAE,MAAAa,OAAA,CAGA,IAAAgB,EAAAlC,EAAAmC,cAAAhC,EAAAC,UAGA8B,IAGA/B,EAAAS,QAAAsB,EACA/B,EAAAU,WAAA,EAGAa,IAAAL,UAIAS,KAAAM,KAAA,WAEAjC,EAAAU,WAAA,EACAV,EAAAO,SAAA,EACAP,EAAAQ,YAAA,KAlIA,CAqIAZ,OAAAC","file":"autotyper.min.js","sourcesContent":["(function(window, document) {\r\n // define the plugin in global variable to make it accessible from outside\r\n window.autoTyper = function(opts) {\r\n // default options\r\n var options = {\r\n selector: \"\",\r\n words: [],\r\n charSpeed: 85,\r\n delay: 2100,\r\n loop: true,\r\n flipflop: true,\r\n position: 0,\r\n currentWord: \"\",\r\n element: null,\r\n isStopped: false\r\n };\r\n\r\n // apply new options to existing one\r\n var applyNewOptions = function(opts) {\r\n // if given parameter is not valid, exit\r\n if (!opts) return;\r\n\r\n // change old values with new ones\r\n for (var opt in opts) {\r\n if (opts.hasOwnProperty(opt)) {\r\n options[opt] = opts[opt];\r\n }\r\n }\r\n };\r\n applyNewOptions(opts);\r\n\r\n // character putting synchronously\r\n var putChar = function*() {\r\n // if current character is last or its stopped\r\n if (options.position === options.currentWord.length || options.isStopped) {\r\n // check if flip flop is activated\r\n if (options.flipflop) {\r\n yield setTimeout(function() {\r\n // after the delay, start removing chars one by one\r\n remChar().next();\r\n }, options.delay);\r\n }\r\n \r\n // exit looping characters\r\n yield null;\r\n }\r\n \r\n // append the char into the element\r\n options.element.innerHTML += options.currentWord[options.position++];\r\n \r\n // loop the function for other remained chars\r\n yield setTimeout(function() {\r\n putChar().next();\r\n }, (options.position < options.currentWord.length) ? options.charSpeed : 0);\r\n };\r\n\r\n // character removing synchronously\r\n var remChar = function*() {\r\n // if all chars is removed or its stopped, exit function\r\n if (options.position === 0 || options.isStopped) yield null; \r\n \r\n // remove the char from the element\r\n options.element.innerHTML = options.currentWord.substr(0, --options.position);\r\n \r\n // loop the function for other remained chars\r\n yield setTimeout(function() {\r\n remChar().next();\r\n }, (options.position > 0) ? options.charSpeed : 0);\r\n };\r\n\r\n // prepare word to type synchronously\r\n var processWord = function*(word, delay) {\r\n yield setTimeout(function() {\r\n // reset processing options\r\n options.position = 0;\r\n options.currentWord = word;\r\n // clear element text\r\n options.element.innerHTML = \"\";\r\n \r\n // start to put characters\r\n putChar().next();\r\n }, delay);\r\n };\r\n\r\n // autoTyper execution\r\n var exec = function*() {\r\n // if its stopped, exit function\r\n if (options.isStopped) yield null;\r\n\r\n var timeoutDelay = 0;\r\n\r\n for (var i = 0; i < options.words.length; i++) {\r\n // get current iteration\r\n var theWord = options.words[i];\r\n\r\n // if it is not valid, continue the loop\r\n if (!theWord) continue;\r\n\r\n processWord(options.words[i], timeoutDelay).next();\r\n \r\n var tmp = options.words[i].length * options.charSpeed;\r\n if (options.flipflop) tmp *= 2;\r\n\r\n timeoutDelay += (tmp + options.delay);\r\n }\r\n \r\n yield setTimeout(function() {\r\n options.loop ? exec().next() : \"\";\r\n }, timeoutDelay);\r\n };\r\n\r\n // start the autoTyper instance\r\n this.start = function() {\r\n // option validations\r\n if (typeof options.selector !== \"string\" || !options.selector) return;\r\n if (!Array.isArray(options.words) || !options.words.length) return;\r\n\r\n // get element\r\n var el = document.querySelector(options.selector);\r\n\r\n // if given element does not exist, exit\r\n if (!el) return;\r\n\r\n // setup options before start\r\n options.element = el;\r\n options.isStopped = false;\r\n\r\n // start autoTyper\r\n exec().next();\r\n };\r\n\r\n // stop the autoTyper instance\r\n this.stop = function() {\r\n // reset options\r\n options.isStopped = true;\r\n options.position = 0;\r\n options.currentWord = \"\";\r\n };\r\n };\r\n})(window, document);\r\n"]}