-
Notifications
You must be signed in to change notification settings - Fork 2
/
coverage.html
525 lines (470 loc) · 226 KB
/
coverage.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
<!DOCTYPE html>
<!--
This html layout is shamelessly lifted from TJ Holowaychuk's mocha project, with
the following license. All mods I made are available under the same license.
(The MIT License)
Copyright (c) 2011-2013 TJ Holowaychuk <tj@vision-media.ca>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-->
<html>
<head>
<title>Coverage</title>
<script>
headings = [];
onload = function(){
headings = document.querySelectorAll('h2');
};
onscroll = function(e){
var heading = find(window.scrollY);
if (!heading) return;
var links = document.querySelectorAll('#menu a')
, link;
for (var i = 0, len = links.length; i < len; ++i) {
link = links[i];
link.className = link.getAttribute('href') == '#' + heading.id
? 'active'
: '';
}
};
function find(y) {
var i = headings.length
, heading;
while (i--) {
heading = headings[i];
if (y >= heading.offsetTop) {
return heading;
}
}
}
</script>
<style>
body {
font: 14px/1.6 "Helvetica Neue", Helvetica, Arial, sans-serif;
margin: 0;
color: #2C2C2C;
border-top: 2px solid #ddd;
}
.template {
display: none;
}
#coverage {
padding: 60px;
}
h1 a {
color: inherit;
font-weight: inherit;
}
h1 a:hover {
text-decoration: none;
}
.onload h1 {
opacity: 1;
}
h2 {
width: 80%;
margin-top: 80px;
margin-bottom: 0;
font-weight: 100;
letter-spacing: 1px;
border-bottom: 1px solid #eee;
}
a {
color: #8A6343;
font-weight: bold;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
ul {
margin-top: 20px;
padding: 0 15px;
width: 100%;
}
ul li {
float: left;
width: 40%;
margin-top: 5px;
margin-right: 60px;
list-style: none;
border-bottom: 1px solid #eee;
padding: 5px 0;
font-size: 12px;
}
ul::after {
content: '.';
height: 0;
display: block;
visibility: hidden;
clear: both;
}
code {
font: 12px monaco, monospace;
}
pre {
margin: 30px;
padding: 30px;
border: 1px solid #eee;
border-bottom-color: #ddd;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
-webkit-box-shadow: inset 0 0 10px #eee;
-moz-box-shadow: inset 0 0 10px #eee;
box-shadow: inset 0 0 10px #eee;
overflow-x: auto;
}
img {
margin: 30px;
padding: 1px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: 0 3px 10px #dedede, 0 1px 5px #888;
-moz-box-shadow: 0 3px 10px #dedede, 0 1px 5px #888;
box-shadow: 0 3px 10px #dedede, 0 1px 5px #888;
max-width: 100%;
}
footer {
background: #eee;
width: 100%;
padding: 50px 0;
text-align: right;
border-top: 1px solid #ddd;
}
footer span {
display: block;
margin-right: 30px;
color: #888;
font-size: 12px;
}
#menu {
position: fixed;
font-size: 12px;
overflow-y: auto;
top: 0;
right: 0;
margin: 0;
height: 100%;
padding: 15px 0;
text-align: right;
border-left: 1px solid #eee;
-moz-box-shadow: 0 0 2px #888
, inset 5px 0 20px rgba(0,0,0,.5)
, inset 5px 0 3px rgba(0,0,0,.3);
-webkit-box-shadow: 0 0 2px #888
, inset 5px 0 20px rgba(0,0,0,.5)
, inset 5px 0 3px rgba(0,0,0,.3);
box-shadow: 0 0 2px #888
, inset 5px 0 20px rgba(0,0,0,.5)
, inset 5px 0 3px rgba(0,0,0,.3);
-webkit-font-smoothing: antialiased;
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGYAAABmCAMAAAAOARRQAAABelBMVEUjJSU6OzshIyM5OjoqKy02NjgsLS01NTYjJCUzNTUgISMlJSc0NTUvMDA6PDwlJyg1NjYoKis2NjYrLS02ODkpKyw0NDYrLC04ODovLzA4Ojo0NDUtLy86OjwjIyU4OTosLS82ODgtLS8hIyQvMTEnKCooKSsrKy0qLCwkJSUnKCkrLCwpKiwwMjIxMzMqLC0tLS0pKissLC00NTYwMDIwMTQpKysoKSovMDEtLzA2OTkxMzUrKywvLy8qKyszNTY5OzsqKiw6OjswMDExNDUoKiozNDUvMDIyNDY1Njg2Njk5OTozMzU0NjY4ODkiIyUiIyQ4OTkuMDEmKCowMjQwMTErLS4qKywwMTMhIiMpKiopKy0tLjAkJScxNDQvLzExNDYyNDQmKCk5OTslJig5OjskJSYxMzQrLS8gISIwMTIoKCk1NTUlJSUnJygwMDA4ODgiIiMhISI8PDw6Ojo5OTkpKSojIyQ7OzsyMjIpKSssLCw6Ozw1NjlrfLakAAAg2UlEQVR42jR6i3ea6rYvPgANIAhVXh8WvkQlioUiFlFcBtAmoiRNdzxqu9p0J7vrdK29zuPeex77nnvO/35n1r1ndHRktI0jTOacv/l7lCBK5UqVpOha/YxmWK7BC4TQFKVXrbYsnimqxuuMVlOQ0XltWjUdCwRJ1M+tC1KudOs9q6+da2adUewG0SC0SwELfHtgDds93VEuydEbl3QMWeNoYkR7b/0x1ZRobGI3mLwzAhePqTAwhg6aogjNsGy7/jwQ4rkdqe7CWLxF8k9LfMVFyRS7VJqtkrW8Vt/bkR8FZJao16ipknbC3Yw2lM7laO6HBEOadEZ2tpf65c4v8e3u7FyU6qbiNNyCuzXZ6pawgnwgmrpTT/Q7w2EZmiIJ0dzWDI7mhQ80IfRnMu2kzA5r5r1pIFoia+/d93HRYp1GV8TbrkWoU/+jdI0Ff6yGwTjT1Hn8J+8m1rKpGiYPuNiHnMtNMIv+zpsk84MYTNW1/+DpwXLvckdOCMYowVNPREe0QlM8xRHXXFhcNDzupwsSmb5pH+0t0RP2Qk+QtI7F1Qm6JRC6ZPBtPq/dq/kH+jxtCljn9TIpW6rQIgmSVyj6lPICIw4N/taka41PFUInth0je9+jO6Kt1G4/a7V2LEgG02B0pHVuCZrgltSKMuIl5SyufUv9mYuQi+mFgzbBEtFo2g+Dh4sSTrLNu8JPh00sQydpb00tqXBvqRN7Q7kqzcnIxCGnvZt/WmJacoOEO6Dcn8Qre03pOCSQxbMOXUuDNx9SxuLz4W1I18gvjViQ67zV0rxdWL8Te/TQkuo8STS41DR48W7L6YP2uWIqiUV8rd6Gbf/rnegKZeG8TpAM6afhGze9JAOxbLjsnUXEbrZ9vLYd7MT32cPF5mKKxmjy7huaoD9n62GOxni3iIJwv0IzZAZjdZkUtolCNLVfYZNaquFjGszVVf+J0vrz4CawoKdHnOzb0NMH7CDBOybfYNJ4rfeMyFNjkFYVTzMFs87rnPGXLUOeNKRVc0LnU7/UIgelzsy3CMuth0YfvnY0wsD3vODUL3eJcKqHQpm8yM3XZQWJxO6Un9iYloyyLpOwN2obHy6W6gbpcb44XmyC+mg+itAcaprGcrwZCqMj/GmtKn0zPvpTz/Cv1dw21XwP3cRupg3H3MF/S71eTKj1YrdwKdc2Mw0fRmb2sFf8lW3aU6JbIZSEPqvXvjM7G/aApyXlXeqKfMq0g/Su3rUGJPSPrtGElgknrZM3xUXqsAP6zMCNVn5u8aJnSNpJv2uru7t2jfRziW2+GuhqfldUNbPk71olwo+46ePUo1U3WKk/e5YK07F/wGRgcpODmQnIlVeHCWBE4puBi2jq28UKpqiN1/4UOrGz59TNYrrQHtd+11sG40BGD+pXdelNqGOg4NXe8W4eacJV/NS9/2Umtym6WQqveqR9xdCMElpxnbkalM4Vf9uaEcWZaKdyibEIjWKxJZPN95niCL3GiaXyssIrHxoLkqkzLCXULN46/f2h3tQJgyip+Tk9EAjJ9aJshq7t8X45aowSKspMSvPf7r9R8yxNptIaHS5ozuEm6luPDApugyNP8OaqiQ4BjaequXA54SLC83eHIY2r+CZp4409Xqw8Aa2oI7XkCrQi+in0w5AqF/kLNrcUz+qkl/lAobY1jSnx5OJNhyXIz3qfNFlXc0TKaglNwdWkWYt9QQ1Kr6W8zue21iNrdJk+N5oCr2O9nEtWKC7IS5J/zdDEYrmnAYfg6agCy+qcgz7ZofeDc4PbUWSvkshWuAc7OjiUyLkj+RAtdlwXJcjxdpkTTHDhK8lBCi8+JtvDVL1W6elmOM++YS0LuSlaP1oUvAeiW3cFnvTr8EbTz1tsSMYdGeZe40sRWu5uAfj7q+ZoKv2FNQ0p5XY1lmlcigHZqTPpabufEVrNuNPi165w3uCVQJHyJqmSJ7ZHnguqwtCmwViIJijj04ba2JNYtB+yORf5gg1/9t9iw4vUpeqiunSAbf+IBdj/b+iG2qrHvuNP0Vd/+ThVZT/lrvHYjjgDbbyxaqgHNM2uhxa1GW3UedZYhMMwM4mQhltouK+IV4NdbIQNM+8Yv311RZk9kT4tiYR4LkyFcuPpdcjuhUuFqBAWRZa11lcZ3gEBlXywsNhrt+plISZP5DlsV9l4EgY6J3yZPTUcMrgaWAT3oI79eSbGEbcJpr6BD8kyDiVt+G0/hXosQN4NFXKlfWIfsIs0BHODVok1/IGnKFHJYIquh8Xo+2+bkQNTGgWmN/fZ0Y33LSj6lr1GyV7mWIKg7ZTRZPGuhF/zjRNcQ1UPtSYgnWQxSs0yrVhwNDcdGMNSNe2JT3WuzbAM3HykyAajS3Uphf6STKEqxLas9EnmnhA/lyj9Uj+JoY7SVgVmGLl46Rm2u98sbkap2lzAdKBG4r6LgulQOSSjQv1GWdQ0jtDUK/mAaqM1Uqjpu4k3Rvfvxv7YTxLSK+wN3E5jVIzmF23uZ7hiH/sVP49D7tvoKp4S8b1LuvRlivVB/algbhcFITYVXvDpLzpDfplR2uD5V4XJFxpjmIpLc9Y5sB2TpBRix7Bme6GZIq+06v3XzNeTcA4obQIKxrnT4C2JpOqD92dbmSX8MGazly5EsZVMvSU1f4RZwyu8iQXbVdeLlZrjuTT1jrY1uk5c7iZ7RsvhhluqAkq4JpVQAg7RJFtSu+xgJ8Pv6O1j5DkLxT8mkbfyRW5DrQmG7hiDIjCgBsADbjuof6YHLGeV6a5Q1Smx9joUXPpdaaDx97A/Wq00oJkdR7ZYuQRfS533JtxO1erduqWOYIt3wh0wpbLuCNIYkwxbswbikCUu2CDCS+Q+7rgVtfRcm+SOcdKPRlZ/rE7wNVUEE39KTS5uvUKN1PUnkloPkyzhyGQ8qkouEjJ3H/VXdqG6asSRiw3ecMlBvDDt8dDhBHXMwZ2Cajzjr7/76T+IavqPYvz6r7//E/3X3+N//h/0QozbjPgPiir69P/8X3/9F/yv8b/827/++98WItPu5/Hvwd8YPf5bp/2/lX/T/+Of/0MJ/lYTa+L/Ef+d9vN/3/2T6P/+jyTzu/evf6U7vxN7B6pJkRtAF6jUr8I+P8RsP/ptGhfqFk+pQ/DgAy6NJtRYJdXmp4gK7WLqLKJ+MaKhGjOojvL+SnIWrkpy0SLHDe4QuyNzaEA15mLMCcmE8Em+4HdOihW4/ZWuppJEmzeAwcDtv7MuLc9y2V5atvxXNe3S4DUMt5/Qy2LM9kSYKiVWBuKlfp4nxTntpuW03JbIlkiRvBXmT23g1I2OYe6IizUHPIq6zm6mbfsbteKmi/sg9J+ocQBMctGFO7iljo8TPN+z3jxw4do+ZwfqoR9dkNTKHyM305GpTkfhcHexVkPVGEbUOjuo9f0UMPHBFlGEx0SLvJvVRKTwW7PSew5oPme+E42+frJa9cGt2njS3dK5kIif2eYbhuSEQXEqMVfUjhGIuin0G0/W5ezJyJQy3SpMLai4M0JUWb5u1k9tny5bd1pPwYBpQuDCXZl62xg4CdVEAtflXHs6JKmP/pH6mOl796Lgopj0o8d5kKh00hxG3OSdEE/QBo9Hgr8JJqAeLDwJohG5j/DGh61Rc/+tf22/8kEnxHNCEjo0ElvvGfESZkqmz2BDcKV1H1buSkhkdg7p1IMGs2s17nYjpblrWuE2K9WEO/hcRp5e9oOF/QBmOaDtgil+oaU6szPrdwW65fOB0KUTsVUn7LFU7J8e6cxJIl9+FHw5MQMzuQJ+4oxMH3iW/5GK+hWuG0T+gTLs+fAjdtUd58TmIUq04EeyRCYCjkldow234aIgR5bqwrtZosZ+6YEqAmDqatJ9lWasz4IquKALPtd92hGI3Z2BdzzZue+REl1Om4DIWD+RrtUTOJLI+S0jHowXXdAxsGLSd40zYNuEUlOGhrwL6c7tcOtUOvpJCP7QBQS19H+GvZn05ewjlVLz+IGKoC9TyfQjLMBNmXCuqqtTdOSukZW48B0HqgSTCBrBnlFvF4CG2Su7yFzqmJFURK3UmTT3ru050r0ptUpMilYnBJWfl2Bv6kPlUuE1kxxpdzui9AubsR2N2boVSu81OulAwBqoSr1LZ0LLYOomyZHmjqnXlP72s8LnDouEJjtodBvdHaG1jMySYO7crWd90MpCRyCG14vb5IE7Arupw/y/RcCm/Tm3zK6zYj8PYNaGldiUfkB/LHWcmf2lVM+mwyU27a0qq2tscrQ/vzBjN26DnntIrOyGizzXK35yKQdYnUABkyN4saz3WD/viF+eCcsXnIajdWYJWaYHRstIis9CS+tqnFGmz2j5uzfr3Z4prqgK4XOT/PyftvjZqIm8lhkfxJ7Ol3CJF1piYBGAG8wtAk56Drw1YwmOpcz+NdfkSpSLplRXLXHL0Rquj6YW/gabqgK7Dgr6NwtH0B/AN7XrN+MVJ6AmXmUuqmQulrNNYPmH0RoDogydOKLo/QbfYNARSQQKISRCzRXU+q9WWJFL3LZW6u34CkeG97xC0NNGaJ0bvK6SnZS3zPskr5EtuCgjMWR5o2x5BqhKmDWJPRe7JMEOyRb5uUKlHaGVtq5ivSOaSliSXp9SQm2qk8MRJh10MAp9QQ2H5t59J8rjiwSZtoIfMGjlLPVNdYl/LBR0AO6WLGDmkLkIPRE45Y9MftdAK/yNu1Hn6tzOQTesgQ+8fSzB19wO91vCnO23vOWQdwJ63SJrYjdfKFW6W281PKs2k8iT9ai1cgJ4sa3xqdvmtxR8/+D1B8AKc2u+6JftryRhMWSQtoSBgIyyQGyxcnELuAasXN12oSriU4RMz1DD6RL0TSV+om7i1Yt+jEE/jnawM8cX/UhN4nkiv/w9eALrzNhXuQfOzFL0Fi6SjF7/4Qn8rLYBoa85cvgAnkCEBP+HPbEnquVXCZsMS/yzYw2Vru60P/+nJPYKkzZFjmbykzUoEqV836T5q3fP/L383dF82tx18/AZgZczMAgyeWYKmSZIqtHL+e+O4ZRcq9VI3g/qPeCoiK4pcgEqdbS0S/Be54sbVQOuJVPNBblIghzeasNu7h/g+Sz1IdhI5lCwq1nUb3Ji4OCIcqQZqtqJ5w7rXrg/DA9IgVmEGhDgGecEwnCTHffXcXs0V3OCEVzYDKS1vp/oX+ng+6XVU86UjA6FMO2RXOOOrqY1GgPvrAk9HV/BXtCu5RuwF8qgdGDLsBcui4E33ymdBip1X8uKyhIWT8qNRDsXz+gvO9UiEC0d8RG4Tf2x8H4slljgHtCBcxHLTWOYJm5H/fCPCzOgf9qgOUxTRZ0Pc6ha5yLuLVT9ntvIa6gacE99mCovdUumTQdRP4RPsS9129eEe2uSvvGh0bV4Y3QPPhPZMqhZWSMa5R0Hc1SGO4IVOQc0FrirlibTVfKRrYkD8kz3b+X65/QkUNaZdrdl3mCap0Hf3YcCw/LiouJYNbqz88UqeDYv93yO7vvXtgl4XCyAO4ODkY6W+83+LZU//p3/zXNGGrUKClCiOnL27iJZbNWDF02XXAOeFlB7IaADoMH1Yqr+UP9biyZDEa/iJt4MDeIz6GKTdLVBfWGVtRN4fdT2rgReX8UXwF2zOrradm4J0nyTgdPnai3RvzpZvCKDUqjOwD/QA6EDaMCLewX6QWYVnHY1sx1bd8ovYnPm1ZvPH+rE20lWjOCnZ66/xDt0QAl15FjfBcZp+i9OU0RNPQ0t3x2pSNWo8eiYudwsnuP1Hq6iH1LJCJynkYsfgJ0p3pF6SoQk2l+jqE8CPk+ziGJRSKjs+W5AO185umPdkYzlK4wl7TC9NxyyDP7ZoyYVoXiuS6SjnInlLWrwz1i8bGTKXX0AVQWkSfIlglW3zRJRJ8bg5VgE6ZEnqNu9B++0GNQvDQJvFize4ESNKBJP+8vA3LM4AX5SIBq08Mob+7QMTCZx4nwP/64+4BnlZC+8WtlP/CXw6t1PwMwkJ3jhP1FiXLhDF/3I6FGUzO2DSi9ABxKyyL9paZxSEz40ZCPQToDAJu1959k7QdbVxgB4icsu2s4zsTPJhcEDo+N1GX4zSk/wriRh8AqwL62972i9HJHd1ydaLXVzvKvOfGGw5RVcUVMiKXFH4APdkQU/dc5BX0YfKTNZYXCW9mb8bc8mufoQP6BbdQmT99ZjoYfr/go4TgQX9IDgztim7wyFeGMfbNaeqj8Dzs38pgcqwSv2hbqB3oSGKWKy+sesY7p57wAHldqE6NDudk/W7s/zjrK4rZFlFvaGxnSZdHbc1y47qDN6xkoK8O3bfr2j41dlJZ71rB4dlDqapPFa8N6xBrprUdtenUCHwxKNhw1uuTBh+9uU45k4REpQABN2bAO9DSLqoIL26gNroWgup5pUMxHUNSq4Gyz47vBPvilpo5f9OYI2ddAqTqmnxXERxQJ3UK8fHbVE9HagHi3+tqNRoNsArdmAxHA5LwtQo9ZAaNKUTljnokljo2x8scqVpEEIPc01fPCdHOCg0DeWBz8D5TVAAfx8aRH5X2ZYNI3ebKDZdeJ+oBDAxmRqJ30Eh2/DaeAy5diVNMpEDmXiPDsGTzBLXy8eVDdJoIafgx/gxMyQi454QrW56nCyeELgSuNNEmYkflF+t3CZQOVRWjKhIuCclmQSlAXT3+4JGG75B4t/5hQ+ldMP4LsAW6z3XmU6IJJwpnGVnsgUZhoY1fZlwTR8wSU7xRejf2uCx9Z5trVTRRJP9KnEb134dEieil6eCOGWgboI7xsqsqM99jfJLTePjygKlH2CVxxsse9QRzTBFjD/Kjqitr/CCTBt/SJ6nLxz7cKP9pFqBpp0lN5y+adKNsZjrPuroemZauH9aTTFD3EKHW8S55XBLFQAt1jgxTQCTwxmx/JyfsZDN1RroN3VaxpSenpIX7K+ZbL8VdlQDcI4Cbzg3QJLa9yVqNxUelu+EtxLVqeekaAvSJkO6sSVqbUajxqhKshNpvZqoeApF0k/0P0ikkwUcbdwc4A1ejN7Oo0O15kG7hTMoK3hZRBCX7YYeLW0wvcXx/18n/u37yLgzBYVBUvORGli+sfRcX/74uD6P4hq+7xu54TlWJLFzT63uwUDwuEDdOjJQqx7JV+ZjaEAPi7t0MMrR4Q8Rkf18uxD6RK0RKh0hL8YU+DeL97i4pa5ZSyAfXKwZRS/8gXcxdZXm62RBDj8U3sN8x95b5PpPs/mCBKYvpaA50pN5Ct/499AFTtwQ5vgeSh+NHrKIi4NVpwM/XzRaNfJD856lPE6M21zWPguFsH7jbLVyEDfRmt4VwrhCJ5VTYmcSPfGgO5clfN+vbaDZ7sakU5+2vZ2WCDY031NxJarVytfDDVtiafcTGO2rJ/taoL3zChN2qmjxofczTOYQPPVQPh0JVtYgdUQINcSiNEEy58UdYXX1MpWUCEBx7LbcGtAm8XWRQTVOaoV3ySri4RShhs/B/0m4jX6OAwXOvcA09bNSG4czEGv/Wey6V/jbTCNTW6awXdNTcA1GsPe1E9fZdGl7R0vyoVpIdJtfC6d32NNErrvq/R+d65VG+YOwRXppXxOCYyGNSf1K3x6VxAW/vtz4EC1SgCOSPdN62sLsoIzuDfg8GwZAbquVO8HIuFP/ToVoeUB7nnwMF35a1wK1tI6fkrqFKhQdeJpwyls0pIy8AZde3/6LUUbFaYJthyUJSU/kqDXTLQElnn0Jr4B2RVghNrmNmoEn7pXIeshPguXVsvwoTdmClq49JJU3LWhHyWTrJL9bRP6VKv3tZoA/th77p5Jw++OEENvyvWy/pNeExiDUVQaXIRGh8xySZTI36yueFaSXo1uJY0RnXYgEOoWWOJHeaVuX/bGNhHsh2yinznl/++NJcE9j6fBPRcBdq9hb8awNw8U7Bl6GM7x69EDOIIbX/npZ++amlHR9L/35mE/2Ss4gb0xCcY4VyTFLRE796vHysLAamqcyO+aFQyJIDBNslbH2/MrAvZiSEIedc/cqjmv4fbda2pXbv+F5a2szSsdkm9noiNURXt8edUhGUF6fSZWd1IJaXKFwD+49R6eCXD4Bkef7j9tRtNMVgW8BhRz/Qpy1TmeYk0doyjZoJSbePOReVHgkFsCFuQJ+Lgc4BxeAsK/cOiNDRmdNw0ctYhn/nQ498dYI5znzGLoJi1rav7Cn88rL3wLePVtDK5gl77Tki3gHEsIAQ2+IKgarj7Y8W1IQzV5V9N+0TjLqbg68WfKcOmBCOj3JkwJhVIkwDhc+JorXuZEPMEh0vvH3x7iqf+VAwXgd4diZiaJD1zHL9Snx6Wfg4IugreyhabQkcir+y5XgDtdx3Avs7lkeeCBwDvZoTUCXx5QrZkcEqWfYEiEYRs/EphmRALSNGR1Iclgdr5VFoELpzF4++f35w3/j0t5ucW3n2ch4PQCLuUXupsPRR7UA5FjSKrMtPcKAZJfagO4lGE7FH3YKMjorpK0ZxAv+i2JkJhtAMWWWFej4RhPR/cJ3DxwocCvXDi4SGZU4cu+K32XndiFWgopAl+0GApcwf1XvymJcFs39jExIBO4yUjU9MExBLQYc9H+W7+IgdESPRpciT+rKZPebVtaVq+1GYO/5xTAL3HASjNTGIgMvdjWbgc7JvdE1zIFpuC0U9ESiZyzBixzxWxj4Kwh8My34q+FK3KNLtmsA1qyrmKSNQOXCPUZd+ONelBTvFoUI/CYsqa/RhtKiyMf2CgSFqEPk59Y3uqnlZ8gFpswfSYyko23yVZYxzKGxGm49Zqxg1l8oz5Ra9XaRwHkuxepmgyhm0SoNy2KlbcEqK+9QqS9PNx9Ihm9U7gsR55SSJ1FBDNnkuWKxIZ0SDpXuOGwZdoUbOMDPHP4vBAgz2VlSEJAHZGJVbYIg7l/FO5KfIVvxC8pPPxMGcNMoevFDeStt2iqztE10n2TA4dgJH76YS9HDhKHD3iCx6ieFX84BAI3QQnngh76f5ruPQVbr5qZmck/5UjDc26lfrOvUBWy0Ogl8bCoOkMOns81TnC3cuUS9KW8+9A+fe3XYZOFUPG1u5epSSmDLw0s5s2F0W30ANeo+zJkJQz9SPZgzwYpEoktofhGVfmLOAB20boCbW1QWq/NpET/hnMecw/uSyAH4NJc3ECOU4nnkK1fj3S/i5dwb3R7k00AqQQUwt7Ie1qV0aY/VQX0J8hLPy7eBNXMHYZYDNxHZ2Qh6AuXJxq+AeRec/Q+JLhZV6hpXwQEzw7bf5v9uUf2vpq3qlhmy0IIGTkwYdCfSAFmqbdo+3XvDTDjFJde0mbeQLcn2n31xaAqJ0ixO/CLsT4I4G4DoncVTgRGNBtsCcjISWT+oeXZ4Iedw/8OsJI1aPnNKLX/60VvcZb94uasRxCkqlPQ11u1Sa2hHvB80WQENxVyzjns0/PiEByyil21Te6oisk3mNCEMrhouCFO3yEZTHHOCMy9eb/4Tmi8cVf3Lf7P53SY2hX3PSN033As3ETIMLHWumWEO9JXHA2y2SIBlIPpLGG2qvNsCIlIr+B1SWAqRKm2w6Blf7U+zCSBwJrfHG5i8J5Gax/cVonMlon7aHJX/gSvucIncRP93XCqkv7D8IFKFsLiBgHqUpXhE3pYjEcV1dk/JD9zFVCfEaQIVX8Jmfz7IIofcBKQ4OaG+C3xC2veX9CD+iAFXDNaGg9eTVxvkbJRJlW4Nk9Wk13kn696jWppRDe/8pDrYMO9ZyxZ98ReKSz9kWKLLyk2zCZgAniCkLJVX3n1M9DYbomyahWiv/KixRIV9hj/oFz87I+HLznbPTjpa+D+bZQnMuRsljTpv90vQUt/pK7jCFnA30B/jtroSF2/m/gpWn1aQs5WeA6ghzF8SdqWI20fghdSeDOCSCmLgTkfaGgGDmw7nHFkRzGtag57IHS2na06I+gzEphXo1w/Zx2BM/jKL2nZoFjHggtFQjYi8nSVRSXIE58RPbBObXk7uuIL9+rs/5Zo7suJInEUxgsiZZAWS25iBtpEiZeBgDtghEoAE0sjcayNq85M4tbu/LF5h51335PsGzQ09O875+vUS89lkWMyNOFoip2PuyWyMP/iU2XIZdfCCJNDjebDoBLQdpy7QQZC7s9c0wjHJervQNDu2jWzBW5MSAJMr7bP+Iv92BkS/GGgzjEn7MF1IRKFwwzbjbS4/slGOmhx9cZrFu7HSEefojNv3r0UaKfKOWzXsq1zEugbzlMDFsacRJJI/iJlK3vtkZ+PLZIVMFlKA32wbq2Kd5T0uCLZ1CPkAfCdzkz2EYscjDcZq2AWfziN2covN4kXE1lQXPPLTNM1xx3tbiepcO/t3SWm4w87qfh99SL0ZnY+LKFPLPeXVM2mIIoVWt+9Nk0I7nY4O79iGYqxZ8RVz289an6NVdJWnSKZvJQCAuHNiVaDxPAFoH392t9wot5t0/qmU95eEWNbU2udUW5sN9JVqcYlvAIfLeYC33oUzzxZgSktsv21mA7Uly1FA5VnoJFh6N244Wmv3YJGFv/TCPryaw+ZORlpZjQdq/2DYXr3EZskfed0G61P09ipTKmlTQ1067Rg5+PAk5FlQ9e0SWbGf2B/08kqymOTMVOznsALHHNFH4LFRKl2F/NOiYFl9khNHnSu9Ak5sq26Ynl/i2fdTle29Y1ugqmR5Yj4YT9pvslFyYCbw0mNFr5rVQm1LvkG27QMq9ph3t8fmn6r6SQ4oSbr5tz+J1kIawGzDxb6VYOvvWhobDTXfBeNv3b4aNm5XUinsCGqG2q/45m3+LoCOsddFceYhRx1Tsss9PLdPfJdErFMjYd3gddjiP0+XQjcRadZP6bwNLySvunFf20Czy6JqdEW2a96KxdYdOryBv1BjbuUq2yCHeh+6sk7fGmmPi50pe/1l5TyPe5oHW9oPnhPswLyf2TFDdCyYlhwBCstv5C1HwlW7xWoGT9XZt4qVj5WryLPLLD6h/5cMLEjWzgCeAIKNsLak92aBqBsHl4AJwl2N4jfvbSkBExGimv0nFvv09uDScQbjx+w4kPQjgjlW+g9ws9VEJvI2k8N6XxVu0uIwovgTFdunG24gBtaDi+y1YLQwZ8mwbip5fVlO3k0n0AEr/ETbtu8Vjkm+nNSiEb7X/3fMjBL5A8PdgG+/FnbexbFFExmEfetXAnisEKy5z44WVPpQZjSy/jzeGn4yDRsFGqhh87QPaDBWhlo37IFbe/C0xynS91d2tP/AJoJS0sVF6iwAAAAAElFTkSuQmCC");
}
#menu::after {
display: block;
content: '';
padding-top: 80px;
}
#logo {
position: fixed;
bottom: 10px;
right: 10px;
background: rgba(255,255,255,.1);
font-size: 11px;
display: block;
width: 20px;
height: 20px;
line-height: 20px;
text-align: center;
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
border-radius: 20px;
-webkit-box-shadow: 0 0 3px rgba(0,0,0,.2);
-moz-box-shadow: 0 0 3px rgba(0,0,0,.2);
box-shadow: 0 0 3px rgba(0,0,0,.2);
color: inherit;
}
#menu li a {
display: block;
color: white;
padding: 0 35px 0 25px;
-webkit-transition: background 300ms;
-moz-transition: background 300ms;
}
#menu li {
position: relative;
list-style: none;
}
#menu a:hover,
#menu a.active {
text-decoration: none;
background: rgba(255,255,255,.1);
}
#menu li:hover .cov {
opacity: 1;
}
#menu li .dirname {
opacity: .60;
padding-right: 2px;
}
#menu li .basename {
opacity: 1;
}
#menu .cov {
background: rgba(0,0,0,.4);
position: absolute;
top: 0;
right: 8px;
font-size: 9px;
opacity: .6;
text-align: left;
width: 17px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
padding: 2px 3px;
text-align: center;
}
.stats:nth-child(2n) {
display: inline-block;
margin-top: 15px;
border: 1px solid #eee;
padding: 10px;
-webkit-box-shadow: inset 0 0 2px #eee;
-moz-box-shadow: inset 0 0 2px #eee;
box-shadow: inset 0 0 2px #eee;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
.stats div {
float: left;
padding: 0 5px;
}
.stats::after {
display: block;
content: '';
clear: both;
}
.stats .sloc::after {
content: ' SLOC';
color: #b6b6b6;
}
.stats .percentage::after {
content: ' coverage';
color: #b6b6b6;
}
.stats .hits,
.stats .misses {
display: none;
}
.high {
color: #00d4b4;
}
.medium {
color: #e87d0d;
}
.low {
color: #d4081a;
}
.terrible {
color: #d4081a;
font-weight: bold;
}
table {
width: 80%;
margin-top: 10px;
border-collapse: collapse;
border: 1px solid #cbcbcb;
color: #363636;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
table thead {
display: none;
}
table td.line,
table td.hits {
width: 20px;
background: #eaeaea;
text-align: center;
font-size: 11px;
padding: 0 10px;
color: #949494;
}
table td.hits {
width: 10px;
padding: 2px 5px;
color: rgba(0,0,0,.2);
background: #f0f0f0;
}
tr.miss td.line,
tr.miss td.hits {
background: #e6c3c7;
}
tr.miss td {
background: #f8d5d8;
}
td.source {
padding-left: 15px;
line-height: 15px;
white-space: pre;
font: 12px monaco, monospace;
}
code .comment { color: #ddd }
code .init { color: #2F6FAD }
code .string { color: #5890AD }
code .keyword { color: #8A6343 }
code .number { color: #2F6FAD }
</style>
</head>
<body>
<div id="coverage">
<h1 id="overview">Coverage</h1>
<div id="menu">
<li><a href="#overview">overview</a></li>
<li class="template">
<span class="cov high"></span>
<a href=""><span class="dirname"></span><span class="basename"></span></a>
</li>
<li class="">
<span class="cov high">91%</span>
<a href="#/home/luis/noboxout/class/index.js">/home/luis/noboxout/class/index.js</a>
</li><li class="">
<span class="cov high">80%</span>
<a href="#/home/luis/noboxout/class/lib/class.js">/home/luis/noboxout/class/lib/class.js</a>
</li><li class="">
<span class="cov high">73%</span>
<a href="#/home/luis/noboxout/class/lib/events.js">/home/luis/noboxout/class/lib/events.js</a>
</li><li class="">
<span class="cov high">90%</span>
<a href="#/home/luis/noboxout/class/lib/eventize.js">/home/luis/noboxout/class/lib/eventize.js</a>
</li><li class="">
<span class="cov high">95%</span>
<a href="#/home/luis/noboxout/class/lib/iterable.js">/home/luis/noboxout/class/lib/iterable.js</a>
</li></div>
<div id="stats" class="stats high">
<div class="percentage">81.1%</div>
<div class="sloc">689</div>
<div class="hits">559</div>
<div class="misses">130</div>
</div>
<div id="files">
<div class="file template">
<h2></h2>
<div class="stats high">
<div class="percentage"></div>
<div class="sloc"></div>
<div class="hits"></div>
<div class="misses"></div>
</div>
<table id="source">
<thead>
<tr><th>Line</th><th>Hits</th><th>Source</th></tr>
</thead>
<tbody>
<tr class="template"><td class="line"></td><td class="hits"></td><td class="source"></td></tr>
</tbody>
</table>
</div>
<div class="file">
<h2 id="/home/luis/noboxout/class/index.js">/home/luis/noboxout/class/index.js</h2>
<div class="stats high">
<div class="percentage">90.9%</div>
<div class="sloc">11</div>
<div class="hits">10</div>
<div class="misses">1</div>
</div>
<table id="source">
<thead>
<tr><th>Line</th><th>Hits</th><th>Source</th></tr>
</thead>
<tbody>
<tr class="template"><td class="line"></td><td class="hits"></td><td class="source"></td></tr>
<tr class="hit"><td class="line">1</td><td class="hits">3</td><td class="source">(function (browser) {</td></tr><tr class="hit"><td class="line">2</td><td class="hits">3</td><td class="source"> "use strict";</td></tr><tr class=""><td class="line">3</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">4</td><td class="hits">3</td><td class="source"> if (browser) {</td></tr><tr class=""><td class="line">5</td><td class="hits"></td><td class="source"> // for browser variable is in NodeClass</td></tr><tr class="miss"><td class="line">6</td><td class="hits">0</td><td class="source"> return;</td></tr><tr class=""><td class="line">7</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">8</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">9</td><td class="hits">3</td><td class="source"> require("function-enhancements");</td></tr><tr class="hit"><td class="line">10</td><td class="hits">3</td><td class="source"> require("object-enhancements");</td></tr><tr class="hit"><td class="line">11</td><td class="hits">3</td><td class="source"> require("array-enhancements");</td></tr><tr class=""><td class="line">12</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">13</td><td class="hits">3</td><td class="source"> module.exports = require("/home/luis/noboxout/class/./lib/class.js");</td></tr><tr class="hit"><td class="line">14</td><td class="hits">3</td><td class="source"> module.exports.Events = require("/home/luis/noboxout/class/./lib/events.js").Events;</td></tr><tr class="hit"><td class="line">15</td><td class="hits">3</td><td class="source"> module.exports.Eventize = require("/home/luis/noboxout/class/./lib/eventize.js").Eventize;</td></tr><tr class="hit"><td class="line">16</td><td class="hits">3</td><td class="source"> module.exports.Iterable = require("/home/luis/noboxout/class/./lib/iterable.js").Iterable;</td></tr><tr class=""><td class="line">17</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">18</td><td class="hits"></td><td class="source">}("undefined" === typeof module));</td></tr><tr class=""><td class="line">19</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">20</td><td class="hits"></td><td class="source">// this is for browser initialization!</td></tr><tr class=""><td class="line">21</td><td class="hits"></td><td class="source">var NodeClass = {};</td></tr></tbody>
</table>
</div><div class="file">
<h2 id="/home/luis/noboxout/class/lib/class.js">/home/luis/noboxout/class/lib/class.js</h2>
<div class="stats high">
<div class="percentage">80.1%</div>
<div class="sloc">407</div>
<div class="hits">326</div>
<div class="misses">81</div>
</div>
<table id="source">
<thead>
<tr><th>Line</th><th>Hits</th><th>Source</th></tr>
</thead>
<tbody>
<tr class="template"><td class="line"></td><td class="hits"></td><td class="source"></td></tr>
<tr class="hit"><td class="line">1</td><td class="hits">3</td><td class="source">(function (exports) {</td></tr><tr class="hit"><td class="line">2</td><td class="hits">3</td><td class="source"> "use strict";</td></tr><tr class=""><td class="line">3</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">4</td><td class="hits">3</td><td class="source"> var object = require("object-enhancements"),</td></tr><tr class=""><td class="line">5</td><td class="hits"></td><td class="source"> debug = true,</td></tr><tr class=""><td class="line">6</td><td class="hits"></td><td class="source"> __inspect = require("util").inspect,</td></tr><tr class=""><td class="line">7</td><td class="hits"></td><td class="source"> __typeof,</td></tr><tr class=""><td class="line">8</td><td class="hits"></td><td class="source"> __instanceof,</td></tr><tr class=""><td class="line">9</td><td class="hits"></td><td class="source"> __class,</td></tr><tr class=""><td class="line">10</td><td class="hits"></td><td class="source"> __extends,</td></tr><tr class=""><td class="line">11</td><td class="hits"></td><td class="source"> __get_abstract,</td></tr><tr class=""><td class="line">12</td><td class="hits"></td><td class="source"> __remove_abstract,</td></tr><tr class=""><td class="line">13</td><td class="hits"></td><td class="source"> __abstract,</td></tr><tr class=""><td class="line">14</td><td class="hits"></td><td class="source"> __alias,</td></tr><tr class=""><td class="line">15</td><td class="hits"></td><td class="source"> __static,</td></tr><tr class=""><td class="line">16</td><td class="hits"></td><td class="source"> __method,</td></tr><tr class=""><td class="line">17</td><td class="hits"></td><td class="source"> __property,</td></tr><tr class=""><td class="line">18</td><td class="hits"></td><td class="source"> __accessor,</td></tr><tr class=""><td class="line">19</td><td class="hits"></td><td class="source"> __clone = object.clone,</td></tr><tr class=""><td class="line">20</td><td class="hits"></td><td class="source"> __typed_clone,</td></tr><tr class=""><td class="line">21</td><td class="hits"></td><td class="source"> __typed_clone_or_merge,</td></tr><tr class=""><td class="line">22</td><td class="hits"></td><td class="source"> __configurator,</td></tr><tr class=""><td class="line">23</td><td class="hits"></td><td class="source"> __add_toogle_conf,</td></tr><tr class=""><td class="line">24</td><td class="hits"></td><td class="source"> __add_fun_conf,</td></tr><tr class=""><td class="line">25</td><td class="hits"></td><td class="source"> __rtypeof,</td></tr><tr class=""><td class="line">26</td><td class="hits"></td><td class="source"> defineProperty = Object.defineProperty,</td></tr><tr class=""><td class="line">27</td><td class="hits"></td><td class="source"> classes = {},</td></tr><tr class=""><td class="line">28</td><td class="hits"></td><td class="source"> __object_typeof = object.typeof;</td></tr><tr class=""><td class="line">29</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">30</td><td class="hits">3</td><td class="source"> exports.getClass = function (name) {</td></tr><tr class="miss"><td class="line">31</td><td class="hits">0</td><td class="source"> return classes[name] || null;</td></tr><tr class=""><td class="line">32</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">33</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">34</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">35</td><td class="hits"></td><td class="source"> * get the type of val. note: undefined/nan is null</td></tr><tr class=""><td class="line">36</td><td class="hits"></td><td class="source"> *</td></tr><tr class=""><td class="line">37</td><td class="hits"></td><td class="source"> * @param {mixed}</td></tr><tr class=""><td class="line">38</td><td class="hits"></td><td class="source"> * val</td></tr><tr class=""><td class="line">39</td><td class="hits"></td><td class="source"> * @returns {String}</td></tr><tr class=""><td class="line">40</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">41</td><td class="hits">3</td><td class="source"> exports["typeof"] = __typeof = function (value) {</td></tr><tr class="hit"><td class="line">42</td><td class="hits">151</td><td class="source"> var type = __object_typeof(value);</td></tr><tr class=""><td class="line">43</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">44</td><td class="hits">151</td><td class="source"> if ("object" === type && value.$class !== undefined) {</td></tr><tr class="hit"><td class="line">45</td><td class="hits">3</td><td class="source"> return "instance";</td></tr><tr class=""><td class="line">46</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">47</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">48</td><td class="hits">148</td><td class="source"> if ("function" === type && value.$class !== undefined) {</td></tr><tr class="hit"><td class="line">49</td><td class="hits">3</td><td class="source"> return "class";</td></tr><tr class=""><td class="line">50</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">51</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">52</td><td class="hits">145</td><td class="source"> return type;</td></tr><tr class=""><td class="line">53</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">54</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">55</td><td class="hits">3</td><td class="source"> exports.__typed_clone = __typed_clone = function (obj, types) {</td></tr><tr class="hit"><td class="line">56</td><td class="hits">33</td><td class="source"> var i,</td></tr><tr class=""><td class="line">57</td><td class="hits"></td><td class="source"> type,</td></tr><tr class=""><td class="line">58</td><td class="hits"></td><td class="source"> ar,</td></tr><tr class=""><td class="line">59</td><td class="hits"></td><td class="source"> cobj,</td></tr><tr class=""><td class="line">60</td><td class="hits"></td><td class="source"> key;</td></tr><tr class=""><td class="line">61</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">62</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">63</td><td class="hits">33</td><td class="source"> type = types.__ || types;</td></tr><tr class=""><td class="line">64</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">65</td><td class="hits">33</td><td class="source"> switch (type) {</td></tr><tr class=""><td class="line">66</td><td class="hits"></td><td class="source"> case "null":</td></tr><tr class="miss"><td class="line">67</td><td class="hits">0</td><td class="source"> return null;</td></tr><tr class=""><td class="line">68</td><td class="hits"></td><td class="source"> case "string":</td></tr><tr class="hit"><td class="line">69</td><td class="hits">2</td><td class="source"> return obj.substring();</td></tr><tr class=""><td class="line">70</td><td class="hits"></td><td class="source"> case "number":</td></tr><tr class="hit"><td class="line">71</td><td class="hits">12</td><td class="source"> return 0 + obj;</td></tr><tr class=""><td class="line">72</td><td class="hits"></td><td class="source"> case "boolean":</td></tr><tr class="hit"><td class="line">73</td><td class="hits">3</td><td class="source"> return obj ? true : false;</td></tr><tr class=""><td class="line">74</td><td class="hits"></td><td class="source"> case "array":</td></tr><tr class="hit"><td class="line">75</td><td class="hits">6</td><td class="source"> i = obj.length;</td></tr><tr class=""><td class="line">76</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">77</td><td class="hits">6</td><td class="source"> if (i === 0) {</td></tr><tr class="hit"><td class="line">78</td><td class="hits">2</td><td class="source"> return [];</td></tr><tr class=""><td class="line">79</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">80</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">81</td><td class="hits">4</td><td class="source"> ar = new Array(i);</td></tr><tr class="hit"><td class="line">82</td><td class="hits">4</td><td class="source"> while (i--) {</td></tr><tr class="hit"><td class="line">83</td><td class="hits">8</td><td class="source"> ar[i] = __typed_clone(obj[i], types[i]);</td></tr><tr class=""><td class="line">84</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">85</td><td class="hits">4</td><td class="source"> return ar;</td></tr><tr class=""><td class="line">86</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">87</td><td class="hits"></td><td class="source"> case "object":</td></tr><tr class="hit"><td class="line">88</td><td class="hits">10</td><td class="source"> cobj = {};</td></tr><tr class="hit"><td class="line">89</td><td class="hits">10</td><td class="source"> for (key in obj) {</td></tr><tr class="hit"><td class="line">90</td><td class="hits">14</td><td class="source"> cobj[key] = __typed_clone(obj[key], types[key]);</td></tr><tr class=""><td class="line">91</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">92</td><td class="hits">10</td><td class="source"> return cobj;</td></tr><tr class=""><td class="line">93</td><td class="hits"></td><td class="source"> case "class":</td></tr><tr class=""><td class="line">94</td><td class="hits"></td><td class="source"> case "function":</td></tr><tr class="miss"><td class="line">95</td><td class="hits">0</td><td class="source"> return obj;</td></tr><tr class=""><td class="line">96</td><td class="hits"></td><td class="source"> case "regexp":</td></tr><tr class="miss"><td class="line">97</td><td class="hits">0</td><td class="source"> return new RegExp(obj.source);</td></tr><tr class=""><td class="line">98</td><td class="hits"></td><td class="source"> case "date":</td></tr><tr class="miss"><td class="line">99</td><td class="hits">0</td><td class="source"> return new Date(obj);</td></tr><tr class=""><td class="line">100</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">101</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">102</td><td class="hits">0</td><td class="source"> throw new Error("type (" + JSON.stringify(types) + ") cannot be cloned");</td></tr><tr class=""><td class="line">103</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">104</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">105</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">106</td><td class="hits">3</td><td class="source"> exports.__typed_clone_or_merge = __typed_clone_or_merge = function (obj, merge, types) {</td></tr><tr class="hit"><td class="line">107</td><td class="hits">38</td><td class="source"> var i,</td></tr><tr class=""><td class="line">108</td><td class="hits"></td><td class="source"> type,</td></tr><tr class=""><td class="line">109</td><td class="hits"></td><td class="source"> ar,</td></tr><tr class=""><td class="line">110</td><td class="hits"></td><td class="source"> cobj,</td></tr><tr class=""><td class="line">111</td><td class="hits"></td><td class="source"> key,</td></tr><tr class=""><td class="line">112</td><td class="hits"></td><td class="source"> ar_merge,</td></tr><tr class=""><td class="line">113</td><td class="hits"></td><td class="source"> obj_merge;</td></tr><tr class=""><td class="line">114</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">115</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">116</td><td class="hits">38</td><td class="source"> type = types.__ || types;</td></tr><tr class=""><td class="line">117</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">118</td><td class="hits">38</td><td class="source"> switch (type) {</td></tr><tr class=""><td class="line">119</td><td class="hits"></td><td class="source"> case "string":</td></tr><tr class="hit"><td class="line">120</td><td class="hits">6</td><td class="source"> return (merge !== undefined ? merge : obj) + "";</td></tr><tr class=""><td class="line">121</td><td class="hits"></td><td class="source"> case "number":</td></tr><tr class="hit"><td class="line">122</td><td class="hits">20</td><td class="source"> return 0 + (merge !== undefined ? merge : obj);</td></tr><tr class=""><td class="line">123</td><td class="hits"></td><td class="source"> case "boolean":</td></tr><tr class="miss"><td class="line">124</td><td class="hits">0</td><td class="source"> return merge !== undefined ? (merge ? true : false) : (obj ? true : false);</td></tr><tr class=""><td class="line">125</td><td class="hits"></td><td class="source"> case "null":</td></tr><tr class=""><td class="line">126</td><td class="hits"></td><td class="source"> //be sure is not a class</td></tr><tr class="hit"><td class="line">127</td><td class="hits">3</td><td class="source"> if (merge && merge.$class) {</td></tr><tr class="miss"><td class="line">128</td><td class="hits">0</td><td class="source"> return merge;</td></tr><tr class=""><td class="line">129</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">130</td><td class="hits">3</td><td class="source"> return object.clone(merge);</td></tr><tr class=""><td class="line">131</td><td class="hits"></td><td class="source"> case "array":</td></tr><tr class="hit"><td class="line">132</td><td class="hits">3</td><td class="source"> i = obj.length;</td></tr><tr class=""><td class="line">133</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">134</td><td class="hits">3</td><td class="source"> if (i === 0) {</td></tr><tr class="hit"><td class="line">135</td><td class="hits">1</td><td class="source"> return [];</td></tr><tr class=""><td class="line">136</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">137</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">138</td><td class="hits">2</td><td class="source"> ar = new Array(i);</td></tr><tr class="hit"><td class="line">139</td><td class="hits">2</td><td class="source"> ar_merge = merge || [];</td></tr><tr class="hit"><td class="line">140</td><td class="hits">2</td><td class="source"> while (i--) {</td></tr><tr class="hit"><td class="line">141</td><td class="hits">4</td><td class="source"> ar[i] = __typed_clone_or_merge(obj[i], ar_merge[i], types[i]);</td></tr><tr class=""><td class="line">142</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">143</td><td class="hits">2</td><td class="source"> return ar;</td></tr><tr class=""><td class="line">144</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">145</td><td class="hits"></td><td class="source"> case "object":</td></tr><tr class="hit"><td class="line">146</td><td class="hits">6</td><td class="source"> cobj = {};</td></tr><tr class="hit"><td class="line">147</td><td class="hits">6</td><td class="source"> obj_merge = merge || {};</td></tr><tr class="hit"><td class="line">148</td><td class="hits">6</td><td class="source"> for (key in obj) {</td></tr><tr class="hit"><td class="line">149</td><td class="hits">10</td><td class="source"> cobj[key] = __typed_clone_or_merge(obj[key], obj_merge[key], types[key]);</td></tr><tr class=""><td class="line">150</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">151</td><td class="hits">6</td><td class="source"> return cobj;</td></tr><tr class=""><td class="line">152</td><td class="hits"></td><td class="source"> case "class":</td></tr><tr class=""><td class="line">153</td><td class="hits"></td><td class="source"> case "function":</td></tr><tr class="miss"><td class="line">154</td><td class="hits">0</td><td class="source"> return merge !== undefined ? merge : obj;</td></tr><tr class=""><td class="line">155</td><td class="hits"></td><td class="source"> case "regexp":</td></tr><tr class="miss"><td class="line">156</td><td class="hits">0</td><td class="source"> return new RegExp(merge !== undefined ? merge.source : obj.source);</td></tr><tr class=""><td class="line">157</td><td class="hits"></td><td class="source"> case "date":</td></tr><tr class="miss"><td class="line">158</td><td class="hits">0</td><td class="source"> return new Date(merge !== undefined ? merge : obj);</td></tr><tr class=""><td class="line">159</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">160</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">161</td><td class="hits">0</td><td class="source"> throw new Error("type (" + JSON.stringify(types) + ") cannot be cloned");</td></tr><tr class=""><td class="line">162</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">163</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">164</td><td class="hits">3</td><td class="source"> exports.__rtypeof = __rtypeof = function (obj) {</td></tr><tr class="hit"><td class="line">165</td><td class="hits">79</td><td class="source"> var type = __typeof(obj),</td></tr><tr class=""><td class="line">166</td><td class="hits"></td><td class="source"> ret,</td></tr><tr class=""><td class="line">167</td><td class="hits"></td><td class="source"> key,</td></tr><tr class=""><td class="line">168</td><td class="hits"></td><td class="source"> i,</td></tr><tr class=""><td class="line">169</td><td class="hits"></td><td class="source"> max;</td></tr><tr class=""><td class="line">170</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">171</td><td class="hits">79</td><td class="source"> if (type === "object") {</td></tr><tr class="hit"><td class="line">172</td><td class="hits">12</td><td class="source"> ret = {__: type};</td></tr><tr class=""><td class="line">173</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">174</td><td class="hits">12</td><td class="source"> for (key in obj) {</td></tr><tr class="hit"><td class="line">175</td><td class="hits">17</td><td class="source"> ret[key] = __rtypeof(obj[key]);</td></tr><tr class=""><td class="line">176</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">177</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">178</td><td class="hits">12</td><td class="source"> return ret;</td></tr><tr class=""><td class="line">179</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">180</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">181</td><td class="hits">67</td><td class="source"> if (type === "array") {</td></tr><tr class="hit"><td class="line">182</td><td class="hits">8</td><td class="source"> ret = {__: type};</td></tr><tr class=""><td class="line">183</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">184</td><td class="hits">8</td><td class="source"> for (i = 0, max = obj.length; i < max; ++i) {</td></tr><tr class="hit"><td class="line">185</td><td class="hits">8</td><td class="source"> ret[i] = __rtypeof(obj[i]);</td></tr><tr class=""><td class="line">186</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">187</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">188</td><td class="hits">8</td><td class="source"> return ret;</td></tr><tr class=""><td class="line">189</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">190</td><td class="hits">59</td><td class="source"> return type;</td></tr><tr class=""><td class="line">191</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">192</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">193</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">194</td><td class="hits"></td><td class="source"> * Return is cls is instance of cls_name. To use it you must use the Class</td></tr><tr class=""><td class="line">195</td><td class="hits"></td><td class="source"> * constructor.</td></tr><tr class=""><td class="line">196</td><td class="hits"></td><td class="source"> *</td></tr><tr class=""><td class="line">197</td><td class="hits"></td><td class="source"> * @param ClassInstance cls</td></tr><tr class=""><td class="line">198</td><td class="hits"></td><td class="source"> * @param String|Class cls_name</td></tr><tr class=""><td class="line">199</td><td class="hits"></td><td class="source"> * @returns Boolean</td></tr><tr class=""><td class="line">200</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">201</td><td class="hits">3</td><td class="source"> exports["instanceof"] = __instanceof = function (cls, cls_name) {</td></tr><tr class="hit"><td class="line">202</td><td class="hits">9</td><td class="source"> if (!cls || !cls_name) {</td></tr><tr class="miss"><td class="line">203</td><td class="hits">0</td><td class="source"> return false;</td></tr><tr class=""><td class="line">204</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">205</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">206</td><td class="hits">9</td><td class="source"> var name = cls.$class || null,</td></tr><tr class=""><td class="line">207</td><td class="hits"></td><td class="source"> $inheritance;</td></tr><tr class=""><td class="line">208</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">209</td><td class="hits">9</td><td class="source"> if (name === null) {</td></tr><tr class="miss"><td class="line">210</td><td class="hits">0</td><td class="source"> return false;</td></tr><tr class=""><td class="line">211</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">212</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">213</td><td class="hits"></td><td class="source"> // cls_name could be a class</td></tr><tr class="hit"><td class="line">214</td><td class="hits">9</td><td class="source"> if ("string" !== typeof cls_name) {</td></tr><tr class="hit"><td class="line">215</td><td class="hits">5</td><td class="source"> cls_name = cls_name.$class || null;</td></tr><tr class="hit"><td class="line">216</td><td class="hits">5</td><td class="source"> if (cls_name === null) {</td></tr><tr class="miss"><td class="line">217</td><td class="hits">0</td><td class="source"> return false;</td></tr><tr class=""><td class="line">218</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">219</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">220</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">221</td><td class="hits">9</td><td class="source"> if (name === cls_name) {</td></tr><tr class="hit"><td class="line">222</td><td class="hits">5</td><td class="source"> return true;</td></tr><tr class=""><td class="line">223</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">224</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">225</td><td class="hits">4</td><td class="source"> $inheritance = cls.$inheritance;</td></tr><tr class=""><td class="line">226</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">227</td><td class="hits">4</td><td class="source"> if ($inheritance === null) {</td></tr><tr class="miss"><td class="line">228</td><td class="hits">0</td><td class="source"> return false;</td></tr><tr class=""><td class="line">229</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">230</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">231</td><td class="hits">4</td><td class="source"> return $inheritance.indexOf(cls_name) !== -1;</td></tr><tr class=""><td class="line">232</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">233</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">234</td><td class="hits"></td><td class="source"> // performance version, this speed up this a lot!!</td></tr><tr class="hit"><td class="line">235</td><td class="hits">3</td><td class="source"> function __clone_descriptors(descriptor, clone_value) {</td></tr><tr class=""><td class="line">236</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">237</td><td class="hits">30</td><td class="source"> var out = {};</td></tr><tr class="hit"><td class="line">238</td><td class="hits">30</td><td class="source"> if (descriptor.value !== undefined) {</td></tr><tr class="hit"><td class="line">239</td><td class="hits">28</td><td class="source"> out.value = clone_value === true ? __clone(descriptor.value) : descriptor.value;</td></tr><tr class="hit"><td class="line">240</td><td class="hits">28</td><td class="source"> out.writable = descriptor.writable === true;</td></tr><tr class=""><td class="line">241</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">242</td><td class="hits">2</td><td class="source"> out.set = descriptor.set;</td></tr><tr class="hit"><td class="line">243</td><td class="hits">2</td><td class="source"> out.get = descriptor.get;</td></tr><tr class=""><td class="line">244</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">245</td><td class="hits">30</td><td class="source"> out.enumerable = descriptor.enumerable === true;</td></tr><tr class="hit"><td class="line">246</td><td class="hits">30</td><td class="source"> out.configurable = descriptor.configurable === true;</td></tr><tr class=""><td class="line">247</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">248</td><td class="hits">30</td><td class="source"> return out;</td></tr><tr class=""><td class="line">249</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">250</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">251</td><td class="hits">3</td><td class="source"> exports.$interface = function (name, methods) {</td></tr><tr class="hit"><td class="line">252</td><td class="hits">1</td><td class="source"> var $self = function () {</td></tr><tr class="hit"><td class="line">253</td><td class="hits">1</td><td class="source"> throw new Error("interfaces cannot be instanced");</td></tr><tr class=""><td class="line">254</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">255</td><td class="hits"></td><td class="source"> enum_class_props = debug === true,</td></tr><tr class=""><td class="line">256</td><td class="hits"></td><td class="source"> i;</td></tr><tr class=""><td class="line">257</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">258</td><td class="hits">1</td><td class="source"> $self.$class = $self.prototype.$class = name;</td></tr><tr class=""><td class="line">259</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">260</td><td class="hits">1</td><td class="source"> classes[name] = $self;</td></tr><tr class=""><td class="line">261</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">262</td><td class="hits">1</td><td class="source"> defineProperty($self.prototype, "$class", {</td></tr><tr class=""><td class="line">263</td><td class="hits"></td><td class="source"> value: name,</td></tr><tr class=""><td class="line">264</td><td class="hits"></td><td class="source"> writable : false,</td></tr><tr class=""><td class="line">265</td><td class="hits"></td><td class="source"> enumerable : false,</td></tr><tr class=""><td class="line">266</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">267</td><td class="hits"></td><td class="source"> });</td></tr><tr class="hit"><td class="line">268</td><td class="hits">1</td><td class="source"> $self.$class = $self.prototype.$class;</td></tr><tr class=""><td class="line">269</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">270</td><td class="hits">1</td><td class="source"> defineProperty($self.prototype, "$inheritance", {</td></tr><tr class=""><td class="line">271</td><td class="hits"></td><td class="source"> value: [name],</td></tr><tr class=""><td class="line">272</td><td class="hits"></td><td class="source"> writable : true,</td></tr><tr class=""><td class="line">273</td><td class="hits"></td><td class="source"> enumerable : false,</td></tr><tr class=""><td class="line">274</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">275</td><td class="hits"></td><td class="source"> });</td></tr><tr class="hit"><td class="line">276</td><td class="hits">1</td><td class="source"> $self.$inheritance = $self.prototype.$inheritance;</td></tr><tr class=""><td class="line">277</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">278</td><td class="hits">1</td><td class="source"> defineProperty($self, "$$", {</td></tr><tr class=""><td class="line">279</td><td class="hits"></td><td class="source"> value: {</td></tr><tr class=""><td class="line">280</td><td class="hits"></td><td class="source"> methods: [],</td></tr><tr class=""><td class="line">281</td><td class="hits"></td><td class="source"> abstracts: [],</td></tr><tr class=""><td class="line">282</td><td class="hits"></td><td class="source"> configurators: {}</td></tr><tr class=""><td class="line">283</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">284</td><td class="hits"></td><td class="source"> writable : false,</td></tr><tr class=""><td class="line">285</td><td class="hits"></td><td class="source"> enumerable : enum_class_props,</td></tr><tr class=""><td class="line">286</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">287</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">288</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">289</td><td class="hits"></td><td class="source"> // helpers</td></tr><tr class="hit"><td class="line">290</td><td class="hits">1</td><td class="source"> $self.abstract = function (name, method) {</td></tr><tr class="miss"><td class="line">291</td><td class="hits">0</td><td class="source"> __abstract(this, name, method);</td></tr><tr class="miss"><td class="line">292</td><td class="hits">0</td><td class="source"> return this;</td></tr><tr class=""><td class="line">293</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">294</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">295</td><td class="hits">1</td><td class="source"> $self.toString = function () {</td></tr><tr class="miss"><td class="line">296</td><td class="hits">0</td><td class="source"> return "[interface " + name + "]";</td></tr><tr class=""><td class="line">297</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">298</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">299</td><td class="hits">1</td><td class="source"> if (methods) {</td></tr><tr class="miss"><td class="line">300</td><td class="hits">0</td><td class="source"> for (i in methods) {</td></tr><tr class="miss"><td class="line">301</td><td class="hits">0</td><td class="source"> __abstract($self, i, methods[i]);</td></tr><tr class=""><td class="line">302</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">303</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">304</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">305</td><td class="hits">1</td><td class="source"> return $self;</td></tr><tr class=""><td class="line">306</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">307</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">308</td><td class="hits">3</td><td class="source"> exports.$class = __class = function (name, extend, implement, initialize, autoset, seal) {</td></tr><tr class="hit"><td class="line">309</td><td class="hits">27</td><td class="source"> if (classes[name]) {</td></tr><tr class="miss"><td class="line">310</td><td class="hits">0</td><td class="source"> throw new Error("You cannot have the same class name, use namespaces ej: namespace/class");</td></tr><tr class=""><td class="line">311</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">312</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">313</td><td class="hits">27</td><td class="source"> if ("function" === typeof extend) {</td></tr><tr class=""><td class="line">314</td><td class="hits"></td><td class="source"> // (name, initialize, autoset, seal)</td></tr><tr class="hit"><td class="line">315</td><td class="hits">1</td><td class="source"> seal = initialize;</td></tr><tr class="hit"><td class="line">316</td><td class="hits">1</td><td class="source"> autoset = implement;</td></tr><tr class="hit"><td class="line">317</td><td class="hits">1</td><td class="source"> initialize = extend;</td></tr><tr class="hit"><td class="line">318</td><td class="hits">1</td><td class="source"> extend = null;</td></tr><tr class="hit"><td class="line">319</td><td class="hits">1</td><td class="source"> implement = null;</td></tr><tr class="hit"><td class="line">320</td><td class="hits">26</td><td class="source"> } else if ("function" === typeof implement) {</td></tr><tr class=""><td class="line">321</td><td class="hits"></td><td class="source"> // (name, extend, initialize, autoset)</td></tr><tr class="miss"><td class="line">322</td><td class="hits">0</td><td class="source"> seal = autoset;</td></tr><tr class="miss"><td class="line">323</td><td class="hits">0</td><td class="source"> autoset = initialize;</td></tr><tr class="miss"><td class="line">324</td><td class="hits">0</td><td class="source"> initialize = implement;</td></tr><tr class="miss"><td class="line">325</td><td class="hits">0</td><td class="source"> implement = null;</td></tr><tr class=""><td class="line">326</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">327</td><td class="hits">26</td><td class="source"> implement = implement || null;</td></tr><tr class="hit"><td class="line">328</td><td class="hits">26</td><td class="source"> extend = extend || null;</td></tr><tr class="hit"><td class="line">329</td><td class="hits">26</td><td class="source"> initialize = initialize || null;</td></tr><tr class=""><td class="line">330</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">331</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">332</td><td class="hits">27</td><td class="source"> if ("function" === typeof initialize) {</td></tr><tr class="hit"><td class="line">333</td><td class="hits">14</td><td class="source"> autoset = autoset === undefined ? false : autoset;</td></tr><tr class=""><td class="line">334</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">335</td><td class="hits">13</td><td class="source"> autoset = autoset === undefined ? true : autoset;</td></tr><tr class=""><td class="line">336</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">337</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">338</td><td class="hits">27</td><td class="source"> var $self,</td></tr><tr class=""><td class="line">339</td><td class="hits"></td><td class="source"> i,</td></tr><tr class=""><td class="line">340</td><td class="hits"></td><td class="source"> max,</td></tr><tr class=""><td class="line">341</td><td class="hits"></td><td class="source"> enum_class_props = debug === true,</td></tr><tr class=""><td class="line">342</td><td class="hits"></td><td class="source"> parent_descriptor = {</td></tr><tr class=""><td class="line">343</td><td class="hits"></td><td class="source"> value: null,</td></tr><tr class=""><td class="line">344</td><td class="hits"></td><td class="source"> writable : true,</td></tr><tr class=""><td class="line">345</td><td class="hits"></td><td class="source"> enumerable : false,</td></tr><tr class=""><td class="line">346</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">347</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">348</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">349</td><td class="hits"></td><td class="source"> // use named argument to sepeed up things a bit :)</td></tr><tr class="hit"><td class="line">350</td><td class="hits">27</td><td class="source"> $self = function (options, a2, a3, a4) {</td></tr><tr class="hit"><td class="line">351</td><td class="hits">35</td><td class="source"> var i,</td></tr><tr class=""><td class="line">352</td><td class="hits"></td><td class="source"> max,</td></tr><tr class=""><td class="line">353</td><td class="hits"></td><td class="source"> $ = $self.$$,</td></tr><tr class=""><td class="line">354</td><td class="hits"></td><td class="source"> prop = $.properties,</td></tr><tr class=""><td class="line">355</td><td class="hits"></td><td class="source"> descriptors,</td></tr><tr class=""><td class="line">356</td><td class="hits"></td><td class="source"> descriptor,</td></tr><tr class=""><td class="line">357</td><td class="hits"></td><td class="source"> clon_desc;</td></tr><tr class=""><td class="line">358</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">359</td><td class="hits">35</td><td class="source"> if ($.abstracts.length) {</td></tr><tr class="hit"><td class="line">360</td><td class="hits">3</td><td class="source"> console.error("(node-class) instance: abstract methods found");</td></tr><tr class="hit"><td class="line">361</td><td class="hits">3</td><td class="source"> for (i = 0, max = $.abstracts.length; i < max; ++i) {</td></tr><tr class="hit"><td class="line">362</td><td class="hits">3</td><td class="source"> console.error("(node-class)", $.abstracts[i].name, $.abstracts[i].lambda.toString());</td></tr><tr class=""><td class="line">363</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">364</td><td class="hits">3</td><td class="source"> throw new Error("need to implement method above");</td></tr><tr class=""><td class="line">365</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">366</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">367</td><td class="hits">32</td><td class="source"> if (prop.length) {</td></tr><tr class="hit"><td class="line">368</td><td class="hits">30</td><td class="source"> descriptors = $.descriptors;</td></tr><tr class="hit"><td class="line">369</td><td class="hits">30</td><td class="source"> if (!autoset || !options) {</td></tr><tr class="hit"><td class="line">370</td><td class="hits">20</td><td class="source"> for (i = 0, max = prop.length; i < max; ++i) {</td></tr><tr class="hit"><td class="line">371</td><td class="hits">49</td><td class="source"> descriptor = descriptors[i];</td></tr><tr class="hit"><td class="line">372</td><td class="hits">49</td><td class="source"> name = prop[i];</td></tr><tr class="hit"><td class="line">373</td><td class="hits">49</td><td class="source"> this[name] = this[name];</td></tr><tr class=""><td class="line">374</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">375</td><td class="hits"></td><td class="source"> // clone arrays and objects</td></tr><tr class="hit"><td class="line">376</td><td class="hits">49</td><td class="source"> if (descriptor.type && ("object" === descriptor.type.__ || "array" === descriptor.type.__)) {</td></tr><tr class="hit"><td class="line">377</td><td class="hits">9</td><td class="source"> this[name] = __typed_clone(this[name], descriptor.type);</td></tr><tr class=""><td class="line">378</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">379</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">380</td><td class="hits">49</td><td class="source"> if (descriptor.configurable === false) {</td></tr><tr class="hit"><td class="line">381</td><td class="hits">26</td><td class="source"> clon_desc = __clone_descriptors(descriptor, true);</td></tr><tr class=""><td class="line">382</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">383</td><td class="hits">26</td><td class="source"> delete this[name];</td></tr><tr class="hit"><td class="line">384</td><td class="hits">26</td><td class="source"> defineProperty(this, name, clon_desc);</td></tr><tr class=""><td class="line">385</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">386</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">387</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">388</td><td class="hits">10</td><td class="source"> for (i = 0, max = prop.length; i < max; ++i) {</td></tr><tr class="hit"><td class="line">389</td><td class="hits">25</td><td class="source"> descriptor = descriptors[i];</td></tr><tr class="hit"><td class="line">390</td><td class="hits">25</td><td class="source"> name = prop[i];</td></tr><tr class="hit"><td class="line">391</td><td class="hits">25</td><td class="source"> this[name] = this[name];</td></tr><tr class=""><td class="line">392</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">393</td><td class="hits">25</td><td class="source"> if (descriptor.configurable === false) {</td></tr><tr class="hit"><td class="line">394</td><td class="hits">4</td><td class="source"> clon_desc = __clone_descriptors(descriptor);</td></tr><tr class=""><td class="line">395</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">396</td><td class="hits">4</td><td class="source"> if (clon_desc.value !== undefined) {</td></tr><tr class="hit"><td class="line">397</td><td class="hits">3</td><td class="source"> clon_desc.value = __typed_clone_or_merge(this[name], options[name], descriptor.type);</td></tr><tr class=""><td class="line">398</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">399</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">400</td><td class="hits">4</td><td class="source"> delete this[name];</td></tr><tr class=""><td class="line">401</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">402</td><td class="hits">4</td><td class="source"> defineProperty(this, name, clon_desc);</td></tr><tr class=""><td class="line">403</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">404</td><td class="hits"></td><td class="source"> //setter/getter</td></tr><tr class="hit"><td class="line">405</td><td class="hits">4</td><td class="source"> if (descriptor.value === undefined && descriptor.set) {</td></tr><tr class="hit"><td class="line">406</td><td class="hits">1</td><td class="source"> this[name] = options[name];</td></tr><tr class=""><td class="line">407</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">408</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">409</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">410</td><td class="hits">21</td><td class="source"> this[name] = __typed_clone_or_merge(this[name], options[name], descriptor.type);</td></tr><tr class=""><td class="line">411</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">412</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">413</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">414</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">415</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">416</td><td class="hits">32</td><td class="source"> defineProperty(this, "__parent", parent_descriptor);</td></tr><tr class=""><td class="line">417</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">418</td><td class="hits">32</td><td class="source"> if (this.initialize) {</td></tr><tr class="hit"><td class="line">419</td><td class="hits">17</td><td class="source"> switch (arguments.length) {</td></tr><tr class=""><td class="line">420</td><td class="hits"></td><td class="source"> case 0:</td></tr><tr class="hit"><td class="line">421</td><td class="hits">13</td><td class="source"> this.initialize();</td></tr><tr class="hit"><td class="line">422</td><td class="hits">13</td><td class="source"> break;</td></tr><tr class=""><td class="line">423</td><td class="hits"></td><td class="source"> case 1:</td></tr><tr class="hit"><td class="line">424</td><td class="hits">4</td><td class="source"> this.initialize(options);</td></tr><tr class="hit"><td class="line">425</td><td class="hits">4</td><td class="source"> break;</td></tr><tr class=""><td class="line">426</td><td class="hits"></td><td class="source"> case 2:</td></tr><tr class="miss"><td class="line">427</td><td class="hits">0</td><td class="source"> this.initialize(options, a2);</td></tr><tr class="miss"><td class="line">428</td><td class="hits">0</td><td class="source"> break;</td></tr><tr class=""><td class="line">429</td><td class="hits"></td><td class="source"> case 3:</td></tr><tr class="miss"><td class="line">430</td><td class="hits">0</td><td class="source"> this.initialize(options, a2, a3);</td></tr><tr class="miss"><td class="line">431</td><td class="hits">0</td><td class="source"> break;</td></tr><tr class=""><td class="line">432</td><td class="hits"></td><td class="source"> case 4:</td></tr><tr class="miss"><td class="line">433</td><td class="hits">0</td><td class="source"> this.initialize(options, a2, a3, a4);</td></tr><tr class="miss"><td class="line">434</td><td class="hits">0</td><td class="source"> break;</td></tr><tr class=""><td class="line">435</td><td class="hits"></td><td class="source"> default:</td></tr><tr class="miss"><td class="line">436</td><td class="hits">0</td><td class="source"> this.initialize.apply(this, arguments);</td></tr><tr class="miss"><td class="line">437</td><td class="hits">0</td><td class="source"> break;</td></tr><tr class=""><td class="line">438</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">439</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">440</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">441</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">442</td><td class="hits">32</td><td class="source"> if (seal) {</td></tr><tr class="hit"><td class="line">443</td><td class="hits">2</td><td class="source"> Object.seal(this);</td></tr><tr class=""><td class="line">444</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">445</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">446</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">447</td><td class="hits">27</td><td class="source"> classes[name] = $self;</td></tr><tr class=""><td class="line">448</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">449</td><td class="hits">27</td><td class="source"> defineProperty($self.prototype, "$class", {</td></tr><tr class=""><td class="line">450</td><td class="hits"></td><td class="source"> value: name,</td></tr><tr class=""><td class="line">451</td><td class="hits"></td><td class="source"> writable : false,</td></tr><tr class=""><td class="line">452</td><td class="hits"></td><td class="source"> enumerable : false,</td></tr><tr class=""><td class="line">453</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">454</td><td class="hits"></td><td class="source"> });</td></tr><tr class="hit"><td class="line">455</td><td class="hits">27</td><td class="source"> $self.$class = $self.prototype.$class;</td></tr><tr class=""><td class="line">456</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">457</td><td class="hits">27</td><td class="source"> defineProperty($self.prototype, "$inheritance", {</td></tr><tr class=""><td class="line">458</td><td class="hits"></td><td class="source"> value: [name],</td></tr><tr class=""><td class="line">459</td><td class="hits"></td><td class="source"> writable : true,</td></tr><tr class=""><td class="line">460</td><td class="hits"></td><td class="source"> enumerable : false,</td></tr><tr class=""><td class="line">461</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">462</td><td class="hits"></td><td class="source"> });</td></tr><tr class="hit"><td class="line">463</td><td class="hits">27</td><td class="source"> $self.$inheritance = $self.prototype.$inheritance;</td></tr><tr class=""><td class="line">464</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">465</td><td class="hits">27</td><td class="source"> defineProperty($self.prototype, "__parent", parent_descriptor);</td></tr><tr class=""><td class="line">466</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">467</td><td class="hits">27</td><td class="source"> defineProperty($self.prototype, "$self", {</td></tr><tr class=""><td class="line">468</td><td class="hits"></td><td class="source"> value: $self,</td></tr><tr class=""><td class="line">469</td><td class="hits"></td><td class="source"> writable : false,</td></tr><tr class=""><td class="line">470</td><td class="hits"></td><td class="source"> enumerable : false,</td></tr><tr class=""><td class="line">471</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">472</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">473</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">474</td><td class="hits">27</td><td class="source"> defineProperty($self, "$$", {</td></tr><tr class=""><td class="line">475</td><td class="hits"></td><td class="source"> value: {</td></tr><tr class=""><td class="line">476</td><td class="hits"></td><td class="source"> autoset: autoset,</td></tr><tr class=""><td class="line">477</td><td class="hits"></td><td class="source"> properties: [],</td></tr><tr class=""><td class="line">478</td><td class="hits"></td><td class="source"> prop_numerables: [],</td></tr><tr class=""><td class="line">479</td><td class="hits"></td><td class="source"> descriptors: [],</td></tr><tr class=""><td class="line">480</td><td class="hits"></td><td class="source"> methods: [],</td></tr><tr class=""><td class="line">481</td><td class="hits"></td><td class="source"> abstracts: [],</td></tr><tr class=""><td class="line">482</td><td class="hits"></td><td class="source"> statics: [],</td></tr><tr class=""><td class="line">483</td><td class="hits"></td><td class="source"> configurators: {}</td></tr><tr class=""><td class="line">484</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">485</td><td class="hits"></td><td class="source"> writable : false,</td></tr><tr class=""><td class="line">486</td><td class="hits"></td><td class="source"> enumerable : enum_class_props,</td></tr><tr class=""><td class="line">487</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">488</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">489</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">490</td><td class="hits">27</td><td class="source"> if (extend) {</td></tr><tr class="hit"><td class="line">491</td><td class="hits">20</td><td class="source"> for (i = 0, max = extend.length; i < max; ++i) {</td></tr><tr class="hit"><td class="line">492</td><td class="hits">6</td><td class="source"> __extends($self, extend[i]);</td></tr><tr class=""><td class="line">493</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">494</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">495</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">496</td><td class="hits">27</td><td class="source"> if (implement) {</td></tr><tr class="hit"><td class="line">497</td><td class="hits">20</td><td class="source"> for (i = 0, max = implement.length; i < max; ++i) {</td></tr><tr class="hit"><td class="line">498</td><td class="hits">1</td><td class="source"> __extends($self, implement[i]);</td></tr><tr class=""><td class="line">499</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">500</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">501</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">502</td><td class="hits">27</td><td class="source"> if (initialize) {</td></tr><tr class="hit"><td class="line">503</td><td class="hits">14</td><td class="source"> __method($self, "initialize", initialize);</td></tr><tr class=""><td class="line">504</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">505</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">506</td><td class="hits"></td><td class="source"> // helpers</td></tr><tr class="hit"><td class="line">507</td><td class="hits">27</td><td class="source"> $self.prototype.inspect = function () {</td></tr><tr class="miss"><td class="line">508</td><td class="hits">0</td><td class="source"> return __inspect(object.extract(this, $self.$$.prop_numerables));</td></tr><tr class=""><td class="line">509</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">510</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">511</td><td class="hits">27</td><td class="source"> $self.prototype.serialize = function () {</td></tr><tr class="miss"><td class="line">512</td><td class="hits">0</td><td class="source"> return object.extract(this, $self.$$.properties);</td></tr><tr class=""><td class="line">513</td><td class="hits"></td><td class="source"> };</td></tr><tr class="hit"><td class="line">514</td><td class="hits">27</td><td class="source"> $self.prototype.unserialize = function (obj) {</td></tr><tr class="miss"><td class="line">515</td><td class="hits">0</td><td class="source"> var i,</td></tr><tr class=""><td class="line">516</td><td class="hits"></td><td class="source"> name,</td></tr><tr class=""><td class="line">517</td><td class="hits"></td><td class="source"> prop = $self.$$.properties,</td></tr><tr class=""><td class="line">518</td><td class="hits"></td><td class="source"> descriptors = $self.$$.descriptors;</td></tr><tr class=""><td class="line">519</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">520</td><td class="hits">0</td><td class="source"> for (i = 0, max = prop.length; i < max; ++i) {</td></tr><tr class="miss"><td class="line">521</td><td class="hits">0</td><td class="source"> name = prop[i];</td></tr><tr class="miss"><td class="line">522</td><td class="hits">0</td><td class="source"> this[name] = __typed_clone_or_merge(this[name], obj[name], descriptors[i].type);</td></tr><tr class=""><td class="line">523</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">524</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">525</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">526</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">527</td><td class="hits">27</td><td class="source"> defineProperty($self, "method", {</td></tr><tr class=""><td class="line">528</td><td class="hits"></td><td class="source"> value: function (name, method) {</td></tr><tr class="hit"><td class="line">529</td><td class="hits">1</td><td class="source"> __method(this, name, method);</td></tr><tr class="hit"><td class="line">530</td><td class="hits">1</td><td class="source"> return this;</td></tr><tr class=""><td class="line">531</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">532</td><td class="hits"></td><td class="source"> writable : false,</td></tr><tr class=""><td class="line">533</td><td class="hits"></td><td class="source"> enumerable : enum_class_props,</td></tr><tr class=""><td class="line">534</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">535</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">536</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">537</td><td class="hits">27</td><td class="source"> defineProperty($self, "static", {</td></tr><tr class=""><td class="line">538</td><td class="hits"></td><td class="source"> value: function (name, method) {</td></tr><tr class="miss"><td class="line">539</td><td class="hits">0</td><td class="source"> __static(this, name, method);</td></tr><tr class="miss"><td class="line">540</td><td class="hits">0</td><td class="source"> return this;</td></tr><tr class=""><td class="line">541</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">542</td><td class="hits"></td><td class="source"> writable : false,</td></tr><tr class=""><td class="line">543</td><td class="hits"></td><td class="source"> enumerable : enum_class_props,</td></tr><tr class=""><td class="line">544</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">545</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">546</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">547</td><td class="hits">27</td><td class="source"> defineProperty($self, "property", {</td></tr><tr class=""><td class="line">548</td><td class="hits"></td><td class="source"> value: function (name, _default, meta) {</td></tr><tr class="hit"><td class="line">549</td><td class="hits">3</td><td class="source"> __property(this, name, _default, meta);</td></tr><tr class="hit"><td class="line">550</td><td class="hits">3</td><td class="source"> return this;</td></tr><tr class=""><td class="line">551</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">552</td><td class="hits"></td><td class="source"> writable : false,</td></tr><tr class=""><td class="line">553</td><td class="hits"></td><td class="source"> enumerable : enum_class_props,</td></tr><tr class=""><td class="line">554</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">555</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">556</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">557</td><td class="hits">27</td><td class="source"> defineProperty($self, "accessor", {</td></tr><tr class=""><td class="line">558</td><td class="hits"></td><td class="source"> value: function (name, meta) {</td></tr><tr class="miss"><td class="line">559</td><td class="hits">0</td><td class="source"> __accessor(this, name, meta);</td></tr><tr class="miss"><td class="line">560</td><td class="hits">0</td><td class="source"> return this;</td></tr><tr class=""><td class="line">561</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">562</td><td class="hits"></td><td class="source"> writable : false,</td></tr><tr class=""><td class="line">563</td><td class="hits"></td><td class="source"> enumerable : enum_class_props,</td></tr><tr class=""><td class="line">564</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">565</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">566</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">567</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">568</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">569</td><td class="hits">27</td><td class="source"> defineProperty($self, "alias", {</td></tr><tr class=""><td class="line">570</td><td class="hits"></td><td class="source"> value: function (existing, alias) {</td></tr><tr class="hit"><td class="line">571</td><td class="hits">30</td><td class="source"> __alias(this, existing, alias);</td></tr><tr class="hit"><td class="line">572</td><td class="hits">30</td><td class="source"> return this;</td></tr><tr class=""><td class="line">573</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">574</td><td class="hits"></td><td class="source"> writable : false,</td></tr><tr class=""><td class="line">575</td><td class="hits"></td><td class="source"> enumerable : enum_class_props,</td></tr><tr class=""><td class="line">576</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">577</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">578</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">579</td><td class="hits">27</td><td class="source"> defineProperty($self, "abstract", {</td></tr><tr class=""><td class="line">580</td><td class="hits"></td><td class="source"> value: function (name, method) {</td></tr><tr class="hit"><td class="line">581</td><td class="hits">1</td><td class="source"> __abstract(this, name, method);</td></tr><tr class="hit"><td class="line">582</td><td class="hits">1</td><td class="source"> return this;</td></tr><tr class=""><td class="line">583</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">584</td><td class="hits"></td><td class="source"> writable : false,</td></tr><tr class=""><td class="line">585</td><td class="hits"></td><td class="source"> enumerable : enum_class_props,</td></tr><tr class=""><td class="line">586</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">587</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">588</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">589</td><td class="hits">27</td><td class="source"> defineProperty($self, "configurator", {</td></tr><tr class=""><td class="line">590</td><td class="hits"></td><td class="source"> value: function (name, configurables, functions) {</td></tr><tr class="hit"><td class="line">591</td><td class="hits">2</td><td class="source"> __configurator(this, name, configurables, functions);</td></tr><tr class="hit"><td class="line">592</td><td class="hits">2</td><td class="source"> return this;</td></tr><tr class=""><td class="line">593</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">594</td><td class="hits"></td><td class="source"> writable : false,</td></tr><tr class=""><td class="line">595</td><td class="hits"></td><td class="source"> enumerable : enum_class_props,</td></tr><tr class=""><td class="line">596</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">597</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">598</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">599</td><td class="hits">27</td><td class="source"> defineProperty($self, "toString", {</td></tr><tr class=""><td class="line">600</td><td class="hits"></td><td class="source"> value: function () {</td></tr><tr class="miss"><td class="line">601</td><td class="hits">0</td><td class="source"> return "[class " + name + "]";</td></tr><tr class=""><td class="line">602</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">603</td><td class="hits"></td><td class="source"> writable : false,</td></tr><tr class=""><td class="line">604</td><td class="hits"></td><td class="source"> enumerable : enum_class_props,</td></tr><tr class=""><td class="line">605</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">606</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">607</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">608</td><td class="hits">27</td><td class="source"> return $self;</td></tr><tr class=""><td class="line">609</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">610</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">611</td><td class="hits">3</td><td class="source"> exports.abstract = __abstract = function ($class, name, method) {</td></tr><tr class="hit"><td class="line">612</td><td class="hits">6</td><td class="source"> $class.$$.abstracts.push({</td></tr><tr class=""><td class="line">613</td><td class="hits"></td><td class="source"> name: name,</td></tr><tr class=""><td class="line">614</td><td class="hits"></td><td class="source"> lambda: method</td></tr><tr class=""><td class="line">615</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">616</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">617</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">618</td><td class="hits">3</td><td class="source"> exports.get_abstract = __get_abstract = function ($class, name) {</td></tr><tr class="hit"><td class="line">619</td><td class="hits">143</td><td class="source"> var i,</td></tr><tr class=""><td class="line">620</td><td class="hits"></td><td class="source"> max,</td></tr><tr class=""><td class="line">621</td><td class="hits"></td><td class="source"> abs = $class.$$.abstracts;</td></tr><tr class=""><td class="line">622</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">623</td><td class="hits">143</td><td class="source"> for (i = 0, max = abs.length; i < max; ++i) {</td></tr><tr class="hit"><td class="line">624</td><td class="hits">6</td><td class="source"> if (abs[i].name === name) {</td></tr><tr class="hit"><td class="line">625</td><td class="hits">4</td><td class="source"> return abs[i];</td></tr><tr class=""><td class="line">626</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">627</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">628</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">629</td><td class="hits">139</td><td class="source"> return null;</td></tr><tr class=""><td class="line">630</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">631</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">632</td><td class="hits">3</td><td class="source"> exports.__add_toogle_conf = __add_toogle_conf = function (configurator, name, value) {</td></tr><tr class="hit"><td class="line">633</td><td class="hits">2</td><td class="source"> configurator.prototype[name] = value;</td></tr><tr class="hit"><td class="line">634</td><td class="hits">2</td><td class="source"> defineProperty(configurator.prototype, name.toUpperCase(), {</td></tr><tr class=""><td class="line">635</td><td class="hits"></td><td class="source"> get: function () {</td></tr><tr class="hit"><td class="line">636</td><td class="hits">4</td><td class="source"> this[name] = !this[name];</td></tr><tr class="hit"><td class="line">637</td><td class="hits">4</td><td class="source"> return this;</td></tr><tr class=""><td class="line">638</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">639</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">640</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">641</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">642</td><td class="hits">3</td><td class="source"> exports.__add_fun_conf = __add_fun_conf = function (configurator, name, value) {</td></tr><tr class="hit"><td class="line">643</td><td class="hits">1</td><td class="source"> configurator.prototype[name] = value;</td></tr><tr class="hit"><td class="line">644</td><td class="hits">1</td><td class="source"> defineProperty(configurator.prototype, name.toUpperCase(), {</td></tr><tr class=""><td class="line">645</td><td class="hits"></td><td class="source"> value: function (val) {</td></tr><tr class="hit"><td class="line">646</td><td class="hits">1</td><td class="source"> this[name] = val;</td></tr><tr class="hit"><td class="line">647</td><td class="hits">1</td><td class="source"> return this;</td></tr><tr class=""><td class="line">648</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">649</td><td class="hits"></td><td class="source"> enumerable: false</td></tr><tr class=""><td class="line">650</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">651</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">652</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">653</td><td class="hits">3</td><td class="source"> exports.__configurator = __configurator = function ($class, name, configurables, functions) {</td></tr><tr class="hit"><td class="line">654</td><td class="hits">2</td><td class="source"> var Config = function () {</td></tr><tr class="hit"><td class="line">655</td><td class="hits">4</td><td class="source"> var i;</td></tr><tr class="hit"><td class="line">656</td><td class="hits">4</td><td class="source"> for (i in configurables) {</td></tr><tr class="hit"><td class="line">657</td><td class="hits">7</td><td class="source"> this[i] = configurables[i];</td></tr><tr class=""><td class="line">658</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">659</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">660</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">661</td><td class="hits"></td><td class="source"> // for usage outside class environment</td></tr><tr class="hit"><td class="line">662</td><td class="hits">2</td><td class="source"> if ($class.$$) {</td></tr><tr class="hit"><td class="line">663</td><td class="hits">2</td><td class="source"> $class.$$.configurators[name] = Config;</td></tr><tr class=""><td class="line">664</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">665</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">666</td><td class="hits">2</td><td class="source"> defineProperty($class, name, {</td></tr><tr class=""><td class="line">667</td><td class="hits"></td><td class="source"> get: function () {</td></tr><tr class="hit"><td class="line">668</td><td class="hits">4</td><td class="source"> return new Config();</td></tr><tr class=""><td class="line">669</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">670</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">671</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">672</td><td class="hits">2</td><td class="source"> functions = functions || null;</td></tr><tr class=""><td class="line">673</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">674</td><td class="hits">2</td><td class="source"> object.each(configurables, function (v, k) {</td></tr><tr class="hit"><td class="line">675</td><td class="hits">3</td><td class="source"> if (functions && functions.indexOf(k) !== -1) {</td></tr><tr class="hit"><td class="line">676</td><td class="hits">1</td><td class="source"> __add_fun_conf(Config, k, v);</td></tr><tr class=""><td class="line">677</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">678</td><td class="hits">2</td><td class="source"> __add_toogle_conf(Config, k, v);</td></tr><tr class=""><td class="line">679</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">680</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">681</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">682</td><td class="hits">2</td><td class="source"> return Config;</td></tr><tr class=""><td class="line">683</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">684</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">685</td><td class="hits">3</td><td class="source"> __remove_abstract = function ($class, name) {</td></tr><tr class="hit"><td class="line">686</td><td class="hits">3</td><td class="source"> var i,</td></tr><tr class=""><td class="line">687</td><td class="hits"></td><td class="source"> max,</td></tr><tr class=""><td class="line">688</td><td class="hits"></td><td class="source"> abs = $class.$$.abstracts;</td></tr><tr class=""><td class="line">689</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">690</td><td class="hits">3</td><td class="source"> for (i = 0, max = abs.length; i < max; ++i) {</td></tr><tr class="hit"><td class="line">691</td><td class="hits">3</td><td class="source"> if (abs[i].name === name) {</td></tr><tr class="hit"><td class="line">692</td><td class="hits">3</td><td class="source"> $class.$$.abstracts.splice(i, 1);</td></tr><tr class="hit"><td class="line">693</td><td class="hits">3</td><td class="source"> return true;</td></tr><tr class=""><td class="line">694</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">695</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">696</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">697</td><td class="hits">0</td><td class="source"> return false;</td></tr><tr class=""><td class="line">698</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">699</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">700</td><td class="hits">3</td><td class="source"> exports.property = __property = function ($class, name, _default, meta) {</td></tr><tr class="hit"><td class="line">701</td><td class="hits">48</td><td class="source"> var $ = $class.$$;</td></tr><tr class=""><td class="line">702</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">703</td><td class="hits">48</td><td class="source"> if ($.methods.indexOf(name) !== -1) {</td></tr><tr class="miss"><td class="line">704</td><td class="hits">0</td><td class="source"> throw new Error("Cannot define property[" + name + "] with the same name as a method");</td></tr><tr class=""><td class="line">705</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">706</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">707</td><td class="hits">48</td><td class="source"> $.properties.push(name);</td></tr><tr class="hit"><td class="line">708</td><td class="hits">48</td><td class="source"> meta = meta || {};</td></tr><tr class="hit"><td class="line">709</td><td class="hits">48</td><td class="source"> meta.type = __rtypeof(_default);</td></tr><tr class=""><td class="line">710</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">711</td><td class="hits">48</td><td class="source"> if (meta.enumerable === false) {</td></tr><tr class="hit"><td class="line">712</td><td class="hits">15</td><td class="source"> meta.configurable = false;</td></tr><tr class=""><td class="line">713</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">714</td><td class="hits">15</td><td class="source"> if (meta.value === undefined) {</td></tr><tr class="hit"><td class="line">715</td><td class="hits">12</td><td class="source"> meta.value = _default;</td></tr><tr class=""><td class="line">716</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">717</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">718</td><td class="hits">15</td><td class="source"> $.descriptors.push(meta);</td></tr><tr class=""><td class="line">719</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">720</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">721</td><td class="hits">33</td><td class="source"> $.descriptors.push(meta);</td></tr><tr class=""><td class="line">722</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">723</td><td class="hits">33</td><td class="source"> $class.prototype[name] = _default;</td></tr><tr class="hit"><td class="line">724</td><td class="hits">33</td><td class="source"> $.prop_numerables.push(name);</td></tr><tr class=""><td class="line">725</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">726</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">727</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">728</td><td class="hits">3</td><td class="source"> exports.accessor = __accessor = function ($class, name, meta) {</td></tr><tr class="miss"><td class="line">729</td><td class="hits">0</td><td class="source"> var $ = $class.$$;</td></tr><tr class=""><td class="line">730</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">731</td><td class="hits">0</td><td class="source"> if ($.methods.indexOf(name) !== -1) {</td></tr><tr class="miss"><td class="line">732</td><td class="hits">0</td><td class="source"> throw new Error("Cannot define accessor[" + name + "] with the same name as a method");</td></tr><tr class=""><td class="line">733</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">734</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">735</td><td class="hits">0</td><td class="source"> if (meta.get === undefined && meta.set === undefined) {</td></tr><tr class="miss"><td class="line">736</td><td class="hits">0</td><td class="source"> throw new Error("meta.get or meta.set must be defined as functions");</td></tr><tr class=""><td class="line">737</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">738</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">739</td><td class="hits">0</td><td class="source"> if (meta.get !== undefined && "function" !== typeof meta.get) {</td></tr><tr class="miss"><td class="line">740</td><td class="hits">0</td><td class="source"> throw new Error("meta.get must be a function");</td></tr><tr class=""><td class="line">741</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">742</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">743</td><td class="hits">0</td><td class="source"> if (meta.set !== undefined && "function" !== typeof meta.set) {</td></tr><tr class="miss"><td class="line">744</td><td class="hits">0</td><td class="source"> throw new Error("meta.set must be a function");</td></tr><tr class=""><td class="line">745</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">746</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">747</td><td class="hits">0</td><td class="source"> meta.configurable = false;</td></tr><tr class="miss"><td class="line">748</td><td class="hits">0</td><td class="source"> meta.enumerable = meta.enumerable === false || true;</td></tr><tr class=""><td class="line">749</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">750</td><td class="hits">0</td><td class="source"> $.properties.push(name);</td></tr><tr class="miss"><td class="line">751</td><td class="hits">0</td><td class="source"> $.descriptors.push(meta);</td></tr><tr class=""><td class="line">752</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">753</td><td class="hits">0</td><td class="source"> if (meta.enumerable) {</td></tr><tr class="miss"><td class="line">754</td><td class="hits">0</td><td class="source"> $.prop_numerables.push(name);</td></tr><tr class=""><td class="line">755</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">756</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">757</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">758</td><td class="hits">3</td><td class="source"> exports.alias = __alias = function ($class, existing, alias) {</td></tr><tr class="hit"><td class="line">759</td><td class="hits">30</td><td class="source"> var $ = $class.$$;</td></tr><tr class=""><td class="line">760</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">761</td><td class="hits">30</td><td class="source"> if ($.methods.indexOf(existing) === -1) {</td></tr><tr class="miss"><td class="line">762</td><td class="hits">0</td><td class="source"> throw new Error("method[" + existing + "] not found, cannot be aliased");</td></tr><tr class=""><td class="line">763</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">764</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">765</td><td class="hits">30</td><td class="source"> if ($.methods.indexOf(alias) !== -1) {</td></tr><tr class="miss"><td class="line">766</td><td class="hits">0</td><td class="source"> throw new Error("method[" + alias + "] found, cannot be aliased if target exists");</td></tr><tr class=""><td class="line">767</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">768</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">769</td><td class="hits">30</td><td class="source"> $class.prototype[alias] = $class.prototype[existing];</td></tr><tr class="hit"><td class="line">770</td><td class="hits">30</td><td class="source"> $.methods.push(alias);</td></tr><tr class=""><td class="line">771</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">772</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">773</td><td class="hits">3</td><td class="source"> exports["static"] = __static = function ($class, name, method) {</td></tr><tr class="hit"><td class="line">774</td><td class="hits">2</td><td class="source"> $class[name] = method;</td></tr><tr class="hit"><td class="line">775</td><td class="hits">2</td><td class="source"> $class.$$.statics.push(name);</td></tr><tr class=""><td class="line">776</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">777</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">778</td><td class="hits">3</td><td class="source"> exports.method = __method = function ($class, name, method) {</td></tr><tr class="hit"><td class="line">779</td><td class="hits">143</td><td class="source"> var $ = $class.$$;</td></tr><tr class=""><td class="line">780</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">781</td><td class="hits">143</td><td class="source"> if ($.properties.indexOf(name) !== -1) {</td></tr><tr class="miss"><td class="line">782</td><td class="hits">0</td><td class="source"> throw new Error("Cannot define method[" + name + "] with the same name as a property");</td></tr><tr class=""><td class="line">783</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">784</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">785</td><td class="hits"></td><td class="source"> // is in abstract ?</td></tr><tr class="hit"><td class="line">786</td><td class="hits">143</td><td class="source"> var abs = __get_abstract($class, name),</td></tr><tr class=""><td class="line">787</td><td class="hits"></td><td class="source"> parent;</td></tr><tr class=""><td class="line">788</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">789</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">790</td><td class="hits">143</td><td class="source"> if (abs) {</td></tr><tr class=""><td class="line">791</td><td class="hits"></td><td class="source"> //check parameter count</td></tr><tr class="hit"><td class="line">792</td><td class="hits">4</td><td class="source"> if (abs.lambda.length !== method.length) {</td></tr><tr class="hit"><td class="line">793</td><td class="hits">1</td><td class="source"> throw new Error("[" + name + "] method has: " + method.length + " parameter(s) expected: " + abs.lambda.length);</td></tr><tr class=""><td class="line">794</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">795</td><td class="hits"></td><td class="source"> //remove</td></tr><tr class="hit"><td class="line">796</td><td class="hits">3</td><td class="source"> __remove_abstract($class, name);</td></tr><tr class=""><td class="line">797</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">798</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">799</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">800</td><td class="hits">142</td><td class="source"> if ($.methods.indexOf(name) !== -1) {</td></tr><tr class=""><td class="line">801</td><td class="hits"></td><td class="source"> // parent support</td></tr><tr class="hit"><td class="line">802</td><td class="hits">6</td><td class="source"> parent = $class.prototype[name];</td></tr><tr class=""><td class="line">803</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">804</td><td class="hits">6</td><td class="source"> $class.prototype[name] = function (a1, a2, a3, a4) {</td></tr><tr class="hit"><td class="line">805</td><td class="hits">7</td><td class="source"> var swap_parent = this.__parent,</td></tr><tr class=""><td class="line">806</td><td class="hits"></td><td class="source"> ret;</td></tr><tr class="hit"><td class="line">807</td><td class="hits">7</td><td class="source"> this.__parent = parent;</td></tr><tr class=""><td class="line">808</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">809</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">810</td><td class="hits">7</td><td class="source"> switch (arguments.length) {</td></tr><tr class=""><td class="line">811</td><td class="hits"></td><td class="source"> case 0:</td></tr><tr class="hit"><td class="line">812</td><td class="hits">4</td><td class="source"> ret = method.call(this);</td></tr><tr class="hit"><td class="line">813</td><td class="hits">4</td><td class="source"> break;</td></tr><tr class=""><td class="line">814</td><td class="hits"></td><td class="source"> case 1:</td></tr><tr class="hit"><td class="line">815</td><td class="hits">3</td><td class="source"> ret = method.call(this, a1);</td></tr><tr class="hit"><td class="line">816</td><td class="hits">3</td><td class="source"> break;</td></tr><tr class=""><td class="line">817</td><td class="hits"></td><td class="source"> case 2:</td></tr><tr class="miss"><td class="line">818</td><td class="hits">0</td><td class="source"> ret = method.call(this, a1, a2);</td></tr><tr class="miss"><td class="line">819</td><td class="hits">0</td><td class="source"> break;</td></tr><tr class=""><td class="line">820</td><td class="hits"></td><td class="source"> case 3:</td></tr><tr class="miss"><td class="line">821</td><td class="hits">0</td><td class="source"> ret = method.call(this, a1, a2, a3);</td></tr><tr class="miss"><td class="line">822</td><td class="hits">0</td><td class="source"> break;</td></tr><tr class=""><td class="line">823</td><td class="hits"></td><td class="source"> case 4:</td></tr><tr class="miss"><td class="line">824</td><td class="hits">0</td><td class="source"> ret = method.call(this, a1, a2, a3, a4);</td></tr><tr class="miss"><td class="line">825</td><td class="hits">0</td><td class="source"> break;</td></tr><tr class=""><td class="line">826</td><td class="hits"></td><td class="source"> default:</td></tr><tr class="miss"><td class="line">827</td><td class="hits">0</td><td class="source"> ret = method.apply(this, arguments);</td></tr><tr class="miss"><td class="line">828</td><td class="hits">0</td><td class="source"> break;</td></tr><tr class=""><td class="line">829</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">830</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">831</td><td class="hits">7</td><td class="source"> if (swap_parent === undefined) {</td></tr><tr class="miss"><td class="line">832</td><td class="hits">0</td><td class="source"> delete this.__parent;</td></tr><tr class=""><td class="line">833</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">834</td><td class="hits">7</td><td class="source"> this.__parent = swap_parent;</td></tr><tr class=""><td class="line">835</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">836</td><td class="hits">7</td><td class="source"> return ret;</td></tr><tr class=""><td class="line">837</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">838</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">839</td><td class="hits">136</td><td class="source"> $class.prototype[name] = method;</td></tr><tr class=""><td class="line">840</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">841</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">842</td><td class="hits">142</td><td class="source"> $.methods.push(name);</td></tr><tr class=""><td class="line">843</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">844</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">845</td><td class="hits">3</td><td class="source"> module.exports["extends"] = exports.Extends = __extends = function ($class, implement) {</td></tr><tr class="hit"><td class="line">846</td><td class="hits">7</td><td class="source"> if (!classes[implement]) {</td></tr><tr class="miss"><td class="line">847</td><td class="hits">0</td><td class="source"> throw new Error("class not found");</td></tr><tr class=""><td class="line">848</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">849</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">850</td><td class="hits">7</td><td class="source"> var $target = classes[implement],</td></tr><tr class=""><td class="line">851</td><td class="hits"></td><td class="source"> $ = $target.$$,</td></tr><tr class=""><td class="line">852</td><td class="hits"></td><td class="source"> properties = $.properties || [], // interfaces dont have it</td></tr><tr class=""><td class="line">853</td><td class="hits"></td><td class="source"> descriptors = $.descriptors || [], // interfaces dont have it</td></tr><tr class=""><td class="line">854</td><td class="hits"></td><td class="source"> methods = $.methods || {}, // interfaces dont have it</td></tr><tr class=""><td class="line">855</td><td class="hits"></td><td class="source"> abstracts = $.abstracts,</td></tr><tr class=""><td class="line">856</td><td class="hits"></td><td class="source"> statics = $.statics || [],</td></tr><tr class=""><td class="line">857</td><td class="hits"></td><td class="source"> proto = $target.prototype,</td></tr><tr class=""><td class="line">858</td><td class="hits"></td><td class="source"> i,</td></tr><tr class=""><td class="line">859</td><td class="hits"></td><td class="source"> max,</td></tr><tr class=""><td class="line">860</td><td class="hits"></td><td class="source"> m;</td></tr><tr class=""><td class="line">861</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">862</td><td class="hits">7</td><td class="source"> $class.prototype.$inheritance.push(implement);</td></tr><tr class=""><td class="line">863</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">864</td><td class="hits">7</td><td class="source"> for (i = 0, max = properties.length; i < max; ++i) {</td></tr><tr class="hit"><td class="line">865</td><td class="hits">7</td><td class="source"> m = properties[i];</td></tr><tr class="hit"><td class="line">866</td><td class="hits">7</td><td class="source"> __property($class, m, proto[m], descriptors[i]);</td></tr><tr class=""><td class="line">867</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">868</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">869</td><td class="hits">7</td><td class="source"> for (i = 0, max = methods.length; i < max; ++i) {</td></tr><tr class="hit"><td class="line">870</td><td class="hits">30</td><td class="source"> m = methods[i];</td></tr><tr class="hit"><td class="line">871</td><td class="hits">30</td><td class="source"> __method($class, m, proto[m]);</td></tr><tr class=""><td class="line">872</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">873</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">874</td><td class="hits">7</td><td class="source"> for (i = 0, max = abstracts.length; i < max; ++i) {</td></tr><tr class="hit"><td class="line">875</td><td class="hits">3</td><td class="source"> m = abstracts[i];</td></tr><tr class="hit"><td class="line">876</td><td class="hits">3</td><td class="source"> __abstract($class, m.name, m.lambda);</td></tr><tr class=""><td class="line">877</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">878</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">879</td><td class="hits">7</td><td class="source"> for (i = 0, max = statics.length; i < max; ++i) {</td></tr><tr class="hit"><td class="line">880</td><td class="hits">1</td><td class="source"> m = statics[i];</td></tr><tr class="hit"><td class="line">881</td><td class="hits">1</td><td class="source"> __static($class, m, $target[m]);</td></tr><tr class=""><td class="line">882</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">883</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">884</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">885</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">886</td><td class="hits"></td><td class="source"> //wrapper for easy to use</td></tr><tr class="hit"><td class="line">887</td><td class="hits">3</td><td class="source"> module.exports["class"] = exports.Class = function (name, definition, autoset, seal) {</td></tr><tr class="hit"><td class="line">888</td><td class="hits">19</td><td class="source"> var _extends = definition["extends"] || definition.Extends || [],</td></tr><tr class=""><td class="line">889</td><td class="hits"></td><td class="source"> _implements = definition["implements"] || definition.Implements || [],</td></tr><tr class=""><td class="line">890</td><td class="hits"></td><td class="source"> initialize = definition.initialize || null,</td></tr><tr class=""><td class="line">891</td><td class="hits"></td><td class="source"> i,</td></tr><tr class=""><td class="line">892</td><td class="hits"></td><td class="source"> o,</td></tr><tr class=""><td class="line">893</td><td class="hits"></td><td class="source"> cls,</td></tr><tr class=""><td class="line">894</td><td class="hits"></td><td class="source"> meta,</td></tr><tr class=""><td class="line">895</td><td class="hits"></td><td class="source"> f,</td></tr><tr class=""><td class="line">896</td><td class="hits"></td><td class="source"> fmax;</td></tr><tr class=""><td class="line">897</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">898</td><td class="hits">19</td><td class="source"> if ("object" === typeof autoset) {</td></tr><tr class="miss"><td class="line">899</td><td class="hits">0</td><td class="source"> seal = autoset.seal || false;</td></tr><tr class="miss"><td class="line">900</td><td class="hits">0</td><td class="source"> autoset = autoset.autoset || false;</td></tr><tr class=""><td class="line">901</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">902</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">903</td><td class="hits">19</td><td class="source"> delete definition["extends"];</td></tr><tr class="hit"><td class="line">904</td><td class="hits">19</td><td class="source"> delete definition["implements"];</td></tr><tr class="hit"><td class="line">905</td><td class="hits">19</td><td class="source"> delete definition.initialize;</td></tr><tr class=""><td class="line">906</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">907</td><td class="hits">19</td><td class="source"> cls = __class(name, _extends, _implements, initialize, autoset, seal);</td></tr><tr class=""><td class="line">908</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">909</td><td class="hits">19</td><td class="source"> for (i in definition) {</td></tr><tr class="hit"><td class="line">910</td><td class="hits">124</td><td class="source"> o = definition[i];</td></tr><tr class="hit"><td class="line">911</td><td class="hits">124</td><td class="source"> if ("function" === typeof o) {</td></tr><tr class=""><td class="line">912</td><td class="hits"></td><td class="source"> // check if has a prefix</td></tr><tr class="hit"><td class="line">913</td><td class="hits">95</td><td class="source"> if (i.indexOf("abstract ") === 0) {</td></tr><tr class="miss"><td class="line">914</td><td class="hits">0</td><td class="source"> __abstract(cls, i.substring(9), o);</td></tr><tr class="hit"><td class="line">915</td><td class="hits">95</td><td class="source"> } else if (i.indexOf("static ") === 0) {</td></tr><tr class="hit"><td class="line">916</td><td class="hits">1</td><td class="source"> __static(cls, i.substring(7), o);</td></tr><tr class=""><td class="line">917</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">918</td><td class="hits">94</td><td class="source"> __method(cls, i, o);</td></tr><tr class=""><td class="line">919</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">920</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">921</td><td class="hits">29</td><td class="source"> meta = undefined;</td></tr><tr class="hit"><td class="line">922</td><td class="hits">29</td><td class="source"> if (i.indexOf(" ") !== -1) {</td></tr><tr class="hit"><td class="line">923</td><td class="hits">10</td><td class="source"> meta = {</td></tr><tr class=""><td class="line">924</td><td class="hits"></td><td class="source"> writable: true,</td></tr><tr class=""><td class="line">925</td><td class="hits"></td><td class="source"> enumerable: true</td></tr><tr class=""><td class="line">926</td><td class="hits"></td><td class="source"> };</td></tr><tr class="hit"><td class="line">927</td><td class="hits">10</td><td class="source"> i = i.split(" ");</td></tr><tr class=""><td class="line">928</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">929</td><td class="hits">10</td><td class="source"> f = i.indexOf("hidden");</td></tr><tr class="hit"><td class="line">930</td><td class="hits">10</td><td class="source"> fmax = i.length - 1;</td></tr><tr class=""><td class="line">931</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">932</td><td class="hits">10</td><td class="source"> if (f > -1 && f < fmax) {</td></tr><tr class="hit"><td class="line">933</td><td class="hits">10</td><td class="source"> meta.enumerable = false;</td></tr><tr class=""><td class="line">934</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">935</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">936</td><td class="hits">10</td><td class="source"> f = i.indexOf("const");</td></tr><tr class=""><td class="line">937</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">938</td><td class="hits">10</td><td class="source"> if (f > -1 && f < fmax) {</td></tr><tr class="hit"><td class="line">939</td><td class="hits">1</td><td class="source"> meta.writable = false;</td></tr><tr class=""><td class="line">940</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">941</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">942</td><td class="hits">10</td><td class="source"> i = i[fmax];</td></tr><tr class=""><td class="line">943</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">944</td><td class="hits">29</td><td class="source"> __property(cls, i, o, meta);</td></tr><tr class=""><td class="line">945</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">946</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">947</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">948</td><td class="hits">19</td><td class="source"> return cls;</td></tr><tr class=""><td class="line">949</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">950</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">951</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">952</td><td class="hits">3</td><td class="source"> defineProperty(module.exports, "debug", {</td></tr><tr class=""><td class="line">953</td><td class="hits"></td><td class="source"> get: function () {</td></tr><tr class="miss"><td class="line">954</td><td class="hits">0</td><td class="source"> return debug;</td></tr><tr class=""><td class="line">955</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">956</td><td class="hits"></td><td class="source"> set: function (val) {</td></tr><tr class="miss"><td class="line">957</td><td class="hits">0</td><td class="source"> debug = val;</td></tr><tr class="miss"><td class="line">958</td><td class="hits">0</td><td class="source"> return debug;</td></tr><tr class=""><td class="line">959</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">960</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">961</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">962</td><td class="hits"></td><td class="source">}("undefined" === typeof module ? NodeClass : module.exports));</td></tr><tr class=""><td class="line">963</td><td class="hits"></td><td class="source"></td></tr></tbody>
</table>
</div><div class="file">
<h2 id="/home/luis/noboxout/class/lib/events.js">/home/luis/noboxout/class/lib/events.js</h2>
<div class="stats high">
<div class="percentage">73.2%</div>
<div class="sloc">149</div>
<div class="hits">109</div>
<div class="misses">40</div>
</div>
<table id="source">
<thead>
<tr><th>Line</th><th>Hits</th><th>Source</th></tr>
</thead>
<tbody>
<tr class="template"><td class="line"></td><td class="hits"></td><td class="source"></td></tr>
<tr class="hit"><td class="line">1</td><td class="hits">3</td><td class="source">(function (exports, browser) {</td></tr><tr class="hit"><td class="line">2</td><td class="hits">3</td><td class="source"> "use strict";</td></tr><tr class=""><td class="line">3</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">4</td><td class="hits">3</td><td class="source"> var array = require("array-enhancements"),</td></tr><tr class=""><td class="line">5</td><td class="hits"></td><td class="source"> Class = browser ? exports.Class : require("/home/luis/noboxout/class/lib/./class.js")["class"],</td></tr><tr class=""><td class="line">6</td><td class="hits"></td><td class="source"> __typeof = browser ? exports.__typeof : require("/home/luis/noboxout/class/lib/./class.js")["typeof"],</td></tr><tr class=""><td class="line">7</td><td class="hits"></td><td class="source"> Eventize = require("/home/luis/noboxout/class/lib/./eventize.js").Eventize,</td></tr><tr class=""><td class="line">8</td><td class="hits"></td><td class="source"> notStrictEqual = require("assert").notStrictEqual,</td></tr><tr class=""><td class="line">9</td><td class="hits"></td><td class="source"> strictEqual = require("assert").strictEqual,</td></tr><tr class=""><td class="line">10</td><td class="hits"></td><td class="source"> debug = true,</td></tr><tr class=""><td class="line">11</td><td class="hits"></td><td class="source"> arraySplice = Array.prototype.splice,</td></tr><tr class=""><td class="line">12</td><td class="hits"></td><td class="source"> Events;</td></tr><tr class=""><td class="line">13</td><td class="hits"></td><td class="source"> //__instanceof = browser ? exports.Instanceof : require("/home/luis/noboxout/class/lib/./class.js").Instanceof;</td></tr><tr class=""><td class="line">14</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">15</td><td class="hits"></td><td class="source"> //</td></tr><tr class=""><td class="line">16</td><td class="hits"></td><td class="source"> // Events (Event Emitter)</td></tr><tr class=""><td class="line">17</td><td class="hits"></td><td class="source"> // support</td></tr><tr class=""><td class="line">18</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">19</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">20</td><td class="hits"></td><td class="source"> * @type Events</td></tr><tr class=""><td class="line">21</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">22</td><td class="hits">3</td><td class="source"> exports.Events = Events = new Class("Events", {</td></tr><tr class=""><td class="line">23</td><td class="hits"></td><td class="source"> "hidden $__events": null,</td></tr><tr class=""><td class="line">24</td><td class="hits"></td><td class="source"> "hidden $__eventskeys": null,</td></tr><tr class=""><td class="line">25</td><td class="hits"></td><td class="source"> "hidden $__pipes": null,</td></tr><tr class=""><td class="line">26</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">27</td><td class="hits"></td><td class="source"> initialize: function (options) {</td></tr><tr class="hit"><td class="line">28</td><td class="hits">8</td><td class="source"> var i,</td></tr><tr class=""><td class="line">29</td><td class="hits"></td><td class="source"> k;</td></tr><tr class=""><td class="line">30</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">31</td><td class="hits">8</td><td class="source"> this.$__events = Object.create(null);</td></tr><tr class="hit"><td class="line">32</td><td class="hits">8</td><td class="source"> this.$__eventskeys = [];</td></tr><tr class="hit"><td class="line">33</td><td class="hits">8</td><td class="source"> this.$__pipes = [];</td></tr><tr class=""><td class="line">34</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">35</td><td class="hits">8</td><td class="source"> if (options) {</td></tr><tr class="hit"><td class="line">36</td><td class="hits">2</td><td class="source"> if ("[object Object]" === (options.toString && options.toString())) {</td></tr><tr class="hit"><td class="line">37</td><td class="hits">2</td><td class="source"> for (i in options) {</td></tr><tr class=""><td class="line">38</td><td class="hits"></td><td class="source"> // ultra-fast check for onUcase keys</td></tr><tr class="hit"><td class="line">39</td><td class="hits">5</td><td class="source"> if (i.length > 3 && i[0] === "o" && i[1] === "n" && i[2] === i[2].toUpperCase()) {</td></tr><tr class="hit"><td class="line">40</td><td class="hits">4</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">41</td><td class="hits">4</td><td class="source"> strictEqual(typeof options[i], "function", i + " must be a function");</td></tr><tr class=""><td class="line">42</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">43</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">44</td><td class="hits">4</td><td class="source"> k = Events.$transform(i);</td></tr><tr class=""><td class="line">45</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">46</td><td class="hits">4</td><td class="source"> this.addListener(k, options[i]);</td></tr><tr class=""><td class="line">47</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">48</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">49</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">50</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">51</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">52</td><td class="hits"></td><td class="source"> on_unhandled_event: function (fn) {</td></tr><tr class="hit"><td class="line">53</td><td class="hits">4</td><td class="source"> return this.addListener("*", fn);</td></tr><tr class=""><td class="line">54</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">55</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">56</td><td class="hits"></td><td class="source"> * @member Events</td></tr><tr class=""><td class="line">57</td><td class="hits"></td><td class="source"> */</td></tr><tr class=""><td class="line">58</td><td class="hits"></td><td class="source"> addListener: function (event, fn, times, internal) { //TODO: push on unshift</td></tr><tr class="hit"><td class="line">59</td><td class="hits">22</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">60</td><td class="hits">22</td><td class="source"> notStrictEqual(this.$__events, null, "Remember to call \"this.__parent()\" in the constructor!");</td></tr><tr class=""><td class="line">61</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">62</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">63</td><td class="hits">22</td><td class="source"> var ev_name;</td></tr><tr class=""><td class="line">64</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">65</td><td class="hits"></td><td class="source"> //object check</td></tr><tr class="hit"><td class="line">66</td><td class="hits">22</td><td class="source"> if (__typeof(event) === "object") {</td></tr><tr class="miss"><td class="line">67</td><td class="hits">0</td><td class="source"> for (ev_name in event) {</td></tr><tr class="miss"><td class="line">68</td><td class="hits">0</td><td class="source"> this.addListener(ev_name, event[ev_name]);</td></tr><tr class=""><td class="line">69</td><td class="hits"></td><td class="source"> }</td></tr><tr class="miss"><td class="line">70</td><td class="hits">0</td><td class="source"> return this;</td></tr><tr class=""><td class="line">71</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">72</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">73</td><td class="hits"></td><td class="source"> // attach if its eventized!</td></tr><tr class=""><td class="line">74</td><td class="hits"></td><td class="source"> //if (__instanceof(fn, "Event")) {</td></tr><tr class=""><td class="line">75</td><td class="hits"></td><td class="source"> // fn.__attach(this);</td></tr><tr class=""><td class="line">76</td><td class="hits"></td><td class="source"> //}</td></tr><tr class=""><td class="line">77</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">78</td><td class="hits">22</td><td class="source"> if (!fn.$Event) {</td></tr><tr class="hit"><td class="line">79</td><td class="hits">16</td><td class="source"> Eventize(fn);</td></tr><tr class=""><td class="line">80</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">81</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">82</td><td class="hits">22</td><td class="source"> fn.$Event.attach(event, this, (__typeof(times) === "null" ? -1 : times), !!internal);</td></tr><tr class=""><td class="line">83</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">84</td><td class="hits">21</td><td class="source"> this.$__events[event] = this.$__events[event] || [];</td></tr><tr class="hit"><td class="line">85</td><td class="hits">21</td><td class="source"> this.$__events[event].push(fn);</td></tr><tr class=""><td class="line">86</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">87</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">88</td><td class="hits">21</td><td class="source"> if (this.$__eventskeys.indexOf(event) === -1) {</td></tr><tr class="hit"><td class="line">89</td><td class="hits">13</td><td class="source"> this.$__eventskeys.push(event);</td></tr><tr class=""><td class="line">90</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">91</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">92</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">93</td><td class="hits">21</td><td class="source"> return this;</td></tr><tr class=""><td class="line">94</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">95</td><td class="hits"></td><td class="source"> addOnceListener: function (event, fn) {</td></tr><tr class="hit"><td class="line">96</td><td class="hits">4</td><td class="source"> return this.addListener(event, fn, 1, false);</td></tr><tr class=""><td class="line">97</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">98</td><td class="hits"></td><td class="source"> hasListeners: function (event) {</td></tr><tr class="hit"><td class="line">99</td><td class="hits">16</td><td class="source"> return this.$__events[event] ?</td></tr><tr class=""><td class="line">100</td><td class="hits"></td><td class="source"> (this.$__events[event].length === 0 ? false : this.$__events[event].length)</td></tr><tr class=""><td class="line">101</td><td class="hits"></td><td class="source"> : false;</td></tr><tr class=""><td class="line">102</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">103</td><td class="hits"></td><td class="source"> getListeners: function (event) {</td></tr><tr class="hit"><td class="line">104</td><td class="hits">5</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">105</td><td class="hits">5</td><td class="source"> notStrictEqual(this.$__events, null, "Remember to call \"this.__parent()\" in the constructor!");</td></tr><tr class=""><td class="line">106</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">107</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">108</td><td class="hits">5</td><td class="source"> return this.$__events[event] ? array.clone(this.$__events[event]) : [];</td></tr><tr class=""><td class="line">109</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">110</td><td class="hits"></td><td class="source"> fire: function (event, args, delay_ms) {</td></tr><tr class="hit"><td class="line">111</td><td class="hits">33</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">112</td><td class="hits">33</td><td class="source"> notStrictEqual(this.$__events, null, "Remember to call \"this.__parent()\" in the constructor!");</td></tr><tr class=""><td class="line">113</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">114</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">115</td><td class="hits">33</td><td class="source"> var events,</td></tr><tr class=""><td class="line">116</td><td class="hits"></td><td class="source"> i,</td></tr><tr class=""><td class="line">117</td><td class="hits"></td><td class="source"> fn,</td></tr><tr class=""><td class="line">118</td><td class="hits"></td><td class="source"> max,</td></tr><tr class=""><td class="line">119</td><td class="hits"></td><td class="source"> check,</td></tr><tr class=""><td class="line">120</td><td class="hits"></td><td class="source"> key,</td></tr><tr class=""><td class="line">121</td><td class="hits"></td><td class="source"> ev_ast,</td></tr><tr class=""><td class="line">122</td><td class="hits"></td><td class="source"> ev_data;</td></tr><tr class=""><td class="line">123</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">124</td><td class="hits"></td><td class="source"> // dispatch pipe"d first</td></tr><tr class="hit"><td class="line">125</td><td class="hits">33</td><td class="source"> if ("*" !== event && this.$__pipes.length) {</td></tr><tr class="hit"><td class="line">126</td><td class="hits">2</td><td class="source"> for (i = 0; i < this.$__pipes.length; ++i) {</td></tr><tr class="hit"><td class="line">127</td><td class="hits">2</td><td class="source"> if (delay_ms !== undefined) {</td></tr><tr class="miss"><td class="line">128</td><td class="hits">0</td><td class="source"> this.$__pipes[i].fire(event, args, delay_ms);</td></tr><tr class="hit"><td class="line">129</td><td class="hits">2</td><td class="source"> } else if (args) {</td></tr><tr class="miss"><td class="line">130</td><td class="hits">0</td><td class="source"> this.$__pipes[i].fire(event, args);</td></tr><tr class=""><td class="line">131</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">132</td><td class="hits">2</td><td class="source"> this.$__pipes[i].fire(event);</td></tr><tr class=""><td class="line">133</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">134</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">135</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">136</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">137</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">138</td><td class="hits">33</td><td class="source"> ev_ast = event.indexOf("*");</td></tr><tr class=""><td class="line">139</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">140</td><td class="hits">33</td><td class="source"> if (ev_ast === -1 || "*" === event) {</td></tr><tr class="hit"><td class="line">141</td><td class="hits">30</td><td class="source"> events = this.$__events[event];</td></tr><tr class=""><td class="line">142</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">143</td><td class="hits">3</td><td class="source"> check = new RegExp("^" + event.replace("*", "(.*)", "g"));</td></tr><tr class="hit"><td class="line">144</td><td class="hits">3</td><td class="source"> events = [];</td></tr><tr class=""><td class="line">145</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">146</td><td class="hits">3</td><td class="source"> i = this.$__eventskeys.length;</td></tr><tr class="hit"><td class="line">147</td><td class="hits">3</td><td class="source"> while (i--) {</td></tr><tr class="hit"><td class="line">148</td><td class="hits">5</td><td class="source"> key = this.$__eventskeys[i];</td></tr><tr class="hit"><td class="line">149</td><td class="hits">5</td><td class="source"> if (check.test(key)) {</td></tr><tr class="hit"><td class="line">150</td><td class="hits">4</td><td class="source"> this.fire(key, args, delay_ms);</td></tr><tr class=""><td class="line">151</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">152</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">153</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">154</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">155</td><td class="hits">33</td><td class="source"> if (!events || events.length === 0) {</td></tr><tr class="hit"><td class="line">156</td><td class="hits">12</td><td class="source"> if (this.$__events["*"] && this.$__events["*"].length) {</td></tr><tr class="hit"><td class="line">157</td><td class="hits">5</td><td class="source"> return this.fire("*", args, delay_ms);</td></tr><tr class=""><td class="line">158</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">159</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">160</td><td class="hits">7</td><td class="source"> if (event === "error") {</td></tr><tr class=""><td class="line">161</td><td class="hits"></td><td class="source"> //throw</td></tr><tr class="hit"><td class="line">162</td><td class="hits">2</td><td class="source"> throw new Error(args);</td></tr><tr class=""><td class="line">163</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">164</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">165</td><td class="hits"></td><td class="source"> // nothing to work!</td></tr><tr class="hit"><td class="line">166</td><td class="hits">5</td><td class="source"> return this;</td></tr><tr class=""><td class="line">167</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">168</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">169</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">170</td><td class="hits">21</td><td class="source"> max = events.length;</td></tr><tr class="hit"><td class="line">171</td><td class="hits">21</td><td class="source"> for (i = 0; i < max; ++i) {</td></tr><tr class="hit"><td class="line">172</td><td class="hits">30</td><td class="source"> fn = events[i];</td></tr><tr class=""><td class="line">173</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">174</td><td class="hits">30</td><td class="source"> ev_data = fn.$Event.events[event];</td></tr><tr class="hit"><td class="line">175</td><td class="hits">30</td><td class="source"> if (!ev_data) {</td></tr><tr class="miss"><td class="line">176</td><td class="hits">0</td><td class="source"> console.error("(node-class-events)", fn, fn.$Event, event);</td></tr><tr class="miss"><td class="line">177</td><td class="hits">0</td><td class="source"> console.error("(node-class-events)", fn, event);</td></tr><tr class="miss"><td class="line">178</td><td class="hits">0</td><td class="source"> process.exit();</td></tr><tr class=""><td class="line">179</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">180</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">181</td><td class="hits">30</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">182</td><td class="hits">30</td><td class="source"> notStrictEqual(fn, undefined, "Did You remove a listener while looping!? then -> use Eventize.remove to do that!");</td></tr><tr class=""><td class="line">183</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">184</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">185</td><td class="hits">30</td><td class="source"> if (delay_ms !== undefined) {</td></tr><tr class="miss"><td class="line">186</td><td class="hits">0</td><td class="source"> args = array.ize(args);</td></tr><tr class="miss"><td class="line">187</td><td class="hits">0</td><td class="source"> fn.delay(delay_ms, fn/*this*/, args); // !!!<--</td></tr><tr class=""><td class="line">188</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">189</td><td class="hits">30</td><td class="source"> ev_data.stop = false;</td></tr><tr class=""><td class="line">190</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">191</td><td class="hits">30</td><td class="source"> if (arguments.length === 1) {</td></tr><tr class=""><td class="line">192</td><td class="hits"></td><td class="source"> //fn.apply(fn);</td></tr><tr class="hit"><td class="line">193</td><td class="hits">18</td><td class="source"> fn();</td></tr><tr class=""><td class="line">194</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">195</td><td class="hits">12</td><td class="source"> if (args && args.splice !== arraySplice) { //is array fast test...</td></tr><tr class="hit"><td class="line">196</td><td class="hits">2</td><td class="source"> args = array.ize(args);</td></tr><tr class=""><td class="line">197</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">198</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">199</td><td class="hits">12</td><td class="source"> if (!args) {</td></tr><tr class="hit"><td class="line">200</td><td class="hits">10</td><td class="source"> fn();</td></tr><tr class="hit"><td class="line">201</td><td class="hits">2</td><td class="source"> } else if (args.length === 1) {</td></tr><tr class="hit"><td class="line">202</td><td class="hits">2</td><td class="source"> fn(args[0]);</td></tr><tr class="miss"><td class="line">203</td><td class="hits">0</td><td class="source"> } else if (args.length === 2) {</td></tr><tr class="miss"><td class="line">204</td><td class="hits">0</td><td class="source"> fn(args[0], args[1]);</td></tr><tr class="miss"><td class="line">205</td><td class="hits">0</td><td class="source"> } else if (args.length === 3) {</td></tr><tr class="miss"><td class="line">206</td><td class="hits">0</td><td class="source"> fn(args[0], args[1], args[2]);</td></tr><tr class=""><td class="line">207</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="miss"><td class="line">208</td><td class="hits">0</td><td class="source"> fn.apply(fn, /*this*/ args);</td></tr><tr class=""><td class="line">209</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">210</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">211</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">212</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">213</td><td class="hits">30</td><td class="source"> --ev_data.times;</td></tr><tr class=""><td class="line">214</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">215</td><td class="hits">30</td><td class="source"> if (ev_data.times === 0) {</td></tr><tr class="hit"><td class="line">216</td><td class="hits">6</td><td class="source"> this.removeListener(event, fn);</td></tr><tr class=""><td class="line">217</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">218</td><td class="hits">6</td><td class="source"> if (max === 1) {</td></tr><tr class="miss"><td class="line">219</td><td class="hits">0</td><td class="source"> return this;</td></tr><tr class=""><td class="line">220</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">221</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">222</td><td class="hits">6</td><td class="source"> --i;</td></tr><tr class="hit"><td class="line">223</td><td class="hits">6</td><td class="source"> --max;</td></tr><tr class=""><td class="line">224</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">225</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">226</td><td class="hits"></td><td class="source"> //stop ?</td></tr><tr class="hit"><td class="line">227</td><td class="hits">30</td><td class="source"> if (ev_data.stop === true) {</td></tr><tr class="miss"><td class="line">228</td><td class="hits">0</td><td class="source"> return this;</td></tr><tr class=""><td class="line">229</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">230</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">231</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">232</td><td class="hits">21</td><td class="source"> return this;</td></tr><tr class=""><td class="line">233</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">234</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">235</td><td class="hits"></td><td class="source"> removeListener: function (event, fn) {</td></tr><tr class="hit"><td class="line">236</td><td class="hits">10</td><td class="source"> var events = this.$__events[event],</td></tr><tr class=""><td class="line">237</td><td class="hits"></td><td class="source"> index;</td></tr><tr class=""><td class="line">238</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">239</td><td class="hits">10</td><td class="source"> if (events && !(fn.$Event && fn.$Event[event] && fn.$Event[event].internal)) {</td></tr><tr class="hit"><td class="line">240</td><td class="hits">10</td><td class="source"> index = events.indexOf(fn);</td></tr><tr class=""><td class="line">241</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">242</td><td class="hits">10</td><td class="source"> if (index !== -1) {</td></tr><tr class="hit"><td class="line">243</td><td class="hits">10</td><td class="source"> events[index].$Event.detach();</td></tr><tr class="hit"><td class="line">244</td><td class="hits">10</td><td class="source"> events.splice(index, 1);</td></tr><tr class="hit"><td class="line">245</td><td class="hits">10</td><td class="source"> return true;</td></tr><tr class=""><td class="line">246</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">247</td><td class="hits"></td><td class="source"> }</td></tr><tr class="miss"><td class="line">248</td><td class="hits">0</td><td class="source"> return false;</td></tr><tr class=""><td class="line">249</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">250</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">251</td><td class="hits"></td><td class="source"> removeAllListeners : function (events) {</td></tr><tr class="miss"><td class="line">252</td><td class="hits">0</td><td class="source"> var event,</td></tr><tr class=""><td class="line">253</td><td class="hits"></td><td class="source"> fns,</td></tr><tr class=""><td class="line">254</td><td class="hits"></td><td class="source"> i;</td></tr><tr class=""><td class="line">255</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">256</td><td class="hits">0</td><td class="source"> if (__typeof(events) === "object") {</td></tr><tr class="miss"><td class="line">257</td><td class="hits">0</td><td class="source"> for (event in events) {</td></tr><tr class="miss"><td class="line">258</td><td class="hits">0</td><td class="source"> this.removeListener(event, events[event]);</td></tr><tr class=""><td class="line">259</td><td class="hits"></td><td class="source"> }</td></tr><tr class="miss"><td class="line">260</td><td class="hits">0</td><td class="source"> return this;</td></tr><tr class=""><td class="line">261</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">262</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">263</td><td class="hits">0</td><td class="source"> for (event in this.$__events) {</td></tr><tr class="miss"><td class="line">264</td><td class="hits">0</td><td class="source"> if (!(events && events !== event)) {</td></tr><tr class="miss"><td class="line">265</td><td class="hits">0</td><td class="source"> fns = this.$__events[event];</td></tr><tr class="miss"><td class="line">266</td><td class="hits">0</td><td class="source"> i = fns.length;</td></tr><tr class=""><td class="line">267</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">268</td><td class="hits">0</td><td class="source"> while (i--) {</td></tr><tr class="miss"><td class="line">269</td><td class="hits">0</td><td class="source"> if (fns[i] !== undefined) {</td></tr><tr class="miss"><td class="line">270</td><td class="hits">0</td><td class="source"> this.removeListener(event, fns[i]);</td></tr><tr class=""><td class="line">271</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">272</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">273</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">274</td><td class="hits"></td><td class="source"> }</td></tr><tr class="miss"><td class="line">275</td><td class="hits">0</td><td class="source"> return this;</td></tr><tr class=""><td class="line">276</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">277</td><td class="hits"></td><td class="source"> pipeEvents: function (cls) {</td></tr><tr class="hit"><td class="line">278</td><td class="hits">1</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">279</td><td class="hits">1</td><td class="source"> notStrictEqual(cls, this, "cannot pipe to \"myself\"");</td></tr><tr class=""><td class="line">280</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">281</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">282</td><td class="hits"></td><td class="source"> //if (!__instanceof(cls, "Events")) {</td></tr><tr class=""><td class="line">283</td><td class="hits"></td><td class="source"> // throw new Error("cls need to extends from Events");</td></tr><tr class=""><td class="line">284</td><td class="hits"></td><td class="source"> //}</td></tr><tr class=""><td class="line">285</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">286</td><td class="hits">1</td><td class="source"> this.$__pipes.push(cls);</td></tr><tr class=""><td class="line">287</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">288</td><td class="hits"></td><td class="source"> filterListeners: function (event, callback) {</td></tr><tr class=""><td class="line">289</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">290</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">291</td><td class="hits"></td><td class="source"> setMaxListeners: function (n) {</td></tr><tr class=""><td class="line">292</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">293</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">294</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">295</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">296</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">297</td><td class="hits">3</td><td class="source"> exports.Events.when = function (event, list, callback) {</td></tr><tr class="miss"><td class="line">298</td><td class="hits">0</td><td class="source"> if (!list || list.length === 0) {</td></tr><tr class="miss"><td class="line">299</td><td class="hits">0</td><td class="source"> callback();</td></tr><tr class="miss"><td class="line">300</td><td class="hits">0</td><td class="source"> return;</td></tr><tr class=""><td class="line">301</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">302</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">303</td><td class="hits">0</td><td class="source"> var i,</td></tr><tr class=""><td class="line">304</td><td class="hits"></td><td class="source"> callback_nth = callback.after(list.length);</td></tr><tr class=""><td class="line">305</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">306</td><td class="hits">0</td><td class="source"> for (i = 0; i < list.length; ++i) {</td></tr><tr class="miss"><td class="line">307</td><td class="hits">0</td><td class="source"> list[i].addOnceListener(event, callback_nth);</td></tr><tr class=""><td class="line">308</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">309</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">310</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">311</td><td class="hits">3</td><td class="source"> exports.Events.$transform = function (i) {</td></tr><tr class="hit"><td class="line">312</td><td class="hits">4</td><td class="source"> return i.charAt(2).toLowerCase() + i.substring(3).replace(/[A-Z]/g, function (c) {</td></tr><tr class="hit"><td class="line">313</td><td class="hits">3</td><td class="source"> return "-" + c.toLowerCase(c);</td></tr><tr class=""><td class="line">314</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">315</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">316</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">317</td><td class="hits">3</td><td class="source"> exports.Events.$transform_snake_case = function (i) {</td></tr><tr class="miss"><td class="line">318</td><td class="hits">0</td><td class="source"> return i.charAt(2).toLowerCase() + i.substring(3).replace(/[A-Z]/g, function (c) {</td></tr><tr class="miss"><td class="line">319</td><td class="hits">0</td><td class="source"> return "_" + c.toLowerCase(c);</td></tr><tr class=""><td class="line">320</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">321</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">322</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">323</td><td class="hits">3</td><td class="source"> exports.Events.$transformIntact = function (i) {</td></tr><tr class="miss"><td class="line">324</td><td class="hits">0</td><td class="source"> return i.charAt(2).toLowerCase() + i.substring(3);</td></tr><tr class=""><td class="line">325</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">326</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">327</td><td class="hits">3</td><td class="source"> exports.Events.alias("addListener", "addEvent");</td></tr><tr class="hit"><td class="line">328</td><td class="hits">3</td><td class="source"> exports.Events.alias("addListener", "on");</td></tr><tr class=""><td class="line">329</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">330</td><td class="hits">3</td><td class="source"> exports.Events.alias("addOnceListener", "once");</td></tr><tr class="hit"><td class="line">331</td><td class="hits">3</td><td class="source"> exports.Events.alias("addOnceListener", "addOnceEvent");</td></tr><tr class=""><td class="line">332</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">333</td><td class="hits">3</td><td class="source"> exports.Events.alias("fire", "trigger");</td></tr><tr class="hit"><td class="line">334</td><td class="hits">3</td><td class="source"> exports.Events.alias("fire", "emit");</td></tr><tr class="hit"><td class="line">335</td><td class="hits">3</td><td class="source"> exports.Events.alias("fire", "fireEvent");</td></tr><tr class=""><td class="line">336</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">337</td><td class="hits">3</td><td class="source"> exports.Events.alias("removeListener", "off");</td></tr><tr class="hit"><td class="line">338</td><td class="hits">3</td><td class="source"> exports.Events.alias("removeAllListeners", "offAll");</td></tr><tr class=""><td class="line">339</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">340</td><td class="hits">3</td><td class="source"> exports.Events.alias("getListeners", "listeners");</td></tr><tr class=""><td class="line">341</td><td class="hits"></td><td class="source">/*</td></tr><tr class=""><td class="line">342</td><td class="hits"></td><td class="source"> Object.defineProperty(Events.$$.descriptors[0], "value", {</td></tr><tr class=""><td class="line">343</td><td class="hits"></td><td class="source"> set: function() {</td></tr><tr class=""><td class="line">344</td><td class="hits"></td><td class="source"> throw new Error("wtf!!!");</td></tr><tr class=""><td class="line">345</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">346</td><td class="hits"></td><td class="source"> get: function() {</td></tr><tr class=""><td class="line">347</td><td class="hits"></td><td class="source"> return null;</td></tr><tr class=""><td class="line">348</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">349</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">350</td><td class="hits"></td><td class="source">*/</td></tr><tr class=""><td class="line">351</td><td class="hits"></td><td class="source"> //exports.Events.hide(["$__events", "$__eventskeys", "$__pipes"]);</td></tr><tr class=""><td class="line">352</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">353</td><td class="hits"></td><td class="source">}("undefined" === typeof module ? NodeClass : module.exports, "undefined" === typeof module));</td></tr><tr class=""><td class="line">354</td><td class="hits"></td><td class="source"></td></tr></tbody>
</table>
</div><div class="file">
<h2 id="/home/luis/noboxout/class/lib/eventize.js">/home/luis/noboxout/class/lib/eventize.js</h2>
<div class="stats high">
<div class="percentage">90.0%</div>
<div class="sloc">30</div>
<div class="hits">27</div>
<div class="misses">3</div>
</div>
<table id="source">
<thead>
<tr><th>Line</th><th>Hits</th><th>Source</th></tr>
</thead>
<tbody>
<tr class="template"><td class="line"></td><td class="hits"></td><td class="source"></td></tr>
<tr class="hit"><td class="line">1</td><td class="hits">3</td><td class="source">(function (exports, browser) {</td></tr><tr class="hit"><td class="line">2</td><td class="hits">3</td><td class="source"> "use strict";</td></tr><tr class="hit"><td class="line">3</td><td class="hits">3</td><td class="source"> var defineProperty = Object.defineProperty,</td></tr><tr class=""><td class="line">4</td><td class="hits"></td><td class="source"> Event,</td></tr><tr class=""><td class="line">5</td><td class="hits"></td><td class="source"> debug = true,</td></tr><tr class=""><td class="line">6</td><td class="hits"></td><td class="source"> notStrictEqual = require('assert').notStrictEqual,</td></tr><tr class=""><td class="line">7</td><td class="hits"></td><td class="source"> strictEqual = require('assert').strictEqual;</td></tr><tr class=""><td class="line">8</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">9</td><td class="hits">3</td><td class="source"> Event = function (fn) {</td></tr><tr class="hit"><td class="line">10</td><td class="hits">20</td><td class="source"> this.fn = fn;</td></tr><tr class="hit"><td class="line">11</td><td class="hits">20</td><td class="source"> this.events = {};</td></tr><tr class=""><td class="line">12</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">13</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">14</td><td class="hits">3</td><td class="source"> Event.prototype.fn = undefined;</td></tr><tr class="hit"><td class="line">15</td><td class="hits">3</td><td class="source"> Event.prototype.events = undefined;</td></tr><tr class="hit"><td class="line">16</td><td class="hits">3</td><td class="source"> Event.prototype.attachs = 0;</td></tr><tr class=""><td class="line">17</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">18</td><td class="hits">3</td><td class="source"> Event.prototype.attach = function (event_name, event_handler, times, internal) {</td></tr><tr class="hit"><td class="line">19</td><td class="hits">22</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">20</td><td class="hits">22</td><td class="source"> strictEqual(this.events[event_name], undefined, "Event[" + event_name + "] can only be attached once");</td></tr><tr class=""><td class="line">21</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">22</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">23</td><td class="hits">21</td><td class="source"> this.events[event_name] = {</td></tr><tr class=""><td class="line">24</td><td class="hits"></td><td class="source"> handler: event_handler,</td></tr><tr class=""><td class="line">25</td><td class="hits"></td><td class="source"> times: times || -1,</td></tr><tr class=""><td class="line">26</td><td class="hits"></td><td class="source"> internal: internal,</td></tr><tr class=""><td class="line">27</td><td class="hits"></td><td class="source"> stop: false</td></tr><tr class=""><td class="line">28</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">29</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">30</td><td class="hits">21</td><td class="source"> ++this.attachs;</td></tr><tr class=""><td class="line">31</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">32</td><td class="hits">21</td><td class="source"> return this;</td></tr><tr class=""><td class="line">33</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">34</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">35</td><td class="hits">3</td><td class="source"> Event.prototype.detach = function (event_name) {</td></tr><tr class="hit"><td class="line">36</td><td class="hits">10</td><td class="source"> delete this.events[event_name];</td></tr><tr class="hit"><td class="line">37</td><td class="hits">10</td><td class="source"> --this.attachs;</td></tr><tr class=""><td class="line">38</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">39</td><td class="hits">10</td><td class="source"> return this;</td></tr><tr class=""><td class="line">40</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">41</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">42</td><td class="hits">3</td><td class="source"> Event.prototype.attached = function () {</td></tr><tr class="miss"><td class="line">43</td><td class="hits">0</td><td class="source"> return this.attachs !== 0;</td></tr><tr class=""><td class="line">44</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">45</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">46</td><td class="hits">3</td><td class="source"> Event.prototype.remove = function (event_name) {</td></tr><tr class="hit"><td class="line">47</td><td class="hits">2</td><td class="source"> this.events[event_name].times = 1;</td></tr><tr class=""><td class="line">48</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">49</td><td class="hits">2</td><td class="source"> return this;</td></tr><tr class=""><td class="line">50</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">51</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">52</td><td class="hits">3</td><td class="source"> Event.prototype.stop = function (event_name) {</td></tr><tr class="miss"><td class="line">53</td><td class="hits">0</td><td class="source"> this.events[event_name].stop = true;</td></tr><tr class=""><td class="line">54</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">55</td><td class="hits">0</td><td class="source"> return this;</td></tr><tr class=""><td class="line">56</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">57</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">58</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">59</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">60</td><td class="hits"></td><td class="source"> * wrap the function with event functionality</td></tr><tr class=""><td class="line">61</td><td class="hits"></td><td class="source"> * @type Event</td></tr><tr class=""><td class="line">62</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">63</td><td class="hits">3</td><td class="source"> exports.Eventize = function (fn) {</td></tr><tr class=""><td class="line">64</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">65</td><td class="hits">20</td><td class="source"> defineProperty(fn, "$Event", {</td></tr><tr class=""><td class="line">66</td><td class="hits"></td><td class="source"> value: new Event(fn),</td></tr><tr class=""><td class="line">67</td><td class="hits"></td><td class="source"> writable : true,</td></tr><tr class=""><td class="line">68</td><td class="hits"></td><td class="source"> enumerable : false,</td></tr><tr class=""><td class="line">69</td><td class="hits"></td><td class="source"> configurable : false</td></tr><tr class=""><td class="line">70</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">71</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">72</td><td class="hits">20</td><td class="source"> return fn;</td></tr><tr class=""><td class="line">73</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">74</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">75</td><td class="hits"></td><td class="source">}("undefined" === typeof module ? NodeClass : module.exports, "undefined" === typeof module));</td></tr><tr class=""><td class="line">76</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">77</td><td class="hits"></td><td class="source"></td></tr></tbody>
</table>
</div><div class="file">
<h2 id="/home/luis/noboxout/class/lib/iterable.js">/home/luis/noboxout/class/lib/iterable.js</h2>
<div class="stats high">
<div class="percentage">94.6%</div>
<div class="sloc">92</div>
<div class="hits">87</div>
<div class="misses">5</div>
</div>
<table id="source">
<thead>
<tr><th>Line</th><th>Hits</th><th>Source</th></tr>
</thead>
<tbody>
<tr class="template"><td class="line"></td><td class="hits"></td><td class="source"></td></tr>
<tr class="hit"><td class="line">1</td><td class="hits">3</td><td class="source">(function (exports, browser) {</td></tr><tr class="hit"><td class="line">2</td><td class="hits">3</td><td class="source"> "use strict";</td></tr><tr class=""><td class="line">3</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">4</td><td class="hits">3</td><td class="source"> var Class = browser ? exports.Class : require("/home/luis/noboxout/class/lib/./class.js")["class"],</td></tr><tr class=""><td class="line">5</td><td class="hits"></td><td class="source"> __typeof = browser ? exports.__typeof : require("/home/luis/noboxout/class/lib/./class.js")["typeof"],</td></tr><tr class=""><td class="line">6</td><td class="hits"></td><td class="source"> create = Object.create,</td></tr><tr class=""><td class="line">7</td><td class="hits"></td><td class="source"> strictEqual = require('assert').strictEqual,</td></tr><tr class=""><td class="line">8</td><td class="hits"></td><td class="source"> debug = true;</td></tr><tr class=""><td class="line">9</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">10</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">11</td><td class="hits"></td><td class="source"> * @return Iterable</td></tr><tr class=""><td class="line">12</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">13</td><td class="hits">3</td><td class="source"> exports.Iterable = new Class("Iterable", {</td></tr><tr class=""><td class="line">14</td><td class="hits"></td><td class="source"> $__keys: [],</td></tr><tr class=""><td class="line">15</td><td class="hits"></td><td class="source"> $__values: null,</td></tr><tr class=""><td class="line">16</td><td class="hits"></td><td class="source"> $__current_id: 0,</td></tr><tr class=""><td class="line">17</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">18</td><td class="hits"></td><td class="source"> initialize: function () {</td></tr><tr class="hit"><td class="line">19</td><td class="hits">2</td><td class="source"> this.empty();</td></tr><tr class=""><td class="line">20</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">21</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">22</td><td class="hits"></td><td class="source"> * @member Iterable</td></tr><tr class=""><td class="line">23</td><td class="hits"></td><td class="source"> * @param {String} key</td></tr><tr class=""><td class="line">24</td><td class="hits"></td><td class="source"> * @param {Mixed} value</td></tr><tr class=""><td class="line">25</td><td class="hits"></td><td class="source"> */</td></tr><tr class=""><td class="line">26</td><td class="hits"></td><td class="source"> set: function (key, value) {</td></tr><tr class="hit"><td class="line">27</td><td class="hits">9</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">28</td><td class="hits">9</td><td class="source"> strictEqual(__typeof(key), "string", "key must be a string");</td></tr><tr class=""><td class="line">29</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">30</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">31</td><td class="hits"></td><td class="source"> // if (key == "set" || key == "get" || key == "key" || key == "length" ||</td></tr><tr class=""><td class="line">32</td><td class="hits"></td><td class="source"> // key == "rem" || key == "each") throw new Error("invalid key name");</td></tr><tr class="hit"><td class="line">33</td><td class="hits">9</td><td class="source"> if (this.$__values[key] === undefined) {</td></tr><tr class="hit"><td class="line">34</td><td class="hits">9</td><td class="source"> this.$__keys.push(key);</td></tr><tr class=""><td class="line">35</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">36</td><td class="hits">9</td><td class="source"> this.$__values[key] = value;</td></tr><tr class=""><td class="line">37</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">38</td><td class="hits">9</td><td class="source"> return this;</td></tr><tr class=""><td class="line">39</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">40</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">41</td><td class="hits"></td><td class="source"> * get the key, null if not found.</td></tr><tr class=""><td class="line">42</td><td class="hits"></td><td class="source"> *</td></tr><tr class=""><td class="line">43</td><td class="hits"></td><td class="source"> * @member Iterable</td></tr><tr class=""><td class="line">44</td><td class="hits"></td><td class="source"> * @param {String} key</td></tr><tr class=""><td class="line">45</td><td class="hits"></td><td class="source"> * @param {mixed} default_value default is null</td></tr><tr class=""><td class="line">46</td><td class="hits"></td><td class="source"> * @returns Mixed</td></tr><tr class=""><td class="line">47</td><td class="hits"></td><td class="source"> */</td></tr><tr class=""><td class="line">48</td><td class="hits"></td><td class="source"> get: function (key, default_value) {</td></tr><tr class="hit"><td class="line">49</td><td class="hits">2</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">50</td><td class="hits">2</td><td class="source"> strictEqual(__typeof(key), "string", "key must be a string");</td></tr><tr class=""><td class="line">51</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">52</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">53</td><td class="hits">2</td><td class="source"> var val = this.$__values[key];</td></tr><tr class="hit"><td class="line">54</td><td class="hits">2</td><td class="source"> return val === undefined ? default_value || null : val;</td></tr><tr class=""><td class="line">55</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">56</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">57</td><td class="hits"></td><td class="source"> * remove all</td></tr><tr class=""><td class="line">58</td><td class="hits"></td><td class="source"> *</td></tr><tr class=""><td class="line">59</td><td class="hits"></td><td class="source"> * @member Iterable</td></tr><tr class=""><td class="line">60</td><td class="hits"></td><td class="source"> * @returns Iterable this for chaining</td></tr><tr class=""><td class="line">61</td><td class="hits"></td><td class="source"> */</td></tr><tr class=""><td class="line">62</td><td class="hits"></td><td class="source"> empty: function () {</td></tr><tr class="hit"><td class="line">63</td><td class="hits">2</td><td class="source"> this.$__values = create(null);</td></tr><tr class="hit"><td class="line">64</td><td class="hits">2</td><td class="source"> this.$__keys = [];</td></tr><tr class=""><td class="line">65</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">66</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">67</td><td class="hits"></td><td class="source"> * remove given key</td></tr><tr class=""><td class="line">68</td><td class="hits"></td><td class="source"> *</td></tr><tr class=""><td class="line">69</td><td class="hits"></td><td class="source"> * @member Iterable</td></tr><tr class=""><td class="line">70</td><td class="hits"></td><td class="source"> * @param {String} key</td></tr><tr class=""><td class="line">71</td><td class="hits"></td><td class="source"> * @returns Iterable this for chaining</td></tr><tr class=""><td class="line">72</td><td class="hits"></td><td class="source"> */</td></tr><tr class=""><td class="line">73</td><td class="hits"></td><td class="source"> rem: function (key) {</td></tr><tr class="hit"><td class="line">74</td><td class="hits">1</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">75</td><td class="hits">1</td><td class="source"> strictEqual(__typeof(key), "string", "key must be a string");</td></tr><tr class=""><td class="line">76</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">77</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">78</td><td class="hits">1</td><td class="source"> var cut = this.$__keys.indexOf(key);</td></tr><tr class=""><td class="line">79</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">80</td><td class="hits">1</td><td class="source"> if (cut !== -1) {</td></tr><tr class="hit"><td class="line">81</td><td class="hits">1</td><td class="source"> delete this.$__values[key];</td></tr><tr class="hit"><td class="line">82</td><td class="hits">1</td><td class="source"> this.$__keys.splice(cut, 1);</td></tr><tr class=""><td class="line">83</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">84</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">85</td><td class="hits">1</td><td class="source"> return this;</td></tr><tr class=""><td class="line">86</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">87</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">88</td><td class="hits"></td><td class="source"> * remove every apparency</td></tr><tr class=""><td class="line">89</td><td class="hits"></td><td class="source"> *</td></tr><tr class=""><td class="line">90</td><td class="hits"></td><td class="source"> * @member Iterable</td></tr><tr class=""><td class="line">91</td><td class="hits"></td><td class="source"> * @param {Mixed} value</td></tr><tr class=""><td class="line">92</td><td class="hits"></td><td class="source"> * @returns Iterable this for chaining</td></tr><tr class=""><td class="line">93</td><td class="hits"></td><td class="source"> */</td></tr><tr class=""><td class="line">94</td><td class="hits"></td><td class="source"> erase: function (value) {</td></tr><tr class="hit"><td class="line">95</td><td class="hits">2</td><td class="source"> var objs = this.$__keys,</td></tr><tr class=""><td class="line">96</td><td class="hits"></td><td class="source"> vals = this.$__values,</td></tr><tr class=""><td class="line">97</td><td class="hits"></td><td class="source"> i,</td></tr><tr class=""><td class="line">98</td><td class="hits"></td><td class="source"> max = objs.length;</td></tr><tr class=""><td class="line">99</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">100</td><td class="hits">2</td><td class="source"> for (i = 0; i < max; ++i) {</td></tr><tr class="hit"><td class="line">101</td><td class="hits">7</td><td class="source"> if (vals[objs[i]] === value) {</td></tr><tr class="hit"><td class="line">102</td><td class="hits">2</td><td class="source"> delete this.$__values[objs[i]];</td></tr><tr class="hit"><td class="line">103</td><td class="hits">2</td><td class="source"> this.$__keys.splice(i, 1);</td></tr><tr class=""><td class="line">104</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">105</td><td class="hits">2</td><td class="source"> if (i === this.$__current_id && this.eof()) {</td></tr><tr class="hit"><td class="line">106</td><td class="hits">1</td><td class="source"> this.prev();</td></tr><tr class=""><td class="line">107</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">108</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">109</td><td class="hits">2</td><td class="source"> --max;</td></tr><tr class="hit"><td class="line">110</td><td class="hits">2</td><td class="source"> --i;</td></tr><tr class=""><td class="line">111</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">112</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">113</td><td class="hits">2</td><td class="source"> return this;</td></tr><tr class=""><td class="line">114</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">115</td><td class="hits"></td><td class="source"> reset: function () {</td></tr><tr class="hit"><td class="line">116</td><td class="hits">1</td><td class="source"> this.$__current_id = 0;</td></tr><tr class=""><td class="line">117</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">118</td><td class="hits"></td><td class="source"> end: function () {</td></tr><tr class="hit"><td class="line">119</td><td class="hits">1</td><td class="source"> this.$__current_id = this.$__keys.length - 1;</td></tr><tr class=""><td class="line">120</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">121</td><td class="hits"></td><td class="source"> prev: function () {</td></tr><tr class="hit"><td class="line">122</td><td class="hits">3</td><td class="source"> this.$__current_id = Math.max(0, this.$__current_id - 1);</td></tr><tr class="hit"><td class="line">123</td><td class="hits">3</td><td class="source"> return this.current();</td></tr><tr class=""><td class="line">124</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">125</td><td class="hits"></td><td class="source"> next: function () {</td></tr><tr class="hit"><td class="line">126</td><td class="hits">4</td><td class="source"> this.$__current_id = Math.min(this.$__keys.length, this.$__current_id + 1);</td></tr><tr class="hit"><td class="line">127</td><td class="hits">4</td><td class="source"> return this.current();</td></tr><tr class=""><td class="line">128</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">129</td><td class="hits"></td><td class="source"> current: function () {</td></tr><tr class="hit"><td class="line">130</td><td class="hits">12</td><td class="source"> if (this.$__current_id === this.$__keys.length) {</td></tr><tr class="hit"><td class="line">131</td><td class="hits">1</td><td class="source"> return null;</td></tr><tr class=""><td class="line">132</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">133</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">134</td><td class="hits">11</td><td class="source"> var k = this.$__keys[this.$__current_id];</td></tr><tr class="hit"><td class="line">135</td><td class="hits">11</td><td class="source"> return {</td></tr><tr class=""><td class="line">136</td><td class="hits"></td><td class="source"> key: k,</td></tr><tr class=""><td class="line">137</td><td class="hits"></td><td class="source"> value: this.$__values[k]</td></tr><tr class=""><td class="line">138</td><td class="hits"></td><td class="source"> };</td></tr><tr class=""><td class="line">139</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">140</td><td class="hits"></td><td class="source"> eof: function () {</td></tr><tr class="hit"><td class="line">141</td><td class="hits">6</td><td class="source"> return this.$__current_id === this.$__keys.length;</td></tr><tr class=""><td class="line">142</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">143</td><td class="hits"></td><td class="source"> sort: function (sort_function) {</td></tr><tr class="miss"><td class="line">144</td><td class="hits">0</td><td class="source"> if (debug) {</td></tr><tr class="miss"><td class="line">145</td><td class="hits">0</td><td class="source"> strictEqual(__typeof(sort_function), "function", "sort_function must be a function");</td></tr><tr class=""><td class="line">146</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">147</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">148</td><td class="hits">0</td><td class="source"> this.$__keys.sort(sort_function);</td></tr><tr class=""><td class="line">149</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">150</td><td class="hits"></td><td class="source"> getKeys: function () {</td></tr><tr class="miss"><td class="line">151</td><td class="hits">0</td><td class="source"> return this.$__keys.splice(0); //clone!</td></tr><tr class=""><td class="line">152</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">153</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">154</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">155</td><td class="hits"></td><td class="source"> * The forEach() method executes a provided function once per array element.</td></tr><tr class=""><td class="line">156</td><td class="hits"></td><td class="source"> *</td></tr><tr class=""><td class="line">157</td><td class="hits"></td><td class="source"> *</td></tr><tr class=""><td class="line">158</td><td class="hits"></td><td class="source"> * @member Iterable</td></tr><tr class=""><td class="line">159</td><td class="hits"></td><td class="source"> * @param {Function} fn callback arguments(value, key)</td></tr><tr class=""><td class="line">160</td><td class="hits"></td><td class="source"> * @returns Iterable this for chaining</td></tr><tr class=""><td class="line">161</td><td class="hits"></td><td class="source"> */</td></tr><tr class=""><td class="line">162</td><td class="hits"></td><td class="source"> forEach : function (fn) {</td></tr><tr class="hit"><td class="line">163</td><td class="hits">2</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">164</td><td class="hits">2</td><td class="source"> strictEqual(__typeof(fn), "function", "fn must be a function");</td></tr><tr class=""><td class="line">165</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">166</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">167</td><td class="hits">2</td><td class="source"> var objs = this.$__keys,</td></tr><tr class=""><td class="line">168</td><td class="hits"></td><td class="source"> vals = this.$__values,</td></tr><tr class=""><td class="line">169</td><td class="hits"></td><td class="source"> i,</td></tr><tr class=""><td class="line">170</td><td class="hits"></td><td class="source"> k,</td></tr><tr class=""><td class="line">171</td><td class="hits"></td><td class="source"> max = objs.length;</td></tr><tr class=""><td class="line">172</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">173</td><td class="hits">2</td><td class="source"> for (i = 0; i < max; ++i) {</td></tr><tr class="hit"><td class="line">174</td><td class="hits">5</td><td class="source"> k = objs[i];</td></tr><tr class=""><td class="line">175</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">176</td><td class="hits">5</td><td class="source"> fn(vals[k], k);</td></tr><tr class=""><td class="line">177</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">178</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">179</td><td class="hits">2</td><td class="source"> return this;</td></tr><tr class=""><td class="line">180</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">181</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">182</td><td class="hits"></td><td class="source"> * The filter() method creates a new array with all elements that pass the test implemented by the provided function.</td></tr><tr class=""><td class="line">183</td><td class="hits"></td><td class="source"> *</td></tr><tr class=""><td class="line">184</td><td class="hits"></td><td class="source"> * @member Iterable</td></tr><tr class=""><td class="line">185</td><td class="hits"></td><td class="source"> * @param {Function} fn callback arguments(value, key)</td></tr><tr class=""><td class="line">186</td><td class="hits"></td><td class="source"> * @returns Array</td></tr><tr class=""><td class="line">187</td><td class="hits"></td><td class="source"> */</td></tr><tr class=""><td class="line">188</td><td class="hits"></td><td class="source"> filter: function (fn) {</td></tr><tr class="hit"><td class="line">189</td><td class="hits">1</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">190</td><td class="hits">1</td><td class="source"> strictEqual(__typeof(fn), "function", "fn must be a function");</td></tr><tr class=""><td class="line">191</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">192</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">193</td><td class="hits">1</td><td class="source"> var objs = this.$__keys,</td></tr><tr class=""><td class="line">194</td><td class="hits"></td><td class="source"> vals = this.$__values,</td></tr><tr class=""><td class="line">195</td><td class="hits"></td><td class="source"> i,</td></tr><tr class=""><td class="line">196</td><td class="hits"></td><td class="source"> k,</td></tr><tr class=""><td class="line">197</td><td class="hits"></td><td class="source"> v,</td></tr><tr class=""><td class="line">198</td><td class="hits"></td><td class="source"> max = objs.length,</td></tr><tr class=""><td class="line">199</td><td class="hits"></td><td class="source"> res = [];</td></tr><tr class=""><td class="line">200</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">201</td><td class="hits">1</td><td class="source"> for (i = 0; i < max; ++i) {</td></tr><tr class="hit"><td class="line">202</td><td class="hits">4</td><td class="source"> k = objs[i];</td></tr><tr class="hit"><td class="line">203</td><td class="hits">4</td><td class="source"> v = vals[k];</td></tr><tr class=""><td class="line">204</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">205</td><td class="hits">4</td><td class="source"> if (fn(v, k)) {</td></tr><tr class="hit"><td class="line">206</td><td class="hits">2</td><td class="source"> res.push(v);</td></tr><tr class=""><td class="line">207</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">208</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">209</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">210</td><td class="hits">1</td><td class="source"> return res;</td></tr><tr class=""><td class="line">211</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">212</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">213</td><td class="hits"></td><td class="source"> * The some() method tests whether some element in the array passes the test implemented by the provided function.</td></tr><tr class=""><td class="line">214</td><td class="hits"></td><td class="source"> *</td></tr><tr class=""><td class="line">215</td><td class="hits"></td><td class="source"> * @member Iterable</td></tr><tr class=""><td class="line">216</td><td class="hits"></td><td class="source"> * @param {Function} fn callback arguments(value, key)</td></tr><tr class=""><td class="line">217</td><td class="hits"></td><td class="source"> * @returns Boolean</td></tr><tr class=""><td class="line">218</td><td class="hits"></td><td class="source"> */</td></tr><tr class=""><td class="line">219</td><td class="hits"></td><td class="source"> some: function (fn) {</td></tr><tr class="hit"><td class="line">220</td><td class="hits">4</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">221</td><td class="hits">4</td><td class="source"> strictEqual(__typeof(fn), "function", "fn must be a function");</td></tr><tr class=""><td class="line">222</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">223</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">224</td><td class="hits">4</td><td class="source"> var objs = this.$__keys,</td></tr><tr class=""><td class="line">225</td><td class="hits"></td><td class="source"> vals = this.$__values,</td></tr><tr class=""><td class="line">226</td><td class="hits"></td><td class="source"> i,</td></tr><tr class=""><td class="line">227</td><td class="hits"></td><td class="source"> k,</td></tr><tr class=""><td class="line">228</td><td class="hits"></td><td class="source"> v,</td></tr><tr class=""><td class="line">229</td><td class="hits"></td><td class="source"> max = objs.length,</td></tr><tr class=""><td class="line">230</td><td class="hits"></td><td class="source"> res;</td></tr><tr class=""><td class="line">231</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">232</td><td class="hits">4</td><td class="source"> for (i = 0; i < max; ++i) {</td></tr><tr class="hit"><td class="line">233</td><td class="hits">14</td><td class="source"> k = objs[i];</td></tr><tr class="hit"><td class="line">234</td><td class="hits">14</td><td class="source"> v = vals[k];</td></tr><tr class=""><td class="line">235</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">236</td><td class="hits">14</td><td class="source"> if (fn(v, k)) {</td></tr><tr class="hit"><td class="line">237</td><td class="hits">2</td><td class="source"> return true;</td></tr><tr class=""><td class="line">238</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">239</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">240</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">241</td><td class="hits">2</td><td class="source"> return false;</td></tr><tr class=""><td class="line">242</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">243</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">244</td><td class="hits"></td><td class="source"> * The every() method tests whether all elements in the array pass the test implemented by the provided function.</td></tr><tr class=""><td class="line">245</td><td class="hits"></td><td class="source"> *</td></tr><tr class=""><td class="line">246</td><td class="hits"></td><td class="source"> * @member Iterable</td></tr><tr class=""><td class="line">247</td><td class="hits"></td><td class="source"> * @param {Function} fn callback arguments(value, key)</td></tr><tr class=""><td class="line">248</td><td class="hits"></td><td class="source"> * @returns Boolean</td></tr><tr class=""><td class="line">249</td><td class="hits"></td><td class="source"> */</td></tr><tr class=""><td class="line">250</td><td class="hits"></td><td class="source"> every: function (fn) {</td></tr><tr class="hit"><td class="line">251</td><td class="hits">2</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">252</td><td class="hits">2</td><td class="source"> strictEqual(__typeof(fn), "function", "fn must be a function");</td></tr><tr class=""><td class="line">253</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">254</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">255</td><td class="hits">2</td><td class="source"> var objs = this.$__keys,</td></tr><tr class=""><td class="line">256</td><td class="hits"></td><td class="source"> vals = this.$__values,</td></tr><tr class=""><td class="line">257</td><td class="hits"></td><td class="source"> i,</td></tr><tr class=""><td class="line">258</td><td class="hits"></td><td class="source"> k,</td></tr><tr class=""><td class="line">259</td><td class="hits"></td><td class="source"> v,</td></tr><tr class=""><td class="line">260</td><td class="hits"></td><td class="source"> max = objs.length,</td></tr><tr class=""><td class="line">261</td><td class="hits"></td><td class="source"> res;</td></tr><tr class=""><td class="line">262</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">263</td><td class="hits">2</td><td class="source"> for (i = 0; i < max; ++i) {</td></tr><tr class="hit"><td class="line">264</td><td class="hits">5</td><td class="source"> k = objs[i];</td></tr><tr class="hit"><td class="line">265</td><td class="hits">5</td><td class="source"> v = vals[k];</td></tr><tr class=""><td class="line">266</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">267</td><td class="hits">5</td><td class="source"> if (!fn(v, k)) {</td></tr><tr class="hit"><td class="line">268</td><td class="hits">1</td><td class="source"> return false;</td></tr><tr class=""><td class="line">269</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">270</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">271</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">272</td><td class="hits">1</td><td class="source"> return true;</td></tr><tr class=""><td class="line">273</td><td class="hits"></td><td class="source"> },</td></tr><tr class=""><td class="line">274</td><td class="hits"></td><td class="source"> /**</td></tr><tr class=""><td class="line">275</td><td class="hits"></td><td class="source"> * The firstOf() method return {key,value} of the first true test.</td></tr><tr class=""><td class="line">276</td><td class="hits"></td><td class="source"> *</td></tr><tr class=""><td class="line">277</td><td class="hits"></td><td class="source"> * @member Iterable</td></tr><tr class=""><td class="line">278</td><td class="hits"></td><td class="source"> * @param {Function} fn callback arguments(value, key)</td></tr><tr class=""><td class="line">279</td><td class="hits"></td><td class="source"> * @returns Boolean</td></tr><tr class=""><td class="line">280</td><td class="hits"></td><td class="source"> */</td></tr><tr class=""><td class="line">281</td><td class="hits"></td><td class="source"> firstOf: function (fn) {</td></tr><tr class="hit"><td class="line">282</td><td class="hits">1</td><td class="source"> if (debug) {</td></tr><tr class="hit"><td class="line">283</td><td class="hits">1</td><td class="source"> strictEqual(__typeof(fn), "function", "fn must be a function");</td></tr><tr class=""><td class="line">284</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">285</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">286</td><td class="hits">1</td><td class="source"> var objs = this.$__keys,</td></tr><tr class=""><td class="line">287</td><td class="hits"></td><td class="source"> vals = this.$__values,</td></tr><tr class=""><td class="line">288</td><td class="hits"></td><td class="source"> i,</td></tr><tr class=""><td class="line">289</td><td class="hits"></td><td class="source"> k,</td></tr><tr class=""><td class="line">290</td><td class="hits"></td><td class="source"> v,</td></tr><tr class=""><td class="line">291</td><td class="hits"></td><td class="source"> max = objs.length;</td></tr><tr class=""><td class="line">292</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">293</td><td class="hits">1</td><td class="source"> for (i = 0; i < max; ++i) {</td></tr><tr class="hit"><td class="line">294</td><td class="hits">2</td><td class="source"> k = objs[i];</td></tr><tr class="hit"><td class="line">295</td><td class="hits">2</td><td class="source"> v = vals[k];</td></tr><tr class=""><td class="line">296</td><td class="hits"></td><td class="source"></td></tr><tr class="hit"><td class="line">297</td><td class="hits">2</td><td class="source"> if (fn(v, k) === true) {</td></tr><tr class="hit"><td class="line">298</td><td class="hits">1</td><td class="source"> return {key: k, value: v};</td></tr><tr class=""><td class="line">299</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">300</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">301</td><td class="hits"></td><td class="source"></td></tr><tr class="miss"><td class="line">302</td><td class="hits">0</td><td class="source"> return null;</td></tr><tr class=""><td class="line">303</td><td class="hits"></td><td class="source"> }</td></tr><tr class=""><td class="line">304</td><td class="hits"></td><td class="source"> });</td></tr><tr class=""><td class="line">305</td><td class="hits"></td><td class="source"></td></tr><tr class=""><td class="line">306</td><td class="hits"></td><td class="source">}("undefined" === typeof module ? NodeClass : module.exports, "undefined" === typeof module));</td></tr><tr class=""><td class="line">307</td><td class="hits"></td><td class="source"></td></tr></tbody>
</table>
</div></div>
</div>
</body>
</html>