typed.js 2.0.12 → 2.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE.txt +1 -1
  2. package/README.md +88 -37
  3. package/dist/typed.cjs +2 -0
  4. package/dist/typed.cjs.map +1 -0
  5. package/dist/typed.module.js +2 -0
  6. package/dist/typed.module.js.map +1 -0
  7. package/dist/typed.umd.js +3 -0
  8. package/dist/typed.umd.js.map +1 -0
  9. package/index.d.ts +253 -134
  10. package/package.json +21 -28
  11. package/.codeclimate.yml +0 -31
  12. package/.csslintrc +0 -2
  13. package/.esdoc.json +0 -4
  14. package/.eslintignore +0 -3
  15. package/.eslintrc.yml +0 -25
  16. package/.github/CONTRIBUTING.md +0 -44
  17. package/.github/ISSUE_TEMPLATE.md +0 -27
  18. package/.github/PULL_REQUEST_TEMPLATE.md +0 -38
  19. package/.prettierrc +0 -4
  20. package/.travis.yml +0 -16
  21. package/.vscode/launch.json +0 -14
  22. package/.vscode/settings.json +0 -11
  23. package/CODE_OF_CONDUCT.md +0 -46
  24. package/app.js +0 -12
  25. package/assets/demos.css +0 -61
  26. package/assets/demos.js +0 -133
  27. package/bower.json +0 -11
  28. package/docs/API.md +0 -231
  29. package/docs/assets/anchor.js +0 -197
  30. package/docs/assets/bass-addons.css +0 -12
  31. package/docs/assets/bass.css +0 -543
  32. package/docs/assets/fonts/EOT/SourceCodePro-Bold.eot +0 -0
  33. package/docs/assets/fonts/EOT/SourceCodePro-Regular.eot +0 -0
  34. package/docs/assets/fonts/LICENSE.txt +0 -93
  35. package/docs/assets/fonts/OTF/SourceCodePro-Bold.otf +0 -0
  36. package/docs/assets/fonts/OTF/SourceCodePro-Regular.otf +0 -0
  37. package/docs/assets/fonts/TTF/SourceCodePro-Bold.ttf +0 -0
  38. package/docs/assets/fonts/TTF/SourceCodePro-Regular.ttf +0 -0
  39. package/docs/assets/fonts/WOFF/OTF/SourceCodePro-Bold.otf.woff +0 -0
  40. package/docs/assets/fonts/WOFF/OTF/SourceCodePro-Regular.otf.woff +0 -0
  41. package/docs/assets/fonts/WOFF/TTF/SourceCodePro-Bold.ttf.woff +0 -0
  42. package/docs/assets/fonts/WOFF/TTF/SourceCodePro-Regular.ttf.woff +0 -0
  43. package/docs/assets/fonts/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 +0 -0
  44. package/docs/assets/fonts/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 +0 -0
  45. package/docs/assets/fonts/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 +0 -0
  46. package/docs/assets/fonts/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 +0 -0
  47. package/docs/assets/fonts/source-code-pro.css +0 -23
  48. package/docs/assets/github.css +0 -123
  49. package/docs/assets/site.js +0 -108
  50. package/docs/assets/style.css +0 -136
  51. package/docs/index.html +0 -2187
  52. package/gulpfile.js +0 -95
  53. package/index.html +0 -184
  54. package/lib/typed.js +0 -1052
  55. package/lib/typed.min.js +0 -11
  56. package/lib/typed.min.js.map +0 -1
  57. package/logo-cropped.png +0 -0
  58. package/logo.png +0 -0
  59. package/src/defaults.js +0 -164
  60. package/src/html-parser.js +0 -67
  61. package/src/initializer.js +0 -207
  62. package/src/typed.js +0 -433
  63. package/webpack.config.js +0 -45
