luca 0.8 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
1
  0.7.3:
2
2
  - Models being loaded by the FormView will now call
3
- beforeFormLoad methods if they exist on those models
3
+ beforeFormLoad methods if they exist on those models
4
+ 0.8.1
5
+ - Adds many style fixes for GridView
6
+ - Fixes style conflicts for Bootstrap grid-* css selectors
7
+ - Adds getForm() and getModel() methods to Luca.Field classes that belong to a form
@@ -1,6 +1,6 @@
1
1
  module Luca
2
2
  module Rails
3
- VERSION = "0.8"
3
+ VERSION = "0.8.2"
4
4
  end
5
5
  end
6
6
 
@@ -1,9 +1,9 @@
1
1
  Luca.fields.ButtonField = Luca.core.Field.extend
2
2
  form_field: true
3
-
3
+
4
4
  readOnly: true
5
5
 
6
- events:
6
+ events:
7
7
  "click input" : "click_handler"
8
8
 
9
9
  hooks:[
@@ -11,7 +11,7 @@ Luca.fields.ButtonField = Luca.core.Field.extend
11
11
  ]
12
12
 
13
13
  className: 'luca-ui-field luca-ui-button-field'
14
-
14
+
15
15
  template: 'fields/button_field'
16
16
 
17
17
  click_handler: (e)->
@@ -34,6 +34,7 @@ Luca.fields.ButtonField = Luca.core.Field.extend
34
34
  @input_class ||= @class
35
35
  @icon_class ||= ""
36
36
  @icon_class = "icon-#{ @icon_class }" if @icon_class.length and !@icon_class.match(/^icon-/)
37
+ @icon_class += " icon-white" if @white
37
38
 
38
39
  setValue: ()-> true
39
40
 
@@ -0,0 +1,64 @@
1
+ Luca.fields.CheckboxArray = Luca.core.Field.extend
2
+
3
+ template: "fields/checkbox_array"
4
+
5
+ events:
6
+ "click input" : "clickHandler"
7
+
8
+ initialize: (@options={})->
9
+ _.extend @, @options
10
+ _.extend @, Luca.modules.Deferrable
11
+ _.bindAll @, "populateCheckboxes", "clickHandler", "_updateModel"
12
+
13
+ Luca.core.Field::initialize.apply @, arguments
14
+
15
+ @input_id ||= _.uniqueId('field')
16
+ @input_name ||= @name
17
+ @label ||= @name
18
+ @valueField ||= "id"
19
+ @displayField ||= "name"
20
+ @selectedItems = []
21
+
22
+ afterInitialize: (@options={})->
23
+ try
24
+ @configure_collection()
25
+ catch e
26
+ console.log "Error Configuring Collection", @, e.message
27
+
28
+ @collection.bind "reset", @populateCheckboxes
29
+
30
+ afterRender: ()->
31
+ if @collection?.models?.length > 0
32
+ @populateCheckboxes()
33
+ else
34
+ @collection.trigger("reset")
35
+
36
+ clickHandler: (event)->
37
+ checkbox = event.target
38
+ if checkbox.checked
39
+ @selectedItems.push(checkbox.value)
40
+ else
41
+ if @selectedItems.indexOf(checkbox.value) isnt -1
42
+ @selectedItems = _.without(@selectedItems, [checkbox.value])
43
+
44
+ @_updateModel()
45
+
46
+ populateCheckboxes: ()->
47
+ controls = $(@el).find('.controls')
48
+ controls.empty()
49
+ @selectedItems = @getModel().get(@name)
50
+ @collection.each (model)=>
51
+ value = model.get(@valueField)
52
+ label = model.get(@displayField)
53
+ input_id = _.uniqueId('field')
54
+ controls.append(Luca.templates["fields/checkbox_array_item"]({label: label, value: value, input_id: input_id, input_name: @input_name}))
55
+ @$("##{input_id}").attr("checked", "checked") unless @selectedItems.indexOf(value) is -1
56
+
57
+ $(@container).append(@$el)
58
+
59
+ _updateModel: ()->
60
+ attributes = {}
61
+ attributes[@name] = @selectedItems
62
+ @getModel().set(attributes)
63
+
64
+ Luca.register "checkbox_array", "Luca.fields.CheckboxArray"
@@ -93,8 +93,15 @@ Luca.components.FormView = Luca.core.Container.extend
93
93
  _( @components ).each (component)->
