@@ -1,3 +1,4 @@ |
||
1 | 1 |
#= require ace/ace |
2 | 2 |
#= require ace/mode-javascript.js |
3 | 3 |
#= require ace/mode-markdown.js |
4 |
+#= require ace/mode-coffee.js |
@@ -134,17 +134,24 @@ class @AgentEditPage |
||
134 | 134 |
unless $(this).data('initialized') |
135 | 135 |
$(this).data('initialized', true) |
136 | 136 |
$source = $($(this).data('source')).hide() |
137 |
- syntax = $(this).data('syntax') |
|
138 | 137 |
editor = ace.edit(this) |
139 | 138 |
$(this).data('ace-editor', editor) |
140 | 139 |
editor.getSession().setTabSize(2) |
141 | 140 |
editor.getSession().setUseSoftTabs(true) |
142 | 141 |
editor.getSession().setUseWrapMode(false) |
143 | 142 |
editor.setTheme("ace/theme/chrome") |
144 |
- if syntax == 'javascript' |
|
145 |
- editor.getSession().setMode("ace/mode/javascript") |
|
146 |
- else |
|
147 |
- editor.getSession().setMode("ace/mode/text") |
|
143 |
+ |
|
144 |
+ setSyntax = -> |
|
145 |
+ syntax = $("[name='agent[options][language]']").val() |
|
146 |
+ if syntax == 'JavaScript' |
|
147 |
+ editor.getSession().setMode("ace/mode/javascript") |
|
148 |
+ else if syntax == 'CoffeeScript' |
|
149 |
+ editor.getSession().setMode("ace/mode/coffee") |
|
150 |
+ else |
|
151 |
+ editor.getSession().setMode("ace/mode/text") |
|
152 |
+ |
|
153 |
+ $("[name='agent[options][language]']").on 'change', setSyntax |
|
154 |
+ setSyntax() |
|
148 | 155 |
|
149 | 156 |
editor.getSession().setValue($source.val()) |
150 | 157 |
|
@@ -32,7 +32,7 @@ module FormConfigurable |
||
32 | 32 |
options = args.extract_options!.reverse_merge(roles: [], type: :string) |
33 | 33 |
|
34 | 34 |
if args.all? { |arg| arg.is_a?(Symbol) } |
35 |
- options.assert_valid_keys([:type, :roles, :values, :syntax]) |
|
35 |
+ options.assert_valid_keys([:type, :roles, :values, :ace]) |
|
36 | 36 |
end |
37 | 37 |
|
38 | 38 |
if options[:type] == :array && (options[:values].blank? || !options[:values].is_a?(Array)) |
@@ -27,7 +27,8 @@ module Agents |
||
27 | 27 |
* `this.error(message)` |
28 | 28 |
MD |
29 | 29 |
|
30 |
- form_configurable :code, type: :text, syntax: :javascript |
|
30 |
+ form_configurable :language, type: :array, values: %w[JavaScript CoffeeScript] |
|
31 |
+ form_configurable :code, type: :text, ace: true |
|
31 | 32 |
form_configurable :expected_receive_period_in_days |
32 | 33 |
form_configurable :expected_update_period_in_days |
33 | 34 |
|
@@ -85,9 +86,10 @@ module Agents |
||
85 | 86 |
JS |
86 | 87 |
|
87 | 88 |
{ |
88 |
- "code" => Utils.unindent(js_code), |
|
89 |
- 'expected_receive_period_in_days' => "2", |
|
90 |
- 'expected_update_period_in_days' => "2" |
|
89 |
+ 'code' => Utils.unindent(js_code), |
|
90 |
+ 'language' => 'JavaScript', |
|
91 |
+ 'expected_receive_period_in_days' => '2', |
|
92 |
+ 'expected_update_period_in_days' => '2' |
|
91 | 93 |
} |
92 | 94 |
end |
93 | 95 |
|
@@ -111,7 +113,11 @@ module Agents |
||
111 | 113 |
end |
112 | 114 |
end |
113 | 115 |
|
114 |
- context.eval(code) |
|
116 |
+ if (options['language'] || '').downcase == 'coffeescript' |
|
117 |
+ context.eval(CoffeeScript.compile code) |
|
118 |
+ else |
|
119 |
+ context.eval(code) |
|
120 |
+ end |
|
115 | 121 |
context.eval("Agent.#{js_function}();") |
116 | 122 |
end |
117 | 123 |
|
@@ -22,8 +22,8 @@ class FormConfigurableAgentPresenter < Decorator |
||
22 | 22 |
when :text |
23 | 23 |
@view.content_tag 'div' do |
24 | 24 |
@view.concat @view.text_area_tag("agent[options][#{attribute}]", value, html_options.merge(class: 'form-control', rows: 3)) |
25 |
- if data[:syntax].present? |
|
26 |
- @view.concat @view.content_tag('div', '', class: 'ace-editor', data: { source: "[name='agent[options][#{attribute}]']", syntax: data[:syntax] }) |
|
25 |
+ if data[:ace].present? |
|
26 |
+ @view.concat @view.content_tag('div', '', class: 'ace-editor', data: { source: "[name='agent[options][#{attribute}]']" }) |
|
27 | 27 |
end |
28 | 28 |
end |
29 | 29 |
when :boolean |