rails_blocks 0.9.0.beta.4 → 0.9.0.beta.5
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 +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
|