94
94
  component.container = container
95
95
 
96
+ afterComponents: ()->
97
+ Luca.core.Container::afterComponents?.apply(@, arguments)
98
+ @eachField (field)=>
99
+ field.getForm = ()=> @
100
+ field.getModel = ()=> @currentModel()
101
+
96
102
  render: ()->
97
103
  $( @container ).append( @$el )
104
+ @
98
105
 
99
106
  wrapper: ()->
100
107
  @$el.parents('.luca-ui-form-view-wrapper')
@@ -108,6 +115,9 @@ Luca.components.FormView = Luca.core.Container.extend
108
115
  toolbar = Luca.util.lazyComponent(toolbar)
109
116
  toolbar.render()
110
117
 
118
+ eachField: (iterator)->
119
+ _( @getFields() ).map( iterator )
120
+
111
121
  getField: (name)->
112
122
  _( @getFields('name', name) ).first()
113
123
 
@@ -1,13 +1,15 @@
1
1
  Luca.components.GridView = Luca.View.extend
2
+ autoBindEventHandlers: true
3
+
2
4
  events:
3
- "dblclick .grid-view-row" : "double_click_handler"
4
- "click .grid-view-row": "click_handler"
5
+ "dblclick .luca-ui-g-row" : "double_click_handler"
6
+ "click .luca-ui-g-row": "click_handler"
5
7
 
6
- className: 'luca-ui-grid-view'
8
+ className: 'luca-ui-g-view'
7
9
 
8
10
  scrollable: true
9
11
 
10
- emptyText: 'No Results To display'
12
+ emptyText: 'No Results To display.'
11
13
 
12
14
  # available options are striped, condensed, bordered
13
15
  # or any combination of these, split up by space
@@ -23,6 +25,8 @@ Luca.components.GridView = Luca.View.extend
23
25
  "after:collection:load"
24
26
  ]
25
27
 
28
+ rowClass: "luca-ui-g-row"
29
+
26
30
  initialize: (@options={})->
27
31
  _.extend @, @options
28
32
  _.extend @, Luca.modules.Deferrable
@@ -40,11 +44,11 @@ Luca.components.GridView = Luca.View.extend
40
44
  beforeRender: ()->
41
45
  @trigger "before:grid:render", @
42
46
 
43
- @$el.addClass 'scrollable-grid-view' if @scrollable
47
+ @$el.addClass 'scrollable-g-view' if @scrollable
44
48
 
45
49
  @$el.html Luca.templates["components/grid_view"]()
46
50
 
47
- @table = $('table.luca-ui-grid-view', @el)
51
+ @table = $('table.luca-ui-g-view', @el)
48
52
  @header = $("thead", @table)
49
53
  @body = $("tbody", @table)
50
54
  @footer = $("tfoot", @table)
@@ -74,19 +78,24 @@ Luca.components.GridView = Luca.View.extend
74
78
  toolbar.container = @toolbarContainers( toolbar.position )
75
79
  toolbar.render()
76
80
 
81
+ defaultWidth: 756
82
+ defaultHeight: 285
83
+
77
84
  setDimensions: (offset)->
78
- @height ||= 285
85
+ @height ||= @defaultHeight
79
86
 
80
- $('.grid-view-body', @el).height( @height )
87
+ $('.luca-ui-g-view-body', @el).height( @height )
81
88
  $('tbody.scrollable', @el).height( @height - 23 )
82
89
 
83
90
  @container_width = do => $(@container).width()
84
- @width = if @container_width > 0 then @container_width else 756
91
+
92
+ @width = if @container_width > 0 then @container_width else @defaultWidth
93
+ @width = _([@width, (@maxWidth || @width)]).max()
85
94
 
86
95
  #@width += offset if offset
87
96
 
