luca 0.6.7 → 0.6.8

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.
@@ -1,6 +1,6 @@
1
1
  module Luca
2
2
  module Rails
3
- VERSION = "0.6.7"
3
+ VERSION = "0.6.8"
4
4
  end
5
5
  end
6
6
 
@@ -1 +1,43 @@
1
1
  describe "The Card View", ->
2
+ beforeEach ->
3
+ @cardView = new Luca.containers.CardView
4
+ activeItem: 0
5
+ components:[
6
+ markup: "component one"
7
+ name: "one"
8
+ one: true
9
+ ,
10
+ markup: "component two"
11
+ name: "two"
12
+ two: true
13
+ firstActivation: sinon.spy()
14
+ ,
15
+ markup: "component three"
16
+ name: "three"
17
+ three: true
18
+ ]
19
+
20
+ @cardView.render()
21
+
22
+ it "should be able to find the cards by name", ->
23
+ expect( @cardView.find("one") ).toBeDefined()
24
+ expect( @cardView.find("one").one ).toEqual true
25
+
26
+ it "should start with the first component active", ->
27
+ expect( @cardView.activeComponent()?.name ).toEqual "one"
28
+
29
+ it "should be able to activate components by name", ->
30
+ @cardView.activate("two")
31
+ expect( @cardView.activeComponent()?.name ).toEqual "two"
32
+
33
+ it "shouldn't fire first activation on a component", ->
34
+ expect( @cardView.find("two")?.firstActivation ).not.toHaveBeenCalled()
35
+
36
+ it "should fire firstActivation on a component", ->
37
+ @cardView.activate("two")
38
+ expect( @cardView.find("two")?.firstActivation ).toHaveBeenCalled()
39
+
40
+ it "should fire deactivation on a component", ->
41
+ @cardView.find("one").spiedEvents = {}
42
+ @cardView.activate("two")
43
+ expect( @cardView.find("one") ).toHaveTriggered("deactivation")
@@ -0,0 +1,66 @@
1
+ describe 'The Luca Container', ->
2
+ beforeEach ->
3
+ @container = new Luca.core.Container
4
+ components:[
5
+ name: "component_one"
6
+ ctype: "template"
7
+ markup: "markup for component one"
8
+ id: "c1"
9
+ value: 1
10
+ spy: sinon.spy()
11
+ ,
12
+ name: "component_two"
13
+ ctype: "template"
14
+ markup: "markup for component two"
15
+ id: "c2"
16
+ value: 0
17
+ spy: sinon.spy()
18
+ ,
19
+ name: "component_three"
20
+ ctype: "container"
21
+ id: "c3"
22
+ value: 1
23
+ spy: sinon.spy()
24
+ components:[
25
+ ctype: "template"
26
+ name: "component_four"
27
+ markup: "markup for component four"
28
+ spy: sinon.spy()
29
+ ]
30
+ ]
31
+
32
+ it "should trigger after initialize", ->
33
+ expect( @container ).toHaveTriggered "after:initialize"
34
+
35
+ it "should have some components", ->
36
+ expect( @container.components.length ).toEqual 3
37
+
38
+ it "should render the container and all of the sub views", ->
39
+ @container.render()
40
+ html=$(@container.el).html()
41
+ expect( html ).toContain "markup for component one"
42
+ expect( html ).toContain "markup for component two"
43
+
44
+ it "should render the container and all of the nested sub views", ->
45
+ @container.render()
46
+ html=$(@container.el).html()
47
+ expect( html ).toContain "markup for component four"
48
+
49
+ it "should select all components matching a key/value combo", ->
50
+ components = @container.select("value",1)
51
+ expect( components.length ).toEqual 2
52
+
53
+ it "should run a function on each component", ->
54
+ @container.eachComponent (c)-> c.spy()
55
+
56
+ _( @container.components ).each (component)->
57
+ expect( component.spy ).toHaveBeenCalled()
58
+
59
+ it "should run a function on each component including nested", ->
60
+ @container.render()
61
+ @container.eachComponent (c)-> c.spy()
62
+ expect( Luca.cache("component_four").spy ).toHaveBeenCalled()
63
+
64
+ it "should be able to find a component by name", ->
65
+ expect( @container.findComponentByName("component_one") ).toBeDefined()
66
+ expect( @container.findComponentByName("undefined") ).not.toBeDefined()
@@ -1,4 +1,4 @@
1
- Luca.containers.CardView = Luca.core.Container.extend
1
+ Luca.containers.CardView = Luca.core.Container.extend
2
2
  componentType: 'card_view'
3
3
 
4
4
  className: 'luca-ui-card-view-wrapper'
@@ -11,40 +11,40 @@ Luca.containers.CardView = Luca.core.Container.extend
11
11
  'before:card:switch',
12
12
  'after:card:switch'
13
13
  ]
14
-
14
+
15
15
  initialize: (@options)->
16
16
  Luca.core.Container::initialize.apply @,arguments
17
17
  @setupHooks(@hooks)
18
-
18
+
19
19
  componentClass: 'luca-ui-card'
20
20
 
21
21
  beforeLayout: ()->
22
22
  @cards = _(@components).map (card,cardIndex) =>
23
- classes: @componentClass
23
+ classes: @componentClass
24
24
  style: "display:#{ (if cardIndex is @activeCard then 'block' else 'none' )}"
25
25
  id: "#{ @cid }-#{ cardIndex }"
26
-
26
+
27
27
  prepareLayout: ()->
28
28
  @card_containers = _( @cards ).map (card, index)=>
29
- @$el.append Luca.templates["containers/basic"](card)
29
+ @$el.append Luca.templates["containers/basic"](card)
30
30
  $("##{ card.id }")
31
31
 
32
- prepareComponents: ()->
32
+ prepareComponents: ()->
33
33
  @components = _( @components ).map (object,index)=>
34
34
  card = @cards[index]
35
35
  object.container = "##{ card.id }"
36
36
  object
37
-
38
- activeComponent: ()->
37
+
38
+ activeComponent: ()->
39
39
  @getComponent( @activeCard )
40
-
40
+
41
41
  cycle: ()->
42
42
  nextIndex = if @activeCard < @components.length - 1 then @activeCard + 1 else 0
43
- @activate( nextIndex )
43
+ @activate( nextIndex )
44
44
 
45
- find: (name)->
45
+ find: (name)->
46
46
  @findComponentByName(name,true)
47
-
47
+
48
48
  firstActivation: ()->
49
49
  @activeComponent().trigger "first:activation", @, @activeComponent()
50
50
 
@@ -61,13 +61,12 @@ Luca.containers.CardView = Luca.core.Container.extend
61
61
  if !current
62
62
  index = @indexOf(index)
63
63
  current = @getComponent( index )
64
-
64
+
65
65
  return unless current
66
66
 
67
- @trigger "before:card:switch", previous, current unless silent
68
-
69
- _( @card_containers ).each (container)->
70
- container.trigger?.apply(container, ["deactivation", @, previous, current])
67
+ @trigger "before:card:switch", previous, current unless silent
68
+
69
+ _( @card_containers ).each (container)->
71
70
  container.hide()
72
71
 
73
72
  unless current.previously_activated
@@ -79,7 +78,8 @@ Luca.containers.CardView = Luca.core.Container.extend
79
78
  @activeCard = index
80
79
 
81
80
  unless silent
82
- @trigger "after:card:switch", previous, current
81
+ @trigger "after:card:switch", previous, current
82
+ previous?.trigger?.apply(previous,["deactivation", @, previous, current])
83
83
  current.trigger?.apply(current, ["activation", @, previous, current])
84
84
 
85
85
 
@@ -4,12 +4,12 @@
4
4
  # which is responsible for laying out the many components
5
5
  # it contains, assigning them to a DOM container, and
6
6
  # automatically instantiating and rendering the components
7
- # in their proper place.
8
- Luca.core.Container = Luca.View.extend
7
+ # in their proper place.
8
+ Luca.core.Container = Luca.View.extend
9
9
  className: 'luca-ui-container'
10
10
 
11
11
  componentClass: 'luca-ui-panel'
12
-
12
+
13
13
  isContainer: true
14
14
 
15
15
  hooks:[
@@ -30,12 +30,12 @@ Luca.core.Container = Luca.View.extend
30
30
  @setupHooks( Luca.core.Container::hooks )
31
31
 
32
32
  Luca.View::initialize.apply @, arguments
33
-
33
+
34
34
  #### Rendering Pipeline
35
35
  #
36
36
  # A container has nested components. these components
37
37
  # are automatically rendered inside their own DOM element
38
- # and then CSS configuration is generally applied to these
38
+ # and then CSS configuration is generally applied to these
39
39
  # DOM elements. Each component is assigned to this DOM
40
40
  # element by specifying a @container property on the component.
41
41
  #
@@ -63,28 +63,28 @@ Luca.core.Container = Luca.View.extend
63
63
  # createComponents()
64
64
  # renderComponents() ->
65
65
  # calls render() on each component, starting this whole cycle
66
- #
66
+ #
67
67
  # afterComponents()
68
68
  #
69
69
  # DOM Injection
70
70
  #
71
71
  # render()
72
72
  # afterRender()
73
- #
73
+ #
74
74
  # For Components which are originally hidden
75
75
  # ( card view, tab view, etc )
76
76
  #
77
- # firstActivation()
77
+ # firstActivation()
78
78
  #
79
79
  beforeRender: ()->
80
80
  @debug "container before render"
81
- @doLayout()
81
+ @doLayout()
82
82
  @doComponents()
83
83
 
84
84
  doLayout: ()->
85
85
  @debug "container do layout"
86
86
  @trigger "before:layout", @
87
- @prepareLayout()
87
+ @prepareLayout()
88
88
  @trigger "after:layout", @
89
89
 
90
90
  doComponents: ()->
@@ -98,12 +98,12 @@ Luca.core.Container = Luca.View.extend
98
98
 
99
99
  applyPanelConfig: (panel, panelIndex)->
100
100
  style_declarations = []
101
-
101
+
102
102
  style_declarations.push "height: #{ (if _.isNumber(panel.height) then panel.height + 'px' else panel.height ) }" if panel.height
103
103
  style_declarations.push "width: #{ (if _.isNumber(panel.width) then panel.width + 'px' else panel.width ) }" if panel.width
104
104
  style_declarations.push "float: #{ panel.float }" if panel.float
105
-
106
- config =
105
+
106
+ config =
107
107
  classes: panel?.classes || @componentClass
108
108
  id: "#{ @cid }-#{ panelIndex }"
109
109
  style: style_declarations.join(';')
@@ -116,14 +116,14 @@ Luca.core.Container = Luca.View.extend
116
116
  @debug "container prepare layout"
117
117
  @componentContainers = _( @components ).map (component, index) =>
118
118
  @applyPanelConfig.apply @, [ component, index ]
119
-
119
+
120
120
  if @appendContainers
121
121
  _( @componentContainers ).each (container)=>
122
- @$el.append Luca.templates["containers/basic"](container)
122
+ @$el.append Luca.templates["containers/basic"](container)
123
123
 
124
124
  # prepare components is where you would set necessary object
125
125
  # attributes on the components themselves.
126
- prepareComponents: ()->
126
+ prepareComponents: ()->
127
127
  @debug "container prepare components"
128
128
  @components = _( @components ).map (object, index) =>
129
129
  panel = @componentContainers[ index ]
@@ -132,8 +132,9 @@ Luca.core.Container = Luca.View.extend
132
132
  object
133
133
 
134
134
  createComponents: ()->
135
- @debug "container create components"
136
- map = @componentIndex =
135
+ return if @componentsCreated is true
136
+
137
+ map = @componentIndex =
137
138
  name_index: {}
138
139
  cid_index: {}
139
140
 
@@ -151,22 +152,24 @@ Luca.core.Container = Luca.View.extend
151
152
  # with their passed options, so this is a workaround
152
153
  if !component.container and component.options.container
153
154
  component.container = component.options.container
154
-
155
+
155
156
  if map and component.cid?
156
157
  map.cid_index[ component.cid ] = index
157
-
158
+
158
159
  if map and component.name?
159
160
  map.name_index[ component.name ] = index
160
161
 
161
162
  component
162
-
163
- @debug "components created", @components
163
+
164
+ @componentsCreated = true
165
+ map
166
+
164
167
  # Trigger the Rendering Pipeline process on all of the nested
165
168
  # components
166
169
  renderComponents: (@debugMode="")->
167
170
  @debug "container render components"
168
- _(@components).each (component)=>
169
- component.getParent = ()=> @
171
+ _(@components).each (component)=>
172
+ component.getParent = ()=> @
170
173
  $( component.container ).append $(component.el)
171
174
 
172
175
  try
@@ -177,7 +180,7 @@ Luca.core.Container = Luca.View.extend
177
180
  console.log e.stack
178
181
 
179
182
  #### Container Activation
180
- #
183
+ #
181
184
  # When a container is first activated is a good time to perform
182
185
  # operations which are not needed unless that component becomes
183
186
  # visible. This first activation event should be relayed to all
@@ -185,13 +188,13 @@ Luca.core.Container = Luca.View.extend
185
188
  # other components, such as a CardView or TabContainer
186
189
  # will trigger first:activation on the components as they become
187
190
  # displayed.
188
- firstActivation: ()->
191
+ firstActivation: ()->
189
192
  _( @components ).each (component)=>
190
193
  activator = @
191
-
194
+
192
195
  # apply the first:activation trigger on the component, in the context of the component
193
196
  # passing as arguments the component itself, and the component doing the activation
194
- unless component?.previously_activated is true
197
+ unless component?.previously_activated is true
195
198
  component?.trigger?.apply component, ["first:activation", [component, activator] ]
196
199
  component.previously_activated = true
197
200
 
@@ -210,22 +213,25 @@ Luca.core.Container = Luca.View.extend
210
213
 
211
214
  _.flatten( components )
212
215
 
213
- findComponentByName: (name, deep=false)->
216
+ findComponentByName: (name, deep=false)->
214
217
  @findComponent(name, "name_index", deep)
215
218
 
216
- findComponentById: (id, deep=false)->
219
+ findComponentById: (id, deep=false)->
217
220
  @findComponent(id, "cid_index", deep)
218
221
 
219
222
  findComponent: (needle, haystack="name", deep=false)->
223
+ @createComponents() unless @componentsCreated is true
224
+
225
+
220
226
  position = @componentIndex?[ haystack ][ needle ]
221
227
  component = @components?[ position ]
222
228
 
223
229
  return component if component
224
-
230
+
225
231
  if deep is true
226
232
  sub_container = _( @components ).detect (component)-> component?.findComponent?(needle, haystack, true)
227
233
  sub_container?.findComponent?(needle, haystack, true)
228
-
234
+
229
235
  # run a function for each component in this container
230
236
  # and any nested containers in those components, recursively
231
237
  # pass false as the second argument to skip the deep recursion
@@ -233,24 +239,24 @@ Luca.core.Container = Luca.View.extend
233
239
  _( @components ).each (component)=>
234
240
  fn.apply component, [component]
235
241
  component?.eachComponent?.apply component, [fn,deep] if deep
236
-
242
+
237
243
  indexOf: (name)->
238
244
  names = _( @components ).pluck('name')
239
245
  _( names ).indexOf(name)
240
-
246
+
241
247
  activeComponent: ()->
242
248
  return @ unless @activeItem
243
249
  return @components[ @activeItem ]
244
250
 
245
251
  componentElements: ()-> $(".#{ @componentClass }", @el)
246
-
247
- getComponent: (needle)->
252
+
253
+ getComponent: (needle)->
248
254
  @components[ needle ]
249
-
250
- rootComponent: ()->
255
+
256
+ rootComponent: ()->
251
257
  !@getParent?
252
258
 
253
- getRootComponent: ()->
259
+ getRootComponent: ()->
254
260
  if @rootComponent() then @ else @getParent().getRootComponent()
255
261
 
256
262
  Luca.register "container", "Luca.core.Container"
data/src/framework.coffee CHANGED
@@ -1,7 +1,7 @@
1
1
  _.mixin( _.string )
2
2
 
3
3
  window.Luca =
4
- VERSION: "0.6.7"
4
+ VERSION: "0.6.8"
5
5
  core: {}
6
6
  containers: {}
7
7
  components: {}
@@ -3,7 +3,7 @@
3
3
  _.mixin(_.string);
4
4
 
5
5
  window.Luca = {
6
- VERSION: "0.6.7",
6
+ VERSION: "0.6.8",
7
7
  core: {},
8
8
  containers: {},
9
9
  components: {},
@@ -812,7 +812,7 @@
812
812
  createComponents: function() {
813
813
  var map,
814
814
  _this = this;
815
- this.debug("container create components");
815
+ if (this.componentsCreated === true) return;
816
816
  map = this.componentIndex = {
817
817
  name_index: {},
818
818
  cid_index: {}
@@ -829,7 +829,8 @@
829
829
  }
830
830
  return component;
831
831
  });
832
- return this.debug("components created", this.components);
832
+ this.componentsCreated = true;
833
+ return map;
833
834
  },
