joosy 1.2.0.alpha.17 → 1.2.0.alpha.18

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 60ad1934f5ecfb16b68120d38b6d7e381c38909b
4
- data.tar.gz: 27f4dfabed5e1332c732777754955a1d4d5d3ec6
3
+ metadata.gz: d232c00d880bc16f1347e116474c34f5ee7c3b69
4
+ data.tar.gz: c4a4c4517e783adfd098f86f37c70053150d63e1
5
5
  SHA512:
6
- metadata.gz: 2477f0b941862289978f91f52fc9129be3f84d9a22352e029195946e8a078815a2c10f09e4f8456ffb474014c566a6abfaf44e191871f76a68d6f30111f4e6b7
7
- data.tar.gz: 9f8e2434757d3c5bb05801b3a03647d04a8862a9cf4a683d60b2a742a8b7b299a614637ff333ec91b0bacda9d65f406a27213733f71feb82c25bc17c12c911f5
6
+ metadata.gz: 7a3c770e88bd3ee3014e09eb34f27a2003cd2b82aa554b1cd65fe4f59d5b48725192f075160e72d46624ea3cb87b254cec53553e5bd1ec1643ce2d9c2f9544b9
7
+ data.tar.gz: 8a78a3f51594c528eaa37e9a2058722b9ef6935a3cd18f085196181c58bbb94418ac49486cc1f61963e906a852d556c1137ce58a192ea1188dd649fafa87732b
data/Gruntfile.coffee CHANGED
@@ -62,12 +62,12 @@ module.exports = (grunt) ->
62
62
  watch:
63
63
  source:
64
64
  files: [locations.source.path + '/**/*']
65
- tasks: ['mince', 'jasmine']
65
+ tasks: ['mince']
66
66
  specs:
67
67
  options:
68
68
  nospawn: true
69
69
  files: [locations.specs.units.core, locations.specs.units.extensions, locations.specs.helpers]
70
- tasks: ['coffee', 'jasmine']
70
+ tasks: ['coffee']
71
71
 
72
72
  coffee:
73
73
  specs:
data/bower.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "joosy",
3
- "version": "1.2.0-alpha.17",
3
+ "version": "1.2.0-alpha.18",
4
4
  "main": "lib/joosy.js",
