joosy 1.2.0.alpha.70 → 1.2.0.alpha.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bower.json +1 -1
- data/build/joosy.js +248 -99
- data/package.json +4 -4
- data/source/joosy/modules/events.coffee +44 -1
- data/source/joosy/modules/page/scrolling.coffee +3 -1
- data/source/joosy/modules/page/title.coffee +3 -1
- data/source/joosy/modules/page.coffee +1 -0
- data/source/joosy/page.coffee +4 -4
- data/source/joosy/resources/array.coffee +21 -2
- data/source/joosy/resources/{watcher.coffee → cacher.coffee} +2 -2
- data/source/joosy/resources/hash.coffee +83 -0
- data/source/joosy/resources/scalar.coffee +12 -6
- data/spec/joosy/core/modules/events_spec.coffee +15 -3
- data/spec/joosy/environments/amd_spec.coffee +2 -1
- metadata +5 -4
- data/source/joosy/events/namespace.coffee +0 -25
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0dee5804bf618851443ae7da79979ae1ba847e23
|
|
4
|
+
data.tar.gz: 733416f347d8bc7ea08f1a84418b89d633f9fe9e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8a80dd2a1acfcec49e9857758ef5993bb52aa2b6110270d66ae2048eb5f8ee0ea8ff2357686664855425ef1667631f3db6f63f83e054ac481b774baf946e9a74
|
|
7
|
+
data.tar.gz: a93ebfa487fc46b8cd8fbd63d6b43eed9e3f9aecace0fd7c3734f8384afb6017258d8126b89a98dd338d33ccaaf85077394afe1868b64d623ea6138b401967b0
|
data/bower.json
CHANGED
data/build/joosy.js
CHANGED
|
@@ -245,9 +245,27 @@
|
|
|
245
245
|
|
|
246
246
|
}).call(this);
|
|
247
247
|
(function() {
|
|
248
|
-
var
|
|
248
|
+
var Namespace, SynchronizationContext,
|
|
249
|
+
__slice = [].slice;
|
|
250
|
+
|
|
251
|
+
SynchronizationContext = (function() {
|
|
252
|
+
function SynchronizationContext() {
|
|
253
|
+
this.actions = [];
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
SynchronizationContext.prototype["do"] = function(action) {
|
|
257
|
+
return this.actions.push(action);
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
SynchronizationContext.prototype.after = function(after) {
|
|
261
|
+
this.after = after;
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
return SynchronizationContext;
|
|
249
265
|
|
|
250
|
-
|
|
266
|
+
})();
|
|
267
|
+
|
|
268
|
+
Namespace = (function() {
|
|
251
269
|
function Namespace(parent) {
|
|
252
270
|
this.parent = parent;
|
|
253
271
|
this.bindings = [];
|
|
@@ -273,29 +291,17 @@
|
|
|
273
291
|
|
|
274
292
|
})();
|
|
275
293
|
|
|
276
|
-
}).call(this);
|
|
277
|
-
(function() {
|
|
278
|
-
var SynchronizationContext,
|
|
279
|
-
__slice = [].slice;
|
|
280
|
-
|
|
281
|
-
SynchronizationContext = (function() {
|
|
282
|
-
function SynchronizationContext() {
|
|
283
|
-
this.actions = [];
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
SynchronizationContext.prototype["do"] = function(action) {
|
|
287
|
-
return this.actions.push(action);
|
|
288
|
-
};
|
|
289
|
-
|
|
290
|
-
SynchronizationContext.prototype.after = function(after) {
|
|
291
|
-
this.after = after;
|
|
292
|
-
};
|
|
293
|
-
|
|
294
|
-
return SynchronizationContext;
|
|
295
|
-
|
|
296
|
-
})();
|
|
297
|
-
|
|
298
294
|
Joosy.Modules.Events = {
|
|
295
|
+
eventsNamespace: function(actions) {
|
|
296
|
+
var namespace;
|
|
297
|
+
namespace = new Namespace(this);
|
|
298
|
+
if (actions != null) {
|
|
299
|
+
if (typeof actions.call === "function") {
|
|
300
|
+
actions.call(namespace);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return namespace;
|
|
304
|
+
},
|
|
299
305
|
wait: function(name, events, callback) {
|
|
300
306
|
if (!this.hasOwnProperty('__oneShotEvents')) {
|
|
301
307
|
this.__oneShotEvents = {};
|
|
@@ -1760,7 +1766,11 @@
|
|
|
1760
1766
|
|
|
1761
1767
|
}).call(this);
|
|
1762
1768
|
(function() {
|
|
1763
|
-
Joosy.Modules.
|
|
1769
|
+
Joosy.Modules.Page = {};
|
|
1770
|
+
|
|
1771
|
+
}).call(this);
|
|
1772
|
+
(function() {
|
|
1773
|
+
Joosy.Modules.Page.Scrolling = {
|
|
1764
1774
|
included: function() {
|
|
1765
1775
|
this.scroll = function(element, options) {
|
|
1766
1776
|
if (options == null) {
|
|
@@ -1805,7 +1815,7 @@
|
|
|
1805
1815
|
|
|
1806
1816
|
}).call(this);
|
|
1807
1817
|
(function() {
|
|
1808
|
-
Joosy.Modules.
|
|
1818
|
+
Joosy.Modules.Page.Title = {
|
|
1809
1819
|
title: function(title, separator) {
|
|
1810
1820
|
if (separator == null) {
|
|
1811
1821
|
separator = ' / ';
|
|
@@ -1837,9 +1847,9 @@
|
|
|
1837
1847
|
return this.prototype.__layoutClass = layoutClass;
|
|
1838
1848
|
};
|
|
1839
1849
|
|
|
1840
|
-
Page.include(Joosy.Modules.
|
|
1850
|
+
Page.include(Joosy.Modules.Page.Scrolling);
|
|
1841
1851
|
|
|
1842
|
-
Page.extend(Joosy.Modules.
|
|
1852
|
+
Page.extend(Joosy.Modules.Page.Title);
|
|
1843
1853
|
|
|
1844
1854
|
function Page(params, previous) {
|
|
1845
1855
|
var _ref;
|
|
@@ -2276,13 +2286,12 @@
|
|
|
2276
2286
|
|
|
2277
2287
|
Joosy.Module.include.call(Array, Joosy.Modules.Events);
|
|
2278
2288
|
|
|
2289
|
+
Joosy.Module.include.call(Array, Joosy.Modules.Filters);
|
|
2290
|
+
|
|
2291
|
+
Array.registerPlainFilters('beforeLoad');
|
|
2292
|
+
|
|
2279
2293
|
function Array() {
|
|
2280
|
-
|
|
2281
|
-
_ref = this.slice.call(arguments, 0);
|
|
2282
|
-
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
2283
|
-
entry = _ref[_i];
|
|
2284
|
-
this.push(entry);
|
|
2285
|
-
}
|
|
2294
|
+
this.__fillData(arguments, false);
|
|
2286
2295
|
}
|
|
2287
2296
|
|
|
2288
2297
|
Array.prototype.get = function(index) {
|
|
@@ -2292,7 +2301,11 @@
|
|
|
2292
2301
|
Array.prototype.set = function(index, value) {
|
|
2293
2302
|
this[index] = value;
|
|
2294
2303
|
this.trigger('changed');
|
|
2295
|
-
return
|
|
2304
|
+
return value;
|
|
2305
|
+
};
|
|
2306
|
+
|
|
2307
|
+
Array.prototype.load = function() {
|
|
2308
|
+
return this.__fillData(arguments);
|
|
2296
2309
|
};
|
|
2297
2310
|
|
|
2298
2311
|
Array.prototype.push = function() {
|
|
@@ -2330,6 +2343,26 @@
|
|
|
2330
2343
|
return result;
|
|
2331
2344
|
};
|
|
2332
2345
|
|
|
2346
|
+
Array.prototype.__fillData = function(data, notify) {
|
|
2347
|
+
var entry, _i, _len, _ref;
|
|
2348
|
+
if (notify == null) {
|
|
2349
|
+
notify = true;
|
|
2350
|
+
}
|
|
2351
|
+
data = data[0] instanceof Array ? data[0] : this.slice.call(data, 0);
|
|
2352
|
+
if (this.length > 0) {
|
|
2353
|
+
this.splice(0, this.length);
|
|
2354
|
+
}
|
|
2355
|
+
_ref = this.__applyBeforeLoads(data);
|
|
2356
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
2357
|
+
entry = _ref[_i];
|
|
2358
|
+
this.push(entry);
|
|
2359
|
+
}
|
|
2360
|
+
if (notify) {
|
|
2361
|
+
this.trigger('changed');
|
|
2362
|
+
}
|
|
2363
|
+
return null;
|
|
2364
|
+
};
|
|
2365
|
+
|
|
2333
2366
|
return Array;
|
|
2334
2367
|
|
|
2335
2368
|
})(Array);
|
|
@@ -2345,75 +2378,24 @@
|
|
|
2345
2378
|
var __hasProp = {}.hasOwnProperty,
|
|
2346
2379
|
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
|
2347
2380
|
|
|
2348
|
-
Joosy.Resources.
|
|
2349
|
-
__extends(
|
|
2350
|
-
|
|
2351
|
-
Scalar.include(Joosy.Modules.Events);
|
|
2352
|
-
|
|
2353
|
-
function Scalar(value) {
|
|
2354
|
-
return Scalar.__super__.constructor.call(this, function() {
|
|
2355
|
-
return this.value = value;
|
|
2356
|
-
});
|
|
2357
|
-
}
|
|
2358
|
-
|
|
2359
|
-
Scalar.prototype.__call = function() {
|
|
2360
|
-
if (arguments.length > 0) {
|
|
2361
|
-
return this.set(arguments[0]);
|
|
2362
|
-
} else {
|
|
2363
|
-
return this.get();
|
|
2364
|
-
}
|
|
2365
|
-
};
|
|
2366
|
-
|
|
2367
|
-
Scalar.prototype.get = function() {
|
|
2368
|
-
return this.value;
|
|
2369
|
-
};
|
|
2370
|
-
|
|
2371
|
-
Scalar.prototype.set = function(value) {
|
|
2372
|
-
this.value = value;
|
|
2373
|
-
return this.trigger('changed');
|
|
2374
|
-
};
|
|
2375
|
-
|
|
2376
|
-
Scalar.prototype.valueOf = function() {
|
|
2377
|
-
return this.value.valueOf();
|
|
2378
|
-
};
|
|
2379
|
-
|
|
2380
|
-
Scalar.prototype.toString = function() {
|
|
2381
|
-
return this.value.toString();
|
|
2382
|
-
};
|
|
2383
|
-
|
|
2384
|
-
return Scalar;
|
|
2385
|
-
|
|
2386
|
-
})(Joosy.Function);
|
|
2387
|
-
|
|
2388
|
-
if ((typeof define !== "undefined" && define !== null ? define.amd : void 0) != null) {
|
|
2389
|
-
define('joosy/resources/scalar', function() {
|
|
2390
|
-
return Joosy.Resources.Scalar;
|
|
2391
|
-
});
|
|
2392
|
-
}
|
|
2393
|
-
|
|
2394
|
-
}).call(this);
|
|
2395
|
-
(function() {
|
|
2396
|
-
var __hasProp = {}.hasOwnProperty,
|
|
2397
|
-
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
|
2398
|
-
|
|
2399
|
-
Joosy.Resources.Watcher = (function(_super) {
|
|
2400
|
-
__extends(Watcher, _super);
|
|
2381
|
+
Joosy.Resources.Cacher = (function(_super) {
|
|
2382
|
+
__extends(Cacher, _super);
|
|
2401
2383
|
|
|
2402
|
-
|
|
2384
|
+
Cacher.include(Joosy.Modules.Events);
|
|
2403
2385
|
|
|
2404
|
-
|
|
2386
|
+
Cacher.include(Joosy.Modules.Filters);
|
|
2405
2387
|
|
|
2406
|
-
|
|
2388
|
+
Cacher.registerPlainFilters('beforeLoad');
|
|
2407
2389
|
|
|
2408
|
-
|
|
2390
|
+
Cacher.cache = function(cacheKey) {
|
|
2409
2391
|
return this.prototype.__cacheKey = cacheKey;
|
|
2410
2392
|
};
|
|
2411
2393
|
|
|
2412
|
-
|
|
2394
|
+
Cacher.fetcher = function(fetcher) {
|
|
2413
2395
|
return this.prototype.__fetcher = fetcher;
|
|
2414
2396
|
};
|
|
2415
2397
|
|
|
2416
|
-
function
|
|
2398
|
+
function Cacher(callback, cacheKey, fetcher) {
|
|
2417
2399
|
if (cacheKey == null) {
|
|
2418
2400
|
cacheKey = false;
|
|
2419
2401
|
}
|
|
@@ -2441,7 +2423,7 @@
|
|
|
2441
2423
|
}
|
|
2442
2424
|
}
|
|
2443
2425
|
|
|
2444
|
-
|
|
2426
|
+
Cacher.prototype.clone = function(callback) {
|
|
2445
2427
|
var copy;
|
|
2446
2428
|
copy = new this.constructor(callback, this.__cacheKey, this.__fetcher);
|
|
2447
2429
|
copy.data = Object.clone(this.data, true);
|
|
@@ -2449,7 +2431,7 @@
|
|
|
2449
2431
|
return copy;
|
|
2450
2432
|
};
|
|
2451
2433
|
|
|
2452
|
-
|
|
2434
|
+
Cacher.prototype.refresh = function(callback) {
|
|
2453
2435
|
var _this = this;
|
|
2454
2436
|
return this.__fetcher(function(result) {
|
|
2455
2437
|
if (_this.__cacheKey && localStorage) {
|
|
@@ -2463,13 +2445,180 @@
|
|
|
2463
2445
|
});
|
|
2464
2446
|
};
|
|
2465
2447
|
|
|
2466
|
-
return
|
|
2448
|
+
return Cacher;
|
|
2467
2449
|
|
|
2468
2450
|
})(Joosy.Module);
|
|
2469
2451
|
|
|
2470
2452
|
if ((typeof define !== "undefined" && define !== null ? define.amd : void 0) != null) {
|
|
2471
|
-
define('joosy/resources/
|
|
2472
|
-
return Joosy.Resources.
|
|
2453
|
+
define('joosy/resources/cacher', function() {
|
|
2454
|
+
return Joosy.Resources.Cacher;
|
|
2455
|
+
});
|
|
2456
|
+
}
|
|
2457
|
+
|
|
2458
|
+
}).call(this);
|
|
2459
|
+
(function() {
|
|
2460
|
+
var __hasProp = {}.hasOwnProperty,
|
|
2461
|
+
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
|
2462
|
+
|
|
2463
|
+
Joosy.Resources.Hash = (function(_super) {
|
|
2464
|
+
__extends(Hash, _super);
|
|
2465
|
+
|
|
2466
|
+
Hash.include(Joosy.Modules.Events);
|
|
2467
|
+
|
|
2468
|
+
Hash.include(Joosy.Modules.Filters);
|
|
2469
|
+
|
|
2470
|
+
function Hash(data) {
|
|
2471
|
+
if (data == null) {
|
|
2472
|
+
data = {};
|
|
2473
|
+
}
|
|
2474
|
+
return Hash.__super__.constructor.call(this, function() {
|
|
2475
|
+
return this.__fillData(data, false);
|
|
2476
|
+
});
|
|
2477
|
+
}
|
|
2478
|
+
|
|
2479
|
+
Hash.prototype.get = function(path) {
|
|
2480
|
+
var instance, property, _ref;
|
|
2481
|
+
_ref = this.__callTarget(path, true), instance = _ref[0], property = _ref[1];
|
|
2482
|
+
if (!instance) {
|
|
2483
|
+
return void 0;
|
|
2484
|
+
}
|
|
2485
|
+
if (instance instanceof Joosy.Resources.Hash) {
|
|
2486
|
+
return instance(property);
|
|
2487
|
+
} else {
|
|
2488
|
+
return instance[property];
|
|
2489
|
+
}
|
|
2490
|
+
};
|
|
2491
|
+
|
|
2492
|
+
Hash.prototype.set = function(path, value) {
|
|
2493
|
+
var instance, property, _ref;
|
|
2494
|
+
_ref = this.__callTarget(path), instance = _ref[0], property = _ref[1];
|
|
2495
|
+
if (instance instanceof Joosy.Resources.Hash) {
|
|
2496
|
+
instance(property, value);
|
|
2497
|
+
} else {
|
|
2498
|
+
instance[property] = value;
|
|
2499
|
+
}
|
|
2500
|
+
this.trigger('changed');
|
|
2501
|
+
return value;
|
|
2502
|
+
};
|
|
2503
|
+
|
|
2504
|
+
Hash.prototype.load = function(data) {
|
|
2505
|
+
this.__fillData(data);
|
|
2506
|
+
return this;
|
|
2507
|
+
};
|
|
2508
|
+
|
|
2509
|
+
Hash.prototype.__call = function(path, value) {
|
|
2510
|
+
if (arguments.length > 1) {
|
|
2511
|
+
return this.__set(path, value);
|
|
2512
|
+
} else {
|
|
2513
|
+
return this.__get(path);
|
|
2514
|
+
}
|
|
2515
|
+
};
|
|
2516
|
+
|
|
2517
|
+
Hash.prototype.__callTarget = function(path, safe) {
|
|
2518
|
+
var keyword, part, target, _i, _len;
|
|
2519
|
+
if (safe == null) {
|
|
2520
|
+
safe = false;
|
|
2521
|
+
}
|
|
2522
|
+
if (path.indexOf('.') !== -1 && (this.data[path] == null)) {
|
|
2523
|
+
path = path.split('.');
|
|
2524
|
+
keyword = path.pop();
|
|
2525
|
+
target = this.data;
|
|
2526
|
+
for (_i = 0, _len = path.length; _i < _len; _i++) {
|
|
2527
|
+
part = path[_i];
|
|
2528
|
+
if (safe && (target[part] == null)) {
|
|
2529
|
+
return false;
|
|
2530
|
+
}
|
|
2531
|
+
if (target[part] == null) {
|
|
2532
|
+
target[part] = {};
|
|
2533
|
+
}
|
|
2534
|
+
target = target instanceof Joosy.Resources.Hash ? target(part) : target[part];
|
|
2535
|
+
}
|
|
2536
|
+
return [target, keyword];
|
|
2537
|
+
} else {
|
|
2538
|
+
return [this.data, path];
|
|
2539
|
+
}
|
|
2540
|
+
};
|
|
2541
|
+
|
|
2542
|
+
Hash.prototype.__fillData = function(data, notify) {
|
|
2543
|
+
if (notify == null) {
|
|
2544
|
+
notify = true;
|
|
2545
|
+
}
|
|
2546
|
+
this.data = this.__applyBeforeLoads(data);
|
|
2547
|
+
if (notify) {
|
|
2548
|
+
this.trigger('changed');
|
|
2549
|
+
}
|
|
2550
|
+
return null;
|
|
2551
|
+
};
|
|
2552
|
+
|
|
2553
|
+
Hash.prototype.toString = function() {
|
|
2554
|
+
return JSON.stringify(this.data);
|
|
2555
|
+
};
|
|
2556
|
+
|
|
2557
|
+
return Hash;
|
|
2558
|
+
|
|
2559
|
+
})(Joosy.Function);
|
|
2560
|
+
|
|
2561
|
+
if ((typeof define !== "undefined" && define !== null ? define.amd : void 0) != null) {
|
|
2562
|
+
define('joosy/resources/hash', function() {
|
|
2563
|
+
return Joosy.Resources.Hash;
|
|
2564
|
+
});
|
|
2565
|
+
}
|
|
2566
|
+
|
|
2567
|
+
}).call(this);
|
|
2568
|
+
(function() {
|
|
2569
|
+
var __hasProp = {}.hasOwnProperty,
|
|
2570
|
+
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
|
2571
|
+
|
|
2572
|
+
Joosy.Resources.Scalar = (function(_super) {
|
|
2573
|
+
__extends(Scalar, _super);
|
|
2574
|
+
|
|
2575
|
+
Scalar.include(Joosy.Modules.Events);
|
|
2576
|
+
|
|
2577
|
+
Scalar.include(Joosy.Modules.Filters);
|
|
2578
|
+
|
|
2579
|
+
function Scalar(value) {
|
|
2580
|
+
return Scalar.__super__.constructor.call(this, function() {
|
|
2581
|
+
return this.value = value;
|
|
2582
|
+
});
|
|
2583
|
+
}
|
|
2584
|
+
|
|
2585
|
+
Scalar.prototype.get = function() {
|
|
2586
|
+
return this.value;
|
|
2587
|
+
};
|
|
2588
|
+
|
|
2589
|
+
Scalar.prototype.set = function() {
|
|
2590
|
+
return this.load.apply(this, arguments);
|
|
2591
|
+
};
|
|
2592
|
+
|
|
2593
|
+
Scalar.prototype.load = function(value) {
|
|
2594
|
+
this.value = this.__applyBeforeLoads(value);
|
|
2595
|
+
this.trigger('changed');
|
|
2596
|
+
return this.value;
|
|
2597
|
+
};
|
|
2598
|
+
|
|
2599
|
+
Scalar.prototype.__call = function() {
|
|
2600
|
+
if (arguments.length > 0) {
|
|
2601
|
+
return this.set(arguments[0]);
|
|
2602
|
+
} else {
|
|
2603
|
+
return this.get();
|
|
2604
|
+
}
|
|
2605
|
+
};
|
|
2606
|
+
|
|
2607
|
+
Scalar.prototype.valueOf = function() {
|
|
2608
|
+
return this.value.valueOf();
|
|
2609
|
+
};
|
|
2610
|
+
|
|
2611
|
+
Scalar.prototype.toString = function() {
|
|
2612
|
+
return this.value.toString();
|
|
2613
|
+
};
|
|
2614
|
+
|
|
2615
|
+
return Scalar;
|
|
2616
|
+
|
|
2617
|
+
})(Joosy.Function);
|
|
2618
|
+
|
|
2619
|
+
if ((typeof define !== "undefined" && define !== null ? define.amd : void 0) != null) {
|
|
2620
|
+
define('joosy/resources/scalar', function() {
|
|
2621
|
+
return Joosy.Resources.Scalar;
|
|
2473
2622
|
});
|
|
2474
2623
|
}
|
|
2475
2624
|
|
data/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"keywords": [
|
|
5
5
|
"joosy"
|
|
6
6
|
],
|
|
7
|
-
"version": "1.2.0-alpha.
|
|
7
|
+
"version": "1.2.0-alpha.71",
|
|
8
8
|
"author": "Boris Staal <boris@staal.io>",
|
|
9
9
|
"homepage": "http://joosy.ws/",
|
|
10
10
|
"repository": {
|
|
@@ -15,8 +15,7 @@
|
|
|
15
15
|
"node": ">=0.4.0"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"grill": ">=1.0.0-alpha.19"
|
|
19
|
-
"moment": "~2.1.0"
|
|
18
|
+
"grill": ">=1.0.0-alpha.19"
|
|
20
19
|
},
|
|
21
20
|
"devDependencies": {
|
|
22
21
|
"bower": "~1.2.1",
|
|
@@ -24,6 +23,7 @@
|
|
|
24
23
|
"grunt-coffeelint": "0.0.6",
|
|
25
24
|
"grunt-release": "~0.3.5",
|
|
26
25
|
"grunt-contrib-testem": ">=0.5.2",
|
|
27
|
-
"grunt-gh-pages": "git+https://github.com/inossidabile/grunt-gh-pages.git"
|
|
26
|
+
"grunt-gh-pages": "git+https://github.com/inossidabile/grunt-gh-pages.git",
|
|
27
|
+
"moment": "~2.1.0"
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#= require joosy/joosy
|
|
2
|
-
#= require_tree ../events
|
|
3
2
|
|
|
4
3
|
# @private
|
|
5
4
|
class SynchronizationContext
|
|
@@ -7,6 +6,35 @@ class SynchronizationContext
|
|
|
7
6
|
do: (action) -> @actions.push action
|
|
8
7
|
after: (@after) ->
|
|
9
8
|
|
|
9
|
+
#
|
|
10
|
+
# @private
|
|
11
|
+
# Events namespace
|
|
12
|
+
#
|
|
13
|
+
# Creates unified collection of bindings to a particular instance
|
|
14
|
+
# that can be unbinded alltogether
|
|
15
|
+
#
|
|
16
|
+
# @example
|
|
17
|
+
# namespace = new Namespace(something)
|
|
18
|
+
#
|
|
19
|
+
# namespace.bind 'event1', ->
|
|
20
|
+
# namespace.bind 'event2', ->
|
|
21
|
+
# namespace.unbind() # unbinds both bindings
|
|
22
|
+
#
|
|
23
|
+
class Namespace
|
|
24
|
+
#
|
|
25
|
+
# @param [Object] @parent Any instance that can trigger events
|
|
26
|
+
#
|
|
27
|
+
constructor: (@parent) ->
|
|
28
|
+
@bindings = []
|
|
29
|
+
|
|
30
|
+
bind: (args...) ->
|
|
31
|
+
@bindings.push @parent.bind(args...)
|
|
32
|
+
|
|
33
|
+
unbind: ->
|
|
34
|
+
@parent.unbind b for b in @bindings
|
|
35
|
+
@bindings = []
|
|
36
|
+
|
|
37
|
+
|
|
10
38
|
#
|
|
11
39
|
# Basic events implementation
|
|
12
40
|
#
|
|
@@ -14,6 +42,21 @@ class SynchronizationContext
|
|
|
14
42
|
#
|
|
15
43
|
Joosy.Modules.Events =
|
|
16
44
|
|
|
45
|
+
#
|
|
46
|
+
# Creates events namespace
|
|
47
|
+
#
|
|
48
|
+
# @example
|
|
49
|
+
# namespace = @entity.eventsNamespace, ->
|
|
50
|
+
# @bind 'action1', ->
|
|
51
|
+
# @bind 'action2', ->
|
|
52
|
+
#
|
|
53
|
+
# namespace.unbind()
|
|
54
|
+
#
|
|
55
|
+
eventsNamespace: (actions) ->
|
|
56
|
+
namespace = new Namespace @
|
|
57
|
+
actions?.call?(namespace)
|
|
58
|
+
namespace
|
|
59
|
+
|
|
17
60
|
#
|
|
18
61
|
# Waits for the list of given events to happen at least once. Then runs callback.
|
|
19
62
|
#
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Joosy.Modules.Page = {}
|
data/source/joosy/page.coffee
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
# class @RumbaPage extends Joosy.Page
|
|
12
12
|
# @view 'rumba'
|
|
13
13
|
#
|
|
14
|
-
# @include Joosy.Modules.
|
|
15
|
-
# @extend Joosy.Modules.
|
|
14
|
+
# @include Joosy.Modules.Page.Scrolling
|
|
15
|
+
# @extend Joosy.Modules.Page.Title
|
|
16
16
|
#
|
|
17
17
|
class Joosy.Page extends Joosy.Widget
|
|
18
18
|
#
|
|
@@ -23,8 +23,8 @@ class Joosy.Page extends Joosy.Widget
|
|
|
23
23
|
@layout: (layoutClass) ->
|
|
24
24
|
@::__layoutClass = layoutClass
|
|
25
25
|
|
|
26
|
-
@include Joosy.Modules.
|
|
27
|
-
@extend Joosy.Modules.
|
|
26
|
+
@include Joosy.Modules.Page.Scrolling
|
|
27
|
+
@extend Joosy.Modules.Page.Title
|
|
28
28
|
|
|
29
29
|
#
|
|
30
30
|
# @param [Hash] params Route params
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
class Joosy.Resources.Array extends Array
|
|
2
2
|
|
|
3
3
|
Joosy.Module.include.call @, Joosy.Modules.Events
|
|
4
|
+
Joosy.Module.include.call @, Joosy.Modules.Filters
|
|
5
|
+
|
|
6
|
+
@registerPlainFilters 'beforeLoad'
|
|
4
7
|
|
|
5
8
|
constructor: ->
|
|
6
|
-
@
|
|
9
|
+
@__fillData arguments, false
|
|
7
10
|
|
|
8
11
|
get: (index) ->
|
|
9
12
|
@[index]
|
|
@@ -11,7 +14,10 @@ class Joosy.Resources.Array extends Array
|
|
|
11
14
|
set: (index, value) ->
|
|
12
15
|
@[index] = value
|
|
13
16
|
@trigger 'changed'
|
|
14
|
-
|
|
17
|
+
value
|
|
18
|
+
|
|
19
|
+
load: ->
|
|
20
|
+
@__fillData arguments
|
|
15
21
|
|
|
16
22
|
push: ->
|
|
17
23
|
result = super
|
|
@@ -38,6 +44,19 @@ class Joosy.Resources.Array extends Array
|
|
|
38
44
|
@trigger 'changed'
|
|
39
45
|
result
|
|
40
46
|
|
|
47
|
+
__fillData: (data, notify=true) ->
|
|
48
|
+
data = if data[0] instanceof Array
|
|
49
|
+
data[0]
|
|
50
|
+
else
|
|
51
|
+
@slice.call(data, 0)
|
|
52
|
+
|
|
53
|
+
@splice 0, @length if @length > 0
|
|
54
|
+
@push entry for entry in @__applyBeforeLoads(data)
|
|
55
|
+
|
|
56
|
+
@trigger 'changed' if notify
|
|
57
|
+
|
|
58
|
+
null
|
|
59
|
+
|
|
41
60
|
# AMD wrapper
|
|
42
61
|
if define?.amd?
|
|
43
62
|
define 'joosy/resources/array', -> Joosy.Resources.Array
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
class Joosy.Resources.
|
|
1
|
+
class Joosy.Resources.Cacher extends Joosy.Module
|
|
2
2
|
|
|
3
3
|
@include Joosy.Modules.Events
|
|
4
4
|
@include Joosy.Modules.Filters
|
|
@@ -38,4 +38,4 @@ class Joosy.Resources.Watcher extends Joosy.Module
|
|
|
38
38
|
|
|
39
39
|
# AMD wrapper
|
|
40
40
|
if define?.amd?
|
|
41
|
-
define 'joosy/resources/
|
|
41
|
+
define 'joosy/resources/cacher', -> Joosy.Resources.Cacher
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
class Joosy.Resources.Hash extends Joosy.Function
|
|
2
|
+
|
|
3
|
+
@include Joosy.Modules.Events
|
|
4
|
+
@include Joosy.Modules.Filters
|
|
5
|
+
|
|
6
|
+
constructor: (data={}) ->
|
|
7
|
+
return super ->
|
|
8
|
+
@__fillData data, false
|
|
9
|
+
|
|
10
|
+
get: (path) ->
|
|
11
|
+
[instance, property] = @__callTarget path, true
|
|
12
|
+
|
|
13
|
+
return undefined unless instance
|
|
14
|
+
|
|
15
|
+
if instance instanceof Joosy.Resources.Hash
|
|
16
|
+
instance property
|
|
17
|
+
else
|
|
18
|
+
instance[property]
|
|
19
|
+
|
|
20
|
+
set: (path, value) ->
|
|
21
|
+
[instance, property] = @__callTarget path
|
|
22
|
+
|
|
23
|
+
if instance instanceof Joosy.Resources.Hash
|
|
24
|
+
instance(property, value)
|
|
25
|
+
else
|
|
26
|
+
instance[property] = value
|
|
27
|
+
|
|
28
|
+
@trigger 'changed'
|
|
29
|
+
value
|
|
30
|
+
|
|
31
|
+
load: (data) ->
|
|
32
|
+
@__fillData data
|
|
33
|
+
@
|
|
34
|
+
|
|
35
|
+
__call: (path, value) ->
|
|
36
|
+
if arguments.length > 1
|
|
37
|
+
@__set path, value
|
|
38
|
+
else
|
|
39
|
+
@__get path
|
|
40
|
+
|
|
41
|
+
#
|
|
42
|
+
# Locates the actual instance of attribute path `foo.bar` from get/set
|
|
43
|
+
#
|
|
44
|
+
# @param [String] path Path to the attribute (`foo.bar`)
|
|
45
|
+
# @param [Boolean] safe Indicates whether nested hashes should not be automatically created when they don't exist
|
|
46
|
+
# @return [Array] Instance of object containing last step of path and keyword for required field
|
|
47
|
+
#
|
|
48
|
+
__callTarget: (path, safe=false) ->
|
|
49
|
+
if path.indexOf('.') != -1 && !@data[path]?
|
|
50
|
+
path = path.split '.'
|
|
51
|
+
keyword = path.pop()
|
|
52
|
+
target = @data
|
|
53
|
+
|
|
54
|
+
for part in path
|
|
55
|
+
return false if safe && !target[part]?
|
|
56
|
+
|
|
57
|
+
target[part] ?= {}
|
|
58
|
+
|
|
59
|
+
target = if target instanceof Joosy.Resources.Hash
|
|
60
|
+
target(part)
|
|
61
|
+
else
|
|
62
|
+
target[part]
|
|
63
|
+
|
|
64
|
+
[target, keyword]
|
|
65
|
+
else
|
|
66
|
+
[@data, path]
|
|
67
|
+
|
|
68
|
+
#
|
|
69
|
+
# Defines how exactly prepared data should be saved
|
|
70
|
+
#
|
|
71
|
+
# @param [Object] data Raw data to store
|
|
72
|
+
#
|
|
73
|
+
__fillData: (data, notify=true) ->
|
|
74
|
+
@data = @__applyBeforeLoads data
|
|
75
|
+
@trigger 'changed' if notify
|
|
76
|
+
null
|
|
77
|
+
|
|
78
|
+
toString: ->
|
|
79
|
+
JSON.stringify(@data)
|
|
80
|
+
|
|
81
|
+
# AMD wrapper
|
|
82
|
+
if define?.amd?
|
|
83
|
+
define 'joosy/resources/hash', -> Joosy.Resources.Hash
|
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
class Joosy.Resources.Scalar extends Joosy.Function
|
|
2
2
|
|
|
3
3
|
@include Joosy.Modules.Events
|
|
4
|
+
@include Joosy.Modules.Filters
|
|
4
5
|
|
|
5
6
|
constructor: (value) ->
|
|
6
7
|
return super ->
|
|
7
8
|
@value = value
|
|
8
9
|
|
|
10
|
+
get: ->
|
|
11
|
+
@value
|
|
12
|
+
|
|
13
|
+
set: ->
|
|
14
|
+
@load arguments...
|
|
15
|
+
|
|
16
|
+
load: (value) ->
|
|
17
|
+
@value = @__applyBeforeLoads(value)
|
|
18
|
+
@trigger 'changed'
|
|
19
|
+
@value
|
|
20
|
+
|
|
9
21
|
__call: ->
|
|
10
22
|
if arguments.length > 0
|
|
11
23
|
@set arguments[0]
|
|
12
24
|
else
|
|
13
25
|
@get()
|
|
14
26
|
|
|
15
|
-
get: ->
|
|
16
|
-
@value
|
|
17
|
-
|
|
18
|
-
set: (@value) ->
|
|
19
|
-
@trigger 'changed'
|
|
20
|
-
|
|
21
27
|
valueOf: ->
|
|
22
28
|
@value.valueOf()
|
|
23
29
|
|
|
@@ -153,14 +153,14 @@ describe "Joosy.Modules.Events", ->
|
|
|
153
153
|
|
|
154
154
|
waits 3
|
|
155
155
|
|
|
156
|
-
describe "
|
|
156
|
+
describe "namespace", ->
|
|
157
157
|
|
|
158
158
|
beforeEach ->
|
|
159
159
|
@callback = sinon.spy()
|
|
160
160
|
|
|
161
161
|
it "proxies events", ->
|
|
162
162
|
eventer = new @Eventer
|
|
163
|
-
namespace =
|
|
163
|
+
namespace = eventer.eventsNamespace()
|
|
164
164
|
|
|
165
165
|
namespace.bind 'event1', @callback
|
|
166
166
|
namespace.bind 'event2', @callback
|
|
@@ -170,9 +170,21 @@ describe "Joosy.Modules.Events", ->
|
|
|
170
170
|
|
|
171
171
|
expect(@callback.callCount).toEqual 2
|
|
172
172
|
|
|
173
|
+
it "assigns with callback", ->
|
|
174
|
+
callback = @callback
|
|
175
|
+
eventer = new @Eventer
|
|
176
|
+
namespace = eventer.eventsNamespace ->
|
|
177
|
+
@bind 'event1', callback
|
|
178
|
+
@bind 'event2', callback
|
|
179
|
+
|
|
180
|
+
eventer.trigger 'event1'
|
|
181
|
+
eventer.trigger 'event2'
|
|
182
|
+
|
|
183
|
+
expect(@callback.callCount).toEqual 2
|
|
184
|
+
|
|
173
185
|
it "unbinds events", ->
|
|
174
186
|
eventer = new @Eventer
|
|
175
|
-
namespace =
|
|
187
|
+
namespace = eventer.eventsNamespace()
|
|
176
188
|
|
|
177
189
|
namespace.bind 'event1', @callback
|
|
178
190
|
namespace.bind 'event2', @callback
|
|
@@ -32,8 +32,9 @@ describe "Joosy", ->
|
|
|
32
32
|
'joosy/modules/time_manager',
|
|
33
33
|
'joosy/page',
|
|
34
34
|
'joosy/resources/array',
|
|
35
|
+
'joosy/resources/cacher',
|
|
36
|
+
'joosy/resources/hash',
|
|
35
37
|
'joosy/resources/scalar',
|
|
36
|
-
'joosy/resources/watcher',
|
|
37
38
|
'joosy/router',
|
|
38
39
|
'joosy/templaters/jst',
|
|
39
40
|
'joosy/widget'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: joosy
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.0.alpha.
|
|
4
|
+
version: 1.2.0.alpha.71
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Boris Staal
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2013-09-
|
|
13
|
+
date: 2013-09-03 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: sprockets
|
|
@@ -60,7 +60,6 @@ files:
|
|
|
60
60
|
- package.json
|
|
61
61
|
- source/joosy.coffee
|
|
62
62
|
- source/joosy/application.coffee
|
|
63
|
-
- source/joosy/events/namespace.coffee
|
|
64
63
|
- source/joosy/extensions/resources-form/form.coffee
|
|
65
64
|
- source/joosy/extensions/resources-form/helpers/form.coffee
|
|
66
65
|
- source/joosy/extensions/resources-form/index.coffee
|
|
@@ -79,6 +78,7 @@ files:
|
|
|
79
78
|
- source/joosy/modules/events.coffee
|
|
80
79
|
- source/joosy/modules/filters.coffee
|
|
81
80
|
- source/joosy/modules/log.coffee
|
|
81
|
+
- source/joosy/modules/page.coffee
|
|
82
82
|
- source/joosy/modules/page/scrolling.coffee
|
|
83
83
|
- source/joosy/modules/page/title.coffee
|
|
84
84
|
- source/joosy/modules/renderer.coffee
|
|
@@ -86,8 +86,9 @@ files:
|
|
|
86
86
|
- source/joosy/modules/widgets_manager.coffee
|
|
87
87
|
- source/joosy/page.coffee
|
|
88
88
|
- source/joosy/resources/array.coffee
|
|
89
|
+
- source/joosy/resources/cacher.coffee
|
|
90
|
+
- source/joosy/resources/hash.coffee
|
|
89
91
|
- source/joosy/resources/scalar.coffee
|
|
90
|
-
- source/joosy/resources/watcher.coffee
|
|
91
92
|
- source/joosy/router.coffee
|
|
92
93
|
- source/joosy/templaters/jst.coffee
|
|
93
94
|
- source/joosy/widget.coffee
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Events namespace
|
|
3
|
-
#
|
|
4
|
-
# Creates unified collection of bindings to a particular instance
|
|
5
|
-
# that can be unbinded alltogether
|
|
6
|
-
#
|
|
7
|
-
# @see Joosy.Modules.Events
|
|
8
|
-
# @example
|
|
9
|
-
# namespace = Joosy.Events.Namespace(something)
|
|
10
|
-
#
|
|
11
|
-
# namespace.bind 'event1', ->
|
|
12
|
-
# namespace.bind 'event2', ->
|
|
13
|
-
# namespace.unbind() # unbinds both bindings
|
|
14
|
-
#
|
|
15
|
-
class Joosy.Events.Namespace
|
|
16
|
-
#
|
|
17
|
-
# @param [Object] @parent Any instance that can trigger events
|
|
18
|
-
#
|
|
19
|
-
constructor: (@parent) ->
|
|
20
|
-
@bindings = []
|
|
21
|
-
|
|
22
|
-
bind: (args...) -> @bindings.push @parent.bind(args...)
|
|
23
|
-
unbind: ->
|
|
24
|
-
@parent.unbind b for b in @bindings
|
|
25
|
-
@bindings = []
|