file_share 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -7,10 +7,10 @@ gem 'sqlite3-ruby', :require => 'sqlite3'
7
7
  gem "formtastic"
8
8
 
9
9
  group :development, :test do
10
+ gem "acts_as_fu"
11
+ gem "capybara"
12
+ gem "cucumber-rails"
10
13
  gem "engineer"
11
14
  gem "rcov"
12
15
  gem "rspec-rails"
13
- gem "acts_as_fu"
14
- gem "cucumber-rails"
15
- gem "capybara"
16
16
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -97,7 +97,7 @@ class FileAttachmentsController < FileShare::ApplicationController
97
97
  end
98
98
 
99
99
  def update
100
- @file_attachment = FileAttachment.find(params[:id])
100
+ @file_attachment = FileAttachment.find(params[:id])
101
101
  respond_to do |format|
102
102
  if @file_attachment.update_attributes(params[:file_attachment])
103
103
  format.html do
@@ -1,9 +1,22 @@
1
1
  module FileAttachmentsHelper
2
2
 
3
3
  def description_display(file_attachment)
4
- content_tag :p, :id => "file_attachment_#{file_attachment.id}_description", :style => "max-width: 70%; float: right;" do
4
+ content_tag :p, {
5
+ :id => "file_attachment_#{file_attachment.id}_description",
6
+ :style => "max-width: 70%; float: right;",
7
+ :class => 'file_attachment_description'
8
+ } do
5
9
  file_attachment.description
6
10
  end
7
11
  end
12
+
13
+ def name_display(file_attachment)
14
+ content_tag :p, {
15
+ :id => "file_attachment_#{file_attachment.id}_name",
16
+ :class => 'file_attachment_name'
17
+ } do
18
+ link_to(file_attachment.name, download_file_attachment_path(file_attachment.id))
19
+ end
20
+ end
8
21
 
9
22
  end
@@ -83,12 +83,6 @@ class FileAttachment < ActiveRecord::Base
83
83
  end
84
84
  protected
85
85
  public
86
- def containers
87
- return [] if attachables.count == 0
88
- attachables.all.collect do |attachable|
89
- attachable.container
90
- end
91
- end
92
86
  def full_path
93
87
  "#{FOLDER_ROOT}/#{filepath}"
94
88
  end
@@ -96,9 +90,13 @@ class FileAttachment < ActiveRecord::Base
96
90
  return true if File.exists?(full_path) && File.basename(full_path) != FOLDER
97
91
  return false
98
92
  end
93
+ def file_container
94
+ return nil unless attachable_type.present? && attachable_id.present?
95
+ "#{attachable_type}_#{attachable_id}"
96
+ end
99
97
  def file_container=(container)
100
98
  p = container.split("_")
101
- self.attachable_type = p[0] unless p[0].blank?
102
- self.attachable_id = p[1] unless p[1].blank?
99
+ self.attachable_type = p[0].blank? ? nil : p[0]
100
+ self.attachable_id = p[1].blank? ? nil : p[1]
103
101
  end
104
102
  end
@@ -1,12 +1,11 @@
1
1
  <%= div_for(file_attachment) do %>
2
+ <span id="file_attachment_<%= file_attachment.id %>_file_container" class="file_attachment_file_container" style="display:none;"><%= file_attachment.file_container %></span>
2
3
  <%= description_display(file_attachment) %>
3
- <%= content_tag :p do %>
4
- <%= link_to(file_attachment.name, download_file_attachment_path(file_attachment.id)) %>
5
- <% end %>
6
-
4
+ <%= name_display(file_attachment) %>
7
5
  <%= content_tag :p, :style => "font-size: 11px;" do %>
