fullstack-admin 0.1.35 → 0.1.36

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.35
1
+ 0.1.36
@@ -0,0 +1,31 @@
1
+ $(document).ready ->
2
+ $(".file-input-choose-file-button").live "click", ->
3
+ self = $(@)
4
+
5
+ if self.hasClass("disabled")
6
+ return 0
7
+
8
+ file_input = self.find("~ input[type='file']")
9
+ file_name_span = self.closest(".input").find(".file-input-attachment-filename")
10
+
11
+ file_input.change ->
12
+ file_input_val = file_input.val()
13
+ file_name = file_input_val.substring(file_input_val.lastIndexOf('/') + 1).substring(file_input_val.lastIndexOf('\\') + 1)
14
+ file_name_span.text(file_name)
15
+
16
+ file_input.click()
17
+
18
+ $(".file-input-delete-attachment-button").live "click", ->
19
+
20
+ btn = $(@)
21
+ input_container = btn.closest(".input")
22
+
23
+ if btn.hasClass("active")
24
+ input_container.find(".btn:not(.file-input-delete-attachment-button)").addClass("disabled")
25
+ btn.siblings(".file-input-attachment-filename").css({"text-decoration": "line-through", opacity: 0.5})
26
+ btn.find("~ .file-input-delete-attachment-checkbox").attr('checked', true);
27
+ else
28
+ input_container.find(".btn:not(.file-input-delete-attachment-button)").removeClass("disabled")
29
+ btn.siblings(".file-input-attachment-filename").css({"text-decoration": "none", opacity: 1})
30
+ btn.find("~ .file-input-delete-attachment-checkbox").attr('checked', false);
31
+
@@ -11,6 +11,8 @@
11
11
  #= require jquery.validate
12
12
  #= require ckeditor/init
13
13
  #= require support/nested_forms
14
+ #= require support/file_input
15
+
14
16
  ## require jquery.form
15
17
 
16
18
 
@@ -17,6 +17,21 @@
17
17
  padding-bottom: 180px;
18
18
  }
19
19
 
