luca 0.9.6 → 0.9.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/CHANGELOG +37 -14
  2. data/lib/luca/rails/version.rb +1 -1
  3. data/spec/components/collection_view_spec.coffee +24 -2
  4. data/spec/components/pagination_control_spec.coffee +0 -0
  5. data/spec/concerns/dom_helpers_spec.coffee +16 -0
  6. data/spec/concerns/filterable_spec.coffee +25 -0
  7. data/spec/concerns/model_presenter_spec.coffee +31 -0
  8. data/spec/concerns/paginatable_spec.coffee +0 -0
  9. data/spec/concerns/state_model_spec.coffee +0 -0
  10. data/spec/concerns_spec.coffee +88 -0
  11. data/spec/core/container_spec.coffee +74 -12
  12. data/spec/core/model_spec.coffee +6 -1
  13. data/spec/define_spec.coffee +0 -6
  14. data/spec/util_spec.coffee +24 -0
  15. data/src/components/application.coffee +32 -30
  16. data/src/components/base_toolbar.coffee +6 -4
  17. data/src/components/collection_loader_view.coffee +3 -1
  18. data/src/components/collection_view.coffee +42 -21
  19. data/src/components/controller.coffee +3 -1
  20. data/src/components/fields/button_field.coffee +19 -12
  21. data/src/components/fields/checkbox_array.coffee +8 -2
  22. data/src/components/fields/checkbox_field.coffee +18 -9
  23. data/src/components/fields/file_upload_field.coffee +5 -1
  24. data/src/components/fields/hidden_field.coffee +3 -1
  25. data/src/components/fields/label_field.coffee +4 -3
  26. data/src/components/fields/select_field.coffee +7 -8
  27. data/src/components/fields/text_field.coffee +3 -1
  28. data/src/components/fields/type_ahead_field.coffee +4 -2
  29. data/src/components/form_button_toolbar.coffee +4 -1
  30. data/src/components/form_view.coffee +49 -44
  31. data/src/components/grid_view.coffee +1 -1
  32. data/src/components/multi_collection_view.coffee +49 -22
  33. data/src/components/pagination_control.coffee +17 -13
  34. data/src/{modules → concerns}/application_event_bindings.coffee +1 -1
  35. data/src/{modules → concerns}/collection_event_bindings.coffee +1 -1
  36. data/src/{modules → concerns}/deferrable.coffee +1 -1
  37. data/src/{modules → concerns}/dom_helpers.coffee +11 -2
  38. data/src/{modules → concerns}/enhanced_properties.coffee +1 -1
  39. data/src/concerns/filterable.coffee +82 -0
  40. data/src/{modules → concerns}/grid_layout.coffee +1 -1
  41. data/src/{modules → concerns}/loadmaskable.coffee +1 -1
  42. data/src/{modules → concerns}/local_storage.coffee +0 -0
  43. data/src/{modules → concerns}/modal_view.coffee +1 -1
  44. data/src/concerns/model_presenter.coffee +23 -0
  45. data/src/concerns/paginatable.coffee +87 -0
  46. data/src/{modules → concerns}/state_model.coffee +1 -1
  47. data/src/{modules → concerns}/templating.coffee +1 -1
  48. data/src/concerns.coffee +70 -0
  49. data/src/containers/tab_view.coffee +7 -10
  50. data/src/core/collection.coffee +17 -1
  51. data/src/core/container.coffee +56 -31
  52. data/src/core/field.coffee +39 -38
  53. data/src/core/meta_data.coffee +37 -0
  54. data/src/core/model.coffee +18 -1
  55. data/src/core/view.coffee +25 -29
  56. data/src/define.coffee +54 -66
  57. data/src/framework.coffee +23 -18
  58. data/src/index.coffee +3 -1
  59. data/src/stylesheets/components/checkbox_array.scss +1 -1
  60. data/src/stylesheets/components/form_view.scss +5 -5
  61. data/src/stylesheets/components/viewport.scss +2 -1
  62. data/src/stylesheets/containers/container.scss +0 -5
  63. data/src/stylesheets/containers/tab_view.scss +5 -5
  64. data/src/tools/console.coffee +5 -5
  65. data/src/util.coffee +47 -0
  66. data/vendor/assets/javascripts/luca-ui-development-tools.js +5 -5
  67. data/vendor/assets/javascripts/luca-ui-development-tools.min.js +1 -1
  68. data/vendor/assets/javascripts/luca-ui-full.js +905 -416
  69. data/vendor/assets/javascripts/luca-ui-full.min.js +5 -5
  70. data/vendor/assets/javascripts/luca-ui.js +905 -416
  71. data/vendor/assets/javascripts/luca-ui.min.js +5 -4
  72. data/vendor/assets/stylesheets/luca-ui.css +15 -15
  73. metadata +27 -17
  74. data/spec/mixin_spec.coffee +0 -49
  75. data/src/modules/filterable.coffee +0 -60
  76. data/src/modules/paginatable.coffee +0 -79