88
- $('.grid-view-body', @el).width( @width )
89
- $('.grid-view-body table', @el).width( @width )
97
+ $('.luca-ui-g-view-body', @el).width( @width )
98
+ $('.luca-ui-g-view-body table', @el).width( @width )
90
99
 
91
100
  @setDefaultColumnWidths()
92
101
 
@@ -94,8 +103,8 @@ Luca.components.GridView = Luca.View.extend
94
103
  difference = newWidth - @width
95
104
  @width = newWidth
96
105
 
97
- $('.grid-view-body', @el).width( @width )
98
- $('.grid-view-body table', @el).width( @width )
106
+ $('.luca-ui-g-view-body', @el).width( @width )
107
+ $('.luca-ui-g-view-body table', @el).width( @width )
99
108
 
100
109
  if @columns.length > 0
101
110
  distribution = difference / @columns.length
@@ -167,6 +176,8 @@ Luca.components.GridView = Luca.View.extend
167
176
  @$ "[data-record-id=#{ id }]", 'table'
168
177
 
169
178
  render_row: (row,row_index)->
179
+ rowClass = @rowClass
180
+
170
181
  model_id = if row?.get and row?.attributes then row.get('id') else ''
171
182
 
172
183
  @trigger "before:render:row", row, row_index
@@ -183,7 +194,7 @@ Luca.components.GridView = Luca.View.extend
183
194
  if @alternateRowClasses
184
195
  altClass = if row_index % 2 is 0 then "even" else "odd"
185
196
 
186
- @body?.append("<tr data-record-id='#{ model_id }' data-row-index='#{ row_index }' class='grid-view-row #{ altClass }' id='row-#{ row_index }'>#{ cells }</tr>")
197
+ @body?.append("<tr data-record-id='#{ model_id }' data-row-index='#{ row_index }' class='#{ rowClass } #{ altClass }' id='row-#{ row_index }'>#{ cells }</tr>")
187
198
 
188
199
  cell_renderer: (row, column, columnIndex )->
189
200
  if _.isFunction column.renderer
@@ -206,7 +217,7 @@ Luca.components.GridView = Luca.View.extend
206
217
  record = @collection.at( rowIndex )
207
218
  @trigger "row:click", @, record, rowIndex
208
219
 
209
- $('.grid-view-row', @body ).removeClass('selected-row')
220
+ $(".#{ @rowClass }", @body ).removeClass('selected-row')
210
221
  me.addClass('selected-row')
211
222
 
212
223
  Luca.register "grid_view","Luca.components.GridView"
@@ -182,6 +182,7 @@ Luca.core.Container = Luca.View.extend
182
182
  console.log "Error Rendering Component #{ component.name || component.cid }", component
183
183
  console.log e.message
184
184
  console.log e.stack
185
+ throw e unless Luca.silenceRenderErrors? is true
185
186
 
186
187
  #### Container Activation
187
188
  #
data/src/framework.coffee CHANGED
@@ -1,13 +1,13 @@
1
1
  _.mixin( _.string )
2
2
 
3
3
  window.Luca =
4
- VERSION: "0.8"
4
+ VERSION: "0.8.2"
5
5
  core: {}
6
6
  containers: {}
7
7
  components: {}
8
8
  modules: {}
9
- fields: {}
10
9
  util: {}
10
+ fields: {}
11
11
  registry:
12
12
  classes: {}
13
13
  namespaces:["Luca.containers","Luca.components"]
@@ -1,17 +1,17 @@
1
1
 
