cartoset 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. data/.gitignore +11 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +12 -0
  4. data/Gemfile.lock +195 -0
  5. data/LICENSE +27 -0
  6. data/README.markdown +66 -0
  7. data/Rakefile +1 -0
  8. data/app/assets/fonts/museosans_500-webfont.eot +0 -0
  9. data/app/assets/fonts/museosans_500-webfont.svg +247 -0
  10. data/app/assets/fonts/museosans_500-webfont.ttf +0 -0
  11. data/app/assets/fonts/museosans_500-webfont.woff +0 -0
  12. data/app/assets/images/backgrounds/bottom_blue.png +0 -0
  13. data/app/assets/images/backgrounds/bubble_bottom.png +0 -0
  14. data/app/assets/images/backgrounds/bubble_top.png +0 -0
  15. data/app/assets/images/backgrounds/mid_blue.png +0 -0
  16. data/app/assets/images/backgrounds/top_blue.png +0 -0
  17. data/app/assets/images/bg_content_box.png +0 -0
  18. data/app/assets/images/bg_input.png +0 -0
  19. data/app/assets/images/globe.png +0 -0
  20. data/app/assets/images/globe_with_clouds.png +0 -0
  21. data/app/assets/images/next_steps_diagram.png +0 -0
  22. data/app/assets/images/rails.png +0 -0
  23. data/app/assets/images/select.png +0 -0
  24. data/app/assets/images/sprites/admin.png +0 -0
  25. data/app/assets/images/sprites/htmlArea.png +0 -0
  26. data/app/assets/images/sprites/setup.png +0 -0
  27. data/app/assets/javascripts/admin/dashboard/index.js +82 -0
  28. data/app/assets/javascripts/admin/features/new.js +47 -0
  29. data/app/assets/javascripts/admin/pages/new.js +44 -0
  30. data/app/assets/javascripts/features/index.js +33 -0
  31. data/app/assets/javascripts/fileuploader.js +1247 -0
  32. data/app/assets/javascripts/jHtmlArea-0.7.0.min.js +8 -0
  33. data/app/assets/javascripts/jquery.jscrollpane.min.js +11 -0
  34. data/app/assets/javascripts/jquery.mousewheel.js +78 -0
  35. data/app/assets/javascripts/jquery.scrollTo-1.4.2.js +11 -0
  36. data/app/assets/javascripts/prettyfile.js +51 -0
  37. data/app/assets/javascripts/setup/step1.js +37 -0
  38. data/app/assets/javascripts/setup/step2.js +19 -0
  39. data/app/assets/javascripts/setup/step3.js +111 -0
  40. data/app/assets/javascripts/spin.js +306 -0
  41. data/app/assets/javascripts/utils.js +6 -0
  42. data/app/assets/stylesheets/_admin.colors.scss +45 -0
  43. data/app/assets/stylesheets/_admin.vars.scss +1 -0
  44. data/app/assets/stylesheets/_main.fonts.scss +10 -0
  45. data/app/assets/stylesheets/_main.mixins.scss +7 -0
  46. data/app/assets/stylesheets/_main.vars.scss +1 -0
  47. data/app/assets/stylesheets/_mixins.css3.scss +24 -0
  48. data/app/assets/stylesheets/admin.css.scss +434 -0
  49. data/app/assets/stylesheets/admin/_mixins.scss +3 -0
  50. data/app/assets/stylesheets/admin/dashboard/index.css.scss +303 -0
  51. data/app/assets/stylesheets/admin/features/index.css.scss +4 -0
  52. data/app/assets/stylesheets/admin/pages/form.css.scss +209 -0
  53. data/app/assets/stylesheets/admin/pages/htmlArea.css.scss +13 -0
  54. data/app/assets/stylesheets/cartoset.css.scss +25 -0
  55. data/app/assets/stylesheets/features/index.css.scss +6 -0
  56. data/app/assets/stylesheets/jscrollpane.css.scss +120 -0
  57. data/app/assets/stylesheets/reset.css +44 -0
  58. data/app/assets/stylesheets/sessions/_sessions.colors.scss +9 -0
  59. data/app/assets/stylesheets/sessions/new.css.scss +94 -0
  60. data/app/assets/stylesheets/setup/_setup.colors.scss +32 -0
  61. data/app/assets/stylesheets/setup/_setup.vars.scss +0 -0
  62. data/app/assets/stylesheets/setup/index.css.scss +138 -0
  63. data/app/assets/stylesheets/setup/step0.css.scss +21 -0
  64. data/app/assets/stylesheets/setup/step1.css.scss +57 -0
  65. data/app/assets/stylesheets/setup/step2.css.scss +39 -0
  66. data/app/assets/stylesheets/setup/step3.css.scss +199 -0
  67. data/app/assets/stylesheets/setup/step4.css.scss +48 -0
  68. data/app/controllers/admin/admin_controller.rb +16 -0
  69. data/app/controllers/admin/dashboard_controller.rb +38 -0
  70. data/app/controllers/admin/features_controller.rb +39 -0
  71. data/app/controllers/admin/pages_controller.rb +46 -0
  72. data/app/controllers/admin/settings_controller.rb +14 -0
  73. data/app/controllers/features_controller.rb +16 -0
  74. data/app/controllers/home_controller.rb +7 -0
  75. data/app/controllers/prototypes_controller.rb +3 -0
  76. data/app/controllers/sessions_controller.rb +32 -0
  77. data/app/controllers/setup_controller.rb +72 -0
  78. data/app/helpers/admin/admin_helper.rb +25 -0
  79. data/app/helpers/application_helper.rb +22 -0
  80. data/app/helpers/features_helper.rb +2 -0
  81. data/app/models/feature.rb +7 -0
  82. data/app/views/admin/dashboard/index.html.erb +113 -0
  83. data/app/views/admin/features/new.html.erb +26 -0
  84. data/app/views/admin/features/show.html.erb +30 -0
  85. data/app/views/admin/pages/_form.html.erb +28 -0
  86. data/app/views/admin/pages/edit.html.erb +9 -0
  87. data/app/views/admin/pages/new.html.erb +15 -0
  88. data/app/views/admin/pages/show.html.erb +38 -0
  89. data/app/views/admin/shared/_footer.html.erb +3 -0
  90. data/app/views/admin/shared/_header.html.erb +13 -0
  91. data/app/views/features/index.html.erb +20 -0
  92. data/app/views/features/show.html.erb +8 -0
  93. data/app/views/home/index.html.erb +6 -0
  94. data/app/views/layouts/admin.html.erb +17 -0
  95. data/app/views/layouts/application.html.erb +25 -0
  96. data/app/views/layouts/setup.html.erb +16 -0
  97. data/app/views/prototypes/prueba.html.erb +33 -0
  98. data/app/views/sessions/_help.html.erb +1 -0
  99. data/app/views/sessions/new.html.erb +10 -0
  100. data/app/views/setup/_help.html.erb +1 -0
  101. data/app/views/setup/_step_indicator.erb +14 -0
  102. data/app/views/setup/features_table_data.html.erb +22 -0
  103. data/app/views/setup/step0.html.erb +10 -0
  104. data/app/views/setup/step1.html.erb +36 -0
  105. data/app/views/setup/step2.html.erb +19 -0
  106. data/app/views/setup/step3.html.erb +43 -0
  107. data/app/views/setup/step4.html.erb +31 -0
  108. data/cartoset.gemspec +26 -0
  109. data/config/cartoset_config.yml.sample +9 -0
  110. data/config/initializers/cartoset_config.rb +7 -0
  111. data/config/initializers/extra_cartoset_libs.rb +1 -0
  112. data/config/initializers/float.rb +13 -0
  113. data/config/initializers/string.rb +102 -0
  114. data/config/locales/en.cartoset.yml +132 -0
  115. data/config/routes.rb +28 -0
  116. data/lib/application_controller.rb +63 -0
  117. data/lib/cartoset.rb +9 -0
  118. data/lib/cartoset/auth/omniauth_cartodb_authentication.rb +42 -0
  119. data/lib/cartoset/auth/warden_strategies.rb +20 -0
  120. data/lib/cartoset/config.rb +104 -0
  121. data/lib/cartoset/constants.rb +5 -0
  122. data/lib/cartoset/features_data_importer.rb +20 -0
  123. data/lib/cartoset/version.rb +3 -0
  124. data/lib/engine.rb +36 -0
  125. data/lib/helpers/feature_getter_helper.rb +8 -0
  126. data/lib/tasks/.gitkeep +0 -0
  127. data/lib/tasks/cartoset.rake +72 -0
  128. data/public/404.html +26 -0
  129. data/public/422.html +26 -0
  130. data/public/500.html +26 -0
  131. data/public/favicon.ico +0 -0
  132. data/public/new_pages.html +60 -0
  133. data/public/robots.txt +5 -0
  134. data/spec/acceptance/acceptance_helper.rb +38 -0
  135. data/spec/acceptance/admin/dashboard_spec.rb +43 -0
  136. data/spec/acceptance/manage_sessions_spec.rb +16 -0
  137. data/spec/acceptance/setup_spec.rb +74 -0
  138. data/spec/acceptance/support/helpers.rb +11 -0
  139. data/spec/acceptance/support/paths.rb +13 -0
  140. data/spec/controllers/features_controller_spec.rb +5 -0
  141. data/spec/controllers/prototypes_controller_spec.rb +5 -0
  142. data/spec/controllers/sessions_controller_spec.rb +5 -0
  143. data/spec/helpers/prototypes_helper_spec.rb +15 -0
  144. data/spec/helpers/sessions_helper_spec.rb +15 -0
  145. data/spec/lib/cartoset/config_spec.rb +24 -0
  146. data/spec/models/feature_spec.rb +5 -0
  147. data/spec/spec_helper.rb +27 -0
  148. data/spec/support/factories.rb +10 -0
  149. data/spec/support/factories/features.rb +32 -0
  150. data/spec/support/string_extension.rb +13 -0
  151. metadata +316 -0