data/src/define.coffee CHANGED
@@ -13,6 +13,7 @@
13
13
  # _.def("MyView").extends("Luca.View").with the_custom:"shit"
14
14
  _.mixin
15
15
  def: Luca.component = Luca.define = Luca.register = (componentName)-> new DefineProxy(componentName)
16
+ register: Luca.register
16
17
 
17
18
  # The define proxy chain sets up a call to Luca.extend, which is a wrapper around Luca and Backbone component class' extend function.
18
19
  class DefineProxy
@@ -20,6 +21,7 @@ class DefineProxy
20
21
  @namespace = Luca.util.namespace()
21
22
  @componentId = @componentName = componentName
22
23
  @superClassName = 'Luca.View'
24
+ @properties ||= {}
23
25
 
24
26
  if componentName.match(/\./)
25
27
  @namespaced = true
@@ -30,6 +32,14 @@ class DefineProxy
30
32
  # automatically add the namespace to the namespace registry
31
33
  Luca.registry.addNamespace( parts.join('.') )
32
34
 
35
+ meta: (key, value)->
36
+ metaKey = @namespace + '.' + @componentId
37
+ metaKey = metaKey.replace(/^\./,'')
38
+ data = Luca.registry.addMetaData(metaKey, key, value)
39
+
40
+ @properties.componentMetaData = ()->
41
+ Luca.registry.getMetaDataFor(metaKey)
42
+
33
43
  # allow for specifying the namespace
34
44
  in: (@namespace)-> @
35
45
 
@@ -43,6 +53,7 @@ class DefineProxy
43
53
  for hook in hooks
44
54
  @properties.hooks.push(hook)
45
55
  @properties.hooks = _.uniq(@properties.hooks)
56
+ @meta("hooks", @properties.hooks)
46
57
  @
47
58
 
48
59
  includes: (includes...)->
@@ -50,16 +61,35 @@ class DefineProxy
50
61
  for include in includes
51
62
  @properties.include.push(include)
52
63
  @properties.include = _.uniq(@properties.include)
64
+ @meta("includes", @properties.include)
53
65
  @
54
66
 
55
- mixesIn: (mixins...)->
56
- _.defaults(@properties ||= {}, mixins: [])
57
- for mixin in mixins
58
- @properties.mixins.push(mixin)
59
- @properties.mixins = _.uniq(@properties.mixins)
67
+ mixesIn: (concerns...)->
68
+ _.defaults(@properties ||= {}, concerns: [])
69
+ for concern in concerns
70
+ @properties.concerns.push(concern)
71
+ @properties.concerns = _.uniq(@properties.concerns)
72
+
73
+ @meta("concerns", @properties.concerns)
60
74
  @
61
75
 
62
- defaultProperties: (properties={})->
76
+ publicConfiguration: (properties={})->
77
+ @meta("public configuration", _.keys(properties) )
78
+ _.defaults((@properties||={}), properties)
79
+
80
+ privateConfiguration: (properties={})->
81
+ @meta("private configuration", _.keys(properties) )
82
+ _.defaults((@properties||={}), properties)
83
+
84
+ publicInterface: (properties={})->
85
+ @meta("public interface", _.keys(properties) )
86
+ _.defaults((@properties||={}), properties)
87
+
88
+ privateInterface: (properties={})->
89
+ @meta("private interface", _.keys(properties) )
90
+ _.defaults((@properties||={}), properties)
91
+
92
+ definePrototype: (properties={})->
63
93
  _.defaults((@properties||={}), properties)
64
94
 
65
95
  at = if @namespaced
@@ -72,29 +102,37 @@ class DefineProxy
72
102
  eval("(window||global).#{ @namespace } = {}")
73
103
  at = Luca.util.resolve(@namespace,(window || global))
74
104
 