2
- .scrollable-grid-view {
2
+ .scrollable-g-view {
3
3
  /* define height and width of scrollable area. Add 16px to width for scrollbar */
4
- .grid-view-body {
4
+ .luca-ui-g-view-body {
5
5
  clear: both;
6
6
  overflow: auto;
7
7
  }
8
8
 
9
9
  /* Reset overflow value to hidden for all non-IE browsers. */
10
- .grid-view-body {
10
+ .luca-ui-g-view-body {
11
11
  overflow: hidden;
12
12
  }
13
-
14
- .grid-view-body .empty-text-wrapper {
13
+
14
+ .luca-ui-g-view-body .empty-text-wrapper {
15
15
  display: block;
16
16
  margin: 10px auto;
17
17
  width: 30%;
@@ -22,12 +22,12 @@
22
22
  }
23
23
  }
24
24
  /* define width of table. IE browsers only */
25
- .grid-view-body table {
25
+ .luca-ui-g-view-body table {
26
26
  }
27
27
 
28
28
  /* define width of table. Add 16px to width for scrollbar. */
29
29
  /* All other non-IE browsers. */
30
- .grid-view-body table {
30
+ .luca-ui-g-view-body table {
31
31
  }
32
32
 
33
33
  /* set table header to a fixed position. WinIE 6.x only */
@@ -93,7 +93,7 @@
93
93
 
94
94
  }
95
95
 
96
- .grid-view-footer {
96
+ .luca-ui-g-view-footer {
97
97
  .toolbar-container {
98
98
  float: left;
99
99
  width: 100%;
@@ -15,6 +15,10 @@
15
15
 
16
16
  .luca-ui-tab-view.tabs-left {
17
17
  .tab-selector-container {
18
+ ul.nav-tabs {
19
+ padding: 0px;
20
+ }
21
+
18
22
  float: left;
19
23
  }
20
24
  .tab-content {
@@ -1,9 +1,9 @@
1
- .luca-ui-grid-view-wrapper
2
- .grid-view-header
1
+ .luca-ui-g-view-wrapper
2
+ .g-view-header
3
3
  .toolbar-container.top
4
- .grid-view-body
5
- %table.luca-ui-grid-view.scrollable-table{:width=>"100%",:cellpadding=>0,:cellspacing=>0}
4
+ .luca-ui-g-view-body
5
+ %table.luca-ui-g-view.scrollable-table{:width=>"100%",:cellpadding=>0,:cellspacing=>0}
6
6
  %thead.fixed
7
7
  %tbody.scrollable
8
- .grid-view-footer
8
+ .luca-ui-g-view-footer
9
9
  .toolbar-container.bottom
@@ -0,0 +1,5 @@
1
+ .form-horizontal
2
+ .control-group
3
+ %label{:for=>"<%= input_id %>"}
4
+ <%= label %>
5
+ .controls
@@ -0,0 +1,4 @@
1
+ %label{:for => "<%= input_id %>"}
2
+ %input{:id => "<%= input_id %>", :type => "checkbox", :name => "<%= input_name %>", :value => "<%= value %>"}
3
+ <%= label %>
4
+
@@ -3,13 +3,13 @@
3
3
  _.mixin(_.string);
4
4
 
5
5
  window.Luca = {
6
- VERSION: "0.8",
6
+ VERSION: "0.8.2",
7
7
  core: {},
8
8
  containers: {},
9
9
  components: {},
10
10
  modules: {},
11
- fields: {},
12
11
  util: {},
12
+ fields: {},
13
13
  registry: {
14
14
  classes: {},
15
15
  namespaces: ["Luca.containers", "Luca.components"]
@@ -236,7 +236,7 @@
236
236
  }).call(this);
237
237
  (function() {
238
238
  Luca.templates || (Luca.templates = {});
239
- 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('');};
239
+ Luca.templates["components/grid_view"] = function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('<div class=\'luca-ui-g-view-wrapper\'>\n <div class=\'g-view-header\'>\n <div class=\'toolbar-container top\'></div>\n </div>\n <div class=\'luca-ui-g-view-body\'>\n <table cellpadding=\'0\' cellspacing=\'0\' class=\'luca-ui-g-view scrollable-table\' width=\'100%\'>\n <thead class=\'fixed\'></thead>\n <tbody class=\'scrollable\'></tbody>\n </table>\n </div>\n <div class=\'luca-ui-g-view-footer\'>\n <div class=\'toolbar-container bottom\'></div>\n </div>\n</div>\n');}return __p.join('');};
240
240
  }).call(this);
241
241
  (function() {
242
242
  Luca.templates || (Luca.templates = {});
@@ -266,6 +266,14 @@
266
266
  Luca.templates || (Luca.templates = {});
267
267
  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 '); if(icon_class.length) { __p.push('\n <i class=\'', icon_class ,'\'></i>\n '); } __p.push('\n ', input_value ,'\n</a>\n');}return __p.join('');};
268
268
  }).call(this);
269
+ (function() {
270
+ Luca.templates || (Luca.templates = {});
271
+ Luca.templates["fields/checkbox_array"] = function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('<div class=\'form-horizontal\'>\n <div class=\'control-group\'>\n <label for=\'', input_id ,'\'>\n ', label ,'\n </label>\n <div class=\'controls\'></div>\n </div>\n</div>\n');}return __p.join('');};
272
+ }).call(this);
273
+ (function() {
274
+ Luca.templates || (Luca.templates = {});
275
+ Luca.templates["fields/checkbox_array_item"] = function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('<label for=\'', input_id ,'\'>\n <input id=\'', input_id ,'\' name=\'', input_name ,'\' type=\'checkbox\' value=\'', value ,'\' />\n ', label ,'\n</label>\n');}return __p.join('');};
276
+ }).call(this);
269
277
  (function() {
270
278
  Luca.templates || (Luca.templates = {});
271
279
  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'); if(helperText) { __p.push('\n<p class=\'helper-text help-block\'>\n ', helperText ,'\n</p>\n'); } __p.push('\n');}return __p.join('');};