package/lib/typed.js DELETED
@@ -1,1052 +0,0 @@
1
- /*!
2
- *
3
- * typed.js - A JavaScript Typing Animation Library
4
- * Author: Matt Boldt <me@mattboldt.com>
5
- * Version: v2.0.12
6
- * Url: https://github.com/mattboldt/typed.js
7
- * License(s): MIT
8
- *
9
- */
10
- (function webpackUniversalModuleDefinition(root, factory) {
11
- if(typeof exports === 'object' && typeof module === 'object')
12
- module.exports = factory();
13
- else if(typeof define === 'function' && define.amd)
14
- define([], factory);
15
- else if(typeof exports === 'object')
16
- exports["Typed"] = factory();
17
- else
18
- root["Typed"] = factory();
19
- })(this, function() {
20
- return /******/ (function(modules) { // webpackBootstrap
21
- /******/ // The module cache
22
- /******/ var installedModules = {};
23
- /******/
24
- /******/ // The require function
25
- /******/ function __webpack_require__(moduleId) {
26
- /******/
27
- /******/ // Check if module is in cache
28
- /******/ if(installedModules[moduleId])
29
- /******/ return installedModules[moduleId].exports;
30
- /******/
31
- /******/ // Create a new module (and put it into the cache)
32
- /******/ var module = installedModules[moduleId] = {
33
- /******/ exports: {},
34
- /******/ id: moduleId,
35
- /******/ loaded: false
36
- /******/ };
37
- /******/
38
- /******/ // Execute the module function
39
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
40
- /******/
41
- /******/ // Flag the module as loaded
42
- /******/ module.loaded = true;
43
- /******/
44
- /******/ // Return the exports of the module
45
- /******/ return module.exports;
46
- /******/ }
47
- /******/
48
- /******/
49
- /******/ // expose the modules object (__webpack_modules__)
50
- /******/ __webpack_require__.m = modules;
51
- /******/
52
- /******/ // expose the module cache
53
- /******/ __webpack_require__.c = installedModules;
54
- /******/
55
- /******/ // __webpack_public_path__
56
- /******/ __webpack_require__.p = "";
57
- /******/
58
- /******/ // Load entry module and return exports
59
- /******/ return __webpack_require__(0);
60
- /******/ })
61
- /************************************************************************/
62
- /******/ ([
63
- /* 0 */
64
- /***/ (function(module, exports, __webpack_require__) {
65
-
66
- 'use strict';
67
-
68
- Object.defineProperty(exports, '__esModule', {
69
- value: true
70
- });
71
-
72
- 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; }; })();
73
-
74
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
75
-
76
- var _initializerJs = __webpack_require__(1);
77
-
78
- var _htmlParserJs = __webpack_require__(3);
79
-
80
- /**
81
- * Welcome to Typed.js!
82
- * @param {string} elementId HTML element ID _OR_ HTML element
83
- * @param {object} options options object
84
- * @returns {object} a new Typed object
85
- */
86
-
87
- var Typed = (function () {
88
- function Typed(elementId, options) {
89
- _classCallCheck(this, Typed);
90
-
91
- // Initialize it up
92
- _initializerJs.initializer.load(this, options, elementId);
93
- // All systems go!
94
- this.begin();
95
- }
96
-
97
- /**
98
- * Toggle start() and stop() of the Typed instance
99
- * @public
100
- */
101
-
102
- _createClass(Typed, [{
103
- key: 'toggle',
104
- value: function toggle() {
105
- this.pause.status ? this.start() : this.stop();
106
- }
107
-
108
- /**
109
- * Stop typing / backspacing and enable cursor blinking
110
- * @public
111
- */
112
- }, {
113
- key: 'stop',
114
- value: function stop() {
115
- if (this.typingComplete) return;
116
- if (this.pause.status) return;
117
- this.toggleBlinking(true);
118
- this.pause.status = true;
119
- this.options.onStop(this.arrayPos, this);
120
- }
121
-
122
- /**
123
- * Start typing / backspacing after being stopped
124
- * @public
125
- */
126
- }, {
127
- key: 'start',
128
- value: function start() {
129
- if (this.typingComplete) return;
130
- if (!this.pause.status) return;
131
- this.pause.status = false;
132
- if (this.pause.typewrite) {
133
- this.typewrite(this.pause.curString, this.pause.curStrPos);
134
- } else {
135
- this.backspace(this.pause.curString, this.pause.curStrPos);
136
- }
137
- this.options.onStart(this.arrayPos, this);
138
- }
139
-
140
- /**
141
- * Destroy this instance of Typed
142
- * @public
143
- */
144
- }, {
145
- key: 'destroy',
146
- value: function destroy() {
147
- this.reset(false);
148
- this.options.onDestroy(this);
149
- }
150
-
151
- /**
152
- * Reset Typed and optionally restarts
153
- * @param {boolean} restart
154
- * @public
155
- */
156
- }, {
157
- key: 'reset',
158
- value: function reset() {
159
- var restart = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];
160
-
161
- clearInterval(this.timeout);
162
- this.replaceText('');
163
- if (this.cursor && this.cursor.parentNode) {
164
- this.cursor.parentNode.removeChild(this.cursor);
165
- this.cursor = null;
166
- }
167
- this.strPos = 0;
168
- this.arrayPos = 0;
169
- this.curLoop = 0;
170
- if (restart) {
171
- this.insertCursor();
172
- this.options.onReset(this);
173
- this.begin();
174
- }
175
- }
176
-
177
- /**
178
- * Begins the typing animation
179
- * @private
180
- */
181
- }, {
182
- key: 'begin',
183
- value: function begin() {
184
- var _this = this;
185
-
186
- this.options.onBegin(this);
187
- this.typingComplete = false;
188
- this.shuffleStringsIfNeeded(this);
189
- this.insertCursor();
190
- if (this.bindInputFocusEvents) this.bindFocusEvents();
191
- this.timeout = setTimeout(function () {
192
- // Check if there is some text in the element, if yes start by backspacing the default message
193
- if (!_this.currentElContent || _this.currentElContent.length === 0) {
194
- _this.typewrite(_this.strings[_this.sequence[_this.arrayPos]], _this.strPos);
195
- } else {
196
- // Start typing
197
- _this.backspace(_this.currentElContent, _this.currentElContent.length);
198
- }
199
- }, this.startDelay);
200
- }
201
-
202
- /**
203
- * Called for each character typed
204
- * @param {string} curString the current string in the strings array
205
- * @param {number} curStrPos the current position in the curString
206
- * @private
207
- */
208
- }, {
209
- key: 'typewrite',
210
- value: function typewrite(curString, curStrPos) {
211
- var _this2 = this;
212
-
213
- if (this.fadeOut && this.el.classList.contains(this.fadeOutClass)) {
214
- this.el.classList.remove(this.fadeOutClass);
215
- if (this.cursor) this.cursor.classList.remove(this.fadeOutClass);
216
- }
217
-
218
- var humanize = this.humanizer(this.typeSpeed);
219
- var numChars = 1;
220
-
221
- if (this.pause.status === true) {
222
- this.setPauseStatus(curString, curStrPos, true);
223
- return;
224
- }
225
-
226
- // contain typing function in a timeout humanize'd delay
227
- this.timeout = setTimeout(function () {
228
- // skip over any HTML chars
229
- curStrPos = _htmlParserJs.htmlParser.typeHtmlChars(curString, curStrPos, _this2);
230
-
231
- var pauseTime = 0;
232
- var substr = curString.substr(curStrPos);
233
- // check for an escape character before a pause value
234
- // format: \^\d+ .. eg: ^1000 .. should be able to print the ^ too using ^^
235
- // single ^ are removed from string
236
- if (substr.charAt(0) === '^') {
237
- if (/^\^\d+/.test(substr)) {
238
- var skip = 1; // skip at least 1
239
- substr = /\d+/.exec(substr)[0];
240
- skip += substr.length;
241
- pauseTime = parseInt(substr);
242
- _this2.temporaryPause = true;
243
- _this2.options.onTypingPaused(_this2.arrayPos, _this2);
244
- // strip out the escape character and pause value so they're not printed
245
- curString = curString.substring(0, curStrPos) + curString.substring(curStrPos + skip);
246
- _this2.toggleBlinking(true);
247
- }
248
- }
249
-
250
- // check for skip characters formatted as
251
- // "this is a `string to print NOW` ..."
252
- if (substr.charAt(0) === '`') {
253
- while (curString.substr(curStrPos + numChars).charAt(0) !== '`') {
254
- numChars++;
255
- if (curStrPos + numChars > curString.length) break;
256
- }
257
- // strip out the escape characters and append all the string in between
258
- var stringBeforeSkip = curString.substring(0, curStrPos);
259
- var stringSkipped = curString.substring(stringBeforeSkip.length + 1, curStrPos + numChars);
260
- var stringAfterSkip = curString.substring(curStrPos + numChars + 1);
261
- curString = stringBeforeSkip + stringSkipped + stringAfterSkip;
262
- numChars--;
263
- }
264
-
265
- // timeout for any pause after a character
266
- _this2.timeout = setTimeout(function () {
267
- // Accounts for blinking while paused
268
- _this2.toggleBlinking(false);
269
-
270
- // We're done with this sentence!
271
- if (curStrPos >= curString.length) {
272
- _this2.doneTyping(curString, curStrPos);
273
- } else {
274
- _this2.keepTyping(curString, curStrPos, numChars);
275
- }
276
- // end of character pause
277
- if (_this2.temporaryPause) {
278
- _this2.temporaryPause = false;
279
- _this2.options.onTypingResumed(_this2.arrayPos, _this2);
280
- }
281
- }, pauseTime);
282
-
283
- // humanized value for typing
284
- }, humanize);
285
- }
286
-
287
- /**
288
- * Continue to the next string & begin typing
289
- * @param {string} curString the current string in the strings array
290
- * @param {number} curStrPos the current position in the curString
291
- * @private
292
- */
293
- }, {
294
- key: 'keepTyping',
295
- value: function keepTyping(curString, curStrPos, numChars) {
296
- // call before functions if applicable
297
- if (curStrPos === 0) {
298
- this.toggleBlinking(false);
299
- this.options.preStringTyped(this.arrayPos, this);
300
- }
301
- // start typing each new char into existing string
302
- // curString: arg, this.el.html: original text inside element
303
- curStrPos += numChars;
304
- var nextString = curString.substr(0, curStrPos);
305
- this.replaceText(nextString);
306
- // loop the function
307
- this.typewrite(curString, curStrPos);
308
- }
309
-
310
- /**
311
- * We're done typing the current string
312
- * @param {string} curString the current string in the strings array
313
- * @param {number} curStrPos the current position in the curString
314
- * @private
315
- */
316
- }, {
317
- key: 'doneTyping',
318
- value: function doneTyping(curString, curStrPos) {
319
- var _this3 = this;
320
-
321
- // fires callback function
322
- this.options.onStringTyped(this.arrayPos, this);
323
- this.toggleBlinking(true);
324
- // is this the final string
325
- if (this.arrayPos === this.strings.length - 1) {
326
- // callback that occurs on the last typed string
327
- this.complete();
328
- // quit if we wont loop back
329
- if (this.loop === false || this.curLoop === this.loopCount) {
330
- return;
331
- }
332
- }
333
- this.timeout = setTimeout(function () {
334
- _this3.backspace(curString, curStrPos);
335
- }, this.backDelay);
336
- }
337
-
338
- /**
339
- * Backspaces 1 character at a time
340
- * @param {string} curString the current string in the strings array
341
- * @param {number} curStrPos the current position in the curString
342
- * @private
343
- */
344
- }, {
345
- key: 'backspace',
346
- value: function backspace(curString, curStrPos) {
347
- var _this4 = this;
348
-
349
- if (this.pause.status === true) {
350
- this.setPauseStatus(curString, curStrPos, false);
351
- return;
352
- }
353
- if (this.fadeOut) return this.initFadeOut();
354
-
355
- this.toggleBlinking(false);
356
- var humanize = this.humanizer(this.backSpeed);
357
-
358
- this.timeout = setTimeout(function () {
359
- curStrPos = _htmlParserJs.htmlParser.backSpaceHtmlChars(curString, curStrPos, _this4);
360
- // replace text with base text + typed characters
361
- var curStringAtPosition = curString.substr(0, curStrPos);
362
- _this4.replaceText(curStringAtPosition);
363
-
364
- // if smartBack is enabled
365
- if (_this4.smartBackspace) {
366
- // the remaining part of the current string is equal of the same part of the new string
367
- var nextString = _this4.strings[_this4.arrayPos + 1];
368
- if (nextString && curStringAtPosition === nextString.substr(0, curStrPos)) {
369
- _this4.stopNum = curStrPos;
370
- } else {
371
- _this4.stopNum = 0;
372
- }
373
- }
374
-
375
- // if the number (id of character in current string) is
376
- // less than the stop number, keep going
377
- if (curStrPos > _this4.stopNum) {
378
- // subtract characters one by one
379
- curStrPos--;
380
- // loop the function
381
- _this4.backspace(curString, curStrPos);
382
- } else if (curStrPos <= _this4.stopNum) {
383
- // if the stop number has been reached, increase
384
- // array position to next string
385
- _this4.arrayPos++;
386
- // When looping, begin at the beginning after backspace complete
387
- if (_this4.arrayPos === _this4.strings.length) {
388
- _this4.arrayPos = 0;
389
- _this4.options.onLastStringBackspaced();
390
- _this4.shuffleStringsIfNeeded();
391
- _this4.begin();
392
- } else {
393
- _this4.typewrite(_this4.strings[_this4.sequence[_this4.arrayPos]], curStrPos);
394
- }
395
- }
396
- // humanized value for typing
397
- }, humanize);
398
- }
399
-
400
- /**
401
- * Full animation is complete
402
- * @private
403
- */
404
- }, {
405
- key: 'complete',
406
- value: function complete() {
407
- this.options.onComplete(this);
408
- if (this.loop) {
409
- this.curLoop++;
410
- } else {
411
- this.typingComplete = true;
412
- }
413
- }
414
-
415
- /**
416
- * Has the typing been stopped
417
- * @param {string} curString the current string in the strings array
418
- * @param {number} curStrPos the current position in the curString
419
- * @param {boolean} isTyping
420
- * @private
421
- */
422
- }, {
423
- key: 'setPauseStatus',
424
- value: function setPauseStatus(curString, curStrPos, isTyping) {
425
- this.pause.typewrite = isTyping;
426
- this.pause.curString = curString;
427
- this.pause.curStrPos = curStrPos;
428
- }
429
-
430
- /**
431
- * Toggle the blinking cursor
432
- * @param {boolean} isBlinking
433
- * @private
434
- */
435
- }, {
436
- key: 'toggleBlinking',
437
- value: function toggleBlinking(isBlinking) {
438
- if (!this.cursor) return;
439
- // if in paused state, don't toggle blinking a 2nd time
440
- if (this.pause.status) return;
441
- if (this.cursorBlinking === isBlinking) return;
442
- this.cursorBlinking = isBlinking;
443
- if (isBlinking) {
444
- this.cursor.classList.add('typed-cursor--blink');
445
- } else {
446
- this.cursor.classList.remove('typed-cursor--blink');
447
- }
448
- }
449
-
450
- /**
451
- * Speed in MS to type
452
- * @param {number} speed
453
- * @private
454
- */
455
- }, {
456
- key: 'humanizer',
457
- value: function humanizer(speed) {
458
- return Math.round(Math.random() * speed / 2) + speed;
459
- }
460
-
461
- /**
462
- * Shuffle the sequence of the strings array
463
- * @private
464
- */
465
- }, {
466
- key: 'shuffleStringsIfNeeded',
467
- value: function shuffleStringsIfNeeded() {
468
- if (!this.shuffle) return;
469
- this.sequence = this.sequence.sort(function () {
470
- return Math.random() - 0.5;
471
- });
472
- }
473
-
474
- /**
475
- * Adds a CSS class to fade out current string
476
- * @private
477
- */
478
- }, {
479
- key: 'initFadeOut',
480
- value: function initFadeOut() {
481
- var _this5 = this;
482
-
483
- this.el.className += ' ' + this.fadeOutClass;
484
- if (this.cursor) this.cursor.className += ' ' + this.fadeOutClass;
485
- return setTimeout(function () {
486
- _this5.arrayPos++;
487
- _this5.replaceText('');
488
-
489
- // Resets current string if end of loop reached
490
- if (_this5.strings.length > _this5.arrayPos) {
491
- _this5.typewrite(_this5.strings[_this5.sequence[_this5.arrayPos]], 0);
492
- } else {
493
- _this5.typewrite(_this5.strings[0], 0);
494
- _this5.arrayPos = 0;
495
- }
496
- }, this.fadeOutDelay);
497
- }
498
-
499
- /**
500
- * Replaces current text in the HTML element
501
- * depending on element type
502
- * @param {string} str
503
- * @private
504
- */
505
- }, {
506
- key: 'replaceText',
507
- value: function replaceText(str) {
508
- if (this.attr) {
509
- this.el.setAttribute(this.attr, str);
510
- } else {
511
- if (this.isInput) {
512
- this.el.value = str;
513
- } else if (this.contentType === 'html') {
514
- this.el.innerHTML = str;
515
- } else {
516
- this.el.textContent = str;
517
- }
518
- }
519
- }
520
-
521
- /**
522
- * If using input elements, bind focus in order to
523
- * start and stop the animation
524
- * @private
525
- */
526
- }, {
527
- key: 'bindFocusEvents',
528
- value: function bindFocusEvents() {
529
- var _this6 = this;
530
-
531
- if (!this.isInput) return;
532
- this.el.addEventListener('focus', function (e) {
533
- _this6.stop();
534
- });
535
- this.el.addEventListener('blur', function (e) {
536
- if (_this6.el.value && _this6.el.value.length !== 0) {
537
- return;
538
- }
539
- _this6.start();
540
- });
541
- }
542
-
543
- /**
544
- * On init, insert the cursor element
545
- * @private
546
- */
547
- }, {
548
- key: 'insertCursor',
549
- value: function insertCursor() {
550
- if (!this.showCursor) return;
551
- if (this.cursor) return;
552
- this.cursor = document.createElement('span');
553
- this.cursor.className = 'typed-cursor';
554
- this.cursor.setAttribute('aria-hidden', true);
555
- this.cursor.innerHTML = this.cursorChar;
556
- this.el.parentNode && this.el.parentNode.insertBefore(this.cursor, this.el.nextSibling);
557
- }
558
- }]);
559
-
560
- return Typed;
561
- })();
562
-
563
- exports['default'] = Typed;
564
- module.exports = exports['default'];
565
-
566
- /***/ }),
567
- /* 1 */
568
- /***/ (function(module, exports, __webpack_require__) {
569
-
570
- 'use strict';
571
-
572
- Object.defineProperty(exports, '__esModule', {
573
- value: true
574
- });
575
-
576
- 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; };
577
-
578
- 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; }; })();
579
-
580
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
581
-
582
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
583
-
584
- var _defaultsJs = __webpack_require__(2);
585
-
586
- var _defaultsJs2 = _interopRequireDefault(_defaultsJs);
587
-
588
- /**
589
- * Initialize the Typed object
590
- */
591
-
592
- var Initializer = (function () {
593
- function Initializer() {
594
- _classCallCheck(this, Initializer);
595
- }
596
-
597
- _createClass(Initializer, [{
598
- key: 'load',
599
-
600
- /**
601
- * Load up defaults & options on the Typed instance
602
- * @param {Typed} self instance of Typed
603
- * @param {object} options options object
604
- * @param {string} elementId HTML element ID _OR_ instance of HTML element
605
- * @private
606
- */
607
-
608
- value: function load(self, options, elementId) {
609
- // chosen element to manipulate text
610
- if (typeof elementId === 'string') {
611
- self.el = document.querySelector(elementId);
612
- } else {
613
- self.el = elementId;
614
- }
615
-
616
- self.options = _extends({}, _defaultsJs2['default'], options);
617
-
618
- // attribute to type into
619
- self.isInput = self.el.tagName.toLowerCase() === 'input';
620
- self.attr = self.options.attr;
621
- self.bindInputFocusEvents = self.options.bindInputFocusEvents;
622
-
623
- // show cursor
624
- self.showCursor = self.isInput ? false : self.options.showCursor;
625
-
626
- // custom cursor
627
- self.cursorChar = self.options.cursorChar;
628
-
629
- // Is the cursor blinking
630
- self.cursorBlinking = true;
631
-
632
- // text content of element
633
- self.elContent = self.attr ? self.el.getAttribute(self.attr) : self.el.textContent;
634
-
635
- // html or plain text
636
- self.contentType = self.options.contentType;
637
-
638
- // typing speed
639
- self.typeSpeed = self.options.typeSpeed;
640
-
641
- // add a delay before typing starts
642
- self.startDelay = self.options.startDelay;
643
-
644
- // backspacing speed
645
- self.backSpeed = self.options.backSpeed;
646
-
647
- // only backspace what doesn't match the previous string
648
- self.smartBackspace = self.options.smartBackspace;
649
-
650
- // amount of time to wait before backspacing
651
- self.backDelay = self.options.backDelay;
652
-
653
- // Fade out instead of backspace
654
- self.fadeOut = self.options.fadeOut;
655
- self.fadeOutClass = self.options.fadeOutClass;
656
- self.fadeOutDelay = self.options.fadeOutDelay;
657
-
658
- // variable to check whether typing is currently paused
659
- self.isPaused = false;
660
-
661
- // input strings of text
662
- self.strings = self.options.strings.map(function (s) {
663
- return s.trim();
664
- });
665
-
666
- // div containing strings
667
- if (typeof self.options.stringsElement === 'string') {
668
- self.stringsElement = document.querySelector(self.options.stringsElement);
669
- } else {
670
- self.stringsElement = self.options.stringsElement;
671
- }
672
-
673
- if (self.stringsElement) {
674
- self.strings = [];
675
- self.stringsElement.style.display = 'none';
676
- var strings = Array.prototype.slice.apply(self.stringsElement.children);
677
- var stringsLength = strings.length;
678
-
679
- if (stringsLength) {
680
- for (var i = 0; i < stringsLength; i += 1) {
681
- var stringEl = strings[i];
682
- self.strings.push(stringEl.innerHTML.trim());
683
- }
684
- }
685
- }
686
-
687
- // character number position of current string
688
- self.strPos = 0;
689
-
690
- // current array position
691
- self.arrayPos = 0;
692
-
693
- // index of string to stop backspacing on
694
- self.stopNum = 0;
695
-
696
- // Looping logic
697
- self.loop = self.options.loop;
698
- self.loopCount = self.options.loopCount;
699
- self.curLoop = 0;
700
-
701
- // shuffle the strings
702
- self.shuffle = self.options.shuffle;
703
- // the order of strings
704
- self.sequence = [];
705
-
706
- self.pause = {
707
- status: false,
708
- typewrite: true,
709
- curString: '',
710
- curStrPos: 0
711
- };
712
-
713
- // When the typing is complete (when not looped)
714
- self.typingComplete = false;
715
-
716
- // Set the order in which the strings are typed
717
- for (var i in self.strings) {
718
- self.sequence[i] = i;
719
- }
720
-
721
- // If there is some text in the element
722
- self.currentElContent = this.getCurrentElContent(self);
723
-
724
- self.autoInsertCss = self.options.autoInsertCss;
725
-
726
- this.appendAnimationCss(self);
727
- }
728
- }, {
729
- key: 'getCurrentElContent',
730
- value: function getCurrentElContent(self) {
731
- var elContent = '';
732
- if (self.attr) {
733
- elContent = self.el.getAttribute(self.attr);
734
- } else if (self.isInput) {
735
- elContent = self.el.value;
736
- } else if (self.contentType === 'html') {
737
- elContent = self.el.innerHTML;
738
- } else {
739
- elContent = self.el.textContent;
740
- }
741
- return elContent;
742
- }
743
- }, {
744
- key: 'appendAnimationCss',
745
- value: function appendAnimationCss(self) {
746
- var cssDataName = 'data-typed-js-css';
747
- if (!self.autoInsertCss) {
748
- return;
749
- }
750
- if (!self.showCursor && !self.fadeOut) {
751
- return;
752
- }
753
- if (document.querySelector('[' + cssDataName + ']')) {
754
- return;
755
- }
756
-
757
- var css = document.createElement('style');
758
- css.type = 'text/css';
759
- css.setAttribute(cssDataName, true);
760
-
761
- var innerCss = '';
762
- if (self.showCursor) {
763
- 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 ';
764
- }
765
- if (self.fadeOut) {
766
- 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 ';
767
- }
768
- if (css.length === 0) {
769
- return;
770
- }
771
- css.innerHTML = innerCss;
772
- document.body.appendChild(css);
773
- }
774
- }]);
775
-
776
- return Initializer;
777
- })();
778
-
779
- exports['default'] = Initializer;
780
- var initializer = new Initializer();
781
- exports.initializer = initializer;
782
-
783
- /***/ }),
784
- /* 2 */
785
- /***/ (function(module, exports) {
786
-
787
- /**
788
- * Defaults & options
789
- * @returns {object} Typed defaults & options
790
- * @public
791
- */
792
-
793
- 'use strict';
794
-
795
- Object.defineProperty(exports, '__esModule', {
796
- value: true
797
- });
798
- var defaults = {
799
- /**
800
- * @property {array} strings strings to be typed
801
- * @property {string} stringsElement ID of element containing string children
802
- */
803
- strings: ['These are the default values...', 'You know what you should do?', 'Use your own!', 'Have a great day!'],
804
- stringsElement: null,
805
-
806
- /**
807
- * @property {number} typeSpeed type speed in milliseconds
808
- */
809
- typeSpeed: 0,
810
-
811
- /**
812
- * @property {number} startDelay time before typing starts in milliseconds
813
- */
814
- startDelay: 0,
815
-
816
- /**
817
- * @property {number} backSpeed backspacing speed in milliseconds
818
- */
819
- backSpeed: 0,
820
-
821
- /**
822
- * @property {boolean} smartBackspace only backspace what doesn't match the previous string
823
- */
824
- smartBackspace: true,
825
-
826
- /**
827
- * @property {boolean} shuffle shuffle the strings
828
- */
829
- shuffle: false,
830
-
831
- /**
832
- * @property {number} backDelay time before backspacing in milliseconds
833
- */
834
- backDelay: 700,
835
-
836
- /**
837
- * @property {boolean} fadeOut Fade out instead of backspace
838
- * @property {string} fadeOutClass css class for fade animation
839
- * @property {boolean} fadeOutDelay Fade out delay in milliseconds
840
- */
841
- fadeOut: false,
842
- fadeOutClass: 'typed-fade-out',
843
- fadeOutDelay: 500,
844
-
845
- /**
846
- * @property {boolean} loop loop strings
847
- * @property {number} loopCount amount of loops
848
- */
849
- loop: false,
850
- loopCount: Infinity,
851
-
852
- /**
853
- * @property {boolean} showCursor show cursor
854
- * @property {string} cursorChar character for cursor
855
- * @property {boolean} autoInsertCss insert CSS for cursor and fadeOut into HTML <head>
856
- */
857
- showCursor: true,
858
- cursorChar: '|',
859
- autoInsertCss: true,
860
-
861
- /**
862
- * @property {string} attr attribute for typing
863
- * Ex: input placeholder, value, or just HTML text
864
- */
865
- attr: null,
866
-
867
- /**
868
- * @property {boolean} bindInputFocusEvents bind to focus and blur if el is text input
869
- */
870
- bindInputFocusEvents: false,
871
-
872
- /**
873
- * @property {string} contentType 'html' or 'null' for plaintext
874
- */
875
- contentType: 'html',
876
-
877
- /**
878
- * Before it begins typing
879
- * @param {Typed} self
880
- */
881
- onBegin: function onBegin(self) {},
882
-
883
- /**
884
- * All typing is complete
885
- * @param {Typed} self
886
- */
887
- onComplete: function onComplete(self) {},
888
-
889
- /**
890
- * Before each string is typed
891
- * @param {number} arrayPos
892
- * @param {Typed} self
893
- */
894
- preStringTyped: function preStringTyped(arrayPos, self) {},
895
-
896
- /**
897
- * After each string is typed
898
- * @param {number} arrayPos
899
- * @param {Typed} self
900
- */
901
- onStringTyped: function onStringTyped(arrayPos, self) {},
902
-
903
- /**
904
- * During looping, after last string is typed
905
- * @param {Typed} self
906
- */
907
- onLastStringBackspaced: function onLastStringBackspaced(self) {},
908
-
909
- /**
910
- * Typing has been stopped
911
- * @param {number} arrayPos
912
- * @param {Typed} self
913
- */
914
- onTypingPaused: function onTypingPaused(arrayPos, self) {},
915
-
916
- /**
917
- * Typing has been started after being stopped
918
- * @param {number} arrayPos
919
- * @param {Typed} self
920
- */
921
- onTypingResumed: function onTypingResumed(arrayPos, self) {},
922
-
923
- /**
924
- * After reset
925
- * @param {Typed} self
926
- */
927
- onReset: function onReset(self) {},
928
-
929
- /**
930
- * After stop
931
- * @param {number} arrayPos
932
- * @param {Typed} self
933
- */
934
- onStop: function onStop(arrayPos, self) {},
935
-
936
- /**
937
- * After start
938
- * @param {number} arrayPos
939
- * @param {Typed} self
940
- */
941
- onStart: function onStart(arrayPos, self) {},
942
-
943
- /**
944
- * After destroy
945
- * @param {Typed} self
946
- */
947
- onDestroy: function onDestroy(self) {}
948
- };
949
-
950
- exports['default'] = defaults;
951
- module.exports = exports['default'];
952
-
953
- /***/ }),
954
- /* 3 */
955
- /***/ (function(module, exports) {
956
-
957
- /**
958
- * TODO: These methods can probably be combined somehow
959
- * Parse HTML tags & HTML Characters
960
- */
961
-
962
- 'use strict';
963
-
964
- Object.defineProperty(exports, '__esModule', {
965
- value: true
966
- });
967
-
968
- 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; }; })();
969
-
970
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
971
-
972
- var HTMLParser = (function () {
973
- function HTMLParser() {
974
- _classCallCheck(this, HTMLParser);
975
- }
976
-
977
- _createClass(HTMLParser, [{
978
- key: 'typeHtmlChars',
979
-
980
- /**
981
- * Type HTML tags & HTML Characters
982
- * @param {string} curString Current string
983
- * @param {number} curStrPos Position in current string
984
- * @param {Typed} self instance of Typed
985
- * @returns {number} a new string position
986
- * @private
987
- */
988
-
989
- value: function typeHtmlChars(curString, curStrPos, self) {
990
- if (self.contentType !== 'html') return curStrPos;
991
- var curChar = curString.substr(curStrPos).charAt(0);
992
- if (curChar === '<' || curChar === '&') {
993
- var endTag = '';
994
- if (curChar === '<') {
995
- endTag = '>';
996
- } else {
997
- endTag = ';';
998
- }
999
- while (curString.substr(curStrPos + 1).charAt(0) !== endTag) {
1000
- curStrPos++;
1001
- if (curStrPos + 1 > curString.length) {
1002
- break;
1003
- }
1004
- }
1005
- curStrPos++;
1006
- }
1007
- return curStrPos;
1008
- }
1009
-
1010
- /**
1011
- * Backspace HTML tags and HTML Characters
1012
- * @param {string} curString Current string
1013
- * @param {number} curStrPos Position in current string
1014
- * @param {Typed} self instance of Typed
1015
- * @returns {number} a new string position
1016
- * @private
1017
- */
1018
- }, {
1019
- key: 'backSpaceHtmlChars',
1020
- value: function backSpaceHtmlChars(curString, curStrPos, self) {
1021
- if (self.contentType !== 'html') return curStrPos;
1022
- var curChar = curString.substr(curStrPos).charAt(0);
1023
- if (curChar === '>' || curChar === ';') {
1024
- var endTag = '';
1025
- if (curChar === '>') {
1026
- endTag = '<';
1027
- } else {
1028
- endTag = '&';
1029
- }
1030
- while (curString.substr(curStrPos - 1).charAt(0) !== endTag) {
1031
- curStrPos--;
1032
- if (curStrPos < 0) {
1033
- break;
1034
- }
1035
- }
1036
- curStrPos--;
1037
- }
1038
- return curStrPos;
1039
- }
1040
- }]);
1041
-
1042
- return HTMLParser;
1043
- })();
1044
-
1045
- exports['default'] = HTMLParser;
1046
- var htmlParser = new HTMLParser();
1047
- exports.htmlParser = htmlParser;
1048
-
1049
- /***/ })
1050
- /******/ ])
1051
- });
1052
- ;