75
- at[@componentId] = Luca.extend(@superClassName,@componentName, @properties)
105
+ @meta("super class name", @superClassName )
106
+ @meta("display name", @componentName)
107
+
108
+ @properties.displayName = @componentName
109
+
110
+ @properties.componentMetaData = ()->
111
+ Luca.registry.getMetaDataFor(@displayName)
112
+
113
+ definition = at[@componentId] = Luca.extend(@superClassName,@componentName, @properties)
76
114
 
77
- if Luca.autoRegister is true
78
- componentType = "view" if Luca.isViewPrototype( at[@componentId] )
115
+ if Luca.config.autoRegister is true
116
+ componentType = "view" if Luca.isViewPrototype( definition )
79
117
 
80
- if Luca.isCollectionPrototype( at[@componentId] )
118
+ if Luca.isCollectionPrototype( definition )
81
119
  Luca.Collection.namespaces ||= []
82
120
  Luca.Collection.namespaces.push( @namespace )
83
121
  componentType = "collection"
84
122
 
85
- componentType = "model" if Luca.isModelPrototype( at[@componentId] )
123
+ componentType = "model" if Luca.isModelPrototype( definition )
86
124
 
87
125
  # automatically register this with the component registry
88
126
  Luca.registerComponent( _.string.underscored(@componentId), @componentName, componentType)
89
127
 
90
- at[@componentId]
128
+ definition
91
129
 
92
130
  # Aliases for the mixin definition
93
- DefineProxy::behavesAs = DefineProxy::uses = DefineProxy::mixesIn
131
+ DefineProxy::concerns = DefineProxy::behavesAs = DefineProxy::uses = DefineProxy::mixesIn
94
132
 
95
133
  # Aliases for the final call on the define proxy
96
- DefineProxy::defines = DefineProxy::defaults = DefineProxy::exports = DefineProxy::defaultProperties
97
- DefineProxy::defaultsTo = DefineProxy::enhance = DefineProxy::with = DefineProxy::defaultProperties
134
+ DefineProxy::defines = DefineProxy::defaults = DefineProxy::exports = DefineProxy::defaultProperties = DefineProxy::definePrototype
135
+ DefineProxy::defaultsTo = DefineProxy::enhance = DefineProxy::with = DefineProxy::definePrototype
98
136
 
99
137
  # The last method of the DefineProxy chain is always going to result in
100
138
  # a call to Luca.extend. Luca.extend wraps the call to Luca.View.extend,
@@ -105,8 +143,6 @@ DefineProxy::defaultsTo = DefineProxy::enhance = DefineProxy::with = DefineProxy
105
143
  Luca.extend = (superClassName, childName, properties={})->
106
144
  superClass = Luca.util.resolve( superClassName, (window || global) )
107
145
 
108
- superClass.__initializers ||= []
109
-
110
146
  unless _.isFunction(superClass?.extend)
111
147
  throw "Error defining #{ childName }. #{ superClassName } is not a valid component to extend from"
112
148
 
@@ -117,9 +153,8 @@ Luca.extend = (superClassName, childName, properties={})->
117
153
  superClass
118
154
 
119
155
  properties._super = (method, context=@, args=[])->
120
- # protect against a stack too deep error in weird cases
121
156
  # TODO: debug this better
122
-
157
+ # protect against a stack too deep error in weird cases
123
158
  @_superClass().prototype[method]?.apply(context, args)
124
159
 
125
160
  definition = superClass.extend(properties)
@@ -133,50 +168,3 @@ Luca.extend = (superClassName, childName, properties={})->
133
168
 
134
169
  definition
135
170
 
