alchemy_cms 2.4.beta2 → 2.4.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. data/.gitignore +2 -1
  2. data/.travis.yml +3 -1
  3. data/.yardopts +1 -1
  4. data/Gemfile +2 -1
  5. data/alchemy_cms.gemspec +18 -17
  6. data/app/assets/images/alchemy/ajax_loader.gif +0 -0
  7. data/app/assets/images/alchemy/alchemy-logo.png +0 -0
  8. data/app/assets/images/alchemy/icons.png +0 -0
  9. data/app/assets/images/alchemy/image_loader.gif +0 -0
  10. data/app/assets/images/alchemy/placeholder.png +0 -0
  11. data/app/assets/images/alchemy/shading.png +0 -0
  12. data/app/assets/images/alchemy/swfupload/browse_button.png +0 -0
  13. data/app/assets/images/alchemy/tabs.gif +0 -0
  14. data/app/assets/images/alchemy/ui-icons_666666_256x240.png +0 -0
  15. data/app/assets/images/sassy-ie-overlay.png +0 -0
  16. data/app/assets/javascripts/alchemy/alchemy.base.js +1 -3
  17. data/app/assets/javascripts/alchemy/alchemy.browser.js.coffee +28 -0
  18. data/app/assets/javascripts/alchemy/alchemy.jquery_loader.js +2 -2
  19. data/app/assets/javascripts/alchemy/alchemy.js +2 -0
  20. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +79 -47
  21. data/app/assets/javascripts/alchemy/alchemy.menubar.js +12 -4
  22. data/app/assets/javascripts/alchemy/alchemy.onload.js.coffee +1 -1
  23. data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +103 -0
  24. data/app/assets/javascripts/alchemy/alchemy.swf_upload.js +1 -1
  25. data/app/assets/javascripts/alchemy/alchemy.uploader.js +4 -6
  26. data/app/assets/javascripts/alchemy/preview.js +1 -0
  27. data/app/assets/stylesheets/alchemy/admin.css.scss +25 -0
  28. data/app/assets/stylesheets/alchemy/{archive.css.scss → archive.scss} +0 -2
  29. data/app/assets/stylesheets/alchemy/{base.css.scss → base.scss} +1 -57
  30. data/app/assets/stylesheets/alchemy/{custom.css → custom.scss} +0 -0
  31. data/app/assets/stylesheets/alchemy/{dashboard.css.scss → dashboard.scss} +0 -2
  32. data/app/assets/stylesheets/alchemy/defaults.scss +5 -0
  33. data/app/assets/stylesheets/alchemy/{elements.css.scss → elements.scss} +24 -37
  34. data/app/assets/stylesheets/alchemy/{errors.css.scss → errors.scss} +0 -2
  35. data/app/assets/stylesheets/alchemy/{flash.css.scss → flash.scss} +0 -2
  36. data/app/assets/stylesheets/alchemy/{form_elements.css.scss → form_elements.scss} +39 -12
  37. data/app/assets/stylesheets/alchemy/{frame.css.scss → frame.scss} +0 -2
  38. data/app/assets/stylesheets/alchemy/{icons.css.scss → icons.scss} +20 -2
  39. data/app/assets/stylesheets/alchemy/{jquery-ui.alchemy.css.scss → jquery-ui.scss} +6 -3
  40. data/app/assets/stylesheets/alchemy/{login.css.scss → login.scss} +3 -3
  41. data/app/assets/stylesheets/alchemy/menubar.css.scss +0 -1
  42. data/app/assets/stylesheets/alchemy/{_defaults.scss → mixins.scss} +2 -39
  43. data/app/assets/stylesheets/alchemy/{modules.css.scss → modules.scss} +4 -2
  44. data/app/assets/stylesheets/alchemy/notices.scss +51 -0
  45. data/app/assets/stylesheets/alchemy/{pagination.css.scss → pagination.scss} +0 -2
  46. data/app/assets/stylesheets/alchemy/{print.css → print.css.scss} +3 -3
  47. data/app/assets/stylesheets/alchemy/search.scss +63 -0
  48. data/app/assets/stylesheets/alchemy/{sitemap.css.scss → sitemap.scss} +1 -2
  49. data/app/assets/stylesheets/alchemy/{tables.css.scss → tables.scss} +16 -3
  50. data/app/assets/stylesheets/alchemy/tinymce_content.css.scss +3 -0
  51. data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +3 -0
  52. data/app/assets/stylesheets/alchemy/{upload.css.scss → upload.scss} +0 -2
  53. data/app/assets/stylesheets/alchemy/variables.scss +33 -0
  54. data/app/controllers/alchemy/admin/elements_controller.rb +1 -2
  55. data/app/controllers/alchemy/admin/tags_controller.rb +64 -0
  56. data/app/controllers/alchemy/base_controller.rb +8 -23
  57. data/app/controllers/alchemy/pages_controller.rb +5 -18
  58. data/app/helpers/alchemy/admin/base_helper.rb +1 -1
  59. data/app/helpers/alchemy/admin/elements_helper.rb +1 -0
  60. data/app/helpers/alchemy/elements_block_helper.rb +162 -0
  61. data/app/helpers/alchemy/elements_helper.rb +41 -3
  62. data/app/helpers/alchemy/pages_helper.rb +2 -1
  63. data/app/models/alchemy/attachment.rb +2 -1
  64. data/app/models/alchemy/element.rb +13 -10
  65. data/app/models/alchemy/essence_link.rb +11 -0
  66. data/app/models/alchemy/essence_picture.rb +15 -4
  67. data/app/models/alchemy/page.rb +23 -25
  68. data/app/models/alchemy/picture.rb +2 -2
  69. data/app/models/alchemy/tag.rb +16 -0
  70. data/app/models/alchemy/user.rb +3 -1
  71. data/app/views/alchemy/admin/attachments/_attachment.html.erb +12 -12
  72. data/app/views/alchemy/admin/attachments/edit.html.erb +10 -4
  73. data/app/views/alchemy/admin/elements/_element.html.erb +10 -13
  74. data/app/views/alchemy/admin/elements/_element_foot.html.erb +1 -1
  75. data/app/views/alchemy/admin/essence_files/edit.html.erb +12 -76
  76. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +9 -4
  77. data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +1 -1
  78. data/app/views/alchemy/admin/layoutpages/index.html.erb +1 -1
  79. data/app/views/alchemy/admin/pages/_external_link.html.erb +9 -4
  80. data/app/views/alchemy/admin/pages/configure.html.erb +22 -12
  81. data/app/views/alchemy/admin/pages/edit.html.erb +40 -40
  82. data/app/views/alchemy/admin/partials/_autocomplete_tag_list.html.erb +9 -0
  83. data/app/views/alchemy/admin/pictures/edit.html.erb +1 -1
  84. data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +11 -2
  85. data/app/views/alchemy/admin/tags/_radio_tag.html.erb +6 -0
  86. data/app/views/alchemy/admin/tags/_tag.html.erb +29 -0
  87. data/app/views/alchemy/admin/tags/edit.html.erb +41 -0
  88. data/app/views/alchemy/admin/tags/index.html.erb +46 -0
  89. data/app/views/alchemy/admin/tags/new.html.erb +16 -0
  90. data/app/views/alchemy/admin/users/_table.html.erb +18 -10
  91. data/app/views/alchemy/admin/users/_user.html.erb +2 -1
  92. data/app/views/alchemy/admin/users/index.html.erb +2 -1
  93. data/app/views/alchemy/elements/_article_view.html.erb +1 -1
  94. data/app/views/alchemy/essences/_essence_link_editor.html.erb +23 -0
  95. data/app/views/alchemy/essences/_essence_link_view.html.erb +0 -0
  96. data/app/views/alchemy/essences/_essence_picture_tools.html.erb +1 -1
  97. data/app/views/alchemy/essences/_essence_text_editor.html.erb +1 -9
  98. data/app/views/alchemy/essences/_linkable_essence_tools.html.erb +19 -0
  99. data/app/views/layouts/alchemy/admin.html.erb +1 -1
  100. data/config/alchemy/elements.yml +2 -0
  101. data/config/alchemy/modules.yml +12 -0
  102. data/config/alchemy/page_layouts.yml +2 -0
  103. data/config/authorization_rules.rb +2 -0
  104. data/config/locales/alchemy.de.yml +36 -5
  105. data/config/locales/alchemy.en.yml +3 -0
  106. data/config/routes.rb +6 -4
  107. data/db/migrate/20121026100815_alchemy_two_point_three.rb +0 -36
  108. data/db/migrate/20121113115120_create_alchemy_essence_links.rb +13 -0
  109. data/db/migrate/20121115100736_add_cached_tag_list_to_elements_pages_and_users.rb +7 -0
  110. data/db/migrate/20121116140636_add_cached_tag_list_to_alchemy_attachments.rb +5 -0
  111. data/db/migrate/20121116141016_change_alchemy_pictures_tag_list_column.rb +9 -0
  112. data/lib/alchemy/engine.rb +1 -1
  113. data/lib/alchemy/resource.rb +1 -1
  114. data/lib/alchemy/resources_helper.rb +1 -1
  115. data/lib/alchemy/upgrader.rb +17 -0
  116. data/lib/alchemy/version.rb +1 -1
  117. data/lib/alchemy_cms.rb +1 -0
  118. data/lib/rails/generators/alchemy/base.rb +41 -0
  119. data/lib/rails/generators/alchemy/deploy_script/templates/deploy.rb.tt +10 -3
  120. data/lib/rails/generators/alchemy/elements/elements_generator.rb +6 -14
  121. data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +8 -6
  122. data/lib/rails/generators/alchemy/elements/templates/editor.html.haml +13 -0
  123. data/lib/rails/generators/alchemy/elements/templates/editor.html.slim +13 -0
  124. data/lib/rails/generators/alchemy/elements/templates/view.html.erb +4 -4
  125. data/lib/rails/generators/alchemy/elements/templates/view.html.haml +15 -0
  126. data/lib/rails/generators/alchemy/elements/templates/view.html.slim +15 -0
  127. data/lib/rails/generators/alchemy/essence/essence_generator.rb +1 -1
  128. data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +2 -3
  129. data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +4 -13
  130. data/lib/rails/generators/alchemy/page_layouts/templates/layout.html.haml +1 -0
  131. data/lib/rails/generators/alchemy/page_layouts/templates/layout.html.slim +1 -0
  132. data/spec/controllers/pages_controller_spec.rb +41 -34
  133. data/spec/dummy/app/views/layouts/application.html.erb +51 -0
  134. data/spec/dummy/db/migrate/20121026100815_alchemy_two_point_three.rb +0 -36
  135. data/spec/dummy/db/migrate/20121113115120_create_alchemy_essence_links.rb +13 -0
  136. data/spec/dummy/db/migrate/20121115100736_add_cached_tag_list_to_elements_pages_and_users.rb +7 -0
  137. data/spec/dummy/db/migrate/20121116140636_add_cached_tag_list_to_alchemy_attachments.rb +5 -0
  138. data/spec/dummy/db/migrate/20121116141016_change_alchemy_pictures_tag_list_column.rb +9 -0
  139. data/spec/dummy/db/schema.rb +24 -45
  140. data/spec/helpers/elements_block_helper_spec.rb +135 -0
  141. data/spec/helpers/elements_helper_spec.rb +43 -5
  142. data/spec/integration/pages_controller_spec.rb +22 -18
  143. data/spec/integration/translation_integration_spec.rb +0 -15
  144. data/spec/models/element_spec.rb +44 -36
  145. data/spec/models/essence_picture_spec.rb +22 -6
  146. data/spec/models/page_spec.rb +28 -0
  147. data/spec/spec_helper.rb +8 -3
  148. data/spec/support/ci/install_phantomjs +6 -0
  149. metadata +82 -40
  150. data/app/assets/images/alchemy/gui/navi-tab.png +0 -0
  151. data/app/assets/images/alchemy/gui/shading_90.png +0 -0
  152. data/app/assets/images/alchemy/jquery-sb/select_arrow.gif +0 -0
  153. data/app/assets/images/alchemy/jquery-sb/select_arrow_bg.gif +0 -0
  154. data/app/assets/images/alchemy/jquery-sb/select_arrow_bg_hover.gif +0 -0
  155. data/app/assets/javascripts/alchemy/alchemy.preview.js +0 -98
  156. data/app/assets/stylesheets/alchemy/alchemy.css +0 -21
  157. data/app/controllers/alchemy/admin/essence_audios_controller.rb +0 -12
  158. data/app/controllers/alchemy/admin/essence_flashes_controller.rb +0 -12
  159. data/app/controllers/alchemy/admin/essence_videos_controller.rb +0 -12
  160. data/app/models/alchemy/essence_audio.rb +0 -14
  161. data/app/models/alchemy/essence_flash.rb +0 -12
  162. data/app/models/alchemy/essence_video.rb +0 -20
  163. data/app/views/alchemy/essences/_essence_audio_editor.html.erb +0 -1
  164. data/app/views/alchemy/essences/_essence_audio_view.html.erb +0 -33
  165. data/app/views/alchemy/essences/_essence_flash_editor.html.erb +0 -1
  166. data/app/views/alchemy/essences/_essence_flash_view.html.erb +0 -26
  167. data/app/views/alchemy/essences/_essence_video_editor.html.erb +0 -1
  168. data/app/views/alchemy/essences/_essence_video_view.html.erb +0 -35
