bemer 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +5 -5
  2. data/{LICENSE-RU → LICENSE-RU.txt} +0 -0
  3. data/{LICENSE → LICENSE.txt} +5 -5
  4. data/README.md +47 -16
  5. data/docs/BEMHTML.md +5 -0
  6. data/docs//320/232/320/276/320/275/321/202/320/265/320/272/321/201/321/202-/321/203/320/267/320/273/320/260.md +275 -0
  7. data/docs//320/232/320/276/320/275/321/204/320/270/320/263/321/203/321/200/320/260/321/206/320/270/321/217.md +158 -0
  8. data/docs//320/237/321/200/320/265/320/264/320/270/320/272/320/260/321/202/321/213.md +205 -0
  9. data/docs//320/240/320/265/320/266/320/270/320/274/321/213.md +274 -0
  10. data/docs//320/241/320/276/320/267/320/264/320/260/320/275/320/270/320/265-/320/270-/320/270/321/201/320/277/320/276/320/273/321/214/320/267/320/276/320/262/320/260/320/275/320/270/320/265-UI-/320/272/320/276/320/274/320/277/320/276/320/275/320/265/320/275/321/202.md +173 -0
  11. data/docs//320/244/320/260/320/270/314/206/320/273/320/276/320/262/320/260/321/217-/321/201/321/202/321/200/321/203/320/272/321/202/321/203/321/200/320/260.md +167 -0
  12. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-bem_mix.md +62 -0
  13. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-bem_mods.md +63 -0
  14. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-block_tag.md +215 -0
  15. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-component_asset_path.md +71 -0
  16. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-component_pack.md +101 -0
  17. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-component_partial_path.md +28 -0
  18. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-define_component.md +154 -0
  19. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-define_templates.md +96 -0
  20. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-elem_tag.md +38 -0
  21. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-refine_component.md +114 -0
  22. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-render_component.md +108 -0
  23. data/docs//320/250/320/260/320/261/320/273/320/276/320/275/321/213.md +44 -0
  24. data/lib/bemer.rb +3 -1
  25. data/lib/bemer/builders.rb +8 -0
  26. data/lib/bemer/builders/tree.rb +0 -8
  27. data/lib/bemer/configuration.rb +3 -1
  28. data/lib/bemer/context_extentions/structure.rb +2 -3
  29. data/lib/bemer/entity.rb +2 -2
  30. data/lib/bemer/entity_builder.rb +5 -9
  31. data/lib/bemer/helpers.rb +10 -0
  32. data/lib/bemer/mixin_list.rb +1 -1
  33. data/lib/bemer/modifier_list.rb +2 -2
  34. data/lib/bemer/path_resolver.rb +23 -0
  35. data/lib/bemer/pipeline/handler.rb +4 -6
  36. data/lib/bemer/railtie.rb +22 -9
  37. data/lib/bemer/renderer.rb +1 -1
  38. data/lib/bemer/template_list.rb +2 -4
  39. data/lib/bemer/tree.rb +3 -3
  40. data/lib/bemer/tree/node.rb +5 -7
  41. data/lib/bemer/version.rb +1 -1
  42. data/spec/bemer/railtie_spec.rb +95 -0
  43. data/spec/dummy/config/application.rb +30 -12
  44. data/spec/dummy/config/initializers/backtrace_silencers.rb +1 -5
  45. data/spec/dummy/config/initializers/bemer.rb +1 -3
  46. data/spec/rails_helper.rb +5 -9
  47. metadata +87 -129
  48. data/.gitignore +0 -17
  49. data/.overcommit.yml +0 -59
  50. data/.rspec +0 -4
  51. data/.rubocop.yml +0 -21
  52. data/.rubocop_todo.yml +0 -11
  53. data/Gemfile +0 -12
  54. data/Rakefile +0 -12
  55. data/bemer.gemspec +0 -43
  56. data/spec/dummy/Rakefile +0 -8
  57. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  58. data/spec/dummy/app/helpers/application_helper.rb +0 -4
  59. data/spec/dummy/app/jobs/application_job.rb +0 -4
  60. data/spec/dummy/app/mailers/application_mailer.rb +0 -6
  61. data/spec/dummy/app/models/application_record.rb +0 -5
  62. data/spec/dummy/app/models/concerns/.keep +0 -0
  63. data/spec/dummy/app/views/layouts/mailer.html.erb +0 -13
  64. data/spec/dummy/app/views/layouts/mailer.text.erb +0 -1
  65. data/spec/dummy/bin/bundle +0 -5
  66. data/spec/dummy/bin/rails +0 -6
  67. data/spec/dummy/bin/rake +0 -6
  68. data/spec/dummy/bin/setup +0 -39
  69. data/spec/dummy/bin/update +0 -31
  70. data/spec/dummy/bin/yarn +0 -13
  71. data/spec/dummy/config/cable.yml +0 -10
  72. data/spec/dummy/config/database.yml +0 -25
  73. data/spec/dummy/config/environments/development.rb +0 -51
  74. data/spec/dummy/config/environments/production.rb +0 -84
  75. data/spec/dummy/config/environments/test.rb +0 -44
  76. data/spec/dummy/config/initializers/application_controller_renderer.rb +0 -7
  77. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -7
  78. data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -6
  79. data/spec/dummy/config/initializers/inflections.rb +0 -17
  80. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  81. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -16
  82. data/spec/dummy/config/locales/en.yml +0 -33
  83. data/spec/dummy/config/puma.rb +0 -58
  84. data/spec/dummy/config/routes.rb +0 -5
  85. data/spec/dummy/config/secrets.yml +0 -32
  86. data/spec/dummy/config/spring.rb +0 -8
  87. data/spec/dummy/lib/assets/.keep +0 -0
  88. data/spec/dummy/log/.keep +0 -0
  89. data/spec/dummy/package.json +0 -5
  90. data/spec/dummy/public/404.html +0 -67
  91. data/spec/dummy/public/422.html +0 -67
  92. data/spec/dummy/public/500.html +0 -66
  93. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  94. data/spec/dummy/public/apple-touch-icon.png +0 -0
  95. data/spec/dummy/public/favicon.ico +0 -0