8
- <a href="#" file_attachment_id="<%= file_attachment.id %>" file_attachment[description]="<%= file_attachment.description %>" class="file_attachment_dynamic_form_link fake_button">update description</a>
9
- <%= link_to('update', edit_file_attachment_path(file_attachment.id), :class => 'fake_button') if has_authorization?(:update, file_attachment) %>
6
+ <%= link_to "update", edit_file_attachment_path(file_attachment), {
7
+ :class => 'file_attachment_dynamic_form_link fake_button'
8
+ } %>
10
9
  <%= link_to('delete', file_attachment_path(file_attachment.id), {
11
10
  :method => :delete,
12
11
  :confirm => "Did you mean to Delete #{file_attachment.name}?",
@@ -4,7 +4,7 @@
4
4
  <h2>Orphaned Files</h2>
5
5
  <%= render :partial => 'file_attachments/file_attachment', :collection => orphans %>
6
6
  </div>
7
- <div id="files" class="span-8 last">
7
+ <div class="span-8 last">
8
8
  <h2>Attached Files</h2>
9
9
  <% files.group_by(&:attachable).each do |attachable, attached_files| %>
10
10
  <div id="<%= "#{attachable.class}_#{attachable.id}" %>">
@@ -15,7 +15,7 @@
15
15
  </div>
16
16
  <div style="clear:both;"></div>
17
17
  <% else %>
18
- <div id="files">
18
+ <div>
19
19
  <% if files.present? || orphans.present? %>
20
20
  <%= render :partial => 'file_attachments/file_attachment', :collection => files.present? ? files : orphans %>
21
21
  <% end %>
@@ -24,17 +24,28 @@
24
24
  </div>
25
25
 
26
26
  <% if has_authorization?(:update, FileAttachment.new) %>
27
- <div id="blank_description_form" style="display: none; padding: 5px 0;">
28
- <form class="formtastic file_attachment" id="new_description" method="post" action="#">
29
- <div style="margin: 0pt; padding: 0pt; display: inline;">
30
- <input type="hidden" value="put" name="_method" />
31
- <input type="hidden" value="<%= form_authenticity_token %>" name="authenticity_token" />
32
- </div>
33
- <textarea id="file_attachment_description" style="height: 70px; width: 69%" name="file_attachment[description]"></textarea>
34
- <br />
35
- <input type="submit" value="Update" />
36
- </form>
37
- </div>
27
+ <!-- <div id="blank_description_form" style="display: none; padding: 5px 0;"> -->
28
+ <form id="file_attachment_dynamic_form" class="formtastic" method="post" action="<%= file_attachments_path %>" style="display: none; padding: 5px 0;">
29
+ <div style="margin: 0pt; padding: 0pt; display: inline;">
30
+ <input type="hidden" value="put" name="_method" />
31
+ <input type="hidden" value="<%= form_authenticity_token %>" name="authenticity_token" />
32
+ </div>
33
+ <input type="text" id="file_attachment_name" name="file_attachment[name]" />
34
+ <% unless @file_containers.empty? %>
35
+ <select id="file_attachment_file_container" name="file_attachment[file_container]">
36
+ <%= render({
37
+ :partial => 'file_attachments/file_container_select',
38
+ :locals => {
39
+ :selected => "#{params[:attachable_type]}_#{params[:attachable_id]}"
40
+ }
41
+ }) %>
42
+ </select>
43
+ <% end %>
44
+ <textarea id="file_attachment_description" style="height: 70px; width: 69%" name="file_attachment[description]"></textarea>
45
+ <br />
46
+ <input type="submit" value="Update" /> | <a href="#" class="cancel_dynamic_form">Cancel</a>
47
+ </form>
48
+ <!-- </div> -->
38
49
 
39
50
  <% content_for(:javascript) do %>
40
51
  <script type="text/javascript">
@@ -45,15 +56,9 @@ jQuery.ajaxSetup({
45
56
  });
46
57
 
47
58
  jQuery(function($) {
48
- $("a.file_attachment_dynamic_form_link").attach(DynamicForm, {
49
- formId: 'new_description',
50
- formContainer: 'blank_description_form',
51
- actionPrefix: '/file_attachments',
52
- targetIdName: 'file_attachment_id',
53
- targetContentName: 'file_attachment[description]',
54
- targetContentType: 'textarea'
59
+ $('#file_attachments').attach(DynamicForm, {
60
+ formElement: $('#file_attachment_dynamic_form')
55
61
  });
56
- $("#new_description").attach(Remote.Form);
57
62
  });
58
63
  </script>
59
64
  <% end %>
@@ -1,4 +1,3 @@
1
- <select id="file_container_select" name="file_attachment[file_container]">
2
1
  <option value=""></option>
3
2
  <% @file_containers.group_by(&:class).each do |klass, file_containers| %>
4
3
  <optgroup label="<%= klass.to_s.pluralize %>">
@@ -11,4 +10,3 @@
11
10
  }) %>
12
11
  </optgroup>
13
12
  <% end %>
14
- </select>
@@ -118,13 +118,15 @@
118
118
  </p>
119
119
 
120
120
  <% if @file_containers.present? %>
121
- <p>
122
- <%= render({
123
- :partial => 'file_attachments/file_container_select',
124
- :locals => {
125
- :selected => "#{params[:attachable_type]}_#{params[:attachable_id]}"
126
- }
127
- }) %>
121
+ <p>
122
+ <select id="file_container_select" name="file_attachment[file_container]">
123
+ <%= render({
124
+ :partial => 'file_attachments/file_container_select',
125
+ :locals => {
126
+ :selected => "#{params[:attachable_type]}_#{params[:attachable_id]}"
127
+ }
128
+ }) %>
129
+ </select>
128
130
  </p>
129
131
  <% elsif instance_variable_defined?("@#{controller_name.singularize}") %>
130
132
  <% instance = instance_variable_get("@#{controller_name.singularize}") %>
@@ -27,6 +27,8 @@
27
27
  %>
28
28
  <%= form.input :description, :hint => "of file contents, purpose, etc" %>
29
29
  <% end %>
30
- <%= form.buttons %>
30
+ <%= form.buttons do %>
31
+ <%= form.commit_button%>
32
+ <% end %>
31
33
  <% end %>
32
34
  <% end %>
@@ -1,13 +1,22 @@
1
+ id = @file_attachment.id
2
+ attachable_name = @file_attachment.attachable.present? ? @file_attachment.attachable.name : 'orphanage'
1
3
  if @file_attachment.valid?
2
4
  page << %Q{
3
- $('#blank_description_form').hide();
4
- $('#file_attachment_#{@file_attachment.id}_description').replaceWith('#{description_display(@file_attachment)}');
5
- $('#file_attachment_#{@file_attachment.id}').effect('highlight', {
5
+ var original_container = $('#file_attachment_#{id}_file_container').text();
6
+ $('#file_attachment_dynamic_form').hide();
7
+ $('#file_attachment_#{id}_file_container').text("#{escape_javascript(@file_attachment.file_container)}");
8
+ $('#file_attachment_#{id}_name a').text('#{escape_javascript(@file_attachment.name)}');
9
+ $('#file_attachment_#{id}_description').text('#{escape_javascript(@file_attachment.description)}');
10
+ $('#file_attachment_#{id}').effect('highlight', {
6
11
  color: '#C3D9FF'
7
- }, 2500)
12
+ }, 2500);
13
+
14
+ if( original_container !== $('#file_attachment_#{id}_file_container').text() ) {
15
+ $('<p style="background:#C3D9FF;"><em>Moved to #{attachable_name}</em></p>').insertBefore($('#file_attachment_#{id}_name'));
16
+ }
8
17
  }
9
18
  else
10
19
  page << %Q{
11
- alert("The file description could not be saved.");
20
+ alert("The file could not be updated.");
12
21
  }
13
22
  end
@@ -0,0 +1,72 @@
1
+ # encoding: utf-8
2
+
3
+ # Set the default text field size when input is a string. Default is nil.
4
+ # Formtastic::SemanticFormBuilder.default_text_field_size = 50
5
+
6
+ # Set the default text area height when input is a text. Default is 20.
7
+ # Formtastic::SemanticFormBuilder.default_text_area_height = 5
8
+
9
+ # Set the default text area width when input is a text. Default is nil.
10
+ # Formtastic::SemanticFormBuilder.default_text_area_width = 50
11
+
12
+ # Should all fields be considered "required" by default?
13
+ # Rails 2 only, ignored by Rails 3 because it will never fall back to this default.
14
+ # Defaults to true.
15
+ # Formtastic::SemanticFormBuilder.all_fields_required_by_default = true
16
+
17
+ # Should select fields have a blank option/prompt by default?
18
+ # Defaults to true.
19
+ # Formtastic::SemanticFormBuilder.include_blank_for_select_by_default = true
20
+
21
+ # Set the string that will be appended to the labels/fieldsets which are required
22
+ # It accepts string or procs and the default is a localized version of
23
+ # '<abbr title="required">*</abbr>'. In other words, if you configure formtastic.required
24
+ # in your locale, it will replace the abbr title properly. But if you don't want to use
25
+ # abbr tag, you can simply give a string as below
26
+ # Formtastic::SemanticFormBuilder.required_string = "(required)"
27
+
28
+ # Set the string that will be appended to the labels/fieldsets which are optional
29
+ # Defaults to an empty string ("") and also accepts procs (see required_string above)
30
+ # Formtastic::SemanticFormBuilder.optional_string = "(optional)"
31
+
32
+ # Set the way inline errors will be displayed.
33
+ # Defaults to :sentence, valid options are :sentence, :list, :first and :none
34
+ # Formtastic::SemanticFormBuilder.inline_errors = :sentence
35
+ # Formtastic uses the following classes as default for hints, inline_errors and error list
36
+
37
+ # If you override the class here, please ensure to override it in your formtastic_changes.css stylesheet as well
38
+ # Formtastic::SemanticFormBuilder.default_hint_class = "inline-hints"
39
+ # Formtastic::SemanticFormBuilder.default_inline_error_class = "inline-errors"
40
+ # Formtastic::SemanticFormBuilder.default_error_list_class = "errors"
41
+
42
+ # Set the method to call on label text to transform or format it for human-friendly
43
+ # reading when formtastic is used without object. Defaults to :humanize.
44
+ # Formtastic::SemanticFormBuilder.label_str_method = :humanize
45
+
46
+ # Set the array of methods to try calling on parent objects in :select and :radio inputs
47
+ # for the text inside each @<option>@ tag or alongside each radio @<input>@. The first method
48
+ # that is found on the object will be used.
49
+ # Defaults to ["to_label", "display_name", "full_name", "name", "title", "username", "login", "value", "to_s"]
50
+ # Formtastic::SemanticFormBuilder.collection_label_methods = [
51
+ # "to_label", "display_name", "full_name", "name", "title", "username", "login", "value", "to_s"]
52
+
53
+ # Formtastic by default renders inside li tags the input, hints and then
54
+ # errors messages. Sometimes you want the hints to be rendered first than
55
+ # the input, in the following order: hints, input and errors. You can
56
+ # customize it doing just as below:
57
+ # Formtastic::SemanticFormBuilder.inline_order = [:input, :hints, :errors]
58
+
59
+ # Additionally, you can customize the order for specific types of inputs.
60
+ # This is configured on a type basis and if a type is not found it will
61
+ # fall back to the default order as defined by #inline_order
62
+ # Formtastic::SemanticFormBuilder.custom_inline_order[:checkbox] = [:errors, :hints, :input]
63
+ # Formtastic::SemanticFormBuilder.custom_inline_order[:select] = [:hints, :input, :errors]
64
+
65
+ # Specifies if labels/hints for input fields automatically be looked up using I18n.
66
+ # Default value: false. Overridden for specific fields by setting value to true,
67
+ # i.e. :label => true, or :hint => true (or opposite depending on initialized value)
68
+ Formtastic::SemanticFormBuilder.i18n_lookups_by_default = true
69
+
70
+ # You can add custom inputs or override parts of Formtastic by subclassing SemanticFormBuilder and
71
+ # specifying that class here. Defaults to SemanticFormBuilder.
72
+ # Formtastic::SemanticFormHelper.builder = MyCustomBuilder
@@ -3,3 +3,7 @@
3
3
 
4
4
  en:
5
5
  hello: "Hello world"
6
+ formtastic:
7
+ actions:
8
+ create: "Save"
9
+ update: "Update"
@@ -33,30 +33,3 @@ $.fn.clearForm = function() {
33
33
  this.selectedIndex = -1;
34
34
  });
35
35
  };