@@ -7,33 +7,33 @@
7
7
  <%= f.select('page_layout', @page_layouts, {}, {:class => 'alchemy_selectbox long'}) %>
8
8
  </td>
9
9
  </tr>
10
- <%- unless @page.layoutpage -%>
10
+ <% unless @page.layoutpage %>
11
11
  <tr>
12
12
  <td class="label"><%= t("page_status") %>: </td>
13
13
  <td class="checkbox long">
14
- <%= f.check_box :public -%>
14
+ <%= f.check_box :public %>
15
15
  <%= f.label :public %><br/>
16
- <%= f.check_box :visible -%>
16
+ <%= f.check_box :visible %>
17
17
  <%= f.label :visible %><br/>
18
- <%= f.check_box :restricted -%>
18
+ <%= f.check_box :restricted %>
19
19
  <%= f.label :restricted %>
20
- <%- if configuration(:sitemap)[:show_flag] -%><br/>
21
- <%= f.check_box :sitemap -%>
20
+ <% if configuration(:sitemap)[:show_flag] %><br/>
21
+ <%= f.check_box :sitemap %>
22
22
  <%= f.label :sitemap %>
23
- <%- end -%>
23
+ <% end %>
24
24
  </td>
25
25
  </tr>
26
- <%- end -%>
27
- <%- unless @page.layoutpage -%>
26
+ <% end %>
27
+ <% unless @page.layoutpage %>
28
28
  <tr>