@@ -0,0 +1,46 @@
1
+ class Admin::PagesController < Admin::AdminController
2
+ before_filter :get_page, :only => [:show]
3
+
4
+ def new
5
+ pages = Cartoset::Config['pages'] || []
6
+ last_page_id = pages.sort{|x,y| y['id'] <=> x['id'] }.first['id'] rescue 0
7
+
8
+ @page = OpenStruct.new :id => last_page_id.to_i + 1,
9
+ :title => t('admin.pages.new.new_page'),
10
+ :permalink => t('admin.pages.new.permalink')
11
+ end
12
+
13
+ def create
14
+ pages = Cartoset::Config['pages'] || []
15
+ pages << params[:page]
16
+ Cartoset::Config.update :pages => pages
17
+
18
+ redirect_to admin_path
19
+ end
20
+
21
+ def edit
22
+ pages = Cartoset::Config['pages'] || []
23
+ @page = OpenStruct.new pages.select{|p| p['id'].eql?(params[:id])}.first
24
+ end
25
+
26
+ def update
27
+ pages = Cartoset::Config['pages'] || []
28
+ pages = pages.reject{|p| p['id'].eql?(params[:page][:id])}
29
+
30
+ pages << params[:page]
31
+ Cartoset::Config.update :pages => pages
32
+
33
+ redirect_to admin_path
34
+ end
35
+
36
+ def show
37
+
38
+ end
39
+
40
+ def get_page
41
+ #results = CARTODB.query("SELECT * FROM features WHERE cartodb_id = #{params[:id]}") if params[:id]
42
+ #@feature = results.rows.first if results && results.rows.present?
43
+ end
44
+ private :get_page
45
+
46
+ end
@@ -0,0 +1,14 @@
1
+ class Admin::SettingsController < Admin::AdminController
2
+ before_filter :get_setting, :only => [:show]
3
+
4
+ def show
5
+
6
+ end
7
+
8
+ def get_setting
9
+ #results = CARTODB.query("SELECT * FROM features WHERE cartodb_id = #{params[:id]}") if params[:id]
10
+ #@feature = results.rows.first if results && results.rows.present?
11
+ end
12
+ private :get_setting
13
+
14
+ end
@@ -0,0 +1,16 @@
1
+ class FeaturesController < ApplicationController
2
+ include FeatureGetterHelper
3
+
4
+ before_filter :get_feature, :only => [:show]
5
+
6
+ def index
7
+ table = CartoDB::Connection.query "SELECT cartodb_id, title, ST_Centroid(the_geom) as the_geom FROM #{features_table_name} LIMIT 20"
8
+ @features = table.rows || []
9
+ @features_json = @features.map{|f| {:title => f.title, :latitude => f.the_geom.y, :longitude => f.the_geom.x}}.to_json.html_safe
10
+ end
11
+
12
+ def show
13
+
14
+ end
15
+
16
+ end
@@ -0,0 +1,7 @@
1
+ class HomeController < ApplicationController
2
+
3
+ def index
4
+
5
+ end
6
+
7
+ end
@@ -0,0 +1,3 @@
1
+ class PrototypesController < ApplicationController
2
+ layout 'admin'
3
+ end
@@ -0,0 +1,32 @@
1
+ class SessionsController < ApplicationController
2
+
3
+ layout 'setup'
4
+
5
+ skip_before_filter :show_setup_wizard_if_uninstalled, :only => :create
6
+
7
+ def new
8
+ if logged_in?
9
+ redirect_to features_path and return
10
+ end
11
+ end
12
+
13
+ def create
14
+ env['warden'].authenticate(:cartodb_oauth)
15
+
16
+ redirect_back_or_default root_path
17
+ end
18
+
19
+ def destroy
20
+ logout
21
+ redirect_to root_path
22
+ end
23
+
24
+ def unauthenticated
25
+ respond_to do |format|
26
+ format.html do
27
+ render :action => 'new' and return
28
+ end
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,72 @@
1
+ class SetupController < ApplicationController
2
+ include FeatureGetterHelper
3
+
4
+ layout 'setup'
5
+
6
+ before_filter :redirect_to_root_if_invalid_env
7
+ skip_before_filter :show_setup_wizard_if_uninstalled
8
+
9
+ def step
10
+ step_id = params[:step_id] || 0
11
+
12
+ case step_id
13
+ when "1"
14
+ @settings = OpenStruct.new Cartoset::Config.settings
15
+ when "2"
16
+ Cartoset::Config.set_cartodb_credentials current_user
17
+ @settings = OpenStruct.new Cartoset::Config.settings
18
+ when "3"
19
+ Cartoset::Config.update params[:settings]
20
+
21
+ result = CartoDB::Connection.tables || []
22
+ @tables = result.tables
23
+ when "4"
24
+ @table = CartoDB::Connection.table params[:features_table]
25
+ Cartoset::Config.update :features_table => @table.name
26
+ end
27
+
28
+ render "step#{step_id}"
29
+ end
30
+
31
+ def cartodb
32
+ Cartoset::Config.update params[:settings]
33
+
34
+ Cartoset::Config.setup_cartodb
35
+
36
+ session[:return_to] = setup_path(:step_id => 2)
37
+
38
+ redirect_to '/auth/cartodb' and return
39
+ end
40
+
41
+ def features_table_data
42
+ table_name = params[:table_name]
43
+ if table_name
44
+ @table = CartoDB::Connection.table table_name
45
+ records = CartoDB::Connection.records table_name, {}
46
+ @rows = records.rows if records
47
+ end
48
+ render :layout => false
49
+ end
50
+
51
+ def create_features_table
52
+ table = {}
53
+
54
+ if params[:qqfile] && request.body.present?
55
+ table = FeaturesDataImporter.start request.body
56
+ end
57
+
58
+ render :json => table.to_json
59
+ end
60
+
61
+ def redirect_to_root_if_invalid_env
62
+ unless Rails.env.development? || Rails.env.test? || logged_in?
63
+ if application_installed? && !logged_in?
64
+ session[:return_to] = setup_path
65
+ redirect_to login_required_path
66
+ else
67
+ redirect_to root_path
68
+ end
69
+ end
70
+ end
71
+ private :redirect_to_root_if_invalid_env
72
+ end
@@ -0,0 +1,25 @@
1
+ module Admin::AdminHelper
2
+ def build_field_for_column(column, value = nil)
3
+
4
+ case column[:type]
5
+ when 'boolean'
6
+ ul_content = ''
7
+ selected = "selected"
8
+ value = (value.blank?)? 'null' : value.to_s
9
+
10
+ ul_content << '<li><a class="radiobutton '+((value=="true")? selected:'')+'" href="#true">true</a></li>'
11
+ ul_content << '<li><a class="radiobutton '+((value=="false")? selected:'')+'" href="#false">false</a></li>'
12
+ ul_content << '<li><a class="radiobutton '+((value=="null")? selected:'')+'" href="#null">null</a></li>'
13
+ ul_content << radio_button_tag(column[:name], true, (value=="true"), :class=>"hidden")
14
+ ul_content << radio_button_tag(column[:name], false, (value=="false"), :class=>"hidden")
15
+ ul_content << radio_button_tag(column[:name], "null", (value=="null"), :class=>"hidden")
16
+ content_tag :ul, raw(ul_content)
17
+ when 'number'
18
+ number_field_tag column[:name], value, :id => column[:name], :class => column[:type]
19
+ when 'date'
20
+ text_field_tag(column[:name], value, :readonly => "readonly", :id => column[:name], :class => column[:type]) + content_tag(:div, date_select(column[:name], :name), :class => 'date show')
21
+ else
22
+ text_field_tag column[:name], value, :id => column[:name], :class => column[:type]
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,22 @@
1
+ module ApplicationHelper
2
+ def paginate(rows, current_page, total_count, per_page = 10, params = {})
3
+
4
+ if per_page.is_a?(Hash)
5
+ params = per_page
6
+ per_page = 10
7
+ end
8
+
9
+ window = 2
10
+ total_pages = (total_count.to_f / per_page.to_f).ceil
11
+ last_page = total_pages - 1
12
+
13
+ left = (current_page - 1).downto(1).to_a.first(window).sort
14
+ right = (current_page + 1).upto(total_pages).to_a.first(window)
15
+
16
+ pages = 1.upto(current_page - 1).to_a.map{|p| left.include?(p) || p == 1 ? p : '...'}.uniq + [current_page] + (current_page + 1).upto(last_page).to_a.map{|p| right.include?(p) || p == last_page ? p : '...'}.uniq
17
+
18
+ content_tag :div, :class => 'pagination' do
19
+ raw pages.map{|page| page.eql?('...') ? content_tag(:span, page) : link_to(page, admin_path(params.merge({:page => page})), :class => page == current_page ? 'current' : nil)}.join(' ')
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,2 @@
1
+ module FeaturesHelper
2
+ end
@@ -0,0 +1,7 @@
1
+ class Feature < CartoDB::Model::Base
2
+ cartodb_table_name Cartoset::Config['features_table']
3
+
4
+ def self.non_common_fields
5
+ columns.reject{|c| Cartoset::Constants::COMMON_FEATURES_FIELDS.include?(c[:name])}
6
+ end
7
+ end
@@ -0,0 +1,113 @@
1
+ <% content_for :javascripts do %>
2
+ <%= javascript_include_tag 'jquery.min.js', 'jquery.scrollTo-1.4.2.js', 'admin/dashboard/index.js' %>
3
+ <% end %>
4
+
5
+ <% content_for :stylesheets do %>
6
+ <%= stylesheet_link_tag 'admin/dashboard/index.css' %>
7
+ <% end %>
8
+
9
+ <div id="features_list" class="table">
10
+ <span class="title"><%= t('.your_features') %></span>
11
+ <div id="search">
12
+ <%= form_for :search, :url => admin_path, :html => {:method => :get} do |f|%>
13
+ <%= f.label 'q', t('.search_label') %>
14
+ <%= f.text_field 'q' %>
15
+ <%= f.submit t('.search') %>
16
+ <% end %>
17
+ <%= link_to content_tag(:span, t('.scroll_right')), '#', :id => 'scroll_right' %>
18
+ <%= link_to content_tag(:span, t('.scroll_left')), '#', :id => 'scroll_left' %>
19
+ </div>
20
+ <div id="features_table">
21
+ <table class="list">
22
+ <tr class="header">
23
+ <th><div class="id">id.</div></th>
24
+ <% @features_columns.each do |column| %>
25
+ <th><div class="<%= column[:type] %>"><%= column[:name] %></div></th>
26
+ <% end %>
27
+ </tr>
28
+ <% @features.each do |feature| %>
29
+ <tr class="item <%= cycle('odd', 'even') %>">
30
+ <td class="cartodb_id"><%= link_to feature.cartodb_id, admin_feature_path(feature.cartodb_id) %></td>
31
+ <% @features_columns.each do |column| %>
32
+ <td class="<%= column.first %>"><%= feature.send(column[:name]).to_s.truncate(28) %></td>
33
+ <% end %>
34
+ </tr>
35
+ <% end %>
36
+ </table>
37
+ </div>
38
+ <%= link_to t('.create_feature'), new_admin_feature_path, :id => 'create_feature', :class => 'main_action' %>
39
+ <%= link_to t('.edit_in_cartodb'), "#{@cartodb_host}/tables/#{@table_id}", :id => 'edit_in_cartodb', :class => 'alternate_action' %>
40
+ <%= raw paginate @features, @page, @features_count, params %>
41
+ </div>
42
+
43
+ <div id="pages_list" class="table">
44
+ <div class="title"><%= t('.your_pages') %></div>
45
+ <div class="pages_list_container">
46
+ <ul>
47
+ <% @pages.each do |page| %>
48
+ <li>
49
+ <div>
50
+ <p><%= page['title'] %></p>
51
+ <p class="link">
52
+ <%= link_to t('.edit_this_page'), edit_admin_page_path(page['id'].to_i) %>
53
+ </p>
54
+ </div>
55
+ </li>
56
+ <% end %>
57
+ </ul>
58
+ </div>
59
+ <div class="pages_footer">
60
+ <%= link_to t('.create_new_page'), new_admin_page_path, :class => 'main_action' %>
61
+ </div>
62
+ </div>
63
+
64
+ <% if false %>
65
+ <div id="settings_list" class="table">
66
+ <span class="title">Settings</span>
67
+ <div class="settings_list_container">
68
+ <ul>
69
+ <li class="odd" id="1">
70
+ <div class="name">
71
+ <p class="setting_name">services.google.tracking_id</p>
72
+ <p class="setting_description">Integration ID with Google Analytics</p>
73
+ </div>
74
+ <div class="setting_value"><a href="">UA-1234567-1</a></div>
75
+ <div class="edit_value">
76
+ <input type="text" value="UA-1234567-1"/>
77
+ <input type="hidden" value="UA-1234567-1"/>
78
+ <a href="" class="action_input">Save</a>
79
+ <span class="cancel_value">or <a href="">cancel</a></span>
80
+ </div>
81
+ </li>
82
+ <li class="even" id="2">
83
+ <div class="name">
84
+ <p class="setting_name">services.google.tracking_id</p>
85
+ <p class="setting_description">Integration ID with Google Analytics</p>
86
+ </div>
87
+ <div class="setting_value"><a href="">UA-1234567-2</a></div>
88
+ <div class="edit_value">
89
+ <input type="text" value="UA-1234567-2"/>
90
+ <input type="hidden" value="UA-1234567-2"/>
91
+ <a href="" class="action_input">Save</a>
92
+ <span class="cancel_value">or <a href="">cancel</a></span>
93
+ </div>
94
+ </li>
95
+ <li class="odd last" id="3">
96
+ <div class="name">
97
+ <p class="setting_name">services.google.tracking_id</p>
98
+ <p class="setting_description">Integration ID with Google Analytics</p>
99
+ </div>
100
+ <div class="setting_value"><a href="">UA-1234567-3</a></div>
101
+ <div class="edit_value">
102
+ <input type="text" value="UA-1234567-3"/>
103
+ <input type="hidden" value="UA-1234567-3"/>
104
+ <a href="" class="action_input">Save</a>
105
+ <span class="cancel_value">or <a href="">cancel</a></span>
106
+ </div>
107
+ </li>
108
+ </ul>
109
+ </div>
110
+ <div class="settings_footer"></div>
111
+ </div>
112
+ <% end %>
113
+
@@ -0,0 +1,26 @@
1
+ <% content_for :javascripts do %>
2
+ <%= javascript_include_tag 'jquery.min.js', 'prettyfile.js', 'admin/features/new.js' %>
3
+ <% end %>
4
+
5
+ <div class="content_box table">
6
+ <h1><%= t('.new_feature') %></h1>
7
+
8
+ <%= form_tag admin_features_path do %>
9
+ <% @features_fields.each do |column| %>
10
+ <%= label_tag column[:name], column[:name], :class => 'field_label' %>
11
+ <%= build_field_for_column(column) %>
12
+ <% end %>
13
+
14
+ <!-- <span class="file_content">
15
+ <%= file_field :post, :attached, :accept => 'text/html', :id=>"file_input" %>
16
+ </span> -->
17
+
18
+ <div>
19
+ <%= submit_tag t('.save_changes'), :class => 'main_action' %>
20
+ </div>
21
+ <% end %>
22
+
23
+ <div class="side_bar">
24
+ <%= link_to (content_tag(:span) + t('.sidebar.back_dashboard')), admin_dashboard_index_path, :class => 'back' %>
25
+ </div>
26
+ </div>
@@ -0,0 +1,30 @@
1
+ <% content_for :javascripts do %>
2
+ <%= javascript_include_tag 'jquery.min', 'rails' %>
3
+ <% end %>
4
+
5
+ <div class="content_box table">
6
+ <div class="left">
7
+ <h1><%= t('.feature_id', :id => params[:id]) %></h1>
8
+
9
+ <%= form_tag admin_feature_path(params[:id]), :method => :put do %>
10
+ <% @features_fields.each do |column| %>
11
+ <label for="<%= column[:name] %>" class="field_label"><%= column[:name].upcase %></label>
12
+ <%= build_field_for_column column, @feature[column[:name].to_sym] %>
13
+ <% end %>
14
+
15
+ <div>
16
+ <%= submit_tag t('.save_changes'), :class => 'main_action' %>
17
+ </div>
18
+ <% end %>
19
+
20
+ </div>
21
+
22
+ <div class="side_bar">
23
+ <a href="/admin/" class="back"><%= t('.sidebar.back_dashboard') %></a>
24
+ <div class="delete">
25
+ <span><%= t('.sidebar.delete.title') %></span>
26
+ <p><%= t('.sidebar.delete.hint') %></p>
27
+ <%= link_to t('.sidebar.delete.link'), admin_feature_path(@feature.cartodb_id), :confirm => t('.sidebar.delete.confirm'), :method => :delete %>
28
+ </div>
29
+ </div>
30
+ </div>
@@ -0,0 +1,28 @@
1
+ <% content_for :javascripts do %>
2
+ <script type="text/javascript" charset="utf-8">
3
+ var texts = <%= t('.help').to_json.html_safe %>;
4
+ </script>
5
+ <%= javascript_include_tag 'jquery.min.js', 'jHtmlArea-0.7.0.min.js', 'admin/pages/new.js' %>
6
+ <% end %>
7
+
8
+ <% content_for :stylesheets do %>
9
+ <%= stylesheet_link_tag 'admin/pages/form.css' %>
10
+ <% end %>
11
+
12
+ <%= form_for @page, :as => :page, :url => url, :html => { :method => method } do |form| %>
13
+ <%= form.hidden_field :id %>
14
+ <%= form.label :title, raw(t('.title') + content_tag(:strong, '*')), :class => :field_label %>
15
+ <%= form.text_field :title, :class => :string %>
16
+
17
+ <%= form.label :body, raw(t('.body') + content_tag(:strong, '*')), :class => :field_label %>
18
+ <%= form.text_area :body, :class => :string %>
19
+
20
+ <%= form.label :permalink, raw(t('.permalink') + content_tag(:strong, '*')), :class => 'field_label permalink' %>
21
+ <%= form.text_field :permalink, :class => :string %>
22
+
23
+ <span class="submit">
24
+ <%= form.submit t(".#{action}.save"), :class => 'main_action' %>
25
+ <%= form.check_box :visible, :class => :checkbox %>
26
+ <%= form.label :visible, t('.visible'), :class => 'field_label visible' %>
27
+ </span>
28
+ <% end %>