@@ -913,7 +921,8 @@
913
921
  } catch (e) {
914
922
  console.log("Error Rendering Component " + (component.name || component.cid), component);
915
923
  console.log(e.message);
916
- return console.log(e.stack);
924
+ console.log(e.stack);
925
+ if ((Luca.silenceRenderErrors != null) !== true) throw e;
917
926
  }
918
927
  });
919
928
  },
@@ -3,13 +3,13 @@
3
3
  _.mixin(_.string);
4
4
 
5
5
  window.Luca = {
6
- VERSION: "0.8",
6
+ VERSION: "0.8.2",
7
7
  core: {},
8
8
  containers: {},
9
9
  components: {},
10
10
  modules: {},
11
- fields: {},
12
11
  util: {},
12
+ fields: {},
13
13
  registry: {
14
14
  classes: {},
15
15
  namespaces: ["Luca.containers", "Luca.components"]
@@ -236,7 +236,7 @@
236
236
  }).call(this);
237
237
  (function() {
238
238
  Luca.templates || (Luca.templates = {});
239
- 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('');};
239
+ Luca.templates["components/grid_view"] = function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('<div class=\'luca-ui-g-view-wrapper\'>\n <div class=\'g-view-header\'>\n <div class=\'toolbar-container top\'></div>\n </div>\n <div class=\'luca-ui-g-view-body\'>\n <table cellpadding=\'0\' cellspacing=\'0\' class=\'luca-ui-g-view scrollable-table\' width=\'100%\'>\n <thead class=\'fixed\'></thead>\n <tbody class=\'scrollable\'></tbody>\n </table>\n </div>\n <div class=\'luca-ui-g-view-footer\'>\n <div class=\'toolbar-container bottom\'></div>\n </div>\n</div>\n');}return __p.join('');};
240
240
  }).call(this);
241
241
  (function() {
242
242
  Luca.templates || (Luca.templates = {});
@@ -266,6 +266,14 @@
266
266
  Luca.templates || (Luca.templates = {});
267
267
  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 '); if(icon_class.length) { __p.push('\n <i class=\'', icon_class ,'\'></i>\n '); } __p.push('\n ', input_value ,'\n</a>\n');}return __p.join('');};
268
268
  }).call(this);
269
+ (function() {
270
+ Luca.templates || (Luca.templates = {});
271
+ Luca.templates["fields/checkbox_array"] = function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('<div class=\'form-horizontal\'>\n <div class=\'control-group\'>\n <label for=\'', input_id ,'\'>\n ', label ,'\n </label>\n <div class=\'controls\'></div>\n </div>\n</div>\n');}return __p.join('');};
272
+ }).call(this);
273
+ (function() {
274
+ Luca.templates || (Luca.templates = {});
275
+ Luca.templates["fields/checkbox_array_item"] = function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('<label for=\'', input_id ,'\'>\n <input id=\'', input_id ,'\' name=\'', input_name ,'\' type=\'checkbox\' value=\'', value ,'\' />\n ', label ,'\n</label>\n');}return __p.join('');};
276
+ }).call(this);
269
277
  (function() {
270
278
  Luca.templates || (Luca.templates = {});
271
279
  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'); if(helperText) { __p.push('\n<p class=\'helper-text help-block\'>\n ', helperText ,'\n</p>\n'); } __p.push('\n');}return __p.join('');};
