lanimate 1.0.1

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 David Vielhuber
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,27 @@
1
+ # 🥤 lanimate 🥤
2
+
3
+ lanimate is a small library that animates appearing dom elements.
4
+
5
+ ## installation
6
+
7
+ use it as a module:
8
+
9
+ ```
10
+ npm install lanimate
11
+ ```
12
+
13
+ ```js
14
+ import lanimate from 'lanimate';
15
+ ```
16
+
17
+ or include it the traditional way:
18
+
19
+ ```html
20
+ <script src="lanimate.min.js"></script>
21
+ ```
22
+
23
+ ## usage
24
+
25
+ ```js
26
+ new lanimate();
27
+ ```
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var lanimate = /*#__PURE__*/function () {
15
+ function lanimate() {
16
+ var _this = this;
17
+
18
+ (0, _classCallCheck2.default)(this, lanimate);
19
+ document.addEventListener('DOMContentLoaded', function () {
20
+ _this.ready();
21
+ });
22
+ window.addEventListener('load', function () {
23
+ _this.load();
24
+ });
25
+ }
26
+
27
+ (0, _createClass2.default)(lanimate, [{
28
+ key: "ready",
29
+ value: function ready() {
30
+ document.head.insertAdjacentHTML('beforeend', "\n <style>\n [data-lanimate] {\n opacity: 0;\n }\n /* disable on mobile */\n @media screen and (max-width: 1100px) {\n [data-lanimate] {\n transition: all 0s ease 0s;\n opacity: 1;\n }\n [data-lanimate='scrollX'] {\n transform: translateX(0px);\n }\n [data-lanimate='scrollY'] {\n transform: translateX(0px);\n }\n [data-lanimate='scale'] {\n transform: scale(1) translateY(0px);\n }\n [data-lanimate='rotate'] {\n transform: rotate(0deg);\n }\n }\n </style>\n ");
31
+ }
32
+ }, {
33
+ key: "traverseAllTextNodes",
34
+ value: function traverseAllTextNodes($el, $fn) {
35
+ var _this2 = this;
36
+
37
+ if ($el.childNodes.length > 0) {
38
+ $el.childNodes.forEach(function ($el2) {
39
+ if ($el2.nodeType === 3) {
40
+ $el2.textContent = $fn($el2.textContent);
41
+ } else {
42
+ _this2.traverseAllTextNodes($el2, $fn);
43
+ }
44
+ });
45
+ }
46
+ }
47
+ }, {
48
+ key: "load",
49
+ value: function load() {
50
+ var _this3 = this;
51
+
52
+ if (document.querySelectorAll('[data-lanimate-split]').length > 0) {
53
+ document.querySelectorAll('[data-lanimate-split]').forEach(function ($el) {
54
+ $el.setAttribute('data-aria-label', $el.innerText.replace(/(?:\r\n|\r|\n)/g, ' '));
55
+ $el.innerHTML = $el.innerHTML.split(' ').join('&nbsp;');
56
+ var shift = 0;
57
+
58
+ if ($el.getAttribute('data-lanimate-split') === 'char') {
59
+ _this3.traverseAllTextNodes($el, function ($text) {
60
+ return '%span%' + $text.split('').join('%/span%%span%') + '%/span%';
61
+ });
62
+
63
+ $el.innerHTML = $el.innerHTML.split('%span%').join('<span>').split('%/span%').join('</span>');
64
+ shift = 100;
65
+ }
66
+
67
+ if ($el.getAttribute('data-lanimate-split') === 'word') {
68
+ _this3.traverseAllTextNodes($el, function ($text) {
69
+ return '%span%' + $text.split(' ').join('%/span% %span%') + '%/span%';
70
+ });
71
+
72
+ $el.innerHTML = $el.innerHTML.split('%span%').join('<span>').split('%/span%').join('</span>');
73
+ shift = 250;
74
+ }
75
+
76
+ if ($el.getAttribute('data-lanimate-split') === 'line') {
77
+ $el.innerHTML = '<span>' + $el.innerHTML.split('<br>').join('</span><br/><span>') + '</span>';
78
+ shift = 500;
79
+ }
80
+
81
+ var index = 0;
82
+ $el.querySelectorAll('span').forEach(function ($el2, i) {
83
+ if ($el2.innerText.trim() == '') {
84
+ return;
85
+ }
86
+
87
+ $el2.setAttribute('data-lanimate', $el.getAttribute('data-lanimate'));
88
+ var delay = 0;
89
+
90
+ if ($el.hasAttribute('data-lanimate-delay')) {
91
+ delay = parseInt($el.getAttribute('data-lanimate-delay'));
92
+ }
93
+
94
+ if ($el.hasAttribute('data-lanimate-speed')) {
95
+ $el2.setAttribute('data-lanimate-speed', $el.getAttribute('data-lanimate-speed'));
96
+ delay *= 1 / parseInt($el.getAttribute('data-lanimate-speed'));
97
+ }
98
+
99
+ $el2.setAttribute('data-lanimate-delay', delay + shift * index);
100
+ index++;
101
+ });
102
+ $el.removeAttribute('data-lanimate');
103
+ $el.removeAttribute('data-lanimate-delay');
104
+ $el.removeAttribute('data-lanimate-speed');
105
+ });
106
+ }
107
+
108
+ if (document.querySelectorAll('[data-lanimate-speed]').length > 0) {
109
+ document.querySelectorAll('[data-lanimate-speed]').forEach(function ($el) {
110
+ var speed = parseInt($el.getAttribute('data-lanimate-speed')) / 1000;
111
+ setTimeout(function () {
112
+ $el.style.transitionDuration = speed + 's, ' + speed + 's';
113
+ }, 10);
114
+ });
115
+ }
116
+
117
+ if (document.querySelectorAll('[data-lanimate]').length > 0) {
118
+ document.querySelectorAll('[data-lanimate]').forEach(function ($el) {
119
+ _this3.start($el);
120
+
121
+ window.addEventListener('scroll', function () {
122
+ _this3.start($el);
123
+ });
124
+ });
125
+ }
126
+
127
+ document.head.insertAdjacentHTML('beforeend', "\n <style>\n [data-lanimate='fade'] {\n }\n [data-lanimate='scrollX'] {\n transform: translateX(30px);\n }\n [data-lanimate='scrollY'] {\n transform: translateY(30px);\n }\n [data-lanimate='scale'] {\n transform: scale(1.1) translateY(30px);\n }\n [data-lanimate='rotate'] {\n transform: rotate(15deg);\n transform-origin: 0 0;\n }\n [data-lanimate-started] {\n transition: opacity 1s ease-in-out, transform 1s ease-in-out;\n opacity: 1;\n }\n [data-lanimate-split] span {\n display:inline-block;\n }\n [data-lanimate='fade'][data-lanimate-started] {\n }\n [data-lanimate='scrollX'][data-lanimate-started] {\n transform: translateX(0px);\n }\n [data-lanimate='scrollY'][data-lanimate-started] {\n transform: translateX(0px);\n }\n [data-lanimate='scale'][data-lanimate-started] {\n transform: scale(1) translateY(0px);\n }\n [data-lanimate='rotate'][data-lanimate-started] {\n transform: rotate(0deg);\n }\n </style>\n ");
128
+ }
129
+ }, {
130
+ key: "start",
131
+ value: function start($el) {
132
+ if (!$el.hasAttribute('data-lanimate-started') && this.scrollTop() + window.innerHeight >= this.offsetTop($el)) {
133
+ var delay = 0;
134
+
135
+ if ($el.hasAttribute('data-lanimate-delay')) {
136
+ delay = parseInt($el.getAttribute('data-lanimate-delay'));
137
+ }
138
+
139
+ setTimeout(function () {
140
+ $el.setAttribute('data-lanimate-started', 'true');
141
+ }, delay);
142
+ }
143
+ }
144
+ }, {
145
+ key: "scrollTop",
146
+ value: function scrollTop() {
147
+ var doc = document.documentElement;
148
+ return (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
149
+ }
150
+ }, {
151
+ key: "offsetTop",
152
+ value: function offsetTop($el) {
153
+ return $el.getBoundingClientRect().top + window.pageYOffset - document.documentElement.clientTop;
154
+ }
155
+ }]);
156
+ return lanimate;
157
+ }();
158
+
159
+ exports.default = lanimate;
160
+ window.lanimate = lanimate;
@@ -0,0 +1,201 @@
1
+ (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.default = void 0;
10
+
11
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
+
13
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
+
15
+ var lanimate = /*#__PURE__*/function () {
16
+ function lanimate() {
17
+ var _this = this;
18
+
19
+ (0, _classCallCheck2.default)(this, lanimate);
20
+ document.addEventListener('DOMContentLoaded', function () {
21
+ _this.ready();
22
+ });
23
+ window.addEventListener('load', function () {
24
+ _this.load();
25
+ });
26
+ }
27
+
28
+ (0, _createClass2.default)(lanimate, [{
29
+ key: "ready",
30
+ value: function ready() {
31
+ document.head.insertAdjacentHTML('beforeend', "\n <style>\n [data-lanimate] {\n opacity: 0;\n }\n /* disable on mobile */\n @media screen and (max-width: 1100px) {\n [data-lanimate] {\n transition: all 0s ease 0s;\n opacity: 1;\n }\n [data-lanimate='scrollX'] {\n transform: translateX(0px);\n }\n [data-lanimate='scrollY'] {\n transform: translateX(0px);\n }\n [data-lanimate='scale'] {\n transform: scale(1) translateY(0px);\n }\n [data-lanimate='rotate'] {\n transform: rotate(0deg);\n }\n }\n </style>\n ");
32
+ }
33
+ }, {
34
+ key: "traverseAllTextNodes",
35
+ value: function traverseAllTextNodes($el, $fn) {
36
+ var _this2 = this;
37
+
38
+ if ($el.childNodes.length > 0) {
39
+ $el.childNodes.forEach(function ($el2) {
40
+ if ($el2.nodeType === 3) {
41
+ $el2.textContent = $fn($el2.textContent);
42
+ } else {
43
+ _this2.traverseAllTextNodes($el2, $fn);
44
+ }
45
+ });
46
+ }
47
+ }
48
+ }, {
49
+ key: "load",
50
+ value: function load() {
51
+ var _this3 = this;
52
+
53
+ if (document.querySelectorAll('[data-lanimate-split]').length > 0) {
54
+ document.querySelectorAll('[data-lanimate-split]').forEach(function ($el) {
55
+ $el.setAttribute('data-aria-label', $el.innerText.replace(/(?:\r\n|\r|\n)/g, ' '));
56
+ $el.innerHTML = $el.innerHTML.split(' ').join('&nbsp;');
57
+ var shift = 0;
58
+
59
+ if ($el.getAttribute('data-lanimate-split') === 'char') {
60
+ _this3.traverseAllTextNodes($el, function ($text) {
61
+ return '%span%' + $text.split('').join('%/span%%span%') + '%/span%';
62
+ });
63
+
64
+ $el.innerHTML = $el.innerHTML.split('%span%').join('<span>').split('%/span%').join('</span>');
65
+ shift = 100;
66
+ }
67
+
68
+ if ($el.getAttribute('data-lanimate-split') === 'word') {
69
+ _this3.traverseAllTextNodes($el, function ($text) {
70
+ return '%span%' + $text.split(' ').join('%/span% %span%') + '%/span%';
71
+ });
72
+
73
+ $el.innerHTML = $el.innerHTML.split('%span%').join('<span>').split('%/span%').join('</span>');
74
+ shift = 250;
75
+ }
76
+
77
+ if ($el.getAttribute('data-lanimate-split') === 'line') {
78
+ $el.innerHTML = '<span>' + $el.innerHTML.split('<br>').join('</span><br/><span>') + '</span>';
79
+ shift = 500;
80
+ }
81
+
82
+ var index = 0;
83
+ $el.querySelectorAll('span').forEach(function ($el2, i) {
84
+ if ($el2.innerText.trim() == '') {
85
+ return;
86
+ }
87
+
88
+ $el2.setAttribute('data-lanimate', $el.getAttribute('data-lanimate'));
89
+ var delay = 0;
90
+
91
+ if ($el.hasAttribute('data-lanimate-delay')) {
92
+ delay = parseInt($el.getAttribute('data-lanimate-delay'));
93
+ }
94
+
95
+ if ($el.hasAttribute('data-lanimate-speed')) {
96
+ $el2.setAttribute('data-lanimate-speed', $el.getAttribute('data-lanimate-speed'));
97
+ delay *= 1 / parseInt($el.getAttribute('data-lanimate-speed'));
98
+ }
99
+
100
+ $el2.setAttribute('data-lanimate-delay', delay + shift * index);
101
+ index++;
102
+ });
103
+ $el.removeAttribute('data-lanimate');
104
+ $el.removeAttribute('data-lanimate-delay');
105
+ $el.removeAttribute('data-lanimate-speed');
106
+ });
107
+ }
108
+
109
+ if (document.querySelectorAll('[data-lanimate-speed]').length > 0) {
110
+ document.querySelectorAll('[data-lanimate-speed]').forEach(function ($el) {
111
+ var speed = parseInt($el.getAttribute('data-lanimate-speed')) / 1000;
112
+ setTimeout(function () {
113
+ $el.style.transitionDuration = speed + 's, ' + speed + 's';
114
+ }, 10);
115
+ });
116
+ }
117
+
118
+ if (document.querySelectorAll('[data-lanimate]').length > 0) {
119
+ document.querySelectorAll('[data-lanimate]').forEach(function ($el) {
120
+ _this3.start($el);
121
+
122
+ window.addEventListener('scroll', function () {
123
+ _this3.start($el);
124
+ });
125
+ });
126
+ }
127
+
128
+ document.head.insertAdjacentHTML('beforeend', "\n <style>\n [data-lanimate='fade'] {\n }\n [data-lanimate='scrollX'] {\n transform: translateX(30px);\n }\n [data-lanimate='scrollY'] {\n transform: translateY(30px);\n }\n [data-lanimate='scale'] {\n transform: scale(1.1) translateY(30px);\n }\n [data-lanimate='rotate'] {\n transform: rotate(15deg);\n transform-origin: 0 0;\n }\n [data-lanimate-started] {\n transition: opacity 1s ease-in-out, transform 1s ease-in-out;\n opacity: 1;\n }\n [data-lanimate-split] span {\n display:inline-block;\n }\n [data-lanimate='fade'][data-lanimate-started] {\n }\n [data-lanimate='scrollX'][data-lanimate-started] {\n transform: translateX(0px);\n }\n [data-lanimate='scrollY'][data-lanimate-started] {\n transform: translateX(0px);\n }\n [data-lanimate='scale'][data-lanimate-started] {\n transform: scale(1) translateY(0px);\n }\n [data-lanimate='rotate'][data-lanimate-started] {\n transform: rotate(0deg);\n }\n </style>\n ");
129
+ }
130
+ }, {
131
+ key: "start",
132
+ value: function start($el) {
133
+ if (!$el.hasAttribute('data-lanimate-started') && this.scrollTop() + window.innerHeight >= this.offsetTop($el)) {
134
+ var delay = 0;
135
+
136
+ if ($el.hasAttribute('data-lanimate-delay')) {
137
+ delay = parseInt($el.getAttribute('data-lanimate-delay'));
138
+ }
139
+
140
+ setTimeout(function () {
141
+ $el.setAttribute('data-lanimate-started', 'true');
142
+ }, delay);
143
+ }
144
+ }
145
+ }, {
146
+ key: "scrollTop",
147
+ value: function scrollTop() {
148
+ var doc = document.documentElement;
149
+ return (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
150
+ }
151
+ }, {
152
+ key: "offsetTop",
153
+ value: function offsetTop($el) {
154
+ return $el.getBoundingClientRect().top + window.pageYOffset - document.documentElement.clientTop;
155
+ }
156
+ }]);
157
+ return lanimate;
158
+ }();
159
+
160
+ exports.default = lanimate;
161
+ window.lanimate = lanimate;
162
+
163
+ },{"@babel/runtime/helpers/classCallCheck":2,"@babel/runtime/helpers/createClass":3,"@babel/runtime/helpers/interopRequireDefault":4}],2:[function(require,module,exports){
164
+ function _classCallCheck(instance, Constructor) {
165
+ if (!(instance instanceof Constructor)) {
166
+ throw new TypeError("Cannot call a class as a function");
167
+ }
168
+ }
169
+
170
+ module.exports = _classCallCheck, module.exports.__esModule = true, module.exports["default"] = module.exports;
171
+ },{}],3:[function(require,module,exports){
172
+ function _defineProperties(target, props) {
173
+ for (var i = 0; i < props.length; i++) {
174
+ var descriptor = props[i];
175
+ descriptor.enumerable = descriptor.enumerable || false;
176
+ descriptor.configurable = true;
177
+ if ("value" in descriptor) descriptor.writable = true;
178
+ Object.defineProperty(target, descriptor.key, descriptor);
179
+ }
180
+ }
181
+
182
+ function _createClass(Constructor, protoProps, staticProps) {
183
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
184
+ if (staticProps) _defineProperties(Constructor, staticProps);
185
+ Object.defineProperty(Constructor, "prototype", {
186
+ writable: false
187
+ });
188
+ return Constructor;
189
+ }
190
+
191
+ module.exports = _createClass, module.exports.__esModule = true, module.exports["default"] = module.exports;
192
+ },{}],4:[function(require,module,exports){
193
+ function _interopRequireDefault(obj) {
194
+ return obj && obj.__esModule ? obj : {
195
+ "default": obj
196
+ };
197
+ }
198
+
199
+ module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;
200
+ },{}]},{},[1])
201
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJfanMvc2NyaXB0LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7SUNBcUIsUTtBQUNqQixzQkFBYztBQUFBOztBQUFBO0FBQ1YsSUFBQSxRQUFRLENBQUMsZ0JBQVQsQ0FBMEIsa0JBQTFCLEVBQThDLFlBQU07QUFDaEQsTUFBQSxLQUFJLENBQUMsS0FBTDtBQUNILEtBRkQ7QUFHQSxJQUFBLE1BQU0sQ0FBQyxnQkFBUCxDQUF3QixNQUF4QixFQUFnQyxZQUFNO0FBQ2xDLE1BQUEsS0FBSSxDQUFDLElBQUw7QUFDSCxLQUZEO0FBR0g7Ozs7V0FDRCxpQkFBUTtBQUNKLE1BQUEsUUFBUSxDQUFDLElBQVQsQ0FBYyxrQkFBZCxDQUNJLFdBREo7QUE2Qkg7OztXQUNELDhCQUFxQixHQUFyQixFQUEwQixHQUExQixFQUErQjtBQUFBOztBQUMzQixVQUFJLEdBQUcsQ0FBQyxVQUFKLENBQWUsTUFBZixHQUF3QixDQUE1QixFQUErQjtBQUMzQixRQUFBLEdBQUcsQ0FBQyxVQUFKLENBQWUsT0FBZixDQUF1QixVQUFBLElBQUksRUFBSTtBQUMzQixjQUFJLElBQUksQ0FBQyxRQUFMLEtBQWtCLENBQXRCLEVBQXlCO0FBQ3JCLFlBQUEsSUFBSSxDQUFDLFdBQUwsR0FBbUIsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFOLENBQXRCO0FBQ0gsV0FGRCxNQUVPO0FBQ0gsWUFBQSxNQUFJLENBQUMsb0JBQUwsQ0FBMEIsSUFBMUIsRUFBZ0MsR0FBaEM7QUFDSDtB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Q0g7Ozs7OztBQUdMLE1BQU0sQ0FBQyxRQUFQLEdBQWtCLFFBQWxCOzs7QUNwTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBsYW5pbWF0ZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlYWR5KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVhZHkoKSB7XG4gICAgICAgIGRvY3VtZW50LmhlYWQuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgICAgICAgICAgJ2JlZm9yZWVuZCcsXG4gICAgICAgICAgICBgXG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgW2RhdGEtbGFuaW1hdGVdIHtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogZGlzYWJsZSBvbiBtb2JpbGUgKi9cbiAgICAgICAgICAgICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTAwcHgpIHtcbiAgICAgICAgICAgICAgICAgICAgW2RhdGEtbGFuaW1hdGVdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwcyBlYXNlIDBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBbZGF0YS1sYW5pbWF0ZT0nc2Nyb2xsWCddIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwcHgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFtkYXRhLWxhbmltYXRlPSdzY3JvbGxZJ10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDBweCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgW2RhdGEtbGFuaW1hdGU9J3NjYWxlJ10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDBweCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgW2RhdGEtbGFuaW1hdGU9J3JvdGF0ZSddIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zdHlsZT5cbiAgICAgICAgICAgIGBcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdHJhdmVyc2VBbGxUZXh0Tm9kZXMoJGVsLCAkZm4pIHtcbiAgICAgICAgaWYgKCRlbC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICRlbC5jaGlsZE5vZGVzLmZvckVhY2goJGVsMiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCRlbDIubm9kZVR5cGUgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVsMi50ZXh0Q29udGVudCA9ICRmbigkZWwyLnRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYXZlcnNlQWxsVGV4dE5vZGVzKCRlbDIsICRmbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbG9hZCgpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWxhbmltYXRlLXNwbGl0XScpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWxhbmltYXRlLXNwbGl0XScpLmZvckVhY2goJGVsID0+IHtcbiAgICAgICAgICAgICAgICAkZWwuc2V0QXR0cmlidXRlKCdkYXRhLWFyaWEtbGFiZWwnLCAkZWwuaW5uZXJUZXh0LnJlcGxhY2UoLyg/OlxcclxcbnxcXHJ8XFxuKS9nLCAnICcpKTtcbiAgICAgICAgICAgICAgICAkZWwuaW5uZXJIVE1MID0gJGVsLmlubmVySFRNTC5zcGxpdCgnICcpLmpvaW4oJyZuYnNwOycpO1xuICAgICAgICAgICAgICAgIGxldCBzaGlmdCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKCRlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFuaW1hdGUtc3BsaXQnKSA9PT0gJ2NoYXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhdmVyc2VBbGxUZXh0Tm9kZXMoJGVsLCAkdGV4dCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyVzcGFuJScgKyAkdGV4dC5zcGxpdCgnJykuam9pbignJS9zcGFuJSVzcGFuJScpICsgJyUvc3BhbiUnO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgJGVsLmlubmVySFRNTCA9ICRlbC5pbm5lckhUTUwuc3BsaXQoJyVzcGFuJScpLmpvaW4oJzxzcGFuPicpLnNwbGl0KCclL3NwYW4lJykuam9pbignPC9zcGFuPicpO1xuICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFuaW1hdGUtc3BsaXQnKSA9PT0gJ3dvcmQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhdmVyc2VBbGxUZXh0Tm9kZXMoJGVsLCAkdGV4dCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyVzcGFuJScgKyAkdGV4dC5zcGxpdCgnICcpLmpvaW4oJyUvc3BhbiUgJXNwYW4lJykgKyAnJS9zcGFuJSc7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAkZWwuaW5uZXJIVE1MID0gJGVsLmlubmVySFRNTC5zcGxpdCgnJXNwYW4lJykuam9pbignPHNwYW4+Jykuc3BsaXQoJyUvc3BhbiUnKS5qb2luKCc8L3NwYW4+Jyk7XG4gICAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gMjUwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1sYW5pbWF0ZS1zcGxpdCcpID09PSAnbGluZScpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVsLmlubmVySFRNTCA9ICc8c3Bhbj4nICsgJGVsLmlubmVySFRNTC5zcGxpdCgnPGJyPicpLmpvaW4oJzwvc3Bhbj48YnIvPjxzcGFuPicpICsgJzwvc3Bhbj4nO1xuICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IDUwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAkZWwucXVlcnlTZWxlY3RvckFsbCgnc3BhbicpLmZvckVhY2goKCRlbDIsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRlbDIuaW5uZXJUZXh0LnRyaW0oKSA9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICRlbDIuc2V0QXR0cmlidXRlKCdkYXRhLWxhbmltYXRlJywgJGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1sYW5pbWF0ZScpKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlbGF5ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRlbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbGFuaW1hdGUtZGVsYXknKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkgPSBwYXJzZUludCgkZWwuZ2V0QXR0cmlidXRlKCdkYXRhLWxhbmltYXRlLWRlbGF5JykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgkZWwuaGFzQXR0cmlidXRlKCdkYXRhLWxhbmltYXRlLXNwZWVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRlbDIuc2V0QXR0cmlidXRlKCdkYXRhLWxhbmltYXRlLXNwZWVkJywgJGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1sYW5pbWF0ZS1zcGVlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5ICo9IDEgLyBwYXJzZUludCgkZWwuZ2V0QXR0cmlidXRlKCdkYXRhLWxhbmltYXRlLXNwZWVkJykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICRlbDIuc2V0QXR0cmlidXRlKCdkYXRhLWxhbmltYXRlLWRlbGF5JywgZGVsYXkgKyBzaGlmdCAqIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAkZWwucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWxhbmltYXRlJyk7XG4gICAgICAgICAgICAgICAgJGVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1sYW5pbWF0ZS1kZWxheScpO1xuICAgICAgICAgICAgICAgICRlbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbGFuaW1hdGUtc3BlZWQnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1sYW5pbWF0ZS1zcGVlZF0nKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1sYW5pbWF0ZS1zcGVlZF0nKS5mb3JFYWNoKCRlbCA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHNwZWVkID0gcGFyc2VJbnQoJGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1sYW5pbWF0ZS1zcGVlZCcpKSAvIDEwMDA7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICRlbC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBzcGVlZCArICdzLCAnICsgc3BlZWQgKyAncyc7XG4gICAgICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWxhbmltYXRlXScpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWxhbmltYXRlXScpLmZvckVhY2goJGVsID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0KCRlbCk7XG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydCgkZWwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuaGVhZC5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgICAgICAgICAnYmVmb3JlZW5kJyxcbiAgICAgICAgICAgIGBcbiAgICAgICAgICAgIDxzdHlsZT5cbiAgICAgICAgICAgICAgICBbZGF0YS1sYW5pbWF0ZT0nZmFkZSddIHtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgW2RhdGEtbGFuaW1hdGU9J3Njcm9sbFgnXSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgzMHB4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgW2RhdGEtbGFuaW1hdGU9J3Njcm9sbFknXSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgzMHB4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgW2RhdGEtbGFuaW1hdGU9J3NjYWxlJ10ge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSkgdHJhbnNsYXRlWSgzMHB4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgW2RhdGEtbGFuaW1hdGU9J3JvdGF0ZSddIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTVkZWcpO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFtkYXRhLWxhbmltYXRlLXN0YXJ0ZWRdIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAxcyBlYXNlLWluLW91dCwgdHJhbnNmb3JtIDFzIGVhc2UtaW4tb3V0O1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBbZGF0YS1sYW5pbWF0ZS1zcGxpdF0gc3BhbiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBbZGF0YS1sYW5pbWF0ZT0nZmFkZSddW2RhdGEtbGFuaW1hdGUtc3RhcnRlZF0ge1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBbZGF0YS1sYW5pbWF0ZT0nc2Nyb2xsWCddW2RhdGEtbGFuaW1hdGUtc3RhcnRlZF0ge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgW2RhdGEtbGFuaW1hdGU9J3Njcm9sbFknXVtkYXRhLWxhbmltYXRlLXN0YXJ0ZWRdIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDBweCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFtkYXRhLWxhbmltYXRlPSdzY2FsZSddW2RhdGEtbGFuaW1hdGUtc3RhcnRlZF0ge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMHB4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgW2RhdGEtbGFuaW1hdGU9J3JvdGF0ZSddW2RhdGEtbGFuaW1hdGUtc3RhcnRlZF0ge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3N0eWxlPlxuICAgICAgICAgICAgYFxuICAgICAgICApO1xuICAgIH1cbiAgICBzdGFydCgkZWwpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgISRlbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbGFuaW1hdGUtc3RhcnRlZCcpICYmXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvcCgpICsgd2luZG93LmlubmVySGVpZ2h0ID49IHRoaXMub2Zmc2V0VG9wKCRlbClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgZGVsYXkgPSAwO1xuICAgICAgICAgICAgaWYgKCRlbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbGFuaW1hdGUtZGVsYXknKSkge1xuICAgICAgICAgICAgICAgIGRlbGF5ID0gcGFyc2VJbnQoJGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1sYW5pbWF0ZS1kZWxheScpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICRlbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbGFuaW1hdGUtc3RhcnRlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2Nyb2xsVG9wKCkge1xuICAgICAgICBsZXQgZG9jID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZXR1cm4gKHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wKSAtIChkb2MuY2xpZW50VG9wIHx8IDApO1xuICAgIH1cbiAgICBvZmZzZXRUb3AoJGVsKSB7XG4gICAgICAgIHJldHVybiAkZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0IC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFRvcDtcbiAgICB9XG59XG5cbndpbmRvdy5sYW5pbWF0ZSA9IGxhbmltYXRlO1xuIiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2ssIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgIFwiZGVmYXVsdFwiOiBvYmpcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il19
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "lanimate",
3
+ "version": "1.0.1",
4
+ "main": "_build/script.js",
5
+ "files": [
6
+ "_build/*.js",
7
+ "lanimate.min.js"
8
+ ],
9
+ "repository": "git@github.com:vielhuber/lanimate.git",
10
+ "author": "David Vielhuber <david@vielhuber.de>",
11
+ "license": "MIT",
12
+ "description": "",
13
+ "scripts": {
14
+ "js:browserify": "browserify ./_js/script.js --outfile ./lanimate.min.js --debug --transform babelify",
15
+ "js:minify": "terser --compress --mangle --output ./lanimate.min.js ./lanimate.min.js",
16
+ "js:babel": "npx babel ./_js/ --out-dir ./_build/",
17
+ "js": "npm-run-all --sequential js:browserify js:minify js:babel",
18
+ "js:dev": "npm-run-all --sequential js:browserify js:babel",
19
+ "watch:js": "onchange ./_js/*.js --initial --poll 50 --delay 0 --await-write-finish 50 -- npm run js:dev",
20
+ "dev": "npm-run-all --parallel watch:*",
21
+ "prod": "npm-run-all --parallel js"
22
+ },
23
+ "dependencies": {
24
+ "@babel/runtime": "^7.16.7",
25
+ "mdn-polyfills": "^5.20.0",
26
+ "onchange": "^7.1.0"
27
+ },
28
+ "devDependencies": {
29
+ "auto-changelog": "^2.3.0",
30
+ "@babel/cli": "^7.16.8",
31
+ "@babel/core": "^7.16.12",
32
+ "@babel/plugin-proposal-class-properties": "^7.16.7",
33
+ "@babel/plugin-proposal-optional-chaining": "^7.16.7",
34
+ "@babel/plugin-transform-runtime": "^7.16.10",
35
+ "@babel/polyfill": "^7.11.5",
36
+ "@babel/preset-env": "^7.16.11",
37
+ "babelify": "^10.0.0",
38
+ "browserify": "^17.0.0",
39
+ "npm-run-all": "^4.1.5",
40
+ "terser": "^5.10.0"
41
+ },
42
+ "browserslist": [
43
+ "ie >= 11",
44
+ "> 0.25%",
45
+ "not dead"
46
+ ]
47
+ }