5
5
  "ignore": [
6
6
  "bin",
data/lib/joosy.js CHANGED
@@ -543,9 +543,7 @@ Joosy.Modules.Container = {
543
543
  },
544
544
  refreshElements: function() {
545
545
  var _this = this;
546
- this.__collectElements().each(function(key, value) {
547
- return _this['$' + key] = _this.$(value);
548
- });
546
+ this.__assignElements(this, this.__collectElements());
549
547
  if (this.hasOwnProperty("__onRefreshes")) {
550
548
  this.__onRefreshes.each(function(callback) {
551
549
  return callback.apply(_this);
@@ -553,6 +551,18 @@ Joosy.Modules.Container = {
553
551
  return this.__onRefreshes = [];
554
552
  }
555
553
  },
554
+ __assignElements: function(root, entries) {
555
+ var _this = this;
556
+ return Object.each(entries, function(key, value) {
557
+ if (Object.isObject(value)) {
558
+ return _this.__assignElements(root['$' + key] = {}, value);
559
+ } else {
560
+ value = _this.__extractSelector(value);
561
+ root['$' + key] = _this.$(value);
562
+ return root['$' + key].selector = value;
563
+ }
564
+ });
565
+ },
556
566
  reloadContainer: function(htmlCallback) {
557
567
  if (typeof this.__removeMetamorphs === "function") {
558
568
  this.__removeMetamorphs();
@@ -584,11 +594,19 @@ Joosy.Modules.Container = {
584
594
  return events;
585
595
  },
586
596
  __extractSelector: function(selector) {
587
- var r;
588
- if (r = selector.match(/\$([A-z]+)/)) {
589
- selector = this.__collectElements()[r[1]];
590
- }
591
- return selector;
597
+ var _this = this;
598
+ selector = selector.replace(/(\$[A-z0-9\.\$]+)/g, function(path) {
599
+ var keyword, part, target, _i, _len, _ref;
600
+ path = path.split('.');
601
+ keyword = path.pop();
602
+ target = _this;
603
+ for (_i = 0, _len = path.length; _i < _len; _i++) {
604
+ part = path[_i];
605
+ target = target != null ? target[part] : void 0;
606
+ }
607
+ return target != null ? (_ref = target[keyword]) != null ? _ref.selector : void 0 : void 0;
608
+ });
609
+ return selector.trim();
592
610
  },
593
611
  __delegateEvents: function() {
594
612
  var events, module,
data/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "keywords": [
5
5
  "joosy"
6
6
  ],
7
- "version": "1.2.0-alpha.17",
7
+ "version": "1.2.0-alpha.18",
8
8
  "author": "Boris Staal <boris@staal.io>",
9
9
  "homepage": "http://joosy.ws/",
10
10
  "repository": {
@@ -5,12 +5,18 @@ describe "Joosy.Modules.Container", ->
5
5
  class @TestContainer extends Joosy.Module
6
6
  @include Joosy.Modules.Container
7
7
  elements:
8
+ content:
9
+ post1: '#post1'
10
+ post2: '#post2'
8
11
  footer: '.footer'
9
12
  events:
10
13
  'test': 'onContainerTest'
11
14
  container: $('#application', @ground)
12
15
  @box = new @TestContainer()
13
16
 
17
+ it "assigns nested elements", ->
18
+ @box.refreshElements()
19
+ expect(@box.$content.$post1.get 0).toBe $('#post1').get 0
14
20
 
15
21
  it "should have property named per declared element in container", ->
16
22
  @ground.prepend('<div class="footer" />') # out of container
@@ -44,17 +50,35 @@ describe "Joosy.Modules.Container", ->
44
50
  subBox = new SubContainerB()
45
51
  target = subBox.__collectElements()
46
52
  expect(target).toEqual Object.extended
53
+ content:
54
+ post1: '#post1'
55
+ post2: '#post2'
47
56
  first: 'overrided'
48
57
  second: 'second'
49
58
  third: 'third'
50
59
  footer: '.footer'
51
60
  target = (new @TestContainer()).__collectElements()
52
- expect(target).toEqual Object.extended(footer: '.footer')
61
+ expect(target).toEqual Object.extended
62
+ footer: '.footer'
63
+ content:
64
+ post1: '#post1'
65
+ post2: '#post2'
53
66
 
54
67
  it "should resolve element selector", ->
68
+ @box.refreshElements()
69
+
55
70
  target = @box.__extractSelector '$footer'
56
71
  expect(target).toEqual '.footer'
57
72
 
73
+ target = @box.__extractSelector '$content.$post1'
74
+ expect(target).toEqual '#post1'
75
+
76
+ target = @box.__extractSelector '$footer tr'
77
+ expect(target).toEqual '.footer tr'
78
+
79
+ target = @box.__extractSelector '$footer $content.$post1'
80
+ expect(target).toEqual '.footer #post1'
81
+
58
82
  it "should inherit event declarations", ->
59
83
  class SubContainerA extends @TestContainer
60
84
  events:
@@ -75,6 +99,7 @@ describe "Joosy.Modules.Container", ->
75
99
  expect(target).toEqual Object.extended('test': 'onContainerTest')
76
100
 
77
101
  it "should delegate events", ->
102
+ @box.refreshElements()
78
103
  callback = 1.upto(3).map -> sinon.spy()
79
104
  @box.events = Object.extended(@box.events).merge
80
105
  'test .post': callback[2]
@@ -27,14 +27,21 @@ Joosy.Modules.Container =
27
27
  # bar: '.bar'
28
28
  #
29
29
  refreshElements: ->
30
- @__collectElements().each (key, value) =>
31
- # TODO: Check for possible collisions?
32
- @['$'+key] = @$(value)
30
+ @__assignElements @, @__collectElements()
33
31
 
34
32
  if @hasOwnProperty "__onRefreshes"
35
33
  @__onRefreshes.each (callback) => callback.apply @
36
34
  @__onRefreshes = []
37
35
 
36
+ __assignElements: (root, entries) ->
37
+ Object.each entries, (key, value) =>
38
+ if Object.isObject(value)
39
+ @__assignElements root['$'+key]={}, value
40
+ else
41
+ value = @__extractSelector value
42
+ root['$'+key] = @$(value)
43
+ root['$'+key].selector = value
44
+
38
45
  #
39
46
  # Clears old HTML links, set the new HTML from the callback and refreshes elements
40
47
  #
@@ -86,10 +93,16 @@ Joosy.Modules.Container =
86
93
  # @param [String] selector Selector to convert
87
94
  #
88
95
  __extractSelector: (selector) ->
89
- if r = selector.match /\$([A-z]+)/
90
- selector = @__collectElements()[r[1]]
96
+ selector = selector.replace /(\$[A-z0-9\.\$]+)/g, (path) =>
97
+ path = path.split('.')
98
+ keyword = path.pop()
99
+
100
+ target = @
101
+ target = target?[part] for part in path
102
+
103
+ target?[keyword]?.selector
91
104
 
92
- selector
105
+ selector.trim()
93
106
 
94
107
  #
95
108
  # Bings events defined in 'events' to container
@@ -101,7 +114,7 @@ Joosy.Modules.Container =
101
114
  # 'click $foo': -> #this will search for selector of foo element
102
115
  #
103
116
  __delegateEvents: ->
104
- module = this
117
+ module = @
105
118
  events = @__collectEvents()
106
119
 
107
120
  events.each (key, method) =>
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.17
4
+ version: 1.2.0.alpha.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Boris Staal
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-06-29 00:00:00.000000000 Z
14
+ date: 2013-06-30 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: sprockets