@@ -913,7 +921,8 @@
913
921
  } catch (e) {
914
922
  console.log("Error Rendering Component " + (component.name || component.cid), component);
915
923
  console.log(e.message);
916
- return console.log(e.stack);
924
+ console.log(e.stack);
925
+ if ((Luca.silenceRenderErrors != null) !== true) throw e;
917
926
  }
918
927
  });
919
928
  },
@@ -1917,8 +1926,9 @@
1917
1926
  this.input_class || (this.input_class = this["class"]);
1918
1927
  this.icon_class || (this.icon_class = "");
1919
1928
  if (this.icon_class.length && !this.icon_class.match(/^icon-/)) {
1920
- return this.icon_class = "icon-" + this.icon_class;
1929
+ this.icon_class = "icon-" + this.icon_class;
1921
1930
  }
1931
+ if (this.white) return this.icon_class += " icon-white";
1922
1932
  },
1923
1933
  setValue: function() {
1924
1934
  return true;
@@ -1927,6 +1937,89 @@
1927
1937
 
1928
1938
  Luca.register("button_field", "Luca.fields.ButtonField");
1929
1939
 
1940
+ }).call(this);
1941
+ (function() {
1942
+
1943
+ Luca.fields.CheckboxArray = Luca.core.Field.extend({
1944
+ template: "fields/checkbox_array",
1945
+ events: {
1946
+ "click input": "clickHandler"
1947
+ },
1948
+ initialize: function(options) {
1949
+ this.options = options != null ? options : {};
1950
+ _.extend(this, this.options);
1951
+ _.extend(this, Luca.modules.Deferrable);
1952
+ _.bindAll(this, "populateCheckboxes", "clickHandler", "_updateModel");
1953
+ Luca.core.Field.prototype.initialize.apply(this, arguments);
1954
+ this.input_id || (this.input_id = _.uniqueId('field'));
1955
+ this.input_name || (this.input_name = this.name);
1956
+ this.label || (this.label = this.name);
1957
+ this.valueField || (this.valueField = "id");
1958
+ this.displayField || (this.displayField = "name");
1959
+ return this.selectedItems = [];
1960
+ },
1961
+ afterInitialize: function(options) {
1962
+ this.options = options != null ? options : {};
1963
+ try {
1964
+ this.configure_collection();
1965
+ } catch (e) {
1966
+ console.log("Error Configuring Collection", this, e.message);
1967
+ }
1968
+ return this.collection.bind("reset", this.populateCheckboxes);
1969
+ },
1970
+ afterRender: function() {
1971
+ var _ref, _ref2;
1972
+ if (((_ref = this.collection) != null ? (_ref2 = _ref.models) != null ? _ref2.length : void 0 : void 0) > 0) {
1973
+ return this.populateCheckboxes();
1974
+ } else {
1975
+ return this.collection.trigger("reset");
1976
+ }
1977
+ },
1978
+ clickHandler: function(event) {
1979
+ var checkbox;
1980
+ checkbox = event.target;
1981
+ if (checkbox.checked) {
1982
+ this.selectedItems.push(checkbox.value);
1983
+ } else {
1984
+ if (this.selectedItems.indexOf(checkbox.value) !== -1) {
1985
+ this.selectedItems = _.without(this.selectedItems, [checkbox.value]);
1986
+ }
1987
+ }
1988
+ return this._updateModel();
1989
+ },
1990
+ populateCheckboxes: function() {
1991
+ var controls,
1992
+ _this = this;
1993
+ controls = $(this.el).find('.controls');
1994
+ controls.empty();
1995
+ this.selectedItems = this.getModel().get(this.name);
1996
+ this.collection.each(function(model) {
1997
+ var input_id, label, value;
1998
+ value = model.get(_this.valueField);
1999
+ label = model.get(_this.displayField);
2000
+ input_id = _.uniqueId('field');
2001
+ controls.append(Luca.templates["fields/checkbox_array_item"]({
2002
+ label: label,
2003
+ value: value,
2004
+ input_id: input_id,
2005
+ input_name: _this.input_name
2006
+ }));
2007
+ if (_this.selectedItems.indexOf(value) !== -1) {
2008
+ return _this.$("#" + input_id).attr("checked", "checked");
2009
+ }
2010
+ });
2011
+ return $(this.container).append(this.$el);
2012
+ },
2013
+ _updateModel: function() {
2014
+ var attributes;
2015
+ attributes = {};
2016
+ attributes[this.name] = this.selectedItems;
2017
+ return this.getModel().set(attributes);
2018
+ }
2019
+ });
2020
+
2021
+ Luca.register("checkbox_array", "Luca.fields.CheckboxArray");
2022
+
1930
2023
  }).call(this);
