1 | (function (global, factory) {
|
2 | typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
3 | typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
4 | (global = global || self, factory(global.window = global.window || {}));
|
5 | }(this, (function (exports) { 'use strict';
|
6 |
|
7 | var _trimExp = /(^\s+|\s+$)/g;
|
8 | var emojiExp = /([\uD800-\uDBFF][\uDC00-\uDFFF](?:[\u200D\uFE0F][\uD800-\uDBFF][\uDC00-\uDFFF]){2,}|\uD83D\uDC69(?:\u200D(?:(?:\uD83D\uDC69\u200D)?\uD83D\uDC67|(?:\uD83D\uDC69\u200D)?\uD83D\uDC66)|\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D(?:\uD83D\uDC69\u200D)?\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D(?:\uD83D\uDC69\u200D)?\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]\uFE0F|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC6F\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3C-\uDD3E\uDDD6-\uDDDF])\u200D[\u2640\u2642]\uFE0F|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F\u200D[\u2640\u2642]|(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642])\uFE0F|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC69\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708]))\uFE0F|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83D\uDC69\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC66\u200D\uD83D\uDC66|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]))|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\u200D(?:(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC67|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC66)|\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDD1-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])?|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF8]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD4C\uDD50-\uDD6B\uDD80-\uDD97\uDDC0\uDDD0-\uDDE6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF8]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD4C\uDD50-\uDD6B\uDD80-\uDD97\uDDC0\uDDD0-\uDDE6])\uFE0F)/;
|
9 | function getText(e) {
|
10 | var type = e.nodeType,
|
11 | result = "";
|
12 |
|
13 | if (type === 1 || type === 9 || type === 11) {
|
14 | if (typeof e.textContent === "string") {
|
15 | return e.textContent;
|
16 | } else {
|
17 | for (e = e.firstChild; e; e = e.nextSibling) {
|
18 | result += getText(e);
|
19 | }
|
20 | }
|
21 | } else if (type === 3 || type === 4) {
|
22 | return e.nodeValue;
|
23 | }
|
24 |
|
25 | return result;
|
26 | }
|
27 | function splitInnerHTML(element, delimiter, trim) {
|
28 | var node = element.firstChild,
|
29 | result = [];
|
30 |
|
31 | while (node) {
|
32 | if (node.nodeType === 3) {
|
33 | result.push.apply(result, emojiSafeSplit((node.nodeValue + "").replace(/^\n+/g, "").replace(/\s+/g, " "), delimiter, trim));
|
34 | } else if ((node.nodeName + "").toLowerCase() === "br") {
|
35 | result[result.length - 1] += "<br>";
|
36 | } else {
|
37 | result.push(node.outerHTML);
|
38 | }
|
39 |
|
40 | node = node.nextSibling;
|
41 | }
|
42 |
|
43 | return result;
|
44 | }
|
45 | function emojiSafeSplit(text, delimiter, trim) {
|
46 | text += "";
|
47 |
|
48 | if (trim) {
|
49 | text = text.replace(_trimExp, "");
|
50 | }
|
51 |
|
52 | if (delimiter && delimiter !== "") {
|
53 | return text.replace(/>/g, ">").replace(/</g, "<").split(delimiter);
|
54 | }
|
55 |
|
56 | var result = [],
|
57 | l = text.length,
|
58 | i = 0,
|
59 | j,
|
60 | character;
|
61 |
|
62 | for (; i < l; i++) {
|
63 | character = text.charAt(i);
|
64 |
|
65 | if (character.charCodeAt(0) >= 0xD800 && character.charCodeAt(0) <= 0xDBFF || text.charCodeAt(i + 1) >= 0xFE00 && text.charCodeAt(i + 1) <= 0xFE0F) {
|
66 | j = ((text.substr(i, 12).split(emojiExp) || [])[1] || "").length || 2;
|
67 | character = text.substr(i, j);
|
68 | result.emoji = 1;
|
69 | i += j - 1;
|
70 | }
|
71 |
|
72 | result.push(character === ">" ? ">" : character === "<" ? "<" : character);
|
73 | }
|
74 |
|
75 | return result;
|
76 | }
|
77 |
|
78 | |
79 |
|
80 |
|
81 |
|
82 |
|
83 |
|
84 |
|
85 |
|
86 |
|
87 |
|
88 | var gsap,
|
89 | _tempDiv,
|
90 | _getGSAP = function _getGSAP() {
|
91 | return gsap || typeof window !== "undefined" && (gsap = window.gsap) && gsap.registerPlugin && gsap;
|
92 | };
|
93 |
|
94 | var TextPlugin = {
|
95 | version: "3.5.1",
|
96 | name: "text",
|
97 | init: function init(target, value, tween) {
|
98 | var i = target.nodeName.toUpperCase(),
|
99 | data = this,
|
100 | _short,
|
101 | text,
|
102 | original,
|
103 | j,
|
104 | condensedText,
|
105 | condensedOriginal,
|
106 | aggregate,
|
107 | s;
|
108 |
|
109 | data.svg = target.getBBox && (i === "TEXT" || i === "TSPAN");
|
110 |
|
111 | if (!("innerHTML" in target) && !data.svg) {
|
112 | return false;
|
113 | }
|
114 |
|
115 | data.target = target;
|
116 |
|
117 | if (typeof value !== "object") {
|
118 | value = {
|
119 | value: value
|
120 | };
|
121 | }
|
122 |
|
123 | if (!("value" in value)) {
|
124 | data.text = data.original = [""];
|
125 | return;
|
126 | }
|
127 |
|
128 | data.delimiter = value.delimiter || "";
|
129 | original = splitInnerHTML(target, data.delimiter);
|
130 |
|
131 | if (!_tempDiv) {
|
132 | _tempDiv = document.createElement("div");
|
133 | }
|
134 |
|
135 | _tempDiv.innerHTML = value.value;
|
136 | text = splitInnerHTML(_tempDiv, data.delimiter);
|
137 | data.from = tween._from;
|
138 |
|
139 | if (data.from) {
|
140 | i = original;
|
141 | original = text;
|
142 | text = i;
|
143 | }
|
144 |
|
145 | data.hasClass = !!(value.newClass || value.oldClass);
|
146 | data.newClass = value.newClass;
|
147 | data.oldClass = value.oldClass;
|
148 | i = original.length - text.length;
|
149 | _short = i < 0 ? original : text;
|
150 | data.fillChar = value.fillChar || (value.padSpace ? " " : "");
|
151 |
|
152 | if (i < 0) {
|
153 | i = -i;
|
154 | }
|
155 |
|
156 | while (--i > -1) {
|
157 | _short.push(data.fillChar);
|
158 | }
|
159 |
|
160 | if (value.type === "diff") {
|
161 | j = 0;
|
162 | condensedText = [];
|
163 | condensedOriginal = [];
|
164 | aggregate = "";
|
165 |
|
166 | for (i = 0; i < text.length; i++) {
|
167 | s = text[i];
|
168 |
|
169 | if (s === original[i]) {
|
170 | aggregate += s;
|
171 | } else {
|
172 | condensedText[j] = aggregate + s;
|
173 | condensedOriginal[j++] = aggregate + original[i];
|
174 | aggregate = "";
|
175 | }
|
176 | }
|
177 |
|
178 | text = condensedText;
|
179 | original = condensedOriginal;
|
180 |
|
181 | if (aggregate) {
|
182 | text.push(aggregate);
|
183 | original.push(aggregate);
|
184 | }
|
185 | }
|
186 |
|
187 | if (value.speed) {
|
188 | tween.duration(Math.min(0.05 / value.speed * _short.length, value.maxDuration || 9999));
|
189 | }
|
190 |
|
191 | this.original = original;
|
192 | this.text = text;
|
193 |
|
194 | this._props.push("text");
|
195 | },
|
196 | render: function render(ratio, data) {
|
197 | if (ratio > 1) {
|
198 | ratio = 1;
|
199 | } else if (ratio < 0) {
|
200 | ratio = 0;
|
201 | }
|
202 |
|
203 | if (data.from) {
|
204 | ratio = 1 - ratio;
|
205 | }
|
206 |
|
207 | var text = data.text,
|
208 | hasClass = data.hasClass,
|
209 | newClass = data.newClass,
|
210 | oldClass = data.oldClass,
|
211 | delimiter = data.delimiter,
|
212 | target = data.target,
|
213 | fillChar = data.fillChar,
|
214 | original = data.original,
|
215 | l = text.length,
|
216 | i = ratio * l + 0.5 | 0,
|
217 | applyNew,
|
218 | applyOld,
|
219 | str;
|
220 |
|
221 | if (hasClass) {
|
222 | applyNew = newClass && i;
|
223 | applyOld = oldClass && i !== l;
|
224 | str = (applyNew ? "<span class='" + newClass + "'>" : "") + text.slice(0, i).join(delimiter) + (applyNew ? "</span>" : "") + (applyOld ? "<span class='" + oldClass + "'>" : "") + delimiter + original.slice(i).join(delimiter) + (applyOld ? "</span>" : "");
|
225 | } else {
|
226 | str = text.slice(0, i).join(delimiter) + delimiter + original.slice(i).join(delimiter);
|
227 | }
|
228 |
|
229 | if (data.svg) {
|
230 | target.textContent = str;
|
231 | } else {
|
232 | target.innerHTML = fillChar === " " && ~str.indexOf(" ") ? str.split(" ").join(" ") : str;
|
233 | }
|
234 | }
|
235 | };
|
236 | TextPlugin.splitInnerHTML = splitInnerHTML;
|
237 | TextPlugin.emojiSafeSplit = emojiSafeSplit;
|
238 | TextPlugin.getText = getText;
|
239 | _getGSAP() && gsap.registerPlugin(TextPlugin);
|
240 |
|
241 | exports.TextPlugin = TextPlugin;
|
242 | exports.default = TextPlugin;
|
243 |
|
244 | Object.defineProperty(exports, '__esModule', { value: true });
|
245 |
|
246 | })));
|