20
+ .sidenav > li:first-child {
21
+ -webkit-border-radius: 6px 6px 0 0;
22
+ -moz-border-radius: 6px 6px 0 0;
23
+ border-radius: 6px 6px 0 0;
24
+ }
25
+ .sidenav > li {
26
+ display: block;
27
+ margin: 0 0 -1px;
28
+ padding: 8px 14px;
29
+ border: 1px solid #E5E5E5;
30
+ margin-left: -15px;
31
+ margin-right: -15px;
32
+ }
33
+
34
+
20
35
  .thumbnails > li {
21
36
  float: left;
22
37
  margin-left: 0 !important;
@@ -215,4 +215,18 @@ select,
215
215
  .boolean > .input label {
216
216
  display: inline-block;
217
217
  margin-left: 10px;
218
+ }
219
+
220
+ ul.choices-group {
221
+ list-style-type: none;
222
+ }
223
+
224
+ .radio {
225
+ padding-left: 0;
226
+ }
227
+
228
+ .file-input-attachment-filename {
229
+ width: 200px;
230
+ display: inline-block;
231
+ overflow: hidden;
218
232
  }
@@ -26,7 +26,8 @@ class Admin::BaseController < ApplicationController
26
26
  :collection_name,
27
27
  :current_resource_class,
28
28
  :current_resource,
29
- :current_collection
29
+ :current_collection,
30
+ :title_column
30
31
 
31
32
 
32
33
  def current_resource_class
@@ -53,4 +54,10 @@ class Admin::BaseController < ApplicationController
53
54
  instance_variable_get("@#{collection_name}")
54
55
  end
55
56
 
57
+ def title_column(model)
58
+ @_title_columns ||= {}
59
+ @_title_columns[model] ||= ( model.column_names.map{ |c| c.to_s } & %W(title name label browser_title seo_title seo_name key claim email) ).first
60
+ end
61
+
62
+
56
63
  end
@@ -55,16 +55,7 @@ module AdminFormHelper
55
55
  except_attributes.map! {|a| :"#{a}"}
56
56
 
57
57
  columns = model.schema.hierarchy_field_names.map! {|a| :"#{a}"}
58
-
59
- if only_attributes.any?
60
- columns = columns.select {|k| only_attributes.include?(k)}
61
- elsif except_attributes.any?
62
- columns = columns.delete_if {|k| except_attributes.include?(k)}
63
- end
64
-
65
-
66
- buff = ""
67
-
58
+
68
59
  attachment_definitions = (model.attachment_definitions || {}).keys
69
60
  attachment_columns = attachment_definitions.map {|a|
70
61
  [:"#{a}_file_name", :"#{a}_file_size", :"#{a}_content_type", :"#{a}_updated_at"]
@@ -72,8 +63,15 @@ module AdminFormHelper
72
63
 
73
64
  columns -= attachment_columns
74
65
  columns += attachment_definitions
75
-
76
66
 
67
+ if only_attributes.any?
68
+ columns = columns.select {|k| only_attributes.include?(k)}
69
+ elsif except_attributes.any?
70
+ columns = columns.delete_if {|k| except_attributes.include?(k)}
71
+ end
72
+
73
+ buff = ""
74
+
77
75
  columns.each {|k|
78
76
  k = "#{k}".gsub(/_ids?$/, "").gsub(/_type$/, "").to_sym
79
77
  assoc = model.reflect_on_association(k)
@@ -42,12 +42,6 @@ module ScaffoldHelper
42
42
  model.columns_hash["position"]
43
43
  end
44
44
 
45
- def title_column(model)
46
- @_title_columns ||= {}
47
- @_title_columns[model] ||= ( model.column_names.map{ |c| c.to_s } & %W(title name label browser_title seo_title seo_name key claim email) ).first
48
- end
49
-
50
-
51
45
  def skip_filter!
52
46
  @skip_filter = true
53
47
  end
@@ -0,0 +1,67 @@
1
+ class FileInput < FormtasticBootstrap::Inputs::FileInput
2
+ def to_html
3
+ generic_input_wrapping do
4
+ attachment = object.send(method)
5
+
6
+ if !attachment.exists?
7
+ <<-eos
8
+ <span class="file-input-attachment-filename">
9
+ <i class="icon icon-file"></i> (#{I18n.t('fullstack.admin.no_file_uploaded', :default => "No file uploaded")})
10
+ </span>
11
+
12
+ <a class="btn btn-small file-input-choose-file-button" href="javascript:void(0)">
13
+ <i class="icon icon-upload"></i>
14
+ #{I18n.t('fullstack.admin.choose_a_file', :default => "Choose a file")}
15
+ </a>
16
+ eos
17
+
18
+ else
19
+ preview_menu = ""
20
+
21
+ preview_menu << template.content_tag(:li, template.link_to(I18n.t('fullstack.admin.original', :default => "Original"),
22
+ attachment.url(:original),
23
+ :target => "_blank"
24
+
25
+ ))
26
+
27
+ preview_menu << template.content_tag(:li, "", :class => :divider) if !attachment.styles.empty?
28
+
29
+ attachment.styles.map do |name, decl|
30
+ preview_menu << template.content_tag(:li, template.link_to(name.to_s.humanize, attachment.url(name), :target => "_blank"))
31
+ end
32
+
33
+ <<-eos
34
+
35
+ <span class="file-input-attachment-filename"><i class="icon icon-file"></i> #{template.send(:html_escape, attachment.url.split("/").last.split("?").first)} </span>
36
+ <a class="btn btn-small file-input-choose-file-button" href="javascript:void(0)">
37
+ <i class="icon icon-upload"></i>
38
+ #{I18n.t('fullstack.admin.change', :default => "Change")}
39
+ </a>
40
+
41
+ <span class="dropdown">
42
+ <a class="btn dropdown-toggle btn-small" data-toggle="dropdown" href="#">
43
+ <i class="icon icon-eye-open"></i>
44
+ #{I18n.t('fullstack.admin.preview', :default => "Preview")}
45
+ <span class="caret"></span>
46
+ </a>
47
+ <ul class="dropdown-menu">
48
+ #{preview_menu}
49
+ </ul>
50
+
51
+ </span>
52
+
53
+ #{template.button(
54
+ I18n.t('fullstack.admin.delete', :default => "Delete"),
55
+ "javascript:void(0)",
56
+ :type => :danger, :class => "file-input-delete-attachment-button btn-small", :"data-toggle" => :button
57
+ )}
58
+
59
+ eos
60
+
61
+ end.html_safe << builder.file_field(method, :style => "display:none;") << (builder.check_box("#{method}_delete", :class => "file-input-delete-attachment-checkbox", :style => "display:none;") if attachment.exists?)
62
+ end
63
+ end
64
+ end
65
+
66
+
67
+
@@ -22,7 +22,7 @@
22
22
 
23
23
  </table>
24
24
 
25
- <script type="text/html" charset="utf-8" class="resource-fields-template">
25
+ <script type="text/html" class="resource-fields-template">
26
26
  <%= f.admin_fields_for(association, association_class.new, :child_index => "___index___") do |f| %>
27
27
  <%= render :partial => "nested_form", :locals => {:index => "___index___", :f => f, :resource_name => resource_name, :association => association} %>
28
28
  <% end %>
@@ -36,7 +36,13 @@
36
36
  </h3>
37
37
  </div>
38
38
  <div class="modal-body">
39
- <%= f.resource_inputs %>
39
+
40
+ <% begin %>
41
+ <%= render :partial => "admin/#{association}/associated_fields", :locals => {:f => f} %>
42
+ <% rescue ActionView::MissingTemplate %>
43
+ <%= f.resource_inputs %>
44
+ <% end %>
45
+
40
46
  <%= f.hidden_field(:_destroy, :class => "destroy-associated-resource") %>
41
47
  <% if positionable?(f.object) %>
42
48
  <%= f.hidden_field(:position, :class => "associated-resource-position") %>
@@ -37,7 +37,8 @@
37
37
 
38
38
  <% end %>
39
39
  <% end %>
40
-
40
+
41
+
41
42
  <%= javascript_include_tag 'admin/admin' %>
42
43
  <%= yield :javascripts %>
43
44
 
@@ -21,9 +21,14 @@ it:
21
21
  upload: "Carica"
22
22
  ago: "fa"
23
23
  ok: "Ok"
24
+ manual_entry: "Inserimento manuale"
24
25
  this_record_contains_some_errors: "Questa linea contiene alcuni errori"
25
26
  new_record: "nuovo"
26
27
  drag_to_sort_items: "Trascina per ordinare gli elementi"
28
+ no_file_uploaded: "Nessun file caricato"
29
+ choose_a_file: "Carica"
30
+ change: "Cambia"
31
+ preview: "Anteprima"
27
32
 
28
33
  form:
29
34
  correct_these_errors_and_retry: "Correggi questi errori e riprova"
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "fullstack-admin"
8
- s.version = "0.1.35"
8
+ s.version = "0.1.36"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["mcasimir"]
12
- s.date = "2012-08-25"
12
+ s.date = "2012-08-30"
13
13
  s.description = "Administration interface framework for fullstack"
14
14
  s.email = "maurizio.cas@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -931,6 +931,7 @@ Gem::Specification.new do |s|
931
931
  "app/assets/javascripts/support/base.js.coffee",
932
932
  "app/assets/javascripts/support/bootstrap.js.coffee",
933
933
  "app/assets/javascripts/support/facebox.js.coffee",
934
+ "app/assets/javascripts/support/file_input.js.coffee",
934
935
  "app/assets/javascripts/support/forms.js.coffee",
935
936
  "app/assets/javascripts/support/gmap.js.coffee",
936
937
  "app/assets/javascripts/support/nested_forms.js.coffee",
@@ -959,7 +960,7 @@ Gem::Specification.new do |s|
959
960
  "app/inputs/country_input.rb",
960
961
  "app/inputs/daterange_input.rb",
961
962
  "app/inputs/datetime_input.rb",
962
- "app/inputs/image_input.rb",
963
+ "app/inputs/file_input.rb",
963
964
  "app/inputs/iso3166.rb",
964
965
  "app/inputs/markup_input.rb",
965
966
  "app/inputs/simple_markup_input.rb",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fullstack-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.35
4
+ version: 0.1.36
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-25 00:00:00.000000000 Z
12
+ date: 2012-08-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -1189,6 +1189,7 @@ files:
1189
1189
  - app/assets/javascripts/support/base.js.coffee
1190
1190
  - app/assets/javascripts/support/bootstrap.js.coffee
1191
1191
  - app/assets/javascripts/support/facebox.js.coffee
1192
+ - app/assets/javascripts/support/file_input.js.coffee
1192
1193
  - app/assets/javascripts/support/forms.js.coffee
1193
1194
  - app/assets/javascripts/support/gmap.js.coffee
1194
1195
  - app/assets/javascripts/support/nested_forms.js.coffee
@@ -1217,7 +1218,7 @@ files:
1217
1218
  - app/inputs/country_input.rb
1218
1219
  - app/inputs/daterange_input.rb
1219
1220
  - app/inputs/datetime_input.rb
1220
- - app/inputs/image_input.rb
1221
+ - app/inputs/file_input.rb
1221
1222
  - app/inputs/iso3166.rb
1222
1223
  - app/inputs/markup_input.rb
1223
1224
  - app/inputs/simple_markup_input.rb
@@ -1328,7 +1329,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
1328
1329
  version: '0'
1329
1330
  segments:
1330
1331
  - 0
1331
- hash: -4441352441936102106
1332
+ hash: -2718455350685329463
1332
1333
  required_rubygems_version: !ruby/object:Gem::Requirement
1333
1334
  none: false
1334
1335
  requirements:
@@ -1,11 +0,0 @@
1
- class ImageInput < Formtastic::Inputs::FileInput
2
-
3
-
4
- def to_html
5
- raise "not implemented yet"
6
- # generic_input_wrapping do
7
- # builder.file_field(method, input_html_options)
8
- # end
9
- end
10
-
11
- end