ioquatix-html_helpers 0.1.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/README +93 -0
- data/lib/html_helpers.rb +5 -0
- data/lib/html_helpers/form_object.rb +25 -0
- data/lib/html_helpers/icons_helper.rb +48 -0
- data/lib/html_helpers/inside_layout.rb +11 -0
- data/lib/html_helpers/tabular_form_builder.rb +123 -0
- data/rails/assets/stylesheets/pagination.css +54 -0
- data/rails/init.rb +0 -0
- metadata +71 -0
data/README
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
Copyright (c) 2008 Samuel Williams.
|
2
|
+
Development proudly sponsored by Orion Transfer Ltd.
|
3
|
+
http://www.oriontransfer.co.nz/
|
4
|
+
|
5
|
+
===== HTML Helpers ====
|
6
|
+
|
7
|
+
As the name implies, HTML Helpers is a library of helper methods for producing nice HTML.
|
8
|
+
|
9
|
+
It is still very basic, but provides three things:
|
10
|
+
|
11
|
+
==== Tabular Form Builder ====
|
12
|
+
|
13
|
+
The tabular form builder creates a <table> for forms. It's fairly easy to use.
|
14
|
+
|
15
|
+
Typically, one creates a form partial
|
16
|
+
|
17
|
+
* users/_form.rhtml
|
18
|
+
<code>
|
19
|
+
<% f.fieldset do %>
|
20
|
+
<%= f.error_messages %>
|
21
|
+
<%= f.text_field :login %>
|
22
|
+
<%= f.text_field :email %>
|
23
|
+
|
24
|
+
<%= f.text_field :password %>
|
25
|
+
|
26
|
+
<%= f.check_box :verified %>
|
27
|
+
<%= f.check_box :deleted %>
|
28
|
+
|
29
|
+
<%= f.submit %>
|
30
|
+
<% end %>
|
31
|
+
</code>
|
32
|
+
|
33
|
+
* users/new.rhtml
|
34
|
+
<code>
|
35
|
+
<h1>New User</h1>
|
36
|
+
|
37
|
+
<% table_form_for :user, :url => {:action => :create} do |f| %>
|
38
|
+
<%= f.render_form %>
|
39
|
+
<% end %>
|
40
|
+
</code>
|
41
|
+
|
42
|
+
==== Icon Tag ====
|
43
|
+
|
44
|
+
This helper basically is a substitute for image_tag with a very specific purpose: putting icons on the page.
|
45
|
+
|
46
|
+
Most people should be familiar with icon sets such as http://www.famfamfam.com/. It is often useful to specify icons
|
47
|
+
in a generic way, especially when there are a lot of them.
|
48
|
+
|
49
|
+
Icon tag helps to minimize the amount of typing needed to put icons on the page. It also integrates with engines.
|
50
|
+
|
51
|
+
For example:
|
52
|
+
|
53
|
+
<code>
|
54
|
+
<%= link_if_authorized icon_tag(:edit), edit_user_path(user) %>
|
55
|
+
</code>
|
56
|
+
|
57
|
+
This searches through a number of different locations. In this case, #{controller} means "users" and #{icon} means :edit. For plugins, it searches:
|
58
|
+
|
59
|
+
- /public/images/#{controller}/#{icon}
|
60
|
+
- /public/plugin_assets/:plugin_name/images/#{controller}/#{icon}
|
61
|
+
- /public/images/default/#{icon}
|
62
|
+
- /public/plugin_assets/:plugin_name/images/default/#{icon}
|
63
|
+
|
64
|
+
Icons must be PNG at this time, but this may change in the future.
|
65
|
+
|
66
|
+
==== Inside Layout ====
|
67
|
+
|
68
|
+
This helper basically allows you to render one layout inside another. For example:
|
69
|
+
|
70
|
+
* layouts/admin.rhtml
|
71
|
+
<code>
|
72
|
+
<% inside_layout 'application' do %>
|
73
|
+
<h1>Admin Interface</h1>
|
74
|
+
<%= yield %>
|
75
|
+
<% end %>
|
76
|
+
</code>
|
77
|
+
|
78
|
+
===== License =====
|
79
|
+
|
80
|
+
This program is free software: you can redistribute it and/or modify
|
81
|
+
it under the terms of the GNU General Public License as published by
|
82
|
+
the Free Software Foundation, either version 3 of the License, or
|
83
|
+
(at your option) any later version.
|
84
|
+
|
85
|
+
This program is distributed in the hope that it will be useful,
|
86
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
87
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
88
|
+
GNU General Public License for more details.
|
89
|
+
|
90
|
+
You should have received a copy of the GNU General Public License
|
91
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
92
|
+
|
93
|
+
|
data/lib/html_helpers.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module ApplicationHelper
|
2
|
+
def submit_button(value = "Save changes", url_for_options = {}, options = {}, *parameters_for_url)
|
3
|
+
options.stringify_keys!
|
4
|
+
|
5
|
+
options["action"] = url_for(url_for_options, *parameters_for_url) if url_for_options.size != 0
|
6
|
+
|
7
|
+
if disable_with = options.delete("disable_with")
|
8
|
+
options["onclick"] = "this.disabled=true;this.value='#{disable_with}';this.form.submit();#{options["onclick"]}"
|
9
|
+
end
|
10
|
+
|
11
|
+
if action = options.delete("action")
|
12
|
+
options["onclick"] = "this.form.action='#{escape_javascript(action)}';#{options['onclick']}"
|
13
|
+
end
|
14
|
+
|
15
|
+
if method = options.delete("method")
|
16
|
+
options["onclick"] = "this.form.method='#{escape_javascript(method)}';#{options['onclick']}"
|
17
|
+
end
|
18
|
+
|
19
|
+
if confirm = options.delete("confirm")
|
20
|
+
options["onclick"] = "if (!#{confirm_javascript_function(confirm)}){return false};#{options['onclick']}"
|
21
|
+
end
|
22
|
+
|
23
|
+
tag :input, { "type" => "submit", "name" => "commit", "value" => value }.update(options.stringify_keys)
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module IconHelper
|
2
|
+
def self.current_plugin(c = caller)
|
3
|
+
current_file = File.expand_path c[0]
|
4
|
+
Engines.plugins.find do |plugin|
|
5
|
+
current_file.index(File.expand_path(plugin.directory)) == 0
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module ApplicationHelper
|
11
|
+
|
12
|
+
DefaultIconCategory = "default"
|
13
|
+
|
14
|
+
def icon_path(category, icon, root = '')
|
15
|
+
File.join('', root, 'images', category.to_s, icon.to_s + '.png')
|
16
|
+
end
|
17
|
+
|
18
|
+
def icon_src(category, icon, root = '')
|
19
|
+
paths = []
|
20
|
+
paths << icon_path(category, icon)
|
21
|
+
paths << icon_path(category, icon, root)
|
22
|
+
paths << icon_path(DefaultIconCategory, icon, root)
|
23
|
+
paths << icon_path(DefaultIconCategory, icon)
|
24
|
+
|
25
|
+
paths.each { |p| $stderr.puts ("Icon Path: " + File.join(RAILS_ROOT, 'public', p)) }
|
26
|
+
return paths.find { |p| File.exist?(File.join(RAILS_ROOT, 'public', p)) }
|
27
|
+
end
|
28
|
+
|
29
|
+
def icon_tag(icon, options = {})
|
30
|
+
category = options.delete(:controller) || options.delete(:category) || controller.controller_name
|
31
|
+
root = options.delete('root') || ''
|
32
|
+
|
33
|
+
if defined? Engines.plugins
|
34
|
+
plugin = options.delete(:plugin) || IconHelper::current_plugin(caller)
|
35
|
+
root = File.join("plugin_assets", plugin.name) unless plugin.nil?
|
36
|
+
end
|
37
|
+
|
38
|
+
css_class = options.delete(:class) || 'icon'
|
39
|
+
|
40
|
+
src = icon_src(category, icon, root)
|
41
|
+
|
42
|
+
if src
|
43
|
+
return tag('img', {'class' => css_class, 'src' => src})
|
44
|
+
else
|
45
|
+
return options[:unavailable]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module ApplicationHelper
|
2
|
+
|
3
|
+
def inside_layout(layout, &block)
|
4
|
+
@template.instance_variable_set("@content_for_layout", capture(&block))
|
5
|
+
|
6
|
+
layout = layout.include?("/") ? layout : "layouts/#{layout}" if layout
|
7
|
+
buffer = eval("_erbout", block.binding)
|
8
|
+
buffer.concat(@template.render_file(layout, true))
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# Good
|
2
|
+
|
3
|
+
class ActionView::Helpers::FormBuilder
|
4
|
+
def render_form(partial = 'form', args = {})
|
5
|
+
ctr = eval("controller", @proc.binding)
|
6
|
+
ctr.send(:render, :partial => partial, :locals => {:f => self}.merge(args))
|
7
|
+
end
|
8
|
+
|
9
|
+
ButtonLabels = {'new' => 'Create', 'edit' => 'Update'}
|
10
|
+
|
11
|
+
def _button_label
|
12
|
+
ctr = eval("controller", @proc.binding)
|
13
|
+
action_name = ctr.action_name
|
14
|
+
return ButtonLabels[action_name] || action_name.camelcase
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
#module ApplicationHelper
|
19
|
+
|
20
|
+
class TabularFormBuilder < ActionView::Helpers::FormBuilder
|
21
|
+
((field_helpers + ["select", "collection_select", "date_select", "time_select", "datetime_select"]) - %w(hidden_field)).each do |selector|
|
22
|
+
src = <<-END_SRC
|
23
|
+
def #{selector}(*args)
|
24
|
+
generic_form_field(#{selector.dump}, *args) { super(*args) }
|
25
|
+
end
|
26
|
+
END_SRC
|
27
|
+
class_eval src, __FILE__, __LINE__
|
28
|
+
end
|
29
|
+
|
30
|
+
def comments(text)
|
31
|
+
tr(td('') + td(text))
|
32
|
+
end
|
33
|
+
|
34
|
+
def submit(text = nil, options = {}, html_options = {})
|
35
|
+
text ||= _button_label
|
36
|
+
generic_field_html(nil, @template.submit_tag(text, html_options), options)
|
37
|
+
end
|
38
|
+
|
39
|
+
def file_column_field(field, options = {})
|
40
|
+
generic_field(field) { @template.file_column_field(@object_name, field, options) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def fieldset(new_section_name = nil, &block)
|
44
|
+
s = ("<legend>#{new_section_name}</legend>" if new_section_name) || ""
|
45
|
+
|
46
|
+
@template.concat("<fieldset>#{s}<table>", block.binding)
|
47
|
+
yield
|
48
|
+
@template.concat("</table></fieldset>", block.binding)
|
49
|
+
end
|
50
|
+
|
51
|
+
def separator(new_section_name = nil)
|
52
|
+
s = ("<legend>#{new_section_name}</legend>" if new_section_name) || ""
|
53
|
+
|
54
|
+
@template.concat("</table></fieldset><fieldset>#{s}<table>", block.binding)
|
55
|
+
end
|
56
|
+
|
57
|
+
def generic_field(field_name, options = {}, &block)
|
58
|
+
field_text = @template.capture(&block)
|
59
|
+
@template.concat(generic_field_html(field_name, field_text, options), block.binding)
|
60
|
+
end
|
61
|
+
|
62
|
+
protected
|
63
|
+
def generic_field_html(field_name, field_text, options = {})
|
64
|
+
required = options.delete(:required) || false
|
65
|
+
required_text = required ? td('*', :class => 'required_field') : td('')
|
66
|
+
|
67
|
+
label_text = options.delete(:label) || field_name.to_s.humanize
|
68
|
+
|
69
|
+
unless label_text.blank?
|
70
|
+
if options[:label] == :after
|
71
|
+
tr(td('') + td(field_text + label(label_text, "#{@object_name}_#{field_name}", true)) + required_text)
|
72
|
+
else
|
73
|
+
tr(
|
74
|
+
td(label(label_text, "#{@object_name}_#{field_name}")) +
|
75
|
+
td(field_text) + required_text
|
76
|
+
)
|
77
|
+
end
|
78
|
+
else # No label
|
79
|
+
tr(td(field_text, :colspan => 2, :style => "text-align: right;") + required_text)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
protected
|
84
|
+
def generic_form_field(selector, *args, &block)
|
85
|
+
field_name = args[0]
|
86
|
+
field_text = @template.capture(&block)
|
87
|
+
|
88
|
+
case selector
|
89
|
+
when "check_box": generic_field_html(field_name, field_text, args[1] || {})
|
90
|
+
when "collection_select": generic_field_html(field_name, field_text, args[4] || {})
|
91
|
+
when "country_select": generic_field_html(field_name, field_text, args[2] || {})
|
92
|
+
when "radio_button": generic_field_html(field_name, field_text, args[2] || {})
|
93
|
+
when "select": generic_field_html(field_name, field_text, args[2] || {})
|
94
|
+
when "time_zone_select": generic_field_html(field_name, field_text, args[2] || {})
|
95
|
+
else generic_field_html(field_name, field_text, args[1] || {})
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def tr content, html_options = {}
|
100
|
+
@template.content_tag 'tr', content, html_options
|
101
|
+
end
|
102
|
+
|
103
|
+
def td content, html_options = {}
|
104
|
+
@template.content_tag 'td', content, html_options
|
105
|
+
end
|
106
|
+
|
107
|
+
def label text, for_field, after = false
|
108
|
+
@template.content_tag 'label', "#{text}#{after ? '' : ':'}", :for => for_field
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def table_form_for(*args, &block)
|
113
|
+
if args.last.is_a? Hash
|
114
|
+
args.last[:builder] = TabularFormBuilder
|
115
|
+
else
|
116
|
+
options = {:builder => TabularFormBuilder}
|
117
|
+
args << options
|
118
|
+
end
|
119
|
+
|
120
|
+
form_for(*args, &block)
|
121
|
+
end
|
122
|
+
|
123
|
+
#end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
|
2
|
+
/*Credits: Dynamic Drive CSS Library */
|
3
|
+
/*URL: http://www.dynamicdrive.com/style/ */
|
4
|
+
|
5
|
+
.pagination {
|
6
|
+
padding: 2px;
|
7
|
+
}
|
8
|
+
|
9
|
+
.pagination ul {
|
10
|
+
margin: 0;
|
11
|
+
padding: 0;
|
12
|
+
text-align: left; /*Set to "right" to right align pagination interface*/
|
13
|
+
font-size: 16px;
|
14
|
+
}
|
15
|
+
|
16
|
+
.pagination li {
|
17
|
+
list-style-type: none;
|
18
|
+
display: inline;
|
19
|
+
padding-bottom: 1px;
|
20
|
+
}
|
21
|
+
|
22
|
+
.pagination a, .pagination a:visited {
|
23
|
+
padding: 0 5px;
|
24
|
+
border: 1px solid #9aafe5;
|
25
|
+
text-decoration: none;
|
26
|
+
color: #2e6ab1;
|
27
|
+
}
|
28
|
+
|
29
|
+
.pagination a:hover, .pagination a:active {
|
30
|
+
border: 1px solid #2b66a5;
|
31
|
+
color: #000;
|
32
|
+
background-color: #ebebeb;
|
33
|
+
}
|
34
|
+
|
35
|
+
.pagination .currentpage {
|
36
|
+
padding: 0 5px;
|
37
|
+
border: 1px solid #2b66a5;
|
38
|
+
text-decoration: none;
|
39
|
+
background-color: #2e6ab1;
|
40
|
+
color: #FFF !important;
|
41
|
+
font-weight: bold;
|
42
|
+
}
|
43
|
+
|
44
|
+
.pagination .disablepage {
|
45
|
+
padding: 0 5px;
|
46
|
+
border: 1px solid #929292;
|
47
|
+
background-color: white;
|
48
|
+
color: #929292;
|
49
|
+
font-weight: ;
|
50
|
+
}
|
51
|
+
|
52
|
+
.pagination a.prevnext {
|
53
|
+
font-weight: bold;
|
54
|
+
}
|
data/rails/init.rb
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ioquatix-html_helpers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Samuel Williams
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-10-24 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: ioquatix-engines
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: "0"
|
23
|
+
version:
|
24
|
+
description:
|
25
|
+
email:
|
26
|
+
executables: []
|
27
|
+
|
28
|
+
extensions: []
|
29
|
+
|
30
|
+
extra_rdoc_files: []
|
31
|
+
|
32
|
+
files:
|
33
|
+
- lib/html_helpers
|
34
|
+
- lib/html_helpers/form_object.rb
|
35
|
+
- lib/html_helpers/icons_helper.rb
|
36
|
+
- lib/html_helpers/inside_layout.rb
|
37
|
+
- lib/html_helpers/tabular_form_builder.rb
|
38
|
+
- lib/html_helpers.rb
|
39
|
+
- rails/assets
|
40
|
+
- rails/assets/stylesheets
|
41
|
+
- rails/assets/stylesheets/pagination.css
|
42
|
+
- rails/init.rb
|
43
|
+
- README
|
44
|
+
has_rdoc: false
|
45
|
+
homepage: http://wiki.oriontransfer.org/?rails:html_helpers
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
|
49
|
+
require_paths:
|
50
|
+
- lib
|
51
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: "0"
|
56
|
+
version:
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: "0"
|
62
|
+
version:
|
63
|
+
requirements: []
|
64
|
+
|
65
|
+
rubyforge_project:
|
66
|
+
rubygems_version: 1.2.0
|
67
|
+
signing_key:
|
68
|
+
specification_version: 2
|
69
|
+
summary: HTML Helpers for Rails. Enhances support for HTML forms, images and layouts.
|
70
|
+
test_files: []
|
71
|
+
|