@plurid/plurid-engine 0.0.0-15 → 0.0.0-16
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/distribution/index.es.js +1177 -1177
- package/distribution/index.es.js.map +1 -1
- package/distribution/index.js +1178 -1178
- package/distribution/index.js.map +1 -1
- package/package.json +13 -13
package/distribution/index.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defaultConfiguration,
|
|
1
|
+
import { defaultConfiguration, protocols, HTTPS_PROTOCOL, HTTP_PROTOCOL, compareTypes, internationalization, ROOTS_GAP, LAYOUT_TYPES, PLANE_DEFAULT_ANGLE, PLURID_ROUTER_LOCATION_CHANGED } from "@plurid/plurid-data";
|
|
2
2
|
|
|
3
3
|
import { objects, mathematics, uuid } from "@plurid/plurid-functions";
|
|
4
4
|
|
|
@@ -46,1337 +46,1337 @@ var index$k = Object.freeze({
|
|
|
46
46
|
merge: merge
|
|
47
47
|
});
|
|
48
48
|
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
49
|
+
const extractPathname = location => {
|
|
50
|
+
const queryIndex = location.indexOf("?");
|
|
51
|
+
const noQueryPath = queryIndex === -1 ? location : location.substring(0, queryIndex);
|
|
52
|
+
const fragmentIndex = noQueryPath.indexOf("#:~:");
|
|
53
|
+
const noFragmentPath = fragmentIndex === -1 ? noQueryPath : noQueryPath.substring(0, fragmentIndex);
|
|
54
|
+
return noFragmentPath;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const extractParametersAndMatch = (location, route) => {
|
|
58
|
+
const routeElements = splitPath(route);
|
|
59
|
+
const parameters = [];
|
|
60
|
+
routeElements.forEach((routeElement => {
|
|
61
|
+
if (routeElement[0] === ":") {
|
|
62
|
+
parameters.push(routeElement);
|
|
63
|
+
} else {
|
|
64
|
+
parameters.push("");
|
|
58
65
|
}
|
|
59
|
-
return treePlane;
|
|
60
66
|
}));
|
|
61
|
-
|
|
67
|
+
const {locationElements: locationElements, comparingPath: comparingPath} = computeComparingPath(location, parameters);
|
|
68
|
+
if (comparingPath !== route) {
|
|
69
|
+
return {
|
|
70
|
+
match: false,
|
|
71
|
+
parameters: {},
|
|
72
|
+
elements: locationElements
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const parametersValues = extractParametersValues(parameters, locationElements);
|
|
76
|
+
return {
|
|
77
|
+
match: true,
|
|
78
|
+
parameters: parametersValues,
|
|
79
|
+
elements: locationElements
|
|
80
|
+
};
|
|
62
81
|
};
|
|
63
82
|
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return updatedPlane;
|
|
71
|
-
}
|
|
72
|
-
if (treePlane.children) {
|
|
73
|
-
const updatedChildren = updateTreeByPlaneIDWithLinkCoordinates(treePlane.children, planeID, linkCoordinates);
|
|
74
|
-
const updatedPlane = Object.assign(Object.assign({}, treePlane), {
|
|
75
|
-
children: updatedChildren
|
|
76
|
-
});
|
|
77
|
-
return updatedPlane;
|
|
83
|
+
const extractParametersValues = (parameters, pathElements) => {
|
|
84
|
+
const parametersValues = {};
|
|
85
|
+
parameters.forEach(((parameter, index) => {
|
|
86
|
+
if (parameter) {
|
|
87
|
+
const parameterKey = parameter.slice(1);
|
|
88
|
+
parametersValues[parameterKey] = pathElements[index];
|
|
78
89
|
}
|
|
79
|
-
return treePlane;
|
|
80
90
|
}));
|
|
81
|
-
return
|
|
91
|
+
return parametersValues;
|
|
82
92
|
};
|
|
83
93
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
94
|
+
const computeComparingPath = (path, parameters) => {
|
|
95
|
+
const pathname = extractPathname(path);
|
|
96
|
+
const locationElements = splitPath(pathname);
|
|
97
|
+
const comparingPathElements = [ ...locationElements ];
|
|
98
|
+
for (const index of locationElements.keys()) {
|
|
99
|
+
if (parameters[index]) {
|
|
100
|
+
comparingPathElements[index] = parameters[index];
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const comparingPath = comparingPathElements.join("/");
|
|
104
|
+
return {
|
|
105
|
+
locationElements: locationElements,
|
|
106
|
+
comparingPath: comparingPath
|
|
107
|
+
};
|
|
108
|
+
};
|
|
89
109
|
|
|
90
|
-
|
|
91
|
-
__proto__: null,
|
|
92
|
-
configuration: index$k,
|
|
93
|
-
tree: index$j
|
|
94
|
-
});
|
|
110
|
+
const splitPath = path => path.split("/").filter((i => i !== ""));
|
|
95
111
|
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
112
|
+
const extractQuery = path => {
|
|
113
|
+
const fragmentIndex = path.indexOf("#:~:");
|
|
114
|
+
const noFragmentPath = fragmentIndex === -1 ? path : path.substring(0, fragmentIndex);
|
|
115
|
+
const querySplit = noFragmentPath.split("?");
|
|
116
|
+
if (querySplit.length === 2) {
|
|
117
|
+
const queryValues = {};
|
|
118
|
+
const query = querySplit[1];
|
|
119
|
+
const queryItems = query.split("&");
|
|
120
|
+
for (const item of queryItems) {
|
|
121
|
+
const queryValue = item.split("=");
|
|
122
|
+
const id = queryValue[0];
|
|
123
|
+
const value = decodeURIComponent(queryValue[1]);
|
|
124
|
+
queryValues[id] = value;
|
|
125
|
+
}
|
|
126
|
+
return queryValues;
|
|
127
|
+
} else {
|
|
128
|
+
return {};
|
|
104
129
|
}
|
|
105
|
-
|
|
106
|
-
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const extractFragments = location => {
|
|
133
|
+
if (!location) {
|
|
134
|
+
return {
|
|
135
|
+
texts: [],
|
|
136
|
+
elements: []
|
|
137
|
+
};
|
|
107
138
|
}
|
|
108
|
-
|
|
109
|
-
|
|
139
|
+
const split = location.split("#:~:");
|
|
140
|
+
const fragmentsValues = split[1];
|
|
141
|
+
if (!fragmentsValues) {
|
|
142
|
+
return {
|
|
143
|
+
texts: [],
|
|
144
|
+
elements: []
|
|
145
|
+
};
|
|
110
146
|
}
|
|
111
|
-
|
|
112
|
-
|
|
147
|
+
const fragmentItems = fragmentsValues.split("&");
|
|
148
|
+
const textFragments = [];
|
|
149
|
+
const elementFragments = [];
|
|
150
|
+
for (const item of fragmentItems) {
|
|
151
|
+
const parsedFragment = parseFragment(item);
|
|
152
|
+
if (parsedFragment) {
|
|
153
|
+
switch (parsedFragment.type) {
|
|
154
|
+
case "text":
|
|
155
|
+
textFragments.push(parsedFragment);
|
|
156
|
+
break;
|
|
157
|
+
|
|
158
|
+
case "element":
|
|
159
|
+
elementFragments.push(parsedFragment);
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
113
163
|
}
|
|
114
|
-
return
|
|
164
|
+
return {
|
|
165
|
+
texts: textFragments,
|
|
166
|
+
elements: elementFragments
|
|
167
|
+
};
|
|
115
168
|
};
|
|
116
169
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
170
|
+
const parseFragment = fragment => {
|
|
171
|
+
const fragmentData = fragment.split("=");
|
|
172
|
+
const fragmentType = fragmentData[0];
|
|
173
|
+
const fragmentValues = fragmentData[1];
|
|
174
|
+
switch (fragmentType.toLowerCase()) {
|
|
175
|
+
case "text":
|
|
176
|
+
{
|
|
177
|
+
const textValues = fragmentValues.split(",");
|
|
178
|
+
const textStart = textValues[0];
|
|
179
|
+
const textEnd = textValues[1];
|
|
180
|
+
const textOccurence = extractOccurence(textValues[2]);
|
|
181
|
+
if (!textStart) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
type: "text",
|
|
186
|
+
start: textStart,
|
|
187
|
+
end: textEnd || "",
|
|
188
|
+
occurence: textOccurence
|
|
189
|
+
};
|
|
190
|
+
}
|
|
123
191
|
|
|
124
|
-
|
|
192
|
+
case "element":
|
|
193
|
+
{
|
|
194
|
+
const elementValues = fragmentValues.split(",");
|
|
195
|
+
const elementID = elementValues[0];
|
|
196
|
+
const elementOccurence = extractOccurence(elementValues[1]);
|
|
197
|
+
if (!elementID) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
type: "element",
|
|
202
|
+
id: elementID,
|
|
203
|
+
occurence: elementOccurence
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return undefined;
|
|
208
|
+
};
|
|
125
209
|
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
210
|
+
const extractOccurence = occurence => {
|
|
211
|
+
if (!occurence) {
|
|
212
|
+
return 0;
|
|
213
|
+
}
|
|
214
|
+
const occurenceMatch = occurence.match(/\[(\d*)\]/);
|
|
215
|
+
const occurenceValue = occurenceMatch ? parseInt(occurenceMatch[1]) : 0;
|
|
216
|
+
return occurenceValue;
|
|
217
|
+
};
|
|
132
218
|
|
|
133
|
-
const
|
|
219
|
+
const stringInsertInitial = (value, insert) => {
|
|
220
|
+
if (!value.startsWith(insert)) {
|
|
221
|
+
value = insert + value;
|
|
222
|
+
}
|
|
223
|
+
return value;
|
|
224
|
+
};
|
|
134
225
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
226
|
+
const stringRemoveTrailing = (value, trail) => {
|
|
227
|
+
if (value.endsWith(trail)) {
|
|
228
|
+
value = value.slice(0, value.length - trail.length);
|
|
229
|
+
}
|
|
230
|
+
return value;
|
|
231
|
+
};
|
|
138
232
|
|
|
139
|
-
|
|
140
|
-
return makeQuaternion(-quaternion.x, -quaternion.y, -quaternion.z, quaternion.w);
|
|
141
|
-
}
|
|
233
|
+
const PATH_SEPARATOR = "/";
|
|
142
234
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
const cY = Math.cos(y / 2);
|
|
149
|
-
const cZ = Math.cos(z / 2);
|
|
150
|
-
const sX = Math.sin(x / 2);
|
|
151
|
-
const sY = Math.sin(y / 2);
|
|
152
|
-
const sZ = Math.sin(z / 2);
|
|
153
|
-
const xQ = sX * cY * cZ - cX * sY * sZ;
|
|
154
|
-
const yQ = cX * sY * cZ + sX * cY * sZ;
|
|
155
|
-
const zQ = cX * cY * sZ + sX * sY * cZ;
|
|
156
|
-
const wQ = cX * cY * cZ - sX * sY * sZ;
|
|
157
|
-
return makeQuaternion(xQ, yQ, zQ, wQ);
|
|
158
|
-
}
|
|
235
|
+
const cleanupPath = value => {
|
|
236
|
+
value = stringInsertInitial(value, PATH_SEPARATOR);
|
|
237
|
+
value = stringRemoveTrailing(value, PATH_SEPARATOR);
|
|
238
|
+
return value;
|
|
239
|
+
};
|
|
159
240
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
const sine = Math.sin(halfAngle);
|
|
164
|
-
q.x = x * sine;
|
|
165
|
-
q.y = y * sine;
|
|
166
|
-
q.z = z * sine;
|
|
167
|
-
q.w = Math.cos(halfAngle);
|
|
168
|
-
return q;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
function quaternionMultiply(quaternionArray) {
|
|
172
|
-
const firstQuaternion = quaternionArray[0];
|
|
173
|
-
const valueQuaternion = Object.assign({}, firstQuaternion);
|
|
174
|
-
for (let i = 1; i < quaternionArray.length; i++) {
|
|
175
|
-
const nextQuaternion = quaternionArray[i];
|
|
176
|
-
const w = valueQuaternion.w * nextQuaternion.w - valueQuaternion.x * nextQuaternion.x - valueQuaternion.y * nextQuaternion.y - valueQuaternion.z * nextQuaternion.z;
|
|
177
|
-
const x = valueQuaternion.x * nextQuaternion.w + valueQuaternion.w * nextQuaternion.x + valueQuaternion.y * nextQuaternion.z - valueQuaternion.z * nextQuaternion.y;
|
|
178
|
-
const y = valueQuaternion.y * nextQuaternion.w + valueQuaternion.w * nextQuaternion.y + valueQuaternion.z * nextQuaternion.x - valueQuaternion.x * nextQuaternion.z;
|
|
179
|
-
const z = valueQuaternion.z * nextQuaternion.w + valueQuaternion.w * nextQuaternion.z + valueQuaternion.x * nextQuaternion.y - valueQuaternion.y * nextQuaternion.x;
|
|
180
|
-
valueQuaternion.x = x;
|
|
181
|
-
valueQuaternion.y = y;
|
|
182
|
-
valueQuaternion.z = z;
|
|
183
|
-
valueQuaternion.w = w;
|
|
241
|
+
const computePlaneAddress = (plane, route, origin = "origin") => {
|
|
242
|
+
if (origin === "origin" && typeof location !== "undefined" && location.host) {
|
|
243
|
+
origin = location.host;
|
|
184
244
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
|
|
245
|
+
const cleanPlane = extractPathname(plane);
|
|
246
|
+
const planeAddressType = checkPlaneAddressType(cleanPlane);
|
|
247
|
+
switch (planeAddressType) {
|
|
248
|
+
case "http":
|
|
249
|
+
case "https":
|
|
250
|
+
case "pttp":
|
|
251
|
+
return cleanPlane;
|
|
252
|
+
}
|
|
253
|
+
origin = stringRemoveTrailing(origin, "/");
|
|
254
|
+
const absolutePlane = isAbsolutePlane(plane);
|
|
255
|
+
const path = route && route !== "/" ? absolutePlane ? cleanupPath(cleanPlane) : cleanupPath(route) + cleanupPath(cleanPlane) : cleanupPath(cleanPlane);
|
|
256
|
+
const planeAddress = protocols.plurid + origin + path;
|
|
257
|
+
return planeAddress;
|
|
258
|
+
};
|
|
198
259
|
|
|
199
|
-
|
|
200
|
-
const num = quaternion.x * 2;
|
|
201
|
-
const num2 = quaternion.y * 2;
|
|
202
|
-
const num3 = quaternion.z * 2;
|
|
203
|
-
const num4 = quaternion.x * num;
|
|
204
|
-
const num5 = quaternion.y * num2;
|
|
205
|
-
const num6 = quaternion.z * num3;
|
|
206
|
-
const num7 = quaternion.x * num2;
|
|
207
|
-
const num8 = quaternion.x * num3;
|
|
208
|
-
const num9 = quaternion.y * num3;
|
|
209
|
-
const num10 = quaternion.w * num;
|
|
210
|
-
const num11 = quaternion.w * num2;
|
|
211
|
-
const num12 = quaternion.w * num3;
|
|
212
|
-
return [ 1 - (num5 + num6), num7 - num12, num8 + num11, 0, num7 + num12, 1 - (num4 + num6), num9 - num10, 0, num8 - num11, num9 + num10, 1 - (num4 + num5), 0, 0, 0, 0, 1 ];
|
|
213
|
-
}
|
|
260
|
+
const isAbsolutePlane = value => value[0] === "/";
|
|
214
261
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
});
|
|
262
|
+
const checkPlaneAddressType = value => {
|
|
263
|
+
value = value.toLowerCase().trim();
|
|
264
|
+
if (value.startsWith(protocols.plurid)) {
|
|
265
|
+
return "pttp";
|
|
266
|
+
}
|
|
267
|
+
if (value.startsWith(protocols.https)) {
|
|
268
|
+
return HTTPS_PROTOCOL;
|
|
269
|
+
}
|
|
270
|
+
if (value.startsWith(protocols.http)) {
|
|
271
|
+
return HTTP_PROTOCOL;
|
|
272
|
+
}
|
|
273
|
+
return "relative";
|
|
274
|
+
};
|
|
229
275
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
return rotationMatrix;
|
|
237
|
-
}
|
|
276
|
+
const removeTrailingSlash = value => {
|
|
277
|
+
if (value.endsWith("/") && value.length > 1) {
|
|
278
|
+
return value.slice(0, value.length - 1);
|
|
279
|
+
}
|
|
280
|
+
return value;
|
|
281
|
+
};
|
|
238
282
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
283
|
+
const cleanPathValue = value => {
|
|
284
|
+
const queryStart = value.indexOf("?");
|
|
285
|
+
if (queryStart < 0) {
|
|
286
|
+
return removeTrailingSlash(value);
|
|
287
|
+
}
|
|
288
|
+
return removeTrailingSlash(value.substring(0, queryStart));
|
|
289
|
+
};
|
|
242
290
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
291
|
+
const checkParameterLength = (parameter, length, compareType) => {
|
|
292
|
+
const parameterLength = parameter.length;
|
|
293
|
+
switch (compareType) {
|
|
294
|
+
case compareTypes.equal:
|
|
295
|
+
return parameterLength === length;
|
|
246
296
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
const a00 = matrixA[0];
|
|
250
|
-
const a01 = matrixA[1];
|
|
251
|
-
const a02 = matrixA[2];
|
|
252
|
-
const a03 = matrixA[3];
|
|
253
|
-
const a10 = matrixA[4];
|
|
254
|
-
const a11 = matrixA[5];
|
|
255
|
-
const a12 = matrixA[6];
|
|
256
|
-
const a13 = matrixA[7];
|
|
257
|
-
const a20 = matrixA[8];
|
|
258
|
-
const a21 = matrixA[9];
|
|
259
|
-
const a22 = matrixA[10];
|
|
260
|
-
const a23 = matrixA[11];
|
|
261
|
-
const a30 = matrixA[12];
|
|
262
|
-
const a31 = matrixA[13];
|
|
263
|
-
const a32 = matrixA[14];
|
|
264
|
-
const a33 = matrixA[15];
|
|
265
|
-
let b0 = matrixB[0];
|
|
266
|
-
let b1 = matrixB[1];
|
|
267
|
-
let b2 = matrixB[2];
|
|
268
|
-
let b3 = matrixB[3];
|
|
269
|
-
result[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
270
|
-
result[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
271
|
-
result[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
272
|
-
result[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
273
|
-
b0 = matrixB[4];
|
|
274
|
-
b1 = matrixB[5];
|
|
275
|
-
b2 = matrixB[6];
|
|
276
|
-
b3 = matrixB[7];
|
|
277
|
-
result[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
278
|
-
result[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
279
|
-
result[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
280
|
-
result[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
281
|
-
b0 = matrixB[8];
|
|
282
|
-
b1 = matrixB[9];
|
|
283
|
-
b2 = matrixB[10];
|
|
284
|
-
b3 = matrixB[11];
|
|
285
|
-
result[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
286
|
-
result[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
287
|
-
result[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
288
|
-
result[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
289
|
-
b0 = matrixB[12];
|
|
290
|
-
b1 = matrixB[13];
|
|
291
|
-
b2 = matrixB[14];
|
|
292
|
-
b3 = matrixB[15];
|
|
293
|
-
result[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
294
|
-
result[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
295
|
-
result[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
296
|
-
result[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
297
|
-
return result;
|
|
298
|
-
}
|
|
297
|
+
case compareTypes.equalLessThan:
|
|
298
|
+
return parameterLength <= length;
|
|
299
299
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
for (let i = 1; i < matrices.length; i++) {
|
|
303
|
-
inputMatrix = multiplyMatrices$1(inputMatrix, matrices[i]);
|
|
304
|
-
}
|
|
305
|
-
return inputMatrix;
|
|
306
|
-
}
|
|
300
|
+
case compareTypes.lessThan:
|
|
301
|
+
return parameterLength < length;
|
|
307
302
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
}
|
|
303
|
+
case compareTypes.equalGreaterThan:
|
|
304
|
+
return parameterLength >= length;
|
|
311
305
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
rotateMatrix: rotateMatrix,
|
|
315
|
-
translateMatrix: translateMatrix$1,
|
|
316
|
-
scaleMatrix: scaleMatrix$1,
|
|
317
|
-
multiplyMatrices: multiplyMatrices$1,
|
|
318
|
-
multiplyArrayOfMatrices: multiplyArrayOfMatrices,
|
|
319
|
-
matrixArrayToCSSMatrix: matrixArrayToCSSMatrix
|
|
320
|
-
});
|
|
306
|
+
case compareTypes.greaterThan:
|
|
307
|
+
return parameterLength > length;
|
|
321
308
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
309
|
+
default:
|
|
310
|
+
return parameterLength <= length;
|
|
311
|
+
}
|
|
325
312
|
};
|
|
326
313
|
|
|
327
|
-
const
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
314
|
+
const checkValidPath = (validationParameters, parameters) => {
|
|
315
|
+
if (validationParameters) {
|
|
316
|
+
for (const [parameterKey, parameterData] of Object.entries(validationParameters)) {
|
|
317
|
+
const {length: length, lengthType: lengthType, startsWith: startsWith, endsWith: endsWith, includes: includes} = parameterData;
|
|
318
|
+
const paramaterValue = parameters[parameterKey];
|
|
319
|
+
if (!paramaterValue) {
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
if (startsWith && !paramaterValue.startsWith(startsWith)) {
|
|
323
|
+
return false;
|
|
324
|
+
}
|
|
325
|
+
if (endsWith && !paramaterValue.endsWith(endsWith)) {
|
|
326
|
+
return false;
|
|
327
|
+
}
|
|
328
|
+
if (includes && !includes.includes(paramaterValue)) {
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
331
|
+
if (length) {
|
|
332
|
+
const validLength = checkParameterLength(paramaterValue, length, lengthType);
|
|
333
|
+
return validLength;
|
|
335
334
|
}
|
|
336
|
-
result[i][j] = sum;
|
|
337
335
|
}
|
|
338
336
|
}
|
|
339
|
-
return
|
|
337
|
+
return true;
|
|
340
338
|
};
|
|
341
339
|
|
|
342
|
-
const
|
|
343
|
-
if (
|
|
344
|
-
|
|
340
|
+
const cleanPathElement = path => {
|
|
341
|
+
if (path[0] === "/") {
|
|
342
|
+
return path.slice(1);
|
|
345
343
|
}
|
|
346
|
-
|
|
347
|
-
let result = first;
|
|
348
|
-
for (const [index, matrix] of matrices.entries()) {
|
|
349
|
-
if (index === 0) {
|
|
350
|
-
continue;
|
|
351
|
-
}
|
|
352
|
-
result = multiplyMatrices(result, matrix);
|
|
353
|
-
}
|
|
354
|
-
return result;
|
|
355
|
-
};
|
|
356
|
-
|
|
357
|
-
const arrayToMatrix = array => {
|
|
358
|
-
const matrix = [];
|
|
359
|
-
for (let i = 0; i < array.length; i += 4) {
|
|
360
|
-
const row = [];
|
|
361
|
-
row.push(array[i]);
|
|
362
|
-
row.push(array[i + 1]);
|
|
363
|
-
row.push(array[i + 2]);
|
|
364
|
-
row.push(array[i + 3]);
|
|
365
|
-
matrix.push(row);
|
|
366
|
-
}
|
|
367
|
-
return matrix;
|
|
344
|
+
return path;
|
|
368
345
|
};
|
|
369
346
|
|
|
370
|
-
|
|
347
|
+
var index$j = Object.freeze({
|
|
348
|
+
__proto__: null,
|
|
349
|
+
cleanPathElement: cleanPathElement
|
|
350
|
+
});
|
|
371
351
|
|
|
372
|
-
const
|
|
373
|
-
const
|
|
374
|
-
|
|
352
|
+
const mapPathsToRoutes = (paths, view) => {
|
|
353
|
+
const routes = [];
|
|
354
|
+
for (const [key, path] of Object.entries(paths)) {
|
|
355
|
+
const pathView = view[key];
|
|
356
|
+
if (pathView) {
|
|
357
|
+
const route = {
|
|
358
|
+
value: ""
|
|
359
|
+
};
|
|
360
|
+
routes.push(route);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return routes;
|
|
375
364
|
};
|
|
376
365
|
|
|
377
|
-
const
|
|
378
|
-
const
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
366
|
+
const pluridLinkPathDivider = route => {
|
|
367
|
+
const windowProtocol = typeof window === "undefined" ? "http" : window.location.protocol.replace(":", "");
|
|
368
|
+
const windowHost = typeof window === "undefined" ? "localhost:63000" : window.location.host;
|
|
369
|
+
const split = route.split("://").filter((value => value !== "")).map((value => cleanPathElement(value)));
|
|
370
|
+
let protocol = windowProtocol;
|
|
371
|
+
const host = {
|
|
372
|
+
value: windowHost,
|
|
373
|
+
controlled: false
|
|
374
|
+
};
|
|
375
|
+
const path = {
|
|
376
|
+
value: "",
|
|
377
|
+
parameters: {},
|
|
378
|
+
query: {}
|
|
379
|
+
};
|
|
380
|
+
const space = {
|
|
381
|
+
value: "",
|
|
382
|
+
parameters: {},
|
|
383
|
+
query: {}
|
|
384
|
+
};
|
|
385
|
+
const universe = {
|
|
386
|
+
value: "",
|
|
387
|
+
parameters: {},
|
|
388
|
+
query: {}
|
|
389
|
+
};
|
|
390
|
+
const cluster = {
|
|
391
|
+
value: "",
|
|
392
|
+
parameters: {},
|
|
393
|
+
query: {}
|
|
394
|
+
};
|
|
395
|
+
const plane = {
|
|
396
|
+
value: "",
|
|
397
|
+
parameters: {},
|
|
398
|
+
query: {},
|
|
399
|
+
fragments: {
|
|
400
|
+
texts: [],
|
|
401
|
+
elements: []
|
|
384
402
|
}
|
|
385
|
-
return value.toFixed(2) + " ";
|
|
386
403
|
};
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
404
|
+
const valid = false;
|
|
405
|
+
if (split.length === 0 || split.length > 7) {
|
|
406
|
+
const url = {
|
|
407
|
+
protocol: {
|
|
408
|
+
value: protocol,
|
|
409
|
+
secure: true
|
|
410
|
+
},
|
|
411
|
+
host: host,
|
|
412
|
+
path: path,
|
|
413
|
+
space: space,
|
|
414
|
+
universe: universe,
|
|
415
|
+
cluster: cluster,
|
|
416
|
+
plane: plane,
|
|
417
|
+
valid: valid
|
|
418
|
+
};
|
|
419
|
+
return url;
|
|
390
420
|
}
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
421
|
+
if (route.startsWith("/://")) {
|
|
422
|
+
const routeSplit = split.slice(1);
|
|
423
|
+
switch (routeSplit.length) {
|
|
424
|
+
case 1:
|
|
425
|
+
path.value = routeSplit[0];
|
|
426
|
+
break;
|
|
394
427
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
428
|
+
case 5:
|
|
429
|
+
path.value = routeSplit[0];
|
|
430
|
+
space.value = routeSplit[1];
|
|
431
|
+
universe.value = routeSplit[2];
|
|
432
|
+
cluster.value = routeSplit[3];
|
|
433
|
+
plane.value = routeSplit[4];
|
|
434
|
+
break;
|
|
435
|
+
}
|
|
436
|
+
const url = {
|
|
437
|
+
protocol: {
|
|
438
|
+
value: protocol,
|
|
439
|
+
secure: true
|
|
440
|
+
},
|
|
441
|
+
host: host,
|
|
442
|
+
path: path,
|
|
443
|
+
space: space,
|
|
444
|
+
universe: universe,
|
|
445
|
+
cluster: cluster,
|
|
446
|
+
plane: plane,
|
|
447
|
+
valid: true
|
|
448
|
+
};
|
|
449
|
+
return url;
|
|
450
|
+
}
|
|
451
|
+
if (split[0] !== "http" && split[0] !== "https" && split[0] !== "chrome-extension") {
|
|
452
|
+
switch (split.length) {
|
|
453
|
+
case 1:
|
|
454
|
+
plane.value = split[0];
|
|
455
|
+
break;
|
|
402
456
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
const m = [ [ x, 0, z, 0 ], [ 0, 1, 0, 0 ], [ y, 0, x, 0 ], [ 0, 0, 0, 1 ] ];
|
|
408
|
-
return m;
|
|
409
|
-
};
|
|
457
|
+
case 2:
|
|
458
|
+
cluster.value = split[0];
|
|
459
|
+
plane.value = split[1];
|
|
460
|
+
break;
|
|
410
461
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
return m;
|
|
417
|
-
};
|
|
462
|
+
case 3:
|
|
463
|
+
universe.value = split[0];
|
|
464
|
+
cluster.value = split[1];
|
|
465
|
+
plane.value = split[2];
|
|
466
|
+
break;
|
|
418
467
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
468
|
+
case 4:
|
|
469
|
+
space.value = split[0];
|
|
470
|
+
universe.value = split[1];
|
|
471
|
+
cluster.value = split[2];
|
|
472
|
+
plane.value = split[3];
|
|
473
|
+
break;
|
|
423
474
|
|
|
424
|
-
|
|
475
|
+
case 5:
|
|
476
|
+
path.value = split[0];
|
|
477
|
+
space.value = split[1];
|
|
478
|
+
universe.value = split[2];
|
|
479
|
+
cluster.value = split[3];
|
|
480
|
+
plane.value = split[4];
|
|
481
|
+
break;
|
|
425
482
|
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
const num8 = quaternion.x * num3;
|
|
435
|
-
const num9 = quaternion.y * num3;
|
|
436
|
-
const num10 = quaternion.w * num;
|
|
437
|
-
const num11 = quaternion.w * num2;
|
|
438
|
-
const num12 = quaternion.w * num3;
|
|
439
|
-
return [ [ 1 - (num5 + num6), num7 - num12, num8 + num11, 0 ], [ num7 + num12, 1 - (num4 + num6), num9 - num10, 0 ], [ num8 - num11, num9 + num10, 1 - (num4 + num5), 0 ], [ 0, 0, 0, 1 ] ];
|
|
440
|
-
}
|
|
483
|
+
case 6:
|
|
484
|
+
host.value = split[0];
|
|
485
|
+
path.value = split[1];
|
|
486
|
+
space.value = split[2];
|
|
487
|
+
universe.value = split[3];
|
|
488
|
+
cluster.value = split[4];
|
|
489
|
+
plane.value = split[5];
|
|
490
|
+
break;
|
|
441
491
|
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
492
|
+
default:
|
|
493
|
+
const url = {
|
|
494
|
+
protocol: {
|
|
495
|
+
value: protocol,
|
|
496
|
+
secure: true
|
|
497
|
+
},
|
|
498
|
+
host: host,
|
|
499
|
+
path: path,
|
|
500
|
+
space: space,
|
|
501
|
+
universe: universe,
|
|
502
|
+
cluster: cluster,
|
|
503
|
+
plane: plane,
|
|
504
|
+
valid: valid
|
|
505
|
+
};
|
|
506
|
+
return url;
|
|
507
|
+
}
|
|
508
|
+
} else {
|
|
509
|
+
switch (split.length) {
|
|
510
|
+
case 3:
|
|
511
|
+
protocol = split[0];
|
|
512
|
+
host.value = split[1];
|
|
513
|
+
path.value = split[2];
|
|
514
|
+
break;
|
|
446
515
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
516
|
+
case 7:
|
|
517
|
+
protocol = split[0];
|
|
518
|
+
host.value = split[1];
|
|
519
|
+
path.value = split[2];
|
|
520
|
+
space.value = split[3];
|
|
521
|
+
universe.value = split[4];
|
|
522
|
+
cluster.value = split[5];
|
|
523
|
+
plane.value = split[6];
|
|
524
|
+
break;
|
|
451
525
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
ABig = Math.abs(A[r][c]);
|
|
468
|
-
rBig = r;
|
|
469
|
-
}
|
|
470
|
-
r++;
|
|
526
|
+
default:
|
|
527
|
+
const url = {
|
|
528
|
+
protocol: {
|
|
529
|
+
value: protocol,
|
|
530
|
+
secure: true
|
|
531
|
+
},
|
|
532
|
+
host: host,
|
|
533
|
+
path: path,
|
|
534
|
+
space: space,
|
|
535
|
+
universe: universe,
|
|
536
|
+
cluster: cluster,
|
|
537
|
+
plane: plane,
|
|
538
|
+
valid: valid
|
|
539
|
+
};
|
|
540
|
+
return url;
|
|
471
541
|
}
|
|
472
|
-
|
|
473
|
-
|
|
542
|
+
}
|
|
543
|
+
const url = {
|
|
544
|
+
protocol: {
|
|
545
|
+
value: protocol,
|
|
546
|
+
secure: true
|
|
547
|
+
},
|
|
548
|
+
host: host,
|
|
549
|
+
path: path,
|
|
550
|
+
space: space,
|
|
551
|
+
universe: universe,
|
|
552
|
+
cluster: cluster,
|
|
553
|
+
plane: plane,
|
|
554
|
+
valid: true
|
|
555
|
+
};
|
|
556
|
+
return url;
|
|
557
|
+
};
|
|
558
|
+
|
|
559
|
+
const resolveRoute = (route, protocol, host) => {
|
|
560
|
+
const windowProtocol = typeof window === "undefined" ? protocol || "http" : window.location.protocol.replace(":", "");
|
|
561
|
+
const windowHost = typeof window === "undefined" ? host || "localhost:63000" : window.location.host;
|
|
562
|
+
const divisions = pluridLinkPathDivider(route);
|
|
563
|
+
const defaultPathname = typeof window !== "undefined" ? window.location.pathname === "/" ? "p" : window.location.pathname.slice(1) : divisions.path.value ? divisions.path.value : "p";
|
|
564
|
+
const protocolDivision = divisions.protocol.value || windowProtocol;
|
|
565
|
+
const hostDivision = divisions.host.value ? divisions.host : {
|
|
566
|
+
value: windowHost,
|
|
567
|
+
controlled: true
|
|
568
|
+
};
|
|
569
|
+
const path = divisions.path.value ? divisions.path : {
|
|
570
|
+
value: defaultPathname,
|
|
571
|
+
parameters: {},
|
|
572
|
+
query: {}
|
|
573
|
+
};
|
|
574
|
+
const space = divisions.space.value ? divisions.space : {
|
|
575
|
+
value: "s",
|
|
576
|
+
parameters: {},
|
|
577
|
+
query: {}
|
|
578
|
+
};
|
|
579
|
+
const universe = divisions.universe.value ? divisions.universe : {
|
|
580
|
+
value: "u",
|
|
581
|
+
parameters: {},
|
|
582
|
+
query: {}
|
|
583
|
+
};
|
|
584
|
+
const cluster = divisions.cluster.value ? divisions.cluster : {
|
|
585
|
+
value: "c",
|
|
586
|
+
parameters: {},
|
|
587
|
+
query: {}
|
|
588
|
+
};
|
|
589
|
+
const plane = divisions.plane;
|
|
590
|
+
const separator = "://";
|
|
591
|
+
if (!plane.value && route !== "/") {
|
|
592
|
+
const resolvers = [ protocolDivision, hostDivision.value, path.value ];
|
|
593
|
+
const absoluteRoute = resolvers.join(separator);
|
|
594
|
+
return {
|
|
595
|
+
protocol: protocolDivision,
|
|
596
|
+
host: hostDivision,
|
|
597
|
+
path: path,
|
|
598
|
+
space: space,
|
|
599
|
+
universe: universe,
|
|
600
|
+
cluster: cluster,
|
|
601
|
+
plane: plane,
|
|
602
|
+
route: absoluteRoute
|
|
603
|
+
};
|
|
604
|
+
}
|
|
605
|
+
[ protocolDivision, hostDivision.value, path.value, space.value, universe.value, cluster.value, cleanPathElement(plane.value) ];
|
|
606
|
+
return {
|
|
607
|
+
protocol: "",
|
|
608
|
+
host: "",
|
|
609
|
+
path: path,
|
|
610
|
+
space: "",
|
|
611
|
+
universe: "",
|
|
612
|
+
cluster: "",
|
|
613
|
+
plane: "",
|
|
614
|
+
route: route
|
|
615
|
+
};
|
|
616
|
+
};
|
|
617
|
+
|
|
618
|
+
const updateTreePlane$1 = (tree, page) => {
|
|
619
|
+
const updatedTree = tree.map((treePlane => {
|
|
620
|
+
if (treePlane.planeID === page.planeID) {
|
|
621
|
+
return Object.assign({}, page);
|
|
474
622
|
}
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
A[r] = temp;
|
|
480
|
-
temp = B[c];
|
|
481
|
-
B[c] = B[r];
|
|
482
|
-
B[r] = temp;
|
|
623
|
+
if (treePlane.children) {
|
|
624
|
+
return Object.assign(Object.assign({}, treePlane), {
|
|
625
|
+
children: updateTreePlane$1(treePlane.children, page)
|
|
626
|
+
});
|
|
483
627
|
}
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
Br[s] = Br[s] + f * Bc[s];
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
} else {
|
|
500
|
-
f = Ac[c];
|
|
501
|
-
for (s = c; s < cols; s++) {
|
|
502
|
-
Ar[s] = Ar[s] / f;
|
|
503
|
-
}
|
|
504
|
-
for (s = 0; s < cols; s++) {
|
|
505
|
-
Br[s] = Br[s] / f;
|
|
506
|
-
}
|
|
507
|
-
}
|
|
628
|
+
return treePlane;
|
|
629
|
+
}));
|
|
630
|
+
return updatedTree;
|
|
631
|
+
};
|
|
632
|
+
|
|
633
|
+
const updateTreeByPlaneIDWithLinkCoordinates = (tree, planeID, linkCoordinates) => {
|
|
634
|
+
const updatedTree = tree.map((treePlane => {
|
|
635
|
+
if (treePlane.planeID === planeID) {
|
|
636
|
+
const updatedPlane = Object.assign(Object.assign({}, treePlane), {
|
|
637
|
+
linkCoordinates: linkCoordinates
|
|
638
|
+
});
|
|
639
|
+
return updatedPlane;
|
|
508
640
|
}
|
|
509
|
-
|
|
510
|
-
|
|
641
|
+
if (treePlane.children) {
|
|
642
|
+
const updatedChildren = updateTreeByPlaneIDWithLinkCoordinates(treePlane.children, planeID, linkCoordinates);
|
|
643
|
+
const updatedPlane = Object.assign(Object.assign({}, treePlane), {
|
|
644
|
+
children: updatedChildren
|
|
645
|
+
});
|
|
646
|
+
return updatedPlane;
|
|
647
|
+
}
|
|
648
|
+
return treePlane;
|
|
649
|
+
}));
|
|
650
|
+
return updatedTree;
|
|
511
651
|
};
|
|
512
652
|
|
|
513
|
-
var index$
|
|
653
|
+
var index$i = Object.freeze({
|
|
514
654
|
__proto__: null,
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
multiplyMatricesArray: multiplyMatricesArray,
|
|
518
|
-
arrayToMatrix: arrayToMatrix,
|
|
519
|
-
matrixToArray: matrixToArray,
|
|
520
|
-
matrix3DToMatrix: matrix3DToMatrix,
|
|
521
|
-
printMatrix: printMatrix,
|
|
522
|
-
rotateXMatrix: rotateXMatrix,
|
|
523
|
-
rotateYMatrix: rotateYMatrix,
|
|
524
|
-
rotateZMatrix: rotateZMatrix,
|
|
525
|
-
translateMatrix: translateMatrix,
|
|
526
|
-
scaleMatrix: scaleMatrix,
|
|
527
|
-
rotationMatrixFromQuaternion: rotationMatrixFromQuaternion,
|
|
528
|
-
matrixToCSSMatrix: matrixToCSSMatrix,
|
|
529
|
-
identityMatrix: identityMatrix,
|
|
530
|
-
inverseMatrix: inverseMatrix
|
|
655
|
+
updateTreePlane: updateTreePlane$1,
|
|
656
|
+
updateTreeByPlaneIDWithLinkCoordinates: updateTreeByPlaneIDWithLinkCoordinates
|
|
531
657
|
});
|
|
532
658
|
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
}
|
|
539
|
-
return matrixValuesInt;
|
|
540
|
-
}
|
|
659
|
+
var index$h = Object.freeze({
|
|
660
|
+
__proto__: null,
|
|
661
|
+
configuration: index$k,
|
|
662
|
+
tree: index$i
|
|
663
|
+
});
|
|
541
664
|
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
const
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
for (let i = 0; i < 4; i++) {
|
|
551
|
-
valuesMatrix[i] /= scale;
|
|
552
|
-
}
|
|
665
|
+
const getWheelDirection = (deltas, ABSTHRESHOLD = 10, THRESHOLD = 0) => {
|
|
666
|
+
let direction = "left";
|
|
667
|
+
const wheelDeltaX = deltas.deltaX;
|
|
668
|
+
const wheelDeltaY = deltas.deltaY;
|
|
669
|
+
const absWheelDeltaX = Math.abs(wheelDeltaX);
|
|
670
|
+
const absWheelDeltaY = Math.abs(wheelDeltaY);
|
|
671
|
+
if (wheelDeltaX > THRESHOLD && absWheelDeltaY < ABSTHRESHOLD && absWheelDeltaX > absWheelDeltaY) {
|
|
672
|
+
direction = "left";
|
|
553
673
|
}
|
|
554
|
-
|
|
555
|
-
|
|
674
|
+
if (wheelDeltaX < THRESHOLD && absWheelDeltaY < ABSTHRESHOLD && absWheelDeltaX > absWheelDeltaY) {
|
|
675
|
+
direction = "right";
|
|
676
|
+
}
|
|
677
|
+
if (wheelDeltaY > THRESHOLD && absWheelDeltaX < ABSTHRESHOLD && absWheelDeltaY > absWheelDeltaX) {
|
|
678
|
+
direction = "up";
|
|
679
|
+
}
|
|
680
|
+
if (wheelDeltaY < THRESHOLD && absWheelDeltaX < ABSTHRESHOLD && absWheelDeltaY > absWheelDeltaX) {
|
|
681
|
+
direction = "down";
|
|
682
|
+
}
|
|
683
|
+
return direction;
|
|
684
|
+
};
|
|
685
|
+
|
|
686
|
+
var index$g = Object.freeze({
|
|
687
|
+
__proto__: null,
|
|
688
|
+
getWheelDirection: getWheelDirection
|
|
689
|
+
});
|
|
690
|
+
|
|
691
|
+
const degToRad = deg => deg * .01745329252;
|
|
692
|
+
|
|
693
|
+
const radToDeg = rad => rad * 57.2957795131;
|
|
694
|
+
|
|
695
|
+
const makeQuaternion = (x, y, z, w) => ({
|
|
696
|
+
x: x,
|
|
697
|
+
y: y,
|
|
698
|
+
z: z,
|
|
699
|
+
w: w
|
|
700
|
+
});
|
|
701
|
+
|
|
702
|
+
const zeroQuaternion = () => makeQuaternion(0, 0, 0, 0);
|
|
703
|
+
|
|
704
|
+
function inverseQuaternion(quaternion) {
|
|
705
|
+
return makeQuaternion(quaternion.x, quaternion.y, quaternion.z, -quaternion.w);
|
|
556
706
|
}
|
|
557
707
|
|
|
558
|
-
function
|
|
559
|
-
|
|
560
|
-
let translationMatrix;
|
|
561
|
-
if (valuesMatrix.length === 16) {
|
|
562
|
-
translationMatrix = getMatrixValues(matrix3d).slice(12, 15);
|
|
563
|
-
} else if (valuesMatrix.length === 6) {
|
|
564
|
-
translationMatrix = getMatrixValues(matrix3d).slice(4);
|
|
565
|
-
}
|
|
566
|
-
return translationMatrix;
|
|
708
|
+
function conjugateQuaternion(quaternion) {
|
|
709
|
+
return makeQuaternion(-quaternion.x, -quaternion.y, -quaternion.z, quaternion.w);
|
|
567
710
|
}
|
|
568
711
|
|
|
569
|
-
function
|
|
570
|
-
const
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
return scale;
|
|
712
|
+
function computeQuaternionFromEulers(alpha, beta, gamma, radians = true) {
|
|
713
|
+
const x = radians ? beta : degToRad(beta);
|
|
714
|
+
const y = radians ? gamma : degToRad(gamma);
|
|
715
|
+
const z = radians ? alpha : degToRad(alpha);
|
|
716
|
+
const cX = Math.cos(x / 2);
|
|
717
|
+
const cY = Math.cos(y / 2);
|
|
718
|
+
const cZ = Math.cos(z / 2);
|
|
719
|
+
const sX = Math.sin(x / 2);
|
|
720
|
+
const sY = Math.sin(y / 2);
|
|
721
|
+
const sZ = Math.sin(z / 2);
|
|
722
|
+
const xQ = sX * cY * cZ - cX * sY * sZ;
|
|
723
|
+
const yQ = cX * sY * cZ + sX * cY * sZ;
|
|
724
|
+
const zQ = cX * cY * sZ + sX * sY * cZ;
|
|
725
|
+
const wQ = cX * cY * cZ - sX * sY * sZ;
|
|
726
|
+
return makeQuaternion(xQ, yQ, zQ, wQ);
|
|
585
727
|
}
|
|
586
728
|
|
|
587
|
-
function
|
|
588
|
-
const
|
|
589
|
-
|
|
729
|
+
function quaternionFromAxisAngle(x, y, z, angle) {
|
|
730
|
+
const q = zeroQuaternion();
|
|
731
|
+
const halfAngle = angle / 2;
|
|
732
|
+
const sine = Math.sin(halfAngle);
|
|
733
|
+
q.x = x * sine;
|
|
734
|
+
q.y = y * sine;
|
|
735
|
+
q.z = z * sine;
|
|
736
|
+
q.w = Math.cos(halfAngle);
|
|
737
|
+
return q;
|
|
590
738
|
}
|
|
591
739
|
|
|
592
|
-
function
|
|
593
|
-
const
|
|
594
|
-
const
|
|
595
|
-
let
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
const
|
|
599
|
-
const
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
if (values.length === 16) {
|
|
606
|
-
const cosaX1 = values[5];
|
|
607
|
-
const sinaX3 = values[9];
|
|
608
|
-
if (sinaX3 <= 0) {
|
|
609
|
-
rotateX = Math.acos(cosaX1);
|
|
610
|
-
}
|
|
611
|
-
if (sinaX3 > 0) {
|
|
612
|
-
rotateX = 2 * pi - Math.acos(cosaX1);
|
|
613
|
-
}
|
|
614
|
-
const cosaY1 = values[0];
|
|
615
|
-
const sinaY2 = values[2];
|
|
616
|
-
if (sinaY2 <= 0) {
|
|
617
|
-
rotateY = Math.acos(cosaY1);
|
|
618
|
-
}
|
|
619
|
-
if (sinaY2 > 0) {
|
|
620
|
-
rotateY = 2 * pi - Math.acos(cosaY1);
|
|
621
|
-
}
|
|
622
|
-
rotateX = Math.atan2(values[9], values[5]);
|
|
623
|
-
rotateY = Math.atan2(values[2], values[0]);
|
|
740
|
+
function quaternionMultiply(quaternionArray) {
|
|
741
|
+
const firstQuaternion = quaternionArray[0];
|
|
742
|
+
const valueQuaternion = Object.assign({}, firstQuaternion);
|
|
743
|
+
for (let i = 1; i < quaternionArray.length; i++) {
|
|
744
|
+
const nextQuaternion = quaternionArray[i];
|
|
745
|
+
const w = valueQuaternion.w * nextQuaternion.w - valueQuaternion.x * nextQuaternion.x - valueQuaternion.y * nextQuaternion.y - valueQuaternion.z * nextQuaternion.z;
|
|
746
|
+
const x = valueQuaternion.x * nextQuaternion.w + valueQuaternion.w * nextQuaternion.x + valueQuaternion.y * nextQuaternion.z - valueQuaternion.z * nextQuaternion.y;
|
|
747
|
+
const y = valueQuaternion.y * nextQuaternion.w + valueQuaternion.w * nextQuaternion.y + valueQuaternion.z * nextQuaternion.x - valueQuaternion.x * nextQuaternion.z;
|
|
748
|
+
const z = valueQuaternion.z * nextQuaternion.w + valueQuaternion.w * nextQuaternion.z + valueQuaternion.x * nextQuaternion.y - valueQuaternion.y * nextQuaternion.x;
|
|
749
|
+
valueQuaternion.x = x;
|
|
750
|
+
valueQuaternion.y = y;
|
|
751
|
+
valueQuaternion.z = z;
|
|
752
|
+
valueQuaternion.w = w;
|
|
624
753
|
}
|
|
625
|
-
return
|
|
626
|
-
rotateX: rotateX,
|
|
627
|
-
rotateY: rotateY,
|
|
628
|
-
rotateZ: 0
|
|
629
|
-
};
|
|
754
|
+
return valueQuaternion;
|
|
630
755
|
}
|
|
631
756
|
|
|
632
|
-
function
|
|
633
|
-
const
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
translateX: translateX,
|
|
639
|
-
translateY: translateY,
|
|
640
|
-
translateZ: translateZ
|
|
757
|
+
function rotatePointViaQuaternion(pointRotate, quaternion) {
|
|
758
|
+
const temporaryQuaternion = {
|
|
759
|
+
x: pointRotate[0],
|
|
760
|
+
y: pointRotate[1],
|
|
761
|
+
z: pointRotate[2],
|
|
762
|
+
w: 0
|
|
641
763
|
};
|
|
764
|
+
const rotatedPointQuaternion = quaternionMultiply([ quaternion, temporaryQuaternion, conjugateQuaternion(quaternion) ]);
|
|
765
|
+
return rotatedPointQuaternion;
|
|
642
766
|
}
|
|
643
767
|
|
|
644
|
-
function
|
|
645
|
-
const
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
768
|
+
function makeRotationMatrixFromQuaternion(quaternion) {
|
|
769
|
+
const num = quaternion.x * 2;
|
|
770
|
+
const num2 = quaternion.y * 2;
|
|
771
|
+
const num3 = quaternion.z * 2;
|
|
772
|
+
const num4 = quaternion.x * num;
|
|
773
|
+
const num5 = quaternion.y * num2;
|
|
774
|
+
const num6 = quaternion.z * num3;
|
|
775
|
+
const num7 = quaternion.x * num2;
|
|
776
|
+
const num8 = quaternion.x * num3;
|
|
777
|
+
const num9 = quaternion.y * num3;
|
|
778
|
+
const num10 = quaternion.w * num;
|
|
779
|
+
const num11 = quaternion.w * num2;
|
|
780
|
+
const num12 = quaternion.w * num3;
|
|
781
|
+
return [ 1 - (num5 + num6), num7 - num12, num8 + num11, 0, num7 + num12, 1 - (num4 + num6), num9 - num10, 0, num8 - num11, num9 + num10, 1 - (num4 + num5), 0, 0, 0, 0, 1 ];
|
|
649
782
|
}
|
|
650
783
|
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
rotateY -= angleIncrement;
|
|
674
|
-
valRotationMatrix = rotateMatrix(rotateX, rotateY);
|
|
675
|
-
}
|
|
676
|
-
if (direction === "down") {
|
|
677
|
-
rotateY += angleIncrement;
|
|
678
|
-
valRotationMatrix = rotateMatrix(rotateX, rotateY);
|
|
679
|
-
}
|
|
680
|
-
const transformedMatrix3d = setTransform(valRotationMatrix, valTranslationMatrix, valScalationMatrix);
|
|
681
|
-
return transformedMatrix3d;
|
|
784
|
+
var index$f = Object.freeze({
|
|
785
|
+
__proto__: null,
|
|
786
|
+
degToRad: degToRad,
|
|
787
|
+
radToDeg: radToDeg,
|
|
788
|
+
makeQuaternion: makeQuaternion,
|
|
789
|
+
zeroQuaternion: zeroQuaternion,
|
|
790
|
+
inverseQuaternion: inverseQuaternion,
|
|
791
|
+
conjugateQuaternion: conjugateQuaternion,
|
|
792
|
+
computeQuaternionFromEulers: computeQuaternionFromEulers,
|
|
793
|
+
quaternionFromAxisAngle: quaternionFromAxisAngle,
|
|
794
|
+
quaternionMultiply: quaternionMultiply,
|
|
795
|
+
rotatePointViaQuaternion: rotatePointViaQuaternion,
|
|
796
|
+
makeRotationMatrixFromQuaternion: makeRotationMatrixFromQuaternion
|
|
797
|
+
});
|
|
798
|
+
|
|
799
|
+
function rotateMatrix(xAngle, yAngle, zAngle = 0) {
|
|
800
|
+
const xQuaternion = computeQuaternionFromEulers(0, xAngle, 0);
|
|
801
|
+
const yQuaternion = computeQuaternionFromEulers(0, 0, yAngle);
|
|
802
|
+
const zQuaternion = computeQuaternionFromEulers(zAngle, 0, 0);
|
|
803
|
+
const quartenionMultiplication = quaternionMultiply([ yQuaternion, xQuaternion, zQuaternion ]);
|
|
804
|
+
const rotationMatrix = makeRotationMatrixFromQuaternion(quartenionMultiplication);
|
|
805
|
+
return rotationMatrix;
|
|
682
806
|
}
|
|
683
807
|
|
|
684
|
-
function
|
|
685
|
-
|
|
686
|
-
const rotateX = transformRotate.rotateX;
|
|
687
|
-
const rotateY = transformRotate.rotateY;
|
|
688
|
-
const rotateZ = transformRotate.rotateZ;
|
|
689
|
-
const transformTranslate = getTransformTranslate(matrix3d);
|
|
690
|
-
let translateX = transformTranslate.translateX;
|
|
691
|
-
let translateY = transformTranslate.translateY;
|
|
692
|
-
const translateZ = transformTranslate.translateZ;
|
|
693
|
-
const scale = getTransformScale(matrix3d).scale;
|
|
694
|
-
const valRotationMatrix = rotateMatrix(rotateX, rotateY, rotateZ);
|
|
695
|
-
let valTranslationMatrix = translateMatrix$1(translateX, translateY, translateZ);
|
|
696
|
-
const valScalationMatrix = scaleMatrix$1(scale);
|
|
697
|
-
scale < .5 ? linearIncrement = 50 : linearIncrement = 30;
|
|
698
|
-
if (direction === "left") {
|
|
699
|
-
translateX += linearIncrement;
|
|
700
|
-
valTranslationMatrix = translateMatrix$1(translateX, translateY, translateZ);
|
|
701
|
-
}
|
|
702
|
-
if (direction === "right") {
|
|
703
|
-
translateX -= linearIncrement;
|
|
704
|
-
valTranslationMatrix = translateMatrix$1(translateX, translateY, translateZ);
|
|
705
|
-
}
|
|
706
|
-
if (direction === "up") {
|
|
707
|
-
translateY += linearIncrement;
|
|
708
|
-
valTranslationMatrix = translateMatrix$1(translateX, translateY, translateZ);
|
|
709
|
-
}
|
|
710
|
-
if (direction === "down") {
|
|
711
|
-
translateY -= linearIncrement;
|
|
712
|
-
valTranslationMatrix = translateMatrix$1(translateX, translateY, translateZ);
|
|
713
|
-
}
|
|
714
|
-
const transformedMatrix3d = setTransform(valRotationMatrix, valTranslationMatrix, valScalationMatrix);
|
|
715
|
-
return transformedMatrix3d;
|
|
808
|
+
function translateMatrix$1(x, y, z) {
|
|
809
|
+
return [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, x, y, z, 1 ];
|
|
716
810
|
}
|
|
717
811
|
|
|
718
|
-
function
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
const
|
|
724
|
-
const
|
|
725
|
-
const
|
|
726
|
-
const
|
|
727
|
-
|
|
728
|
-
const
|
|
729
|
-
const
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
812
|
+
function scaleMatrix$1(s) {
|
|
813
|
+
return [ s, 0, 0, 0, 0, s, 0, 0, 0, 0, s, 0, 0, 0, 0, 1 ];
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
function multiplyMatrices$1(matrixA, matrixB) {
|
|
817
|
+
const result = [];
|
|
818
|
+
const a00 = matrixA[0];
|
|
819
|
+
const a01 = matrixA[1];
|
|
820
|
+
const a02 = matrixA[2];
|
|
821
|
+
const a03 = matrixA[3];
|
|
822
|
+
const a10 = matrixA[4];
|
|
823
|
+
const a11 = matrixA[5];
|
|
824
|
+
const a12 = matrixA[6];
|
|
825
|
+
const a13 = matrixA[7];
|
|
826
|
+
const a20 = matrixA[8];
|
|
827
|
+
const a21 = matrixA[9];
|
|
828
|
+
const a22 = matrixA[10];
|
|
829
|
+
const a23 = matrixA[11];
|
|
830
|
+
const a30 = matrixA[12];
|
|
831
|
+
const a31 = matrixA[13];
|
|
832
|
+
const a32 = matrixA[14];
|
|
833
|
+
const a33 = matrixA[15];
|
|
834
|
+
let b0 = matrixB[0];
|
|
835
|
+
let b1 = matrixB[1];
|
|
836
|
+
let b2 = matrixB[2];
|
|
837
|
+
let b3 = matrixB[3];
|
|
838
|
+
result[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
839
|
+
result[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
840
|
+
result[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
841
|
+
result[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
842
|
+
b0 = matrixB[4];
|
|
843
|
+
b1 = matrixB[5];
|
|
844
|
+
b2 = matrixB[6];
|
|
845
|
+
b3 = matrixB[7];
|
|
846
|
+
result[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
847
|
+
result[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
848
|
+
result[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
849
|
+
result[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
850
|
+
b0 = matrixB[8];
|
|
851
|
+
b1 = matrixB[9];
|
|
852
|
+
b2 = matrixB[10];
|
|
853
|
+
b3 = matrixB[11];
|
|
854
|
+
result[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
855
|
+
result[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
856
|
+
result[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
857
|
+
result[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
858
|
+
b0 = matrixB[12];
|
|
859
|
+
b1 = matrixB[13];
|
|
860
|
+
b2 = matrixB[14];
|
|
861
|
+
b3 = matrixB[15];
|
|
862
|
+
result[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
863
|
+
result[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
864
|
+
result[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
865
|
+
result[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
866
|
+
return result;
|
|
747
867
|
}
|
|
748
868
|
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
getTransformRotate: getTransformRotate,
|
|
757
|
-
getTransformTranslate: getTransformTranslate,
|
|
758
|
-
getTransformScale: getTransformScale,
|
|
759
|
-
rotatePlurid: rotatePlurid,
|
|
760
|
-
translatePlurid: translatePlurid,
|
|
761
|
-
scalePlurid: scalePlurid
|
|
762
|
-
});
|
|
869
|
+
function multiplyArrayOfMatrices(matrices) {
|
|
870
|
+
let inputMatrix = matrices[0];
|
|
871
|
+
for (let i = 1; i < matrices.length; i++) {
|
|
872
|
+
inputMatrix = multiplyMatrices$1(inputMatrix, matrices[i]);
|
|
873
|
+
}
|
|
874
|
+
return inputMatrix;
|
|
875
|
+
}
|
|
763
876
|
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
matrix3d: index$d
|
|
768
|
-
});
|
|
877
|
+
function matrixArrayToCSSMatrix(array) {
|
|
878
|
+
return "matrix3d(" + array.join(",") + ")";
|
|
879
|
+
}
|
|
769
880
|
|
|
770
|
-
var index$
|
|
881
|
+
var index$e = Object.freeze({
|
|
771
882
|
__proto__: null,
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
883
|
+
rotateMatrix: rotateMatrix,
|
|
884
|
+
translateMatrix: translateMatrix$1,
|
|
885
|
+
scaleMatrix: scaleMatrix$1,
|
|
886
|
+
multiplyMatrices: multiplyMatrices$1,
|
|
887
|
+
multiplyArrayOfMatrices: multiplyArrayOfMatrices,
|
|
888
|
+
matrixArrayToCSSMatrix: matrixArrayToCSSMatrix
|
|
776
889
|
});
|
|
777
890
|
|
|
778
|
-
const
|
|
891
|
+
const getInitialMatrix = () => {
|
|
892
|
+
const matrix = [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ];
|
|
893
|
+
return matrix;
|
|
894
|
+
};
|
|
779
895
|
|
|
780
|
-
const
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
896
|
+
const multiplyMatrices = (m1, m2) => {
|
|
897
|
+
const result = [];
|
|
898
|
+
for (let i = 0; i < m1.length; i++) {
|
|
899
|
+
result[i] = [];
|
|
900
|
+
for (let j = 0; j < m2[0].length; j++) {
|
|
901
|
+
let sum = 0;
|
|
902
|
+
for (let k = 0; k < m1[0].length; k++) {
|
|
903
|
+
sum += m1[i][k] * m2[k][j];
|
|
904
|
+
}
|
|
905
|
+
result[i][j] = sum;
|
|
906
|
+
}
|
|
787
907
|
}
|
|
788
|
-
return
|
|
908
|
+
return result;
|
|
789
909
|
};
|
|
790
910
|
|
|
791
|
-
const
|
|
792
|
-
if (
|
|
793
|
-
|
|
794
|
-
return Object.assign({
|
|
795
|
-
value: value,
|
|
796
|
-
component: component
|
|
797
|
-
}, options);
|
|
911
|
+
const multiplyMatricesArray = matrices => {
|
|
912
|
+
if (matrices.length < 2) {
|
|
913
|
+
throw new Error("invalid number of matrices");
|
|
798
914
|
}
|
|
799
|
-
|
|
915
|
+
const first = matrices[0];
|
|
916
|
+
let result = first;
|
|
917
|
+
for (const [index, matrix] of matrices.entries()) {
|
|
918
|
+
if (index === 0) {
|
|
919
|
+
continue;
|
|
920
|
+
}
|
|
921
|
+
result = multiplyMatrices(result, matrix);
|
|
922
|
+
}
|
|
923
|
+
return result;
|
|
800
924
|
};
|
|
801
925
|
|
|
802
|
-
const
|
|
803
|
-
|
|
804
|
-
|
|
926
|
+
const arrayToMatrix = array => {
|
|
927
|
+
const matrix = [];
|
|
928
|
+
for (let i = 0; i < array.length; i += 4) {
|
|
929
|
+
const row = [];
|
|
930
|
+
row.push(array[i]);
|
|
931
|
+
row.push(array[i + 1]);
|
|
932
|
+
row.push(array[i + 2]);
|
|
933
|
+
row.push(array[i + 3]);
|
|
934
|
+
matrix.push(row);
|
|
805
935
|
}
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
936
|
+
return matrix;
|
|
937
|
+
};
|
|
938
|
+
|
|
939
|
+
const matrixToArray = matrix => matrix.flat();
|
|
940
|
+
|
|
941
|
+
const matrix3DToMatrix = value => {
|
|
942
|
+
const values = value.replace("matrix3d(", "").replace(")", "").split(",").map((val => parseFloat(val)));
|
|
943
|
+
return arrayToMatrix(values);
|
|
944
|
+
};
|
|
945
|
+
|
|
946
|
+
const printMatrix = (matrix, name) => {
|
|
947
|
+
const normalize = value => {
|
|
948
|
+
if (value === 1 || value === 0) {
|
|
949
|
+
return value + " ";
|
|
950
|
+
}
|
|
951
|
+
if (value > 0) {
|
|
952
|
+
return value.toFixed(2) + " ";
|
|
953
|
+
}
|
|
954
|
+
return value.toFixed(2) + " ";
|
|
955
|
+
};
|
|
956
|
+
console.log("matrix", name + ":");
|
|
957
|
+
for (const row of matrix) {
|
|
958
|
+
console.log(normalize(row[0]), normalize(row[1]), normalize(row[2]), normalize(row[3]));
|
|
809
959
|
}
|
|
810
|
-
|
|
960
|
+
console.log(`matrix3d(${matrix.flat().join(",")})`);
|
|
961
|
+
console.log();
|
|
811
962
|
};
|
|
812
963
|
|
|
813
|
-
const
|
|
814
|
-
const
|
|
815
|
-
const
|
|
816
|
-
const
|
|
817
|
-
const
|
|
818
|
-
return
|
|
964
|
+
const rotateXMatrix = angle => {
|
|
965
|
+
const x = Math.cos(angle);
|
|
966
|
+
const y = -1 * Math.sin(angle);
|
|
967
|
+
const z = Math.sin(angle);
|
|
968
|
+
const m = [ [ 1, 0, 0, 0 ], [ 0, x, y, 0 ], [ 0, z, x, 0 ], [ 0, 0, 0, 1 ] ];
|
|
969
|
+
return m;
|
|
819
970
|
};
|
|
820
971
|
|
|
821
|
-
const
|
|
822
|
-
const
|
|
823
|
-
const
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
972
|
+
const rotateYMatrix = angle => {
|
|
973
|
+
const x = Math.cos(angle);
|
|
974
|
+
const y = -1 * Math.sin(angle);
|
|
975
|
+
const z = Math.sin(angle);
|
|
976
|
+
const m = [ [ x, 0, z, 0 ], [ 0, 1, 0, 0 ], [ y, 0, x, 0 ], [ 0, 0, 0, 1 ] ];
|
|
977
|
+
return m;
|
|
978
|
+
};
|
|
979
|
+
|
|
980
|
+
const rotateZMatrix = angle => {
|
|
981
|
+
const x = Math.cos(angle);
|
|
982
|
+
const y = -1 * Math.sin(angle);
|
|
983
|
+
const z = Math.sin(angle);
|
|
984
|
+
const m = [ [ x, y, 0, 0 ], [ z, x, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ];
|
|
985
|
+
return m;
|
|
986
|
+
};
|
|
987
|
+
|
|
988
|
+
const translateMatrix = (x = 0, y = 0, z = 0) => {
|
|
989
|
+
const m = [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ x, y, z, 1 ] ];
|
|
990
|
+
return m;
|
|
991
|
+
};
|
|
992
|
+
|
|
993
|
+
const scaleMatrix = s => [ [ s, 0, 0, 0 ], [ 0, s, 0, 0 ], [ 0, 0, s, 0 ], [ 0, 0, 0, 1 ] ];
|
|
994
|
+
|
|
995
|
+
function rotationMatrixFromQuaternion(quaternion) {
|
|
996
|
+
const num = quaternion.x * 2;
|
|
997
|
+
const num2 = quaternion.y * 2;
|
|
998
|
+
const num3 = quaternion.z * 2;
|
|
999
|
+
const num4 = quaternion.x * num;
|
|
1000
|
+
const num5 = quaternion.y * num2;
|
|
1001
|
+
const num6 = quaternion.z * num3;
|
|
1002
|
+
const num7 = quaternion.x * num2;
|
|
1003
|
+
const num8 = quaternion.x * num3;
|
|
1004
|
+
const num9 = quaternion.y * num3;
|
|
1005
|
+
const num10 = quaternion.w * num;
|
|
1006
|
+
const num11 = quaternion.w * num2;
|
|
1007
|
+
const num12 = quaternion.w * num3;
|
|
1008
|
+
return [ [ 1 - (num5 + num6), num7 - num12, num8 + num11, 0 ], [ num7 + num12, 1 - (num4 + num6), num9 - num10, 0 ], [ num8 - num11, num9 + num10, 1 - (num4 + num5), 0 ], [ 0, 0, 0, 1 ] ];
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
const matrixToCSSMatrix = matrix => {
|
|
1012
|
+
const value = matrix.flat().join(",");
|
|
1013
|
+
return `matrix3d(${value})`;
|
|
1014
|
+
};
|
|
1015
|
+
|
|
1016
|
+
const identityMatrix = () => {
|
|
1017
|
+
const matrix = [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ];
|
|
1018
|
+
return matrix;
|
|
1019
|
+
};
|
|
1020
|
+
|
|
1021
|
+
const inverseMatrix = matrix => {
|
|
1022
|
+
const cols = 4;
|
|
1023
|
+
const rows = 4;
|
|
1024
|
+
const A = [ ...matrix ];
|
|
1025
|
+
const B = identityMatrix();
|
|
1026
|
+
let r;
|
|
1027
|
+
let s;
|
|
1028
|
+
let f;
|
|
1029
|
+
let temp;
|
|
1030
|
+
for (let c = 0; c < cols; c++) {
|
|
1031
|
+
let ABig = Math.abs(A[c][c]);
|
|
1032
|
+
let rBig = c;
|
|
1033
|
+
r = c + 1;
|
|
1034
|
+
while (r < rows) {
|
|
1035
|
+
if (Math.abs(A[r][c]) > ABig) {
|
|
1036
|
+
ABig = Math.abs(A[r][c]);
|
|
1037
|
+
rBig = r;
|
|
1038
|
+
}
|
|
1039
|
+
r++;
|
|
1040
|
+
}
|
|
1041
|
+
if (ABig === 0) {
|
|
1042
|
+
throw Error("Cannot calculate inverse, determinant is zero");
|
|
1043
|
+
}
|
|
1044
|
+
r = rBig;
|
|
1045
|
+
if (r !== c) {
|
|
1046
|
+
temp = A[c];
|
|
1047
|
+
A[c] = A[r];
|
|
1048
|
+
A[r] = temp;
|
|
1049
|
+
temp = B[c];
|
|
1050
|
+
B[c] = B[r];
|
|
1051
|
+
B[r] = temp;
|
|
1052
|
+
}
|
|
1053
|
+
const Ac = A[c];
|
|
1054
|
+
const Bc = B[c];
|
|
1055
|
+
for (r = 0; r < rows; r++) {
|
|
1056
|
+
const Ar = A[r];
|
|
1057
|
+
const Br = B[r];
|
|
1058
|
+
if (r !== c) {
|
|
1059
|
+
if (Ar[c] !== 0) {
|
|
1060
|
+
f = -Ar[c] / Ac[c];
|
|
1061
|
+
for (s = c; s < cols; s++) {
|
|
1062
|
+
Ar[s] = Ar[s] + f * Ac[s];
|
|
1063
|
+
}
|
|
1064
|
+
for (s = 0; s < cols; s++) {
|
|
1065
|
+
Br[s] = Br[s] + f * Bc[s];
|
|
1066
|
+
}
|
|
1067
|
+
}
|
|
1068
|
+
} else {
|
|
1069
|
+
f = Ac[c];
|
|
1070
|
+
for (s = c; s < cols; s++) {
|
|
1071
|
+
Ar[s] = Ar[s] / f;
|
|
1072
|
+
}
|
|
1073
|
+
for (s = 0; s < cols; s++) {
|
|
1074
|
+
Br[s] = Br[s] / f;
|
|
1075
|
+
}
|
|
1076
|
+
}
|
|
829
1077
|
}
|
|
830
|
-
}));
|
|
831
|
-
const {locationElements: locationElements, comparingPath: comparingPath} = computeComparingPath(location, parameters);
|
|
832
|
-
if (comparingPath !== route) {
|
|
833
|
-
return {
|
|
834
|
-
match: false,
|
|
835
|
-
parameters: {},
|
|
836
|
-
elements: locationElements
|
|
837
|
-
};
|
|
838
1078
|
}
|
|
839
|
-
|
|
840
|
-
return {
|
|
841
|
-
match: true,
|
|
842
|
-
parameters: parametersValues,
|
|
843
|
-
elements: locationElements
|
|
844
|
-
};
|
|
1079
|
+
return B;
|
|
845
1080
|
};
|
|
846
1081
|
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
1082
|
+
var index$d = Object.freeze({
|
|
1083
|
+
__proto__: null,
|
|
1084
|
+
getInitialMatrix: getInitialMatrix,
|
|
1085
|
+
multiplyMatrices: multiplyMatrices,
|
|
1086
|
+
multiplyMatricesArray: multiplyMatricesArray,
|
|
1087
|
+
arrayToMatrix: arrayToMatrix,
|
|
1088
|
+
matrixToArray: matrixToArray,
|
|
1089
|
+
matrix3DToMatrix: matrix3DToMatrix,
|
|
1090
|
+
printMatrix: printMatrix,
|
|
1091
|
+
rotateXMatrix: rotateXMatrix,
|
|
1092
|
+
rotateYMatrix: rotateYMatrix,
|
|
1093
|
+
rotateZMatrix: rotateZMatrix,
|
|
1094
|
+
translateMatrix: translateMatrix,
|
|
1095
|
+
scaleMatrix: scaleMatrix,
|
|
1096
|
+
rotationMatrixFromQuaternion: rotationMatrixFromQuaternion,
|
|
1097
|
+
matrixToCSSMatrix: matrixToCSSMatrix,
|
|
1098
|
+
identityMatrix: identityMatrix,
|
|
1099
|
+
inverseMatrix: inverseMatrix
|
|
1100
|
+
});
|
|
857
1101
|
|
|
858
|
-
|
|
859
|
-
const
|
|
860
|
-
const
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
if (parameters[index]) {
|
|
864
|
-
comparingPathElements[index] = parameters[index];
|
|
865
|
-
}
|
|
1102
|
+
function getMatrixValues(matrix3d) {
|
|
1103
|
+
const matrixValues = matrix3d.split("(")[1].split(")")[0].split(",");
|
|
1104
|
+
const matrixValuesInt = [];
|
|
1105
|
+
for (let i = 0; i < matrixValues.length; i++) {
|
|
1106
|
+
matrixValuesInt[i] = parseFloat(matrixValues[i]);
|
|
866
1107
|
}
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
locationElements: locationElements,
|
|
870
|
-
comparingPath: comparingPath
|
|
871
|
-
};
|
|
872
|
-
};
|
|
873
|
-
|
|
874
|
-
const splitPath = path => path.split("/").filter((i => i !== ""));
|
|
1108
|
+
return matrixValuesInt;
|
|
1109
|
+
}
|
|
875
1110
|
|
|
876
|
-
|
|
877
|
-
const
|
|
878
|
-
const
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
for (
|
|
885
|
-
|
|
886
|
-
const id = queryValue[0];
|
|
887
|
-
const value = decodeURIComponent(queryValue[1]);
|
|
888
|
-
queryValues[id] = value;
|
|
1111
|
+
function getRotationMatrix(matrix3d) {
|
|
1112
|
+
const valuesMatrix = getMatrixValues(matrix3d);
|
|
1113
|
+
const scale = getScalationValue(matrix3d);
|
|
1114
|
+
if (valuesMatrix.length === 16) {
|
|
1115
|
+
for (let i = 0; i < 11; i++) {
|
|
1116
|
+
valuesMatrix[i] /= scale;
|
|
1117
|
+
}
|
|
1118
|
+
} else if (valuesMatrix.length === 6) {
|
|
1119
|
+
for (let i = 0; i < 4; i++) {
|
|
1120
|
+
valuesMatrix[i] /= scale;
|
|
889
1121
|
}
|
|
890
|
-
return queryValues;
|
|
891
|
-
} else {
|
|
892
|
-
return {};
|
|
893
1122
|
}
|
|
894
|
-
|
|
1123
|
+
const rotationMatrix = valuesMatrix;
|
|
1124
|
+
return rotationMatrix;
|
|
1125
|
+
}
|
|
895
1126
|
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
const split = location.split("#:~:");
|
|
904
|
-
const fragmentsValues = split[1];
|
|
905
|
-
if (!fragmentsValues) {
|
|
906
|
-
return {
|
|
907
|
-
texts: [],
|
|
908
|
-
elements: []
|
|
909
|
-
};
|
|
1127
|
+
function getTranslationMatrix(matrix3d) {
|
|
1128
|
+
const valuesMatrix = getMatrixValues(matrix3d);
|
|
1129
|
+
let translationMatrix;
|
|
1130
|
+
if (valuesMatrix.length === 16) {
|
|
1131
|
+
translationMatrix = getMatrixValues(matrix3d).slice(12, 15);
|
|
1132
|
+
} else if (valuesMatrix.length === 6) {
|
|
1133
|
+
translationMatrix = getMatrixValues(matrix3d).slice(4);
|
|
910
1134
|
}
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
const elementFragments = [];
|
|
914
|
-
for (const item of fragmentItems) {
|
|
915
|
-
const parsedFragment = parseFragment(item);
|
|
916
|
-
if (parsedFragment) {
|
|
917
|
-
switch (parsedFragment.type) {
|
|
918
|
-
case "text":
|
|
919
|
-
textFragments.push(parsedFragment);
|
|
920
|
-
break;
|
|
1135
|
+
return translationMatrix;
|
|
1136
|
+
}
|
|
921
1137
|
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
1138
|
+
function getScalationValue(matrix3d) {
|
|
1139
|
+
const valuesMatrix = getMatrixValues(matrix3d);
|
|
1140
|
+
let temp = 0;
|
|
1141
|
+
let scale;
|
|
1142
|
+
if (valuesMatrix.length === 16) {
|
|
1143
|
+
const scaleMatrix = getMatrixValues(matrix3d).slice(0, 4);
|
|
1144
|
+
scale = 0;
|
|
1145
|
+
for (const el of scaleMatrix) {
|
|
1146
|
+
scale += parseFloat(el) * parseFloat(el);
|
|
926
1147
|
}
|
|
1148
|
+
scale = parseFloat(Math.sqrt(scale).toPrecision(4));
|
|
1149
|
+
} else if (valuesMatrix.length === 6) {
|
|
1150
|
+
temp = valuesMatrix[0] * valuesMatrix[0] + valuesMatrix[1] * valuesMatrix[1];
|
|
1151
|
+
scale = parseFloat(Math.sqrt(temp).toPrecision(4));
|
|
927
1152
|
}
|
|
928
|
-
return
|
|
929
|
-
|
|
930
|
-
elements: elementFragments
|
|
931
|
-
};
|
|
932
|
-
};
|
|
1153
|
+
return scale;
|
|
1154
|
+
}
|
|
933
1155
|
|
|
934
|
-
|
|
935
|
-
const
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
switch (fragmentType.toLowerCase()) {
|
|
939
|
-
case "text":
|
|
940
|
-
{
|
|
941
|
-
const textValues = fragmentValues.split(",");
|
|
942
|
-
const textStart = textValues[0];
|
|
943
|
-
const textEnd = textValues[1];
|
|
944
|
-
const textOccurence = extractOccurence(textValues[2]);
|
|
945
|
-
if (!textStart) {
|
|
946
|
-
return;
|
|
947
|
-
}
|
|
948
|
-
return {
|
|
949
|
-
type: "text",
|
|
950
|
-
start: textStart,
|
|
951
|
-
end: textEnd || "",
|
|
952
|
-
occurence: textOccurence
|
|
953
|
-
};
|
|
954
|
-
}
|
|
1156
|
+
function setTransform(rotationMatrix, translationMatrix, scalationMatrix) {
|
|
1157
|
+
const transformMatrix = multiplyArrayOfMatrices([ translationMatrix, rotationMatrix, scalationMatrix ]);
|
|
1158
|
+
return matrixArrayToCSSMatrix(transformMatrix);
|
|
1159
|
+
}
|
|
955
1160
|
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
occurence: elementOccurence
|
|
968
|
-
};
|
|
1161
|
+
function getTransformRotate(matrix3d) {
|
|
1162
|
+
const pi = Math.PI;
|
|
1163
|
+
const values = getRotationMatrix(matrix3d);
|
|
1164
|
+
let rotateX = 0;
|
|
1165
|
+
let rotateY = 0;
|
|
1166
|
+
if (values.length === 6) {
|
|
1167
|
+
const cosa = values[0];
|
|
1168
|
+
const sina = values[1];
|
|
1169
|
+
if (cosa === 1 && sina === 0) {
|
|
1170
|
+
rotateX = Math.asin(sina);
|
|
1171
|
+
rotateY = Math.acos(cosa);
|
|
969
1172
|
}
|
|
970
1173
|
}
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
const stringRemoveTrailing = (value, trail) => {
|
|
991
|
-
if (value.endsWith(trail)) {
|
|
992
|
-
value = value.slice(0, value.length - trail.length);
|
|
1174
|
+
if (values.length === 16) {
|
|
1175
|
+
const cosaX1 = values[5];
|
|
1176
|
+
const sinaX3 = values[9];
|
|
1177
|
+
if (sinaX3 <= 0) {
|
|
1178
|
+
rotateX = Math.acos(cosaX1);
|
|
1179
|
+
}
|
|
1180
|
+
if (sinaX3 > 0) {
|
|
1181
|
+
rotateX = 2 * pi - Math.acos(cosaX1);
|
|
1182
|
+
}
|
|
1183
|
+
const cosaY1 = values[0];
|
|
1184
|
+
const sinaY2 = values[2];
|
|
1185
|
+
if (sinaY2 <= 0) {
|
|
1186
|
+
rotateY = Math.acos(cosaY1);
|
|
1187
|
+
}
|
|
1188
|
+
if (sinaY2 > 0) {
|
|
1189
|
+
rotateY = 2 * pi - Math.acos(cosaY1);
|
|
1190
|
+
}
|
|
1191
|
+
rotateX = Math.atan2(values[9], values[5]);
|
|
1192
|
+
rotateY = Math.atan2(values[2], values[0]);
|
|
993
1193
|
}
|
|
994
|
-
return
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
value = stringInsertInitial(value, PATH_SEPARATOR);
|
|
1001
|
-
value = stringRemoveTrailing(value, PATH_SEPARATOR);
|
|
1002
|
-
return value;
|
|
1003
|
-
};
|
|
1194
|
+
return {
|
|
1195
|
+
rotateX: rotateX,
|
|
1196
|
+
rotateY: rotateY,
|
|
1197
|
+
rotateZ: 0
|
|
1198
|
+
};
|
|
1199
|
+
}
|
|
1004
1200
|
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
const
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
}
|
|
1017
|
-
origin = stringRemoveTrailing(origin, "/");
|
|
1018
|
-
const absolutePlane = isAbsolutePlane(plane);
|
|
1019
|
-
const path = route && route !== "/" ? absolutePlane ? cleanupPath(cleanPlane) : cleanupPath(route) + cleanupPath(cleanPlane) : cleanupPath(cleanPlane);
|
|
1020
|
-
const planeAddress = protocols.plurid + origin + path;
|
|
1021
|
-
return planeAddress;
|
|
1022
|
-
};
|
|
1201
|
+
function getTransformTranslate(matrix3d) {
|
|
1202
|
+
const values = getTranslationMatrix(matrix3d);
|
|
1203
|
+
const translateX = values[0];
|
|
1204
|
+
const translateY = values[1];
|
|
1205
|
+
const translateZ = values[2];
|
|
1206
|
+
return {
|
|
1207
|
+
translateX: translateX,
|
|
1208
|
+
translateY: translateY,
|
|
1209
|
+
translateZ: translateZ
|
|
1210
|
+
};
|
|
1211
|
+
}
|
|
1023
1212
|
|
|
1024
|
-
|
|
1213
|
+
function getTransformScale(matrix3d) {
|
|
1214
|
+
const scale = getScalationValue(matrix3d);
|
|
1215
|
+
return {
|
|
1216
|
+
scale: scale
|
|
1217
|
+
};
|
|
1218
|
+
}
|
|
1025
1219
|
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1220
|
+
function rotatePlurid(matrix3d, direction = "", angleIncrement = .07) {
|
|
1221
|
+
const transformRotate = getTransformRotate(matrix3d);
|
|
1222
|
+
const rotateX = transformRotate.rotateX;
|
|
1223
|
+
let rotateY = transformRotate.rotateY;
|
|
1224
|
+
const rotateZ = transformRotate.rotateZ;
|
|
1225
|
+
const transformTranslate = getTransformTranslate(matrix3d);
|
|
1226
|
+
const translateX = transformTranslate.translateX;
|
|
1227
|
+
const translateY = transformTranslate.translateY;
|
|
1228
|
+
const translateZ = transformTranslate.translateZ;
|
|
1229
|
+
const scale = getTransformScale(matrix3d).scale;
|
|
1230
|
+
let valRotationMatrix = rotateMatrix(rotateX, rotateY, rotateZ);
|
|
1231
|
+
const valTranslationMatrix = translateMatrix$1(translateX, translateY, translateZ);
|
|
1232
|
+
const valScalationMatrix = scaleMatrix$1(scale);
|
|
1233
|
+
if (direction === "left") {
|
|
1234
|
+
rotateY -= angleIncrement;
|
|
1235
|
+
valRotationMatrix = rotateMatrix(rotateX, rotateY);
|
|
1033
1236
|
}
|
|
1034
|
-
if (
|
|
1035
|
-
|
|
1237
|
+
if (direction === "right") {
|
|
1238
|
+
rotateY += angleIncrement;
|
|
1239
|
+
valRotationMatrix = rotateMatrix(rotateX, rotateY);
|
|
1036
1240
|
}
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
const removeTrailingSlash = value => {
|
|
1041
|
-
if (value.endsWith("/") && value.length > 1) {
|
|
1042
|
-
return value.slice(0, value.length - 1);
|
|
1241
|
+
if (direction === "up") {
|
|
1242
|
+
rotateY -= angleIncrement;
|
|
1243
|
+
valRotationMatrix = rotateMatrix(rotateX, rotateY);
|
|
1043
1244
|
}
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
const cleanPathValue = value => {
|
|
1048
|
-
const queryStart = value.indexOf("?");
|
|
1049
|
-
if (queryStart < 0) {
|
|
1050
|
-
return removeTrailingSlash(value);
|
|
1245
|
+
if (direction === "down") {
|
|
1246
|
+
rotateY += angleIncrement;
|
|
1247
|
+
valRotationMatrix = rotateMatrix(rotateX, rotateY);
|
|
1051
1248
|
}
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
const checkParameterLength = (parameter, length, compareType) => {
|
|
1056
|
-
const parameterLength = parameter.length;
|
|
1057
|
-
switch (compareType) {
|
|
1058
|
-
case compareTypes.equal:
|
|
1059
|
-
return parameterLength === length;
|
|
1060
|
-
|
|
1061
|
-
case compareTypes.equalLessThan:
|
|
1062
|
-
return parameterLength <= length;
|
|
1063
|
-
|
|
1064
|
-
case compareTypes.lessThan:
|
|
1065
|
-
return parameterLength < length;
|
|
1066
|
-
|
|
1067
|
-
case compareTypes.equalGreaterThan:
|
|
1068
|
-
return parameterLength >= length;
|
|
1069
|
-
|
|
1070
|
-
case compareTypes.greaterThan:
|
|
1071
|
-
return parameterLength > length;
|
|
1249
|
+
const transformedMatrix3d = setTransform(valRotationMatrix, valTranslationMatrix, valScalationMatrix);
|
|
1250
|
+
return transformedMatrix3d;
|
|
1251
|
+
}
|
|
1072
1252
|
|
|
1073
|
-
|
|
1074
|
-
|
|
1253
|
+
function translatePlurid(matrix3d, direction = "", linearIncrement = 50) {
|
|
1254
|
+
const transformRotate = getTransformRotate(matrix3d);
|
|
1255
|
+
const rotateX = transformRotate.rotateX;
|
|
1256
|
+
const rotateY = transformRotate.rotateY;
|
|
1257
|
+
const rotateZ = transformRotate.rotateZ;
|
|
1258
|
+
const transformTranslate = getTransformTranslate(matrix3d);
|
|
1259
|
+
let translateX = transformTranslate.translateX;
|
|
1260
|
+
let translateY = transformTranslate.translateY;
|
|
1261
|
+
const translateZ = transformTranslate.translateZ;
|
|
1262
|
+
const scale = getTransformScale(matrix3d).scale;
|
|
1263
|
+
const valRotationMatrix = rotateMatrix(rotateX, rotateY, rotateZ);
|
|
1264
|
+
let valTranslationMatrix = translateMatrix$1(translateX, translateY, translateZ);
|
|
1265
|
+
const valScalationMatrix = scaleMatrix$1(scale);
|
|
1266
|
+
scale < .5 ? linearIncrement = 50 : linearIncrement = 30;
|
|
1267
|
+
if (direction === "left") {
|
|
1268
|
+
translateX += linearIncrement;
|
|
1269
|
+
valTranslationMatrix = translateMatrix$1(translateX, translateY, translateZ);
|
|
1075
1270
|
}
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
if (validationParameters) {
|
|
1080
|
-
for (const [parameterKey, parameterData] of Object.entries(validationParameters)) {
|
|
1081
|
-
const {length: length, lengthType: lengthType, startsWith: startsWith, endsWith: endsWith, includes: includes} = parameterData;
|
|
1082
|
-
const paramaterValue = parameters[parameterKey];
|
|
1083
|
-
if (!paramaterValue) {
|
|
1084
|
-
return false;
|
|
1085
|
-
}
|
|
1086
|
-
if (startsWith && !paramaterValue.startsWith(startsWith)) {
|
|
1087
|
-
return false;
|
|
1088
|
-
}
|
|
1089
|
-
if (endsWith && !paramaterValue.endsWith(endsWith)) {
|
|
1090
|
-
return false;
|
|
1091
|
-
}
|
|
1092
|
-
if (includes && !includes.includes(paramaterValue)) {
|
|
1093
|
-
return false;
|
|
1094
|
-
}
|
|
1095
|
-
if (length) {
|
|
1096
|
-
const validLength = checkParameterLength(paramaterValue, length, lengthType);
|
|
1097
|
-
return validLength;
|
|
1098
|
-
}
|
|
1099
|
-
}
|
|
1271
|
+
if (direction === "right") {
|
|
1272
|
+
translateX -= linearIncrement;
|
|
1273
|
+
valTranslationMatrix = translateMatrix$1(translateX, translateY, translateZ);
|
|
1100
1274
|
}
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
const cleanPathElement = path => {
|
|
1105
|
-
if (path[0] === "/") {
|
|
1106
|
-
return path.slice(1);
|
|
1275
|
+
if (direction === "up") {
|
|
1276
|
+
translateY += linearIncrement;
|
|
1277
|
+
valTranslationMatrix = translateMatrix$1(translateX, translateY, translateZ);
|
|
1107
1278
|
}
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
var index$a = Object.freeze({
|
|
1112
|
-
__proto__: null,
|
|
1113
|
-
cleanPathElement: cleanPathElement
|
|
1114
|
-
});
|
|
1115
|
-
|
|
1116
|
-
const mapPathsToRoutes = (paths, view) => {
|
|
1117
|
-
const routes = [];
|
|
1118
|
-
for (const [key, path] of Object.entries(paths)) {
|
|
1119
|
-
const pathView = view[key];
|
|
1120
|
-
if (pathView) {
|
|
1121
|
-
const route = {
|
|
1122
|
-
value: ""
|
|
1123
|
-
};
|
|
1124
|
-
routes.push(route);
|
|
1125
|
-
}
|
|
1279
|
+
if (direction === "down") {
|
|
1280
|
+
translateY -= linearIncrement;
|
|
1281
|
+
valTranslationMatrix = translateMatrix$1(translateX, translateY, translateZ);
|
|
1126
1282
|
}
|
|
1127
|
-
|
|
1128
|
-
|
|
1283
|
+
const transformedMatrix3d = setTransform(valRotationMatrix, valTranslationMatrix, valScalationMatrix);
|
|
1284
|
+
return transformedMatrix3d;
|
|
1285
|
+
}
|
|
1129
1286
|
|
|
1130
|
-
|
|
1131
|
-
const
|
|
1132
|
-
const
|
|
1133
|
-
const
|
|
1134
|
-
|
|
1135
|
-
const
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
query: {}
|
|
1148
|
-
};
|
|
1149
|
-
const universe = {
|
|
1150
|
-
value: "",
|
|
1151
|
-
parameters: {},
|
|
1152
|
-
query: {}
|
|
1153
|
-
};
|
|
1154
|
-
const cluster = {
|
|
1155
|
-
value: "",
|
|
1156
|
-
parameters: {},
|
|
1157
|
-
query: {}
|
|
1158
|
-
};
|
|
1159
|
-
const plane = {
|
|
1160
|
-
value: "",
|
|
1161
|
-
parameters: {},
|
|
1162
|
-
query: {},
|
|
1163
|
-
fragments: {
|
|
1164
|
-
texts: [],
|
|
1165
|
-
elements: []
|
|
1287
|
+
function scalePlurid(matrix3d, direction = "", scaleIncrement = .05) {
|
|
1288
|
+
const transformRotate = getTransformRotate(matrix3d);
|
|
1289
|
+
const rotateX = transformRotate.rotateX;
|
|
1290
|
+
const rotateY = transformRotate.rotateY;
|
|
1291
|
+
const rotateZ = transformRotate.rotateZ;
|
|
1292
|
+
const transformTranslate = getTransformTranslate(matrix3d);
|
|
1293
|
+
const translateX = transformTranslate.translateX;
|
|
1294
|
+
const translateY = transformTranslate.translateY;
|
|
1295
|
+
const translateZ = transformTranslate.translateZ;
|
|
1296
|
+
let scale = getTransformScale(matrix3d).scale;
|
|
1297
|
+
const valRotationMatrix = rotateMatrix(rotateX, rotateY, rotateZ);
|
|
1298
|
+
const valTranslationMatrix = translateMatrix$1(translateX, translateY, translateZ);
|
|
1299
|
+
let valScalationMatrix = scaleMatrix$1(scale);
|
|
1300
|
+
if (direction === "up") {
|
|
1301
|
+
scale -= scaleIncrement;
|
|
1302
|
+
if (scale < .1) {
|
|
1303
|
+
scale = .1;
|
|
1166
1304
|
}
|
|
1167
|
-
|
|
1168
|
-
const valid = false;
|
|
1169
|
-
if (split.length === 0 || split.length > 7) {
|
|
1170
|
-
const url = {
|
|
1171
|
-
protocol: {
|
|
1172
|
-
value: protocol,
|
|
1173
|
-
secure: true
|
|
1174
|
-
},
|
|
1175
|
-
host: host,
|
|
1176
|
-
path: path,
|
|
1177
|
-
space: space,
|
|
1178
|
-
universe: universe,
|
|
1179
|
-
cluster: cluster,
|
|
1180
|
-
plane: plane,
|
|
1181
|
-
valid: valid
|
|
1182
|
-
};
|
|
1183
|
-
return url;
|
|
1305
|
+
valScalationMatrix = scaleMatrix$1(scale);
|
|
1184
1306
|
}
|
|
1185
|
-
if (
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
path.value = routeSplit[0];
|
|
1190
|
-
break;
|
|
1191
|
-
|
|
1192
|
-
case 5:
|
|
1193
|
-
path.value = routeSplit[0];
|
|
1194
|
-
space.value = routeSplit[1];
|
|
1195
|
-
universe.value = routeSplit[2];
|
|
1196
|
-
cluster.value = routeSplit[3];
|
|
1197
|
-
plane.value = routeSplit[4];
|
|
1198
|
-
break;
|
|
1307
|
+
if (direction === "down") {
|
|
1308
|
+
scale += scaleIncrement;
|
|
1309
|
+
if (scale > 4) {
|
|
1310
|
+
scale = 4;
|
|
1199
1311
|
}
|
|
1200
|
-
|
|
1201
|
-
protocol: {
|
|
1202
|
-
value: protocol,
|
|
1203
|
-
secure: true
|
|
1204
|
-
},
|
|
1205
|
-
host: host,
|
|
1206
|
-
path: path,
|
|
1207
|
-
space: space,
|
|
1208
|
-
universe: universe,
|
|
1209
|
-
cluster: cluster,
|
|
1210
|
-
plane: plane,
|
|
1211
|
-
valid: true
|
|
1212
|
-
};
|
|
1213
|
-
return url;
|
|
1312
|
+
valScalationMatrix = scaleMatrix$1(scale);
|
|
1214
1313
|
}
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
plane.value = split[0];
|
|
1219
|
-
break;
|
|
1220
|
-
|
|
1221
|
-
case 2:
|
|
1222
|
-
cluster.value = split[0];
|
|
1223
|
-
plane.value = split[1];
|
|
1224
|
-
break;
|
|
1225
|
-
|
|
1226
|
-
case 3:
|
|
1227
|
-
universe.value = split[0];
|
|
1228
|
-
cluster.value = split[1];
|
|
1229
|
-
plane.value = split[2];
|
|
1230
|
-
break;
|
|
1314
|
+
const transformedMatrix3d = setTransform(valRotationMatrix, valTranslationMatrix, valScalationMatrix);
|
|
1315
|
+
return transformedMatrix3d;
|
|
1316
|
+
}
|
|
1231
1317
|
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1318
|
+
var index$c = Object.freeze({
|
|
1319
|
+
__proto__: null,
|
|
1320
|
+
getMatrixValues: getMatrixValues,
|
|
1321
|
+
getRotationMatrix: getRotationMatrix,
|
|
1322
|
+
getTranslationMatrix: getTranslationMatrix,
|
|
1323
|
+
getScalationValue: getScalationValue,
|
|
1324
|
+
setTransform: setTransform,
|
|
1325
|
+
getTransformRotate: getTransformRotate,
|
|
1326
|
+
getTransformTranslate: getTransformTranslate,
|
|
1327
|
+
getTransformScale: getTransformScale,
|
|
1328
|
+
rotatePlurid: rotatePlurid,
|
|
1329
|
+
translatePlurid: translatePlurid,
|
|
1330
|
+
scalePlurid: scalePlurid
|
|
1331
|
+
});
|
|
1238
1332
|
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
plane.value = split[4];
|
|
1245
|
-
break;
|
|
1333
|
+
var index$b = Object.freeze({
|
|
1334
|
+
__proto__: null,
|
|
1335
|
+
general: index$d,
|
|
1336
|
+
matrix3d: index$c
|
|
1337
|
+
});
|
|
1246
1338
|
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
break;
|
|
1339
|
+
var index$a = Object.freeze({
|
|
1340
|
+
__proto__: null,
|
|
1341
|
+
direction: index$g,
|
|
1342
|
+
matrix: index$e,
|
|
1343
|
+
quaternion: index$f,
|
|
1344
|
+
transform: index$b
|
|
1345
|
+
});
|
|
1255
1346
|
|
|
1256
|
-
|
|
1257
|
-
const url = {
|
|
1258
|
-
protocol: {
|
|
1259
|
-
value: protocol,
|
|
1260
|
-
secure: true
|
|
1261
|
-
},
|
|
1262
|
-
host: host,
|
|
1263
|
-
path: path,
|
|
1264
|
-
space: space,
|
|
1265
|
-
universe: universe,
|
|
1266
|
-
cluster: cluster,
|
|
1267
|
-
plane: plane,
|
|
1268
|
-
valid: valid
|
|
1269
|
-
};
|
|
1270
|
-
return url;
|
|
1271
|
-
}
|
|
1272
|
-
} else {
|
|
1273
|
-
switch (split.length) {
|
|
1274
|
-
case 3:
|
|
1275
|
-
protocol = split[0];
|
|
1276
|
-
host.value = split[1];
|
|
1277
|
-
path.value = split[2];
|
|
1278
|
-
break;
|
|
1347
|
+
const internatiolate = (lamguage, field) => internationalization[lamguage][field];
|
|
1279
1348
|
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1349
|
+
const resolvePluridPlaneData = plane => {
|
|
1350
|
+
if (Array.isArray(plane)) {
|
|
1351
|
+
const [route, component, options] = plane;
|
|
1352
|
+
return Object.assign({
|
|
1353
|
+
route: route,
|
|
1354
|
+
component: component
|
|
1355
|
+
}, options);
|
|
1356
|
+
}
|
|
1357
|
+
return plane;
|
|
1358
|
+
};
|
|
1289
1359
|
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
path: path,
|
|
1298
|
-
space: space,
|
|
1299
|
-
universe: universe,
|
|
1300
|
-
cluster: cluster,
|
|
1301
|
-
plane: plane,
|
|
1302
|
-
valid: valid
|
|
1303
|
-
};
|
|
1304
|
-
return url;
|
|
1305
|
-
}
|
|
1360
|
+
const resolvePluridRoutePlaneData = plane => {
|
|
1361
|
+
if (Array.isArray(plane)) {
|
|
1362
|
+
const [value, component, options] = plane;
|
|
1363
|
+
return Object.assign({
|
|
1364
|
+
value: value,
|
|
1365
|
+
component: component
|
|
1366
|
+
}, options);
|
|
1306
1367
|
}
|
|
1307
|
-
|
|
1308
|
-
protocol: {
|
|
1309
|
-
value: protocol,
|
|
1310
|
-
secure: true
|
|
1311
|
-
},
|
|
1312
|
-
host: host,
|
|
1313
|
-
path: path,
|
|
1314
|
-
space: space,
|
|
1315
|
-
universe: universe,
|
|
1316
|
-
cluster: cluster,
|
|
1317
|
-
plane: plane,
|
|
1318
|
-
valid: true
|
|
1319
|
-
};
|
|
1320
|
-
return url;
|
|
1368
|
+
return plane;
|
|
1321
1369
|
};
|
|
1322
1370
|
|
|
1323
|
-
const
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
const divisions = pluridLinkPathDivider(route);
|
|
1327
|
-
const defaultPathname = typeof window !== "undefined" ? window.location.pathname === "/" ? "p" : window.location.pathname.slice(1) : divisions.path.value ? divisions.path.value : "p";
|
|
1328
|
-
const protocolDivision = divisions.protocol.value || windowProtocol;
|
|
1329
|
-
const hostDivision = divisions.host.value ? divisions.host : {
|
|
1330
|
-
value: windowHost,
|
|
1331
|
-
controlled: true
|
|
1332
|
-
};
|
|
1333
|
-
const path = divisions.path.value ? divisions.path : {
|
|
1334
|
-
value: defaultPathname,
|
|
1335
|
-
parameters: {},
|
|
1336
|
-
query: {}
|
|
1337
|
-
};
|
|
1338
|
-
const space = divisions.space.value ? divisions.space : {
|
|
1339
|
-
value: "s",
|
|
1340
|
-
parameters: {},
|
|
1341
|
-
query: {}
|
|
1342
|
-
};
|
|
1343
|
-
const universe = divisions.universe.value ? divisions.universe : {
|
|
1344
|
-
value: "u",
|
|
1345
|
-
parameters: {},
|
|
1346
|
-
query: {}
|
|
1347
|
-
};
|
|
1348
|
-
const cluster = divisions.cluster.value ? divisions.cluster : {
|
|
1349
|
-
value: "c",
|
|
1350
|
-
parameters: {},
|
|
1351
|
-
query: {}
|
|
1352
|
-
};
|
|
1353
|
-
const plane = divisions.plane;
|
|
1354
|
-
const separator = "://";
|
|
1355
|
-
if (!plane.value && route !== "/") {
|
|
1356
|
-
const resolvers = [ protocolDivision, hostDivision.value, path.value ];
|
|
1357
|
-
const absoluteRoute = resolvers.join(separator);
|
|
1358
|
-
return {
|
|
1359
|
-
protocol: protocolDivision,
|
|
1360
|
-
host: hostDivision,
|
|
1361
|
-
path: path,
|
|
1362
|
-
space: space,
|
|
1363
|
-
universe: universe,
|
|
1364
|
-
cluster: cluster,
|
|
1365
|
-
plane: plane,
|
|
1366
|
-
route: absoluteRoute
|
|
1367
|
-
};
|
|
1371
|
+
const getPluridPlaneIDByData = element => {
|
|
1372
|
+
if (!element) {
|
|
1373
|
+
return "";
|
|
1368
1374
|
}
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
space: "",
|
|
1375
|
-
universe: "",
|
|
1376
|
-
cluster: "",
|
|
1377
|
-
plane: "",
|
|
1378
|
-
route: route
|
|
1379
|
-
};
|
|
1375
|
+
const parent = element.parentElement;
|
|
1376
|
+
if (parent && parent.dataset.pluridPlane) {
|
|
1377
|
+
return parent.dataset.pluridPlane;
|
|
1378
|
+
}
|
|
1379
|
+
return getPluridPlaneIDByData(parent);
|
|
1380
1380
|
};
|
|
1381
1381
|
|
|
1382
1382
|
class IsoMatcher {
|
|
@@ -2801,5 +2801,5 @@ const pluridRouterNavigate = path => {
|
|
|
2801
2801
|
window.dispatchEvent(event);
|
|
2802
2802
|
};
|
|
2803
2803
|
|
|
2804
|
-
export { cleanTemplate, index$
|
|
2804
|
+
export { cleanTemplate, index$h as general, index$a as interaction, internatiolate, index$8 as planes, pluridRouterNavigate, index$9 as routing, index$2 as space, index as state, index$j as utilities };
|
|
2805
2805
|
//# sourceMappingURL=index.es.js.map
|