29
29
  <td colspan="2" class="heading"><%= t("names") %></td>
30
30
  </tr>
31
- <%- end -%>
31
+ <% end %>
32
32
  <tr>
33
33
  <td class="label"><%= f.label "name" %>: </td>
34
34
  <td class="input"><%= f.text_field "name", :size => 31, :class => "thin_border long", :autofocus => true %></td>
35
35
  </tr>
36
- <%- unless @page.layoutpage -%>
36
+ <% unless @page.layoutpage %>
37
37
  <tr>
38
38
  <td class="label"><%= f.label "urlname" %>: </td>
39
39
  <td class="input"><%= f.text_field "urlname", :size => 31, :class => "thin_border long" %></td>
@@ -64,12 +64,22 @@
64
64
  <%= f.text_area "meta_keywords", :class => "thin_border long" %><br/>
65
65
  </td>
66
66
  </tr>
67
- <%- end -%>
67
+ <% end %>
68
+ <% if @page.taggable? %>
69
+ <tr>
70
+ <td class="label"><%= f.label :tag_list %>*:&nbsp;</td>
71
+ <td class="input">
72
+ <%= render 'alchemy/admin/partials/autocomplete_tag_list', :f => f, :object => @page %>
73
+ </td>
74
+ </tr>
75
+ <% end %>
68
76
  <tr>
