viewlet 0.0.1 → 0.0.3
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.md +36 -4
- data/examples/bootstrap_progress_bar/bootstrap_progress_bar.html.haml +4 -0
- data/examples/bootstrap_progress_bar/usage.hml.haml +6 -0
- data/lib/viewlet/base.rb +3 -3
- data/lib/viewlet/haml.rb +70 -0
- data/lib/viewlet/helpers.rb +5 -1
- data/lib/viewlet/railtie.rb +5 -1
- data/lib/viewlet/version.rb +1 -1
- metadata +7 -4
data/README.md
CHANGED
@@ -143,7 +143,22 @@ To include list_section viewlet JS in your application add
|
|
143
143
|
|
144
144
|
to your `application.js`
|
145
145
|
|
146
|
-
##
|
146
|
+
## Tips
|
147
|
+
|
148
|
+
* You do not have to provide a block to `viewlet`:
|
149
|
+
|
150
|
+
```haml
|
151
|
+
= viewlet(:password_strength)
|
152
|
+
```
|
153
|
+
|
154
|
+
* You can use hash syntax (and block syntax):
|
155
|
+
|
156
|
+
```haml
|
157
|
+
= viewlet(:password_strength, :levels => %w(none weak good))
|
158
|
+
|
159
|
+
= viewlet(:password_strength, :levels => %w(none weak good)) do |ps|
|
160
|
+
- ps.levels %w(none weak good excellent) # overrides levels
|
161
|
+
```
|
147
162
|
|
148
163
|
* Let's say we decide to make our list_section viewlet use
|
149
164
|
third-party list re-ordering library (e.g. `orderable-list.js`).
|
@@ -189,14 +204,31 @@ that could be used as HTML id.
|
|
189
204
|
`class_name` option lets you set custom viewlet class:
|
190
205
|
|
191
206
|
```haml
|
192
|
-
= viewlet(:list_section, :class_name => "CustomListSectionViewlet") do
|
207
|
+
= viewlet(:list_section, {}, :class_name => "CustomListSectionViewlet") do
|
193
208
|
...
|
194
209
|
```
|
195
210
|
|
196
|
-
*
|
211
|
+
* If you are using HAML you can use special syntax to output a viewlet:
|
197
212
|
|
198
213
|
```haml
|
199
|
-
|
214
|
+
%list_section_viewlet # viewlet name suffixed with '_viewlet'
|
215
|
+
heading "Group members"
|
216
|
+
empty_description "No members in this group"
|
217
|
+
|
218
|
+
collapse_button false
|
219
|
+
add_button do
|
220
|
+
= link_to "Invite Members", new_group_member_path(@group)
|
221
|
+
|
222
|
+
items @group.members
|
223
|
+
|
224
|
+
row_title do |member|
|
225
|
+
.name= member.name
|
226
|
+
.summary= member.summary
|
227
|
+
|
228
|
+
row_details do |member|
|
229
|
+
= render :partial => "some_other_partial", :locals => {:member => member}
|
230
|
+
|
231
|
+
%password_strength_viewlet{:levels => %w(none weak good)}
|
200
232
|
```
|
201
233
|
|
202
234
|
## Todo
|
data/lib/viewlet/base.rb
CHANGED
@@ -17,14 +17,14 @@ module Viewlet
|
|
17
17
|
|
18
18
|
private
|
19
19
|
|
20
|
-
def method_missing(
|
21
|
-
is_write_op = if @variables[
|
20
|
+
def method_missing(variable_name, *args, &block)
|
21
|
+
is_write_op = if @variables[variable_name].is_a?(Proc)
|
22
22
|
block.present?
|
23
23
|
else
|
24
24
|
args.any? || block.present?
|
25
25
|
end
|
26
26
|
|
27
|
-
send("_#{is_write_op ? :write : :read}_variable",
|
27
|
+
send("_#{is_write_op ? :write : :read}_variable", variable_name, *args, &block)
|
28
28
|
end
|
29
29
|
|
30
30
|
def _read_variable(name, *args, &block)
|
data/lib/viewlet/haml.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
Haml::Parser.class_eval do
|
2
|
+
# `%simple_viewlet` becomes `= viewlet(:simple)`
|
3
|
+
# `%complex_viewlet` becomes `= viewlet(:complex) do |viewlet_0|`
|
4
|
+
def push_with_viewlet_tag(node)
|
5
|
+
if node.value[:name].try(:end_with?, "_viewlet")
|
6
|
+
node = build_viewlet_node(node)
|
7
|
+
end
|
8
|
+
push_without_viewlet_tag(node)
|
9
|
+
end
|
10
|
+
alias_method_chain :push, :viewlet_tag
|
11
|
+
|
12
|
+
raise "Haml::Parser#close_script already defined" if private_method_defined?(:close_script)
|
13
|
+
def close_script(node)
|
14
|
+
viewlet_pop
|
15
|
+
end
|
16
|
+
|
17
|
+
# `prop "whatever"` becomes `- viewlet_0.prop "whatever"`
|
18
|
+
def plain_with_viewlet_parent_tag(text, escape_html = nil)
|
19
|
+
if viewlet_definition?
|
20
|
+
silent_script(" #{viewlet_peek}.#{text}")
|
21
|
+
else
|
22
|
+
plain_without_viewlet_parent_tag(text, escape_html)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
alias_method_chain :plain, :viewlet_parent_tag
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def build_viewlet_node(node)
|
30
|
+
name = node.value[:name].gsub(/_viewlet$/, "")
|
31
|
+
attrs = attributes_string(node.value[:attributes_hashes])
|
32
|
+
block = "do |#{viewlet_push}|" if block_opened?
|
33
|
+
script(" viewlet(:#{name} #{attrs}) #{block}")
|
34
|
+
end
|
35
|
+
|
36
|
+
def attributes_string(attributes_hashes)
|
37
|
+
if attributes_hashes.empty?
|
38
|
+
attributes_hashes = ""
|
39
|
+
elsif attributes_hashes.size == 1
|
40
|
+
attributes_hashes = ", #{attributes_hashes.first}"
|
41
|
+
else
|
42
|
+
attributes_hashes = ", (#{attributes_hashes.join(").merge(")})"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def viewlet_peek
|
47
|
+
viewlet_names.last.try(:first)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Viewlet variables can only be configured
|
51
|
+
# on the next indentation level from viewlet call
|
52
|
+
def viewlet_definition?
|
53
|
+
if viewlet_names.last
|
54
|
+
@line.tabs == viewlet_names.last.last + 1
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def viewlet_push
|
59
|
+
viewlet_names.push(["viewlet_#{viewlet_names.size}", @line.tabs])
|
60
|
+
viewlet_peek
|
61
|
+
end
|
62
|
+
|
63
|
+
def viewlet_pop
|
64
|
+
viewlet_names.pop
|
65
|
+
end
|
66
|
+
|
67
|
+
def viewlet_names
|
68
|
+
@viewlet_names ||= []
|
69
|
+
end
|
70
|
+
end
|
data/lib/viewlet/helpers.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
module Viewlet
|
2
2
|
module Helpers
|
3
|
-
def viewlet(name, options={}, &block)
|
3
|
+
def viewlet(name, variables={}, options={}, &block)
|
4
4
|
klass = options[:class_name].try(:constantize) || Base
|
5
5
|
viewlet = klass.new(name, self)
|
6
6
|
|
7
|
+
variables.each do |name, value|
|
8
|
+
viewlet.send(name, value)
|
9
|
+
end
|
10
|
+
|
7
11
|
case block.arity
|
8
12
|
when 0 then block.call
|
9
13
|
when 1 then block.call(viewlet)
|
data/lib/viewlet/railtie.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
module Viewlet
|
2
2
|
class Railtie < ::Rails::Railtie
|
3
|
-
initializer "
|
3
|
+
initializer "viewlet.view_helpers" do
|
4
4
|
ActionView::Base.send :include, Viewlet::Helpers
|
5
5
|
end
|
6
6
|
|
7
|
+
config.before_configuration do
|
8
|
+
require "viewlet/haml" if defined?(Haml)
|
9
|
+
end
|
10
|
+
|
7
11
|
config.to_prepare do |app|
|
8
12
|
Rails.application.config.assets.paths << Rails.root.join("app", "viewlets")
|
9
13
|
end
|
data/lib/viewlet/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: viewlet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Dmitriy Kalinin
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-07-
|
18
|
+
date: 2012-07-24 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -34,11 +34,14 @@ files:
|
|
34
34
|
- MIT.LICENSE
|
35
35
|
- README.md
|
36
36
|
- Rakefile
|
37
|
+
- examples/bootstrap_progress_bar/bootstrap_progress_bar.html.haml
|
38
|
+
- examples/bootstrap_progress_bar/usage.hml.haml
|
37
39
|
- examples/bootstrap_tabs/bootstrap_tabs.html.haml
|
38
40
|
- examples/bootstrap_tabs/plugin.js
|
39
41
|
- examples/bootstrap_tabs/usage.html.haml
|
40
42
|
- lib/viewlet.rb
|
41
43
|
- lib/viewlet/base.rb
|
44
|
+
- lib/viewlet/haml.rb
|
42
45
|
- lib/viewlet/helpers.rb
|
43
46
|
- lib/viewlet/railtie.rb
|
44
47
|
- lib/viewlet/template.rb
|