@@ -24,6 +24,7 @@ gem 'coffee-rails', '~> 3.2.1' |
||
24 | 24 |
gem 'uglifier', '>= 1.0.3' |
25 | 25 |
gem 'select2-rails' |
26 | 26 |
gem 'jquery-rails' |
27 |
+gem 'ace-rails-ap' |
|
27 | 28 |
|
28 | 29 |
gem 'geokit-rails3' |
29 | 30 |
gem 'kramdown' |
@@ -1,6 +1,7 @@ |
||
1 | 1 |
GEM |
2 | 2 |
remote: https://rubygems.org/ |
3 | 3 |
specs: |
4 |
+ ace-rails-ap (2.0.1) |
|
4 | 5 |
actionmailer (3.2.13) |
5 | 6 |
actionpack (= 3.2.13) |
6 | 7 |
mail (~> 2.5.3) |
@@ -272,6 +273,7 @@ PLATFORMS |
||
272 | 273 |
ruby |
273 | 274 |
|
274 | 275 |
DEPENDENCIES |
276 |
+ ace-rails-ap |
|
275 | 277 |
better_errors |
276 | 278 |
binding_of_caller |
277 | 279 |
bootstrap-kaminari-views |
@@ -0,0 +1,27 @@ |
||
1 |
+#= require ace/ace |
|
2 |
+#= require ace/mode-javascript.js |
|
3 |
+#= require ace/mode-markdown.js |
|
4 |
+#= require_self |
|
5 |
+ |
|
6 |
+$ -> |
|
7 |
+ editor = ace.edit("ace-credential-value") |
|
8 |
+ editor.getSession().setTabSize(2) |
|
9 |
+ editor.getSession().setUseSoftTabs(true) |
|
10 |
+ editor.getSession().setUseWrapMode(false) |
|
11 |
+ editor.setTheme("ace/theme/chrome") |
|
12 |
+ |
|
13 |
+ setMode = -> |
|
14 |
+ mode = $("#user_credential_mode").val() |
|
15 |
+ if mode == 'java_script' |
|
16 |
+ editor.getSession().setMode("ace/mode/javascript") |
|
17 |
+ else |
|
18 |
+ editor.getSession().setMode("ace/mode/text") |
|
19 |
+ |
|
20 |
+ setMode() |
|
21 |
+ $("#user_credential_mode").on 'change', setMode |
|
22 |
+ |
|
23 |
+ $textarea = $('#user_credential_credential_value').hide() |
|
24 |
+ editor.getSession().setValue($textarea.val()) |
|
25 |
+ |
|
26 |
+ $textarea.closest('form').on 'submit', -> |
|
27 |
+ $textarea.val(editor.getSession().getValue()) |
@@ -126,3 +126,11 @@ span.not-applicable:after { |
||
126 | 126 |
#show-tabs li a.recent-errors { |
127 | 127 |
font-weight: bold; |
128 | 128 |
} |
129 |
+ |
|
130 |
+// Credentials |
|
131 |
+ |
|
132 |
+#ace-credential-value { |
|
133 |
+ position: relative; |
|
134 |
+ width: 940px; |
|
135 |
+ height: 400px; |
|
136 |
+} |
@@ -1,13 +1,17 @@ |
||
1 | 1 |
class UserCredential < ActiveRecord::Base |
2 |
- attr_accessible :credential_name, :credential_value |
|
2 |
+ MODES = %w[text java_script] |
|
3 |
+ |
|
4 |
+ attr_accessible :credential_name, :credential_value, :mode |
|
3 | 5 |
|
4 | 6 |
belongs_to :user |
5 | 7 |
|
6 | 8 |
validates_presence_of :credential_name |
7 | 9 |
validates_presence_of :credential_value |
10 |
+ validates_inclusion_of :mode, :in => MODES |
|
8 | 11 |
validates_presence_of :user_id |
9 | 12 |
validates_uniqueness_of :credential_name, :scope => :user_id |
10 | 13 |
|
14 |
+ before_validation :default_mode_to_text |
|
11 | 15 |
before_save :trim_fields |
12 | 16 |
|
13 | 17 |
protected |
@@ -16,4 +20,8 @@ class UserCredential < ActiveRecord::Base |
||
16 | 20 |
credential_name.strip! |
17 | 21 |
credential_value.strip! |
18 | 22 |
end |
23 |
+ |
|
24 |
+ def default_mode_to_text |
|
25 |
+ self.mode = 'text' unless mode.present? |
|
26 |
+ end |
|
19 | 27 |
end |
@@ -44,7 +44,6 @@ |
||
44 | 44 |
</div> |
45 | 45 |
</div> |
46 | 46 |
|
47 |
- |
|
48 | 47 |
<div class='event-related-region' data-can-create-events="<%= @agent.can_create_events? %>"> |
49 | 48 |
<div class="control-group"> |
50 | 49 |
<%= f.label :keep_events_for, "Keep events", :class => 'control-label' %> |
@@ -18,9 +18,17 @@ |
||
18 | 18 |
</div> |
19 | 19 |
|
20 | 20 |
<div class="control-group"> |
21 |
+ <%= f.label :mode, :class => 'control-label' %> |
|
22 |
+ <div class="controls"> |
|
23 |
+ <%= f.select :mode, options_for_select(UserCredential::MODES.map {|s| [s.classify, s] }, @user_credential.mode), {}, :class => 'span4' %> |
|
24 |
+ </div> |
|
25 |
+ </div> |
|
26 |
+ |
|
27 |
+ <div class="control-group"> |
|
21 | 28 |
<%= f.label :credential_value, :class => 'control-label' %> |
22 | 29 |
<div class="controls"> |
23 | 30 |
<%= f.text_area :credential_value, :class => 'span8', :rows => 10 %> |
31 |
+ <div id="ace-credential-value"></div> |
|
24 | 32 |
</div> |
25 | 33 |
</div> |
26 | 34 |
|
@@ -28,3 +36,5 @@ |
||
28 | 36 |
<%= f.submit "Save Credential", :class => "btn btn-primary" %> |
29 | 37 |
</div> |
30 | 38 |
<% end %> |
39 |
+ |
|
40 |
+<%= javascript_include_tag "user_credentials" %> |
@@ -48,7 +48,7 @@ Huginn::Application.configure do |
||
48 | 48 |
end |
49 | 49 |
|
50 | 50 |
# Precompile additional assets (application.js.coffee.erb, application.css, and all non-JS/CSS are already added) |
51 |
- config.assets.precompile += %w( graphing.js ) |
|
51 |
+ config.assets.precompile += %w( graphing.js user_credentials.js ) |
|
52 | 52 |
|
53 | 53 |
# Enable threaded mode |
54 | 54 |
# config.threadsafe! |
@@ -0,0 +1,5 @@ |
||
1 |
+class AddModeToUserCredentials < ActiveRecord::Migration |
|
2 |
+ def change |
|
3 |
+ add_column :user_credentials, :mode, :string, :default => 'text', :null => false |
|
4 |
+ end |
|
5 |
+end |
@@ -11,7 +11,7 @@ |
||
11 | 11 |
# |
12 | 12 |
# It's strongly recommended to check this file into your version control system. |
13 | 13 |
|
14 |
-ActiveRecord::Schema.define(:version => 20140127164931) do |
|
14 |
+ActiveRecord::Schema.define(:version => 20140210062747) do |
|
15 | 15 |
|
16 | 16 |
create_table "agent_logs", :force => true do |t| |
17 | 17 |
t.integer "agent_id", :null => false |
@@ -96,11 +96,12 @@ ActiveRecord::Schema.define(:version => 20140127164931) do |
||
96 | 96 |
add_index "links", ["source_id", "receiver_id"], :name => "index_links_on_source_id_and_receiver_id" |
97 | 97 |
|
98 | 98 |
create_table "user_credentials", :force => true do |t| |
99 |
- t.integer "user_id", :null => false |
|
100 |
- t.string "credential_name", :null => false |
|
101 |
- t.text "credential_value", :null => false |
|
102 |
- t.datetime "created_at", :null => false |
|
103 |
- t.datetime "updated_at", :null => false |
|
99 |
+ t.integer "user_id", :null => false |
|
100 |
+ t.string "credential_name", :null => false |
|
101 |
+ t.text "credential_value", :null => false |
|
102 |
+ t.datetime "created_at", :null => false |
|
103 |
+ t.datetime "updated_at", :null => false |
|
104 |
+ t.string "mode", :default => "text", :null => false |
|
104 | 105 |
end |
105 | 106 |
|
106 | 107 |
add_index "user_credentials", ["user_id", "credential_name"], :name => "index_user_credentials_on_user_id_and_credential_name", :unique => true |
@@ -2,15 +2,19 @@ bob_aws_key: |
||
2 | 2 |
user: bob |
3 | 3 |
credential_name: aws_key |
4 | 4 |
credential_value: 2222222222-bob |
5 |
+ mode: text |
|
5 | 6 |
bob_aws_secret: |
6 | 7 |
user: bob |
7 | 8 |
credential_name: aws_secret |
8 | 9 |
credential_value: 1111111111-bob |
10 |
+ mode: text |
|
9 | 11 |
jane_aws_key: |
10 | 12 |
user: jane |
11 | 13 |
credential_name: aws_key |
12 | 14 |
credential_value: 2222222222-jane |
15 |
+ mode: text |
|
13 | 16 |
jane_aws_secret: |
14 | 17 |
user: jane |
15 | 18 |
credential_name: aws_secret |
16 | 19 |
credential_value: 1111111111-jabe |
20 |
+ mode: text |