69
77
  <td colspan="2" class="submit">
78
+ <% if !@page.layoutpage || @page.taggable? %>
70
79
  <p class="foot_note">
71
80
  *<%= t('pages.update.comma_seperated') %>
72
81
  </p>
82
+ <% end %>
73
83
  <%= f.button t("save"), :class => 'button' %>
74
84
  </td>
75
85
  </tr>
@@ -1,11 +1,11 @@
1
- <% content_for(:title) { @page.name } -%>
1
+ <% content_for(:title) { @page.name } %>
2
2
 
3
- <%- content_for(:subnav_additions) do -%>
3
+ <% content_for(:subnav_additions) do %>
4
4
  <label><%= t('Active Pages') %> &raquo;</label>
5
- <%- @locked_pages.each do |page| -%>
6
- <%- if @page == page -%>
5
+ <% @locked_pages.each do |page| %>
6
+ <% if @page == page %>
7
7
  <%= render :partial => 'page_status' %>
8
- <%- else -%>
8
+ <% else %>
9
9
  <div class="subnavi_tab wide" id="locked_page_<%= page.id %>">
10
10
  <%= link_to alchemy.edit_admin_page_path(page) do %>
11
11
  <span class="page_name" title="<%= page.name %>">
@@ -18,11 +18,11 @@
18
18
  </button>
19
19
  <% end %>
20
20
  </div>
21
- <%- end -%>
22
- <%- end -%>
23
- <%- end -%>
21
+ <% end %>
22
+ <% end %>
23
+ <% end %>
24
24
 
25
- <%- content_for(:toolbar) do -%>
25
+ <% content_for(:toolbar) do %>
26
26
  <div id="toolbar_buttons">
27
27
  <div class="button_with_label">
28
28
  <%= form_tag alchemy.unlock_admin_page_path(@page, :redirect_to => @layoutpage ? alchemy.admin_layoutpages_path : alchemy.admin_pages_path), :id => 'unlock_page_form' do %>
@@ -32,7 +32,7 @@
32
32
  <label><%= t("unlock_page") %></label>
33
33
  <% end %>
34
34
  </div>
35
- <%- unless @page.layoutpage? -%>
35
+ <% unless @page.layoutpage? %>
36
36
  <div class="button_with_label">
37
37
  <%= form_tag alchemy.visit_admin_page_path(@page), :id => 'visit_page_form' do %>
38
38
  <button class="icon_button" title="<%= t('Visit page') %>">
@@ -41,30 +41,30 @@
41
41
  <label><%= t("Visit page") %></label>
42
42
  <% end %>
43
43
  </div>
44
- <%- end -%>
44
+ <% end %>
45
45
  <div class="button_with_label">
