@igo2/utils 1.15.3 → 16.0.0-rc.0
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/{esm2020 → esm2022}/igo2-utils.mjs +4 -4
- package/esm2022/lib/base64.mjs +85 -0
- package/esm2022/lib/cache.utils.mjs +10 -0
- package/esm2022/lib/change.interface.mjs +7 -0
- package/esm2022/lib/change.mjs +87 -0
- package/{esm2020 → esm2022}/lib/clipboard.mjs +52 -52
- package/esm2022/lib/dom.utils.mjs +16 -0
- package/esm2022/lib/file.mjs +28 -0
- package/esm2022/lib/index.mjs +16 -0
- package/esm2022/lib/number-utils.mjs +7 -0
- package/esm2022/lib/object-utils.mjs +248 -0
- package/{esm2020 → esm2022}/lib/strenum.mjs +8 -8
- package/{esm2020 → esm2022}/lib/string-utils.mjs +113 -105
- package/esm2022/lib/theme.utils.mjs +18 -0
- package/{esm2020 → esm2022}/lib/user-agent.mjs +3 -3
- package/{esm2020 → esm2022}/lib/uuid.mjs +9 -9
- package/esm2022/lib/watcher.mjs +40 -0
- package/{esm2020 → esm2022}/public_api.mjs +5 -5
- package/{fesm2020 → fesm2022}/igo2-utils.mjs +706 -656
- package/fesm2022/igo2-utils.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/base64.d.ts +8 -8
- package/lib/cache.utils.d.ts +1 -0
- package/lib/change.d.ts +5 -5
- package/lib/change.interface.d.ts +24 -24
- package/lib/clipboard.d.ts +7 -7
- package/lib/dom.utils.d.ts +4 -0
- package/lib/file.d.ts +16 -16
- package/lib/index.d.ts +15 -12
- package/lib/number-utils.d.ts +3 -3
- package/lib/object-utils.d.ts +27 -26
- package/lib/strenum.d.ts +4 -4
- package/lib/string-utils.d.ts +8 -6
- package/lib/theme.utils.d.ts +1 -0
- package/lib/user-agent.d.ts +5 -5
- package/lib/uuid.d.ts +2 -2
- package/lib/watcher.d.ts +19 -19
- package/package.json +10 -16
- package/public_api.d.ts +1 -1
- package/esm2020/lib/base64.mjs +0 -85
- package/esm2020/lib/change.interface.mjs +0 -7
- package/esm2020/lib/change.mjs +0 -87
- package/esm2020/lib/file.mjs +0 -28
- package/esm2020/lib/index.mjs +0 -13
- package/esm2020/lib/number-utils.mjs +0 -7
- package/esm2020/lib/object-utils.mjs +0 -248
- package/esm2020/lib/watcher.mjs +0 -41
- package/fesm2015/igo2-utils.mjs +0 -688
- package/fesm2015/igo2-utils.mjs.map +0 -1
- package/fesm2020/igo2-utils.mjs.map +0 -1
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
export class ObjectUtils {
|
|
2
|
+
static resolve(obj, key) {
|
|
3
|
+
const keysArray = key.replace(/\[/g, '.').replace(/\]/g, '').split('.');
|
|
4
|
+
let current = obj;
|
|
5
|
+
while (keysArray.length) {
|
|
6
|
+
if (typeof current !== 'object') {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
current = current[keysArray.shift()];
|
|
10
|
+
}
|
|
11
|
+
return current;
|
|
12
|
+
}
|
|
13
|
+
static isObject(item) {
|
|
14
|
+
return (item &&
|
|
15
|
+
typeof item === 'object' &&
|
|
16
|
+
!Array.isArray(item) &&
|
|
17
|
+
item !== null &&
|
|
18
|
+
!(item instanceof Date));
|
|
19
|
+
}
|
|
20
|
+
static mergeDeep(target, source, ignoreUndefined = false) {
|
|
21
|
+
const output = Object.assign({}, target);
|
|
22
|
+
if (ObjectUtils.isObject(target) && ObjectUtils.isObject(source)) {
|
|
23
|
+
Object.keys(source)
|
|
24
|
+
.filter((key) => !ignoreUndefined || source[key] !== undefined)
|
|
25
|
+
.forEach((key) => {
|
|
26
|
+
if (ObjectUtils.isObject(source[key])) {
|
|
27
|
+
if (!(key in target)) {
|
|
28
|
+
Object.assign(output, { [key]: source[key] });
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
output[key] = ObjectUtils.mergeDeep(target[key], source[key], ignoreUndefined);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
Object.assign(output, { [key]: source[key] });
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return output;
|
|
40
|
+
}
|
|
41
|
+
static copyDeep(src) {
|
|
42
|
+
const target = Array.isArray(src) ? [] : {};
|
|
43
|
+
for (const prop in src) {
|
|
44
|
+
if (src.hasOwnProperty(prop)) {
|
|
45
|
+
const value = src[prop];
|
|
46
|
+
if (value && typeof value === 'object') {
|
|
47
|
+
target[prop] = this.copyDeep(value);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
target[prop] = value;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return target;
|
|
55
|
+
}
|
|
56
|
+
static removeDuplicateCaseInsensitive(obj) {
|
|
57
|
+
const summaryCapitalizeObject = {};
|
|
58
|
+
const capitalizeObject = {};
|
|
59
|
+
const upperCaseCount = [];
|
|
60
|
+
for (const property in obj) {
|
|
61
|
+
if (obj.hasOwnProperty(property)) {
|
|
62
|
+
const upperCaseProperty = property.toUpperCase();
|
|
63
|
+
if (!summaryCapitalizeObject.hasOwnProperty(upperCaseProperty)) {
|
|
64
|
+
summaryCapitalizeObject[upperCaseProperty] = [
|
|
65
|
+
{ [property]: obj[property] }
|
|
66
|
+
];
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
summaryCapitalizeObject[upperCaseProperty].push({
|
|
70
|
+
[property]: obj[property]
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
// counting the number of uppercase lettersMna
|
|
74
|
+
upperCaseCount.push({
|
|
75
|
+
key: property,
|
|
76
|
+
count: property.replace(/[^A-Z]/g, '').length
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
for (const capitalizedProperty in summaryCapitalizeObject) {
|
|
81
|
+
if (summaryCapitalizeObject.hasOwnProperty(capitalizedProperty)) {
|
|
82
|
+
if (summaryCapitalizeObject.hasOwnProperty(capitalizedProperty)) {
|
|
83
|
+
const capitalizedPropertyObject = summaryCapitalizeObject[capitalizedProperty];
|
|
84
|
+
if (capitalizedPropertyObject.length === 1) {
|
|
85
|
+
// for single params (no duplicates)
|
|
86
|
+
const singlePossibility = capitalizedPropertyObject[0];
|
|
87
|
+
capitalizeObject[capitalizedProperty] =
|
|
88
|
+
singlePossibility[Object.keys(singlePossibility)[0]];
|
|
89
|
+
}
|
|
90
|
+
else if (capitalizedPropertyObject.length > 1) {
|
|
91
|
+
// defining the closest to lowercase property
|
|
92
|
+
const paramClosestToLowercase = upperCaseCount
|
|
93
|
+
.filter((f) => f.key.toLowerCase() === capitalizedProperty.toLowerCase())
|
|
94
|
+
.reduce((prev, current) => {
|
|
95
|
+
return prev.y < current.y ? prev : current;
|
|
96
|
+
});
|
|
97
|
+
capitalizeObject[paramClosestToLowercase.key.toUpperCase()] =
|
|
98
|
+
obj[paramClosestToLowercase.key];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
for (const property in obj) {
|
|
104
|
+
if (obj.hasOwnProperty(property)) {
|
|
105
|
+
delete obj[property];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
for (const property in capitalizeObject) {
|
|
109
|
+
if (capitalizeObject.hasOwnProperty(property)) {
|
|
110
|
+
obj[property] = capitalizeObject[property];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
static removeUndefined(obj) {
|
|
115
|
+
const output = {};
|
|
116
|
+
if (ObjectUtils.isObject(obj)) {
|
|
117
|
+
Object.keys(obj)
|
|
118
|
+
.filter((key) => obj[key] !== undefined)
|
|
119
|
+
.forEach((key) => {
|
|
120
|
+
if (ObjectUtils.isObject(obj[key]) || Array.isArray(obj[key])) {
|
|
121
|
+
output[key] = ObjectUtils.removeUndefined(obj[key]);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
output[key] = obj[key];
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
return output;
|
|
128
|
+
}
|
|
129
|
+
if (Array.isArray(obj)) {
|
|
130
|
+
return obj.map((o) => ObjectUtils.removeUndefined(o));
|
|
131
|
+
}
|
|
132
|
+
return obj;
|
|
133
|
+
}
|
|
134
|
+
static removeNull(obj) {
|
|
135
|
+
const output = {};
|
|
136
|
+
if (ObjectUtils.isObject(obj)) {
|
|
137
|
+
Object.keys(obj)
|
|
138
|
+
.filter((key) => obj[key] !== null)
|
|
139
|
+
.forEach((key) => {
|
|
140
|
+
if (ObjectUtils.isObject(obj[key]) || Array.isArray(obj[key])) {
|
|
141
|
+
output[key] = ObjectUtils.removeNull(obj[key]);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
output[key] = obj[key];
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
return output;
|
|
148
|
+
}
|
|
149
|
+
if (Array.isArray(obj)) {
|
|
150
|
+
return obj.map((o) => ObjectUtils.removeNull(o));
|
|
151
|
+
}
|
|
152
|
+
return obj;
|
|
153
|
+
}
|
|
154
|
+
static naturalCompare(a, b, direction = 'asc', nullsFirst) {
|
|
155
|
+
if (direction === 'desc') {
|
|
156
|
+
b = [a, (a = b)][0];
|
|
157
|
+
}
|
|
158
|
+
// nullsFirst = undefined : end if direction = 'asc', first if direction = 'desc'
|
|
159
|
+
// nullsFirst = true : always first
|
|
160
|
+
// nullsFirst = false : always end
|
|
161
|
+
if (a === null ||
|
|
162
|
+
a === '' ||
|
|
163
|
+
a === undefined ||
|
|
164
|
+
b === null ||
|
|
165
|
+
b === '' ||
|
|
166
|
+
b === undefined) {
|
|
167
|
+
const nullScore = a === b
|
|
168
|
+
? 0
|
|
169
|
+
: a === undefined
|
|
170
|
+
? 3
|
|
171
|
+
: b === undefined
|
|
172
|
+
? -3
|
|
173
|
+
: a === null
|
|
174
|
+
? 2
|
|
175
|
+
: b === null
|
|
176
|
+
? -2
|
|
177
|
+
: a === ''
|
|
178
|
+
? 1
|
|
179
|
+
: -1;
|
|
180
|
+
if (direction === 'desc') {
|
|
181
|
+
return nullsFirst !== false ? nullScore : nullScore * -1;
|
|
182
|
+
}
|
|
183
|
+
return nullsFirst === true ? nullScore * -1 : nullScore;
|
|
184
|
+
}
|
|
185
|
+
const ax = [];
|
|
186
|
+
const bx = [];
|
|
187
|
+
a = '' + a;
|
|
188
|
+
b = '' + b;
|
|
189
|
+
a.replace(/(\d+)|(\D+)/g, (_, $1, $2) => {
|
|
190
|
+
ax.push([$1 || Infinity, $2 || '']);
|
|
191
|
+
});
|
|
192
|
+
b.replace(/(\d+)|(\D+)/g, (_, $1, $2) => {
|
|
193
|
+
bx.push([$1 || Infinity, $2 || '']);
|
|
194
|
+
});
|
|
195
|
+
while (ax.length && bx.length) {
|
|
196
|
+
const an = ax.shift();
|
|
197
|
+
const bn = bx.shift();
|
|
198
|
+
const nn = an[0] - bn[0] || an[1].localeCompare(bn[1]);
|
|
199
|
+
if (nn) {
|
|
200
|
+
return nn;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return ax.length - bx.length;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Return true if two object are equivalent.
|
|
207
|
+
* Objects are considered equivalent if they have the same properties and
|
|
208
|
+
* if all of their properties (first-level only) share the same value.
|
|
209
|
+
* @param obj1 First object
|
|
210
|
+
* @param obj2 Second object
|
|
211
|
+
* @returns Whether two objects arer equivalent
|
|
212
|
+
*/
|
|
213
|
+
static objectsAreEquivalent(obj1, obj2) {
|
|
214
|
+
if (obj1 === obj2) {
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
const obj1Props = Object.getOwnPropertyNames(obj1);
|
|
218
|
+
const obj2Props = Object.getOwnPropertyNames(obj2);
|
|
219
|
+
if (obj1Props.length !== obj2Props.length) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
for (const prop of obj1Props) {
|
|
223
|
+
if (obj1[prop] !== obj2[prop]) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Return a new object with an array of keys removed
|
|
231
|
+
* @param obj Source object
|
|
232
|
+
* @param keys Keys to remove
|
|
233
|
+
* @returns A new object
|
|
234
|
+
*/
|
|
235
|
+
static removeKeys(obj, keys) {
|
|
236
|
+
const newObj = Object.keys(obj)
|
|
237
|
+
.filter((key) => keys.indexOf(key) < 0)
|
|
238
|
+
.reduce((_obj, key) => {
|
|
239
|
+
_obj[key] = obj[key];
|
|
240
|
+
return _obj;
|
|
241
|
+
}, {});
|
|
242
|
+
return newObj;
|
|
243
|
+
}
|
|
244
|
+
static isEmpty(obj) {
|
|
245
|
+
return Object.keys(obj).length === 0;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvdXRpbHMvc3JjL2xpYi9vYmplY3QtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFdBQVc7SUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFXLEVBQUUsR0FBVztRQUNyQyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4RSxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbEIsT0FBTyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO2dCQUMvQixPQUFPLFNBQVMsQ0FBQzthQUNsQjtZQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDdEM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFZO1FBQzFCLE9BQU8sQ0FDTCxJQUFJO1lBQ0osT0FBTyxJQUFJLEtBQUssUUFBUTtZQUN4QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ3BCLElBQUksS0FBSyxJQUFJO1lBQ2IsQ0FBQyxDQUFDLElBQUksWUFBWSxJQUFJLENBQUMsQ0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUNkLE1BQWMsRUFDZCxNQUFjLEVBQ2QsZUFBZSxHQUFHLEtBQUs7UUFFdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLE1B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QU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVc7UUFDeEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIE9iamVjdFV0aWxzIHtcclxuICBzdGF0aWMgcmVzb2x2ZShvYmo6IG9iamVjdCwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3Qga2V5c0FycmF5ID0ga2V5LnJlcGxhY2UoL1xcWy9nLCAnLicpLnJlcGxhY2UoL1xcXS9nLCAnJykuc3BsaXQoJy4nKTtcclxuICAgIGxldCBjdXJyZW50ID0gb2JqO1xyXG4gICAgd2hpbGUgKGtleXNBcnJheS5sZW5ndGgpIHtcclxuICAgICAgaWYgKHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudCA9IGN1cnJlbnRba2V5c0FycmF5LnNoaWZ0KCldO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXJyZW50O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzT2JqZWN0KGl0ZW06IG9iamVjdCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgaXRlbSAmJlxyXG4gICAgICB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgIUFycmF5LmlzQXJyYXkoaXRlbSkgJiZcclxuICAgICAgaXRlbSAhPT0gbnVsbCAmJlxyXG4gICAgICAhKGl0ZW0gaW5zdGFuY2VvZiBEYXRlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtZXJnZURlZXAoXHJcbiAgICB0YXJnZXQ6IG9iamVjdCxcclxuICAgIHNvdXJjZTogb2JqZWN0LFxyXG4gICAgaWdub3JlVW5kZWZpbmVkID0gZmFsc2VcclxuICApOiBhbnkge1xyXG4gICAgY29uc3Qgb3V0cHV0ID0gT2JqZWN0LmFzc2lnbih7fSwgdGFyZ2V0KTtcclxuICAgIGlmIChPYmplY3RVdGlscy5pc09iamVjdCh0YXJnZXQpICYmIE9iamVjdFV0aWxzLmlzT2JqZWN0KHNvdXJjZSkpIHtcclxuICAgICAgT2JqZWN0LmtleXMoc291cmNlKVxyXG4gICAgICAgIC5maWx0ZXIoKGtleSkgPT4gIWlnbm9yZVVuZGVmaW5lZCB8fCBzb3VyY2Vba2V5XSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc09iamVjdChzb3VyY2Vba2V5XSkpIHtcclxuICAgICAgICAgICAgaWYgKCEoa2V5IGluIHRhcmdldCkpIHtcclxuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG91dHB1dCwgeyBba2V5XTogc291cmNlW2tleV0gfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBPYmplY3RVdGlscy5tZXJnZURlZXAoXHJcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSxcclxuICAgICAgICAgICAgICAgIHNvdXJjZVtrZXldLFxyXG4gICAgICAgICAgICAgICAgaWdub3JlVW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihvdXRwdXQsIHsgW2tleV06IHNvdXJjZVtrZXldIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjb3B5RGVlcChzcmMpOiBhbnkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gQXJyYXkuaXNBcnJheShzcmMpID8gW10gOiB7fTtcclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBzcmMpIHtcclxuICAgICAgaWYgKHNyYy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gc3JjW3Byb3BdO1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB0aGlzLmNvcHlEZWVwKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlbW92ZUR1cGxpY2F0ZUNhc2VJbnNlbnNpdGl2ZShvYmo6IG9iamVjdCkge1xyXG4gICAgY29uc3Qgc3VtbWFyeUNhcGl0YWxpemVPYmplY3QgPSB7fTtcclxuICAgIGNvbnN0IGNhcGl0YWxpemVPYmplY3QgPSB7fTtcclxuICAgIGNvbnN0IHVwcGVyQ2FzZUNvdW50ID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBvYmopIHtcclxuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgICAgICBjb25zdCB1cHBlckNhc2VQcm9wZXJ0eSA9IHByb3BlcnR5LnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFzdW1tYXJ5Q2FwaXRhbGl6ZU9iamVjdC5oYXNPd25Qcm9wZXJ0eSh1cHBlckNhc2VQcm9wZXJ0eSkpIHtcclxuICAgICAgICAgIHN1bW1hcnlDYXBpdGFsaXplT2JqZWN0W3VwcGVyQ2FzZVByb3BlcnR5XSA9IFtcclxuICAgICAgICAgICAgeyBbcHJvcGVydHldOiBvYmpbcHJvcGVydHldIH1cclxuICAgICAgICAgIF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHN1bW1hcnlDYXBpdGFsaXplT2JqZWN0W3VwcGVyQ2FzZVByb3BlcnR5XS5wdXNoKHtcclxuICAgICAgICAgICAgW3Byb3BlcnR5XTogb2JqW3Byb3BlcnR5XVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvdW50aW5nIHRoZSBudW1iZXIgb2YgdXBwZXJjYXNlIGxldHRlcnNNbmFcclxuICAgICAgICB1cHBlckNhc2VDb3VudC5wdXNoKHtcclxuICAgICAgICAgIGtleTogcHJvcGVydHksXHJcbiAgICAgICAgICBjb3VudDogcHJvcGVydHkucmVwbGFjZSgvW15BLVpdL2csICcnKS5sZW5ndGhcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBjYXBpdGFsaXplZFByb3BlcnR5IGluIHN1bW1hcnlDYXBpdGFsaXplT2JqZWN0KSB7XHJcbiAgICAgIGlmIChzdW1tYXJ5Q2FwaXRhbGl6ZU9iamVjdC5oYXNPd25Qcm9wZXJ0eShjYXBpdGFsaXplZFByb3BlcnR5KSkge1xyXG4gICAgICAgIGlmIChzdW1tYXJ5Q2FwaXRhbGl6ZU9iamVjdC5oYXNPd25Qcm9wZXJ0eShjYXBpdGFsaXplZFByb3BlcnR5KSkge1xyXG4gICAgICAgICAgY29uc3QgY2FwaXRhbGl6ZWRQcm9wZXJ0eU9iamVjdCA9XHJcbiAgICAgICAgICAgIHN1bW1hcnlDYXBpdGFsaXplT2JqZWN0W2NhcGl0YWxpemVkUHJvcGVydHldO1xyXG4gICAgICAgICAgaWYgKGNhcGl0YWxpemVkUHJvcGVydHlPYmplY3QubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIC8vIGZvciBzaW5nbGUgcGFyYW1zIChubyBkdXBsaWNhdGVzKVxyXG4gICAgICAgICAgICBjb25zdCBzaW5nbGVQb3NzaWJpbGl0eSA9IGNhcGl0YWxpemVkUHJvcGVydHlPYmplY3RbMF07XHJcbiAgICAgICAgICAgIGNhcGl0YWxpemVPYmplY3RbY2FwaXRhbGl6ZWRQcm9wZXJ0eV0gPVxyXG4gICAgICAgICAgICAgIHNpbmdsZVBvc3NpYmlsaXR5W09iamVjdC5rZXlzKHNpbmdsZVBvc3NpYmlsaXR5KVswXV07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNhcGl0YWxpemVkUHJvcGVydHlPYmplY3QubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAvLyBkZWZpbmluZyB0aGUgY2xvc2VzdCB0byBsb3dlcmNhc2UgcHJvcGVydHlcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1DbG9zZXN0VG9Mb3dlcmNhc2UgPSB1cHBlckNhc2VDb3VudFxyXG4gICAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoZikgPT4gZi5rZXkudG9Mb3dlckNhc2UoKSA9PT0gY2FwaXRhbGl6ZWRQcm9wZXJ0eS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIC5yZWR1Y2UoKHByZXYsIGN1cnJlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2LnkgPCBjdXJyZW50LnkgPyBwcmV2IDogY3VycmVudDtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY2FwaXRhbGl6ZU9iamVjdFtwYXJhbUNsb3Nlc3RUb0xvd2VyY2FzZS5rZXkudG9VcHBlckNhc2UoKV0gPVxyXG4gICAgICAgICAgICAgIG9ialtwYXJhbUNsb3Nlc3RUb0xvd2VyY2FzZS5rZXldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBvYmopIHtcclxuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgICAgICBkZWxldGUgb2JqW3Byb3BlcnR5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gY2FwaXRhbGl6ZU9iamVjdCkge1xyXG4gICAgICBpZiAoY2FwaXRhbGl6ZU9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgICAgICBvYmpbcHJvcGVydHldID0gY2FwaXRhbGl6ZU9iamVjdFtwcm9wZXJ0eV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyByZW1vdmVVbmRlZmluZWQob2JqOiBvYmplY3QpOiBhbnkge1xyXG4gICAgY29uc3Qgb3V0cHV0ID0ge307XHJcbiAgICBpZiAoT2JqZWN0VXRpbHMuaXNPYmplY3Qob2JqKSkge1xyXG4gICAgICBPYmplY3Qua2V5cyhvYmopXHJcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBvYmpba2V5XSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc09iamVjdChvYmpba2V5XSkgfHwgQXJyYXkuaXNBcnJheShvYmpba2V5XSkpIHtcclxuICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBPYmplY3RVdGlscy5yZW1vdmVVbmRlZmluZWQob2JqW2tleV0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBvYmpba2V5XTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xyXG4gICAgICByZXR1cm4gb2JqLm1hcCgobykgPT4gT2JqZWN0VXRpbHMucmVtb3ZlVW5kZWZpbmVkKG8pKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlbW92ZU51bGwob2JqOiBvYmplY3QpOiBhbnkge1xyXG4gICAgY29uc3Qgb3V0cHV0ID0ge307XHJcbiAgICBpZiAoT2JqZWN0VXRpbHMuaXNPYmplY3Qob2JqKSkge1xyXG4gICAgICBPYmplY3Qua2V5cyhvYmopXHJcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBvYmpba2V5XSAhPT0gbnVsbClcclxuICAgICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNPYmplY3Qob2JqW2tleV0pIHx8IEFycmF5LmlzQXJyYXkob2JqW2tleV0pKSB7XHJcbiAgICAgICAgICAgIG91dHB1dFtrZXldID0gT2JqZWN0VXRpbHMucmVtb3ZlTnVsbChvYmpba2V5XSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvdXRwdXRba2V5XSA9IG9ialtrZXldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICAgIHJldHVybiBvYmoubWFwKChvKSA9PiBPYmplY3RVdGlscy5yZW1vdmVOdWxsKG8pKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG5hdHVyYWxDb21wYXJlKGEsIGIsIGRpcmVjdGlvbiA9ICdhc2MnLCBudWxsc0ZpcnN0PzogYm9vbGVhbikge1xyXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB7XHJcbiAgICAgIGIgPSBbYSwgKGEgPSBiKV1bMF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbnVsbHNGaXJzdCA9IHVuZGVmaW5lZCA6IGVuZCBpZiBkaXJlY3Rpb24gPSAnYXNjJywgZmlyc3QgaWYgZGlyZWN0aW9uID0gJ2Rlc2MnXHJcbiAgICAvLyBudWxsc0ZpcnN0ID0gdHJ1ZSA6IGFsd2F5cyBmaXJzdFxyXG4gICAgLy8gbnVsbHNGaXJzdCA9IGZhbHNlIDogYWx3YXlzIGVuZFxyXG4gICAgaWYgKFxyXG4gICAgICBhID09PSBudWxsIHx8XHJcbiAgICAgIGEgPT09ICcnIHx8XHJcbiAgICAgIGEgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICBiID09PSBudWxsIHx8XHJcbiAgICAgIGIgPT09ICcnIHx8XHJcbiAgICAgIGIgPT09IHVuZGVmaW5lZFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IG51bGxTY29yZSA9XHJcbiAgICAgICAgYSA9PT0gYlxyXG4gICAgICAgICAgPyAwXHJcbiAgICAgICAgICA6IGEgPT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgPyAzXHJcbiAgICAgICAgICA6IGIgPT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgPyAtM1xyXG4gICAgICAgICAgOiBhID09PSBudWxsXHJcbiAgICAgICAgICA/IDJcclxuICAgICAgICAgIDogYiA9PT0gbnVsbFxyXG4gICAgICAgICAgPyAtMlxyXG4gICAgICAgICAgOiBhID09PSAnJ1xyXG4gICAgICAgICAgPyAxXHJcbiAgICAgICAgICA6IC0xO1xyXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnZGVzYycpIHtcclxuICAgICAgICByZXR1cm4gbnVsbHNGaXJzdCAhPT0gZmFsc2UgPyBudWxsU2NvcmUgOiBudWxsU2NvcmUgKiAtMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbHNGaXJzdCA9PT0gdHJ1ZSA/IG51bGxTY29yZSAqIC0xIDogbnVsbFNjb3JlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGF4ID0gW107XHJcbiAgICBjb25zdCBieCA9IFtdO1xyXG4gICAgYSA9ICcnICsgYTtcclxuICAgIGIgPSAnJyArIGI7XHJcblxyXG4gICAgYS5yZXBsYWNlKC8oXFxkKyl8KFxcRCspL2csIChfLCAkMSwgJDIpID0+IHtcclxuICAgICAgYXgucHVzaChbJDEgfHwgSW5maW5pdHksICQyIHx8ICcnXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBiLnJlcGxhY2UoLyhcXGQrKXwoXFxEKykvZywgKF8sICQxLCAkMikgPT4ge1xyXG4gICAgICBieC5wdXNoKFskMSB8fCBJbmZpbml0eSwgJDIgfHwgJyddKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHdoaWxlIChheC5sZW5ndGggJiYgYngubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGFuID0gYXguc2hpZnQoKTtcclxuICAgICAgY29uc3QgYm4gPSBieC5zaGlmdCgpO1xyXG4gICAgICBjb25zdCBubiA9IGFuWzBdIC0gYm5bMF0gfHwgYW5bMV0ubG9jYWxlQ29tcGFyZShiblsxXSk7XHJcbiAgICAgIGlmIChubikge1xyXG4gICAgICAgIHJldHVybiBubjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBheC5sZW5ndGggLSBieC5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0d28gb2JqZWN0IGFyZSBlcXVpdmFsZW50LlxyXG4gICAqIE9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgcHJvcGVydGllcyBhbmRcclxuICAgKiBpZiBhbGwgb2YgdGhlaXIgcHJvcGVydGllcyAoZmlyc3QtbGV2ZWwgb25seSkgc2hhcmUgdGhlIHNhbWUgdmFsdWUuXHJcbiAgICogQHBhcmFtIG9iajEgRmlyc3Qgb2JqZWN0XHJcbiAgICogQHBhcmFtIG9iajIgU2Vjb25kIG9iamVjdFxyXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdHdvIG9iamVjdHMgYXJlciBlcXVpdmFsZW50XHJcbiAgICovXHJcbiAgc3RhdGljIG9iamVjdHNBcmVFcXVpdmFsZW50KG9iajE6IG9iamVjdCwgb2JqMjogb2JqZWN0KTogYm9vbGVhbiB7XHJcbiAgICBpZiAob2JqMSA9PT0gb2JqMikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYmoxUHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmoxKTtcclxuICAgIGNvbnN0IG9iajJQcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iajIpO1xyXG4gICAgaWYgKG9iajFQcm9wcy5sZW5ndGggIT09IG9iajJQcm9wcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBvYmoxUHJvcHMpIHtcclxuICAgICAgaWYgKG9iajFbcHJvcF0gIT09IG9iajJbcHJvcF0pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBvYmplY3Qgd2l0aCBhbiBhcnJheSBvZiBrZXlzIHJlbW92ZWRcclxuICAgKiBAcGFyYW0gb2JqIFNvdXJjZSBvYmplY3RcclxuICAgKiBAcGFyYW0ga2V5cyBLZXlzIHRvIHJlbW92ZVxyXG4gICAqIEByZXR1cm5zIEEgbmV3IG9iamVjdFxyXG4gICAqL1xyXG4gIHN0YXRpYyByZW1vdmVLZXlzKG9iajogb2JqZWN0LCBrZXlzOiBzdHJpbmdbXSk6IG9iamVjdCB7XHJcbiAgICBjb25zdCBuZXdPYmogPSBPYmplY3Qua2V5cyhvYmopXHJcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5cy5pbmRleE9mKGtleSkgPCAwKVxyXG4gICAgICAucmVkdWNlKChfb2JqLCBrZXkpID0+IHtcclxuICAgICAgICBfb2JqW2tleV0gPSBvYmpba2V5XTtcclxuICAgICAgICByZXR1cm4gX29iajtcclxuICAgICAgfSwge30pO1xyXG5cclxuICAgIHJldHVybiBuZXdPYmo7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNFbXB0eShvYmo6IG9iamVjdCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/** Utility function to create a K:V from a list of strings */
|
|
2
|
-
export function strEnum(o) {
|
|
3
|
-
return o.reduce((res, key) => {
|
|
4
|
-
res[key] = key;
|
|
5
|
-
return res;
|
|
6
|
-
}, Object.create(null));
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
/** Utility function to create a K:V from a list of strings */
|
|
2
|
+
export function strEnum(o) {
|
|
3
|
+
return o.reduce((res, key) => {
|
|
4
|
+
res[key] = key;
|
|
5
|
+
return res;
|
|
6
|
+
}, Object.create(null));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3V0aWxzL3NyYy9saWIvc3RyZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLE9BQU8sQ0FBbUIsQ0FBVztJQUNuRCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDM0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNmLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFV0aWxpdHkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgSzpWIGZyb20gYSBsaXN0IG9mIHN0cmluZ3MgKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJFbnVtPFQgZXh0ZW5kcyBzdHJpbmc+KG86IEFycmF5PFQ+KTogeyBbSyBpbiBUXTogSyB9IHtcbiAgcmV0dXJuIG8ucmVkdWNlKChyZXMsIGtleSkgPT4ge1xuICAgIHJlc1trZXldID0ga2V5O1xuICAgIHJldHVybiByZXM7XG4gIH0sIE9iamVjdC5jcmVhdGUobnVsbCkpO1xufVxuIl19
|
|
@@ -1,105 +1,113 @@
|
|
|
1
|
-
export class StringUtils {
|
|
2
|
-
static diff(s1, s2, p = 4) {
|
|
3
|
-
if (!s1 && !s2) {
|
|
4
|
-
return '';
|
|
5
|
-
}
|
|
6
|
-
if (!s1) {
|
|
7
|
-
return '<span class="inserted">' + s2 + '</span>';
|
|
8
|
-
}
|
|
9
|
-
if (!s2) {
|
|
10
|
-
return '<span class="deleted">' + s1 + '</span>';
|
|
11
|
-
}
|
|
12
|
-
s1 = s1.toString();
|
|
13
|
-
s2 = s2.toString();
|
|
14
|
-
const changeData = StringUtils.getChanges(s1, s2, '', p);
|
|
15
|
-
const nextS = s2.slice(changeData.mtc.length + changeData.ins.length + changeData.sbs.length); // remaining part of "s"
|
|
16
|
-
const nextThis = s1.slice(changeData.mtc.length + changeData.del.length + changeData.sbs.length); // remaining part of "this"
|
|
17
|
-
let result = ''; // the glorious result
|
|
18
|
-
if (changeData.del.length > 0) {
|
|
19
|
-
changeData.del = '<span class="deleted">' + changeData.del + '</span>';
|
|
20
|
-
}
|
|
21
|
-
if (changeData.ins.length > 0) {
|
|
22
|
-
changeData.ins = '<span class="inserted">' + changeData.ins + '</span>';
|
|
23
|
-
}
|
|
24
|
-
result = changeData.mtc + changeData.del + changeData.ins + changeData.sbs;
|
|
25
|
-
result +=
|
|
26
|
-
nextThis !== '' || nextS !== ''
|
|
27
|
-
? StringUtils.diff(nextThis, nextS, p)
|
|
28
|
-
: '';
|
|
29
|
-
return result;
|
|
30
|
-
}
|
|
31
|
-
static getMatchingSubstring(s, l, m) {
|
|
32
|
-
// returns the first matching substring in-between the two strings
|
|
33
|
-
let i = 0;
|
|
34
|
-
let match = false;
|
|
35
|
-
const slen = s.length;
|
|
36
|
-
const o = { fis: slen, mtc: m, sbs: '' }; // temporary object used to construct the cd (change data) object
|
|
37
|
-
while (i < slen) {
|
|
38
|
-
l[i] === s[i]
|
|
39
|
-
? match
|
|
40
|
-
? (o.sbs += s[i]) // o.sbs holds the matching substring itsef
|
|
41
|
-
: ((match = true), (o.fis = i), (o.sbs = s[i]))
|
|
42
|
-
: match
|
|
43
|
-
? (i = slen) // stop after the first found substring
|
|
44
|
-
: (i = i);
|
|
45
|
-
++i;
|
|
46
|
-
}
|
|
47
|
-
return o;
|
|
48
|
-
}
|
|
49
|
-
static getChanges(s1, s2, m, p) {
|
|
50
|
-
const isThisLonger = s1.length >= s1.length ? true : false;
|
|
51
|
-
let [longer, shorter] = isThisLonger ? [s1, s2] : [s2, s1]; // assignment of longer and shorter by es6 destructuring
|
|
52
|
-
let bi = 0; // base index designating the index of first mismacthing character in both strings
|
|
53
|
-
while (shorter[bi] === longer[bi] && bi < shorter.length) {
|
|
54
|
-
++bi;
|
|
55
|
-
} // make bi the index of first mismatching character
|
|
56
|
-
longer = longer.split('').slice(bi); // as the longer string will be rotated it is converted into array
|
|
57
|
-
shorter = shorter.slice(bi); // shorter and longer now starts from the first mismatching character
|
|
58
|
-
const len = longer.length; // length of the longer string
|
|
59
|
-
let cd = {
|
|
60
|
-
fis: shorter.length,
|
|
61
|
-
fil: len,
|
|
62
|
-
sbs: '',
|
|
63
|
-
mtc: m + s2.slice(0, bi)
|
|
64
|
-
}; // if exists mtc holds the matching string at the front
|
|
65
|
-
let sub = { sbs: '' }; // returned substring per 1 character rotation of the longer string
|
|
66
|
-
if (shorter !== '') {
|
|
67
|
-
for (let rc = 0; rc < len && sub.sbs.length < p; rc++) {
|
|
68
|
-
// rc -> rotate count, p -> precision factor
|
|
69
|
-
sub = StringUtils.getMatchingSubstring(shorter, StringUtils.rotateArray(longer, rc), cd.mtc); // rotate longer string 1 char and get substring
|
|
70
|
-
sub.fil =
|
|
71
|
-
rc < len - sub.fis
|
|
72
|
-
? sub.fis + rc // mismatch is longer than the mismatch in short
|
|
73
|
-
: sub.fis - len + rc; // mismatch is shorter than the mismatch in short
|
|
74
|
-
if (sub.sbs.length > cd.sbs.length) {
|
|
75
|
-
cd = sub; // only keep the one with the longest substring.
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// insert the mismatching delete subsrt and insert substr to the cd object and attach the previous substring
|
|
80
|
-
[cd.del, cd.ins] = isThisLonger
|
|
81
|
-
? [longer.slice(0, cd.fil).join(''), shorter.slice(0, cd.fis)]
|
|
82
|
-
: [shorter.slice(0, cd.fis), longer.slice(0, cd.fil).join('')];
|
|
83
|
-
return cd.del.indexOf(' ') === -1 ||
|
|
84
|
-
cd.ins.indexOf(' ') === -1 ||
|
|
85
|
-
cd.del === '' ||
|
|
86
|
-
cd.ins === '' ||
|
|
87
|
-
cd.sbs === ''
|
|
88
|
-
? cd
|
|
89
|
-
: StringUtils.getChanges(cd.del, cd.ins, cd.mtc, p);
|
|
90
|
-
}
|
|
91
|
-
static rotateArray(array, n) {
|
|
92
|
-
const len = array.length;
|
|
93
|
-
const res = new Array(array.length);
|
|
94
|
-
if (n % len === 0) {
|
|
95
|
-
return array.slice();
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
for (let i = 0; i < len; i++) {
|
|
99
|
-
res[i] = array[(i + (len + (n % len))) % len];
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return res;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvdXRpbHMvc3JjL2xpYi9zdHJpbmctdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFdBQVc7SUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDZCxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNQLE9BQU8seUJBQXlCLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztTQUNuRDtRQUNELElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDUCxPQUFPLHdCQUF3QixHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7U0FDbEQ7UUFDRCxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25CLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkIsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUNwQixVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FDdEUsQ0FBQyxDQUFDLHdCQUF3QjtRQUMzQixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUN2QixVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FDdEUsQ0FBQyxDQUFDLDJCQUEy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QUM7SUFDeEQsQ0FBQztJQUVPLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUN6QixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRTtZQUNqQixPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN0QjthQUFNO1lBQ0wsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7YUFDL0M7U0FDRjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFN0cmluZ1V0aWxzIHtcclxuICBzdGF0aWMgZGlmZihzMTogc3RyaW5nLCBzMjogc3RyaW5nLCBwID0gNCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXMxICYmICFzMikge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBpZiAoIXMxKSB7XHJcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJpbnNlcnRlZFwiPicgKyBzMiArICc8L3NwYW4+JztcclxuICAgIH1cclxuICAgIGlmICghczIpIHtcclxuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cImRlbGV0ZWRcIj4nICsgczEgKyAnPC9zcGFuPic7XHJcbiAgICB9XHJcbiAgICBzMSA9IHMxLnRvU3RyaW5nKCk7XHJcbiAgICBzMiA9IHMyLnRvU3RyaW5nKCk7XHJcbiAgICBjb25zdCBjaGFuZ2VEYXRhID0gU3RyaW5nVXRpbHMuZ2V0Q2hhbmdlcyhzMSwgczIsICcnLCBwKTtcclxuICAgIGNvbnN0IG5leHRTID0gczIuc2xpY2UoXHJcbiAgICAgIGNoYW5nZURhdGEubXRjLmxlbmd0aCArIGNoYW5nZURhdGEuaW5zLmxlbmd0aCArIGNoYW5nZURhdGEuc2JzLmxlbmd0aFxyXG4gICAgKTsgLy8gcmVtYWluaW5nIHBhcnQgb2YgXCJzXCJcclxuICAgIGNvbnN0IG5leHRUaGlzID0gczEuc2xpY2UoXHJcbiAgICAgIGNoYW5nZURhdGEubXRjLmxlbmd0aCArIGNoYW5nZURhdGEuZGVsLmxlbmd0aCArIGNoYW5nZURhdGEuc2JzLmxlbmd0aFxyXG4gICAgKTsgLy8gcmVtYWluaW5nIHBhcnQgb2YgXCJ0aGlzXCJcclxuICAgIGxldCByZXN1bHQgPSAnJzsgLy8gdGhlIGdsb3Jpb3VzIHJlc3VsdFxyXG4gICAgaWYgKGNoYW5nZURhdGEuZGVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgY2hhbmdlRGF0YS5kZWwgPSAnPHNwYW4gY2xhc3M9XCJkZWxldGVkXCI+JyArIGNoYW5nZURhdGEuZGVsICsgJzwvc3Bhbj4nO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZURhdGEuaW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgY2hhbmdlRGF0YS5pbnMgPSAnPHNwYW4gY2xhc3M9XCJpbnNlcnRlZFwiPicgKyBjaGFuZ2VEYXRhLmlucyArICc8L3NwYW4+JztcclxuICAgIH1cclxuICAgIHJlc3VsdCA9IGNoYW5nZURhdGEubXRjICsgY2hhbmdlRGF0YS5kZWwgKyBjaGFuZ2VEYXRhLmlucyArIGNoYW5nZURhdGEuc2JzO1xyXG4gICAgcmVzdWx0ICs9XHJcbiAgICAgIG5leHRUaGlzICE9PSAnJyB8fCBuZXh0UyAhPT0gJydcclxuICAgICAgICA/IFN0cmluZ1V0aWxzLmRpZmYobmV4dFRoaXMsIG5leHRTLCBwKVxyXG4gICAgICAgIDogJyc7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0TWF0Y2hpbmdTdWJzdHJpbmcocywgbCwgbSkge1xyXG4gICAgLy8gcmV0dXJucyB0aGUgZmlyc3QgbWF0Y2hpbmcgc3Vic3RyaW5nIGluLWJldHdlZW4gdGhlIHR3byBzdHJpbmdzXHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgbWF0Y2ggPSBmYWxzZTtcclxuICAgIGNvbnN0IHNsZW4gPSBzLmxlbmd0aDtcclxuICAgIGNvbnN0IG8gPSB7IGZpczogc2xlbiwgbXRjOiBtLCBzYnM6ICcnIH07IC8vIHRlbXBvcmFyeSBvYmplY3QgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGNkIChjaGFuZ2UgZGF0YSkgb2JqZWN0XHJcblxyXG4gICAgd2hpbGUgKGkgPCBzbGVuKSB7XHJcbiAgICAgIGxbaV0gPT09IHNbaV1cclxuICAgICAgICA/IG1hdGNoXHJcbiAgICAgICAgICA/IChvLnNicyArPSBzW2ldKSAvLyBvLnNicyBob2xkcyB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5nIGl0c2VmXHJcbiAgICAgICAgICA6ICgobWF0Y2ggPSB0cnVlKSwgKG8uZmlzID0gaSksIChvLnNicyA9IHNbaV0pKVxyXG4gICAgICAgIDogbWF0Y2hcclxuICAgICAgICAgID8gKGkgPSBzbGVuKSAvLyBzdG9wIGFmdGVyIHRoZSBmaXJzdCBmb3VuZCBzdWJzdHJpbmdcclxuICAgICAgICAgIDogKGkgPSBpKTtcclxuICAgICAgKytpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG87XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRDaGFuZ2VzKHMxLCBzMiwgbSwgcCkge1xyXG4gICAgY29uc3QgaXNUaGlzTG9uZ2VyID0gczEubGVuZ3RoID49IHMxLmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcclxuICAgIGxldCBbbG9uZ2VyLCBzaG9ydGVyXSA9IGlzVGhpc0xvbmdlciA/IFtzMSwgczJdIDogW3MyLCBzMV07IC8vIGFzc2lnbm1lbnQgb2YgbG9uZ2VyIGFuZCBzaG9ydGVyIGJ5IGVzNiBkZXN0cnVjdHVyaW5nXHJcbiAgICBsZXQgYmkgPSAwOyAvLyBiYXNlIGluZGV4IGRlc2lnbmF0aW5nIHRoZSBpbmRleCBvZiBmaXJzdCBtaXNtYWN0aGluZyBjaGFyYWN0ZXIgaW4gYm90aCBzdHJpbmdzXHJcblxyXG4gICAgd2hpbGUgKHNob3J0ZXJbYmldID09PSBsb25nZXJbYmldICYmIGJpIDwgc2hvcnRlci5sZW5ndGgpIHtcclxuICAgICAgKytiaTtcclxuICAgIH0gLy8gbWFrZSBiaSB0aGUgaW5kZXggb2YgZmlyc3QgbWlzbWF0Y2hpbmcgY2hhcmFjdGVyXHJcbiAgICBsb25nZXIgPSBsb25nZXIuc3BsaXQoJycpLnNsaWNlKGJpKTsgLy8gYXMgdGhlIGxvbmdlciBzdHJpbmcgd2lsbCBiZSByb3RhdGVkIGl0IGlzIGNvbnZlcnRlZCBpbnRvIGFycmF5XHJcbiAgICBzaG9ydGVyID0gc2hvcnRlci5zbGljZShiaSk7IC8vIHNob3J0ZXIgYW5kIGxvbmdlciBub3cgc3RhcnRzIGZyb20gdGhlIGZpcnN0IG1pc21hdGNoaW5nIGNoYXJhY3RlclxyXG5cclxuICAgIGNvbnN0IGxlbiA9IGxvbmdlci5sZW5ndGg7IC8vIGxlbmd0aCBvZiB0aGUgbG9uZ2VyIHN0cmluZ1xyXG4gICAgbGV0IGNkOiBhbnkgPSB7XHJcbiAgICAgIGZpczogc2hvcnRlci5sZW5ndGgsIC8vIHRoZSBpbmRleCBvZiBtYXRjaGluZyBzdHJpbmcgaW4gdGhlIHNob3J0ZXIgc3RyaW5nXHJcbiAgICAgIGZpbDogbGVuLCAvLyB0aGUgaW5kZXggb2YgbWF0Y2hpbmcgc3RyaW5nIGluIHRoZSBsb25nZXIgc3RyaW5nXHJcbiAgICAgIHNiczogJycsIC8vIHRoZSBtYXRjaGluZyBzdWJzdHJpbmcgaXRzZWxmXHJcbiAgICAgIG10YzogbSArIHMyLnNsaWNlKDAsIGJpKVxyXG4gICAgfTsgLy8gaWYgZXhpc3RzIG10YyBob2xkcyB0aGUgbWF0Y2hpbmcgc3RyaW5nIGF0IHRoZSBmcm9udFxyXG4gICAgbGV0IHN1YjogYW55ID0geyBzYnM6ICcnIH07IC8vIHJldHVybmVkIHN1YnN0cmluZyBwZXIgMSBjaGFyYWN0ZXIgcm90YXRpb24gb2YgdGhlIGxvbmdlciBzdHJpbmdcclxuXHJcbiAgICBpZiAoc2hvcnRlciAhPT0gJycpIHtcclxuICAgICAgZm9yIChsZXQgcmMgPSAwOyByYyA8IGxlbiAmJiBzdWIuc2JzLmxlbmd0aCA8IHA7IHJjKyspIHtcclxuICAgICAgICAvLyByYyAtPiByb3RhdGUgY291bnQsIHAgLT4gcHJlY2lzaW9uIGZhY3RvclxyXG4gICAgICAgIHN1YiA9IFN0cmluZ1V0aWxzLmdldE1hdGNoaW5nU3Vic3RyaW5nKFxyXG4gICAgICAgICAgc2hvcnRlcixcclxuICAgICAgICAgIFN0cmluZ1V0aWxzLnJvdGF0ZUFycmF5KGxvbmdlciwgcmMpLFxyXG4gICAgICAgICAgY2QubXRjXHJcbiAgICAgICAgKTsgLy8gcm90YXRlIGxvbmdlciBzdHJpbmcgMSBjaGFyIGFuZCBnZXQgc3Vic3RyaW5nXHJcbiAgICAgICAgc3ViLmZpbCA9XHJcbiAgICAgICAgICByYyA8IGxlbiAtIHN1Yi5maXNcclxuICAgICAgICAgICAgPyBzdWIuZmlzICsgcmMgLy8gbWlzbWF0Y2ggaXMgbG9uZ2VyIHRoYW4gdGhlIG1pc21hdGNoIGluIHNob3J0XHJcbiAgICAgICAgICAgIDogc3ViLmZpcyAtIGxlbiArIHJjOyAvLyBtaXNtYXRjaCBpcyBzaG9ydGVyIHRoYW4gdGhlIG1pc21hdGNoIGluIHNob3J0XHJcbiAgICAgICAgaWYgKHN1Yi5zYnMubGVuZ3RoID4gY2Quc2JzLmxlbmd0aCkge1xyXG4gICAgICAgICAgY2QgPSBzdWI7IC8vIG9ubHkga2VlcCB0aGUgb25lIHdpdGggdGhlIGxvbmdlc3Qgc3Vic3RyaW5nLlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gaW5zZXJ0IHRoZSBtaXNtYXRjaGluZyBkZWxldGUgc3Vic3J0IGFuZCBpbnNlcnQgc3Vic3RyIHRvIHRoZSBjZCBvYmplY3QgYW5kIGF0dGFjaCB0aGUgcHJldmlvdXMgc3Vic3RyaW5nXHJcbiAgICBbY2QuZGVsLCBjZC5pbnNdID0gaXNUaGlzTG9uZ2VyXHJcbiAgICAgID8gW2xvbmdlci5zbGljZSgwLCBjZC5maWwpLmpvaW4oJycpLCBzaG9ydGVyLnNsaWNlKDAsIGNkLmZpcyldXHJcbiAgICAgIDogW3Nob3J0ZXIuc2xpY2UoMCwgY2QuZmlzKSwgbG9uZ2VyLnNsaWNlKDAsIGNkLmZpbCkuam9pbignJyldO1xyXG4gICAgcmV0dXJuIGNkLmRlbC5pbmRleE9mKCcgJykgPT09IC0xIHx8XHJcbiAgICAgIGNkLmlucy5pbmRleE9mKCcgJykgPT09IC0xIHx8XHJcbiAgICAgIGNkLmRlbCA9PT0gJycgfHxcclxuICAgICAgY2QuaW5zID09PSAnJyB8fFxyXG4gICAgICBjZC5zYnMgPT09ICcnXHJcbiAgICAgID8gY2RcclxuICAgICAgOiBTdHJpbmdVdGlscy5nZXRDaGFuZ2VzKGNkLmRlbCwgY2QuaW5zLCBjZC5tdGMsIHApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcm90YXRlQXJyYXkoYXJyYXksIG4pIHtcclxuICAgIGNvbnN0IGxlbiA9IGFycmF5Lmxlbmd0aDtcclxuICAgIGNvbnN0IHJlcyA9IG5ldyBBcnJheShhcnJheS5sZW5ndGgpO1xyXG4gICAgaWYgKG4gJSBsZW4gPT09IDApIHtcclxuICAgICAgcmV0dXJuIGFycmF5LnNsaWNlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgcmVzW2ldID0gYXJyYXlbKGkgKyAobGVuICsgKG4gJSBsZW4pKSkgJSBsZW5dO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
1
|
+
export class StringUtils {
|
|
2
|
+
static diff(s1, s2, p = 4) {
|
|
3
|
+
if (!s1 && !s2) {
|
|
4
|
+
return '';
|
|
5
|
+
}
|
|
6
|
+
if (!s1) {
|
|
7
|
+
return '<span class="inserted">' + s2 + '</span>';
|
|
8
|
+
}
|
|
9
|
+
if (!s2) {
|
|
10
|
+
return '<span class="deleted">' + s1 + '</span>';
|
|
11
|
+
}
|
|
12
|
+
s1 = s1.toString();
|
|
13
|
+
s2 = s2.toString();
|
|
14
|
+
const changeData = StringUtils.getChanges(s1, s2, '', p);
|
|
15
|
+
const nextS = s2.slice(changeData.mtc.length + changeData.ins.length + changeData.sbs.length); // remaining part of "s"
|
|
16
|
+
const nextThis = s1.slice(changeData.mtc.length + changeData.del.length + changeData.sbs.length); // remaining part of "this"
|
|
17
|
+
let result = ''; // the glorious result
|
|
18
|
+
if (changeData.del.length > 0) {
|
|
19
|
+
changeData.del = '<span class="deleted">' + changeData.del + '</span>';
|
|
20
|
+
}
|
|
21
|
+
if (changeData.ins.length > 0) {
|
|
22
|
+
changeData.ins = '<span class="inserted">' + changeData.ins + '</span>';
|
|
23
|
+
}
|
|
24
|
+
result = changeData.mtc + changeData.del + changeData.ins + changeData.sbs;
|
|
25
|
+
result +=
|
|
26
|
+
nextThis !== '' || nextS !== ''
|
|
27
|
+
? StringUtils.diff(nextThis, nextS, p)
|
|
28
|
+
: '';
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
static getMatchingSubstring(s, l, m) {
|
|
32
|
+
// returns the first matching substring in-between the two strings
|
|
33
|
+
let i = 0;
|
|
34
|
+
let match = false;
|
|
35
|
+
const slen = s.length;
|
|
36
|
+
const o = { fis: slen, mtc: m, sbs: '' }; // temporary object used to construct the cd (change data) object
|
|
37
|
+
while (i < slen) {
|
|
38
|
+
l[i] === s[i]
|
|
39
|
+
? match
|
|
40
|
+
? (o.sbs += s[i]) // o.sbs holds the matching substring itsef
|
|
41
|
+
: ((match = true), (o.fis = i), (o.sbs = s[i]))
|
|
42
|
+
: match
|
|
43
|
+
? (i = slen) // stop after the first found substring
|
|
44
|
+
: (i = i);
|
|
45
|
+
++i;
|
|
46
|
+
}
|
|
47
|
+
return o;
|
|
48
|
+
}
|
|
49
|
+
static getChanges(s1, s2, m, p) {
|
|
50
|
+
const isThisLonger = s1.length >= s1.length ? true : false;
|
|
51
|
+
let [longer, shorter] = isThisLonger ? [s1, s2] : [s2, s1]; // assignment of longer and shorter by es6 destructuring
|
|
52
|
+
let bi = 0; // base index designating the index of first mismacthing character in both strings
|
|
53
|
+
while (shorter[bi] === longer[bi] && bi < shorter.length) {
|
|
54
|
+
++bi;
|
|
55
|
+
} // make bi the index of first mismatching character
|
|
56
|
+
longer = longer.split('').slice(bi); // as the longer string will be rotated it is converted into array
|
|
57
|
+
shorter = shorter.slice(bi); // shorter and longer now starts from the first mismatching character
|
|
58
|
+
const len = longer.length; // length of the longer string
|
|
59
|
+
let cd = {
|
|
60
|
+
fis: shorter.length,
|
|
61
|
+
fil: len,
|
|
62
|
+
sbs: '',
|
|
63
|
+
mtc: m + s2.slice(0, bi)
|
|
64
|
+
}; // if exists mtc holds the matching string at the front
|
|
65
|
+
let sub = { sbs: '' }; // returned substring per 1 character rotation of the longer string
|
|
66
|
+
if (shorter !== '') {
|
|
67
|
+
for (let rc = 0; rc < len && sub.sbs.length < p; rc++) {
|
|
68
|
+
// rc -> rotate count, p -> precision factor
|
|
69
|
+
sub = StringUtils.getMatchingSubstring(shorter, StringUtils.rotateArray(longer, rc), cd.mtc); // rotate longer string 1 char and get substring
|
|
70
|
+
sub.fil =
|
|
71
|
+
rc < len - sub.fis
|
|
72
|
+
? sub.fis + rc // mismatch is longer than the mismatch in short
|
|
73
|
+
: sub.fis - len + rc; // mismatch is shorter than the mismatch in short
|
|
74
|
+
if (sub.sbs.length > cd.sbs.length) {
|
|
75
|
+
cd = sub; // only keep the one with the longest substring.
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// insert the mismatching delete subsrt and insert substr to the cd object and attach the previous substring
|
|
80
|
+
[cd.del, cd.ins] = isThisLonger
|
|
81
|
+
? [longer.slice(0, cd.fil).join(''), shorter.slice(0, cd.fis)]
|
|
82
|
+
: [shorter.slice(0, cd.fis), longer.slice(0, cd.fil).join('')];
|
|
83
|
+
return cd.del.indexOf(' ') === -1 ||
|
|
84
|
+
cd.ins.indexOf(' ') === -1 ||
|
|
85
|
+
cd.del === '' ||
|
|
86
|
+
cd.ins === '' ||
|
|
87
|
+
cd.sbs === ''
|
|
88
|
+
? cd
|
|
89
|
+
: StringUtils.getChanges(cd.del, cd.ins, cd.mtc, p);
|
|
90
|
+
}
|
|
91
|
+
static rotateArray(array, n) {
|
|
92
|
+
const len = array.length;
|
|
93
|
+
const res = new Array(array.length);
|
|
94
|
+
if (n % len === 0) {
|
|
95
|
+
return array.slice();
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
for (let i = 0; i < len; i++) {
|
|
99
|
+
res[i] = array[(i + (len + (n % len))) % len];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return res;
|
|
103
|
+
}
|
|
104
|
+
static isValidNumber(value) {
|
|
105
|
+
return !isNaN(Number(value));
|
|
106
|
+
}
|
|
107
|
+
static isOctalNumber(value) {
|
|
108
|
+
return (StringUtils.isValidNumber(value) &&
|
|
109
|
+
value.startsWith('0') &&
|
|
110
|
+
value.length > 1);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvdXRpbHMvc3JjL2xpYi9zdHJpbmctdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFdBQVc7SUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDZCxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNQLE9BQU8seUJBQXlCLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztTQUNuRDtRQUNELElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDUCxPQUFPLHdCQUF3QixHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7U0FDbEQ7UUFDRCxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25CLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkIsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUNwQixVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FDdEUsQ0FBQyxDQUFDLHdCQUF3QjtRQUMzQixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUN2QixVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FDdEUsQ0FBQyxDQUFDLDJCQUEy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QUM7SUFDeEQsQ0FBQztJQUVPLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUN6QixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRTtZQUNqQixPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN0QjthQUFNO1lBQ0wsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7YUFDL0M7U0FDRjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBYTtRQUNoQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQWE7UUFDaEMsT0FBTyxDQUNMLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQ3JCLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNqQixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFN0cmluZ1V0aWxzIHtcclxuICBzdGF0aWMgZGlmZihzMTogc3RyaW5nLCBzMjogc3RyaW5nLCBwID0gNCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXMxICYmICFzMikge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBpZiAoIXMxKSB7XHJcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJpbnNlcnRlZFwiPicgKyBzMiArICc8L3NwYW4+JztcclxuICAgIH1cclxuICAgIGlmICghczIpIHtcclxuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cImRlbGV0ZWRcIj4nICsgczEgKyAnPC9zcGFuPic7XHJcbiAgICB9XHJcbiAgICBzMSA9IHMxLnRvU3RyaW5nKCk7XHJcbiAgICBzMiA9IHMyLnRvU3RyaW5nKCk7XHJcbiAgICBjb25zdCBjaGFuZ2VEYXRhID0gU3RyaW5nVXRpbHMuZ2V0Q2hhbmdlcyhzMSwgczIsICcnLCBwKTtcclxuICAgIGNvbnN0IG5leHRTID0gczIuc2xpY2UoXHJcbiAgICAgIGNoYW5nZURhdGEubXRjLmxlbmd0aCArIGNoYW5nZURhdGEuaW5zLmxlbmd0aCArIGNoYW5nZURhdGEuc2JzLmxlbmd0aFxyXG4gICAgKTsgLy8gcmVtYWluaW5nIHBhcnQgb2YgXCJzXCJcclxuICAgIGNvbnN0IG5leHRUaGlzID0gczEuc2xpY2UoXHJcbiAgICAgIGNoYW5nZURhdGEubXRjLmxlbmd0aCArIGNoYW5nZURhdGEuZGVsLmxlbmd0aCArIGNoYW5nZURhdGEuc2JzLmxlbmd0aFxyXG4gICAgKTsgLy8gcmVtYWluaW5nIHBhcnQgb2YgXCJ0aGlzXCJcclxuICAgIGxldCByZXN1bHQgPSAnJzsgLy8gdGhlIGdsb3Jpb3VzIHJlc3VsdFxyXG4gICAgaWYgKGNoYW5nZURhdGEuZGVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgY2hhbmdlRGF0YS5kZWwgPSAnPHNwYW4gY2xhc3M9XCJkZWxldGVkXCI+JyArIGNoYW5nZURhdGEuZGVsICsgJzwvc3Bhbj4nO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZURhdGEuaW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgY2hhbmdlRGF0YS5pbnMgPSAnPHNwYW4gY2xhc3M9XCJpbnNlcnRlZFwiPicgKyBjaGFuZ2VEYXRhLmlucyArICc8L3NwYW4+JztcclxuICAgIH1cclxuICAgIHJlc3VsdCA9IGNoYW5nZURhdGEubXRjICsgY2hhbmdlRGF0YS5kZWwgKyBjaGFuZ2VEYXRhLmlucyArIGNoYW5nZURhdGEuc2JzO1xyXG4gICAgcmVzdWx0ICs9XHJcbiAgICAgIG5leHRUaGlzICE9PSAnJyB8fCBuZXh0UyAhPT0gJydcclxuICAgICAgICA/IFN0cmluZ1V0aWxzLmRpZmYobmV4dFRoaXMsIG5leHRTLCBwKVxyXG4gICAgICAgIDogJyc7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0TWF0Y2hpbmdTdWJzdHJpbmcocywgbCwgbSkge1xyXG4gICAgLy8gcmV0dXJucyB0aGUgZmlyc3QgbWF0Y2hpbmcgc3Vic3RyaW5nIGluLWJldHdlZW4gdGhlIHR3byBzdHJpbmdzXHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgbWF0Y2ggPSBmYWxzZTtcclxuICAgIGNvbnN0IHNsZW4gPSBzLmxlbmd0aDtcclxuICAgIGNvbnN0IG8gPSB7IGZpczogc2xlbiwgbXRjOiBtLCBzYnM6ICcnIH07IC8vIHRlbXBvcmFyeSBvYmplY3QgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGNkIChjaGFuZ2UgZGF0YSkgb2JqZWN0XHJcblxyXG4gICAgd2hpbGUgKGkgPCBzbGVuKSB7XHJcbiAgICAgIGxbaV0gPT09IHNbaV1cclxuICAgICAgICA/IG1hdGNoXHJcbiAgICAgICAgICA/IChvLnNicyArPSBzW2ldKSAvLyBvLnNicyBob2xkcyB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5nIGl0c2VmXHJcbiAgICAgICAgICA6ICgobWF0Y2ggPSB0cnVlKSwgKG8uZmlzID0gaSksIChvLnNicyA9IHNbaV0pKVxyXG4gICAgICAgIDogbWF0Y2hcclxuICAgICAgICA/IChpID0gc2xlbikgLy8gc3RvcCBhZnRlciB0aGUgZmlyc3QgZm91bmQgc3Vic3RyaW5nXHJcbiAgICAgICAgOiAoaSA9IGkpO1xyXG4gICAgICArK2k7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGdldENoYW5nZXMoczEsIHMyLCBtLCBwKSB7XHJcbiAgICBjb25zdCBpc1RoaXNMb25nZXIgPSBzMS5sZW5ndGggPj0gczEubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgbGV0IFtsb25nZXIsIHNob3J0ZXJdID0gaXNUaGlzTG9uZ2VyID8gW3MxLCBzMl0gOiBbczIsIHMxXTsgLy8gYXNzaWdubWVudCBvZiBsb25nZXIgYW5kIHNob3J0ZXIgYnkgZXM2IGRlc3RydWN0dXJpbmdcclxuICAgIGxldCBiaSA9IDA7IC8vIGJhc2UgaW5kZXggZGVzaWduYXRpbmcgdGhlIGluZGV4IG9mIGZpcnN0IG1pc21hY3RoaW5nIGNoYXJhY3RlciBpbiBib3RoIHN0cmluZ3NcclxuXHJcbiAgICB3aGlsZSAoc2hvcnRlcltiaV0gPT09IGxvbmdlcltiaV0gJiYgYmkgPCBzaG9ydGVyLmxlbmd0aCkge1xyXG4gICAgICArK2JpO1xyXG4gICAgfSAvLyBtYWtlIGJpIHRoZSBpbmRleCBvZiBmaXJzdCBtaXNtYXRjaGluZyBjaGFyYWN0ZXJcclxuICAgIGxvbmdlciA9IGxvbmdlci5zcGxpdCgnJykuc2xpY2UoYmkpOyAvLyBhcyB0aGUgbG9uZ2VyIHN0cmluZyB3aWxsIGJlIHJvdGF0ZWQgaXQgaXMgY29udmVydGVkIGludG8gYXJyYXlcclxuICAgIHNob3J0ZXIgPSBzaG9ydGVyLnNsaWNlKGJpKTsgLy8gc2hvcnRlciBhbmQgbG9uZ2VyIG5vdyBzdGFydHMgZnJvbSB0aGUgZmlyc3QgbWlzbWF0Y2hpbmcgY2hhcmFjdGVyXHJcblxyXG4gICAgY29uc3QgbGVuID0gbG9uZ2VyLmxlbmd0aDsgLy8gbGVuZ3RoIG9mIHRoZSBsb25nZXIgc3RyaW5nXHJcbiAgICBsZXQgY2Q6IGFueSA9IHtcclxuICAgICAgZmlzOiBzaG9ydGVyLmxlbmd0aCwgLy8gdGhlIGluZGV4IG9mIG1hdGNoaW5nIHN0cmluZyBpbiB0aGUgc2hvcnRlciBzdHJpbmdcclxuICAgICAgZmlsOiBsZW4sIC8vIHRoZSBpbmRleCBvZiBtYXRjaGluZyBzdHJpbmcgaW4gdGhlIGxvbmdlciBzdHJpbmdcclxuICAgICAgc2JzOiAnJywgLy8gdGhlIG1hdGNoaW5nIHN1YnN0cmluZyBpdHNlbGZcclxuICAgICAgbXRjOiBtICsgczIuc2xpY2UoMCwgYmkpXHJcbiAgICB9OyAvLyBpZiBleGlzdHMgbXRjIGhvbGRzIHRoZSBtYXRjaGluZyBzdHJpbmcgYXQgdGhlIGZyb250XHJcbiAgICBsZXQgc3ViOiBhbnkgPSB7IHNiczogJycgfTsgLy8gcmV0dXJuZWQgc3Vic3RyaW5nIHBlciAxIGNoYXJhY3RlciByb3RhdGlvbiBvZiB0aGUgbG9uZ2VyIHN0cmluZ1xyXG5cclxuICAgIGlmIChzaG9ydGVyICE9PSAnJykge1xyXG4gICAgICBmb3IgKGxldCByYyA9IDA7IHJjIDwgbGVuICYmIHN1Yi5zYnMubGVuZ3RoIDwgcDsgcmMrKykge1xyXG4gICAgICAgIC8vIHJjIC0+IHJvdGF0ZSBjb3VudCwgcCAtPiBwcmVjaXNpb24gZmFjdG9yXHJcbiAgICAgICAgc3ViID0gU3RyaW5nVXRpbHMuZ2V0TWF0Y2hpbmdTdWJzdHJpbmcoXHJcbiAgICAgICAgICBzaG9ydGVyLFxyXG4gICAgICAgICAgU3RyaW5nVXRpbHMucm90YXRlQXJyYXkobG9uZ2VyLCByYyksXHJcbiAgICAgICAgICBjZC5tdGNcclxuICAgICAgICApOyAvLyByb3RhdGUgbG9uZ2VyIHN0cmluZyAxIGNoYXIgYW5kIGdldCBzdWJzdHJpbmdcclxuICAgICAgICBzdWIuZmlsID1cclxuICAgICAgICAgIHJjIDwgbGVuIC0gc3ViLmZpc1xyXG4gICAgICAgICAgICA/IHN1Yi5maXMgKyByYyAvLyBtaXNtYXRjaCBpcyBsb25nZXIgdGhhbiB0aGUgbWlzbWF0Y2ggaW4gc2hvcnRcclxuICAgICAgICAgICAgOiBzdWIuZmlzIC0gbGVuICsgcmM7IC8vIG1pc21hdGNoIGlzIHNob3J0ZXIgdGhhbiB0aGUgbWlzbWF0Y2ggaW4gc2hvcnRcclxuICAgICAgICBpZiAoc3ViLnNicy5sZW5ndGggPiBjZC5zYnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjZCA9IHN1YjsgLy8gb25seSBrZWVwIHRoZSBvbmUgd2l0aCB0aGUgbG9uZ2VzdCBzdWJzdHJpbmcuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBpbnNlcnQgdGhlIG1pc21hdGNoaW5nIGRlbGV0ZSBzdWJzcnQgYW5kIGluc2VydCBzdWJzdHIgdG8gdGhlIGNkIG9iamVjdCBhbmQgYXR0YWNoIHRoZSBwcmV2aW91cyBzdWJzdHJpbmdcclxuICAgIFtjZC5kZWwsIGNkLmluc10gPSBpc1RoaXNMb25nZXJcclxuICAgICAgPyBbbG9uZ2VyLnNsaWNlKDAsIGNkLmZpbCkuam9pbignJyksIHNob3J0ZXIuc2xpY2UoMCwgY2QuZmlzKV1cclxuICAgICAgOiBbc2hvcnRlci5zbGljZSgwLCBjZC5maXMpLCBsb25nZXIuc2xpY2UoMCwgY2QuZmlsKS5qb2luKCcnKV07XHJcbiAgICByZXR1cm4gY2QuZGVsLmluZGV4T2YoJyAnKSA9PT0gLTEgfHxcclxuICAgICAgY2QuaW5zLmluZGV4T2YoJyAnKSA9PT0gLTEgfHxcclxuICAgICAgY2QuZGVsID09PSAnJyB8fFxyXG4gICAgICBjZC5pbnMgPT09ICcnIHx8XHJcbiAgICAgIGNkLnNicyA9PT0gJydcclxuICAgICAgPyBjZFxyXG4gICAgICA6IFN0cmluZ1V0aWxzLmdldENoYW5nZXMoY2QuZGVsLCBjZC5pbnMsIGNkLm10YywgcCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyByb3RhdGVBcnJheShhcnJheSwgbikge1xyXG4gICAgY29uc3QgbGVuID0gYXJyYXkubGVuZ3RoO1xyXG4gICAgY29uc3QgcmVzID0gbmV3IEFycmF5KGFycmF5Lmxlbmd0aCk7XHJcbiAgICBpZiAobiAlIGxlbiA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gYXJyYXkuc2xpY2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICByZXNbaV0gPSBhcnJheVsoaSArIChsZW4gKyAobiAlIGxlbikpKSAlIGxlbl07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNWYWxpZE51bWJlcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIWlzTmFOKE51bWJlcih2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzT2N0YWxOdW1iZXIodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgU3RyaW5nVXRpbHMuaXNWYWxpZE51bWJlcih2YWx1ZSkgJiZcclxuICAgICAgdmFsdWUuc3RhcnRzV2l0aCgnMCcpICYmXHJcbiAgICAgIHZhbHVlLmxlbmd0aCA+IDFcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DomUtils } from './dom.utils';
|
|
2
|
+
const PATH_PREBUILT_THEMES = 'assets/igo2/core/theming/prebuilt-themes';
|
|
3
|
+
const LINK_ID = 'theme-styles';
|
|
4
|
+
export function loadTheme(doc, themeName, path = PATH_PREBUILT_THEMES) {
|
|
5
|
+
const src = `${path}/${themeName}.css`;
|
|
6
|
+
const head = doc.getElementsByTagName('head')[0];
|
|
7
|
+
let themeLink = doc.getElementById(LINK_ID);
|
|
8
|
+
themeLink ? (themeLink.href = src) : createHtmlLink(doc, src, head);
|
|
9
|
+
}
|
|
10
|
+
function createHtmlLink(doc, src, parent) {
|
|
11
|
+
const element = DomUtils.create(doc, 'link', {
|
|
12
|
+
id: LINK_ID,
|
|
13
|
+
rel: 'stylesheet',
|
|
14
|
+
href: src
|
|
15
|
+
});
|
|
16
|
+
parent.appendChild(element);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy91dGlscy9zcmMvbGliL3RoZW1lLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkMsTUFBTSxvQkFBb0IsR0FBRywwQ0FBMEMsQ0FBQztBQUN4RSxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUM7QUFFL0IsTUFBTSxVQUFVLFNBQVMsQ0FDdkIsR0FBYSxFQUNiLFNBQWlCLEVBQ2pCLE9BQWUsb0JBQW9CO0lBRW5DLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLFNBQVMsTUFBTSxDQUFDO0lBQ3ZDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqRCxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBb0IsQ0FBQztJQUMvRCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEdBQWEsRUFBRSxHQUFXLEVBQUUsTUFBbUI7SUFDckUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFO1FBQzNDLEVBQUUsRUFBRSxPQUFPO1FBQ1gsR0FBRyxFQUFFLFlBQVk7UUFDakIsSUFBSSxFQUFFLEdBQUc7S0FDVixDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb21VdGlscyB9IGZyb20gJy4vZG9tLnV0aWxzJztcblxuY29uc3QgUEFUSF9QUkVCVUlMVF9USEVNRVMgPSAnYXNzZXRzL2lnbzIvY29yZS90aGVtaW5nL3ByZWJ1aWx0LXRoZW1lcyc7XG5jb25zdCBMSU5LX0lEID0gJ3RoZW1lLXN0eWxlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkVGhlbWUoXG4gIGRvYzogRG9jdW1lbnQsXG4gIHRoZW1lTmFtZTogc3RyaW5nLFxuICBwYXRoOiBzdHJpbmcgPSBQQVRIX1BSRUJVSUxUX1RIRU1FU1xuKTogdm9pZCB7XG4gIGNvbnN0IHNyYyA9IGAke3BhdGh9LyR7dGhlbWVOYW1lfS5jc3NgO1xuICBjb25zdCBoZWFkID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG5cbiAgbGV0IHRoZW1lTGluayA9IGRvYy5nZXRFbGVtZW50QnlJZChMSU5LX0lEKSBhcyBIVE1MTGlua0VsZW1lbnQ7XG4gIHRoZW1lTGluayA/ICh0aGVtZUxpbmsuaHJlZiA9IHNyYykgOiBjcmVhdGVIdG1sTGluayhkb2MsIHNyYywgaGVhZCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUh0bWxMaW5rKGRvYzogRG9jdW1lbnQsIHNyYzogc3RyaW5nLCBwYXJlbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIGNvbnN0IGVsZW1lbnQgPSBEb21VdGlscy5jcmVhdGUoZG9jLCAnbGluaycsIHtcbiAgICBpZDogTElOS19JRCxcbiAgICByZWw6ICdzdHlsZXNoZWV0JyxcbiAgICBocmVmOiBzcmNcbiAgfSk7XG4gIHBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcbn1cbiJdfQ==
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import * as Bowser from 'bowser';
|
|
2
|
-
export const userAgent = Bowser.getParser(window.navigator.userAgent);
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import * as Bowser from 'bowser';
|
|
2
|
+
export const userAgent = Bowser.getParser(window.navigator.userAgent);
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1hZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3V0aWxzL3NyYy9saWIvdXNlci1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQU1qQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEJvd3NlciBmcm9tICdib3dzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBZ2VudCBleHRlbmRzIEJvd3Nlci5QYXJzZXIuUGFyc2VyIHtcbiAgY29tcGFyZVZlcnNpb246ICh2ZXJzaW9uOiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCB1c2VyQWdlbnQgPSBCb3dzZXIuZ2V0UGFyc2VyKFxuICB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudFxuKSBhcyBVc2VyQWdlbnQ7XG4iXX0=
|