834
835
  renderComponents: function(debugMode) {
835
836
  var _this = this;
@@ -891,6 +892,7 @@
891
892
  var component, position, sub_container, _ref, _ref2;
892
893
  if (haystack == null) haystack = "name";
893
894
  if (deep == null) deep = false;
895
+ if (this.componentsCreated !== true) this.createComponents();
894
896
  position = (_ref = this.componentIndex) != null ? _ref[haystack][needle] : void 0;
895
897
  component = (_ref2 = this.components) != null ? _ref2[position] : void 0;
896
898
  if (component) return component;
@@ -1258,7 +1260,7 @@
1258
1260
  return this.activeComponent().trigger("first:activation", this, this.activeComponent());
1259
1261
  },
1260
1262
  activate: function(index, silent, callback) {
1261
- var current, previous, _ref;
1263
+ var current, previous, _ref, _ref2;
1262
1264
  if (silent == null) silent = false;
1263
1265
  if (_.isFunction(silent)) {
1264
1266
  silent = false;
@@ -1274,10 +1276,6 @@
1274
1276
  if (!current) return;
1275
1277
  if (!silent) this.trigger("before:card:switch", previous, current);
1276
1278
  _(this.card_containers).each(function(container) {
1277
- var _ref;
1278
- if ((_ref = container.trigger) != null) {
1279
- _ref.apply(container, ["deactivation", this, previous, current]);
1280
- }
1281
1279
  return container.hide();
1282
1280
  });
1283
1281
  if (!current.previously_activated) {
@@ -1288,8 +1286,13 @@
1288
1286
  this.activeCard = index;
1289
1287
  if (!silent) {
1290
1288
  this.trigger("after:card:switch", previous, current);
1291
- if ((_ref = current.trigger) != null) {
1292
- _ref.apply(current, ["activation", this, previous, current]);
1289
+ if (previous != null) {
1290
+ if ((_ref = previous.trigger) != null) {
1291
+ _ref.apply(previous, ["deactivation", this, previous, current]);
1292
+ }
1293
+ }
1294
+ if ((_ref2 = current.trigger) != null) {
1295
+ _ref2.apply(current, ["activation", this, previous, current]);
1293
1296
  }
1294
1297
  }
1295
1298
  if (_.isFunction(callback)) {
@@ -3,7 +3,7 @@
3
3
  _.mixin(_.string);
4
4
 
5
5
  window.Luca = {
6
- VERSION: "0.6.7",
6
+ VERSION: "0.6.8",
7
7
  core: {},
8
8
  containers: {},
9
9
  components: {},
@@ -812,7 +812,7 @@
812
812
  createComponents: function() {
813
813
  var map,
814
814
  _this = this;
815
- this.debug("container create components");
815
+ if (this.componentsCreated === true) return;
816
816
  map = this.componentIndex = {
817
817
  name_index: {},
818
818
  cid_index: {}
@@ -829,7 +829,8 @@
829
829
  }
830
830
  return component;
831
831
  });
832
- return this.debug("components created", this.components);
832
+ this.componentsCreated = true;
833
+ return map;
833
834
  },
834
835
  renderComponents: function(debugMode) {
835
836
  var _this = this;
@@ -891,6 +892,7 @@
891
892
  var component, position, sub_container, _ref, _ref2;
892
893
  if (haystack == null) haystack = "name";
893
894
  if (deep == null) deep = false;
895
+ if (this.componentsCreated !== true) this.createComponents();
894
896
  position = (_ref = this.componentIndex) != null ? _ref[haystack][needle] : void 0;
895
897
  component = (_ref2 = this.components) != null ? _ref2[position] : void 0;
896
898
  if (component) return component;
@@ -1258,7 +1260,7 @@
1258
1260
  return this.activeComponent().trigger("first:activation", this, this.activeComponent());
1259
1261
  },
1260
1262
  activate: function(index, silent, callback) {
1261
- var current, previous, _ref;
1263
+ var current, previous, _ref, _ref2;
1262
1264
  if (silent == null) silent = false;
1263
1265
  if (_.isFunction(silent)) {
1264
1266
  silent = false;
@@ -1274,10 +1276,6 @@
1274
1276
  if (!current) return;
1275
1277
  if (!silent) this.trigger("before:card:switch", previous, current);
1276
1278
  _(this.card_containers).each(function(container) {
1277
- var _ref;
1278
- if ((_ref = container.trigger) != null) {
1279
- _ref.apply(container, ["deactivation", this, previous, current]);
1280
- }
1281
1279
  return container.hide();
1282
1280
  });
1283
1281
  if (!current.previously_activated) {
@@ -1288,8 +1286,13 @@
1288
1286
  this.activeCard = index;
1289
1287
  if (!silent) {
1290
1288
  this.trigger("after:card:switch", previous, current);
1291
- if ((_ref = current.trigger) != null) {
1292
- _ref.apply(current, ["activation", this, previous, current]);
1289
+ if (previous != null) {
1290
+ if ((_ref = previous.trigger) != null) {
1291
+ _ref.apply(previous, ["deactivation", this, previous, current]);
1292
+ }
1293
+ }
1294
+ if ((_ref2 = current.trigger) != null) {
1295
+ _ref2.apply(current, ["activation", this, previous, current]);
1293
1296
  }
1294
1297
  }
1295
1298
  if (_.isFunction(callback)) {
@@ -2821,7 +2824,57 @@
2821
2824
  }).call(this);
2822
2825
  (function() {
2823
2826
 
2824
- describe("The Card View", function() {});
2827
+ describe("The Card View", function() {
2828
+ beforeEach(function() {
2829
+ this.cardView = new Luca.containers.CardView({
2830
+ activeItem: 0,
2831
+ components: [
2832
+ {
2833
+ markup: "component one",
2834
+ name: "one",
2835
+ one: true
2836
+ }, {
2837
+ markup: "component two",
2838
+ name: "two",
2839
+ two: true,
2840
+ firstActivation: sinon.spy()
2841
+ }, {
2842
+ markup: "component three",
2843
+ name: "three",
2844
+ three: true
2845
+ }
2846
+ ]
2847
+ });
2848
+ return this.cardView.render();
2849
+ });
2850
+ it("should be able to find the cards by name", function() {
2851
+ expect(this.cardView.find("one")).toBeDefined();
2852
+ return expect(this.cardView.find("one").one).toEqual(true);
2853
+ });
2854
+ it("should start with the first component active", function() {
2855
+ var _ref;
2856
+ return expect((_ref = this.cardView.activeComponent()) != null ? _ref.name : void 0).toEqual("one");
2857
+ });
2858
+ it("should be able to activate components by name", function() {
2859
+ var _ref;
2860
+ this.cardView.activate("two");
2861
+ return expect((_ref = this.cardView.activeComponent()) != null ? _ref.name : void 0).toEqual("two");
2862
+ });
2863
+ it("shouldn't fire first activation on a component", function() {
2864
+ var _ref;
2865
+ return expect((_ref = this.cardView.find("two")) != null ? _ref.firstActivation : void 0).not.toHaveBeenCalled();
2866
+ });
2867
+ it("should fire firstActivation on a component", function() {
2868
+ var _ref;
2869
+ this.cardView.activate("two");
2870
+ return expect((_ref = this.cardView.find("two")) != null ? _ref.firstActivation : void 0).toHaveBeenCalled();
2871
+ });
2872
+ return it("should fire deactivation on a component", function() {
2873
+ this.cardView.find("one").spiedEvents = {};
2874
+ this.cardView.activate("two");
2875
+ return expect(this.cardView.find("one")).toHaveTriggered("deactivation");
2876
+ });
2877
+ });
2825
2878
 
2826
2879
  }).call(this);
2827
2880
  (function() {
@@ -3145,7 +3198,86 @@
3145
3198
  }).call(this);
3146
3199
  (function() {
3147
3200
 
3148
-
3201
+ describe('The Luca Container', function() {
3202
+ beforeEach(function() {
3203
+ return this.container = new Luca.core.Container({
3204
+ components: [
3205
+ {
3206
+ name: "component_one",
3207
+ ctype: "template",
3208
+ markup: "markup for component one",
3209
+ id: "c1",
3210
+ value: 1,
3211
+ spy: sinon.spy()
3212
+ }, {
3213
+ name: "component_two",
3214
+ ctype: "template",
3215
+ markup: "markup for component two",
3216
+ id: "c2",
3217
+ value: 0,
3218
+ spy: sinon.spy()
3219
+ }, {
3220
+ name: "component_three",
3221
+ ctype: "container",
3222
+ id: "c3",
3223
+ value: 1,
3224
+ spy: sinon.spy(),
3225
+ components: [
3226
+ {
3227
+ ctype: "template",
3228
+ name: "component_four",
3229
+ markup: "markup for component four",
3230
+ spy: sinon.spy()
3231
+ }
3232
+ ]
3233
+ }
3234
+ ]
3235
+ });
3236
+ });
3237
+ it("should trigger after initialize", function() {
3238
+ return expect(this.container).toHaveTriggered("after:initialize");
3239
+ });
3240
+ it("should have some components", function() {
3241
+ return expect(this.container.components.length).toEqual(3);
3242
+ });
3243
+ it("should render the container and all of the sub views", function() {
3244
+ var html;
3245
+ this.container.render();
3246
+ html = $(this.container.el).html();
3247
+ expect(html).toContain("markup for component one");
3248
+ return expect(html).toContain("markup for component two");
3249
+ });
3250
+ it("should render the container and all of the nested sub views", function() {
3251
+ var html;
3252
+ this.container.render();
3253
+ html = $(this.container.el).html();
3254
+ return expect(html).toContain("markup for component four");
3255
+ });
3256
+ it("should select all components matching a key/value combo", function() {
3257
+ var components;
3258
+ components = this.container.select("value", 1);
3259
+ return expect(components.length).toEqual(2);
3260
+ });
3261
+ it("should run a function on each component", function() {
3262
+ this.container.eachComponent(function(c) {
3263
+ return c.spy();
3264
+ });
3265
+ return _(this.container.components).each(function(component) {
3266
+ return expect(component.spy).toHaveBeenCalled();
3267
+ });
3268
+ });
3269
+ it("should run a function on each component including nested", function() {
3270
+ this.container.render();
3271
+ this.container.eachComponent(function(c) {
3272
+ return c.spy();
3273
+ });
3274
+ return expect(Luca.cache("component_four").spy).toHaveBeenCalled();
3275
+ });
3276
+ return it("should be able to find a component by name", function() {
3277
+ expect(this.container.findComponentByName("component_one")).toBeDefined();
3278
+ return expect(this.container.findComponentByName("undefined")).not.toBeDefined();
3279
+ });
3280
+ });
3149
3281
 
3150
3282
  }).call(this);
3151
3283
  (function() {
@@ -3,7 +3,7 @@
3
3
  _.mixin(_.string);
4
4
 
5
5
  window.Luca = {
6
- VERSION: "0.6.7",
6
+ VERSION: "0.6.8",
7
7
  core: {},
8
8
  containers: {},
9
9
  components: {},
@@ -812,7 +812,7 @@
812
812
  createComponents: function() {
813
813
  var map,
814
814
  _this = this;
815
- this.debug("container create components");
815
+ if (this.componentsCreated === true) return;
816
816
  map = this.componentIndex = {
817
817
  name_index: {},
818
818
  cid_index: {}
@@ -829,7 +829,8 @@
829
829
  }
830
830
  return component;
831
831
  });
832
- return this.debug("components created", this.components);
832
+ this.componentsCreated = true;
833
+ return map;
833
834
  },
834
835
  renderComponents: function(debugMode) {
835
836
  var _this = this;
@@ -891,6 +892,7 @@
891
892
  var component, position, sub_container, _ref, _ref2;
892
893
  if (haystack == null) haystack = "name";
893
894
  if (deep == null) deep = false;
895
+ if (this.componentsCreated !== true) this.createComponents();
894
896
  position = (_ref = this.componentIndex) != null ? _ref[haystack][needle] : void 0;
895
897
  component = (_ref2 = this.components) != null ? _ref2[position] : void 0;
896
898
  if (component) return component;
@@ -1258,7 +1260,7 @@
1258
1260
  return this.activeComponent().trigger("first:activation", this, this.activeComponent());
1259
1261
  },
1260
1262
  activate: function(index, silent, callback) {
1261
- var current, previous, _ref;
1263
+ var current, previous, _ref, _ref2;
1262
1264
  if (silent == null) silent = false;
1263
1265
  if (_.isFunction(silent)) {
1264
1266
  silent = false;
@@ -1274,10 +1276,6 @@
1274
1276
  if (!current) return;
1275
1277
  if (!silent) this.trigger("before:card:switch", previous, current);
1276
1278
  _(this.card_containers).each(function(container) {
1277
- var _ref;
1278
- if ((_ref = container.trigger) != null) {
1279
- _ref.apply(container, ["deactivation", this, previous, current]);
1280
- }
1281
1279
  return container.hide();
1282
1280
  });
1283
1281
  if (!current.previously_activated) {
@@ -1288,8 +1286,13 @@
1288
1286
  this.activeCard = index;
1289
1287
  if (!silent) {
1290
1288
  this.trigger("after:card:switch", previous, current);
1291
- if ((_ref = current.trigger) != null) {
1292
- _ref.apply(current, ["activation", this, previous, current]);
1289
+ if (previous != null) {
1290
+ if ((_ref = previous.trigger) != null) {
1291
+ _ref.apply(previous, ["deactivation", this, previous, current]);
1292
+ }
1293
+ }
1294
+ if ((_ref2 = current.trigger) != null) {
1295
+ _ref2.apply(current, ["activation", this, previous, current]);
1293
1296
  }
1294
1297
  }
1295
1298
  if (_.isFunction(callback)) {
@@ -0,0 +1,3 @@
1
+ (function(){_.mixin(_.string),window.Luca={VERSION:"0.6.8",core:{},containers:{},components:{},modules:{},fields:{},util:{},registry:{classes:{},namespaces:["Luca.containers","Luca.components"]},component_cache:{cid_index:{},name_index:{}}},Luca.enableBootstrap=!0,Luca.registry.addNamespace=function(a){return Luca.registry.namespaces.push(a),Luca.registry.namespaces=_(Luca.registry.namespaces).uniq()},Luca.cache=function(a,b){var c;return b!=null&&(Luca.component_cache.cid_index[a]=b),b=Luca.component_cache.cid_index[a],(b!=null?b.component_name:void 0)!=null?Luca.component_cache.name_index[b.component_name]=b.cid:(b!=null?b.name:void 0)!=null&&(Luca.component_cache.name_index[b.name]=b.cid),b!=null?b:(c=Luca.component_cache.name_index[a],Luca.component_cache.cid_index[c])},Luca.util.nestedValue=function(a,b){return _(a.split(/\./)).inject(function(a,b){return a=a!=null?a[b]:void 0},b)},Luca.registry.lookup=function(a){var b,c,d;return b=Luca.registry.classes[a],b!=null?b:(c=_.camelize(_.capitalize(a)),d=_(Luca.registry.namespaces).map(function(a){return Luca.util.nestedValue(a,window||global)}),_.first(_.compact(_(d).map(function(a){return a[c]}))))},Luca.util.lazyComponent=function(config){var componentClass,constructor,ctype;ctype=config.ctype,componentClass=Luca.registry.lookup(ctype);if(!componentClass)throw"Invalid Component Type: "+ctype+". Did you forget to register it?";return constructor=eval(componentClass),new constructor(config)},Luca.register=function(a,b){var c;c=Luca.registry.classes[a];if(c!=null)throw"Can not register component with the signature "+a+". Already exists";return Luca.registry.classes[a]=b},Luca.available_templates=function(a){var b;return a==null&&(a=""),b=_(Luca.templates).keys(),a.length>0?_(b).select(function(b){return b.match(a)}):b},Luca.util.isIE=function(){try{return Object.defineProperty({},"",{}),!1}catch(a){return!0}},$(function(){return $("body").addClass("luca-ui-enabled")}())}).call(this),function(){Luca.modules.Deferrable={configure_collection:function(a){var b,c,d;a==null&&(a=!0);if(!this.collection)return;_.isString(this.collection)&&(b=(c=Luca.CollectionManager)!=null?c.get():void 0)&&(this.collection=b.getOrCreate(this.collection)),this.collection&&_.isFunction(this.collection.fetch)&&_.isFunction(this.collection.reset)||(this.collection=new Luca.Collection(this.collection.initial_set,this.collection));if((d=this.collection)!=null?d.deferrable_trigger:void 0)this.deferrable_trigger=this.collection.deferrable_trigger;if(a)return this.deferrable=this.collection}}}.call(this),function(){Luca.LocalStore=function(){function a(a){var b;this.name=a,b=localStorage.getItem(this.name),this.data=b&&JSON.parse(b)||{}}return a.prototype.guid=function(){var a;return a=function(){return((1+Math.random())*65536|0).toString(16).substring(1)},a()+a()+"-"+a()+"-"+a()+"-"+a()+"-"+a()+a()+a()},a.prototype.save=function(){return localStorage.setItem(this.name,JSON.stringify(this.data))},a.prototype.create=function(a){return a.id||(a.id=a.attribtues.id=this.guid()),this.data[a.id]=a,this.save(),a},a.prototype.update=function(a){return this.data[a.id]=a,this.save(),a},a.prototype.find=function(a){return this.data[a.id]},a.prototype.findAll=function(){return _.values(this.data)},a.prototype.destroy=function(a){return delete this.data[a.id],this.save(),a},a}(),Backbone.LocalSync=function(a,b,c){var d,e;return e=b.localStorage||b.collection.localStorage,d=function(){switch(a){case"read":return b.id?e.find(b):e.findAll();case"create":return e.create(b);case"update":return e.update(b);case"delete":return e.destroy(b)}}(),d?c.success(d):c.error("Record not found")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["components/bootstrap_form_controls"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<div class='form-actions'>\n <a class='btn btn-primary submit-button'>\n <i class='icon-ok icon-white'></i>\n Save Changes\n </a>\n <a class='btn reset-button cancel-button'>\n <i class='icon-remove'></i>\n Cancel\n </a>\n</div>\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["components/collection_loader_view"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<div class='modal' id='progress-model' stype='display: none;'>\n <div class='progress progress-info progress-striped active'>\n <div class='bar' style='width: 0%;'></div>\n </div>\n <div class='message'>\n Initializing...\n </div>\n</div>\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["components/form_view"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<div class='luca-ui-form-view-wrapper' id='",cid,"-wrapper'>\n <div class='form-view-header'>\n <div class='toolbar-container top' id='",cid,"-top-toolbar-container'></div>\n </div>\n "),legend?__p.push("\n <fieldset>\n <legend>\n ",legend,"\n </legend>\n <div class='form-view-flash-container'></div>\n <div class='form-view-body'></div>\n </fieldset>\n "):__p.push("\n <ul class='form-view-flash-container'></ul>\n <div class='form-view-body'></div>\n "),__p.push("\n <div class='form-view-footer'>\n <div class='toolbar-container bottom' id='",cid,"-bottom-toolbar-container'></div>\n </div>\n</div>\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["components/grid_view"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<div class='luca-ui-grid-view-wrapper'>\n <div class='grid-view-header'>\n <div class='toolbar-container top'></div>\n </div>\n <div class='grid-view-body'>\n <table cellpadding='0' cellspacing='0' class='luca-ui-grid-view scrollable-table' width='100%'>\n <thead class='fixed'></thead>\n <tbody class='scrollable'></tbody>\n </table>\n </div>\n <div class='grid-view-footer'>\n <div class='toolbar-container bottom'></div>\n </div>\n</div>\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["components/grid_view_empty_text"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<div class='empty-text-wrapper'>\n <p>\n ",text,"\n </p>\n</div>\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["containers/basic"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<div class='",classes,"' id='",id,"' style='",style,"'></div>\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["containers/tab_selector_container"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{}){__p.push("<div class='tab-selector-container' id='",cid,"-tab-selector'>\n <ul class='nav nav-tabs' id='",cid,"-tabs-nav'>\n ");for(var i=0;i<components.length;i++){__p.push("\n ");var component=components[i];__p.push("\n <li class='tab-selector' data-target='",i,"'>\n <a data-target='",i,"'>\n ",component.title,"\n </a>\n </li>\n ")}__p.push("\n </ul>\n</div>\n")}return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["containers/tab_view"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<div class='tab-content' id='",cid,"-tab-view-content'></div>\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["containers/toolbar_wrapper"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<div class='luca-ui-toolbar-wrapper' id='",id,"'></div>\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["fields/button_field"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<label>&nbsp</label>\n<input class='btn ",input_class,"' id='",input_id,"' style='",inputStyles,"' type='",input_type,"' value='",input_value,"' />\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["fields/button_field_link"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<a class='btn ",input_class,"'>\n "),icon_class.length&&__p.push("\n <i class='",icon_class,"'></i>\n "),__p.push("\n ",input_value,"\n</a>\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["fields/checkbox_field"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<label for='",input_id,"'>\n ",label,"\n <input name='",input_name,"' style='",inputStyles,"' type='checkbox' value='",input_value,"' />\n</label>\n"),helperText&&__p.push("\n<p class='helper-text help-block'>\n ",helperText,"\n</p>\n"),__p.push("\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["fields/file_upload_field"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<label for='",input_id,"'>\n ",label,"\n</label>\n<input id='",input_id,"' name='",input_name,"' style='",inputStyles,"' type='file' />\n"),helperText&&__p.push("\n<p class='helper-text help-block'>\n ",helperText,"\n</p>\n"),__p.push("\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["fields/hidden_field"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<input id='",input_id,"' name='",input_name,"' type='hidden' value='",input_value,"' />\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["fields/select_field"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<label for='",input_id,"'>\n ",label,"\n</label>\n<select id='",input_id,"' name='",input_name,"' style='",inputStyles,"'></select>\n"),helperText&&__p.push("\n<p class='helper-text help-block'>\n ",helperText,"\n</p>\n"),__p.push("\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["fields/text_area_field"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<label for='",input_id,"'>\n ",label,"\n</label>\n<textarea class='",input_class,"' id='",input_id,"' name='",input_name,"' style='",inputStyles,"'></textarea>\n"),helperText&&__p.push("\n<p class='helper-text help-block'>\n ",helperText,"\n</p>\n"),__p.push("\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["fields/text_field"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<label class='control-label' for='",input_id,"'>\n ",label,"\n</label>\n"),typeof addOn!="undefined"&&__p.push("\n<span class='add-on'>\n ",addOn,"\n</span>\n"),__p.push("\n<input id='",input_id,"' name='",input_name,"' placeholder='",placeHolder,"' style='",inputStyles,"' type='text' />\n"),helperText&&__p.push("\n<p class='helper-text help-block'>\n ",helperText,"\n</p>\n"),__p.push("\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["sample/contents"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("<p>Sample Contents</p>\n");return __p.join("")}}.call(this),function(){Luca.templates||(Luca.templates={}),Luca.templates["sample/welcome"]=function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments)};with(obj||{})__p.push("welcome.luca\n");return __p.join("")}}.call(this),function(){var a=Array.prototype.slice;Luca.Observer=function(){function b(b){var c=this;this.options=b!=null?b:{},_.extend(this,Backbone.Events),this.type=this.options.type,this.options.debugAll&&this.bind("event",function(){var b,d;return d=arguments[0],b=2<=arguments.length?a.call(arguments,1):[],console.log("Observed "+c.type+" "+(d.name||d.id||d.cid),d,_(b).flatten())})}return b.prototype.relay=function(){var b,c;return c=arguments[0],b=2<=arguments.length?a.call(arguments,1):[],this.trigger("event",c,b),this.trigger("event:"+b[0],c,b.slice(1))},b}(),Luca.Observer.enableObservers=function(a){return a==null&&(a={}),Luca.enableGlobalObserver=!0,Luca.ViewObserver=new Luca.Observer(_.extend(a,{type:"view"})),Luca.CollectionObserver=new Luca.Observer(_.extend(a,{type:"collection"}))}}.call(this),function(){Luca.View=Backbone.View.extend({base:"Luca.View"}),Luca.View.originalExtend=Backbone.View.extend,Luca.View.extend=function(a){var b;return b=a.render,b||(b=function(){var a;return a=_.isFunction(this.container)?this.container():this.container,!$(a)||!this.$el?this:($(a).append(this.$el),this)}),a.render=function(){var a=this;return this.deferrable?(this.trigger("before:render",this),this.deferrable.bind(this.deferrable_event,_.once(function(){return b.apply(a,arguments),a.trigger("after:render",a)})),this.deferrable_trigger||(this.immediate_trigger=!0),this.immediate_trigger===!0?this.deferrable.fetch():this.bind(this.deferrable_trigger,_.once(function(){return a.deferrable.fetch()}))):(this.trigger("before:render",this),b.apply(this,arguments),this.trigger("after:render",this))},Luca.View.originalExtend.apply(this,[a])},_.extend(Luca.View.prototype,{debug:function(){var a,b,c,d;if(!this.debugMode&&window.LucaDebugMode==null)return;d=[];for(b=0,c=arguments.length;b<c;b++)a=arguments[b],d.push(console.log([this.name||this.cid,a]));return d},trigger:function(){return Luca.enableGlobalObserver&&(Luca.ViewObserver||(Luca.ViewObserver=new Luca.Observer({type:"view"})),Luca.ViewObserver.relay(this,arguments)),Backbone.View.prototype.trigger.apply(this,arguments)},hooks:["after:initialize","before:render","after:render","first:activation","activation","deactivation"],deferrable_event:"reset",initialize:function(a){var b,c=this;return this.options=a!=null?a:{},_.extend(this,this.options),this.name!=null&&(this.cid=_.uniqueId(this.name)),Luca.cache(this.cid,this),b=_(Luca.View.prototype.hooks.concat(this.hooks)).uniq(),this.setupHooks(b),this.autoBindEventHandlers===!0&&_(this.events).each(function(a,b){if(_.isString(a))return _.bindAll(c,a)}),this.trigger("after:initialize",this),this.registerCollectionEvents()},$container:function(){return $(this.container)},setupHooks:function(a){var b=this;return a||(a=this.hooks),_(a).each(function(a){var c,d,e;return d=a.split(":"),e=d.shift(),d=_(d).map(function(a){return _.capitalize(a)}),c=e+d.join(""),b.bind(a,function(){if(b[c])return b[c].apply(b,arguments)})})},getCollectionManager:function(){var a;return this.collectionManager||((a=Luca.CollectionManager.get)!=null?a.call():void 0)},registerCollectionEvents:function(){var a,b=this;return a=this.getCollectionManager(),_(this.collectionEvents).each(function(c,d){var e,f,g,h;h=d.split(" "),g=h[0],f=h[1],e=b[""+g+"Collection"]=a.getOrCreate(g);if(!e)throw"Could not find collection specified by "+g;_.isString(c)&&(c=b[c]);if(!_.isFunction(c))throw"invalid collectionEvents configuration";try{return e.bind(f,c)}catch(i){throw console.log("Error Binding To Collection in registerCollectionEvents",b),i}})}})}.call(this),function(){Luca.Collection=(Backbone.QueryCollection||Backbone.Collection).extend({initialize:function(a,b){var c,d=this;a==null&&(a=[]),this.options=b,_.extend(this,this.options),this.cached&&(this.bootstrap_cache_key=_.isFunction(this.cached)?this.cached():this.cached),(this.registerAs||this.registerWith)&&console.log("This configuration API is deprecated. use @name and @manager properties instead"),this.name||(this.name=this.registerAs),this.manager||(this.manager=this.registerWith),this.name&&!this.manager&&(this.manager=Luca.CollectionManager.get()),this.manager&&(this.name||(this.name=this.cached()),this.name=_.isFunction(this.name)?this.name():this.name,!this.private&&!this.anonymous&&this.bind("after:initialize",function(){return d.register(d.manager,d.name,d)}));if(this.useLocalStorage===!0&&window.localStorage!=null)throw c=this.bootstrap_cache_key||this.name,"Must specify either a cached or registerAs property to use localStorage";return _.isArray(this.data)&&this.data.length>0&&(this.memoryCollection=!0),this.useNormalUrl!==!0&&this.__wrapUrl(),Backbone.Collection.prototype.initialize.apply(this,[a,this.options]),this.trigger("after:initialize")},__wrapUrl:function(){var a,b,c=this;return _.isFunction(this.url)?this.url=_.wrap(this.url,function(a){var b,d,e,f,g;return g=a.apply(c),e=g.split("?"),e.length>1&&(b=_.last(e)),f=c.queryString(),b&&g.match(b)&&(f=f.replace(b,"")),d=""+g+"?"+f,d.match(/\?$/)&&(d=d.replace(/\?$/,"")),d}):(b=this.url,a=this.queryString(),this.url=_([b,a]).compact().join("?"))},queryString:function(){var a,b=this;return a=_(this.base_params||(this.base_params=Luca.Collection.baseParams())).inject(function(a,b,c){var d;return d=""+c+"="+b,a.push(d),a},[]),_.uniq(a).join("&")},resetFilter:function(){return this.base_params=Luca.Collection.baseParams(),this},applyFilter:function(a,b){return a==null&&(a={}),b==null&&(b={}),this.applyParams(a),this.fetch(_.extend(b,{refresh:!0}))},applyParams:function(a){return this.base_params||(this.base_params=_(Luca.Collection.baseParams()).clone()),_.extend(this.base_params,a)},register:function(a,b,c){a==null&&(a=Luca.CollectionManager.get()),b==null&&(b="");if(!(b.length>=1))throw"Can not register with a collection manager without a key";if(a==null)throw"Can not register with a collection manager without a valid collection manager";_.isString(a)&&(a=Luca.util.nestedValue(a,window||global));if(!a)throw"Could not register with collection manager";if(_.isFunction(a.add))return a.add(b,c);if(_.isObject(a))return a[b]=c},loadFromBootstrap:function(){if(!this.bootstrap_cache_key)return;return this.reset(this.cached_models()),this.trigger("bootstrapped",this)},bootstrap:function(){return this.loadFromBootstrap()},cached_models:function(){return Luca.Collection.cache(this.bootstrap_cache_key)},fetch:function(a){var b;a==null&&(a={}),this.trigger("before:fetch",this);if(this.memoryCollection===!0)return this.reset(this.data);if(this.cached_models().length&&!a.refresh)return this.bootstrap();b=_.isFunction(this.url)?this.url():this.url;if(!(b&&b.length>1||this.localStorage))return!0;this.fetching=!0;try{return Backbone.Collection.prototype.fetch.apply(this,arguments)}catch(c){throw console.log("Error in Collection.fetch",c),c}},onceLoaded:function(a,b){var c,d=this;b==null&&(b={autoFetch:!0});if(this.length>0&&!this.fetching){a.apply(this,[this]);return}c=function(){return a.apply(d,[d])},this.bind("reset",function(){return c(),this.unbind("reset",this)});if(!this.fetching&&!!b.autoFetch)return this.fetch()},ifLoaded:function(a,b){var c,d=this;b==null&&(b={scope:this,autoFetch:!0}),c=b.scope||this,this.length>0&&!this.fetching&&a.apply(c,[this]),this.bind("reset",function(b){return a.apply(c,[b])});if(!(this.fetching===!0||!b.autoFetch||this.length>0))return this.fetch()},parse:function(a){var b;return this.fetching=!1,this.trigger("after:response",a),b=this.root!=null?a[this.root]:a,this.bootstrap_cache_key&&Luca.Collection.cache(this.bootstrap_cache_key,b),b}}),_.extend(Luca.Collection.prototype,{trigger:function(){return Luca.enableGlobalObserver&&(Luca.CollectionObserver||(Luca.CollectionObserver=new Luca.Observer({type:"collection"})),Luca.CollectionObserver.relay(this,arguments)),Backbone.View.prototype.trigger.apply(this,arguments)}}),Luca.Collection.baseParams=function(a){if(a)return Luca.Collection._baseParams=a;if(_.isFunction(Luca.Collection._baseParams))return Luca.Collection._baseParams.call();if(_.isObject(Luca.Collection._baseParams))return Luca.Collection._baseParams},Luca.Collection._bootstrapped_models={},Luca.Collection.bootstrap=function(a){return _.extend(Luca.Collection._bootstrapped_models,a)},Luca.Collection.cache=function(a,b){return b?Luca.Collection._bootstrapped_models[a]=b:Luca.Collection._bootstrapped_models[a]||[]}}.call(this),function(){Luca.core.Field=Luca.View.extend({className:"luca-ui-text-field luca-ui-field",isField:!0,template:"fields/text_field",labelAlign:"top",hooks:["before:validation","after:validation","on:change"],statuses:["warning","error","success"],initialize:function(a){var b;return this.options=a!=null?a:{},_.extend(this,this.options),Luca.View.prototype.initialize.apply(this,arguments),this.input_id||(this.input_id=_.uniqueId("field")),this.input_name||(this.input_name=this.name),this.helperText||(this.helperText=""),this.required&&((b=this.label)!=null?!b.match(/^\*/):!void 0)&&(this.label||(this.label="*"+this.label)),this.inputStyles||(this.inputStyles=""),this.disabled&&this.disable(),this.updateState(this.state),this.placeHolder||(this.placeHolder="")},beforeRender:function(){return Luca.enableBootstrap&&this.$el.addClass("control-group"),this.required&&this.$el.addClass("required"),this.$el.html(Luca.templates[this.template](this)),this.input=$("input",this.el)},change_handler:function(a){return this.trigger("on:change",this,a)},disable:function(){return $("input",this.el).attr("disabled",!0)},enable:function(){return $("input",this.el).attr("disabled",!1)},getValue:function(){return this.input.attr("value")},render:function(){return $(this.container).append(this.$el)},setValue:function(a){return this.input.attr("value",a)},updateState:function(a){var b=this;return _(this.statuses).each(function(c){return b.$el.removeClass(c),b.$el.addClass(a)})}})}.call(this),function(){Luca.core.Container=Luca.View.extend({className:"luca-ui-container",componentClass:"luca-ui-panel",isContainer:!0,hooks:["before:components","before:layout","after:components","after:layout","first:activation"],rendered:!1,components:[],initialize:function(a){return this.options=a!=null?a:{},_.extend(this,this.options),this.setupHooks(Luca.core.Container.prototype.hooks),Luca.View.prototype.initialize.apply(this,arguments)},beforeRender:function(){return this.debug("container before render"),this.doLayout(),this.doComponents()},doLayout:function(){return this.debug("container do layout"),this.trigger("before:layout",this),this.prepareLayout(),this.trigger("after:layout",this)},doComponents:function(){return this.debug("container do components"),this.trigger("before:components",this,this.components),this.prepareComponents(),this.createComponents(),this.renderComponents(),this.trigger("after:components",this,this.components)},applyPanelConfig:function(a,b){var c,d;return d=[],a.height&&d.push("height: "+(_.isNumber(a.height)?a.height+"px":a.height)),a.width&&d.push("width: "+(_.isNumber(a.width)?a.width+"px":a.width)),a.float&&d.push("float: "+a.float),c={classes:(a!=null?a.classes:void 0)||this.componentClass,id:""+this.cid+"-"+b,style:d.join(";")}},prepareLayout:function(){var a=this;this.debug("container prepare layout"),this.componentContainers=_(this.components).map(function(b,c){return a.applyPanelConfig.apply(a,[b,c])});if(this.appendContainers)return _(this.componentContainers).each(function(b){return a.$el.append(Luca.templates["containers/basic"](b))})},prepareComponents:function(){var a=this;return this.debug("container prepare components"),this.components=_(this.components).map(function(b,c){var d;return d=a.componentContainers[c],b.container=a.appendContainers?"#"+d.id:a.el,b})},createComponents:function(){var a,b=this;if(this.componentsCreated===!0)return;return a=this.componentIndex={name_index:{},cid_index:{}},this.components=_(this.components).map(function(b,c){var d;return d=_.isObject(b)&&b.render&&b.trigger?b:(b.ctype||(b.ctype=Luca.defaultComponentType||"template"),Luca.util.lazyComponent(b)),!d.container&&d.options.container&&(d.container=d.options.container),a&&d.cid!=null&&(a.cid_index[d.cid]=c),a&&d.name!=null&&(a.name_index[d.name]=c),d}),this.componentsCreated=!0,a},renderComponents:function(a){var b=this;return this.debugMode=a!=null?a:"",this.debug("container render components"),_(this.components).each(function(a){a.getParent=function(){return b},$(a.container).append($(a.el));try{return a.render()}catch(c){return console.log("Error Rendering Component "+(a.name||a.cid),a),console.log(c.message),console.log(c.stack)}})},firstActivation:function(){var a=this;return _(this.components).each(function(b){var c,d;c=a;if((b!=null?b.previously_activated:void 0)!==!0)return b!=null&&(d=b.trigger)!=null&&d.apply(b,["first:activation",[b,c]]),b.previously_activated=!0})},select:function(a,b,c){var d;return c==null&&(c=!1),d=_(this.components).map(function(d){var e,f;return e=[],f=d[a],f===b&&e.push(d),c===!0&&d.isContainer===!0&&e.push(d.select(a,b,!0)),_.compact(e)}),_.flatten(d)},findComponentByName:function(a,b){return b==null&&(b=!1),this.findComponent(a,"name_index",b)},findComponentById:function(a,b){return b==null&&(b=!1),this.findComponent(a,"cid_index",b)},findComponent:function(a,b,c){var d,e,f,g,h;b==null&&(b="name"),c==null&&(c=!1),this.componentsCreated!==!0&&this.createComponents(),e=(g=this.componentIndex)!=null?g[b][a]:void 0,d=(h=this.components)!=null?h[e]:void 0;if(d)return d;if(c===!0)return f=_(this.components).detect(function(c){return c!=null?typeof c.findComponent=="function"?c.findComponent(a,b,!0):void 0:void 0}),f!=null?typeof f.findComponent=="function"?f.findComponent(a,b,!0):void 0:void 0},eachComponent:function(a,b){var c=this;return b==null&&(b=!0),_(this.components).each(function(c){var d;a.apply(c,[c]);if(b)return c!=null?(d=c.eachComponent)!=null?d.apply(c,[a,b]):void 0:void 0})},indexOf:function(a){var b;return b=_(this.components).pluck("name"),_(b).indexOf(a)},activeComponent:function(){return this.activeItem?this.components[this.activeItem]:this},componentElements:function(){return $("."+this.componentClass,this.el)},getComponent:function(a){return this.components[a]},rootComponent:function(){return this.getParent==null},getRootComponent:function(){return this.rootComponent()?this:this.getParent().getRootComponent()}}),Luca.register("container","Luca.core.Container")}.call(this),function(){var a;a=[],Luca.CollectionManager=function(){function b(b){this.options=b!=null?b:{},_.extend(this,this.options),_.extend(this,Backbone.Events),a.push(this),this.state=new Backbone.Model,this.collectionNames&&(this.state.set({loaded_collections_count:0,collections_count:this.collectionNames.length}),this.state.bind("change:loaded_collections_count",this.collectionCountDidChange),this.useProgressLoader&&(this.loader=new Luca.components.CollectionLoaderView({manager:this,name:"collection_loader_view"})),this.loadInitialCollections()),this}return b.prototype.__collections={},b.prototype.add=function(a,b){var c;return(c=this.currentScope())[a]||(c[a]=b)},b.prototype.allCollections=function(){return _(this.currentScope()).values()},b.prototype.create=function(a,b,c){var d,e;return b==null&&(b={}),c==null&&(c=[]),d=b.base,d||(d=this.guessCollectionClass(a)),b.private&&(b.name=""),e=new d(c,b),this.add(a,e),e},b.prototype.collectionNamespace=Luca.Collection.namespace,b.prototype.currentScope=function(){var a,b;return(a=this.getScope())?(b=this.__collections)[a]||(b[a]={}):this.__collections},b.prototype.each=function(a){return _(this.all()).each(a)},b.prototype.get=function(a){return this.currentScope()[a]},b.prototype.getScope=function(){return},b.prototype.getOrCreate=function(a,b,c){return b==null&&(b={}),c==null&&(c=[]),this.get(a)||this.create(a,b,c,!1)},b.prototype.guessCollectionClass=function(a){var b,c;return b=_(a).chain().capitalize().camelize().value(),c=(this.collectionNamespace||window||global)[b],c||(c=(this.collectionNamespace||window||global)[""+b+"Collection"]),c},b.prototype.loadInitialCollections=function(){var a,b=this;return a=function(a){return a.unbind("reset"),b.trigger("collection_loaded",a.name)},_(this.collectionNames).each(function(c){var d;return d=b.getOrCreate(c),d.bind("reset",function(){return a(d)}),d.fetch()})},b.prototype.collectionCountDidChange=function(){if(this.totalCollectionsCount()===this.loadedCollectionsCount())return this.trigger("all_collections_loaded")},b.prototype.totalCollectionsCount=function(){return this.state.get("collections_count")},b.prototype.loadedCollectionsCount=function(){return this.state.get("loaded_collections_count")},b.prototype.private=function(a,b,c){return b==null&&(b={}),c==null&&(c=[]),this.create(a,b,c,!0)},b}(),Luca.CollectionManager.destroyAll=function(){return a=[]},Luca.CollectionManager.instances=function(){return a},Luca.CollectionManager.get=function(){return _(a).last()}}.call(this),function(){Luca.SocketManager=function(){function a(a){this.options=a!=null?a:{},_.extend(Backbone.Events),this.loadTransport()}return a.prototype.connect=function(){switch(this.options.provider){case"socket.io":return this.socket=io.connect(this.options.socket_host);case"faye.js":return this.socket=new Faye.Client(this.options.socket_host)}},a.prototype.transportLoaded=function(){return this.connect()},a.prototype.transport_script=function(){switch(this.options.provider){case"socket.io":return""+this.options.transport_host+"/socket.io/socket.io.js";case"faye.js":return""+this.options.transport_host+"/faye.js"}},a.prototype.loadTransport=function(){var a,b=this;return a=document.createElement("script"),a.setAttribute("type","text/javascript"),a.setAttribute("src",this.transport_script()),a.onload=this.transportLoaded,Luca.util.isIE()&&(a.onreadystatechange=function(){if(a.readyState==="loaded")return b.transportLoaded()}),document.getElementsByTagName("head")[0].appendChild(a)},a}()}.call(this),function(){Luca.containers.SplitView=Luca.core.Container.extend({layout:"100",componentType:"split_view",containerTemplate:"containers/basic",className:"luca-ui-split-view",componentClass:"luca-ui-panel"}),Luca.register("split_view","Luca.containers.SplitView")}.call(this),function(){Luca.containers.ColumnView=Luca.core.Container.extend({componentType:"column_view",className:"luca-ui-column-view",components:[],initialize:function(a){return this.options=a!=null?a:{},Luca.core.Container.prototype.initialize.apply(this,arguments),this.setColumnWidths()},componentClass:"luca-ui-column",containerTemplate:"containers/basic",appendContainers:!0,autoColumnWidths:function(){var a,b=this;return a=[],_(this.components.length).times(function(){return a.push(parseInt(100/b.components.length))}),a},setColumnWidths:function(){return this.columnWidths=this.layout!=null?_(this.layout.split("/")).map(function(a){return parseInt(a)}):this.autoColumnWidths(),this.columnWidths=_(this.columnWidths).map(function(a){return""+a+"%"})},beforeComponents:function(){return this.debug("column_view before components"),_(this.components).each(function(a){return a.ctype||(a.ctype="panel_view")})},beforeLayout:function(){var a,b=this;return this.debug("column_view before layout"),_(this.columnWidths).each(function(a,c){return b.components[c].float="left",b.components[c].width=a}),(a=Luca.core.Container.prototype.beforeLayout)!=null?a.apply(this,arguments):void 0}}),Luca.register("column_view","Luca.containers.ColumnView")}.call(this),function(){Luca.containers.CardView=Luca.core.Container.extend({componentType:"card_view",className:"luca-ui-card-view-wrapper",activeCard:0,components:[],hooks:["before:card:switch","after:card:switch"],initialize:function(a){return this.options=a,Luca.core.Container.prototype.initialize.apply(this,arguments),this.setupHooks(this.hooks)},componentClass:"luca-ui-card",beforeLayout:function(){var a=this;return this.cards=_(this.components).map(function(b,c){return{classes:a.componentClass,style:"display:"+(c===a.activeCard?"block":"none"),id:""+a.cid+"-"+c}})},prepareLayout:function(){var a=this;return this.card_containers=_(this.cards).map(function(b,c){return a.$el.append(Luca.templates["containers/basic"](b)),$("#"+b.id)})},prepareComponents:function(){var a=this;return this.components=_(this.components).map(function(b,c){var d;return d=a.cards[c],b.container="#"+d.id,b})},activeComponent:function(){return this.getComponent(this.activeCard)},cycle:function(){var a;return a=this.activeCard<this.components.length-1?this.activeCard+1:0,this.activate(a)},find:function(a){return this.findComponentByName(a,!0)},firstActivation:function(){return this.activeComponent().trigger("first:activation",this,this.activeComponent())},activate:function(a,b,c){var d,e,f,g;b==null&&(b=!1),_.isFunction(b)&&(b=!1,c=b);if(a===this.activeCard)return;e=this.activeComponent(),d=this.getComponent(a),d||(a=this.indexOf(a),d=
2
+ this.getComponent(a));if(!d)return;b||this.trigger("before:card:switch",e,d),_(this.card_containers).each(function(a){return a.hide()}),d.previously_activated||(d.trigger("first:activation"),d.previously_activated=!0),$(d.container).show(),this.activeCard=a,b||(this.trigger("after:card:switch",e,d),e!=null&&(f=e.trigger)!=null&&f.apply(e,["deactivation",this,e,d]),(g=d.trigger)!=null&&g.apply(d,["activation",this,e,d]));if(_.isFunction(c))return c.apply(this,[this,e,d])}}),Luca.register("card_view","Luca.containers.CardView")}.call(this),function(){Luca.containers.ModalView=Luca.core.Container.extend({componentType:"modal_view",className:"luca-ui-modal-view",components:[],renderOnInitialize:!0,showOnRender:!1,hooks:["before:show","before:hide"],defaultModalOptions:{minWidth:375,maxWidth:375,minHeight:550,maxHeight:550,opacity:80,onOpen:function(a){return this.onOpen.apply(this),this.onModalOpen.apply(a,[a,this])},onClose:function(a){return this.onClose.apply(this),this.onModalClose.apply(a,[a,this])}},modalOptions:{},initialize:function(a){var b=this;return this.options=a!=null?a:{},Luca.core.Container.prototype.initialize.apply(this,arguments),this.setupHooks(this.hooks),_(this.defaultModalOptions).each(function(a,c){var d;return(d=b.modalOptions)[c]||(d[c]=a)}),this.modalOptions.onOpen=_.bind(this.modalOptions.onOpen,this),this.modalOptions.onClose=_.bind(this.modalOptions.onClose,this)},onOpen:function(){return!0},onClose:function(){return!0},getModal:function(){return this.modal},onModalOpen:function(a,b){return b.modal=a,a.overlay.show(),a.container.show(),a.data.show()},onModalClose:function(a,b){return $.modal.close()},prepareLayout:function(){return $("body").append(this.$el)},prepareComponents:function(){var a=this;return this.components=_(this.components).map(function(b,c){return b.container=a.el,b})},afterInitialize:function(){this.$el.hide();if(this.renderOnInitialize)return this.render()},afterRender:function(){if(this.showOnRender)return this.show()},wrapper:function(){return $(this.$el.parent())},show:function(){return this.trigger("before:show",this),this.$el.modal(this.modalOptions)},hide:function(){return this.trigger("before:hide",this)}}),Luca.register("modal_view","Luca.containers.ModalView")}.call(this),function(){Luca.containers.PanelView=Luca.core.Container.extend({className:"luca-ui-panel",initialize:function(a){return this.options=a!=null?a:{},Luca.core.Container.prototype.initialize.apply(this,arguments)},afterLayout:function(){var a;if(this.template)return a=(Luca.templates||JST)[this.template](this),this.$el.html(a)},render:function(){return $(this.container).append(this.$el)},afterRender:function(){var a,b=this;(a=Luca.core.Container.prototype.afterRender)!=null&&a.apply(this,arguments);if(this.css)return console.log("Yes Yes Yall",this.css,this.$el),_(this.css).each(function(a,c){return b.$el.css(c,a)})}})}.call(this),function(){Luca.containers.TabView=Luca.containers.CardView.extend({events:{"click ul.nav-tabs li":"select"},hooks:["before:select","after:select"],componentType:"tab_view",className:"luca-ui-tab-view tabbable",tab_position:"top",tabVerticalOffset:"50px",initialize:function(a){return this.options=a!=null?a:{},Luca.containers.CardView.prototype.initialize.apply(this,arguments),_.bindAll(this,"select","highlightSelectedTab"),this.setupHooks(this.hooks),this.bind("after:card:switch",this.highlightSelectedTab)},activeTabSelector:function(){return this.tabSelectors().eq(this.activeCard)},prepareLayout:function(){var a=this;return this.card_containers=_(this.cards).map(function(b,c){return a.$(".tab-content").append(Luca.templates["containers/basic"](b)),$("#"+b.id)})},beforeLayout:function(){return this.$el.addClass("tabs-"+this.tab_position),this.tab_position==="below"?(this.$el.append(Luca.templates["containers/tab_view"](this)),this.$el.append(Luca.templates["containers/tab_selector_container"](this))):(this.$el.append(Luca.templates["containers/tab_selector_container"](this)),this.$el.append(Luca.templates["containers/tab_view"](this))),Luca.containers.CardView.prototype.beforeLayout.apply(this,arguments)},beforeRender:function(){var a;(a=Luca.containers.CardView.prototype.beforeRender)!=null&&a.apply(this,arguments),this.activeTabSelector().addClass("active");if(Luca.enableBootstrap&&this.tab_position==="left"||this.tab_position==="right"){this.$el.addClass("grid-12"),this.tabContainerWrapper().addClass("grid-3"),this.tabContentWrapper().addClass("grid-9");if(this.tabVerticalOffset)return this.tabContainerWrapper().css("padding-top",this.tabVerticalOffset)}},highlightSelectedTab:function(){return this.tabSelectors().removeClass("active"),this.activeTabSelector().addClass("active")},select:function(a){var b,c;return b=c=$(a.currentTarget),this.trigger("before:select",this),this.activate(c.data("target")),this.trigger("after:select",this)},tabContentWrapper:function(){return $("#"+this.cid+"-tab-view-content")},tabContainerWrapper:function(){return $("#"+this.cid+"-tabs-selector")},tabContainer:function(){return $("ul#"+this.cid+"-tabs-nav")},tabSelectors:function(){return $("li.tab-selector",this.tabContainer())}})}.call(this),function(){Luca.containers.Viewport=Luca.containers.CardView.extend({activeItem:0,className:"luca-ui-viewport",fullscreen:!0,initialize:function(a){this.options=a!=null?a:{},Luca.core.Container.prototype.initialize.apply(this,arguments);if(this.fullscreen)return $("html,body").addClass("luca-ui-fullscreen")},render:function(){return console.log("Rendering Viewport"),this.$el.addClass("luca-ui-viewport")}})}.call(this),function(){}.call(this),function(){Luca.components.Template=Luca.View.extend({initialize:function(options){this.options=options!=null?options:{},Luca.View.prototype.initialize.apply(this,arguments);if(!this.template&&!this.markup)throw"Templates must specify which template / markup to use";if(_.isString(this.templateContainer))return this.templateContainer=eval("(window || global)."+this.templateContainer)},templateContainer:"Luca.templates",beforeRender:function(){return _.isUndefined(this.templateContainer)&&(this.templateContainer=JST),this.$el.html(this.markup||this.templateContainer[this.template](this.options))},render:function(){return $(this.container).append(this.$el)}}),Luca.register("template","Luca.components.Template")}.call(this),function(){Luca.Application=Luca.containers.Viewport.extend({components:[{ctype:"controller",name:"main_controller",defaultCard:"welcome",components:[{ctype:"template",name:"welcome",template:"sample/welcome",templateContainer:"Luca.templates"}]}],initialize:function(a){var b=this;return this.options=a!=null?a:{},Luca.containers.Viewport.prototype.initialize.apply(this,arguments),this.collectionManager=new Luca.CollectionManager,this.state=new Backbone.Model(this.defaultState),this.bind("ready",function(){return b.render()})},activeView:function(){var a;return(a=this.activeSubSection())?this.view(a):this.view(this.activeSection())},activeSubSection:function(){return this.get("active_sub_section")},activeSection:function(){return this.get("active_section")},afterComponents:function(){var a,b,c,d=this;return(a=Luca.containers.Viewport.prototype.afterComponents)!=null&&a.apply(this,arguments),(b=this.getMainController())!=null&&b.bind("after:card:switch",function(a,b){return d.state.set({active_section:b.name})}),(c=this.getMainController())!=null?c.each(function(a){if(a.ctype.match(/controller$/))return a.bind("after:card:switch",function(a,b){return d.state.set({active_sub_section:b.name})})}):void 0},beforeRender:function(){var a;return(a=Luca.containers.Viewport.prototype.beforeRender)!=null?a.apply(this,arguments):void 0},boot:function(){return console.log("Sup?"),this.trigger("ready")},collection:function(){return this.collectionManager.getOrCreate.apply(this.collectionManager,arguments)},get:function(a){return this.state.get(a)},getMainController:function(){return this.view("main_controler")},set:function(a){return this.state.set(a)},view:function(a){return Luca.cache(a)}})}.call(this),function(){Luca.components.Toolbar=Luca.core.Container.extend({className:"luca-ui-toolbar",position:"bottom",initialize:function(a){return this.options=a!=null?a:{},Luca.core.Container.prototype.initialize.apply(this,arguments)},prepareComponents:function(){var a=this;return _(this.components).each(function(b){return b.container=a.el})},render:function(){return $(this.container).append(this.el)}}),Luca.register("toolbar","Luca.components.Toolbar")}.call(this),function(){Luca.components.CollectionLoaderView=Luca.components.Template.extend({className:"luca-ui-collection-loader-view",template:"components/collection_loader_view",initialize:function(a){return this.options=a!=null?a:{},Luca.components.Template.prototype.initialize.apply(this,arguments),this.container||(this.container=$("body")),this.manager||(this.manager=Luca.CollectionManager.get()),this.setupBindings()},modalContainer:function(){return $("#progress-modal",this.el)},setupBindings:function(){var a=this;return this.manager.bind("collection_loaded",function(b){var c,d,e;return c=a.manager.loadedCollectionsCount(),e=a.manager.totalCollectionsCount(),d=parseInt(c/e*100),a.modalContainer().find(".progress .bar").attr("style","width: "+d+"%;"),a.modalContainer().find(".message").html("Loaded "+_(b).chain().humanize().titleize().value()+"...")}),this.manager.bind("all_collections_loaded",function(){return a.modalContainer().find(".message").html("All done!"),_.delay(function(){return a.modalContainer().modal("hide")},400)})}}),Luca.register("collection_loader_view","Luca.components.CollectionLoaderView")}.call(this),function(){Luca.components.Controller=Luca.containers.CardView.extend({initialize:function(a){var b;this.options=a,Luca.containers.CardView.prototype.initialize.apply(this,arguments),this.defaultCard||(this.defaultCard=(b=this.components[0])!=null?b.name:void 0);if(!this.defaultCard)throw"Controllers must specify a defaultCard property and/or the first component must have a name";return this.state=new Backbone.Model({active_section:this.defaultCard})},each:function(a){var b=this;return _(this.components).each(function(c){return a.apply(b,[c])})},"default":function(a){return this.navigate_to(this.defaultCard,a)},navigate_to:function(a,b){var c=this;return a||(a=this.defaultCard),this.activate(a,!1,function(a,d,e){c.state.set({active_section:e.name});if(_.isFunction(b))return b.apply(e)}),this.find(a)}})}.call(this),function(){Luca.fields.ButtonField=Luca.core.Field.extend({form_field:!0,readOnly:!0,events:{"click input":"click_handler"},hooks:["button:click"],className:"luca-ui-field luca-ui-button-field",template:"fields/button_field",click_handler:function(a){var b,c;return b=c=$(a.currentTarget),this.trigger("button:click")},initialize:function(a){var b;this.options=a!=null?a:{},_.extend(this.options),_.bindAll(this,"click_handler"),Luca.core.Field.prototype.initialize.apply(this,arguments);if((b=this.icon_class)!=null?b.length:void 0)return this.template="fields/button_field_link"},afterInitialize:function(){this.input_id||(this.input_id=_.uniqueId("button")),this.input_name||(this.input_name=this.name||(this.name=this.input_id)),this.input_value||(this.input_value=this.label||(this.label=this.text)),this.input_type||(this.input_type="button"),this.input_class||(this.input_class=this["class"]),this.icon_class||(this.icon_class="");if(this.icon_class.length&&!this.icon_class.match(/^icon-/))return this.icon_class="icon-"+this.icon_class},setValue:function(){return!0}}),Luca.register("button_field","Luca.fields.ButtonField")}.call(this),function(){Luca.fields.CheckboxField=Luca.core.Field.extend({form_field:!0,events:{"change input":"change_handler"},change_handler:function(a){var b,c;return b=c=$(a.currentTarget),this.trigger("on:change",this,a),b.checked===!0?this.trigger("checked"):this.trigger("unchecked")},className:"luca-ui-checkbox-field luca-ui-field",template:"fields/checkbox_field",hooks:["checked","unchecked"],initialize:function(a){return this.options=a!=null?a:{},_.extend(this,this.options),_.bindAll(this,"change_handler"),Luca.core.Field.prototype.initialize.apply(this,arguments)},afterInitialize:function(){return this.input_id||(this.input_id=_.uniqueId("field")),this.input_name||(this.input_name=this.name),this.input_value||(this.input_value=1),this.label||(this.label=this.name)},setValue:function(a){return this.input.attr("checked",a)},getValue:function(){return this.input.attr("checked")===!0}}),Luca.register("checkbox_field","Luca.fields.CheckboxField")}.call(this),function(){Luca.fields.FileUploadField=Luca.core.Field.extend({form_field:!0,template:"fields/file_upload_field",initialize:function(a){return this.options=a!=null?a:{},Luca.core.Field.prototype.initialize.apply(this,arguments)},afterInitialize:function(){return this.input_id||(this.input_id=_.uniqueId("field")),this.input_name||(this.input_name=this.name),this.label||(this.label=this.name),this.helperText||(this.helperText="")}}),Luca.register("file_upload_field","Luca.fields.FileUploadField")}.call(this),function(){Luca.fields.HiddenField=Luca.core.Field.extend({form_field:!0,template:"fields/hidden_field",initialize:function(a){return this.options=a!=null?a:{},Luca.core.Field.prototype.initialize.apply(this,arguments)},afterInitialize:function(){return this.input_id||(this.input_id=_.uniqueId("field")),this.input_name||(this.input_name=this.name),this.input_value||(this.input_value=this.value),this.label||(this.label=this.name)}}),Luca.register("hidden_field","Luca.fields.HiddenField")}.call(this),function(){Luca.fields.SelectField=Luca.core.Field.extend({form_field:!0,events:{"change select":"change_handler"},hooks:["after:select"],className:"luca-ui-select-field luca-ui-field",template:"fields/select_field",includeBlank:!0,blankValue:"",blankText:"Select One",initialize:function(a){this.options=a!=null?a:{},_.extend(this,this.options),_.extend(this,Luca.modules.Deferrable),_.bindAll(this,"change_handler","populateOptions","beforeFetch"),Luca.core.Field.prototype.initialize.apply(this,arguments),this.input_id||(this.input_id=_.uniqueId("field")),this.input_name||(this.input_name=this.name),this.label||(this.label=this.name);if(_.isUndefined(this.retainValue))return this.retainValue=!0},afterInitialize:function(){var a;if((a=this.collection)!=null?a.data:void 0)this.valueField||(this.valueField="id"),this.displayField||(this.displayField="name"),this.parseData();try{this.configure_collection()}catch(b){console.log("Error Configuring Collection",this,b.message)}return this.collection.bind("before:fetch",this.beforeFetch),this.collection.bind("reset",this.populateOptions)},parseData:function(){var a=this;return this.collection.data=_(this.collection.data).map(function(b){var c;return _.isArray(b)?(c={},c[a.valueField]=b[0],c[a.displayField]=b[1],c):b})},afterRender:function(){var a,b;return this.input=$("select",this.el),((a=this.collection)!=null?(b=a.models)!=null?b.length:void 0:void 0)>0?this.populateOptions():this.collection.trigger("reset")},setValue:function(a){return this.currentValue=a,Luca.core.Field.prototype.setValue.apply(this,arguments)},beforeFetch:function(){return this.resetOptions()},change_handler:function(a){return this.trigger("on:change",this,a)},resetOptions:function(){this.input.html("");if(this.includeBlank)return this.input.append("<option value='"+this.blankValue+"'>"+this.blankText+"</option>")},populateOptions:function(){var a,b=this;return this.resetOptions(),((a=this.collection)!=null?a.each:void 0)!=null&&this.collection.each(function(a){var c,d,e,f;return f=a.get(b.valueField),c=a.get(b.displayField),b.selected&&f===b.selected&&(e="selected"),d="<option "+e+" value='"+f+"'>"+c+"</option>",b.input.append(d)}),this.trigger("after:populate:options",this),this.setValue(this.currentValue)}}),Luca.register("select_field","Luca.fields.SelectField")}.call(this),function(){Luca.fields.TextAreaField=Luca.core.Field.extend({form_field:!0,events:{"keydown input":"keydown_handler","blur input":"blur_handler","focus input":"focus_handler"},template:"fields/text_area_field",height:"200px",width:"90%",initialize:function(a){return this.options=a!=null?a:{},_.bindAll(this,"keydown_handler"),Luca.core.Field.prototype.initialize.apply(this,arguments),this.input_id||(this.input_id=_.uniqueId("field")),this.input_name||(this.input_name=this.name),this.label||(this.label=this.name),this.input_class||(this.input_class=this["class"]),this.inputStyles||(this.inputStyles="height:"+this.height+";width:"+this.width)},setValue:function(a){return $(this.field()).val(a)},getValue:function(){return $(this.field()).val()},field:function(){return this.input=$("textarea#"+this.input_id,this.el)},keydown_handler:function(a){var b,c;return b=c=$(a.currentTarget)},blur_handler:function(a){var b,c;return b=c=$(a.currentTarget)},focus_handler:function(a){var b,c;return b=c=$(a.currentTarget)}}),Luca.register("text_area_field","Luca.fields.TextAreaField")}.call(this),function(){Luca.fields.TextField=Luca.core.Field.extend({form_field:!0,events:{"keydown input":"keydown_handler","blur input":"blur_handler","focus input":"focus_handler","change input":"change_handler"},template:"fields/text_field",initialize:function(a){this.options=a!=null?a:{},_.bindAll(this,"keydown_handler","blur_handler","focus_handler"),Luca.core.Field.prototype.initialize.apply(this,arguments),this.input_id||(this.input_id=_.uniqueId("field")),this.input_name||(this.input_name=this.name),this.label||(this.label=this.name),this.prepend&&(this.$el.addClass("input-prepend"),this.addOn=this.prepend);if(this.append)return this.$el.addClass("input-append"),this.addOn=this.append},keydown_handler:_.throttle(function(a){return this.change_handler.apply(this,arguments)},300),blur_handler:function(a){var b,c;return b=c=$(a.currentTarget)},focus_handler:function(a){var b,c;return b=c=$(a.currentTarget)},change_handler:function(a){return this.trigger("on:change",this,a)}}),Luca.register("text_field","Luca.fields.TextField")}.call(this),function(){Luca.fields.TypeAheadField=Luca.fields.TextField.extend({form_field:!0,className:"luca-ui-field",afterInitialize:function(){return this.input_id||(this.input_id=_.uniqueId("field")),this.input_name||(this.input_name=this.name),this.label||(this.label=this.name)}})}.call(this),function(){Luca.components.FormButtonToolbar=Luca.components.Toolbar.extend({className:"luca-ui-form-toolbar form-actions",position:"bottom",includeReset:!1,render:function(){return $(this.container).append(this.el)},initialize:function(a){this.options=a!=null?a:{},Luca.components.Toolbar.prototype.initialize.apply(this,arguments),this.components=[{ctype:"button_field",label:"Submit","class":"btn submit-button"}];if(this.includeReset)return this.components.push({ctype:"button_field",label:"Reset","class":"btn reset-button"})}}),Luca.register("form_button_toolbar","Luca.components.FormButtonToolbar")}.call(this),function(){Luca.components.FormView=Luca.core.Container.extend({tagName:"form",className:"luca-ui-form-view",hooks:["before:submit","before:reset","before:load","before:load:new","before:load:existing","after:submit","after:reset","after:load","after:load:new","after:load:existing","after:submit:success","after:submit:fatal_error","after:submit:error"],events:{"click .submit-button":"submitHandler","click .reset-button":"resetHandler"},toolbar:!0,initialize:function(a){return this.options=a!=null?a:{},Luca.core.Container.prototype.initialize.apply(this,arguments),_.bindAll(this,"submitHandler","resetHandler","renderToolbars"),this.state||(this.state=new Backbone.Model),this.setupHooks(this.hooks),this.legend||(this.legend=""),this.configureToolbars(),this.applyStyles()},addBootstrapFormControls:function(){var a=this;return this.bind("after:render",function(){var b;return b=a.$(".toolbar-container.bottom"),b.addClass("form-controls"),b.html(a.formControlsTemplate||Luca.templates["components/bootstrap_form_controls"](a))})},applyStyles:function(){Luca.enableBootstrap&&this.applyBootstrapStyles(),this.labelAlign&&this.$el.addClass("label-align-"+this.labelAlign);if(this.fieldLayoutClass)return this.$el.addClass(this.fieldLayoutClass)},applyBootstrapStyles:function(){this.labelAlign==="left"&&(this.inlineForm=!0),this.well&&this.$el.addClass("well"),this.searchForm&&this.$el.addClass("form-search"),this.horizontalForm&&this.$el.addClass("form-horizontal");if(this.inlineForm)return this.$el.addClass("form-inline")},configureToolbars:function(){if(Luca.enableBootstrap&&this.toolbar===!0)return this.addBootstrapFormControls();this.toolbar===!0&&(this.toolbars=[{ctype:"form_button_toolbar",includeReset:!0,position:"bottom"}]);if(this.toolbars&&this.toolbars.length)return this.bind("after:render",_.once(this.renderToolbars))},resetHandler:function(a){var b,c;return b=c=$(a.currentTarget),this.trigger("before:reset",this),this.reset(),this.trigger("after:reset",this)},submitHandler:function(a){var b,c;return b=c=$(a.currentTarget),this.trigger("before:submit",this),this.submit()},beforeLayout:function(){var a;return(a=Luca.core.Container.prototype.beforeLayout)!=null&&a.apply(this,arguments),this.$el.html(Luca.templates["components/form_view"](this))},prepareComponents:function(){var a;return a=$(".form-view-body",this.el),_(this.components).each(function(b){return b.container=a})},render:function(){return $(this.container).append(this.$el)},wrapper:function(){return this.$el.parents(".luca-ui-form-view-wrapper")},toolbarContainers:function(a){return a==null&&(a="bottom"),$(".toolbar-container."+a,this.wrapper()).first()},renderToolbars:function(){var a=this;return _(this.toolbars).each(function(b){return b.container=$("#"+a.cid+"-"+b.position+"-toolbar-container"),b=Luca.util.lazyComponent(b),b.render()})},getField:function(a){return _(this.getFields("name",a)).first()},getFields:function(a,b){var c;return c=this.select("isField",!0,!0),c.length>0&&a&&b&&(c=_(c).select(function(c){var d,e;return d=c[a],d==null?!1:(e=_.isFunction(d)?d():d,b===e)})),c},loadModel:function(a){var b,c,d,e=this;this.current_model=a,d=this,c=this.getFields(),this.trigger("before:load",this,this.current_model),this.current_model&&(b="before:load:"+(this.current_model.isNew()?"new":"existing"),this.trigger(b,this,this.current_model)),_(c).each(function(a){var b,c;b=a.input_name||a.name,c=_.isFunction(e.current_model[b])?e.current_model[b].apply(e,d):e.current_model.get(b);if(a.readOnly!==!0)return a!=null?a.setValue(c):void 0}),this.trigger("after:load",this,this.current_model);if(this.current_model)return this.trigger("after:load:"+(this.current_model.isNew()?"new":"existing"),this,this.current_model)},reset:function(){return this.loadModel(this.current_model)},clear:function(){var a=this;return this.current_model=this.defaultModel!=null?this.defaultModel():void 0,_(this.getFields()).each(function(b){try{return b.setValue("")}catch(c){return console.log("Error Clearing",a,b)}})},getValues:function(a,b){return a==null&&(a=!1),b==null&&(b=!0),_(this.getFields()).inject(function(c,d){var e,f;return f=d.getValue(),e=!1,b&&d.ctype==="button_field"&&(e=!0),a&&_.isBlank(f)&&(e=!0),d.input_name==="id"&&_.isBlank(f)&&(e=!0),e||(c[d.input_name||name]=f),c},{})},submit_success_handler:function(a,b,c){return this.trigger("after:submit",this,a,b),b&&b.success?this.trigger("after:submit:success",this,a,b):this.trigger("after:submit:error",this,a,b)},submit_fatal_error_handler:function(){return this.trigger.apply(["after:submit",this].concat(arguments)),this.trigger.apply(["after:submit:fatal_error",this].concat(arguments))},submit:function(a,b){a==null&&(a=!0),b==null&&(b={}),_.bindAll(this,"submit_success_handler","submit_fatal_error_handler"),b.success||(b.success=this.submit_success_handler),b.error||(b.error=this.submit_fatal_error_handler),this.current_model.set(this.getValues());if(!a)return;return this.current_model.save(this.current_model.toJSON(),b)},currentModel:function(){return this.current_model},setLegend:function(a){return this.legend=a,$("fieldset legend",this.el).first().html(this.legend)}}),Luca.register("form_view","Luca.components.FormView")}.call(this),function(){Luca.components.GridView=Luca.View.extend({events:{"dblclick .grid-view-row":"double_click_handler","click .grid-view-row":"click_handler"},className:"luca-ui-grid-view",scrollable:!0,emptyText:"No Results To display",tableStyle:"striped",hooks:["before:grid:render","before:render:header","before:render:row","after:grid:render","row:double:click","row:click","after:collection:load"],initialize:function(a){var b=this;return this.options=a!=null?a:{},_.extend(this,this.options),_.extend(this,Luca.modules.Deferrable),Luca.View.prototype.initialize.apply(this,arguments),_.bindAll(this,"double_click_handler","click_handler"),this.configure_collection(),this.collection.bind("reset",function(a){return b.refresh(),b.trigger("after:collection:load",a)})},beforeRender:function(){var a,b=this;return this.trigger("before:grid:render",this),this.scrollable&&this.$el.addClass("scrollable-grid-view"),this.$el.html(Luca.templates["components/grid_view"]()),this.table=$("table.luca-ui-grid-view",this.el),this.header=$("thead",this.table),this.body=$("tbody",this.table),this.footer=$("tfoot",this.table),Luca.enableBootstrap&&this.table.addClass("table"),_((a=this.tableStyle)!=null?a.split(" "):void 0).each(function(a){return b.table.addClass("table-"+a)}),this.scrollable&&this.setDimensions(),this.renderHeader(),this.emptyMessage(),this.renderToolbars(),$(this.container).append(this.$el)},toolbarContainers:function(a){return a==null&&(a="bottom"),$(".toolbar-container."+a,this.el)},renderToolbars:function(){var a=this;return _(this.toolbars).each(function(b){return b=Luca.util.lazyComponent(b),b.container=a.toolbarContainers(b.position),b.render()})},setDimensions:function(a){var b=this;return this.height||(this.height=285),$(".grid-view-body",this.el).height(this.height),$("tbody.scrollable",this.el).height(this.height-23),this.container_width=function(){return $(b.container).width()}(),this.width=this.container_width>0?this.container_width:756,$(".grid-view-body",this.el).width(this.width),$(".grid-view-body table",this.el).width(this.width),this.setDefaultColumnWidths()},resize:function(a){var b,c,d=this;b=a-this.width,this.width=a,$(".grid-view-body",this.el).width(this.width),$(".grid-view-body table",this.el).width(this.width);if(this.columns.length>0)return c=b/this.columns.length,_(this.columns).each(function(a,b){var e;return e=$(".column-"+b,d.el),e.width(a.width=a.width+c)})},padLastColumn:function(){var a,b;a=_(this.columns).inject(function(a,b){return a=b.width+a},0),b=this.width-a;if(b>0)return this.lastColumn().width+=b},setDefaultColumnWidths:function(){var a;return a=this.columns.length>0?this.width/this.columns.length:200,_(this.columns).each(function(b){return parseInt(b.width||(b.width=a))}),this.padLastColumn()},lastColumn:function(){return this.columns[this.columns.length-1]},afterRender:function(){return this.refresh(),this.trigger("after:grid:render",this)},emptyMessage:function(a){return a==null&&(a=""),a||(a=this.emptyText),this.body.html(""),this.body.append(Luca.templates["components/grid_view_empty_text"]({colspan:this.columns.length,text:a}))},refresh:function(){var a=this;this.body.html(""),this.collection.each(function(b,c){return a.render_row.apply(a,[b,c])});if(this.collection.models.length===0)return this.emptyMessage()},ifLoaded:function(a,b){return b||(b=this),a||(a=function(){return!0}),this.collection.ifLoaded(a,b)},applyFilter:function(a,b){return b==null&&(b={auto:!0,refresh:!0}),this.collection.applyFilter(a,b)},renderHeader:function(){var a,b=this;return this.trigger("before:render:header"),a=_(this.columns).map(function(a,b){var c;return c=a.width?"width:"+a.width+"px;":"","<th style='"+c+"' class='column-"+b+"'>"+a.header+"</th>"}),this.header.append("<tr>"+a+"</tr>")},render_row:function(a,b){var c,d,e,f,g=this;return e=(a!=null?a.get:void 0)&&(a!=null?a.attributes:void 0)?a.get("id"):"",this.trigger("before:render:row",a,b),d=_(this.columns).map(function(b,c){var d,e,f;return f=g.cell_renderer(a,b,c),e=b.width?"width:"+b.width+"px;":"",d=_.isUndefined(f)?"":f,"<td style='"+e+"' class='column-"+c+"'>"+d+"</td>"}),this.alternateRowClasses&&(c=b%2===0?"even":"odd"),(f=this.body)!=null?f.append("<tr data-record-id='"+e+"' data-row-index='"+b+"' class='grid-view-row "+c+"' id='row-"+b+"'>"+d+"</tr>"):void 0},cell_renderer:function(a,b,c){var d;return _.isFunction(b.renderer)?b.renderer.apply(this,[a,b,c]):b.data.match(/\w+\.\w+/)?(d=a.attributes||a,Luca.util.nestedValue(b.data,d)):(typeof a.get=="function"?a.get(b.data):void 0)||a[b.data]},double_click_handler:function(a){var b,c,d,e;return b=c=$(a.currentTarget),e=c.data("row-index"),d=this.collection.at(e),this.trigger("row:double:click",this,d,e)},click_handler:function(a){var b,c,d,e;return b=c=$(a.currentTarget),e=c.data("row-index"),d=this.collection.at(e),this.trigger("row:click",this,d,e),$(".grid-view-row",this.body).removeClass("selected-row"),b.addClass("selected-row")}}),Luca.register("grid_view","Luca.components.GridView")}.call(this),function(){Luca.components.RecordManager=Luca.containers.CardView.extend({events:{"click .record-manager-grid .edit-link":"edit_handler","click .record-manager-filter .filter-button":"filter_handler","click .record-manager-filter .reset-button":"reset_filter_handler","click .add-button":"add_handler","click .refresh-button":"filter_handler","click .back-to-search-button":"back_to_search_handler"},record_manager:!0,initialize:function(a){var b=this;this.options=a!=null?a:{},Luca.containers.CardView.prototype.initialize.apply(this,arguments);if(!this.name)throw"Record Managers must specify a name";return _.bindAll(this,"add_handler","edit_handler","filter_handler","reset_filter_handler"),this.filterConfig&&_.extend(this.components[0][0],this.filterConfig),this.gridConfig&&_.extend(this.components[0][1],this.gridConfig),this.editorConfig&&_.extend(this.components[1][0],this.editorConfig),this.bind("after:card:switch",function(){b.activeCard===0&&b.trigger("activation:search",b);if(b.activeCard===1)return b.trigger("activation:editor",b)})},components:[{ctype:"split_view",relayFirstActivation:!0,components:[{ctype:"form_view"},{ctype:"grid_view"}]},{ctype:"form_view"}],getSearch:function(a,b){return a==null&&(a=!1),b==null&&(b=!0),a===!0&&this.activate(0),b===!0&&this.getEditor().clear(),_.first(this.components)},getFilter:function(){return _.first(this.getSearch().components)},getGrid:function(){return _.last(this.getSearch().components)},getCollection:function(){return this.getGrid().collection},getEditor:function(a,b){var c=this;return a==null&&(a=!1),b==null&&(b=!1),a===!0&&this.activate(1,function(a,b,c){return c.reset()}),_.last(this.components)},beforeRender:function(){var a;return this.$el.addClass(""+this.resource+"-manager"),(a=Luca.containers.CardView.prototype.beforeRender)!=null&&a.apply(this,arguments),this.$el.addClass(""+this.resource+" record-manager"),this.$el.data("resource",this.resource),$(this.getGrid().el).addClass(""+this.resource+" record-manager-grid"),$(this.getFilter().el).addClass(""+this.resource+" record-manager-filter"),$(this.getEditor().el).addClass(""+this.resource+" record-manager-editor")},afterRender:function(){var a,b,c,d,e,f,g=this;return(f=Luca.containers.CardView.prototype.afterRender)!=null&&f.apply(this,arguments),e=this,d=this.getGrid(),c=this.getFilter(),b=this.getEditor(),a=this.getCollection(),d.bind("row:double:click",function(a,c,d){return e.getEditor(!0),b.loadModel(c)}),b.bind("before:submit",function(){return $(".form-view-flash-container",g.el).html(""),$(".form-view-body",g.el).spin("large")}),b.bind("after:submit",function(){return $(".form-view-body",g.el).spin(!1)}),b.bind("after:submit:fatal_error",function(){return $(".form-view-flash-container",g.el).append("<li class='error'>There was an internal server error saving this record. Please contact developers@benchprep.com to report this error.</li>"),$(".form-view-body",g.el).spin(!1)}),b.bind("after:submit:error",function(a,b,c){return _(c.errors).each(function(a){return $(".form-view-flash-container",g.el).append("<li class='error'>"+a+"</li>")})}),b.bind("after:submit:success",function(a,b,c){return $(".form-view-flash-container",g.el).append("<li class='success'>Successfully Saved Record</li>"),b.set(c.result),a.loadModel(b),d.refresh(),_.delay(function(){return $(".form-view-flash-container li.success",g.el).fadeOut(1e3),$(".form-view-flash-container",g.el).html("")},4e3)}),c.eachComponent(function(a){try{return a.bind("on:change",g.filter_handler)}
3
+ catch(b){return}})},firstActivation:function(){return this.getGrid().trigger("first:activation",this,this.getGrid()),this.getFilter().trigger("first:activation",this,this.getGrid())},reload:function(){var a,b,c,d;return d=this,c=this.getGrid(),b=this.getFilter(),a=this.getEditor(),b.clear(),c.applyFilter()},manageRecord:function(a){var b,c=this;return b=this.getCollection().get(a),b?this.loadModel(b):(console.log("Could Not Find Model, building and fetching"),b=this.buildModel(),b.set({id:a},{silent:!0}),b.fetch({success:function(a,b){return c.loadModel(a)}}))},loadModel:function(a){return this.current_model=a,this.getEditor(!0).loadModel(this.current_model),this.trigger("model:loaded",this.current_model)},currentModel:function(){return this.getEditor(!1).currentModel()},buildModel:function(){var a,b,c;return b=this.getEditor(!1),a=this.getCollection(),a.add([{}],{silent:!0,at:0}),c=a.at(0)},createModel:function(){return this.loadModel(this.buildModel())},reset_filter_handler:function(a){return this.getFilter().clear(),this.getGrid().applyFilter(this.getFilter().getValues())},filter_handler:function(a){return this.getGrid().applyFilter(this.getFilter().getValues())},edit_handler:function(a){var b,c,d,e;return b=d=$(a.currentTarget),e=d.parents("tr").data("record-id"),e&&(c=this.getGrid().collection.get(e)),c||(c=this.getGrid().collection.at(row_index))},add_handler:function(a){var b,c,d;return b=c=$(a.currentTarget),d=c.parents(".record-manager").eq(0).data("resource")},destroy_handler:function(a){},back_to_search_handler:function(){}})}.call(this),function(){Luca.Router=Backbone.Router.extend({routes:{"":"default"},initialize:function(a){var b=this;return this.options=a,_.extend(this,this.options),this.routeHandlers=_(this.routes).values(),_(this.routeHandlers).each(function(a){return b.bind("route:"+a,function(){return b.trigger.apply(b,["change:navigation",a].concat(_(arguments).flatten()))})})},navigate:function(a,b){return b==null&&(b=!1),Backbone.Router.prototype.navigate.apply(this,arguments),this.buildPathFrom(Backbone.history.getFragment())},buildPathFrom:function(a){var b=this;return _(this.routes).each(function(c,d){var e,f;f=b._routeToRegExp(d);if(f.test(a))return e=b._extractParameters(f,a),b.trigger.apply(b,["change:navigation",c].concat(e))})}})}.call(this),function(){}.call(this);
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: luca
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.7
4
+ version: 0.6.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-29 00:00:00.000000000 Z
12
+ date: 2012-04-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
@@ -255,6 +255,7 @@ files:
255
255
  - vendor/assets/javascripts/luca-ui-base.js
256
256
  - vendor/assets/javascripts/luca-ui-spec.js
257
257
  - vendor/assets/javascripts/luca-ui.js
258
+ - vendor/assets/javascripts/luca-ui.min.js
258
259
  - vendor/assets/luca-ui/base.css
259
260
  - vendor/assets/luca-ui/components/application.js
260
261
  - vendor/assets/luca-ui/components/base_toolbar.js