rails_blocks 0.9.0.beta.4 → 0.9.0.beta.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/helpers/block_helper.rb +39 -19
- data/lib/rails_blocks/names.rb +5 -2
- data/lib/rails_blocks/path.rb +46 -15
- data/lib/rails_blocks/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc74656544b8c832b8a27f558279e3e9ee410e7572c22dbc03227b8b058ec2f0
|
4
|
+
data.tar.gz: d040fa04f369046ee122bf644acfb05949a0fa182f623ae3930c2333d079c4c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25e2b23f1803c200a8e75da1b4944b9733e2feb2c4bb4a326a7c4133a88c52e2653a13b5aa81e28a2e8cc1e581c1e1947006573fd0798cabef1f47c63dfda492
|
7
|
+
data.tar.gz: 56545688413c6e6c66f9180421cdd6d25e3f0e1bcebc74b3b88fe838bca4ab373367fcf7fe8e66c0b7606c4233bccc927b2f3e56d118c6a492edb7f3708b6140
|
data/app/helpers/block_helper.rb
CHANGED
@@ -16,21 +16,21 @@ end
|
|
16
16
|
module BlockHelper
|
17
17
|
include RailsBlocks::Path
|
18
18
|
include RailsBlocks::Names
|
19
|
-
|
19
|
+
|
20
20
|
BEM_KEYS = [:tag, :class, :attrs, :mods, :mix, :data, :levels, :content]
|
21
|
-
|
21
|
+
|
22
22
|
def bem_page(options, &block)
|
23
23
|
@page_options = options
|
24
24
|
block_given? ? capture(&block) : ''
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
def page_options
|
28
28
|
defaults = {
|
29
29
|
levels: RailsBlocks.config.levels
|
30
30
|
}
|
31
31
|
defaults.merge @page_options || {}
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
#TODO бога ради, отрефактори это дерьмо
|
35
35
|
def b(b_name, options = {}, &block)
|
36
36
|
options = page_options.merge options
|
@@ -41,7 +41,7 @@ module BlockHelper
|
|
41
41
|
pop_context_block
|
42
42
|
result
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
def b_classes(b_name, options = {})
|
46
46
|
parent_block = context_block
|
47
47
|
push_context_block b_name, options
|
@@ -51,14 +51,14 @@ module BlockHelper
|
|
51
51
|
pop_context_block
|
52
52
|
classes
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
def b_context(b_name, options = {}, &block)
|
56
56
|
push_context_block b_name, options
|
57
57
|
result = capture(&block)
|
58
58
|
pop_context_block
|
59
59
|
result
|
60
60
|
end
|
61
|
-
|
61
|
+
|
62
62
|
def e(e_name, options = {}, &block)
|
63
63
|
options = page_options.merge options
|
64
64
|
parent_block = options[:b] || context_block
|
@@ -67,7 +67,7 @@ module BlockHelper
|
|
67
67
|
template = element_template parent_block, e_name, options
|
68
68
|
entity(template, :elem, e_name, options, &block)
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
def e_classes(e_name, options = {})
|
72
72
|
parent_block = options[:b] || context_block
|
73
73
|
raise RailsBlocks::NoBlockContextError unless parent_block
|
@@ -75,9 +75,11 @@ module BlockHelper
|
|
75
75
|
options[:parent_block] = parent_block
|
76
76
|
element_classes(parent_block, e_name, options).join(' ')
|
77
77
|
end
|
78
|
-
|
78
|
+
|
79
79
|
def entity(template, type, name, options, &block)
|
80
|
+
# p template
|
80
81
|
ctx = RenderContext.new
|
82
|
+
# content = block ? block.call(ctx) : options[:content]
|
81
83
|
content = block ? capture(ctx, &block) : options[:content]
|
82
84
|
ctx.slots.each {|k, v| ctx.rendered_slots[k] = capture(&v)}
|
83
85
|
#важно заполнять публичные поля только после того, как закапчюрится то, что внутри энтити, иначе они перезапишутся.
|
@@ -85,16 +87,33 @@ module BlockHelper
|
|
85
87
|
@current_options = options
|
86
88
|
@current_entity = {type: type, name: name}
|
87
89
|
template.nil? ? empty(content) : render(template: template, locals: {content: content, options: options, slots: ctx.rendered_slots})
|
90
|
+
|
91
|
+
# result = nil
|
92
|
+
# if template.nil?
|
93
|
+
# result = empty(content&.to_s&.html_safe)
|
94
|
+
# else
|
95
|
+
# result = my_render(template: template, locals: {content: content&.to_s&.html_safe, options: options, slots: ctx.rendered_slots})
|
96
|
+
# end
|
97
|
+
# result.html_safe
|
98
|
+
end
|
99
|
+
|
100
|
+
def my_render(opts)
|
101
|
+
p opts[:template]["file"], opts[:locals]
|
102
|
+
if(opts[:template][:template])
|
103
|
+
return opts[:template][:template].render(self, opts[:locals]).html_safe
|
104
|
+
end
|
105
|
+
# return opts[:locals][:content] || 'foo'
|
88
106
|
end
|
89
|
-
|
107
|
+
|
90
108
|
def empty(content)
|
109
|
+
# content_tag(bem_tag, content, bem_attrs_without_tag, false).html_safe
|
91
110
|
content_tag bem_tag, content, bem_attrs_without_tag
|
92
111
|
end
|
93
|
-
|
112
|
+
|
94
113
|
def bem_tag
|
95
114
|
bem_attrs[:tag]
|
96
115
|
end
|
97
|
-
|
116
|
+
|
98
117
|
def bem_attrs
|
99
118
|
if @attrs.nil?
|
100
119
|
@attrs = {class: current_entity_classes.join(' ')}
|
@@ -106,7 +125,7 @@ module BlockHelper
|
|
106
125
|
|
107
126
|
@attrs
|
108
127
|
end
|
109
|
-
|
128
|
+
|
110
129
|
def bem_attrs_without_tag
|
111
130
|
bem_attrs.except :tag
|
112
131
|
end
|
@@ -129,7 +148,7 @@ module BlockHelper
|
|
129
148
|
return @current_options[:mix].push(mix) if mix.is_a? Hash
|
130
149
|
@current_options[:mix].push(*mix) if mix.is_a? Array
|
131
150
|
end
|
132
|
-
|
151
|
+
|
133
152
|
private
|
134
153
|
def current_bem_data
|
135
154
|
data = {}
|
@@ -158,9 +177,10 @@ module BlockHelper
|
|
158
177
|
end
|
159
178
|
|
160
179
|
def block_data(name, js)
|
161
|
-
level = block_js_level(
|
180
|
+
level = block_js_level(name, @current_options[:levels])
|
162
181
|
return {} if !js
|
163
|
-
|
182
|
+
|
183
|
+
data = (js == true ? {} : js).merge!({level: level, js_ext: block_js_ext(name, level)})
|
164
184
|
entity_data(name, data)
|
165
185
|
end
|
166
186
|
|
@@ -190,7 +210,7 @@ module BlockHelper
|
|
190
210
|
def blocks_stack
|
191
211
|
@blocks_stack = @blocks_stack || []
|
192
212
|
end
|
193
|
-
|
213
|
+
|
194
214
|
def context_block
|
195
215
|
blocks_stack.last&.fetch(:name, nil)
|
196
216
|
end
|
@@ -198,11 +218,11 @@ module BlockHelper
|
|
198
218
|
def context_block_options
|
199
219
|
blocks_stack.last&.fetch(:options, nil)
|
200
220
|
end
|
201
|
-
|
221
|
+
|
202
222
|
def push_context_block(b_name, options)
|
203
223
|
blocks_stack.push({name: b_name, options: options})
|
204
224
|
end
|
205
|
-
|
225
|
+
|
206
226
|
def pop_context_block
|
207
227
|
blocks_stack.pop
|
208
228
|
end
|
data/lib/rails_blocks/names.rb
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
module RailsBlocks
|
2
2
|
module Names
|
3
|
+
@@block_classes_cache = {}
|
3
4
|
def element_classes(b_name, e_name, options = {})
|
4
5
|
base_class = element_class b_name, e_name
|
5
6
|
classes(base_class, false, options)
|
6
7
|
end
|
7
8
|
|
8
9
|
def block_classes(b_name, options = {})
|
9
|
-
|
10
|
-
|
10
|
+
@@block_classes_cache[{type: :block, name: b_name, options: options}] ||= (
|
11
|
+
base_class = block_class b_name
|
12
|
+
classes(base_class, true, options)
|
13
|
+
)
|
11
14
|
end
|
12
15
|
|
13
16
|
def block_name(b_name)
|
data/lib/rails_blocks/path.rb
CHANGED
@@ -4,7 +4,7 @@ module RailsBlocks
|
|
4
4
|
include RailsBlocks::Names
|
5
5
|
ELEMENT_FILE_PREFIX = '__'
|
6
6
|
MOD_FILE_PREFIX = '_'
|
7
|
-
|
7
|
+
|
8
8
|
class << self
|
9
9
|
attr_writer :tree
|
10
10
|
end
|
@@ -18,11 +18,11 @@ module RailsBlocks
|
|
18
18
|
def self.reload_tree
|
19
19
|
@tree = build_tree
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def self.blocks_dir
|
23
23
|
Rails.root.join RailsBlocks.config.blocks_dir
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def block_template(b_name, options = {})
|
27
27
|
options[:levels].reverse.each do |level|
|
28
28
|
next unless Path.tree[level][b_name]
|
@@ -31,6 +31,15 @@ module RailsBlocks
|
|
31
31
|
nil
|
32
32
|
end
|
33
33
|
|
34
|
+
def block_template_precompiled
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
def element_template_precompiled
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
|
34
43
|
def block_js_level(b_name, levels)
|
35
44
|
return levels.reverse.find do |level|
|
36
45
|
Path.tree.dig(level, b_name, :js)
|
@@ -40,7 +49,7 @@ module RailsBlocks
|
|
40
49
|
def block_js_ext(b_name, level)
|
41
50
|
return Path.tree.dig(level, b_name, :js_ext)
|
42
51
|
end
|
43
|
-
|
52
|
+
|
44
53
|
def element_template(b_name, e_name, options = {})
|
45
54
|
options[:levels].reverse.each do |level|
|
46
55
|
next unless Path.tree[level][b_name]
|
@@ -49,13 +58,13 @@ module RailsBlocks
|
|
49
58
|
end
|
50
59
|
nil
|
51
60
|
end
|
52
|
-
|
61
|
+
|
53
62
|
private
|
54
63
|
def mod(options)
|
55
64
|
return '' unless options[:mods] && !options[:mods].empty?
|
56
65
|
mod_class(*options[:mods].first)
|
57
66
|
end
|
58
|
-
|
67
|
+
|
59
68
|
def get_block_dir(b_name, levels)
|
60
69
|
levels.reverse.each do |level|
|
61
70
|
block_dir = File.join(self.blocks_dir, level, b_name)
|
@@ -65,19 +74,35 @@ module RailsBlocks
|
|
65
74
|
end
|
66
75
|
nil
|
67
76
|
end
|
68
|
-
|
77
|
+
|
69
78
|
def self.build_tree
|
70
79
|
file_tree
|
71
80
|
end
|
72
|
-
|
81
|
+
|
73
82
|
def self.file_tree
|
83
|
+
# p '****' * 20
|
84
|
+
# Slim::Engine.set_options
|
85
|
+
|
74
86
|
t = {}
|
75
87
|
engine_ext = RailsBlocks.config.template_engine
|
76
88
|
files = Dir["#{blocks_dir}/**/*#{engine_ext}"]
|
77
89
|
files.each do |file|
|
90
|
+
# p file
|
91
|
+
# template = Tilt.new(file,
|
92
|
+
# use_html_safe: true,
|
93
|
+
# sort_attrs: false,
|
94
|
+
# attr_quote: "'",
|
95
|
+
# hyphen_underscore_attrs: true,
|
96
|
+
# pretty: false,
|
97
|
+
# streaming: false,
|
98
|
+
# disable_escape: true,
|
99
|
+
# disable_capture: true
|
100
|
+
# )
|
101
|
+
# p template if file.include?('header.html.slim')
|
78
102
|
file.sub! blocks_dir.to_s + '/', ''
|
79
103
|
file.sub! '.html' + engine_ext, ''
|
80
|
-
|
104
|
+
|
105
|
+
|
81
106
|
parts = file.split('/')
|
82
107
|
filename = File.basename(file, engine_ext)
|
83
108
|
filename = File.basename(filename, '.html')
|
@@ -85,12 +110,19 @@ module RailsBlocks
|
|
85
110
|
level, block = parts
|
86
111
|
t[level] ||= {}
|
87
112
|
block_def = (t[level][block] ||= {elements: {}})
|
88
|
-
|
113
|
+
|
89
114
|
if is_e_file(filename)
|
90
115
|
block_def[:elements][get_e_name(filename)] ||= {}
|
91
116
|
block_def[:elements][get_e_name(filename)][get_e_mod(filename)] = file
|
117
|
+
|
118
|
+
# block_def[:elements][get_e_name(filename)][get_e_mod(filename)] ||= {}
|
119
|
+
# block_def[:elements][get_e_name(filename)][get_e_mod(filename)][:file] ||= file
|
120
|
+
# block_def[:elements][get_e_name(filename)][get_e_mod(filename)][:template] ||= template
|
92
121
|
else
|
93
122
|
block_def[get_b_mod(filename)] = file
|
123
|
+
# block_def[get_b_mod(filename)] ||= {}
|
124
|
+
# block_def[get_b_mod(filename)][:file] = file
|
125
|
+
# block_def[get_b_mod(filename)][:template] = template
|
94
126
|
end
|
95
127
|
end
|
96
128
|
add_js(t)
|
@@ -112,24 +144,23 @@ module RailsBlocks
|
|
112
144
|
block_def[:js] = true
|
113
145
|
block_def[:js_ext] = ext[1..-1]
|
114
146
|
end
|
115
|
-
p t
|
116
147
|
end
|
117
|
-
|
148
|
+
|
118
149
|
def self.is_e_file(file)
|
119
150
|
file.start_with? ELEMENT_FILE_PREFIX
|
120
151
|
end
|
121
|
-
|
152
|
+
|
122
153
|
def self.get_e_name(file)
|
123
154
|
file.match(/\A__([^_]*)/)
|
124
155
|
$1
|
125
156
|
end
|
126
|
-
|
157
|
+
|
127
158
|
def self.get_e_mod(file)
|
128
159
|
return '' unless file.match(/__\w+#{MOD_FILE_PREFIX}\w/)
|
129
160
|
file.match(/\A__(?:[^_]*)_(.*)/)
|
130
161
|
$1
|
131
162
|
end
|
132
|
-
|
163
|
+
|
133
164
|
def self.get_b_mod(file)
|
134
165
|
return '' unless file.start_with? MOD_FILE_PREFIX
|
135
166
|
file.match(/^_(.*)/)
|
data/lib/rails_blocks/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_blocks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.0.beta.
|
4
|
+
version: 0.9.0.beta.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrey Potetiurin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -230,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
230
230
|
- !ruby/object:Gem::Version
|
231
231
|
version: 1.3.1
|
232
232
|
requirements: []
|
233
|
-
rubygems_version: 3.4.
|
233
|
+
rubygems_version: 3.4.20
|
234
234
|
signing_key:
|
235
235
|
specification_version: 4
|
236
236
|
summary: Rails plugin for work with some modification of BEM methodology
|