1931
2024
  (function() {
1932
2025
 
@@ -2334,8 +2427,24 @@
2334
2427
  return component.container = container;
2335
2428
  });
2336
2429
  },
2430
+ afterComponents: function() {
2431
+ var _ref,
2432
+ _this = this;
2433
+ if ((_ref = Luca.core.Container.prototype.afterComponents) != null) {
2434
+ _ref.apply(this, arguments);
2435
+ }
2436
+ return this.eachField(function(field) {
2437
+ field.getForm = function() {
2438
+ return _this;
2439
+ };
2440
+ return field.getModel = function() {
2441
+ return _this.currentModel();
2442
+ };
2443
+ });
2444
+ },
2337
2445
  render: function() {
2338
- return $(this.container).append(this.$el);
2446
+ $(this.container).append(this.$el);
2447
+ return this;
2339
2448
  },
2340
2449
  wrapper: function() {
2341
2450
  return this.$el.parents('.luca-ui-form-view-wrapper');
@@ -2352,6 +2461,9 @@
2352
2461
  return toolbar.render();
2353
2462
  });
2354
2463
  },
2464
+ eachField: function(iterator) {
2465
+ return _(this.getFields()).map(iterator);
2466
+ },
2355
2467
  getField: function(name) {
2356
2468
  return _(this.getFields('name', name)).first();
2357
2469
  },