36
-
37
- DynamicForm = $.klass({
38
- initialize: function(options) {
39
- this.formId = options.formId; // new_description
40
- this.formContainer = options.formContainer; // blank_description_form
41
- this.targetIdName = options.targetIdName; // file_attachment_id
42
- this.targetContentName = options.targetContentName; // file_attachment[description]
43
- this.targetContentType = options.targetContentType;
44
- this.actionPrefix = options.actionPrefix; // /file_attachments
45
- },
46
- onclick: function(e) {
47
- e.preventDefault();
48
-
49
- var targetIdValue = this.element.attr(this.targetIdName);
50
- var targetContentValue = this.element.attr(this.targetContentName);
51
-
52
- $('#' + this.formId).attr("action", this.actionPrefix + "/" + targetIdValue);
53
-
54
- $('#' + this.formId).clearForm();
55
-
56
- $('#' + this.formContainer).insertBefore(this.element);
57
-
58
- $(this.targetContentType + '[name='+ this.targetContentName +']').val(targetContentValue);
59
-
60
- $('#' + this.formContainer).show();
61
- }
62
- });
@@ -129,3 +129,47 @@ ShowHideLink = $.klass({
129
129
  return this.doNotStop;
130
130
  }
131
131
  });
132
+
133
+ /*
134
+ $('#file_attachments').attach(DynamicForm, {
135
+ formElement: $('#new_description')
136
+ });
137
+ */
138
+ DynamicForm = $.klass({
139
+ initialize: function(options) {
140
+ this.formElement = options.formElement;
141
+ this.formElement.attach(Remote.Form);
142
+ this.resourceType = this.formElement.attr('id').replace('_dynamic_form', '');
143
+ this.resourceInputs = this.formElement.find(':input[id^="'+this.resourceType+'"]');
144
+ this.resourcePlural = this.element.attr('id');
145
+ },
146
+ onclick: $.delegate({
147
+ '.cancel_dynamic_form': function(clickedElement, event) {
148
+ event.preventDefault();
149
+ this.formElement.hide();
150
+ },
151
+ '.file_attachment_dynamic_form_link': function(clickedElement, event) {
152
+ event.preventDefault();
153
+
154
+ var resourceContainer = clickedElement.parents('.' + this.resourceType);
155
+ var resourceId = /\d+/.exec(resourceContainer.attr('id'))[0];
156
+
157
+ // append resourceId to current form action
158
+ this.formElement.attr("action", "/" + this.resourcePlural + "/" + resourceId);
159
+
160
+ // clear form input values
161
+ this.formElement.clearForm();
162
+ // move form to resource
163
+ this.formElement.insertBefore(clickedElement);
164
+
165
+ this.resourceInputs.each(function() {
166
+ // get resource attr names from form input ids
167
+ var resourceAttrContainer = resourceContainer.find('.'+this.id);
168
+ // get resource attr vals from w/in resource container
169
+ this.value = resourceAttrContainer.text();
170
+ });
171
+
172
+ this.formElement.show();
173
+ }
174
+ })
175
+ });
@@ -19,120 +19,127 @@ form.formtastic ol, form.formtastic ul { list-style:none; }
19
19
  form.formtastic abbr, form.formtastic acronym { border:0; font-variant:normal; }