136
-
137
- Luca.mixin = (mixinName)->
138
- namespace = _( Luca.mixin.namespaces ).detect (space)->
139
- Luca.util.resolve(space)?[ mixinName ]?
140
-
141
- namespace ||= "Luca.modules"
142
-
143
- resolved = Luca.util.resolve(namespace)[ mixinName ]
144
-
145
- console.log "Could not find #{ mixinName } in ", Luca.mixin.namespaces unless resolved?
146
-
147
- resolved
148
-
149
- Luca.mixin.namespaces = [
150
- "Luca.modules"
151
- ]
152
-
153
- Luca.mixin.namespace = (namespace)->
154
- Luca.mixin.namespaces.push(namespace)
155
- Luca.mixin.namespaces = _( Luca.mixin.namespaces ).uniq()
156
-
157
- # Luca.decorate('Luca.View').with('Luca.modules.MyCustomMixin')
158
- Luca.decorate = (componentPrototype)->
159
- componentPrototype = Luca.util.resolve(componentPrototype).prototype if _.isString(componentPrototype)
160
-
161
- return with: (mixin)->
162
- mixinDefinition = Luca.mixin(mixin)
163
-
164
- mixinPrivates = _( mixinDefinition ).chain().keys().select (key)->
165
- "#{ key }".match(/^__/)
166
-
167
- sanitized = _( mixinDefinition ).omit( mixinPrivates.value() )
168
-
169
- _.extend(componentPrototype, sanitized)
170
-
171
- # When a mixin is included, we may want to do things
172
- mixinDefinition?.__included?.call(mixinDefinition, mixin)
173
-
174
- superclassMixins = componentPrototype._superClass()::mixins
175
-
176
- componentPrototype.mixins ||= []
177
- componentPrototype.mixins.push( mixin )
178
- componentPrototype.mixins = componentPrototype.mixins.concat( superclassMixins )
179
-
180
- componentPrototype.mixins = _( componentPrototype.mixins ).chain().uniq().compact().value()
181
-
182
- componentPrototype
data/src/framework.coffee CHANGED
@@ -19,11 +19,13 @@
19
19
  return fallback()
20
20
 
21
21
  _.extend Luca,
22
- VERSION: "0.9.6"
22
+ VERSION: "0.9.7"
23
23
  core: {}
24
+ collections: {}
24
25
  containers: {}
25
26
  components: {}
26
- modules: {}
27
+ models: {}
28
+ concerns: {}
27
29
  util: {}
28
30
  fields: {}
29
31
  registry:{}
@@ -33,6 +35,10 @@ _.extend Luca,
33
35
  # for triggering / binding to component definitions
34
36
  _.extend Luca, Backbone.Events
35
37
 
38
+ Luca.config.maintainStyleHierarchy = true
39
+ Luca.config.maintainClassHierarchy = true
40
+ Luca.config.autoApplyClassHierarchyAsCssClasses = true
41
+
36
42
  # When using Luca.define() should we automatically register
37
43
  # the component with the registry?
38
44
  Luca.autoRegister = Luca.config.autoRegister = true
@@ -106,34 +112,30 @@ Luca.isCollectionPrototype = (obj)->
106
112
  obj? and obj::? and !Luca.isModelPrototype(obj) and obj::reset? and obj::select? and obj::reject?
107
113
 
108
114
  Luca.inheritanceChain = (obj)->
109
- _( Luca.parentClasses(obj) ).map (className)-> Luca.util.resolve(className)
110
-
115
+ Luca.parentClasses(obj)
116
+
111
117
  Luca.parentClasses = (obj)->
112
118
  list = []
113
119
 
114
120
  if _.isString(obj)
115
121
  obj = Luca.util.resolve(obj)
116
122
 
117
- list.push( obj.displayName || obj::?.displayName || Luca.parentClass(obj) )
118
-
119
- classes = until not Luca.parentClass(obj)?
120
- obj = Luca.parentClass(obj)
121
-
122
- list = list.concat(classes)
123
+ metaData = obj.componentMetaData?()
124
+ metaData ||= obj::componentMetaData?()
123
125
 
124
- _.uniq list
125
-
126
- Luca.parentClass = (obj)->
127
- list = []
126
+ list = metaData?.classHierarchy() || [obj.displayName || obj::displayName]
128
127
 
128
+ Luca.parentClass = (obj, resolve=true)->
129
129
  if _.isString( obj )
130
130
  obj = Luca.util.resolve(obj)
131
131
 
132
- if Luca.isComponent(obj)
133
- obj.displayName
132
+ parent = obj.componentMetaData?()?.meta["super class name"]
133
+ parent ||= obj::componentMetaData?()?.meta["super class name"]
134
+
135
+ parent || obj.displayName || obj.prototype?.displayName
136
+
137
+ if resolve then Luca.util.resolve(parent) else parent
134
138
 
135
- else if Luca.isComponentPrototype(obj)
136
- obj::_superClass?()?.displayName
137
139
 
138
140
  # This is a convenience method for accessing the templates
139
141
  # available to the client side app, either the ones which ship with Luca
@@ -191,6 +193,9 @@ UnderscoreExtensions =
191
193
  # this function will ensure a function gets called at least once
192
194
  # afrer x delay. by setting defaults, we can use this on backbone
193
195
  # view definitions
