mir_extensions 0.2.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +18 -2
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/app/controllers/foos_controller.rb +83 -0
- data/app/helpers/application_helper.rb +1 -0
- data/app/models/foo.rb +2 -0
- data/app/views/foos/_form.html.erb +20 -0
- data/app/views/foos/edit.html.erb +6 -0
- data/app/views/foos/index.html.erb +27 -0
- data/app/views/foos/new.html.erb +5 -0
- data/app/views/foos/show.html.erb +20 -0
- data/config.ru +1 -1
- data/config/application.rb +5 -1
- data/config/environment.rb +1 -1
- data/config/environments/development.rb +1 -1
- data/config/environments/test.rb +1 -1
- data/config/initializers/secret_token.rb +1 -1
- data/config/initializers/session_store.rb +1 -1
- data/config/routes.rb +5 -2
- data/db/migrate/20100801224509_create_foos.rb +16 -0
- data/db/mir_ext_development.sqlite3 +0 -0
- data/db/mir_ext_test.sqlite3 +0 -0
- data/db/schema.rb +11 -1
- data/lib/core_ext/core_ext.rb +1 -2
- data/lib/mir_extensions.rb +386 -2
- data/lib/mir_form_builder.rb +166 -0
- data/mir_extensions.gemspec +29 -7
- data/public/stylesheets/scaffold.css +56 -0
- data/spec/controllers/foos_controller_spec.rb +125 -0
- data/spec/routing/foos_routing_spec.rb +35 -0
- data/spec/support/integration_example_group.rb +35 -0
- data/spec/views/foos/edit.html.erb_spec.rb +61 -0
- data/spec/views/foos/index.html.erb_spec.rb +25 -0
- data/spec/views/foos/new.html.erb_spec.rb +22 -0
- data/spec/views/foos/show.html.erb_spec.rb +18 -0
- metadata +29 -7
- data/lib/core_ext/helper_extensions.rb +0 -383
- data/log/development.log +0 -151
- data/log/test.log +0 -27
- data/public/index.html +0 -262
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'action_dispatch'
|
2
|
+
require 'capybara/rails'
|
3
|
+
require 'capybara/dsl'
|
4
|
+
|
5
|
+
module RSpec::Rails
|
6
|
+
module IntegrationExampleGroup
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
include ActionDispatch::Integration::Runner
|
10
|
+
include RSpec::Rails::TestUnitAssertionAdapter
|
11
|
+
include ActionDispatch::Assertions
|
12
|
+
include Capybara
|
13
|
+
include RSpec::Matchers
|
14
|
+
|
15
|
+
module InstanceMethods
|
16
|
+
def app
|
17
|
+
::Rails.application
|
18
|
+
end
|
19
|
+
|
20
|
+
def last_response
|
21
|
+
page
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
included do
|
26
|
+
before do
|
27
|
+
@router = ::Rails.application.routes
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
RSpec.configure do |c|
|
32
|
+
c.include self, :example_group => { :file_path => /\bspec\/integration\// }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "foos/edit.html.erb" do
|
4
|
+
before(:each) do
|
5
|
+
@foo = assign(:foo, stub_model(Foo,
|
6
|
+
:new_record? => false,
|
7
|
+
:name => "MyString",
|
8
|
+
:active => false,
|
9
|
+
:style => "MyString"
|
10
|
+
))
|
11
|
+
end
|
12
|
+
|
13
|
+
it "renders the edit foo form" do
|
14
|
+
render
|
15
|
+
|
16
|
+
rendered.should have_selector("form", :action => foo_path(@foo), :method => "post") do |form|
|
17
|
+
form.should have_selector("input#foo_name", :name => "foo[name]")
|
18
|
+
form.should have_selector("input#foo_active", :name => "foo[active]")
|
19
|
+
form.should have_selector("select#foo_style", :name => "foo[style]")
|
20
|
+
form.should have_xpath("//select[@id='foo_style']/option", :value => 'Select...')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'renders a text field with a default label' do
|
25
|
+
render
|
26
|
+
rendered.should have_selector("form", :action => foo_path(@foo), :method => "post") do |form|
|
27
|
+
form.should have_xpath("//label[@for='foo_name']", :content => 'Name')
|
28
|
+
form.should have_selector("input#foo_name", :name => "foo[name]")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'renders a field with a custom label' do
|
33
|
+
render
|
34
|
+
rendered.should have_selector("form", :action => foo_path(@foo), :method => "post") do |form|
|
35
|
+
form.should have_xpath("//label[@for='foo_active']", :content => 'Status')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'renders an inline label for a checkbox' do
|
40
|
+
render
|
41
|
+
rendered.should have_selector("form", :action => foo_path(@foo), :method => "post") do |form|
|
42
|
+
form.should have_xpath("//label[@for='foo_active']", :content => 'Active', :class => 'inline')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'renders a select control with a default option' do
|
47
|
+
render
|
48
|
+
rendered.should have_selector("form", :action => foo_path(@foo), :method => "post") do |form|
|
49
|
+
form.should have_xpath("//select[@id='foo_style']/option", :value => 'Select...')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'renders a date select' do
|
54
|
+
render
|
55
|
+
rendered.should have_selector("form", :action => foo_path(@foo), :method => "post") do |form|
|
56
|
+
form.should have_xpath("//select/option", :content => 'January')
|
57
|
+
form.should have_xpath("//select/option", :content => '1')
|
58
|
+
form.should have_xpath("//select/option", :content => '2010')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "foos/index.html.erb" do
|
4
|
+
before(:each) do
|
5
|
+
assign(:foos, [
|
6
|
+
stub_model(Foo,
|
7
|
+
:name => "Name",
|
8
|
+
:active => false,
|
9
|
+
:style => "Style"
|
10
|
+
),
|
11
|
+
stub_model(Foo,
|
12
|
+
:name => "Name",
|
13
|
+
:active => false,
|
14
|
+
:style => "Style"
|
15
|
+
)
|
16
|
+
])
|
17
|
+
end
|
18
|
+
|
19
|
+
it "renders a list of foos" do
|
20
|
+
render
|
21
|
+
rendered.should have_selector("tr>td", :content => "Name".to_s, :count => 2)
|
22
|
+
rendered.should have_selector("tr>td", :content => false.to_s, :count => 2)
|
23
|
+
rendered.should have_selector("tr>td", :content => "Style".to_s, :count => 2)
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "foos/new.html.erb" do
|
4
|
+
before(:each) do
|
5
|
+
assign(:foo, stub_model(Foo,
|
6
|
+
:new_record? => true,
|
7
|
+
:name => "MyString",
|
8
|
+
:active => false,
|
9
|
+
:style => "MyString"
|
10
|
+
))
|
11
|
+
end
|
12
|
+
|
13
|
+
it "renders new foo form" do
|
14
|
+
render
|
15
|
+
|
16
|
+
rendered.should have_selector("form", :action => foos_path, :method => "post") do |form|
|
17
|
+
form.should have_selector("input#foo_name", :name => "foo[name]")
|
18
|
+
form.should have_selector("input#foo_active", :name => "foo[active]")
|
19
|
+
form.should have_selector("select#foo_style", :name => "foo[style]")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "foos/show.html.erb" do
|
4
|
+
before(:each) do
|
5
|
+
@foo = assign(:foo, stub_model(Foo,
|
6
|
+
:name => "Name",
|
7
|
+
:active => false,
|
8
|
+
:style => "Style"
|
9
|
+
))
|
10
|
+
end
|
11
|
+
|
12
|
+
it "renders attributes in <p>" do
|
13
|
+
render
|
14
|
+
rendered.should contain("Name".to_s)
|
15
|
+
rendered.should contain(false.to_s)
|
16
|
+
rendered.should contain("Style".to_s)
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -4,10 +4,10 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
- 2
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Corey Ehmke
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-08-
|
19
|
+
date: 2010-08-02 00:00:00 -05:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -72,9 +72,16 @@ files:
|
|
72
72
|
- Rakefile
|
73
73
|
- VERSION
|
74
74
|
- app/controllers/application_controller.rb
|
75
|
+
- app/controllers/foos_controller.rb
|
75
76
|
- app/helpers/application_helper.rb
|
77
|
+
- app/models/foo.rb
|
76
78
|
- app/models/primary.rb
|
77
79
|
- app/models/secondary.rb
|
80
|
+
- app/views/foos/_form.html.erb
|
81
|
+
- app/views/foos/edit.html.erb
|
82
|
+
- app/views/foos/index.html.erb
|
83
|
+
- app/views/foos/new.html.erb
|
84
|
+
- app/views/foos/show.html.erb
|
78
85
|
- app/views/layouts/application.html.erb
|
79
86
|
- autotest/discover.rb
|
80
87
|
- config.ru
|
@@ -93,6 +100,7 @@ files:
|
|
93
100
|
- config/locales/en.yml
|
94
101
|
- config/routes.rb
|
95
102
|
- db/development.sqlite3
|
103
|
+
- db/migrate/20100801224509_create_foos.rb
|
96
104
|
- db/mir_ext_development.sqlite3
|
97
105
|
- db/mir_ext_test.sqlite3
|
98
106
|
- db/schema.rb
|
@@ -101,20 +109,17 @@ files:
|
|
101
109
|
- doc/README_FOR_APP
|
102
110
|
- lib/core_ext/controller_extensions.rb
|
103
111
|
- lib/core_ext/core_ext.rb
|
104
|
-
- lib/core_ext/helper_extensions.rb
|
105
112
|
- lib/mir_extensions.rb
|
113
|
+
- lib/mir_form_builder.rb
|
106
114
|
- lib/tasks/.gitkeep
|
107
|
-
- log/development.log
|
108
115
|
- log/production.log
|
109
116
|
- log/server.log
|
110
|
-
- log/test.log
|
111
117
|
- mir_extensions.gemspec
|
112
118
|
- public/404.html
|
113
119
|
- public/422.html
|
114
120
|
- public/500.html
|
115
121
|
- public/favicon.ico
|
116
122
|
- public/images/rails.png
|
117
|
-
- public/index.html
|
118
123
|
- public/javascripts/application.js
|
119
124
|
- public/javascripts/controls.js
|
120
125
|
- public/javascripts/dragdrop.js
|
@@ -123,11 +128,20 @@ files:
|
|
123
128
|
- public/javascripts/rails.js
|
124
129
|
- public/robots.txt
|
125
130
|
- public/stylesheets/.gitkeep
|
131
|
+
- public/stylesheets/scaffold.css
|
126
132
|
- script/rails
|
127
133
|
- spec/controllers/application_controller_spec.rb
|
134
|
+
- spec/controllers/foos_controller_spec.rb
|
128
135
|
- spec/helpers/application_helper_spec.rb
|
129
136
|
- spec/mir_extensions_spec.rb
|
137
|
+
- spec/routing/foos_routing_spec.rb
|
130
138
|
- spec/spec_helper.rb
|
139
|
+
- spec/support/integration_example_group.rb
|
140
|
+
- spec/views/foos/edit.html.erb_spec.rb
|
141
|
+
- spec/views/foos/index.html.erb_spec.rb
|
142
|
+
- spec/views/foos/new.html.erb_spec.rb
|
143
|
+
- spec/views/foos/show.html.erb_spec.rb
|
144
|
+
- test/integration/foo_test.rb
|
131
145
|
- vendor/plugins/.gitkeep
|
132
146
|
has_rdoc: true
|
133
147
|
homepage: http://github.com/Bantik/mir_extensions
|
@@ -165,6 +179,14 @@ specification_version: 3
|
|
165
179
|
summary: Standard extensions and utility methods for SEO Logic's Rails 3 apps.
|
166
180
|
test_files:
|
167
181
|
- spec/controllers/application_controller_spec.rb
|
182
|
+
- spec/controllers/foos_controller_spec.rb
|
168
183
|
- spec/helpers/application_helper_spec.rb
|
169
184
|
- spec/mir_extensions_spec.rb
|
185
|
+
- spec/routing/foos_routing_spec.rb
|
170
186
|
- spec/spec_helper.rb
|
187
|
+
- spec/support/integration_example_group.rb
|
188
|
+
- spec/views/foos/edit.html.erb_spec.rb
|
189
|
+
- spec/views/foos/index.html.erb_spec.rb
|
190
|
+
- spec/views/foos/new.html.erb_spec.rb
|
191
|
+
- spec/views/foos/show.html.erb_spec.rb
|
192
|
+
- test/integration/foo_test.rb
|
@@ -1,383 +0,0 @@
|
|
1
|
-
module ActionController
|
2
|
-
module Helpers
|
3
|
-
|
4
|
-
def action?( expression )
|
5
|
-
!! ( expression.class == Regexp ? controller.action_name =~ expression : controller.action_name == expression )
|
6
|
-
end
|
7
|
-
|
8
|
-
# Formats an array with HTML line breaks, or the specified delimiter.
|
9
|
-
def array_to_lines(array, delimiter = '<br />')
|
10
|
-
array.blank? ? nil : array * delimiter
|
11
|
-
end
|
12
|
-
|
13
|
-
def checkmark
|
14
|
-
%{<div class="checkmark"></div>}
|
15
|
-
end
|
16
|
-
|
17
|
-
def controller?( expression )
|
18
|
-
!! ( expression.class == Regexp ? controller.controller_name =~ expression : controller.controller_name == expression )
|
19
|
-
end
|
20
|
-
|
21
|
-
# Display CRUD icons or links, according to setting in use_crud_icons method.
|
22
|
-
#
|
23
|
-
# In application_helper.rb:
|
24
|
-
#
|
25
|
-
# def use_crud_icons
|
26
|
-
# true
|
27
|
-
# end
|
28
|
-
#
|
29
|
-
# Then use in index views like this:
|
30
|
-
#
|
31
|
-
# <td class="crud_links"><%= crud_links(my_model, 'my_model', [:show, :edit, :delete]) -%></td>
|
32
|
-
#
|
33
|
-
def crud_links(model, instance_name, actions, args={})
|
34
|
-
_html = ""
|
35
|
-
_options = args.keys.empty? ? '' : ", #{args.map{|k,v| ":#{k} => #{v}"}}"
|
36
|
-
|
37
|
-
if use_crud_icons
|
38
|
-
if actions.include?(:show)
|
39
|
-
_html << eval("link_to image_tag('/images/icons/view.png', :class => 'crud_icon'), model, :title => 'View'#{_options}")
|
40
|
-
end
|
41
|
-
if actions.include?(:edit)
|
42
|
-
_html << eval("link_to image_tag('/images/icons/edit.png', :class => 'crud_icon'), edit_#{instance_name}_path(model), :title => 'Edit'#{_options}")
|
43
|
-
end
|
44
|
-
if actions.include?(:delete)
|
45
|
-
_html << eval("link_to image_tag('/images/icons/delete.png', :class => 'crud_icon'), model, :confirm => 'Are you sure? This action cannot be undone.', :method => :delete, :title => 'Delete'#{_options}")
|
46
|
-
end
|
47
|
-
else
|
48
|
-
if actions.include?(:show)
|
49
|
-
_html << eval("link_to 'View', model, :title => 'View', :class => 'crud_link'#{_options}")
|
50
|
-
end
|
51
|
-
if actions.include?(:edit)
|
52
|
-
_html << eval("link_to 'Edit', edit_#{instance_name}_path(model), :title => 'Edit', :class => 'crud_link'#{_options}")
|
53
|
-
end
|
54
|
-
if actions.include?(:delete)
|
55
|
-
_html << eval("link_to 'Delete', model, :confirm => 'Are you sure? This action cannot be undone.', :method => :delete, :title => 'Delete', :class => 'crud_link'#{_options}")
|
56
|
-
end
|
57
|
-
end
|
58
|
-
_html
|
59
|
-
end
|
60
|
-
|
61
|
-
# Display CRUD icons or links, according to setting in use_crud_icons method.
|
62
|
-
# This method works with nested resources.
|
63
|
-
# Use in index views like this:
|
64
|
-
#
|
65
|
-
# <td class="crud_links"><%= crud_links_for_nested_resource(@my_model, my_nested_model, 'my_model', 'my_nested_model', [:show, :edit, :delete]) -%></td>
|
66
|
-
#
|
67
|
-
def crud_links_for_nested_resource(model, nested_model, model_instance_name, nested_model_instance_name, actions, args={})
|
68
|
-
_html = ""
|
69
|
-
if use_crud_icons
|
70
|
-
if actions.include?(:show)
|
71
|
-
_html << eval("link_to image_tag('/images/icons/view.png', :class => 'crud_icon'), #{model_instance_name}_#{nested_model_instance_name}_path(model, nested_model), :title => 'View'")
|
72
|
-
end
|
73
|
-
|
74
|
-
if actions.include?(:edit)
|
75
|
-
_html << eval("link_to image_tag('/images/icons/edit.png', :class => 'crud_icon'), edit_#{model_instance_name}_#{nested_model_instance_name}_path(model, nested_model), :title => 'Edit'")
|
76
|
-
end
|
77
|
-
|
78
|
-
if actions.include?(:delete)
|
79
|
-
_html << eval("link_to image_tag('/images/icons/delete.png', :class => 'crud_icon'), #{model_instance_name}_#{nested_model_instance_name}_path(model, nested_model), :method => :delete, :confirm => 'Are you sure? This action cannot be undone.', :title => 'Delete'")
|
80
|
-
end
|
81
|
-
end
|
82
|
-
_html
|
83
|
-
end
|
84
|
-
|
85
|
-
# DRY way to return a legend tag that renders correctly in all browsers. This variation allows
|
86
|
-
# for more "stuff" inside the legend tag, e.g. expand/collapse controls, without having to worry
|
87
|
-
# about escape sequences.
|
88
|
-
#
|
89
|
-
# Sample usage:
|
90
|
-
#
|
91
|
-
# <%- legend_block do -%>
|
92
|
-
# <span id="hide_or_show_backlinks" class="show_link" style="background-color: #999999;
|
93
|
-
# border: 1px solid #999999;" onclick="javascript:hide_or_show('backlinks');"></span>Backlinks (<%=
|
94
|
-
# @google_results.size -%>)
|
95
|
-
# <%- end -%>
|
96
|
-
#
|
97
|
-
def legend_block(&block)
|
98
|
-
concat content_tag(:div, capture(&block), :class => "faux_legend")
|
99
|
-
end
|
100
|
-
|
101
|
-
# DRY way to return a legend tag that renders correctly in all browsers
|
102
|
-
def legend_tag(text, args={})
|
103
|
-
_html = %{<div id="#{args[:id]}" class="faux_legend">#{text}</div>\r}
|
104
|
-
_html.gsub!(/ id=""/,'')
|
105
|
-
_html.gsub!(/ class=""/,'')
|
106
|
-
_html
|
107
|
-
end
|
108
|
-
|
109
|
-
def meta_description(content=nil)
|
110
|
-
content_for(:meta_description) { content } unless content.blank?
|
111
|
-
end
|
112
|
-
|
113
|
-
def meta_keywords(content=nil)
|
114
|
-
content_for(:meta_keywords) { content } unless content.blank?
|
115
|
-
end
|
116
|
-
|
117
|
-
def models_for_select( models, label = 'name' )
|
118
|
-
models.map{ |m| [m[label], m.id] }.sort_by{ |e| e[0] }
|
119
|
-
end
|
120
|
-
|
121
|
-
def options_for_array( a, selected = nil, prompt = select_prompt )
|
122
|
-
"<option value=''>#{prompt}</option>" + a.map{ |_e| _flag = _e[0].to_s == selected ? 'selected="1"' : ''; _e.is_a?(Array) ? "<option value=\"#{_e[0]}\" #{_flag}>#{_e[1]}</option>" : "<option>#{_e}</option>" }.to_s
|
123
|
-
end
|
124
|
-
|
125
|
-
# Create a link that is opaque to search engine spiders.
|
126
|
-
def obfuscated_link_to(path, image, label, args={})
|
127
|
-
_html = %{<form action="#{path}" method="get" class="obfuscated_link">}
|
128
|
-
_html << %{ <fieldset><input alt="#{label}" src="#{image}" type="image" /></fieldset>}
|
129
|
-
args.each{ |k,v| _html << %{ <div><input id="#{k.to_s}" name="#{k}" type="hidden" value="#{v}" /></div>} }
|
130
|
-
_html << %{</form>}
|
131
|
-
_html
|
132
|
-
end
|
133
|
-
|
134
|
-
# Wraps the given HTML in Rails' default style to highlight validation errors, if any.
|
135
|
-
def required_field_helper( model, element, html )
|
136
|
-
if model && ! model.errors.empty? && element.is_required
|
137
|
-
return content_tag( :div, html, :class => 'fieldWithErrors' )
|
138
|
-
else
|
139
|
-
return html
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
def select_prompt
|
144
|
-
"Select..."
|
145
|
-
end
|
146
|
-
|
147
|
-
def select_prompt_option
|
148
|
-
"<option value=''>#{select_prompt}</option>"
|
149
|
-
end
|
150
|
-
|
151
|
-
# Use on index pages to create dropdown list of filtering criteria.
|
152
|
-
# Populate the filter list using a constant in the model corresponding to named scopes.
|
153
|
-
#
|
154
|
-
# Usage:
|
155
|
-
#
|
156
|
-
# - item.rb:
|
157
|
-
#
|
158
|
-
# named_scope :active, :conditions => { :is_active => true }
|
159
|
-
# named_scope :inactive, :conditions => { :is_active => false }
|
160
|
-
#
|
161
|
-
# FILTERS = [
|
162
|
-
# {:scope => "all", :label => "All"},
|
163
|
-
# {:scope => "active", :label => "Active Only"},
|
164
|
-
# {:scope => "inactive", :label => "Inactive Only"}
|
165
|
-
# ]
|
166
|
-
#
|
167
|
-
# - items/index.html.erb:
|
168
|
-
#
|
169
|
-
# <%= select_tag_for_filter("items", @filters, params) -%>
|
170
|
-
#
|
171
|
-
# - items_controller.rb:
|
172
|
-
#
|
173
|
-
# def index
|
174
|
-
# @filters = Item::FILTERS
|
175
|
-
# if params[:show] && params[:show] != "all" && @filters.collect{|f| f[:scope]}.include?(params[:show])
|
176
|
-
# @items = eval("@items.#{params[:show]}.order_by(params[:by], params[:dir])")
|
177
|
-
# else
|
178
|
-
# @items = @items.order_by(params[:by], params[:dir])
|
179
|
-
# end
|
180
|
-
# ...
|
181
|
-
# end
|
182
|
-
#
|
183
|
-
def select_tag_for_filter(model, nvpairs, params)
|
184
|
-
return unless model && nvpairs && ! nvpairs.empty?
|
185
|
-
options = { :query => params[:query] }
|
186
|
-
_url = url_for(eval("#{model}_url(options)"))
|
187
|
-
_html = %{<label for="show">Show:</label><br />}
|
188
|
-
_html << %{<select name="show" id="show" onchange="window.location='#{_url}' + '?show=' + this.value">}
|
189
|
-
nvpairs.each do |pair|
|
190
|
-
_html << %{<option value="#{pair[:scope]}"}
|
191
|
-
if params[:show] == pair[:scope] || ((params[:show].nil? || params[:show].empty?) && pair[:scope] == "all")
|
192
|
-
_html << %{ selected="selected"}
|
193
|
-
end
|
194
|
-
_html << %{>#{pair[:label]}}
|
195
|
-
_html << %{</option>}
|
196
|
-
end
|
197
|
-
_html << %{</select>}
|
198
|
-
end
|
199
|
-
|
200
|
-
# Returns a link_to tag with sorting parameters that can be used with ActiveRecord.order_by.
|
201
|
-
#
|
202
|
-
# To use standard resources, specify the resources as a plural symbol:
|
203
|
-
# sort_link(:users, 'email', params)
|
204
|
-
#
|
205
|
-
# To use resources aliased with :as (in routes.rb), specify the aliased route as a string.
|
206
|
-
# sort_link('users_admin', 'email', params)
|
207
|
-
#
|
208
|
-
# You can override the link's label by adding a labels hash to your params in the controller:
|
209
|
-
# params[:labels] = {'user_id' => 'User'}
|
210
|
-
def sort_link(model, field, params, html_options={})
|
211
|
-
if (field.to_sym == params[:by] || field == params[:by]) && params[:dir] == "ASC"
|
212
|
-
classname = "arrow-asc"
|
213
|
-
dir = "DESC"
|
214
|
-
elsif (field.to_sym == params[:by] || field == params[:by])
|
215
|
-
classname = "arrow-desc"
|
216
|
-
dir = "ASC"
|
217
|
-
else
|
218
|
-
dir = "ASC"
|
219
|
-
end
|
220
|
-
|
221
|
-
options = {
|
222
|
-
:anchor => html_options[:anchor] || nil,
|
223
|
-
:by => field,
|
224
|
-
:dir => dir,
|
225
|
-
:query => params[:query],
|
226
|
-
:show => params[:show]
|
227
|
-
}
|
228
|
-
|
229
|
-
options[:show] = params[:show] unless params[:show].blank? || params[:show] == 'all'
|
230
|
-
|
231
|
-
html_options = {
|
232
|
-
:class => "#{classname} #{html_options[:class]}",
|
233
|
-
:style => "color: white; font-weight: #{params[:by] == field ? "bold" : "normal"}; #{html_options[:style]}",
|
234
|
-
:title => "Sort by this field"
|
235
|
-
}
|
236
|
-
|
237
|
-
field_name = params[:labels] && params[:labels][field] ? params[:labels][field] : field.titleize
|
238
|
-
|
239
|
-
_link = model.is_a?(Symbol) ? eval("#{model}_url(options)") : "/#{model}?#{options.to_params}"
|
240
|
-
link_to(field_name, _link, html_options)
|
241
|
-
end
|
242
|
-
|
243
|
-
# Tabbed interface helpers =======================================================================
|
244
|
-
|
245
|
-
# Returns formatted tabs with appropriate JS for activation. Use in conjunction with tab_body.
|
246
|
-
#
|
247
|
-
# Usage:
|
248
|
-
#
|
249
|
-
# <%- tabset do -%>
|
250
|
-
# <%= tab_tag :id => 'ppc_ads', :label => 'PPC Ads', :state => 'active' %>
|
251
|
-
# <%= tab_tag :id => 'budget' %>
|
252
|
-
# <%= tab_tag :id => 'geotargeting' %>
|
253
|
-
# <%- end -%>
|
254
|
-
#
|
255
|
-
def tabset(&proc)
|
256
|
-
concat %{
|
257
|
-
<div class="jump_links">
|
258
|
-
<ul>
|
259
|
-
}
|
260
|
-
yield
|
261
|
-
concat %{
|
262
|
-
</ul>
|
263
|
-
</div>
|
264
|
-
<br style="clear: both;" /><br />
|
265
|
-
<input type="hidden" id="show_tab" />
|
266
|
-
<script type="text/javascript">
|
267
|
-
function hide_all_tabs() { $$('.tab_block').invoke('hide'); }
|
268
|
-
function activate_tab(tab) {
|
269
|
-
$$('.tab_control').each(function(elem){ elem.className = 'tab_control'});
|
270
|
-
$('show_' + tab).className = 'tab_control active';
|
271
|
-
hide_all_tabs();
|
272
|
-
$(tab).toggle();
|
273
|
-
$('show_tab').value = tab
|
274
|
-
}
|
275
|
-
function sticky_tab() { if (location.hash) { activate_tab(location.hash.gsub('#','')); } }
|
276
|
-
Event.observe(window, 'load', function() { sticky_tab(); });
|
277
|
-
</script>
|
278
|
-
}
|
279
|
-
end
|
280
|
-
|
281
|
-
# Returns a tab body corresponding to tabs in a tabset. Make sure that the id of the tab_body
|
282
|
-
# matches the id provided to the tab_tag in the tabset block.
|
283
|
-
#
|
284
|
-
# Usage:
|
285
|
-
#
|
286
|
-
# <%- tab_body :id => 'ppc_ads', :label => 'PPC Ad Details' do -%>
|
287
|
-
# PPC ads form here.
|
288
|
-
# <%- end -%>
|
289
|
-
#
|
290
|
-
# <%- tab_body :id => 'budget' do -%>
|
291
|
-
# Budget form here.
|
292
|
-
# <%- end -%>
|
293
|
-
#
|
294
|
-
# <%- tab_body :id => 'geotargeting' do -%>
|
295
|
-
# Geotargeting form here.
|
296
|
-
# <%- end -%>
|
297
|
-
#
|
298
|
-
def tab_body(args, &proc)
|
299
|
-
concat %{<div id="#{args[:id]}" class="tab_block form_container" style="display: #{args[:display] || 'none'};">}
|
300
|
-
concat %{#{legend_tag args[:label] || args[:id].titleize }}
|
301
|
-
concat %{<a name="#{args[:id]}"></a><br />}
|
302
|
-
yield
|
303
|
-
concat %{</div>}
|
304
|
-
end
|
305
|
-
|
306
|
-
# Returns the necessary HTML for a particular tab. Use inside a tabset block.
|
307
|
-
# Override the default tab label by specifying a :label parameter.
|
308
|
-
# Indicate that the tab should be active by setting its :state to 'active'.
|
309
|
-
# (NOTE: You must define a corresponding CSS style for active tabs.)
|
310
|
-
#
|
311
|
-
# Usage:
|
312
|
-
#
|
313
|
-
# <%= tab_tag :id => 'ppc_ads', :label => 'PPC Ads', :state => 'active' %>
|
314
|
-
#
|
315
|
-
def tab_tag(args, *css_class)
|
316
|
-
%{<li id="show_#{args[:id]}" class="tab_control #{args[:state]}" onclick="window.location='##{args[:id]}'; activate_tab('#{args[:id]}');">#{args[:label] || args[:id].to_s.titleize}</li>}
|
317
|
-
end
|
318
|
-
|
319
|
-
# ================================================================================================
|
320
|
-
|
321
|
-
def tag_for_collapsible_row(obj, params)
|
322
|
-
_html = ""
|
323
|
-
if obj && obj.respond_to?(:parent) && obj.parent
|
324
|
-
_html << %{<tr class="#{obj.class.name.downcase}_#{obj.parent.id} #{params[:class]}" style="display: none; #{params[:style]}">}
|
325
|
-
else
|
326
|
-
_html << %{<tr class="#{params[:class]}" style="#{params[:style]}">}
|
327
|
-
end
|
328
|
-
_html
|
329
|
-
end
|
330
|
-
|
331
|
-
def tag_for_collapsible_row_control(obj)
|
332
|
-
_base_id = "#{obj.class.name.downcase}_#{obj.id}"
|
333
|
-
_html = %{<div id="hide_or_show_#{_base_id}" class="show_link" style="background-color: #999999; border: 1px solid #999999;" onclick="javascript:hide_or_show('#{_base_id}');"></div>}
|
334
|
-
end
|
335
|
-
|
336
|
-
# Create a set of tags for displaying a field label with inline help.
|
337
|
-
# Field label text is appended with a ? icon, which responds to a click
|
338
|
-
# by showing or hiding the provided help text.
|
339
|
-
#
|
340
|
-
# Sample usage:
|
341
|
-
#
|
342
|
-
# <%= tag_for_label_with_inline_help 'Relative Frequency', 'rel_frequency', 'Relative frequency of search traffic for this keyword across multiple search engines, as measured by WordTracker.' %>
|
343
|
-
#
|
344
|
-
# Yields:
|
345
|
-
#
|
346
|
-
# <label for="rel_frequency">Relative Frequency: <%= image_tag "/images/help_icon.png", :onclick => "$('rel_frequency_help').toggle();", :class => 'inline_icon' %></label><br />
|
347
|
-
# <div class="inline_help" id="rel_frequency_help" style="display: none;">
|
348
|
-
# <p>Relative frequency of search traffic for this keyword across multiple search engines, as measured by WordTracker.</p>
|
349
|
-
# </div>
|
350
|
-
def tag_for_label_with_inline_help( label_text, field_id, help_text )
|
351
|
-
_html = ""
|
352
|
-
_html << %{<label for="#{field_id}">#{label_text}}
|
353
|
-
_html << %{<img src="/images/icons/help_icon.png" onclick="$('#{field_id}_help').toggle();" class='inline_icon' />}
|
354
|
-
_html << %{</label><br />}
|
355
|
-
_html << %{<div class="inline_help" id="#{field_id}_help" style="display: none;">}
|
356
|
-
_html << %{<p>#{help_text}</p>}
|
357
|
-
_html << %{</div>}
|
358
|
-
_html
|
359
|
-
end
|
360
|
-
|
361
|
-
# Create a set of tags for displaying a field label followed by instructions.
|
362
|
-
# The instructions are displayed on a new line following the field label.
|
363
|
-
#
|
364
|
-
# Usage:
|
365
|
-
#
|
366
|
-
# <%= tag_for_label_with_instructions 'Status', 'is_active', 'Only active widgets will be visible to the public.' %>
|
367
|
-
#
|
368
|
-
# Yields:
|
369
|
-
#
|
370
|
-
# <label for="is_active">
|
371
|
-
# Status<br />
|
372
|
-
# <span class="instructions">Only active widgets will be visible to the public.</span>
|
373
|
-
# <label><br />
|
374
|
-
def tag_for_label_with_instructions( label_text, field_id, instructions )
|
375
|
-
_html = ""
|
376
|
-
_html << %{<label for="#{field_id}">#{label_text}}
|
377
|
-
_html << %{<span class="instructions">#{instructions}</span>}
|
378
|
-
_html << %{</label><br />}
|
379
|
-
_html
|
380
|
-
end
|
381
|
-
|
382
|
-
end
|
383
|
-
end
|