20
20
  form.formtastic input, form.formtastic textarea, form.formtastic select { font-family:inherit; font-size:inherit; font-weight:inherit; }
21
21
  form.formtastic input, form.formtastic textarea, form.formtastic select { font-size:100%; }
22
- form.formtastic legend { color:#000; }
22
+ form.formtastic legend { white-space:normal; color:#000; }
23
+
24
+
25
+ /* SEMANTIC ERRORS
26
+ --------------------------------------------------------------------------------------------------*/
27
+ form.formtastic ul.errors { color:#cc0000; margin:0.5em 0 1.5em 25%; list-style:square; }
28
+ form.formtastic ul.errors li { padding:0; border:none; display:list-item; }
23
29
 
24
30
 
25
31
  /* FIELDSETS & LISTS
26
32
  --------------------------------------------------------------------------------------------------*/
27
- form.formtastic fieldset { }
33
+ form.formtastic fieldset { overflow:auto; } /* clearing contained floats */
28
34
  form.formtastic fieldset.inputs { }
29
35
  form.formtastic fieldset.buttons { padding-left:25%; }
30
36
  form.formtastic fieldset ol { }
31
37
  form.formtastic fieldset.buttons li { float:left; padding-right:0.5em; }
32
38
 
33
- /* clearfixing the fieldsets */
34
- form.formtastic fieldset { display: inline-block; }
35
- form.formtastic fieldset:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
36
- html[xmlns] form.formtastic fieldset { display: block; }
37
- * html form.formtastic fieldset { height: 1%; }
38
-
39
-
40
39
  /* INPUT LIs
41
40
  --------------------------------------------------------------------------------------------------*/
42
- form.formtastic fieldset ol li { margin-bottom:1.5em; }
43
-
44
- /* clearfixing the li's */
45
- form.formtastic fieldset ol li { display: inline-block; }
46
- form.formtastic fieldset ol li:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
47
- html[xmlns] form.formtastic fieldset ol li { display: block; }
48
- * html form.formtastic fieldset ol li { height: 1%; }
41
+ form.formtastic fieldset > ol > li { padding:0.5em 0; margin-top:-0.5em; margin-bottom:1em; } /* padding and negative margin juggling is for Firefox */
42
+ form.formtastic fieldset > ol > li { overflow:auto; } /* clearing contained floats */
49
43
 
50
- form.formtastic fieldset ol li.required { }
51
- form.formtastic fieldset ol li.optional { }
52
- form.formtastic fieldset ol li.error { }
44
+ form.formtastic fieldset > ol > li.required { }
45
+ form.formtastic fieldset > ol > li.optional { }
46
+ form.formtastic fieldset > ol > li.error { }
53
47
 
54
48
 
55
49
  /* LABELS
56
50
  --------------------------------------------------------------------------------------------------*/
57
- form.formtastic fieldset ol li label { display:block; width:25%; float:left; padding-top:.2em; }
58
- form.formtastic fieldset ol li li label { line-height:100%; padding-top:0; }
59
- form.formtastic fieldset ol li li label input { line-height:100%; vertical-align:middle; margin-top:-0.1em;}
51
+ form.formtastic fieldset > ol > li label { display:block; width:25%; float:left; padding-top:.2em; }
52
+ form.formtastic fieldset > ol > li > li label { line-height:100%; padding-top:0; }
53
+ form.formtastic fieldset > ol > li > li label input { line-height:100%; vertical-align:middle; margin-top:-0.1em;}
60
54
 
61
55
 
62
56
  /* NESTED FIELDSETS AND LEGENDS (radio, check boxes and date/time inputs use nested fieldsets)
63
57
  --------------------------------------------------------------------------------------------------*/
64
- form.formtastic fieldset ol li fieldset { position:relative; }
65
- form.formtastic fieldset ol li fieldset legend { position:absolute; width:25%; padding-top:0.1em; }
66
- form.formtastic fieldset ol li fieldset legend span { position:absolute; }
67
- form.formtastic fieldset ol li fieldset legend.label label { position:absolute; }
68
- form.formtastic fieldset ol li fieldset ol { float:left; width:74%; margin:0; padding:0 0 0 25%; }
69
- form.formtastic fieldset ol li fieldset ol li { padding:0; border:0; }
58
+ form.formtastic fieldset > ol > li fieldset { position:relative; }
59
+ form.formtastic fieldset > ol > li fieldset legend { position:absolute; width:95%; padding-top:0.1em; left: 0px; }
60
+ form.formtastic fieldset > ol > li fieldset legend span { position:absolute; }
61
+ form.formtastic fieldset > ol > li fieldset legend.label label { position:absolute; }
62
+ form.formtastic fieldset > ol > li fieldset ol { float:left; width:74%; margin:0; padding:0 0 0 25%; }
63
+ form.formtastic fieldset > ol > li fieldset ol li { padding:0; border:0; }
70
64
 
71
65
 
72
66
  /* INLINE HINTS
73
67
  --------------------------------------------------------------------------------------------------*/
74
- form.formtastic fieldset ol li p.inline-hints { color:#666; margin:0.5em 0 0 25%; }
68
+ form.formtastic fieldset > ol > li p.inline-hints { color:#666; margin:0.5em 0 0 25%; }
75
69
 
76
70
 
77
71
  /* INLINE ERRORS
78
72
  --------------------------------------------------------------------------------------------------*/
79
- form.formtastic fieldset ol li p.inline-errors { color:#cc0000; margin:0.5em 0 0 25%; }
80
- form.formtastic fieldset ol li ul.errors { color:#cc0000; margin:0.5em 0 0 25%; list-style:square; }
81
- form.formtastic fieldset ol li ul.errors li { padding:0; border:none; display:list-item; }
73
+ form.formtastic fieldset > ol > li p.inline-errors { color:#cc0000; margin:0.5em 0 0 25%; }
74
+ form.formtastic fieldset > ol > li ul.errors { color:#cc0000; margin:0.5em 0 0 25%; list-style:square; }
75
+ form.formtastic fieldset > ol > li ul.errors li { padding:0; border:none; display:list-item; }
82
76
 
83
77
 
84
- /* STRING & NUMERIC OVERRIDES
78
+ /* STRING, NUMERIC, PASSWORD, EMAIL, URL, PHONE & SEARCH OVERRIDES
85
79
  --------------------------------------------------------------------------------------------------*/
86
- form.formtastic fieldset ol li.string input { width:74%; }
87
- form.formtastic fieldset ol li.password input { width:74%; }
88
- form.formtastic fieldset ol li.numeric input { width:74%; }
80
+ form.formtastic fieldset > ol > li.string input,
81
+ form.formtastic fieldset > ol > li.password input,
82
+ form.formtastic fieldset > ol > li.numeric input,
83
+ form.formtastic fieldset > ol > li.email input,
84
+ form.formtastic fieldset > ol > li.url input,
85
+ form.formtastic fieldset > ol > li.phone input,
86
+ form.formtastic fieldset > ol > li.search input { width:72%; }
87
+
88
+ form.formtastic fieldset > ol > li.string input[size],
89
+ form.formtastic fieldset > ol > li.password input[size],
90
+ form.formtastic fieldset > ol > li.numeric input[size],
91
+ form.formtastic fieldset > ol > li.email input[size],
92
+ form.formtastic fieldset > ol > li.url input[size],
93
+ form.formtastic fieldset > ol > li.phone input[size],
94
+ form.formtastic fieldset > ol > li.search input[size] { width:auto; max-width:72%; }
89
95
 
90
96
 
91
97
  /* TEXTAREA OVERRIDES
92
98
  --------------------------------------------------------------------------------------------------*/
93
- form.formtastic fieldset ol li.text textarea { width:74%; }
99
+ form.formtastic fieldset > ol > li.text textarea { width:72%; }
100
+ form.formtastic fieldset > ol > li.text textarea[cols] { width:auto; max-width:72%; }
94
101
 
95
102
 
96
103
  /* HIDDEN OVERRIDES
97
104
  --------------------------------------------------------------------------------------------------*/
98
105
  form.formtastic fieldset ol li.hidden { display:none; }
99
106
 
100
-
101
107
  /* BOOLEAN OVERRIDES
102
108
  --------------------------------------------------------------------------------------------------*/
103
- form.formtastic fieldset ol li.boolean label { padding-left:25%; width:auto; }
104
- form.formtastic fieldset ol li.boolean label input { margin:0 0.5em 0 0.2em; }
109
+ form.formtastic fieldset > ol > li.boolean label { padding-left:25%; width:auto; }
110
+ form.formtastic fieldset > ol > li.boolean label input { margin:0 0.5em 0 0.2em; }
105
111
 
106
112
 
107
113
  /* RADIO OVERRIDES
108
114
  --------------------------------------------------------------------------------------------------*/
109
- form.formtastic fieldset ol li.radio { }
110
- form.formtastic fieldset ol li.radio fieldset ol { margin-bottom:-0.6em; }
111
- form.formtastic fieldset ol li.radio fieldset ol li { margin:0.1em 0 0.5em 0; }
112
- form.formtastic fieldset ol li.radio fieldset ol li label { float:none; width:100%; }
113
- form.formtastic fieldset ol li.radio fieldset ol li label input { margin-right:0.2em; }
115
+ form.formtastic fieldset > ol > li.radio { }
116
+ form.formtastic fieldset > ol > li.radio fieldset { overflow:visible; }
117
+ form.formtastic fieldset > ol > li.radio fieldset ol { margin-bottom:-0.5em; }
118
+ form.formtastic fieldset > ol > li.radio fieldset ol li { margin:0.1em 0 0.5em 0; overflow:visible; }
119
+ form.formtastic fieldset > ol > li.radio fieldset ol li label { float:none; width:100%; }
120
+ form.formtastic fieldset > ol > li.radio fieldset ol li label input { margin-right:0.2em; }
114
121
 
115
122
 
116
123
  /* CHECK BOXES (COLLECTION) OVERRIDES
117
124
  --------------------------------------------------------------------------------------------------*/
118
- form.formtastic fieldset ol li.check_boxes { }
119
- form.formtastic fieldset ol li.check_boxes fieldset ol { margin-bottom:-0.6em; }
120
- form.formtastic fieldset ol li.check_boxes fieldset ol li { margin:0.1em 0 0.5em 0; }
121
- form.formtastic fieldset ol li.check_boxes fieldset ol li label { float:none; width:100%; }
122
- form.formtastic fieldset ol li.check_boxes fieldset ol li label input { margin-right:0.2em; }
123
-
125
+ form.formtastic fieldset > ol > li.check_boxes { }
126
+ form.formtastic fieldset > ol > li.check_boxes fieldset { overflow:visible; }
127
+ form.formtastic fieldset > ol > li.check_boxes fieldset ol { margin-bottom:-0.5em; }
128
+ form.formtastic fieldset > ol > li.check_boxes fieldset ol li { margin:0.1em 0 0.5em 0; overflow:visible; }
129
+ form.formtastic fieldset > ol > li.check_boxes fieldset ol li label { float:none; width:100%; }
130
+ form.formtastic fieldset > ol > li.check_boxes fieldset ol li label input { margin-right:0.2em; }
124
131
 
125
132
 
126
133
  /* DATE & TIME OVERRIDES
127
134
  --------------------------------------------------------------------------------------------------*/
128
- form.formtastic fieldset ol li.date fieldset ol li,
129
- form.formtastic fieldset ol li.time fieldset ol li,
130
- form.formtastic fieldset ol li.datetime fieldset ol li { float:left; width:auto; margin:0 .3em 0 0; }
135
+ form.formtastic fieldset > ol > li.date fieldset ol li,
136
+ form.formtastic fieldset > ol > li.time fieldset ol li,
137
+ form.formtastic fieldset > ol > li.datetime fieldset ol li { float:left; width:auto; margin:0 .3em 0 0; }
131
138
 
132
- form.formtastic fieldset ol li.date fieldset ol li label,
133
- form.formtastic fieldset ol li.time fieldset ol li label,
134
- form.formtastic fieldset ol li.datetime fieldset ol li label { display:none; }
139
+ form.formtastic fieldset > ol > li.date fieldset ol li label,
140
+ form.formtastic fieldset > ol > li.time fieldset ol li label,
141
+ form.formtastic fieldset > ol > li.datetime fieldset ol li label { display:none; }
135
142
 
136
- form.formtastic fieldset ol li.date fieldset ol li label input,
137
- form.formtastic fieldset ol li.time fieldset ol li label input,
138
- form.formtastic fieldset ol li.datetime fieldset ol li label input { display:inline; margin:0; padding:0; }
143
+ form.formtastic fieldset > ol > li.date fieldset ol li label input,
144
+ form.formtastic fieldset > ol > li.time fieldset ol li label input,
145
+ form.formtastic fieldset > ol > li.datetime fieldset ol li label input { display:inline; margin:0; padding:0; }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: file_share
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 2
10
+ version: 0.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jason LaPier
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-12-07 00:00:00 -08:00
19
+ date: 2010-12-13 00:00:00 -08:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -66,7 +66,7 @@ dependencies:
66
66
  - !ruby/object:Gem::Dependency
67
67
  type: :development
68
68
  prerelease: false
69
- name: engineer
69
+ name: acts_as_fu
70
70
  version_requirements: &id004 !ruby/object:Gem::Requirement
71
71
  none: false
72
72
  requirements:
@@ -80,7 +80,7 @@ dependencies:
80
80
  - !ruby/object:Gem::Dependency
81
81
  type: :development
82
82
  prerelease: false
83
- name: rcov
83
+ name: capybara
84
84
  version_requirements: &id005 !ruby/object:Gem::Requirement
85
85
  none: false
86
86
  requirements:
@@ -94,7 +94,7 @@ dependencies:
94
94
  - !ruby/object:Gem::Dependency
95
95
  type: :development
96
96
  prerelease: false
97
- name: rspec-rails
97
+ name: cucumber-rails
98
98
  version_requirements: &id006 !ruby/object:Gem::Requirement
99
99
  none: false
100
100
  requirements:
@@ -108,7 +108,7 @@ dependencies:
108
108
  - !ruby/object:Gem::Dependency
109
109
  type: :development
110
110
  prerelease: false
111
- name: acts_as_fu
111
+ name: engineer
112
112
  version_requirements: &id007 !ruby/object:Gem::Requirement
113
113
  none: false
114
114
  requirements:
@@ -122,7 +122,7 @@ dependencies:
122
122
  - !ruby/object:Gem::Dependency
123
123
  type: :development
124
124
  prerelease: false
125
- name: cucumber-rails
125
+ name: rcov
126
126
  version_requirements: &id008 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
@@ -136,7 +136,7 @@ dependencies:
136
136
  - !ruby/object:Gem::Dependency
137
137
  type: :development
138
138
  prerelease: false
139
- name: capybara
139
+ name: rspec-rails
140
140
  version_requirements: &id009 !ruby/object:Gem::Requirement
141
141
  none: false
142
142
  requirements:
@@ -194,7 +194,7 @@ dependencies:
194
194
  - !ruby/object:Gem::Dependency
195
195
  type: :development
196
196
  prerelease: false
197
- name: rcov
197
+ name: acts_as_fu
198
198
  version_requirements: &id013 !ruby/object:Gem::Requirement
199
199
  none: false
200
200
  requirements:
@@ -208,7 +208,7 @@ dependencies:
208
208
  - !ruby/object:Gem::Dependency
209
209
  type: :development
210
210
  prerelease: false
211
- name: rspec-rails
211
+ name: capybara
212
212
  version_requirements: &id014 !ruby/object:Gem::Requirement
213
213
  none: false
214
214
  requirements:
@@ -222,7 +222,7 @@ dependencies:
222
222
  - !ruby/object:Gem::Dependency
223
223
  type: :development
224
224
  prerelease: false
225
- name: acts_as_fu
225
+ name: cucumber-rails
226
226
  version_requirements: &id015 !ruby/object:Gem::Requirement
227
227
  none: false
228
228
  requirements:
@@ -236,7 +236,7 @@ dependencies:
236
236
  - !ruby/object:Gem::Dependency
237
237
  type: :development
238
238
  prerelease: false
239
- name: cucumber-rails
239
+ name: rcov
240
240
  version_requirements: &id016 !ruby/object:Gem::Requirement
241
241
  none: false
242
242
  requirements:
@@ -250,7 +250,7 @@ dependencies:
250
250
  - !ruby/object:Gem::Dependency
251
251
  type: :development
252
252
  prerelease: false
253
- name: capybara
253
+ name: rspec-rails
254
254
  version_requirements: &id017 !ruby/object:Gem::Requirement
255
255
  none: false
256
256
  requirements:
@@ -307,6 +307,7 @@ files:
307
307
  - config/environments/production.rb
308
308
  - config/environments/test.rb
309
309
  - config/initializers/backtrace_silencers.rb
310
+ - config/initializers/formtastic.rb
310
311
  - config/initializers/inflections.rb
311
312
  - config/initializers/mime_types.rb
312
313
  - config/initializers/secret_token.rb