@@ -2482,15 +2594,17 @@
2482
2594
  (function() {
2483
2595
 
2484
2596
  Luca.components.GridView = Luca.View.extend({
2597
+ autoBindEventHandlers: true,
2485
2598
  events: {
2486
- "dblclick .grid-view-row": "double_click_handler",
2487
- "click .grid-view-row": "click_handler"
2599
+ "dblclick .luca-ui-g-row": "double_click_handler",
2600
+ "click .luca-ui-g-row": "click_handler"
2488
2601
  },
2489
- className: 'luca-ui-grid-view',
2602
+ className: 'luca-ui-g-view',
2490
2603
  scrollable: true,
2491
- emptyText: 'No Results To display',
2604
+ emptyText: 'No Results To display.',
2492
2605
  tableStyle: 'striped',
2493
2606
  hooks: ["before:grid:render", "before:render:header", "before:render:row", "after:grid:render", "row:double:click", "row:click", "after:collection:load"],
2607
+ rowClass: "luca-ui-g-row",
2494
2608
  initialize: function(options) {
2495
2609
  var _this = this;
2496
2610
  this.options = options != null ? options : {};
@@ -2508,9 +2622,9 @@
2508
2622
  var _ref,
2509
2623
  _this = this;
2510
2624
  this.trigger("before:grid:render", this);
2511
- if (this.scrollable) this.$el.addClass('scrollable-grid-view');
2625
+ if (this.scrollable) this.$el.addClass('scrollable-g-view');
2512
2626
  this.$el.html(Luca.templates["components/grid_view"]());
2513
- this.table = $('table.luca-ui-grid-view', this.el);
2627
+ this.table = $('table.luca-ui-g-view', this.el);
2514
2628
  this.header = $("thead", this.table);
2515
2629
  this.body = $("tbody", this.table);
2516
2630
  this.footer = $("tfoot", this.table);
@@ -2536,17 +2650,20 @@
2536
2650
  return toolbar.render();
2537
2651
  });
2538
2652
  },
2653
+ defaultWidth: 756,
2654
+ defaultHeight: 285,
2539
2655
  setDimensions: function(offset) {
2540
2656
  var _this = this;
2541
- this.height || (this.height = 285);
2542
- $('.grid-view-body', this.el).height(this.height);
2657
+ this.height || (this.height = this.defaultHeight);
2658
+ $('.luca-ui-g-view-body', this.el).height(this.height);
2543
2659
  $('tbody.scrollable', this.el).height(this.height - 23);
2544
2660
  this.container_width = (function() {
2545
2661
  return $(_this.container).width();
2546
2662
  })();
2547
- this.width = this.container_width > 0 ? this.container_width : 756;
2548
- $('.grid-view-body', this.el).width(this.width);
2549
- $('.grid-view-body table', this.el).width(this.width);
2663
+ this.width = this.container_width > 0 ? this.container_width : this.defaultWidth;
2664
+ this.width = _([this.width, this.maxWidth || this.width]).max();
2665
+ $('.luca-ui-g-view-body', this.el).width(this.width);
2666
+ $('.luca-ui-g-view-body table', this.el).width(this.width);
2550
2667
  return this.setDefaultColumnWidths();
2551
2668
  },
2552
2669
  resize: function(newWidth) {
@@ -2554,8 +2671,8 @@
2554
2671
  _this = this;
2555
2672
  difference = newWidth - this.width;
2556
2673
  this.width = newWidth;
2557
- $('.grid-view-body', this.el).width(this.width);
2558
- $('.grid-view-body table', this.el).width(this.width);
2674
+ $('.luca-ui-g-view-body', this.el).width(this.width);
2675
+ $('.luca-ui-g-view-body table', this.el).width(this.width);
2559
2676
  if (this.columns.length > 0) {
2560
2677
  distribution = difference / this.columns.length;
2561
2678
  return _(this.columns).each(function(col, index) {
@@ -2636,8 +2753,9 @@
2636
2753
  return this.$("[data-record-id=" + id + "]", 'table');
2637
2754
  },
2638
2755
  render_row: function(row, row_index) {
2639
- var altClass, cells, model_id, _ref,
2756
+ var altClass, cells, model_id, rowClass, _ref,
2640
2757
  _this = this;
2758
+ rowClass = this.rowClass;
2641
2759
  model_id = (row != null ? row.get : void 0) && (row != null ? row.attributes : void 0) ? row.get('id') : '';
2642
2760
  this.trigger("before:render:row", row, row_index);
2643
2761
  cells = _(this.columns).map(function(column, col_index) {
@@ -2651,7 +2769,7 @@
2651
2769
  if (this.alternateRowClasses) {
2652
2770
  altClass = row_index % 2 === 0 ? "even" : "odd";
2653
2771
  }
2654
- return (_ref = this.body) != null ? _ref.append("<tr data-record-id='" + model_id + "' data-row-index='" + row_index + "' class='grid-view-row " + altClass + "' id='row-" + row_index + "'>" + cells + "</tr>") : void 0;
2772
+ return (_ref = this.body) != null ? _ref.append("<tr data-record-id='" + model_id + "' data-row-index='" + row_index + "' class='" + rowClass + " " + altClass + "' id='row-" + row_index + "'>" + cells + "</tr>") : void 0;
2655
2773
  },
2656
2774
  cell_renderer: function(row, column, columnIndex) {
2657
2775
  var source;
@@ -2677,7 +2795,7 @@
2677
2795
  rowIndex = my.data('row-index');
2678
2796
  record = this.collection.at(rowIndex);
2679
2797
  this.trigger("row:click", this, record, rowIndex);
2680
- $('.grid-view-row', this.body).removeClass('selected-row');
2798
+ $("." + this.rowClass, this.body).removeClass('selected-row');
2681
2799
  return me.addClass('selected-row');
2682
2800
  }
2683
2801
  });