cURL Error: 0(function webpackUniversalModuleDefinition(root, factory) { if (typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if (typeof define === 'function' && define.amd) define([], factory); else if (typeof exports === 'object') exports["Typed"] = factory(); else root["Typed"] = factory(); })(this, function () { return /******/ (function (modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if (installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/([ /* 0 */ /***/ (function (module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } var _initializerJs = __webpack_require__(1); var _htmlParserJs = __webpack_require__(3); /** * Welcome to Typed.js! * @param {string} elementId HTML element ID _OR_ HTML element * @param {object} options options object * @returns {object} a new Typed object */ var Typed = (function () { function Typed(elementId, options) { _classCallCheck(this, Typed); // Initialize it up _initializerJs.initializer.load(this, options, elementId); // All systems go! this.begin(); } /** * Toggle start() and stop() of the Typed instance * @public */ _createClass(Typed, [{ key: 'toggle', value: function toggle() { this.pause.status ? this.start() : this.stop(); } /** * Stop typing / backspacing and enable cursor blinking * @public */ }, { key: 'stop', value: function stop() { if (this.typingComplete) return; if (this.pause.status) return; this.toggleBlinking(true); this.pause.status = true; this.options.onStop(this.arrayPos, this); } /** * Start typing / backspacing after being stopped * @public */ }, { key: 'start', value: function start() { if (this.typingComplete) return; if (!this.pause.status) return; this.pause.status = false; if (this.pause.typewrite) { this.typewrite(this.pause.curString, this.pause.curStrPos); } else { this.backspace(this.pause.curString, this.pause.curStrPos); } this.options.onStart(this.arrayPos, this); } /** * Destroy this instance of Typed * @public */ }, { key: 'destroy', value: function destroy() { this.reset(false); this.options.onDestroy(this); } /** * Reset Typed and optionally restarts * @param {boolean} restart * @public */ }, { key: 'reset', value: function reset() { var restart = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0]; clearInterval(this.timeout); this.replaceText(''); if (this.cursor && this.cursor.parentNode) { this.cursor.parentNode.removeChild(this.cursor); this.cursor = null; } this.strPos = 0; this.arrayPos = 0; this.curLoop = 0; if (restart) { this.insertCursor(); this.options.onReset(this); this.begin(); } } /** * Begins the typing animation * @private */ }, { key: 'begin', value: function begin() { var _this = this; this.options.onBegin(this); this.typingComplete = false; this.shuffleStringsIfNeeded(this); this.insertCursor(); if (this.bindInputFocusEvents) this.bindFocusEvents(); this.timeout = setTimeout(function () { // Check if there is some text in the element, if yes start by backspacing the default message if (!_this.currentElContent || _this.currentElContent.length === 0) { _this.typewrite(_this.strings[_this.sequence[_this.arrayPos]], _this.strPos); } else { // Start typing _this.backspace(_this.currentElContent, _this.currentElContent.length); } }, this.startDelay); } /** * Called for each character typed * @param {string} curString the current string in the strings array * @param {number} curStrPos the current position in the curString * @private */ }, { key: 'typewrite', value: function typewrite(curString, curStrPos) { var _this2 = this; if (this.fadeOut && this.el.classList.contains(this.fadeOutClass)) { this.el.classList.remove(this.fadeOutClass); if (this.cursor) this.cursor.classList.remove(this.fadeOutClass); } var humanize = this.humanizer(this.typeSpeed); var numChars = 1; if (this.pause.status === true) { this.setPauseStatus(curString, curStrPos, true); return; } // contain typing function in a timeout humanize'd delay this.timeout = setTimeout(function () { // skip over any HTML chars curStrPos = _htmlParserJs.htmlParser.typeHtmlChars(curString, curStrPos, _this2); var pauseTime = 0; var substr = curString.substr(curStrPos); // check for an escape character before a pause value // format: \^\d+ .. eg: ^1000 .. should be able to print the ^ too using ^^ // single ^ are removed from string if (substr.charAt(0) === '^') { if (/^\^\d+/.test(substr)) { var skip = 1; // skip at least 1 substr = /\d+/.exec(substr)[0]; skip += substr.length; pauseTime = parseInt(substr); _this2.temporaryPause = true; _this2.options.onTypingPaused(_this2.arrayPos, _this2); // strip out the escape character and pause value so they're not printed curString = curString.substring(0, curStrPos) + curString.substring(curStrPos + skip); _this2.toggleBlinking(true); } } // check for skip characters formatted as // "this is a `string to print NOW` ..." if (substr.charAt(0) === '`') { while (curString.substr(curStrPos + numChars).charAt(0) !== '`') { numChars++; if (curStrPos + numChars > curString.length) break; } // strip out the escape characters and append all the string in between var stringBeforeSkip = curString.substring(0, curStrPos); var stringSkipped = curString.substring(stringBeforeSkip.length + 1, curStrPos + numChars); var stringAfterSkip = curString.substring(curStrPos + numChars + 1); curString = stringBeforeSkip + stringSkipped + stringAfterSkip; numChars--; } // timeout for any pause after a character _this2.timeout = setTimeout(function () { // Accounts for blinking while paused _this2.toggleBlinking(false); // We're done with this sentence! if (curStrPos >= curString.length) { _this2.doneTyping(curString, curStrPos); } else { _this2.keepTyping(curString, curStrPos, numChars); } // end of character pause if (_this2.temporaryPause) { _this2.temporaryPause = false; _this2.options.onTypingResumed(_this2.arrayPos, _this2); } }, pauseTime); // humanized value for typing }, humanize); } /** * Continue to the next string & begin typing * @param {string} curString the current string in the strings array * @param {number} curStrPos the current position in the curString * @private */ }, { key: 'keepTyping', value: function keepTyping(curString, curStrPos, numChars) { // call before functions if applicable if (curStrPos === 0) { this.toggleBlinking(false); this.options.preStringTyped(this.arrayPos, this); } // start typing each new char into existing string // curString: arg, this.el.html: original text inside element curStrPos += numChars; var nextString = curString.substr(0, curStrPos); this.replaceText(nextString); // loop the function this.typewrite(curString, curStrPos); } /** * We're done typing the current string * @param {string} curString the current string in the strings array * @param {number} curStrPos the current position in the curString * @private */ }, { key: 'doneTyping', value: function doneTyping(curString, curStrPos) { var _this3 = this; // fires callback function this.options.onStringTyped(this.arrayPos, this); this.toggleBlinking(true); // is this the final string if (this.arrayPos === this.strings.length - 1) { // callback that occurs on the last typed string this.complete(); // quit if we wont loop back if (this.loop === false || this.curLoop === this.loopCount) { return; } } this.timeout = setTimeout(function () { _this3.backspace(curString, curStrPos); }, this.backDelay); } /** * Backspaces 1 character at a time * @param {string} curString the current string in the strings array * @param {number} curStrPos the current position in the curString * @private */ }, { key: 'backspace', value: function backspace(curString, curStrPos) { var _this4 = this; if (this.pause.status === true) { this.setPauseStatus(curString, curStrPos, true); return; } if (this.fadeOut) return this.initFadeOut(); this.toggleBlinking(false); var humanize = this.humanizer(this.backSpeed); this.timeout = setTimeout(function () { curStrPos = _htmlParserJs.htmlParser.backSpaceHtmlChars(curString, curStrPos, _this4); // replace text with base text + typed characters var curStringAtPosition = curString.substr(0, curStrPos); _this4.replaceText(curStringAtPosition); // if smartBack is enabled if (_this4.smartBackspace) { // the remaining part of the current string is equal of the same part of the new string var nextString = _this4.strings[_this4.arrayPos + 1]; if (nextString && curStringAtPosition === nextString.substr(0, curStrPos)) { _this4.stopNum = curStrPos; } else { _this4.stopNum = 0; } } // if the number (id of character in current string) is // less than the stop number, keep going if (curStrPos > _this4.stopNum) { // subtract characters one by one curStrPos--; // loop the function _this4.backspace(curString, curStrPos); } else if (curStrPos <= _this4.stopNum) { // if the stop number has been reached, increase // array position to next string _this4.arrayPos++; // When looping, begin at the beginning after backspace complete if (_this4.arrayPos === _this4.strings.length) { _this4.arrayPos = 0; _this4.options.onLastStringBackspaced(); _this4.shuffleStringsIfNeeded(); _this4.begin(); } else { _this4.typewrite(_this4.strings[_this4.sequence[_this4.arrayPos]], curStrPos); } } // humanized value for typing }, humanize); } /** * Full animation is complete * @private */ }, { key: 'complete', value: function complete() { this.options.onComplete(this); if (this.loop) { this.curLoop++; } else { this.typingComplete = true; } } /** * Has the typing been stopped * @param {string} curString the current string in the strings array * @param {number} curStrPos the current position in the curString * @param {boolean} isTyping * @private */ }, { key: 'setPauseStatus', value: function setPauseStatus(curString, curStrPos, isTyping) { this.pause.typewrite = isTyping; this.pause.curString = curString; this.pause.curStrPos = curStrPos; } /** * Toggle the blinking cursor * @param {boolean} isBlinking * @private */ }, { key: 'toggleBlinking', value: function toggleBlinking(isBlinking) { if (!this.cursor) return; // if in paused state, don't toggle blinking a 2nd time if (this.pause.status) return; if (this.cursorBlinking === isBlinking) return; this.cursorBlinking = isBlinking; if (isBlinking) { this.cursor.classList.add('typed-cursor--blink'); } else { this.cursor.classList.remove('typed-cursor--blink'); } } /** * Speed in MS to type * @param {number} speed * @private */ }, { key: 'humanizer', value: function humanizer(speed) { return Math.round(Math.random() * speed / 2) + speed; } /** * Shuffle the sequence of the strings array * @private */ }, { key: 'shuffleStringsIfNeeded', value: function shuffleStringsIfNeeded() { if (!this.shuffle) return; this.sequence = this.sequence.sort(function () { return Math.random() - 0.5; }); } /** * Adds a CSS class to fade out current string * @private */ }, { key: 'initFadeOut', value: function initFadeOut() { var _this5 = this; this.el.className += ' ' + this.fadeOutClass; if (this.cursor) this.cursor.className += ' ' + this.fadeOutClass; return setTimeout(function () { _this5.arrayPos++; _this5.replaceText(''); // Resets current string if end of loop reached if (_this5.strings.length > _this5.arrayPos) { _this5.typewrite(_this5.strings[_this5.sequence[_this5.arrayPos]], 0); } else { _this5.typewrite(_this5.strings[0], 0); _this5.arrayPos = 0; } }, this.fadeOutDelay); } /** * Replaces current text in the HTML element * depending on element type * @param {string} str * @private */ }, { key: 'replaceText', value: function replaceText(str) { if (this.attr) { this.el.setAttribute(this.attr, str); } else { if (this.isInput) { this.el.value = str; } else if (this.contentType === 'html') { this.el.innerHTML = str; } else { this.el.textContent = str; } } } /** * If using input elements, bind focus in order to * start and stop the animation * @private */ }, { key: 'bindFocusEvents', value: function bindFocusEvents() { var _this6 = this; if (!this.isInput) return; this.el.addEventListener('focus', function (e) { _this6.stop(); }); this.el.addEventListener('blur', function (e) { if (_this6.el.value && _this6.el.value.length !== 0) { return; } _this6.start(); }); } /** * On init, insert the cursor element * @private */ }, { key: 'insertCursor', value: function insertCursor() { if (!this.showCursor) return; if (this.cursor) return; this.cursor = document.createElement('span'); this.cursor.className = 'typed-cursor'; this.cursor.innerHTML = this.cursorChar; this.el.parentNode && this.el.parentNode.insertBefore(this.cursor, this.el.nextSibling); } }]); return Typed; })(); exports['default'] = Typed; module.exports = exports['default']; /***/ }), /* 1 */ /***/ (function (module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } var _defaultsJs = __webpack_require__(2); var _defaultsJs2 = _interopRequireDefault(_defaultsJs); /** * Initialize the Typed object */ var Initializer = (function () { function Initializer() { _classCallCheck(this, Initializer); } _createClass(Initializer, [{ key: 'load', /** * Load up defaults & options on the Typed instance * @param {Typed} self instance of Typed * @param {object} options options object * @param {string} elementId HTML element ID _OR_ instance of HTML element * @private */ value: function load(self, options, elementId) { // chosen element to manipulate text if (typeof elementId === 'string') { self.el = document.querySelector(elementId); } else { self.el = elementId; } self.options = _extends({}, _defaultsJs2['default'], options); // attribute to type into self.isInput = self.el.tagName.toLowerCase() === 'input'; self.attr = self.options.attr; self.bindInputFocusEvents = self.options.bindInputFocusEvents; // show cursor self.showCursor = self.isInput ? false : self.options.showCursor; // custom cursor self.cursorChar = self.options.cursorChar; // Is the cursor blinking self.cursorBlinking = true; // text content of element self.elContent = self.attr ? self.el.getAttribute(self.attr) : self.el.textContent; // html or plain text self.contentType = self.options.contentType; // typing speed self.typeSpeed = self.options.typeSpeed; // add a delay before typing starts self.startDelay = self.options.startDelay; // backspacing speed self.backSpeed = self.options.backSpeed; // only backspace what doesn't match the previous string self.smartBackspace = self.options.smartBackspace; // amount of time to wait before backspacing self.backDelay = self.options.backDelay; // Fade out instead of backspace self.fadeOut = self.options.fadeOut; self.fadeOutClass = self.options.fadeOutClass; self.fadeOutDelay = self.options.fadeOutDelay; // variable to check whether typing is currently paused self.isPaused = false; // input strings of text self.strings = self.options.strings.map(function (s) { return s.trim(); }); // div containing strings if (typeof self.options.stringsElement === 'string') { self.stringsElement = document.querySelector(self.options.stringsElement); } else { self.stringsElement = self.options.stringsElement; } if (self.stringsElement) { self.strings = []; self.stringsElement.style.display = 'none'; var strings = Array.prototype.slice.apply(self.stringsElement.children); var stringsLength = strings.length; if (stringsLength) { for (var i = 0; i < stringsLength; i += 1) { var stringEl = strings[i]; self.strings.push(stringEl.innerHTML.trim()); } } } // character number position of current string self.strPos = 0; // current array position self.arrayPos = 0; // index of string to stop backspacing on self.stopNum = 0; // Looping logic self.loop = self.options.loop; self.loopCount = self.options.loopCount; self.curLoop = 0; // shuffle the strings self.shuffle = self.options.shuffle; // the order of strings self.sequence = []; self.pause = { status: false, typewrite: true, curString: '', curStrPos: 0 }; // When the typing is complete (when not looped) self.typingComplete = false; // Set the order in which the strings are typed for (var i in self.strings) { self.sequence[i] = i; } // If there is some text in the element self.currentElContent = this.getCurrentElContent(self); self.autoInsertCss = self.options.autoInsertCss; this.appendAnimationCss(self); } }, { key: 'getCurrentElContent', value: function getCurrentElContent(self) { var elContent = ''; if (self.attr) { elContent = self.el.getAttribute(self.attr); } else if (self.isInput) { elContent = self.el.value; } else if (self.contentType === 'html') { elContent = self.el.innerHTML; } else { elContent = self.el.textContent; } return elContent; } }, { key: 'appendAnimationCss', value: function appendAnimationCss(self) { var cssDataName = 'data-typed-js-css'; if (!self.autoInsertCss) { return; } if (!self.showCursor && !self.fadeOut) { return; } if (document.querySelector('[' + cssDataName + ']')) { return; } var css = document.createElement('style'); css.type = 'text/css'; css.setAttribute(cssDataName, true); var innerCss = ''; if (self.showCursor) { innerCss += '\n .typed-cursor{\n opacity: 1;\n }\n .typed-cursor.typed-cursor--blink{\n animation: typedjsBlink 0.7s infinite;\n -webkit-animation: typedjsBlink 0.7s infinite;\n animation: typedjsBlink 0.7s infinite;\n }\n @keyframes typedjsBlink{\n 50% { opacity: 0.0; }\n }\n @-webkit-keyframes typedjsBlink{\n 0% { opacity: 1; }\n 50% { opacity: 0.0; }\n 100% { opacity: 1; }\n }\n '; } if (self.fadeOut) { innerCss += '\n .typed-fade-out{\n opacity: 0;\n transition: opacity .25s;\n }\n .typed-cursor.typed-cursor--blink.typed-fade-out{\n -webkit-animation: 0;\n animation: 0;\n }\n '; } if (css.length === 0) { return; } css.innerHTML = innerCss; document.body.appendChild(css); } }]); return Initializer; })(); exports['default'] = Initializer; var initializer = new Initializer(); exports.initializer = initializer; /***/ }), /* 2 */ /***/ (function (module, exports) { /** * Defaults & options * @returns {object} Typed defaults & options * @public */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var defaults = { /** * @property {array} strings strings to be typed * @property {string} stringsElement ID of element containing string children */ strings: ['These are the default values...', 'You know what you should do?', 'Use your own!', 'Have a great day!'], stringsElement: null, /** * @property {number} typeSpeed type speed in milliseconds */ typeSpeed: 0, /** * @property {number} startDelay time before typing starts in milliseconds */ startDelay: 0, /** * @property {number} backSpeed backspacing speed in milliseconds */ backSpeed: 0, /** * @property {boolean} smartBackspace only backspace what doesn't match the previous string */ smartBackspace: true, /** * @property {boolean} shuffle shuffle the strings */ shuffle: false, /** * @property {number} backDelay time before backspacing in milliseconds */ backDelay: 700, /** * @property {boolean} fadeOut Fade out instead of backspace * @property {string} fadeOutClass css class for fade animation * @property {boolean} fadeOutDelay Fade out delay in milliseconds */ fadeOut: false, fadeOutClass: 'typed-fade-out', fadeOutDelay: 500, /** * @property {boolean} loop loop strings * @property {number} loopCount amount of loops */ loop: false, loopCount: Infinity, /** * @property {boolean} showCursor show cursor * @property {string} cursorChar character for cursor * @property {boolean} autoInsertCss insert CSS for cursor and fadeOut into HTML */ showCursor: true, cursorChar: '|', autoInsertCss: true, /** * @property {string} attr attribute for typing * Ex: input placeholder, value, or just HTML text */ attr: null, /** * @property {boolean} bindInputFocusEvents bind to focus and blur if el is text input */ bindInputFocusEvents: false, /** * @property {string} contentType 'html' or 'null' for plaintext */ contentType: 'html', /** * Before it begins typing * @param {Typed} self */ onBegin: function onBegin(self) { }, /** * All typing is complete * @param {Typed} self */ onComplete: function onComplete(self) { }, /** * Before each string is typed * @param {number} arrayPos * @param {Typed} self */ preStringTyped: function preStringTyped(arrayPos, self) { }, /** * After each string is typed * @param {number} arrayPos * @param {Typed} self */ onStringTyped: function onStringTyped(arrayPos, self) { }, /** * During looping, after last string is typed * @param {Typed} self */ onLastStringBackspaced: function onLastStringBackspaced(self) { }, /** * Typing has been stopped * @param {number} arrayPos * @param {Typed} self */ onTypingPaused: function onTypingPaused(arrayPos, self) { }, /** * Typing has been started after being stopped * @param {number} arrayPos * @param {Typed} self */ onTypingResumed: function onTypingResumed(arrayPos, self) { }, /** * After reset * @param {Typed} self */ onReset: function onReset(self) { }, /** * After stop * @param {number} arrayPos * @param {Typed} self */ onStop: function onStop(arrayPos, self) { }, /** * After start * @param {number} arrayPos * @param {Typed} self */ onStart: function onStart(arrayPos, self) { }, /** * After destroy * @param {Typed} self */ onDestroy: function onDestroy(self) { } }; exports['default'] = defaults; module.exports = exports['default']; /***/ }), /* 3 */ /***/ (function (module, exports) { /** * TODO: These methods can probably be combined somehow * Parse HTML tags & HTML Characters */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } var HTMLParser = (function () { function HTMLParser() { _classCallCheck(this, HTMLParser); } _createClass(HTMLParser, [{ key: 'typeHtmlChars', /** * Type HTML tags & HTML Characters * @param {string} curString Current string * @param {number} curStrPos Position in current string * @param {Typed} self instance of Typed * @returns {number} a new string position * @private */ value: function typeHtmlChars(curString, curStrPos, self) { if (self.contentType !== 'html') return curStrPos; var curChar = curString.substr(curStrPos).charAt(0); if (curChar === '<' || curChar === '&') { var endTag = ''; if (curChar === '<') { endTag = '>'; } else { endTag = ';'; } while (curString.substr(curStrPos + 1).charAt(0) !== endTag) { curStrPos++; if (curStrPos + 1 > curString.length) { break; } } curStrPos++; } return curStrPos; } /** * Backspace HTML tags and HTML Characters * @param {string} curString Current string * @param {number} curStrPos Position in current string * @param {Typed} self instance of Typed * @returns {number} a new string position * @private */ }, { key: 'backSpaceHtmlChars', value: function backSpaceHtmlChars(curString, curStrPos, self) { if (self.contentType !== 'html') return curStrPos; var curChar = curString.substr(curStrPos).charAt(0); if (curChar === '>' || curChar === ';') { var endTag = ''; if (curChar === '>') { endTag = '<'; } else { endTag = '&'; } while (curString.substr(curStrPos - 1).charAt(0) !== endTag) { curStrPos--; if (curStrPos < 0) { break; } } curStrPos--; } return curStrPos; } }]); return HTMLParser; })(); exports['default'] = HTMLParser; var htmlParser = new HTMLParser(); exports.htmlParser = htmlParser; /***/ }) /******/]) }); ; funk101, Author at Prime Audio Video

About funk101

This author has not yet filled in any details.
So far funk101 has created 333 blog entries.

Casino Online

11000 Tragamonedas Gratis On The Internet Sin DescargaContentCómo Jugar Some Sort Of Las Slots Tidak Bermodal En 4 Sencillos PasosRuleta En Línea¿puedo Jugar Gratis A Las Tragamonedas? ¿tienen Soporte O Asistir En Caso Para Tener Problemas Sobre El Casino Online? ¿qué Boy Las Tragaperras Cuma-cuma? Los A Few Mejores Juegos Para Tragamonedas Gratis Pra Jugar [...]

By |2025-05-13T04:12:28+00:00May 13th, 2025|Pin Up Peru|0 Comments

Top 45 Mas Recomendables Casas De Apuestas Online ️ Marzo 2025

"Top Rated 40 Mejores Viviendas De Apuestas En Perú ️ Marzo 2025Content¿cuál Sera La Mejor Application De Apuestas Deportivas Que Puedo Descargar En Argentina? #11 20bet: Apuestas Sin LímitesMesas De Póker AquijuegoMétodos De Soddisfatto En Sitios Para Apuestas Deportivas Durante MéxicoCasino Gran MadridContras Para Aquijuego¿cómo Ze Valora A Los Sitios De Apuestas? Aquí Un Listado [...]

By |2025-05-13T04:11:31+00:00May 13th, 2025|Pin Up Peru|0 Comments

Crazy Time Stats Demo Live Loading 24h Risultati Statistiche

Statistiche Insane Time Live, Prova Le VinciteContentThunderkick Slot Machine: I Giochi MiglioriDove Agire Alle Slot Thriving Con Soldi Veri Casinò ClassicoTabella Riepilogativa Del Supplier Pragmatic PlayTutti I Giochi Benefit E I Numeri Crazy TimeLive Crazy Time Flow: In Diretta Dagli Studi Di RigaTabella Riassuntiva Per My Partner And I Depositi Su StarcasinoNextgen Slot: I Giochi [...]

By |2025-05-13T04:01:38+00:00May 13th, 2025|crazy time|0 Comments

Glücksrad Online Zufallsgenerator Sowie Entscheidungshilfe

"glücksrad » Anpassbares Werkzeug Für Zufällige AuswahlContent"Auf Welche Weise Man & Drehen Sie Das Rad 🌀How To Use Our Random WheelZufallsgenerator NamenExplore Our WheelsUnterstützt Das Zufalls Rad Prestige Mehrere Sprachen? Spin The Particular WheelRandom Theme WheelWie Benutzt Person Das Namen Zufallsrad? Erstellen Sie Ihr Rad ✍️Drehen Und Auswählen 🌟Rad LöschenWhy Choose Randomwheel Online Tool? Random Wheel [...]

By |2025-05-13T04:00:52+00:00May 13th, 2025|Uncategorized|0 Comments

“تحميل هاك لعبة Hack Crash Egy في 1xbet برابط مباشر أفضل مواقع المراهنات الرياضية والعاب مراهنات والعاب قمار بوك

تحميل سكربت الطياره 1xbet Crash Apk مهكر اخر اصدارContent“تحميل برنامج 1xbet مهكر 2024 اخر اصدار مجانا Blue14Gamesطرق الدفع في موقع 1xbet مصرهكر 1xbet –“ „هاك Linebet Quick سكربت طياره ، سكربت تفاحه، تحميل مجاناقم بتنزيل تطبيق Apkpure للحصول على مزيد من مكافآت الألعاب والتخفيضاتهكر 1xbet Guidelines هاك Linebet Quick سكربت طياره ، سكربت تفاحه، تحميل [...]

By |2025-05-13T03:58:22+00:00May 13th, 2025|Uncategorized|0 Comments

Türkiye’de Lisanslı Bahis Şirketi 1xbet

1xbet Türkiye Güvenli Giriş AdresiContentBet Güncel Giriş Adresini Nasıl Öğrenebilirim? Bet’e Nasıl Üye Olunur? Bet İnternet Üzerinden AramaBet Türkiye Yeni Giriş AdresiVpn Üzerinden Web Sitesine Giriş YapınBet İle Hem Yüksek Kazan," "Sprained Ankle Treatment De Güvende KalBet Sosyal Medya Hesapları Ile Güncel BilgilerBet 1xbet Para Yatırma Ve Çekme İşlemleriBet: Teknik Destek KişileriBet Tr Hakkında Sıkça [...]

By |2025-05-13T03:58:15+00:00May 13th, 2025|Uncategorized|0 Comments

“totolotek Zakłady Sportowe Online Oficjalna Strona Totolotka

Totolotek Zakłady Bukmacherskie Online, Ocasion Zakłady Przez InternetContentSzukasz Najlepszego Bukmachera? Obstawianie KuponuJaka Jest Oferta Totolotek Survive? Zakłady Bukmacherskie Totolotek Podstawowe InformacjeJakie Sporty Znajdziemy W Ofercie Tego Bukmachera? Czy Po Wykorzystaniu Bonusu Powitalnego W Totolotku Przysługują Inne Promocje? Totolotek RecenzjaOferta Na Zakłady Bukmacherskie W TotolotekTotolotek Ocasion - E-sportZakłady BukmacherskieBukmacher Totalbet OpiniaBukmacher Totolotek Z Aplikacją BetscanZasady Zarządzania Budżetem Na [...]

By |2025-05-13T03:56:58+00:00May 13th, 2025|Uncategorized|0 Comments

Jeu Aviator Pour De L’argent Réel: Stratégies, Bonus Ain Meilleurs Sites Put Jouer

Site Usuel Jouer À L'avion En LigneContentFonctionnalités Ni Jeu AviatorComment Gagner De L'argent Sur The Jeu Aviator? Avantages D'utiliser Los Angeles Meilleure App Aviator🎰 Les Meilleurs Casinos Pour Jeu En Ligne AviatorQuais São As Regras Perform Jogo Aviator Casino? Jeu Sur Internet AviatorQu'est-ce Que L'app Aviator? Stratégie Sobre Double MiseAviator Jeux Argent: Notre Conclusion Sur [...]

By |2025-05-13T03:51:59+00:00May 13th, 2025|aviator casino fr|0 Comments

Glücksrad » Anpassbares Werkzeug Für Zufällige Auswahl

"Online GlücksradContentWie Allerlei Einträge Können Zusammenfallend Zum Entscheidungsrad Hinzugefügt Werden? Ist Eben Dieser Dienst Kostenlos? Machen Sie Mehr über Zufallsgenerator RadWählen Sie Eine Der Vier Optionen Auf Dem AusgabebildschirmRäder Inkorporieren Und LadenTeilen Sie Das Entscheidungsrad Mit AnderenWas Ist Glücksrad? Laden Sie Unsere App HerunterBearbeiten Darüber Hinaus Ändern Sie Pass Away EinträgeStarten Sie Living Area Vorgang [...]

By |2025-05-13T03:50:29+00:00May 13th, 2025|Uncategorized|0 Comments

1win Ставки На Спорт И Онлайн Казино Бонус 500%

1win официальному Сайт Букмекерской Конторы 1винContentПреимущества Онлайн Казино 1winОсобенности 1win, Привлекающие ВниманиеОфициальный Сайт 1win Это:In Букмекерская Контора и Казахстане: Официальный Сайт И Ставки на Спорт 1win KzNo Deposit Bonus и Казино 1winОтветственные Азартные ИгрыПополнение И Вывод материальнопроизводственныхособенности Казино 1 WinВопросы Игроков об Бк 1винПримерная Таблица Бонусных ПредложенийДоступны ли Бонусы На Зеркалах Букмекера?Какие Еще самоосознанная Букмекерские [...]

By |2025-05-13T03:47:04+00:00May 13th, 2025|1w|0 Comments