targetj 1.0.2
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/.jshintrc +3 -0
- package/Gruntfile.js +42 -0
- package/package.json +27 -0
- package/src/$Dom.js +358 -0
- package/src/App.js +142 -0
- package/src/Bracket.js +201 -0
- package/src/Browser.js +297 -0
- package/src/Dim.js +19 -0
- package/src/EventListener.js +454 -0
- package/src/LoadingManager.js +348 -0
- package/src/LocationManager.js +156 -0
- package/src/PageManager.js +104 -0
- package/src/SearchUtil.js +179 -0
- package/src/TModel.js +761 -0
- package/src/TModelManager.js +378 -0
- package/src/TUtil.js +202 -0
- package/src/TargetManager.js +228 -0
- package/src/TargetUtil.js +221 -0
- package/src/Viewport.js +184 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
function TModelManager() {
|
|
2
|
+
this.init();
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
TModelManager.prototype.init = function() {
|
|
6
|
+
this.lists = {
|
|
7
|
+
visible: [],
|
|
8
|
+
invisibleDom: [],
|
|
9
|
+
deletedTModel: [],
|
|
10
|
+
visibleNoDom: []
|
|
11
|
+
};
|
|
12
|
+
this.visibleTypeMap = {};
|
|
13
|
+
this.visibleOidMap = {};
|
|
14
|
+
|
|
15
|
+
this.nextRuns = [];
|
|
16
|
+
this.runningStep = 0;
|
|
17
|
+
this.runningFlag = false;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
TModelManager.prototype.visibles = function(type, list) {
|
|
21
|
+
list = !list ? this.lists.visible : list;
|
|
22
|
+
return this.lists.visible.filter(function(tmodel) { return tmodel.type === type || !type ; }).map(function(tmodel) { return tmodel.oid; });
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
TModelManager.prototype.findVisible = function(type) {
|
|
26
|
+
return this.lists.visible.find(function(tmodel) { return tmodel.type === type; });
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
TModelManager.prototype.findLastVisible = function(type) {
|
|
30
|
+
return this.lists.visible.findLast(function(tmodel) { return tmodel.type === type; });
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
TModelManager.prototype.analyze = function() {
|
|
34
|
+
var i, tmodel;
|
|
35
|
+
|
|
36
|
+
var lastVisibleMap = TUtil.list2map(this.lists.visible);
|
|
37
|
+
|
|
38
|
+
this.lists.visible.length = 0;
|
|
39
|
+
this.lists.visibleNoDom.length = 0;
|
|
40
|
+
this.visibleTypeMap = {};
|
|
41
|
+
this.visibleOidMap = {};
|
|
42
|
+
|
|
43
|
+
for (i = 0; i < tapp.locationManager.hasLocationList.length; i++) {
|
|
44
|
+
tmodel = tapp.locationManager.hasLocationList[i];
|
|
45
|
+
var visible = tmodel.isVisible();
|
|
46
|
+
|
|
47
|
+
if (tmodel.isMarkedDeleted() && this.lists.deletedTModel.indexOf(tmodel) === -1) {
|
|
48
|
+
this.lists.deletedTModel = [].concat(this.lists.deletedTModel, tmodel, tmodel.getAllNestedChildren());
|
|
49
|
+
|
|
50
|
+
lastVisibleMap[tmodel.oid] = null;
|
|
51
|
+
} else if (visible) {
|
|
52
|
+
lastVisibleMap[tmodel.oid] = null;
|
|
53
|
+
|
|
54
|
+
this.lists.visible.push(tmodel);
|
|
55
|
+
|
|
56
|
+
this.visibleOidMap[tmodel.oid] = tmodel;
|
|
57
|
+
if (!this.visibleTypeMap[tmodel.type]) {
|
|
58
|
+
this.visibleTypeMap[tmodel.type] = [];
|
|
59
|
+
}
|
|
60
|
+
this.visibleTypeMap[tmodel.type].push(tmodel);
|
|
61
|
+
|
|
62
|
+
if (tmodel.canHaveDom() && !tmodel.hasDom() && tmodel.getDomHolder() && tmodel.getDomHolder().exists() && this.lists.visibleNoDom.indexOf(tmodel) === -1) {
|
|
63
|
+
this.lists.visibleNoDom.push(tmodel);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
var lastVisible = Object.values(lastVisibleMap).filter(function(tmodel) { return tmodel !== null; });
|
|
69
|
+
|
|
70
|
+
lastVisible.forEach(function(tmodel) {
|
|
71
|
+
if (tmodel.hasDom()) {
|
|
72
|
+
tapp.manager.lists.invisibleDom.push(tmodel);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
TModelManager.prototype.renderTModels = function () {
|
|
78
|
+
var i, tmodel;
|
|
79
|
+
|
|
80
|
+
var rerendedList = [];
|
|
81
|
+
var holderChangedList = [];
|
|
82
|
+
this.lists.visible.forEach(function(tmodel) {
|
|
83
|
+
if (tmodel.hasDom() && TUtil.isDefined(tmodel.getHtml())) {
|
|
84
|
+
|
|
85
|
+
if (tmodel.$dom.html() !== tmodel.getHtml() || tmodel.$dom.textOnly !== tmodel.isTextOnly()) {
|
|
86
|
+
rerendedList.push(tmodel);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (tmodel.hasDom() && tmodel.hasDomHolderChanged()) {
|
|
91
|
+
holderChangedList.push(tmodel);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
for (i = 0; i < rerendedList.length; i++) {
|
|
96
|
+
tmodel = rerendedList[i];
|
|
97
|
+
|
|
98
|
+
tmodel.isTextOnly() ? tmodel.$dom.text(tmodel.getHtml()) : tmodel.$dom.html(tmodel.getHtml());
|
|
99
|
+
tmodel.setActualValueLastUpdate('html');
|
|
100
|
+
|
|
101
|
+
//we might need to re-measure dim from dom if tmodel has no measure method
|
|
102
|
+
tmodel.domHeight = undefined;
|
|
103
|
+
tmodel.domWidth = undefined;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
for (i = 0; i < holderChangedList.length; i++) {
|
|
107
|
+
tmodel = holderChangedList[i];
|
|
108
|
+
tmodel.$dom.detach();
|
|
109
|
+
tmodel.getDomHolder().appendTModel$Dom(tmodel);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
TModelManager.prototype.deleteDoms = function () {
|
|
114
|
+
var i;
|
|
115
|
+
|
|
116
|
+
for (i = 0; i < this.lists.invisibleDom.length; i++) {
|
|
117
|
+
var tmodel = this.lists.invisibleDom[i];
|
|
118
|
+
|
|
119
|
+
tmodel.domValues = {};
|
|
120
|
+
tmodel.xVisible = false;
|
|
121
|
+
tmodel.yVisible = false;
|
|
122
|
+
|
|
123
|
+
if (tmodel.invisibleFunctions) {
|
|
124
|
+
tmodel.invisibleFunctions.forEach(function(invisible) {
|
|
125
|
+
var key = invisible.key;
|
|
126
|
+
invisible.fn.call(tmodel, key, tmodel.getTargetStep(key), tmodel.getTargetCycle(key), tmodel.getTargetSteps(key), tmodel.getTargetCycles(key));
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (tmodel.isDomDeletable()) {
|
|
131
|
+
tmodel.$dom.detach();
|
|
132
|
+
tmodel.$dom = null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
for (i = 0; i < this.lists.deletedTModel.length; i++) {
|
|
137
|
+
this.removeTModel(this.lists.deletedTModel[i]);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
var rerun = this.lists.invisibleDom.length > 0 || this.lists.deletedTModel.length > 0;
|
|
141
|
+
|
|
142
|
+
this.lists.invisibleDom.length = 0;
|
|
143
|
+
this.lists.deletedTModel.length = 0;
|
|
144
|
+
|
|
145
|
+
if (rerun) {
|
|
146
|
+
this.scheduleRun(0, "deleteDoms");
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
TModelManager.prototype.removeTModel = function(tmodel) {
|
|
151
|
+
tmodel.markAsDeleted();
|
|
152
|
+
|
|
153
|
+
var parent = tmodel.getParent();
|
|
154
|
+
|
|
155
|
+
var childIndex;
|
|
156
|
+
if (parent && parent.hasChildren()) {
|
|
157
|
+
parent.removeUpdatingChild(tmodel);
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
childIndex = parent.getValue('children').indexOf(tmodel);
|
|
161
|
+
|
|
162
|
+
if (childIndex >= 0) {
|
|
163
|
+
parent.getValue('children').splice(childIndex, 1);
|
|
164
|
+
parent.setActualValueLastUpdate('children');
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
childIndex = parent.getValue('addedChildren').indexOf(tmodel);
|
|
168
|
+
|
|
169
|
+
if (childIndex >= 0) {
|
|
170
|
+
parent.getValue('addedChildren').splice(childIndex, 1);
|
|
171
|
+
parent.setActualValueLastUpdate('addedChildren');
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
parent.setActualValueLastUpdate('allChildren');
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if (tmodel.$dom) {
|
|
178
|
+
tmodel.$dom.detach();
|
|
179
|
+
tmodel.$dom = null;
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
TModelManager.prototype.createDoms = function () {
|
|
184
|
+
var i;
|
|
185
|
+
var $dom, tmodel;
|
|
186
|
+
var contentList = [];
|
|
187
|
+
var needsDom = [];
|
|
188
|
+
|
|
189
|
+
this.lists.visibleNoDom.sort(function(a, b) {
|
|
190
|
+
if (a.hasChildren() && b.hasChildren()) {
|
|
191
|
+
return a.getUIDepth() < b.getUIDepth() ? -1 : 1;
|
|
192
|
+
} else {
|
|
193
|
+
return a.hasChildren() ? -1 : 1;
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
for (i = 0; i < this.lists.visibleNoDom.length; i++) {
|
|
198
|
+
tmodel = this.lists.visibleNoDom[i];
|
|
199
|
+
if ($Dom.query('#' + tmodel.oid)) {
|
|
200
|
+
$dom = new $Dom('#' + tmodel.oid);
|
|
201
|
+
tmodel.$dom = $dom;
|
|
202
|
+
} else {
|
|
203
|
+
needsDom.push(tmodel);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
for (i = 0; i < needsDom.length; i++) {
|
|
208
|
+
tmodel = needsDom[i];
|
|
209
|
+
|
|
210
|
+
var x = Math.floor(tmodel.getX()), y = Math.floor(tmodel.getY()), rotate = Math.floor(tmodel.getRotate()), scale = TUtil.formatNum(tmodel.getScale(), 2);
|
|
211
|
+
|
|
212
|
+
var width = Math.floor(tmodel.getWidth());
|
|
213
|
+
var height = Math.floor(tmodel.getHeight());
|
|
214
|
+
var zIndex = Math.floor(tmodel.getZIndex());
|
|
215
|
+
var opacity = tmodel.getOpacity().toFixed(2);
|
|
216
|
+
|
|
217
|
+
var styles = {
|
|
218
|
+
position: 'absolute',
|
|
219
|
+
top: 0,
|
|
220
|
+
left: 0,
|
|
221
|
+
transform: [ x, y, rotate, scale ],
|
|
222
|
+
width: width + "px",
|
|
223
|
+
opacity: opacity,
|
|
224
|
+
height: height + "px",
|
|
225
|
+
zIndex: zIndex
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
$dom = new $Dom();
|
|
229
|
+
$dom.create('div');
|
|
230
|
+
$dom.setSelector("#" + tmodel.oid);
|
|
231
|
+
$dom.setId(tmodel.oid);
|
|
232
|
+
$dom.css(tmodel.getCss());
|
|
233
|
+
$dom.setStyleByMap(styles);
|
|
234
|
+
|
|
235
|
+
tmodel.domValues = {};
|
|
236
|
+
tmodel.domValues.x = x;
|
|
237
|
+
tmodel.domValues.y = y;
|
|
238
|
+
tmodel.domValues.rotate = rotate;
|
|
239
|
+
tmodel.domValues.scale = scale;
|
|
240
|
+
|
|
241
|
+
tmodel.$dom = $dom;
|
|
242
|
+
|
|
243
|
+
var contentItem = contentList.find(function(item) {
|
|
244
|
+
return item.domHolder === tmodel.getDomHolder();
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
if (contentItem) {
|
|
248
|
+
contentItem.tmodels.push(tmodel);
|
|
249
|
+
} else {
|
|
250
|
+
contentList.push({ domHolder: tmodel.getDomHolder(), tmodels: [tmodel]});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
contentList.map(function(content) {
|
|
255
|
+
content.tmodels.map(function(tmodel) {
|
|
256
|
+
content.domHolder.appendTModel$Dom(tmodel);
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
if (contentList.length) {
|
|
261
|
+
tapp.manager.scheduleRun(1, "createDom");
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
TModelManager.prototype.scheduleRun = function(delay, oid) {
|
|
266
|
+
if (delay < 1 && tapp.throttle === 0) {
|
|
267
|
+
tapp.manager.run(oid, delay);
|
|
268
|
+
} else {
|
|
269
|
+
var nextRun = browser.delay(function() {
|
|
270
|
+
tapp.manager.run(oid, delay);
|
|
271
|
+
}, oid, tapp.throttle === 0 ? delay || 0 : tapp.throttle);
|
|
272
|
+
|
|
273
|
+
var lastRun = this.nextRuns.length > 0 ? this.nextRuns[this.nextRuns.length - 1] : null;
|
|
274
|
+
if (nextRun && (!lastRun || nextRun.delay > lastRun.delay)) {
|
|
275
|
+
this.nextRuns.push(nextRun);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
TModelManager.prototype.run = function(oid, delay) {
|
|
281
|
+
if (!tapp.isRunning()) {
|
|
282
|
+
this.getNextRun();
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
if (tapp.manager.runningFlag) {
|
|
287
|
+
tapp.manager.scheduleRun(1, oid);
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
tapp.manager.runningFlag = true;
|
|
292
|
+
|
|
293
|
+
window.requestAnimationFrame(function () {
|
|
294
|
+
var frameTime = browser.now();
|
|
295
|
+
while((browser.now() - frameTime) < 25 && tapp.manager.runningStep < 7 && tapp.isRunning()) {
|
|
296
|
+
switch(tapp.manager.runningStep) {
|
|
297
|
+
case 0:
|
|
298
|
+
|
|
299
|
+
tapp.events.captureEvents();
|
|
300
|
+
|
|
301
|
+
tapp.locationManager.calculateTargets(tapp.ui);
|
|
302
|
+
|
|
303
|
+
tapp.locationManager.calculateAll();
|
|
304
|
+
|
|
305
|
+
tapp.events.resetEvents();
|
|
306
|
+
|
|
307
|
+
break;
|
|
308
|
+
|
|
309
|
+
case 1:
|
|
310
|
+
tapp.manager.analyze();
|
|
311
|
+
break;
|
|
312
|
+
|
|
313
|
+
case 2:
|
|
314
|
+
tapp.manager.createDoms();
|
|
315
|
+
break;
|
|
316
|
+
|
|
317
|
+
case 3:
|
|
318
|
+
tapp.manager.renderTModels();
|
|
319
|
+
break;
|
|
320
|
+
|
|
321
|
+
case 4:
|
|
322
|
+
for (var i = 0; i < tapp.manager.lists.visible.length; i++) {
|
|
323
|
+
var tmodel = tapp.manager.lists.visible[i];
|
|
324
|
+
if (tmodel.hasDom()) {
|
|
325
|
+
tmodel.fixXYRotateScale();
|
|
326
|
+
tmodel.fixOpacity();
|
|
327
|
+
tmodel.fixZIndex();
|
|
328
|
+
tmodel.fixCss();
|
|
329
|
+
tmodel.fixStyle();
|
|
330
|
+
tmodel.fixDim();
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
}
|
|
334
|
+
break;
|
|
335
|
+
|
|
336
|
+
case 5:
|
|
337
|
+
tapp.manager.deleteDoms();
|
|
338
|
+
break;
|
|
339
|
+
|
|
340
|
+
case 6:
|
|
341
|
+
tapp.loader.singleLoad();
|
|
342
|
+
tapp.loader.groupLoad();
|
|
343
|
+
tapp.loader.imgLoad();
|
|
344
|
+
break;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
tapp.manager.runningStep++;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
if (tapp.debugLevel > 0) {
|
|
351
|
+
browser.log(tapp.debugLevel > 0 && browser.now() - frameTime > 10)("it took: " + (browser.now() - frameTime) + ", " + oid);
|
|
352
|
+
browser.log(tapp.debugLevel > 0 && browser.now() - frameTime > 10)("count: " + tapp.locationManager.locationCount);
|
|
353
|
+
browser.log(tapp.debugLevel > 1)("request from: " + oid + " delay: " + delay);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
tapp.manager.runningFlag = false;
|
|
357
|
+
|
|
358
|
+
if (tapp.manager.runningStep !== 7) {
|
|
359
|
+
tapp.manager.run("rendering: " + tapp.manager.runningStep);
|
|
360
|
+
} else {
|
|
361
|
+
tapp.manager.runningStep = 0;
|
|
362
|
+
|
|
363
|
+
tapp.manager.getNextRun();
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
};
|
|
368
|
+
|
|
369
|
+
TModelManager.prototype.getNextRun = function() {
|
|
370
|
+
if (this.nextRuns.length > 0 && tapp.isRunning()) {
|
|
371
|
+
var nextRun = this.nextRuns.pop();
|
|
372
|
+
if (nextRun) {
|
|
373
|
+
tapp.manager.scheduleRun(nextRun.timeStamp - browser.now(), nextRun.oid);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
|
package/src/TUtil.js
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
function TUtil() {}
|
|
2
|
+
|
|
3
|
+
TUtil.getTypeFromCallerFile = function() {
|
|
4
|
+
var stack = new Error("PRINTING CALL STACK").stack;
|
|
5
|
+
var lines = stack.split("\n");
|
|
6
|
+
var index = lines.findIndex(function(s) { return s.indexOf("TModel") >= 0; });
|
|
7
|
+
var typeLine = index < lines.length - 1 ? lines[index + 1] : '';
|
|
8
|
+
|
|
9
|
+
var type = typeLine.match(/[a-zA-Z]{3,}/);
|
|
10
|
+
|
|
11
|
+
return TUtil.isDefined(type) ? type[0] : '';
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
TUtil.initDoms = function(visibleList) {
|
|
15
|
+
|
|
16
|
+
var elements = $Dom.findByClass('tgt');
|
|
17
|
+
|
|
18
|
+
visibleList.forEach(function(tmodel) {
|
|
19
|
+
tmodel.$dom = null;
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
var visibleMap = TUtil.list2map(visibleList.filter(function(item) { return item.type !== 'BI'; }));
|
|
23
|
+
|
|
24
|
+
for (var i = 0; i < elements.length; i++) {
|
|
25
|
+
var element = elements[i];
|
|
26
|
+
|
|
27
|
+
var id = element.getAttribute("id");
|
|
28
|
+
|
|
29
|
+
var tmodel = visibleMap[id];
|
|
30
|
+
|
|
31
|
+
if (tmodel && !tmodel.hasDom()) {
|
|
32
|
+
tmodel.$dom = new $Dom("#" + id);
|
|
33
|
+
} else {
|
|
34
|
+
$Dom.detach(element);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
TUtil.list2map = function(list, defaultValue) {
|
|
40
|
+
var map = list.reduce(function(a, c){
|
|
41
|
+
a[c.oid] = TUtil.isDefined(defaultValue) ? defaultValue : c;
|
|
42
|
+
return a;
|
|
43
|
+
}, {});
|
|
44
|
+
|
|
45
|
+
return map;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
TUtil.getDeepList = function(parent) {
|
|
49
|
+
var deepList = [];
|
|
50
|
+
|
|
51
|
+
function traverse(tmodel) {
|
|
52
|
+
if (tmodel.hasChildren()) {
|
|
53
|
+
var list = tmodel.getChildren();
|
|
54
|
+
deepList = deepList.concat(list);
|
|
55
|
+
list.forEach(function(t) {
|
|
56
|
+
traverse(t);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
traverse(parent);
|
|
62
|
+
return deepList;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
TUtil.getDeepUpdatingList = function(parent) {
|
|
66
|
+
var deepList = [];
|
|
67
|
+
|
|
68
|
+
function traverse(tmodel) {
|
|
69
|
+
if (tmodel.updatingChildren) {
|
|
70
|
+
deepList = deepList.concat(tmodel.updatingChildren);
|
|
71
|
+
tmodel.updatingChildren.forEach(function(t) {
|
|
72
|
+
traverse(t);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
traverse(parent);
|
|
78
|
+
|
|
79
|
+
return deepList;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
TUtil.areEqual = function(a, b, deepEquality) {
|
|
83
|
+
|
|
84
|
+
if (deepEquality) {
|
|
85
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
86
|
+
} else if (TUtil.isDefined(a) && TUtil.isDefined(b)) {
|
|
87
|
+
return a === b;
|
|
88
|
+
} else {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
TUtil.momentum = function (past, current, time) {
|
|
94
|
+
time = time || 1;
|
|
95
|
+
|
|
96
|
+
var distance = current - past;
|
|
97
|
+
var speed = Math.abs(distance) / time;
|
|
98
|
+
var duration = speed * 5000;
|
|
99
|
+
var initialVelocity = 100;
|
|
100
|
+
var momentum = initialVelocity * duration;
|
|
101
|
+
|
|
102
|
+
var momentumDistance = momentum / 10;
|
|
103
|
+
if (distance > 0) {
|
|
104
|
+
distance += momentumDistance;
|
|
105
|
+
} else {
|
|
106
|
+
distance -= momentumDistance;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return {distance: Math.round(distance) / 50, duration: duration, momentumDistance: momentumDistance, time: time * 5 };
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
TUtil.isDefined = function (obj) {
|
|
113
|
+
return typeof (obj) !== "undefined" && obj !== null;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
TUtil.isNumber = function(num) {
|
|
117
|
+
return typeof num === 'number' && !isNaN(num);
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
TUtil.limit = function (num, low, high) {
|
|
121
|
+
num = !TUtil.isDefined(num) ? low : num;
|
|
122
|
+
num = num > high ? high : num;
|
|
123
|
+
num = num < low ? low : num;
|
|
124
|
+
|
|
125
|
+
return num;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
TUtil.getOptionValue = function(option, defaultValue, tmodel) {
|
|
129
|
+
return !TUtil.isDefined(option) ? defaultValue : typeof option === 'function' ? option.call(tmodel) : option;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
TUtil.executeFunctionByName = function (functionName, context /*, args */) {
|
|
133
|
+
if (!functionName)
|
|
134
|
+
return null;
|
|
135
|
+
|
|
136
|
+
var args = Array.prototype.slice.call(arguments, 2);
|
|
137
|
+
var namespaces = functionName.split(".");
|
|
138
|
+
var func = namespaces.pop();
|
|
139
|
+
for (var i = 0; i < namespaces.length; i++) {
|
|
140
|
+
context = context[namespaces[i]];
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (context && context[func]) {
|
|
144
|
+
return context[func].apply(context, args);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
TUtil.formatPeriod = function (seconds) {
|
|
149
|
+
seconds = seconds < 0 ? 0 : seconds;
|
|
150
|
+
if (seconds < 120) {
|
|
151
|
+
return seconds + " sec";
|
|
152
|
+
} else if (seconds < 7200) {
|
|
153
|
+
return Math.floor(seconds / 60) + " min";
|
|
154
|
+
} else if (seconds < 172800) {
|
|
155
|
+
return Math.floor(seconds / 3600) + " hours";
|
|
156
|
+
} else {
|
|
157
|
+
return Math.floor(seconds / 86400) + " days";
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
TUtil.formatNum = function (num, precision) {
|
|
162
|
+
if (!num) return 0;
|
|
163
|
+
var s = num.toString();
|
|
164
|
+
var n = parseFloat(s);
|
|
165
|
+
return n.toFixed(precision);
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
TUtil.distance = function(x1, y1, x2, y2) {
|
|
169
|
+
return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
TUtil.getFullLink = function(link) {
|
|
173
|
+
if (!TUtil.isDefined(link)) return;
|
|
174
|
+
|
|
175
|
+
if (link.indexOf('http') === 0) {
|
|
176
|
+
return link;
|
|
177
|
+
} else {
|
|
178
|
+
var protocol = window.location.protocol;
|
|
179
|
+
protocol += protocol.endsWith(":") ? "//" : "://";
|
|
180
|
+
var base = protocol + window.location.hostname;
|
|
181
|
+
return link.startsWith("/") ? base + link : base + "/" + link;
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
function EasingEffects() {}
|
|
186
|
+
|
|
187
|
+
EasingEffects.linear =function (t) {
|
|
188
|
+
return t;
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
EasingEffects.easeInQuad = function (t) {
|
|
192
|
+
return t * t;
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
EasingEffects.easeOutExpo = function (t) {
|
|
196
|
+
return 1 - (1 - t) * (1 - t);
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
EasingEffects.circular = function (t) {
|
|
200
|
+
return Math.sqrt(1 - (--t * t));
|
|
201
|
+
};
|
|
202
|
+
|