46
46
  <%= link_to_overlay_window(
47
47
  render_icon('settings'),
48
48
  alchemy.configure_admin_page_path(@page),
49
49
  {
50
50
  :title => t('edit_page_properties'),
51
- :size => @page.layoutpage? ? '340x150' : '410x660'
51
+ :size => @page.layoutpage? ? '410x150' : '410x650'
52
52
  },
53
53
  :class => :icon_button,
54
54
  :title => t('edit_page_properties')
55
- ) -%>
55
+ ) %>
56
56
  <label><%= t('page_properties') %></label>
57
57
  </div>
58
- <%- if configuration(:cache_pages) && !@page.layoutpage? -%>
58
+ <% if configuration(:cache_pages) && !@page.layoutpage? %>
59
59
  <div class="button_with_label">
60
- <%= form_tag alchemy.publish_admin_page_path(@page), :id => 'publish_page_form' do -%>
60
+ <%= form_tag alchemy.publish_admin_page_path(@page), :id => 'publish_page_form' do %>
61
61
  <button class="icon_button" title="<%= t('explain_publishing') %>">
62
62
  <%= render_icon('publish') %>
63
63
  </button>
64
64
  <label><%= t("Publish page") %></label>
65
- <% end -%>
65
+ <% end %>
66
66
  </div>
67
- <%- end -%>
67
+ <% end %>
68
68
  </div>
69
69
  <div id="toolbar_buttons_right">
70
70
  <div class="button_with_label" id="show_preview_window">
@@ -84,34 +84,34 @@
84
84
  <label><%= t('Show Elements Window') %></label>
85
85
  </div>
86
86
  </div>
87
- <%- end -%>
87
+ <% end %>
88
88
 
89
- <%- content_for :javascripts do -%>
89
+ <% content_for :javascripts do %>
90
90
  <%= tinymce_javascript_tags %>
91
91
  <script type="text/javascript" charset="utf-8">
92
92
 
93
93
  Alchemy.openPreviewWindow = function() {
94
- Alchemy.PreviewWindow.init('<%= admin_page_url(@page) %>', '<%= t("Page Preview") -%>');
94
+ Alchemy.PreviewWindow.init('<%= admin_page_url(@page) %>', '<%= t("Page Preview") %>');
95
95
  }
96
96
 
