simple_form-dojo 0.0.2
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.
- checksums.yaml +15 -0
- data/MIT-LICENSE +20 -0
- data/README.markdown +90 -0
- data/Rakefile +35 -0
- data/lib/simple_form-dojo/dojo_props_methods.rb +52 -0
- data/lib/simple_form-dojo/form_builder.rb +218 -0
- data/lib/simple_form-dojo/helpers/form_helper.rb +32 -0
- data/lib/simple_form-dojo/helpers/tabs_helper.rb +79 -0
- data/lib/simple_form-dojo/inputs/boolean_input.rb +19 -0
- data/lib/simple_form-dojo/inputs/collection_input.rb +41 -0
- data/lib/simple_form-dojo/inputs/currency_input.rb +9 -0
- data/lib/simple_form-dojo/inputs/date_time_input.rb +27 -0
- data/lib/simple_form-dojo/inputs/mapping_input.rb +43 -0
- data/lib/simple_form-dojo/inputs/numeric_input.rb +48 -0
- data/lib/simple_form-dojo/inputs/password_input.rb +30 -0
- data/lib/simple_form-dojo/inputs/string_input.rb +39 -0
- data/lib/simple_form-dojo/inputs/text_input.rb +33 -0
- data/lib/simple_form-dojo/inputs.rb +12 -0
- data/lib/simple_form-dojo/version.rb +3 -0
- data/lib/simple_form-dojo.rb +12 -0
- metadata +247 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OWQ5YmFjNTBlNTZmY2JmN2E3YmRiY2Q1OWFmYWYxMDZjMWU5NWZhNw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
OWQ0Y2JkMWZmMWFkZDczYmY2YTY4Nzk0NTEyMDM4MDMwM2RiZDM5Yg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
Njg0NjE1MWFmNDM1NDY2YWMzZjkzMDBkYjEzOTEzOTljNTNiMTdjYmI4OGJh
|
10
|
+
M2ZmMzdhMzg4MDljOWI2NWZhNjdlODY3MGIyMWMwNmMyOGNhNmMzZjE3MTQ1
|
11
|
+
MzEwNzNlYjkzMjNlNGVlOTM0NmVmMGFiMjg0M2VlNDNhNjVjMjk=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
OTI5NjIzYzYwYmY3NDg2YjRmNzkxNjNiYTIyOGZiNTFiYWY3ZmM5ZGM5Y2Nl
|
14
|
+
MzU5MTViNjI5NjI1YmRmYjA0NTcyODI3NjZkMGFhOTVmMDMxMThhMDM3ZDk3
|
15
|
+
OGZiODZlYmE0N2ZmNjE2YWJjYTkzMjI0N2I1NDU3MTlmMWZmOTk=
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2011 Patrick Ward
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.markdown
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
# SimpleFormDojo
|
2
|
+
|
3
|
+
SimpleFormDojo is a collection of helpers for use with [Dojo](http://dojotoolkit.org) and [Rails](http://rubyonrails.org). The goal of the project is to make it simple to create Dijit elements using the existing Rails helper infrastructure.
|
4
|
+
|
5
|
+
The FormBuilder is currently an extension to the [SimpleForm project](https://github.com/plataformatec/simple_form) from [Plataforma](http://blog.plataformatec.com.br/tag/simple_form).
|
6
|
+
|
7
|
+
The TabsHelper was inspired by code from CodeOfficer's [JQuery UI Helpers](https://github.com/CodeOfficer/jquery-ui-rails-helpers)
|
8
|
+
|
9
|
+
## Requirements
|
10
|
+
|
11
|
+
SimpleFormDojo is based on Dojo 1.6.0 and uses the newer data-dojo-type and data-dojo-props attributes in order to be more compliant with HTML 5. It is being developed against the latest version of Rails (currently 3.0.5).
|
12
|
+
|
13
|
+
I don't include the 1.6 dojo toolkit files in the git repository. So, to run the dummy test rails environment you'll need to [grab a copy](http://download.dojotoolkit.org/) of the toolkit files and place them in the spec/dummy/public/javascripts/ directory to run the physical rails tests and see the generated markup correctly.
|
14
|
+
|
15
|
+
## SimpleFormDojo::FormBuilder
|
16
|
+
|
17
|
+
Documentation is TBD, but in general, it works the same way that simple_form works:
|
18
|
+
|
19
|
+
<%= dojo_form_for(@user, :html => { :id => 'userForm' } ) do |f| %>
|
20
|
+
<%= f.error_messages %>
|
21
|
+
<%= f.input :username %>
|
22
|
+
<%= f.input :name %>
|
23
|
+
<%= f.input :email %>
|
24
|
+
<%= f.input :pay_rate, :as => :currency,
|
25
|
+
:dojo_html => { :promptMessage => 'Invalid Amount'
|
26
|
+
:currency => 'USD' }%>
|
27
|
+
<%= f.association :roles, :as => :check_boxes %>
|
28
|
+
<%= f.association :departments, :multiple => true %>
|
29
|
+
<%= f.input :created_at %>
|
30
|
+
<%= f.input :activated, :label => 'Active?', :as => :radio
|
31
|
+
<% end %>
|
32
|
+
|
33
|
+
### Dijit objects currently included in SimpleFormDojo::FormBuilder
|
34
|
+
|
35
|
+
* dijit/form/CurrencyTextBox
|
36
|
+
* dijit/form/DateTextBox
|
37
|
+
* dijit/form/NumberTextBox
|
38
|
+
* dijit/form/SimpleTextarea
|
39
|
+
* dijit/form/Textarea
|
40
|
+
* dijit/form/TextBox
|
41
|
+
* dijit/form/ValidationTextBox
|
42
|
+
* dijit/form/MultiSelect (using option tags only - stores not implemented yet)
|
43
|
+
* dijit/form/FilteringSelect (using options tags only - stores not implemented yet)
|
44
|
+
* dijit/form/Button
|
45
|
+
* dijit/form/CheckBox
|
46
|
+
* dijit/form/Form
|
47
|
+
* dijit/form/RadioButton
|
48
|
+
|
49
|
+
## SimpleFormDojo::Helpers::TabsHelper
|
50
|
+
|
51
|
+
The tabs helper creates markup for dijit.layout.TabContainer.
|
52
|
+
|
53
|
+
<%= dojo_tabs_for do |tab| %>
|
54
|
+
<%= tab.create('Tab Title One') do %>
|
55
|
+
#... tab contents
|
56
|
+
<% end %>
|
57
|
+
<%= tab.create('Tab Title Two') do %>
|
58
|
+
#... tab contents
|
59
|
+
<% end %>
|
60
|
+
<% end %>
|
61
|
+
|
62
|
+
**generates...**
|
63
|
+
|
64
|
+
<div data-dojo-props="doLayout:false" data-dojo-type="dijit.layout.TabContainer" id="tabs">
|
65
|
+
<div data-dojo-props="title:'Tab Title One'" data-dojo-type="dijit.layout.ContentPane">
|
66
|
+
#... tab contents
|
67
|
+
</div>
|
68
|
+
<div data-dojo-props="title:'Tab Title Two'" data-dojo-type="dijit.layout.ContentPane">
|
69
|
+
#... tab contents
|
70
|
+
</div>
|
71
|
+
</div>
|
72
|
+
|
73
|
+
Tabs are rendered in the order you create them.
|
74
|
+
|
75
|
+
Render tabs conditionally by appending a condition to the end of the 'create' block:
|
76
|
+
|
77
|
+
<%= tab.create('Conditional Tab') do %>
|
78
|
+
#... tab contents
|
79
|
+
<% end unless @current_user.nil? %>
|
80
|
+
|
81
|
+
Pass additional HTML options to either the parent DIV or any child tab's:
|
82
|
+
|
83
|
+
<%= dojo_tabs_for(:id => 'my-id', :class => 'new-class', :data-dojo-props => 'doLayout:true') do |tab| %>
|
84
|
+
<%= tab.create('Tab Title One', :style => 'color: #00f') do %>
|
85
|
+
#... tab contents
|
86
|
+
<% end %>
|
87
|
+
<% end %>
|
88
|
+
|
89
|
+
The default DOM ID for the parent div is 'id="tabs"' unless you pass an HTML option with a different value.
|
90
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'rubygems'
|
3
|
+
begin
|
4
|
+
require 'bundler/setup'
|
5
|
+
rescue LoadError
|
6
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'rake'
|
10
|
+
require 'rdoc/task'
|
11
|
+
|
12
|
+
require 'rspec/core'
|
13
|
+
require 'rspec/core/rake_task'
|
14
|
+
|
15
|
+
RSpec::Core::RakeTask.new(:spec)
|
16
|
+
|
17
|
+
task :default => :spec
|
18
|
+
|
19
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
20
|
+
rdoc.rdoc_dir = 'rdoc'
|
21
|
+
rdoc.title = 'SimpleFormDojo'
|
22
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
23
|
+
rdoc.rdoc_files.include('README.rdoc')
|
24
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Run watchr"
|
28
|
+
task :watchr do
|
29
|
+
sh %{bundle exec watchr .watchr}
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Open an irb session preloaded with this library"
|
33
|
+
task :console do
|
34
|
+
sh "irb -rubygems -r ./lib/simple_form-dojo.rb"
|
35
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module SimpleFormDojo
|
2
|
+
module DojoPropsMethods
|
3
|
+
##
|
4
|
+
# Retrieves and merges all dojo_props
|
5
|
+
def get_and_merge_dojo_props!
|
6
|
+
add_dojo_options_to_dojo_props
|
7
|
+
if object.id.present?
|
8
|
+
add_dojo_compliant_id
|
9
|
+
else
|
10
|
+
input_html_options["id"] = nil #let dojo generate internal id
|
11
|
+
end
|
12
|
+
input_html_options[:'data-dojo-props'] = SimpleFormDojo::FormBuilder.encode_as_dojo_props(@dojo_props) if !@dojo_props.blank?
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
##
|
18
|
+
# Retrieves dojo props from :dojo_html => {} options
|
19
|
+
def add_dojo_options_to_dojo_props
|
20
|
+
@dojo_props ||= {}
|
21
|
+
@dojo_props.merge!(html_options_for(:dojo, []))
|
22
|
+
end
|
23
|
+
|
24
|
+
def tag_id index = nil
|
25
|
+
id = sanitized_object_name
|
26
|
+
id << "_#{object.id}"
|
27
|
+
id << index if index
|
28
|
+
id << "_#{sanitized_attribute_name}"
|
29
|
+
id
|
30
|
+
end
|
31
|
+
|
32
|
+
def add_dojo_compliant_id
|
33
|
+
opts = input_html_options
|
34
|
+
if opts.has_key?("index")
|
35
|
+
opts["id"] = opts.fetch("id"){ tag_id opts["index"] }
|
36
|
+
opts.delete("index")
|
37
|
+
elsif defined?(@auto_index)
|
38
|
+
opts["id"] = opts.fetch("id"){ tag_id @auto_index }
|
39
|
+
else
|
40
|
+
opts["id"] = opts.fetch("id"){ tag_id }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def sanitized_attribute_name
|
45
|
+
@sanitized_attribute_name ||= attribute_name.to_s.sub(/\?$/,"")
|
46
|
+
end
|
47
|
+
|
48
|
+
def sanitized_object_name
|
49
|
+
@sanitized_object_name ||= object_name.to_s.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,218 @@
|
|
1
|
+
module SimpleFormDojo
|
2
|
+
class FormBuilder < SimpleForm::FormBuilder
|
3
|
+
include SimpleFormDojo::Inputs
|
4
|
+
# need to include this in order to
|
5
|
+
# get the html_escape method
|
6
|
+
include ERB::Util
|
7
|
+
|
8
|
+
attr_accessor :dojo_props
|
9
|
+
|
10
|
+
map_type :currency, :to => SimpleFormDojo::Inputs::CurrencyInput
|
11
|
+
map_type :date, :time, :datetime, :to => SimpleFormDojo::Inputs::DateTimeInput
|
12
|
+
map_type :select, :radio_buttons, :check_boxes, :to => SimpleFormDojo::Inputs::CollectionInput
|
13
|
+
map_type :integer, :decimal, :float, :to => SimpleFormDojo::Inputs::NumericInput
|
14
|
+
#map_type :password, :text, :text_simple, :file, :to => SimpleFormDojo::Inputs::MappingInput
|
15
|
+
map_type :string, :email, :search, :tel, :url, :to => SimpleFormDojo::Inputs::StringInput
|
16
|
+
map_type :text, :text_simple, :to => SimpleFormDojo::Inputs::TextInput
|
17
|
+
map_type :password, :to => SimpleFormDojo::Inputs::PasswordInput
|
18
|
+
map_type :boolean, :to => SimpleFormDojo::Inputs::BooleanInput
|
19
|
+
|
20
|
+
# Simple override of initializer in order to add in the dojo_props attribute
|
21
|
+
def initialize(object_name, object, template, options, proc)
|
22
|
+
@dojo_props = nil
|
23
|
+
super(object_name, object, template, options, proc)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Creates a button
|
27
|
+
#
|
28
|
+
# overrides simple_form's button method
|
29
|
+
#
|
30
|
+
# dojo_form_for @user do |f|
|
31
|
+
# f.button :submit, :value => 'Save Me'
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# To use dojox/form/BusyButton, pass :busy => true
|
35
|
+
# dojo_form_for @uswer do |f|
|
36
|
+
# f.button :submit, :busy => true, :value => 'Save Me'
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# If :value doesn't exist, tries to determine the
|
40
|
+
# the value based on the current object
|
41
|
+
def button(type, *args, &block)
|
42
|
+
# set options to value if first arg is a Hash
|
43
|
+
options = args.extract_options!
|
44
|
+
button_type = 'dijit/form/Button'
|
45
|
+
button_type = 'dojox/form/BusyButton' if options[:busy]
|
46
|
+
options.reverse_merge!(:'data-dojo-type' => button_type)
|
47
|
+
content = ''
|
48
|
+
if value = options.delete(:value)
|
49
|
+
content = value.html_safe
|
50
|
+
else
|
51
|
+
content = button_default_value
|
52
|
+
end
|
53
|
+
options.reverse_merge!({ :type => type, :value => content })
|
54
|
+
dojo_props = {}
|
55
|
+
dojo_props.merge!(options[:dojo_html]) if options.include?(:dojo_html)
|
56
|
+
options[:'data-dojo-props'] = SimpleFormDojo::FormBuilder.encode_as_dojo_props(dojo_props)
|
57
|
+
options[:class] = "button #{options[:class]}".strip
|
58
|
+
template.content_tag(:button, content, *(args << options), &block)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Basically the same as rails submit_default_value
|
62
|
+
def button_default_value
|
63
|
+
obj = object.respond_to?(:to_model) ? object.to_model : object
|
64
|
+
key = obj ? (obj.persisted? ? :edit : :new) : :submit
|
65
|
+
model = if obj.class.respond_to?(:model_name)
|
66
|
+
obj.class.model_name.human
|
67
|
+
else
|
68
|
+
object_name.to_s.humanize
|
69
|
+
end
|
70
|
+
|
71
|
+
defaults = []
|
72
|
+
defaults << "helpers.submit.#{object_name}.#{key}"
|
73
|
+
defaults << "#{key.to_s.humanize} #{model}"
|
74
|
+
|
75
|
+
I18n.t(defaults.shift, :default => defaults)
|
76
|
+
end
|
77
|
+
|
78
|
+
def dojo_collection_radio_buttons(attribute, collection, value_method,
|
79
|
+
text_method, options={}, html_options={})
|
80
|
+
rendered_collection = render_collection(
|
81
|
+
collection, value_method, text_method, options, html_options
|
82
|
+
) do |item, value, text, default_html_options|
|
83
|
+
local_dojo_props = @dojo_props.dup
|
84
|
+
|
85
|
+
## Checked?
|
86
|
+
#if values_are_equal?(local_dojo_props[:value], value)
|
87
|
+
#local_dojo_props[:checked] = "checked"
|
88
|
+
#default_html_options[:checked] = "checked"
|
89
|
+
#end
|
90
|
+
|
91
|
+
default_html_options[:'data-dojo-props'] = SimpleFormDojo::FormBuilder.encode_as_dojo_props(local_dojo_props) if !local_dojo_props.nil?
|
92
|
+
|
93
|
+
# append the object id to the html id
|
94
|
+
default_html_options["id"] = "#{html_options["id"]}_#{value.to_s.gsub(/\s/, "_").gsub(/[^-\w]/, "").downcase}" if html_options["id"].present?
|
95
|
+
|
96
|
+
builder = instantiate_collection_builder(SimpleForm::ActionViewExtensions::RadioButtonBuilder, attribute, item, value, text, default_html_options)
|
97
|
+
|
98
|
+
if block_given?
|
99
|
+
yield builder
|
100
|
+
else
|
101
|
+
builder.radio_button + builder.label(:class => "collection_radio_buttons")
|
102
|
+
end
|
103
|
+
end
|
104
|
+
wrap_rendered_collection(rendered_collection, options)
|
105
|
+
end
|
106
|
+
|
107
|
+
def dojo_collection_check_boxes(attribute, collection, value_method,
|
108
|
+
text_method, options={}, html_options={})
|
109
|
+
rendered_collection = render_collection(
|
110
|
+
collection, value_method, text_method, options, html_options
|
111
|
+
) do |item, value, text, default_html_options|
|
112
|
+
local_dojo_props = @dojo_props.dup
|
113
|
+
|
114
|
+
## Checked
|
115
|
+
#if values_are_equal?(local_dojo_props[:value], value)
|
116
|
+
#local_dojo_props[:checked] = "checked"
|
117
|
+
#default_html_options[:checked] = "checked"
|
118
|
+
#end
|
119
|
+
default_html_options[:multiple] = true
|
120
|
+
|
121
|
+
default_html_options[:'data-dojo-props'] = SimpleFormDojo::FormBuilder.encode_as_dojo_props(local_dojo_props)
|
122
|
+
|
123
|
+
# append the object id to the html id
|
124
|
+
default_html_options["id"] = "#{html_options["id"]}_#{value.to_s.gsub(/\s/, "_").gsub(/[^-\w]/, "").downcase}" if html_options["id"].present?
|
125
|
+
|
126
|
+
builder = instantiate_collection_builder(SimpleForm::ActionViewExtensions::CheckBoxBuilder, attribute, item, value, text, default_html_options)
|
127
|
+
|
128
|
+
if block_given?
|
129
|
+
yield builder
|
130
|
+
else
|
131
|
+
builder.check_box + builder.label(:class => "collection_check_boxes")
|
132
|
+
end
|
133
|
+
end
|
134
|
+
wrap_rendered_collection(rendered_collection, options)
|
135
|
+
end
|
136
|
+
|
137
|
+
# Adds support for Ajax remote FilteringSelect using a QueryReadStore
|
138
|
+
#
|
139
|
+
# == Example
|
140
|
+
#
|
141
|
+
# simple_form_for @user do |f|
|
142
|
+
# f.association :company, :remote_path => '/companies/qrs'
|
143
|
+
# end
|
144
|
+
# # Will create a QueryReadStore linked to a FilteringSelect
|
145
|
+
#
|
146
|
+
def association(association, options={}, &block)
|
147
|
+
options = options.dup
|
148
|
+
reflection = find_association_reflection(association)
|
149
|
+
raise "Association #{association.inspect} not found" unless reflection
|
150
|
+
store = ""
|
151
|
+
if reflection.macro == :belongs_to
|
152
|
+
options[:input_html] ||= {}
|
153
|
+
attribute = (reflection.respond_to?(:options) && reflection.options[:foreign_key]) || :"#{reflection.name}_id"
|
154
|
+
options[:input_html][:value] ||= object.send(attribute)
|
155
|
+
options[:dojo_html] ||= {}
|
156
|
+
if options[:remote_path] && !options[:dojo_html][:store]
|
157
|
+
options[:collection] = [] #Prevent collections from being loaded
|
158
|
+
qrs_id = "#{object_name.to_s.underscore}_#{object.id.to_s.gsub(/[^\w]/, "")}_#{association}_qrs"
|
159
|
+
path = options.delete(:remote_path)
|
160
|
+
options[:dojo_html][:store] = qrs_id
|
161
|
+
store = qrs(qrs_id, path)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
store.html_safe + super(association, options, &block)
|
166
|
+
end
|
167
|
+
|
168
|
+
# Creates a Dojo QueryReadStore
|
169
|
+
#
|
170
|
+
# dojo_form_for @user do |f|
|
171
|
+
# f.qrs :company_qrs, '/companies/qrs'
|
172
|
+
# end
|
173
|
+
def qrs id, path, dojo_props = {}
|
174
|
+
dojo_props = dojo_props.dup
|
175
|
+
options = {:'data-dojo-type' => 'dojox/data/QueryReadStore'}
|
176
|
+
dojo_props[:url] = "'#{path}'"
|
177
|
+
options[:'data-dojo-props'] = SimpleFormDojo::FormBuilder.encode_as_dojo_props(dojo_props)
|
178
|
+
options[:'data-dojo-id'] = id
|
179
|
+
options[:style] ||= "display: none;"
|
180
|
+
template.content_tag(:span, nil, options)
|
181
|
+
end
|
182
|
+
|
183
|
+
##
|
184
|
+
# The dojo props string is evaluated as javascript,
|
185
|
+
# can therefore contain any valid javascript object
|
186
|
+
# and cannot be encoded as JSON
|
187
|
+
def self.encode_as_dojo_props(options)
|
188
|
+
encode_obj(options)
|
189
|
+
.slice(1..-2)
|
190
|
+
.html_safe
|
191
|
+
end
|
192
|
+
|
193
|
+
def self.encode_obj(obj)
|
194
|
+
case obj
|
195
|
+
when Hash
|
196
|
+
"{#{obj.collect{|k, v| "#{k}:#{encode_obj(v)}"}.join(', ')}}"
|
197
|
+
when Array
|
198
|
+
"[#{obj.collect{|v| encode_obj(v)}.join(', ')}]"
|
199
|
+
else
|
200
|
+
obj.to_s
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
private
|
205
|
+
|
206
|
+
def values_are_equal?(obj_value, item_value)
|
207
|
+
value = obj_value
|
208
|
+
if value.is_a?(String)
|
209
|
+
values = obj_value[/\[([,0-9\s]+)\]/,1]
|
210
|
+
unless values.nil?
|
211
|
+
return values.tr(' ','').split(',').include?(item_value.to_s)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
(value.to_s == item_value.to_s ? true : false)
|
215
|
+
end
|
216
|
+
|
217
|
+
end
|
218
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module SimpleFormDojo
|
2
|
+
module Helpers
|
3
|
+
module FormHelper
|
4
|
+
|
5
|
+
def dojo_form_for(record_or_name_or_array, *args, &block)
|
6
|
+
options = args.extract_options!.reverse_merge(:builder => SimpleFormDojo::FormBuilder)
|
7
|
+
options[:html] ||= {}
|
8
|
+
options[:html][:'data-dojo-id'] ||= options[:html][:id] if options[:html][:id]
|
9
|
+
options[:html][:'data-dojo-type'] ||= 'dijit/form/Form'
|
10
|
+
simple_form_for(record_or_name_or_array, *(args << options), &block).tap do |output|
|
11
|
+
form_callbacks.each do |callback|
|
12
|
+
output << callback.call
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def dojo_fields_for(*args, &block)
|
18
|
+
options = args.extract_options!.reverse_merge(:builder => SimpleFormDojo::FormBuilder)
|
19
|
+
simple_fields_for(*(args << options), &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def form_associations
|
23
|
+
@form_associations ||= []
|
24
|
+
end
|
25
|
+
|
26
|
+
def form_callbacks
|
27
|
+
@form_callbacks ||= []
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
ActionView::Base.send(:include, SimpleFormDojo::Helpers::FormHelper)
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'action_view'
|
2
|
+
|
3
|
+
module SimpleFormDojo
|
4
|
+
# = SimpleFormDojo Dojo Tabs Helper
|
5
|
+
module Helpers
|
6
|
+
# Provides methods to generate HTML markup for dijit/layout/TabContainer objects
|
7
|
+
#
|
8
|
+
# ==
|
9
|
+
module TabsHelper
|
10
|
+
# Returns an HTML block tag of type DIV with the appropriate dojo-data-type.
|
11
|
+
# You must pass a block of tabs as an argument.
|
12
|
+
#
|
13
|
+
# ==== Options
|
14
|
+
# The +options+ hash is used to pass additional HTML attributes to the parent DIV.
|
15
|
+
#
|
16
|
+
# The default dojo-data-props attribute is set to "doLayout:false".
|
17
|
+
#
|
18
|
+
# The default id attribute is set to "tabs".
|
19
|
+
#
|
20
|
+
# ==== Examples
|
21
|
+
#
|
22
|
+
# <%= dojo_tabs_for do |tab| %>
|
23
|
+
# <%= tab.create('Tab Title One') do %>
|
24
|
+
# #... tab contents
|
25
|
+
# <% end %>
|
26
|
+
# <% end %>
|
27
|
+
# # => <div data-dojo-props="doLayout:false" data-dojo-type="dijit/layout/TabContainer" id="tabs">
|
28
|
+
# # => <div data-dojo-props="title:'Tab Title One'" data-dojo-type="dijit/layout/ContentPane">
|
29
|
+
# # => ... tab contents
|
30
|
+
# # => </div>
|
31
|
+
# # => </div>
|
32
|
+
def dojo_tabs_for( *options, &block )
|
33
|
+
raise ArgumentError, "Missing block" unless block_given?
|
34
|
+
raw SimpleFormDojo::Helpers::TabsHelper::TabsRenderer.new( *options, &block ).render
|
35
|
+
end
|
36
|
+
|
37
|
+
class TabsRenderer
|
38
|
+
include ActionView::Helpers::CaptureHelper
|
39
|
+
def initialize( options={}, &block )
|
40
|
+
raise ArgumentError, "Missing block" unless block_given?
|
41
|
+
@template = eval( 'self', block.binding )
|
42
|
+
@options = options
|
43
|
+
@tabs = []
|
44
|
+
yield self
|
45
|
+
end
|
46
|
+
|
47
|
+
def create(title, options={}, &block)
|
48
|
+
raise ArgumentError, "Block needed for TabsRenderer#CREATE" unless block_given?
|
49
|
+
@tabs << [ title, options, block ]
|
50
|
+
# had to return an empty string. Otherwise, the @tabs object was being
|
51
|
+
# returned when used with the <%= tab.create('title') %> syntax
|
52
|
+
return ''
|
53
|
+
end
|
54
|
+
|
55
|
+
def render
|
56
|
+
content_tag( :div, raw([render_tabs].join), { :id => :tabs,
|
57
|
+
"data-dojo-props" => "doLayout:false",
|
58
|
+
"data-dojo-type" => "dijit/layout/TabContainer"
|
59
|
+
}.merge(@options) )
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def render_tabs
|
65
|
+
@tabs.collect do |tab|
|
66
|
+
content_tag(:div, capture( &tab[2] ), tab[1].merge( "data-dojo-type" => "dijit/layout/ContentPane",
|
67
|
+
"data-dojo-props" => "title:'#{tab[0]}'"))
|
68
|
+
end.join.to_s
|
69
|
+
end
|
70
|
+
|
71
|
+
def method_missing( *args, &block )
|
72
|
+
@template.send( *args, &block )
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
ActionView::Base.send(:include, SimpleFormDojo::Helpers::TabsHelper)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module SimpleFormDojo
|
2
|
+
module Inputs
|
3
|
+
class BooleanInput < SimpleForm::Inputs::BooleanInput
|
4
|
+
include DojoPropsMethods
|
5
|
+
|
6
|
+
def input
|
7
|
+
input_html_options[:'data-dojo-type'] ||= dojo_type
|
8
|
+
get_and_merge_dojo_props!
|
9
|
+
super
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
def dojo_type
|
15
|
+
'dijit/form/CheckBox'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module SimpleFormDojo
|
2
|
+
module Inputs
|
3
|
+
class CollectionInput < SimpleForm::Inputs::CollectionInput
|
4
|
+
|
5
|
+
include DojoPropsMethods
|
6
|
+
|
7
|
+
def input
|
8
|
+
input_html_options[:'data-dojo-type'] ||= dojo_type
|
9
|
+
infer_dojo_props_from_validations!
|
10
|
+
get_and_merge_dojo_props!
|
11
|
+
|
12
|
+
label_method, value_method = detect_collection_methods
|
13
|
+
collection_method = @builder.respond_to?(:"dojo_collection_#{input_type}") ?
|
14
|
+
"dojo_collection_#{input_type}" :
|
15
|
+
"collection_#{input_type}"
|
16
|
+
@builder.dojo_props = @dojo_props
|
17
|
+
@builder.send(collection_method, attribute_name, collection, value_method,
|
18
|
+
label_method, input_options, input_html_options)
|
19
|
+
end
|
20
|
+
|
21
|
+
protected
|
22
|
+
|
23
|
+
def dojo_type
|
24
|
+
case input_type
|
25
|
+
when :check_boxes
|
26
|
+
'dijit/form/CheckBox'
|
27
|
+
when :radio_buttons
|
28
|
+
'dijit/form/RadioButton'
|
29
|
+
when :select
|
30
|
+
(input_html_options.has_key?(:multiple) ? 'dijit/form/MultiSelect' : 'dijit/form/FilteringSelect')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def infer_dojo_props_from_validations!
|
35
|
+
@dojo_props ||= {}
|
36
|
+
@dojo_props.merge!(:required => has_required?)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module SimpleFormDojo
|
2
|
+
module Inputs
|
3
|
+
class DateTimeInput < SimpleForm::Inputs::StringInput
|
4
|
+
|
5
|
+
include DojoPropsMethods
|
6
|
+
|
7
|
+
def input
|
8
|
+
input_html_options[:type] = :text
|
9
|
+
input_html_options[:'data-dojo-type'] ||= dojo_type
|
10
|
+
get_and_merge_dojo_props!
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def dojo_type
|
17
|
+
case input_type
|
18
|
+
when :date, :datetime
|
19
|
+
'dijit/form/DateTextBox'
|
20
|
+
when :time
|
21
|
+
'dijit/form/TimeTextBox'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module SimpleFormDojo
|
2
|
+
module Inputs
|
3
|
+
# Uses MapType to handle basic input types. See the original simple_form
|
4
|
+
# source for details.
|
5
|
+
class MappingInput < SimpleForm::Inputs::MappingInput
|
6
|
+
include DojoPropsMethods
|
7
|
+
|
8
|
+
map_type :text_simple, :to => :text_area
|
9
|
+
|
10
|
+
def input
|
11
|
+
input_html_options[:'data-dojo-type'] ||= dojo_type
|
12
|
+
infer_dojo_props_from_validations!
|
13
|
+
get_and_merge_dojo_props!
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def dojo_type
|
20
|
+
case input_type
|
21
|
+
when :password
|
22
|
+
if has_required?
|
23
|
+
'dijit/form/ValidationTextBox'
|
24
|
+
else
|
25
|
+
'dijit/form/TextBox'
|
26
|
+
end
|
27
|
+
when :text
|
28
|
+
'dijit/form/Textarea'
|
29
|
+
when :text_simple
|
30
|
+
'dijit/form/SimpleTextarea'
|
31
|
+
when :file
|
32
|
+
raise('File fields have not been implemented yet!')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def infer_dojo_props_from_validations!
|
37
|
+
@dojo_props ||= {}
|
38
|
+
@dojo_props.merge!(:required => true) if has_required?
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module SimpleFormDojo
|
2
|
+
module Inputs
|
3
|
+
class NumericInput < SimpleForm::Inputs::NumericInput
|
4
|
+
|
5
|
+
include DojoPropsMethods
|
6
|
+
|
7
|
+
def input
|
8
|
+
input_html_options[:type] = :text
|
9
|
+
input_html_options[:'data-dojo-type'] ||= dojo_type
|
10
|
+
infer_dojo_props_from_validations!
|
11
|
+
get_and_merge_dojo_props!
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def dojo_type
|
18
|
+
'dijit/form/NumberTextBox'
|
19
|
+
end
|
20
|
+
|
21
|
+
def integer?
|
22
|
+
if input_type == :integer
|
23
|
+
@dojo_props ||= {}
|
24
|
+
@dojo_props[:constraints] ||= {}
|
25
|
+
@dojo_props[:constraints][:places] ||= 0;
|
26
|
+
true
|
27
|
+
else
|
28
|
+
false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def infer_dojo_props_from_validations!
|
33
|
+
@dojo_props ||= {}
|
34
|
+
@dojo_props.merge!(:required => true) if has_required?
|
35
|
+
if has_validators?
|
36
|
+
# numeric_validator and find_numericality_validator inherited from SimpleForm
|
37
|
+
numeric_validator = find_numericality_validator or return
|
38
|
+
validator_options = numeric_validator.options
|
39
|
+
@dojo_props[:constraints] ||= {}
|
40
|
+
@dojo_props[:constraints][:min] ||= minimum_value(validator_options)
|
41
|
+
@dojo_props[:constraints][:max] ||= maximum_value(validator_options)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module SimpleFormDojo
|
2
|
+
module Inputs
|
3
|
+
class PasswordInput < SimpleForm::Inputs::PasswordInput
|
4
|
+
include DojoPropsMethods
|
5
|
+
|
6
|
+
def input
|
7
|
+
input_html_options[:'data-dojo-type'] ||= dojo_type
|
8
|
+
infer_dojo_props_from_validations!
|
9
|
+
get_and_merge_dojo_props!
|
10
|
+
super
|
11
|
+
end
|
12
|
+
|
13
|
+
protected
|
14
|
+
|
15
|
+
def dojo_type
|
16
|
+
if has_required?
|
17
|
+
'dijit/form/ValidationTextBox'
|
18
|
+
else
|
19
|
+
'dijit/form/TextBox'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def infer_dojo_props_from_validations!
|
24
|
+
@dojo_props ||= {}
|
25
|
+
@dojo_props.merge!(:required => true) if has_required?
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module SimpleFormDojo
|
2
|
+
module Inputs
|
3
|
+
class StringInput < SimpleForm::Inputs::StringInput
|
4
|
+
include DojoPropsMethods
|
5
|
+
EMAIL_REGEXP="^[\\\\w!#%$*+=?`{|}~^-]+(?:[\\\\w!#%$*+=?`{|}~^.-])*@(?:[a-zA-Z0-9-]+\\\\.)+[a-zA-Z]{2,6}$"
|
6
|
+
|
7
|
+
def input
|
8
|
+
input_html_options[:'data-dojo-type'] ||= dojo_type
|
9
|
+
infer_dojo_props_from_validations!
|
10
|
+
get_and_merge_dojo_props!
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def dojo_type
|
17
|
+
if has_required? || [:tel, :email].include?(input_type)
|
18
|
+
'dijit/form/ValidationTextBox'
|
19
|
+
else
|
20
|
+
'dijit/form/TextBox'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def infer_dojo_props_from_validations!
|
25
|
+
@dojo_props = {}
|
26
|
+
@dojo_props.merge!(:required => true) if has_required?
|
27
|
+
case input_type
|
28
|
+
when :email
|
29
|
+
@dojo_props[:pattern] ||= "'#{EMAIL_REGEXP}'"
|
30
|
+
@dojo_props[:invalidMessage] = "'Invalid email format.'"
|
31
|
+
when :tel
|
32
|
+
@dojo_props[:pattern] ||= "'^[\\\\d(.)+\\\\s-]+$'"
|
33
|
+
@dojo_props[:invalidMessage] = "'Invalid phone format.'"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module SimpleFormDojo
|
2
|
+
module Inputs
|
3
|
+
class TextInput < SimpleForm::Inputs::TextInput
|
4
|
+
include DojoPropsMethods
|
5
|
+
|
6
|
+
#map_type :text_simple, :to => :text_area
|
7
|
+
|
8
|
+
def input
|
9
|
+
input_html_options[:'data-dojo-type'] ||= dojo_type
|
10
|
+
infer_dojo_props_from_validations!
|
11
|
+
get_and_merge_dojo_props!
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def dojo_type
|
18
|
+
case input_type
|
19
|
+
when :text
|
20
|
+
'dijit/form/Textarea'
|
21
|
+
when :text_simple
|
22
|
+
'dijit/form/SimpleTextarea'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def infer_dojo_props_from_validations!
|
27
|
+
@dojo_props ||= {}
|
28
|
+
@dojo_props.merge!(:required => true) if has_required?
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module SimpleFormDojo
|
2
|
+
module Inputs
|
3
|
+
autoload :StringInput, 'simple_form-dojo/inputs/string_input'
|
4
|
+
autoload :DateTimeInput, 'simple_form-dojo/inputs/date_time_input'
|
5
|
+
autoload :NumericInput, 'simple_form-dojo/inputs/numeric_input'
|
6
|
+
autoload :TextInput, 'simple_form-dojo/inputs/text_input'
|
7
|
+
autoload :PasswordInput, 'simple_form-dojo/inputs/password_input'
|
8
|
+
autoload :CollectionInput, 'simple_form-dojo/inputs/collection_input'
|
9
|
+
autoload :CurrencyInput, 'simple_form-dojo/inputs/currency_input'
|
10
|
+
autoload :BooleanInput, 'simple_form-dojo/inputs/boolean_input'
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'action_view'
|
2
|
+
require 'simple_form'
|
3
|
+
require 'simple_form-dojo/version'
|
4
|
+
require 'simple_form-dojo/helpers/tabs_helper'
|
5
|
+
require 'simple_form-dojo/helpers/form_helper'
|
6
|
+
|
7
|
+
module SimpleFormDojo
|
8
|
+
autoload :FormBuilder, 'simple_form-dojo/form_builder'
|
9
|
+
autoload :Inputs, 'simple_form-dojo/inputs'
|
10
|
+
autoload :DojoPropsMethods, 'simple_form-dojo/dojo_props_methods'
|
11
|
+
end
|
12
|
+
|
metadata
ADDED
@@ -0,0 +1,247 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: simple_form-dojo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alex Giouzenis
|
8
|
+
- Patrick Ward
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-04-05 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: simple_form
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ~>
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 2.1.0
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 2.1.0
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rspec
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 2.12.0
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 2.12.0
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rails
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ~>
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 3.2.9
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 3.2.9
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rspec-rails
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 2.12.0
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 2.12.0
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rspec-html-matchers
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: nokogiri
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ~>
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 1.5.5
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ~>
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 1.5.5
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: capybara
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ~>
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: 2.0.1
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ~>
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: 2.0.1
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: spork
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ~>
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 0.9.2
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.9.2
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: sqlite3
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ~>
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 1.3.6
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ~>
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: 1.3.6
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: factory_girl_rails
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ~>
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 4.1.0
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ~>
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: 4.1.0
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: database_cleaner
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ~>
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: 0.9.1
|
161
|
+
type: :development
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - ~>
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: 0.9.1
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: watchr
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ! '>='
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
type: :development
|
176
|
+
prerelease: false
|
177
|
+
version_requirements: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
- !ruby/object:Gem::Dependency
|
183
|
+
name: awesome_print
|
184
|
+
requirement: !ruby/object:Gem::Requirement
|
185
|
+
requirements:
|
186
|
+
- - ! '>='
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0'
|
189
|
+
type: :development
|
190
|
+
prerelease: false
|
191
|
+
version_requirements: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ! '>='
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
|
+
description: SimpleFormDojo is a collection of helpers for use with Dojo and Rails.
|
197
|
+
The goal of the project is to make it simple to create Dijit elements using the
|
198
|
+
existing Rails helper infrastructure.
|
199
|
+
email:
|
200
|
+
- alexandrosg@gmail.com
|
201
|
+
executables: []
|
202
|
+
extensions: []
|
203
|
+
extra_rdoc_files: []
|
204
|
+
files:
|
205
|
+
- lib/simple_form-dojo/form_builder.rb
|
206
|
+
- lib/simple_form-dojo/version.rb
|
207
|
+
- lib/simple_form-dojo/inputs/mapping_input.rb
|
208
|
+
- lib/simple_form-dojo/inputs/numeric_input.rb
|
209
|
+
- lib/simple_form-dojo/inputs/boolean_input.rb
|
210
|
+
- lib/simple_form-dojo/inputs/text_input.rb
|
211
|
+
- lib/simple_form-dojo/inputs/collection_input.rb
|
212
|
+
- lib/simple_form-dojo/inputs/password_input.rb
|
213
|
+
- lib/simple_form-dojo/inputs/date_time_input.rb
|
214
|
+
- lib/simple_form-dojo/inputs/string_input.rb
|
215
|
+
- lib/simple_form-dojo/inputs/currency_input.rb
|
216
|
+
- lib/simple_form-dojo/dojo_props_methods.rb
|
217
|
+
- lib/simple_form-dojo/inputs.rb
|
218
|
+
- lib/simple_form-dojo/helpers/form_helper.rb
|
219
|
+
- lib/simple_form-dojo/helpers/tabs_helper.rb
|
220
|
+
- lib/simple_form-dojo.rb
|
221
|
+
- MIT-LICENSE
|
222
|
+
- Rakefile
|
223
|
+
- README.markdown
|
224
|
+
homepage: https://github.com/agios/simple_form-dojo
|
225
|
+
licenses: []
|
226
|
+
metadata: {}
|
227
|
+
post_install_message:
|
228
|
+
rdoc_options: []
|
229
|
+
require_paths:
|
230
|
+
- lib
|
231
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
232
|
+
requirements:
|
233
|
+
- - ! '>='
|
234
|
+
- !ruby/object:Gem::Version
|
235
|
+
version: '0'
|
236
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
237
|
+
requirements:
|
238
|
+
- - ! '>='
|
239
|
+
- !ruby/object:Gem::Version
|
240
|
+
version: '0'
|
241
|
+
requirements: []
|
242
|
+
rubyforge_project: simple_form-dojo
|
243
|
+
rubygems_version: 2.0.3
|
244
|
+
signing_key:
|
245
|
+
specification_version: 4
|
246
|
+
summary: Dojo Toolkit helpers for Rails 3
|
247
|
+
test_files: []
|