196
+ #
197
+ # Note: I am not sure if this is the same as _.debounce or not. I will need
198
+ # to look into it
194
199
  idle: (code, delay=1000)->
195
200
  delay = 0 if window.DISABLE_IDLE
196
201
  handle = undefined
data/src/index.coffee CHANGED
@@ -1,10 +1,12 @@
1
1
  #= require ./util
2
2
  #= require_tree ./plugins
3
+ #= require ./concerns
3
4
  #= require ./define
4
5
 
5
- #= require_tree ./modules
6
+ #= require_tree ./concerns
6
7
 
7
8
  #= require ./core/registry
9
+ #= require ./core/meta_data
8
10
  #= require ./core/observer
9
11
  #= require ./core/view
10
12
  #= require ./core/model
@@ -1,4 +1,4 @@
1
- .luca-ui-checkbox-array {
1
+ .luca-ui-checkbox-array, .luca-checkbox-array {
2
2
  input.array-checkbox {
3
3
  display: inline-block;
4
4
  }
@@ -1,4 +1,4 @@
1
- .luca-ui-form-view-wrapper {
1
+ .luca-form-view {
2
2
  width: 100%;
3
3
  float: left;
4
4
  display: block;
@@ -7,7 +7,7 @@
7
7
  }
8
8
 
9
9
 
10
- .luca-ui-form-view {
10
+ .luca-form-view {
11
11
  .luca-ui-field {
12
12
  margin: 5px;
13
13
  padding: 5px;
@@ -19,7 +19,7 @@
19
19
  }
20
20
  }
21
21
 
22
- .luca-ui-form-view.label-align-top {
22
+ .luca-form-view.label-align-top {
23
23
  .luca-ui-field {
24
24
  label, input, select, textarea {
25
25
  margin: 5px 0px;
@@ -28,13 +28,13 @@
28
28
  }
29
29
  }
30
30
 
31
- .luca-ui-form-view.column-layout {
31
+ .luca-form-view.column-layout {
32
32
  .luca-ui-field {
33
33
  float: left;
34
34
  }
35
35
  }
36
36
 
37
- .luca-ui-form-view {
37
+ .luca-form-view {
38
38
  .toolbar-container {
39
39
  padding-right: 12px;
40
40
  }
@@ -6,7 +6,8 @@ html.luca-ui-fullscreen, body.luca-ui-fullscreen {
6
6
  .fluid-viewport-wrapper {
7
7
  padding-top:40px;
8
8
  }
9
- .luca-ui-viewport, .fullscreen-container {
9
+
10
+ .luca-viewport, .luca-ui-viewport, .fullscreen-container {
10
11
  min-height: 100%;
11
12
  height: auto !important;
12
13
  height: 100%;
@@ -1,8 +1,3 @@
1
- .luca-ui-container {}
2
-
3
- .luca-ui-card {
4
- }
5
-
6
1
  .toolbar-container {
7
2
  clear: both;
8
3
  }
@@ -1,19 +1,19 @@
1
- .luca-ui-tab-view {
1
+ .luca-tab-view {
2
2
  .luca-ui-card {
3
- .luca-ui-grid-view, .luca-ui-form-view, .luca-ui-card {
3
+ .luca-ui-grid-view, .luca-form-view, .luca-ui-card {
4
4
  overflow: hidden;
5
5
  }
6
6
  }
7
7
  }
8
8
 
9
- .luca-ui-tab-view.tabs-below, .luca-ui-tab-view.tabs-right {
9
+ .luca-tab-view.tabs-below, .luca-tab-view.tabs-right {
10
10
  .tab-selector-container {
11
11
  display: block;
12
12
  clear: both;
13
13
  }
14
14
  }
15
15
 
16
- .luca-ui-tab-view.tabs-left {
16
+ .luca-tab-view.tabs-left {
17
17
  .tab-selector-container {
18
18
  ul.nav-tabs {
19
19
  padding: 0px;
@@ -26,7 +26,7 @@
26
26
  }
27
27
  }
28
28
 
29
- .luca-ui-tab-view.tabs-right {
29
+ .luca-tab-view.tabs-right {
30
30
  .tab-selector-container {
31
31
  float: right;
32
32
  }
@@ -10,16 +10,16 @@ developmentConsole.defines
10
10
  width: 1000
11
11
 
12
12
  componentEvents:
13
- "code_input key:keyup" : "historyUp"
14
- "code_input key:keydown" : "historyDown"
15
- "code_input key:enter" : "runCommand"
13
+ "input key:keyup" : "historyUp"
14
+ "input key:keydown" : "historyDown"
15
+ "input key:enter" : "runCommand"
16
16
 
17
17
  compileOptions:
18
18
  bare: true
19
19
 
20
20
  components:[
21
21
  type: "code_mirror_field"
22
- getter: "getCodeMirror"
22
+ role: "code_mirror"
23
23
  additionalClassNames: "clearfix"
24
24
  name: "code_output"
25
25
  readOnly: true
@@ -30,7 +30,7 @@ developmentConsole.defines
30
30
  ,
31
31
  type: "text_field"
32
32
  name: "code_input"
33
- getter: "getInput"
33
+ role: "input"
34
34
  lineNumbers: false
35
35
  height: '30px'
36
36
  maxHeight: '30px'
data/src/util.coffee CHANGED
@@ -36,6 +36,16 @@ Luca.util.hook = (eventId="")->
36
36
  parts = _( parts ).map (p)-> _.string.capitalize(p)
37
37
  fn = prefix + parts.join('')
38
38
 
39
+ Luca.util.toCssClass = (componentName, exclusions...)->
40
+ parts = componentName.split('.')
41
+
42
+ transformed = for part in parts when _( exclusions ).indexOf(part) is -1
43
+ part = _.str.underscored(part)
44
+ part = part.replace(/_/g,'-')
45
+ part
46
+
47
+ transformed.join '-'
48
+
39
49
  Luca.util.isIE = ()->
40
50
  try
41
51
  Object.defineProperty({}, '', {})
@@ -118,3 +128,40 @@ Luca.util.badge = (contents="", type, baseClass="badge")->
118
128
  cssClass += " #{ baseClass }-#{ type }" if type?
119
129
  Luca.util.make("span",{class:cssClass},contents)
120
130
 
131
+ Luca.util.setupHooks = (set)->
132
+ set ||= @hooks
133
+
134
+ _(set).each (eventId)=>
135
+ fn = Luca.util.hook( eventId )
136
+
137
+ callback = ()->
138
+ @[fn]?.apply @, arguments
139
+
140
+ callback = _.once(callback) if eventId?.match(/once:/)
141
+
142
+ @on eventId, callback, @
143
+
144
+ Luca.util.setupHooksAdvanced = (set)->
145
+ set ||= @hooks
146
+
147
+ _(set).each (eventId)=>
148
+ hookSetup = @[ Luca.util.hook( eventId ) ]
149
+
150
+ unless _.isArray(hookSetup)
151
+ hookSetup = [hookSetup]
152
+
153
+ for entry in hookSetup
154
+ fn = if _.isString(entry)
155
+ @[ entry ]
156
+
157
+ if _.isFunction(entry)
158
+ fn = entry
159
+
160
+ callback = ()->
161
+ @[fn]?.apply @, arguments
162
+
163
+ if eventId?.match(/once:/)
164
+ callback = _.once(callback)
165
+
166
+ @on eventId, callback, @
167
+
@@ -18308,9 +18308,9 @@ if (!CodeMirror.mimeModes.hasOwnProperty("text/css"))
18308
18308
  historyIndex: 0,
18309
18309
  width: 1000,
18310
18310
  componentEvents: {
18311
- "code_input key:keyup": "historyUp",
18312
- "code_input key:keydown": "historyDown",
18313
- "code_input key:enter": "runCommand"
18311
+ "input key:keyup": "historyUp",
18312
+ "input key:keydown": "historyDown",
18313
+ "input key:enter": "runCommand"
18314
18314
  },
18315
18315
  compileOptions: {
18316
18316
  bare: true
@@ -18318,7 +18318,7 @@ if (!CodeMirror.mimeModes.hasOwnProperty("text/css"))
18318
18318
  components: [
18319
18319
  {
18320
18320
  type: "code_mirror_field",
18321
- getter: "getCodeMirror",
18321
+ role: "code_mirror",
18322
18322
  additionalClassNames: "clearfix",
18323
18323
  name: "code_output",
18324
18324
  readOnly: true,
@@ -18329,7 +18329,7 @@ if (!CodeMirror.mimeModes.hasOwnProperty("text/css"))
18329
18329
  }, {
18330
18330
  type: "text_field",
18331
18331
  name: "code_input",
18332
- getter: "getInput",
18332
+ role: "input",
18333
18333
  lineNumbers: false,
18334
18334
  height: '30px',
18335
18335
  maxHeight: '30px',