97
97
  Alchemy.openElementsWindow = function() {
98
- Alchemy.ElementsWindow.init('<%= alchemy.admin_elements_path(:page_id => @page.id) -%>', {
98
+ Alchemy.ElementsWindow.init('<%= alchemy.admin_elements_path(:page_id => @page.id) %>', {
99
99
  texts: {
100
- title: '<%= t("Elements") -%>',
101
- dirtyTitle: '<%= t("Warning!") -%>',
102
- dirtyMessage: '<%= t(:element_dirty_close_window_notice) -%>',
103
- okLabel: '<%= t("Yes") -%>',
104
- cancelLabel: '<%= t("No") -%>'
100
+ title: '<%= t("Elements") %>',
101
+ dirtyTitle: '<%= t("Warning!") %>',
102
+ dirtyMessage: '<%= t(:element_dirty_close_window_notice) %>',
103
+ okLabel: '<%= t("Yes") %>',
104
+ cancelLabel: '<%= t("No") %>'
105
105
  },
106
106
  toolbarButtons: [
107
107
  {
108
- title: '<%= t("New Element") -%>',
109
- label: '<%= t("New Element") -%>',
108
+ title: '<%= t("New Element") %>',
109
+ label: '<%= t("New Element") %>',
110
110
  iconClass: 'new_element',
111
111
  onClick: function() {
112
112
  Alchemy.openWindow(
113
- '<%= alchemy.new_admin_element_path(:page_id => @page.id) -%>',
114
- '<%= t("New Element") -%>',
113
+ '<%= alchemy.new_admin_element_path(:page_id => @page.id) %>',
114
+ '<%= t("New Element") %>',
115
115
  320,
116
116
  120,
117
117
  false,
@@ -121,14 +121,14 @@
121
121
  }
122
122
  },
123
123
  {
124
- title: '<%= t("Clipboard") -%>',
125
- label: '<%= t("Show clipboard") -%>',
126
- iconClass: 'clipboard<%= clipboard_empty?("elements") ? "" : " full" -%>',
124
+ title: '<%= t("Clipboard") %>',
125
+ label: '<%= t("Show clipboard") %>',
126
+ iconClass: 'clipboard<%= clipboard_empty?("elements") ? "" : " full" %>',
127
127
  buttonId: 'clipboard_button',
128
128
  onClick: function() {
129
129
  Alchemy.openWindow(
130
- '<%= alchemy.admin_clipboard_path(:remarkable_type => "elements") -%>',
131
- '<%= t("Clipboard") -%>',
130
+ '<%= alchemy.admin_clipboard_path(:remarkable_type => "elements") %>',
131
+ '<%= t("Clipboard") %>',
132
132
  380,
133
133
  270,
134
134
  false,
@@ -138,12 +138,12 @@
138
138
  }
139
139
  },
140
140
  {
141
- title: '<%= t("Show trash") -%>',
142
- label: '<%= t("Show trash") -%>',
143
- iconClass: 'trash<%= trash_empty?("elements") ? "" : " full" -%>',
141
+ title: '<%= t("Show trash") %>',
142
+ label: '<%= t("Show trash") %>',
143
+ iconClass: 'trash<%= trash_empty?("elements") ? "" : " full" %>',
144
144
  buttonId: 'element_trash_button',
145
145
  onClick: function() {
146
- Alchemy.openTrashWindow(<%= @page.id %>, '<%= t("Trash") -%>');
146
+ Alchemy.openTrashWindow(<%= @page.id %>, '<%= t("Trash") %>');
147
147
  }
148
148
  }
149
149
  ]
@@ -181,4 +181,4 @@
181
181
  });
182
182
 
183
183
  </script>
184
- <%- end -%>
184
+ <% end %>
@@ -0,0 +1,9 @@
1
+ <div class="autocomplete_tag_list">
2
+ <%= f.label :tag_list, render_icon(:tag_label), :for => "autocomplete_tag_list_#{object.id}", :title => t(:tag_list) %>
3
+ <%= f.autocomplete_field(
4
+ :tag_list,
5
+ alchemy.autocomplete_admin_tags_path,
6
+ :data => {:delimiter => ', '},
7
+ :id => "autocomplete_tag_list_#{object.id}"
8
+ ) %>
9
+ </div>
@@ -13,7 +13,7 @@
13
13
  <tr>
14
14
  <td class="label"><%= f.label :tag_list %>*</td>
15
15
  <td class="input">
16
- <%= f.text_field :tag_list, :class => "thin_border long" %>
16
+ <%= render 'alchemy/admin/partials/autocomplete_tag_list', :f => f, :object => @picture %>
17
17
  </td>
18
18
  </tr>
19
19
  <tr>
@@ -22,9 +22,18 @@
22
22
  </td>
23
23
  </tr>
24
24
  <tr>
25
- <td class="label"><%= label_tag :pictures_tag_list, t('Tags') %></td>
25
+ <td class="label"><%= label_tag :pictures_tag_list, t('Tags') + '*' %></td>
26
26
  <td class="input">
27
- <%= text_field_tag :pictures_tag_list, @pictures.collect(&:tag_list).flatten.uniq.join(', '), :class => "thin_border long" %>
27
+ <div class="autocomplete_tag_list">
28
+ <%= label_tag :tag_list, render_icon(:tag_label), :for => "autocomplete_tag_list", :title => t(:tag_list) %>
29
+ <%= autocomplete_field_tag(
30
+ :pictures_tag_list,
31
+ @pictures.collect(&:tag_list).flatten.uniq.join(', '),
32
+ alchemy.autocomplete_admin_tags_path,
33
+ :data => {:delimiter => ', '},
34
+ :id => "autocomplete_tag_list"
35
+ ) %>
36
+ </div>
28
37
  </td>
29
38
  </tr>
30
39
  <tr>
@@ -0,0 +1,6 @@
1
+ <li class="<%= cycle('even', 'odd') %>" name="<%= radio_tag.name.downcase %>">
2
+ <%= radio_button_tag name + "[merge_to]", radio_tag.id, false, :id => radio_tag.name + "_tag_list" %>
3
+ <label for="<%= radio_tag.name + "_tag_list" %>">
4
+ <%= radio_tag.name %>
5
+ </label>
6
+ </li>
@@ -0,0 +1,29 @@
1
+ <tr class="<%= cycle('even', 'odd') %>">
2
+ <td class="icon"><%= render_icon :tag %></td>
3
+ <td class="name"><%= tag.name %></td>
4
+ <td class="count">
5
+ <%= tag.taggings.collect(&:taggable).collect { |t| t.class.model_name.human }.uniq.join(', ') %>
6
+ </td>
7
+ <td class="count"><%= tag.taggings.count %></td>
8
+ <td class="tools">
9
+ <%= link_to_overlay_window(
10
+ "",
11
+ edit_admin_tag_path(tag),
12
+ {
13
+ :title => t(:edit_tag),
14
+ :size => '380x385'
15
+ },
16
+ {
17
+ :title => t(:edit_tag),
18
+ :class => 'icon tag_edit'
19
+ }
20
+ ) %>
21
+ <%= link_to_confirmation_window(
22
+ '',
23
+ t(:do_you_really_want_to_delete_this_tag?),
24
+ admin_tag_path(tag),
25
+ :title => t(:delete_tag),
26
+ :class => "icon tag_delete"
27
+ ) %>
28
+ </td>
29
+ </tr>
@@ -0,0 +1,41 @@
1
+ <h2 class="with_padding"><%= t(:you_can_rename_this_tag) %></h2>
2
+ <%= form_for @tag, :as => :tag, :url => {:controller => :tags, :action => "update", :id => @tag.id}, :html => {:method => :put}, :remote => true do |f| %>
3
+ <table border="0" cellspacing="4" cellpadding="4" style="width: 100%">
4
+ <tr>
5
+ <td class="label medium">
6
+ <%= f.label :name, "Name" %>
7
+ </td>
8
+ <td class="input">
9
+ <%= f.text_field :name, :class => "thin_border very_long" %>
10
+ </td>
11
+ </tr>
12
+ <tr>
13
+ <td colspan="2" class="submit">
14
+ <%= f.button t(:rename), :class => "button" %>
15
+ </td>
16
+ </tr>
17
+ </table>
18
+ <% end %>
19
+ <% if @tags.any? -%>
20
+ <h2 class="with_padding"><%= t(:or_replace_it_with_an_existing_tag) %>:</h2>
21
+ <%= form_for @tag, :as => :tag, :url => {:controller => :tags, :action => "update", :id => @tag.id, :replace => true}, :html => {:method => :put, :style => "clear: both"}, :remote => true do |f| %>
22
+ <table border="0" cellspacing="4" cellpadding="4" style="width: 100%">
23
+ <tr>
24
+ <td class="label medium">
25
+ <label>Tags</label>
26
+ </td>
27
+ <td class="input" id="tags_tag_list">
28
+ <%= js_filter_field :onkeyup => "Alchemy.ListFilter('#tag_list li')" %>
29
+ <ul id="tag_list" class="tags">
30
+ <%= render :partial => "radio_tag", :collection => @tags, :locals => {:name => "tag"} %>
31
+ </ul>
32
+ </td>
33
+ </tr>
34
+ <tr>
35
+ <td colspan="2" class="submit">
36
+ <%= f.button t(:replace), :class => "button", :id => "tag_replace_button" %>
37
+ </td>
38
+ </tr>
39
+ </table>
40
+ <% end %>
41
+ <% end %>
@@ -0,0 +1,46 @@
1
+ <% content_for :toolbar do %>
2
+ <div id="toolbar_buttons">
3
+ <div class="button_with_label">
4
+ <%= link_to_overlay_window(
5
+ content_tag('span', '', :class => 'icon tag_add'),
6
+ new_admin_tag_path,
7
+ {
8
+ :title => t('New Tag'),
9
+ :size => '310x210'
10
+ },
11
+ :title => t('New Tag'),
12
+ :class => 'icon_button'
13
+ ) %><br />
14
+ <label><%= t('New Tag') %></label>
15
+ </div>
16
+ </div>
17
+ <%= render :partial => 'alchemy/admin/partials/search_form' %>
18
+ <% end %>
19
+
20
+ <div id="archive_all">
21
+ <% if @tags.any? %>
22
+
23
+ <table class="list" id="tag_list">
24
+ <tr class="legend">
25
+ <th class="icon"></th>
26
+ <th class="name"><%= ActsAsTaggableOn::Tag.human_attribute_name(:name) %></th>
27
+ <th class="count"><%= ActsAsTaggableOn::Tag.human_attribute_name(:taggings_types) %></th>
28
+ <th class="count"><%= ActsAsTaggableOn::Tag.human_attribute_name(:taggings_count) %></th>
29
+ <th class="tools"></th>
30
+ </tr>
31
+ <%= render :partial => 'tag', :collection => @tags %>
32
+ </table>
33
+
34
+ <%= render 'alchemy/admin/partials/pagination_links', :items => @tags %>
35
+
36
+ <% else %>
37
+
38
+ <%= render_message do %>
39
+ <h2><%= t('No Tags found') %></h2>
40
+ <% if params[:query].blank? %>
41
+ <p><%= t(:tags_get_created_if_used_the_first_time) %></p>
42
+ <% end %>
43
+ <% end %>
44
+
45
+ <% end %>
46
+ </div>
@@ -0,0 +1,16 @@
1
+ <%= form_for [:admin, @tag], :as => :tag, :url => admin_tags_path, :html => {:id => 'new_tag'}, :remote => true do |form| %>
2
+ <div class="info">
3
+ <%= render_icon('info') %>
4
+ <%= t(:tags_get_created_if_used_the_first_time) %>
5
+ </div>
6
+ <div id="errors" style="display: none"></div>
7
+ <table>
8
+ <tr>
9
+ <td class="label"><%= form.label :name %></td>
10
+ <td class="input"><%= form.text_field :name, :class => 'input_field' %></td>
11
+ </tr>
12
+ <tr>
13
+ <td colspan="2" class="submit"><%= form.button t('save'), :name => nil, :class => 'button' %></td>
14
+ </tr>
15
+ </table>
16
+ <% end %>
@@ -1,47 +1,55 @@
1
1
  <table>
2
2
  <tr>
3
3
  <td class="label"><%= f.label 'gender' %></td>
4
- <td class="select"><%= f.select 'gender', options_for_select(@user_genders, @user.gender), {:prompt => t('Please choose')}, :class => 'alchemy_selectbox', :autofocus => true -%></td>
4
+ <td class="select"><%= f.select 'gender', options_for_select(@user_genders, @user.gender), {:prompt => t('Please choose')}, :class => 'alchemy_selectbox long', :autofocus => true -%></td>
5
5
  </tr>
6
6
  <tr>
7
7
  <td class="label"><%= f.label 'firstname' %></td>
8
- <td class="input"><%= f.text_field 'firstname', :class => 'thin_border' %></td>
8
+ <td class="input"><%= f.text_field 'firstname', :class => 'thin_border long' %></td>
9
9
  </tr>
10
10
  <tr>
11
11
  <td class="label"><%= f.label 'lastname' %></td>
12
- <td class="input"><%= f.text_field 'lastname', :class => 'thin_border' %></td>
12
+ <td class="input"><%= f.text_field 'lastname', :class => 'thin_border long' %></td>
13
13
  </tr>
14
14
  <tr>
15
15
  <td class="label mandatory"><%= f.label 'login' %></td>
16
- <td class="input"><%= f.text_field 'login', :class => 'thin_border', :required => true %></td>
16
+ <td class="input"><%= f.text_field 'login', :class => 'thin_border long', :required => true, :autofocus => true %></td>
17
17
  </tr>
18
18
  <tr>
19
19
  <td class="label mandatory"><%= f.label 'email' %></td>
20
- <td class="input"><%= f.email_field 'email', :class => 'thin_border', :required => true %></td>
20
+ <td class="input"><%= f.email_field 'email', :class => 'thin_border long', :required => true %></td>
21
21
  </tr>
22
22
  <tr>
23
23
  <td class="label"><%= f.label 'language' %></td>
24
- <td class="select"><%= f.select 'language', translations_for_select, {}, {:class => 'alchemy_selectbox'} %></td>
24
+ <td class="select"><%= f.select 'language', translations_for_select, {}, {:class => 'alchemy_selectbox long'} %></td>
25
25
  </tr>
26
26
  <tr>
27
27
  <td class="label mandatory"><%= f.label 'password' %></td>
28
- <td class="input mandatory"><%= f.password_field 'password', :class => 'thin_border', :autocomplete => "off", :required => action_name == 'signup' %></td>
28
+ <td class="input mandatory"><%= f.password_field 'password', :class => 'thin_border long', :autocomplete => "off", :required => action_name == 'signup' %></td>
29
29
  </tr>
30
30
  <tr>
31
31
  <td class="label mandatory"><%= f.label 'password_confirmation' %></td>
32
- <td class="input"><%= f.password_field 'password_confirmation', :class => 'thin_border', :autocomplete => "off", :required => action_name == 'signup' %></td>
32
+ <td class="input"><%= f.password_field 'password_confirmation', :class => 'thin_border long', :autocomplete => "off", :required => action_name == 'signup' %></td>
33
33
  </tr>
34
34
  <% if action_name == 'signup' %>
35
35
  <%= f.hidden_field :role %>
36
36
  <% elsif permitted_to? :update_role %>
37
37
  <tr>
38
38
  <td class="label"><%= f.label 'role' %></td>
39
- <td class="select"><%= f.select :role, options_for_select(@user_roles, @user.role), {}, {:class => 'alchemy_selectbox'} %></td>
39
+ <td class="select"><%= f.select :role, options_for_select(@user_roles, @user.role), {}, {:class => 'alchemy_selectbox long'} %></td>
40
+ </tr>
41
+ <% end %>
42
+ <% unless action_name == 'signup' %>
43
+ <tr>
44
+ <td class="label"><%= f.label :tag_list %></td>
45
+ <td class="input">
46
+ <%= render 'alchemy/admin/partials/autocomplete_tag_list', :f => f, :object => @user %>
47
+ </td>
40
48
  </tr>
41
49
  <% end %>
42
50
  <tr>
43
51
  <td>&nbsp;</td>
44
- <td class="checkbox">
52
+ <td class="checkbox long">
45
53
  <%= check_box_tag('send_credentials', true, @user.new_record?) %>
46
54
  <%= label_tag('send_credentials', t('Send email with credentials')) %>
47
55
  </td>