@@ -0,0 +1,96 @@
1
+ # Хелпер define_templates
2
+
3
+ **ВАЖНО**. *Только для компонент, структура (дерево) которых была создана с помощью [хелпера `define_component`](Хелпер-define_component.md) доступно использование [BEMHTML шаблонов](Шаблоны.md).*
4
+
5
+ Позволяет создавать шаблоны по умолчанию (технология BEMHTML) для компонент созданных [с помощью `define_component`](Хелпер-define_component.md).
6
+
7
+ При вызове `define_templates` можно передать единственный параметр `cached` который по умолчанию равен `true`, см. [хелпер `component_pack`](Хелпер-component_pack.md).
8
+
9
+ Используется следующая файловая структура:
10
+ ```
11
+ app/
12
+ ├── assets/
13
+ | ├── javascripts/
14
+ | | └── application.js
15
+ | └── stylesheets/
16
+ | └── application.css
17
+ ├── bemer_components/
18
+ | ├── panel/
19
+ | | ├── index.html.slim
20
+ | | ├── index.bemhtml.slim
21
+ | | ├── index.js
22
+ | | └── index.css
23
+ | └── ...
24
+ └── ...
25
+ ```
26
+ Подключение технологий JavaScript и CSS компонента `panel` при использовании Sprockets:
27
+
28
+ ```js
29
+ // Файл app/assets/javascripts/application.js
30
+ //= require panel
31
+ ```
32
+
33
+ ```scss
34
+ // Файл app/assets/stylesheets/application.css
35
+ //= require panel
36
+ ```
37
+ В качестве структуры компонента `panel` будет взят [компонент `panel` из библиотеки Twitter Bootstrap](https://getbootstrap.com/docs/3.3/components/#panels):
38
+
39
+ ```html
40
+ <!-- Исходная HTML структура компонента panel из библиотеки Twitter Bootstrap -->
41
+ <div class="panel panel-default">
42
+ <div class="panel-heading">
43
+ <h3 class="panel-title">Panel title</h3>
44
+ </div>
45
+ <div class="panel-body">Panel content</div>
46
+ <div class="panel-footer">Panel footer</div>
47
+ </div>
48
+ ```
49
+ Возможный вариант разметки компонента `panel` по БЭМ методологии:
50
+ ```slim
51
+ / Содержимое файла index.html.slim компонента panel
52
+ = define_component bem_cascade: false, tag: :div do |component|
53
+ = component.block :panel, cls: 'panel' do |panel|
54
+ = panel.elem :heading, cls: 'panel-heading'
55
+ = panel.elem :title, tag: :h3, cls: 'panel-title', content: 'Panel title'
56
+ = panel.elem :content, cls: 'panel-body', content: 'Panel content'
57
+ = panel.elem :footer, cls: 'panel-footer', content: 'Panel footer'
58
+ ```
59
+
60
+ После рендеринга без применения шаблонов по умолчанию, HTML структура будет выглядеть следующим образом:
61
+ ```slim
62
+ / Шаблонизатор Slim
63
+ = render_component :panel
64
+
65
+ / =>
66
+ / <div class="panel">
67
+ / <div class="panel-heading">
68
+ / <h3 class="panel-title">Panel title</h3>
69
+ / </div>
70
+ / <div class="panel-body">Panel content</div>
71
+ / <div class="panel-footer">Panel footer</div>
72
+ / </div>
73
+ ```
74
+ С помощью файла `index.bemhtml.slim` можно задать дефолтные шаблоны для компонента, которые можно будет переопределить при вызове `render_component` или `refine_component`.
75
+
76
+ Возможный вариант шаблонов по умолчанию для компонента `panel`:
77
+ ```slim
78
+ / Содержимое файла index.bemhtml.slim компонента panel
79
+ = define_templates do |template|
80
+ = template.block(:panel).add_cls :panel_default
81
+ ```
82
+
83
+ После рендеринга HTML структура теперь будет выглядеть следующим образом (добавлен css класс `panel-default`):
84
+ ```slim
85
+ / Шаблонизатор Slim
86
+ = render_component :panel
87
+
88
+ / =>
89
+ / <div class="panel panel-default">
90
+ / <div class="panel-heading">
91
+ / <h3 class="panel-title">Panel title</h3>
92
+ / </div>
93
+ / <div class="panel-body">Panel content</div>
94
+ / <div class="panel-footer">Panel footer</div>
95
+ / </div>
96
+ ```
@@ -0,0 +1,38 @@
1
+ # Хелпер elem_tag
2
+
3
+ **ВАЖНО**. *Только для компонент, [структура (дерево) которых была создана](Создание-и-использование-UI-компонент.md) с помощью [хелпера `define_component`](Хелпер-define_component.md) доступно использование [BEMHTML шаблонов](Шаблоны.md).*
4
+
5
+ **ВАЖНО**. *Для сущностей у которых не указано название, не будут созданы css классы и js атрибуты из методологии БЭМ*:
6
+ ```ruby
7
+ elem_tag js: true, bem: true # => <div></div>
8
+ elem_tag nil, js: true, bem: true # => <div></div>
9
+ elem_tag :block, js: true, bem: true # => <div></div>
10
+ elem_tag '', :elem, js: true, bem: true # => <div></div>
11
+ ```
12
+
13
+ **ВАЖНО**. *[Параметр `bem` из конфигурации](Конфигурация.md#%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-bem) никак не влияет на работу `elem_tag`.*
14
+
15
+ **ВАЖНО**. *Альтернативное создание элементов по методологии БЭМ см. [хелпер `block_tag` параметр `content`](Хелпер-block_tag.md#%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-content).*
16
+
17
+ Позволяет создавать элемент по методологии БЭМ.
18
+
19
+ ## Название сущности
20
+
21
+ При вызове `elem_tag` первым аргументом передается название блока (указывать не обязательно), вторым название элемента (указывать не обязательно) допустимые типы:
22
+ 1. `Symbol` ВСЕ символы нижнего подчеркивания будут преобразованы в тире, при формирование css классов по БЭМ методологии
23
+ 1. `String` возвращается без изменений
24
+
25
+ ```ruby
26
+ # Вызов без каких-либо параметров
27
+ elem_tag # => <div></div>
28
+ ```
29
+ ```ruby
30
+ elem_tag :block, :elem # => <div class="block__elem"></div>
31
+ ```
32
+ **ВАЖНО**. *Будьте ВНИМАТЕЛЬНЫ при использовании названий с типом `String`, если в них содержатся знаки нижнего подчеркивания `_`, это может привести к неправильному результату согласно методологии БЭМ*:
33
+ ```ruby
34
+ elem_tag 'block_name', 'elem_name' # => <div class="block_name__elem_name"></div>
35
+ ```
36
+ ## Допустимые параметры
37
+
38
+ Все параметры такие же как и у [хелпера `block_tag`](Хелпер-block_tag.md#%D0%94%D0%BE%D0%BF%D1%83%D1%81%D1%82%D0%B8%D0%BC%D1%8B%D0%B5-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B).
@@ -0,0 +1,114 @@
1
+ # Хелпер refine_component
2
+
3
+ **ВАЖНО**. *Является псевдонимом для `render_component`.*
4
+
5
+ **ВАЖНО**. *Только для компонент, структура (дерево) которых была создана с помощью [хелпера `define_component`](Хелпер-define_component.md) доступно использование [BEMHTML шаблонов](Шаблоны.md).*
6
+
7
+ **ДОПОЛНИТЕЛЬНО**. *Различные способы создания и рендеринга компонент описаны [здесь](Создание-и-использование-UI-компонент.md).*
8
+
9
+ Соглашения по использованию:
10
+ 1. `render_component` используется для рендеринга компонент
11
+ 1. `refine_component` используется для создания новых компонент на основе существующих, реализованных [с помощью `define_component`](Хелпер-define_component.md)
12
+
13
+ Используя `refine_component` можно получать HTML структуру компонента, а если компонент был создан [с помощью `define_component`](Хелпер-define_component.md) тогда и изменять его структуру/внешний вид с помощью шаблонов BEMHTML.
14
+
15
+ Все передаваемые параметры будут доступны в теле компонента как локальные переменные, исключение составляют параметры `cached` и `prefix`.
16
+
17
+ Используется следующая файловая структура:
18
+ ```
19
+ app/
20
+ ├── assets/
21
+ | ├── javascripts/
22
+ | | └── application.js
23
+ | └── stylesheets/
24
+ | └── application.css
25
+ ├── bemer_components/
26
+ | ├── progress/
27
+ | | ├── index.html.slim
28
+ | | ├── index.js
29
+ | | └── index.css
30
+ | ├── stacked_progress/
31
+ | | └── index.html.slim
32
+ | └── ...
33
+ └── ...
34
+ ```
35
+ Подключение технологий JavaScript и CSS компонента `progress` при использовании Sprockets:
36
+
37
+ ```js
38
+ // Файл app/assets/javascripts/application.js
39
+ //= require progress
40
+ ```
41
+
42
+ ```scss
43
+ // Файл app/assets/stylesheets/application.css
44
+ //= require progress
45
+ ```
46
+ В качестве структуры компонента `progress` будет взят [компонент `Progress bar` из библиотеки Twitter Bootstrap](https://getbootstrap.com/docs/3.3/components/#progress):
47
+
48
+ ```html
49
+ <!-- Исходная HTML структура компонента Progress bar из библиотеки Twitter Bootstrap -->
50
+ <div class="progress">
51
+ <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;">
52
+ 60%
53
+ </div>
54
+ </div>
55
+ ```
56
+ Возможный вариант разметки компонента `progress` с использованием `define_component` по методологии БЭМ:
57
+ ```slim
58
+ / Содержимое файла index.html.slim компонента panel
59
+ = define_component bem_cascade: false, tag: :div do |component|
60
+ = component.block :progress, cls: :progress do |progress|
61
+ = progress.elem :bar, role: :progressbar, cls: :progress_bar, 'aria-valuemin': 0, 'aria-valuemax': 100
62
+ ```
63
+ ## Создание нового компонента на основе существующего
64
+
65
+ Для компонент структура которых была создана [с помощью `define_component`](Хелпер-define_component.md), можно делать переопределение структуры (дерева).
66
+
67
+ Создание компонента [`stacked_progress`](https://getbootstrap.com/docs/3.3/components/#progress-stacked) на основе компонента `progress`:
68
+
69
+ ```slim
70
+ / Содержимое файла index.html.slim компонента stacked_progress
71
+ = refine_component :progress do |template|
72
+ = template.block(:progress) do |progress|
73
+ = progress.content do |node|
74
+ = node.content
75
+ = node.content
76
+ = node.content
77
+
78
+ / Эквивалентная запись
79
+ = refine_component :progress do |template|
80
+ = template.block(:progress) do |progress|
81
+ = progress.content do |node|
82
+ - 3.times do
83
+ = node.content
84
+
85
+ ```
86
+ Теперь можно вызвать новый компонент `stacked_progress`:
87
+ ```slim
88
+ = render_component :stacked_progress do |template|
89
+ = template.elem :bar do |bar|
90
+ = bar.add_cls :progress_bar_striped, :active
91
+ = bar.specify(->(node) { node.first? }) do |first_bar|
92
+ = first_bar.add_attrs 'aria-valuenow': 20, style: 'width: 20%'
93
+ = first_bar.add_cls :progress_bar_danger
94
+ = bar.specify(->(node) { node.position.eql?(2) }) do |middle_bar|
95
+ = middle_bar.add_attrs 'aria-valuenow': 30, style: 'width: 30%'
96
+ = middle_bar.add_cls :progress_bar_warning
97
+ = bar.specify(->(node) { node.last? }) do |last_bar|
98
+ = last_bar.add_attrs 'aria-valuenow': 40, style: 'width: 40%'
99
+ = last_bar.add_cls :progress_bar_success
100
+
101
+ / =>
102
+ / <div class="progress">
103
+ / <div role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100" style="width: 20%" class="progress-bar progress-bar-striped active progress-bar-danger"></div>
104
+ / <div role="progressbar" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100" style="width: 30%" class="progress-bar progress-bar-striped active progress-bar-warning"></div>
105
+ / <div role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 40%" class="progress-bar progress-bar-striped active progress-bar-success"></div>
106
+ / </div>
107
+ ```
108
+ ## Параметр `prefix`
109
+
110
+ Для чего нужен и как использовать параметр `prefix` можно прочитать [здесь](Конфигурация.md#%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-default_path_prefix).
111
+
112
+ ## Параметр `cached`
113
+
114
+ Описание про `cached` можно найти [в `component_pack`](Хелпер-component_pack.md).
@@ -0,0 +1,108 @@
1
+ # Хелпер render_component
2
+
3
+ **ВАЖНО**. *Является псевдонимом для `refine_component`.*
4
+
5
+ **ВАЖНО**. *Только для компонент, структура (дерево) которых была создана с помощью [хелпера `define_component`](Хелпер-define_component.md) доступно использование [BEMHTML шаблонов](Шаблоны.md).*
6
+
7
+ **ДОПОЛНИТЕЛЬНО**. *Различные способы создания и рендеринга компонент описаны [здесь](Создание-и-использование-UI-компонент.md).*
8
+
9
+ Соглашения по использованию:
10
+ 1. `render_component` используется для рендеринга компонент
11
+ 1. `refine_component` используется для создания новых компонент на основе существующих, реализованных [с помощью `define_component`](Хелпер-define_component.md)
12
+
13
+ Используя `render_component` можно получать HTML структуру компонента, а если компонент был создан [с помощью `define_component`](Хелпер-define_component.md) тогда и изменять его структуру/внешний вид с помощью шаблонов BEMHTML.
14
+
15
+ Все передаваемые параметры будут доступны в теле компонента как локальные переменные, исключение составляют параметры `cached` и `prefix`.
16
+
17
+ Используется следующая файловая структура:
18
+ ```
19
+ app/
20
+ ├── assets/
21
+ | ├── javascripts/
22
+ | | └── application.js
23
+ | └── stylesheets/
24
+ | └── application.css
25
+ ├── bemer_components/
26
+ | ├── progress/
27
+ | | ├── index.html.slim
28
+ | | ├── index.js
29
+ | | └── index.css
30
+ | └── ...
31
+ └── ...
32
+ ```
33
+ Подключение технологий JavaScript и CSS компонента `progress` при использовании Sprockets:
34
+
35
+ ```js
36
+ // Файл app/assets/javascripts/application.js
37
+ //= require progress
38
+ ```
39
+
40
+ ```scss
41
+ // Файл app/assets/stylesheets/application.css
42
+ //= require progress
43
+ ```
44
+ В качестве структуры компонента `progress` будет взят [компонент `Progress bar` из библиотеки Twitter Bootstrap](https://getbootstrap.com/docs/3.3/components/#progress):
45
+
46
+ ```html
47
+ <!-- Исходная HTML структура компонента Progress bar из библиотеки Twitter Bootstrap -->
48
+ <div class="progress">
49
+ <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;">
50
+ 60%
51
+ </div>
52
+ </div>
53
+ ```
54
+ Возможный вариант разметки компонента `progress` с использованием `define_component` по методологии БЭМ:
55
+ ```slim
56
+ / Содержимое файла index.html.slim компонента panel
57
+ = define_component bem_cascade: false, tag: :div do |component|
58
+ = component.block :progress, cls: :progress do |progress|
59
+ = progress.elem :bar, role: :progressbar, cls: :progress_bar
60
+ ```
61
+ ## Использование BEMHTML шаблонов
62
+
63
+ В случае если структура компонента была создана [с помощью `define_component`](Хелпер-define_component.md), тогда при вызове `render_component` можно передать `&block` в теле которого будет доступен билдер (builder) шаблонов технологии BEMHTML:
64
+
65
+ ```slim
66
+ / Эквивалентный результат, только режим `attrs` здесь будет быстрее чем цепочка `add_attrs`
67
+ = render_component :progress do |template|
68
+ = template.elem :bar do |bar|
69
+ = bar.attrs 'aria-valuenow': 60, 'aria-valuemin': 0, 'aria-valuemax': 100, style: 'width: 60%;'
70
+ = bar.content '60%'
71
+
72
+ = render_component :progress do |template|
73
+ = template.elem :bar do |bar|
74
+ = bar.add_attrs 'aria-valuenow': 60
75
+ = bar.add_attrs 'aria-valuemin': 0
76
+ = bar.add_attrs 'aria-valuemax': 100
77
+ = bar.add_attrs style: 'width: 60%;'
78
+ = bar.content '60%'
79
+
80
+ / =>
81
+ / <div class="progress">
82
+ / <div role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;" class="progress-bar">
83
+ / 60%
84
+ / </div>
85
+ / </div>
86
+ ```
87
+ Для изменения внешнего вида, можно добавить css классы `progress-bar-success`, `progress-bar-striped` и `active`:
88
+ ```slim
89
+ = render_component :progress do |template|
90
+ = template.elem :bar do |bar|
91
+ = bar.attrs 'aria-valuenow': 60, 'aria-valuemin': 0, 'aria-valuemax': 100, style: 'width: 60%;'
92
+ = bar.content '60%'
93
+ = bar.add_cls :progress_bar_striped, :active, :progress_bar_success
94
+
95
+ / =>
96
+ / <div class="progress">
97
+ / <div aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;" class="progress-bar progress-bar-striped active progress-bar-success">
98
+ / 60%
99
+ / </div>
100
+ / </div>
101
+ ```
102
+ ## Параметр `prefix`
103
+
104
+ Для чего нужен и как использовать параметр `prefix` можно прочитать [здесь](Конфигурация.md#%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-default_path_prefix).
105
+
106
+ ## Параметр `cached`
107
+
108
+ Описание про `cached` можно найти [в `component_pack`](Хелпер-component_pack.md).
@@ -0,0 +1,44 @@
1
+ # Шаблоны
2
+
3
+ **ВАЖНО**. *Только для компонент, [структура (дерево) которых была создана](Создание-и-использование-UI-компонент.md) с помощью [хелпера `define_component`](Хелпер-define_component.md) доступно использование BEMHTML шаблонов.*
4
+
5
+ **ВАЖНО**. *Шаблоны должны быть максимально простыми и не содержать излишней логики.*
6
+
7
+ Каждый шаблон, например, `template.elem(:message).replace 'Plain text'` состоит из:
8
+ 1. `elem(:message)` - [предикат](Предикаты.md)
9
+ 1. `replace` - [режим](Режимы.md)
10
+ 1. `'Plain text'` - тело
11
+
12
+ Если для узла из структуры (дерева) компонента, все условия в предикате верны, тогда для этого узла будет применено тело шаблона в указанном режиме изменения данных.
13
+
14
+ Шаблоны можно создавать используя хелперы `define_templates`, `render_component` и `refine_component`.
15
+
16
+ ## Примеры шаблонов
17
+
18
+ ### Шаблоны по умолчанию для компонента из файла `index.bemhtml.slim`
19
+
20
+ ```slim
21
+ = define_templates do |template|
22
+ = template.block(:panel).add_cls :panel_default
23
+ ```
24
+
25
+ ### Шаблоны при использовании `render_component`
26
+
27
+ ```slim
28
+ = render_component :alert do |template|
29
+ = template.block(:alert).add_cls :alert_info
30
+ = template.elem(:message).content do |node, builder|
31
+ span HTML content
32
+ = node.content
33
+ = builder.text TextNode content
34
+ ```
35
+
36
+ ### Шаблоны при использовании `refine_component`
37
+
38
+ ```slim
39
+ = refine_component :progress do |template|
40
+ = template.block(:progress).content do |node|
41
+ = node.content
42
+ = node.content
43
+ = node.content
44
+ ```
@@ -22,6 +22,7 @@ module Bemer
22
22
  autoload :EntityBuilder
23
23
  autoload :MixinList
24
24
  autoload :ModifierList
25
+ autoload :PathResolver
25
26
  autoload :Pipeline
26
27
  autoload :Predicate
27
28
  autoload :Renderer
@@ -57,7 +58,7 @@ module Bemer
57
58
  alias prepend_asset_paths? prepend_asset_paths
58
59
 
59
60
  def config
60
- Configuration.instance
61
+ Bemer::Configuration.instance
61
62
  end
62
63
 
63
64
  def setup
@@ -70,6 +71,7 @@ module Bemer
70
71
  Bemer::Builders.eager_load!
71
72
  end
72
73
 
74
+ # entity_class
73
75
  def bem_class(block, element = nil)
74
76
  return '' if block.blank? || (!element.nil? && element.blank?)
75
77
 
@@ -12,6 +12,14 @@ module Bemer
12
12
  autoload :Tree
13
13
  end
14
14
 
15
+ class Tree
16
+ extend ActiveSupport::Autoload
17
+
18
+ eager_autoload do
19
+ autoload :Element
20
+ end
21
+ end
22
+
15
23
  module Tag
16
24
  extend ActiveSupport::Autoload
17
25
 
@@ -1,16 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/dependencies/autoload'
4
-
5
3
  module Bemer
6
4
  module Builders
7
5
  class Tree
8
- extend ActiveSupport::Autoload
9
-
10
- eager_autoload do
11
- autoload :Element
12
- end
13
-
14
6
  def initialize(tree)
15
7
  @tree = tree
16
8
  end