brain_damage 0.1.0

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.
Files changed (215) hide show
  1. checksums.yaml +7 -0
  2. data/.byebug_history +32 -0
  3. data/.gitignore +9 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +4 -0
  6. data/CODE_OF_CONDUCT.md +13 -0
  7. data/Gemfile +7 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +41 -0
  10. data/Rakefile +6 -0
  11. data/app/assets/javascripts/ajax_delete.js.coffee +14 -0
  12. data/app/assets/javascripts/ajax_form.js.coffee +94 -0
  13. data/app/assets/javascripts/autocomplete-input.js.coffee +43 -0
  14. data/app/assets/javascripts/autocomplete-list.js.coffee +41 -0
  15. data/app/assets/javascripts/autocomplete-simple-select.js.coffee +39 -0
  16. data/app/assets/javascripts/autocomplete.js.coffee +17 -0
  17. data/app/assets/javascripts/brain_damage.js +3 -0
  18. data/app/assets/javascripts/datepicker.js.coffee +49 -0
  19. data/app/assets/javascripts/document_validity_input.js.coffee +16 -0
  20. data/app/assets/javascripts/expandable-list.js.coffee +16 -0
  21. data/app/assets/javascripts/form_initializer.js.coffee +8 -0
  22. data/app/assets/javascripts/helpers/conditionally-visible-field.js.coffee +13 -0
  23. data/app/assets/javascripts/hideable_content.js.coffee +25 -0
  24. data/app/assets/javascripts/inline_edit.js.coffee +58 -0
  25. data/app/assets/javascripts/label_file_field.js.coffee +22 -0
  26. data/app/assets/javascripts/label_file_field_ui_initializer.js.coffee +10 -0
  27. data/app/assets/javascripts/list_item.js.coffee +10 -0
  28. data/app/assets/javascripts/nested_form_controls.js.coffee +84 -0
  29. data/app/assets/javascripts/polymorphic_hibrid_input.js.coffee +14 -0
  30. data/app/assets/javascripts/polymorphic_select_input.js.coffee +28 -0
  31. data/app/assets/javascripts/rails.validations.actionView.js.coffee +18 -0
  32. data/app/assets/javascripts/scroll_loader.js.coffee +28 -0
  33. data/app/assets/javascripts/searchable_contents.js.coffee +62 -0
  34. data/app/assets/javascripts/selectable-list.js.coffee +92 -0
  35. data/app/assets/javascripts/sensible_to_ajax_view.js.coffee +60 -0
  36. data/app/assets/javascripts/single_page_manager.js.coffee +60 -0
  37. data/app/assets/javascripts/stylesheets/_custom-best-in-place.css.sass +12 -0
  38. data/app/assets/javascripts/stylesheets/_top-search.css.sass +0 -0
  39. data/app/assets/javascripts/stylesheets/application.css +0 -0
  40. data/app/assets/javascripts/trailing_form.js.coffee +16 -0
  41. data/app/assets/javascripts/ui_initializer.js.coffee +23 -0
  42. data/app/assets/javascripts/underscore.min.js +6 -0
  43. data/app/assets/stylesheets/brain_damage.css.sass +214 -0
  44. data/app/views/brain_damage/_empty.html.haml +1 -0
  45. data/app/views/brain_damage/empty.html.haml +1 -0
  46. data/bin/console +14 -0
  47. data/bin/setup +7 -0
  48. data/brain_damage.gemspec +36 -0
  49. data/lib/brain_damage.rb +16 -0
  50. data/lib/brain_damage/brain_damage_helper.rb +75 -0
  51. data/lib/brain_damage/version.rb +3 -0
  52. data/lib/generators/brain_damage/full/full_generator.rb +37 -0
  53. data/lib/generators/brain_damage/lib/controller/controller_generator.rb +45 -0
  54. data/lib/generators/brain_damage/lib/controller/templates/controller.rb +9 -0
  55. data/lib/generators/brain_damage/lib/controller/templates/private_methods/get_partial_locals.rb +3 -0
  56. data/lib/generators/brain_damage/lib/controller/templates/private_methods/set_singular_table_name.rb +3 -0
  57. data/lib/generators/brain_damage/lib/controller/templates/private_methods/singular_table_name_params.rb +3 -0
  58. data/lib/generators/brain_damage/lib/controller/templates/public_methods/create.rb +21 -0
  59. data/lib/generators/brain_damage/lib/controller/templates/public_methods/destroy.rb +14 -0
  60. data/lib/generators/brain_damage/lib/controller/templates/public_methods/edit.rb +2 -0
  61. data/lib/generators/brain_damage/lib/controller/templates/public_methods/index.rb +3 -0
  62. data/lib/generators/brain_damage/lib/controller/templates/public_methods/new.rb +3 -0
  63. data/lib/generators/brain_damage/lib/controller/templates/public_methods/show.rb +2 -0
  64. data/lib/generators/brain_damage/lib/controller/templates/public_methods/update.rb +25 -0
  65. data/lib/generators/brain_damage/lib/field.rb +163 -0
  66. data/lib/generators/brain_damage/lib/field_white_list.rb +21 -0
  67. data/lib/generators/brain_damage/lib/includes.rb +12 -0
  68. data/lib/generators/brain_damage/lib/migration.rb +76 -0
  69. data/lib/generators/brain_damage/lib/model/model_generator.rb +115 -0
  70. data/lib/generators/brain_damage/lib/model/templates/model.rb +12 -0
  71. data/lib/generators/brain_damage/lib/parametizer.rb +19 -0
  72. data/lib/generators/brain_damage/lib/relation/base.rb +50 -0
  73. data/lib/generators/brain_damage/lib/relation/belongs_to.rb +29 -0
  74. data/lib/generators/brain_damage/lib/relation/has_and_belongs_to_many.rb +22 -0
  75. data/lib/generators/brain_damage/lib/relation/has_many.rb +35 -0
  76. data/lib/generators/brain_damage/lib/relation/has_one.rb +18 -0
  77. data/lib/generators/brain_damage/lib/resource.rb +150 -0
  78. data/lib/generators/brain_damage/lib/ruby_simple_parser/block.rb +33 -0
  79. data/lib/generators/brain_damage/lib/ruby_simple_parser/class_definition.rb +19 -0
  80. data/lib/generators/brain_damage/lib/ruby_simple_parser/code_line.rb +16 -0
  81. data/lib/generators/brain_damage/lib/ruby_simple_parser/global_context.rb +8 -0
  82. data/lib/generators/brain_damage/lib/ruby_simple_parser/line_classifier.rb +107 -0
  83. data/lib/generators/brain_damage/lib/ruby_simple_parser/method.rb +23 -0
  84. data/lib/generators/brain_damage/lib/ruby_simple_parser/parser.rb +114 -0
  85. data/lib/generators/brain_damage/lib/ruby_simple_parser/ruby_simple_parser.rb +11 -0
  86. data/lib/generators/brain_damage/lib/templateable/base.rb +53 -0
  87. data/lib/generators/brain_damage/lib/templateable/class_templateable.rb +88 -0
  88. data/lib/generators/brain_damage/lib/templateable/field_templateable.rb +42 -0
  89. data/lib/generators/brain_damage/lib/templateable/view_templateable.rb +23 -0
  90. data/lib/generators/brain_damage/lib/views/displays/base.rb +14 -0
  91. data/lib/generators/brain_damage/lib/views/displays/bright_text.rb +14 -0
  92. data/lib/generators/brain_damage/lib/views/displays/collection_list.rb +22 -0
  93. data/lib/generators/brain_damage/lib/views/displays/default.rb +11 -0
  94. data/lib/generators/brain_damage/lib/views/displays/foreign_single_page_manager.rb +46 -0
  95. data/lib/generators/brain_damage/lib/views/displays/hidden.rb +26 -0
  96. data/lib/generators/brain_damage/lib/views/displays/inline_editable.rb +27 -0
  97. data/lib/generators/brain_damage/lib/views/displays/link_to.rb +42 -0
  98. data/lib/generators/brain_damage/lib/views/displays/linked_collection_list.rb +26 -0
  99. data/lib/generators/brain_damage/lib/views/displays/templates/bright_text.html.haml +7 -0
  100. data/lib/generators/brain_damage/lib/views/displays/templates/collection_list.html.haml +31 -0
  101. data/lib/generators/brain_damage/lib/views/displays/templates/custom.html.haml +5 -0
  102. data/lib/generators/brain_damage/lib/views/displays/templates/default.html.haml +4 -0
  103. data/lib/generators/brain_damage/lib/views/displays/templates/foreign_single_page_manager.html.haml +1 -0
  104. data/lib/generators/brain_damage/lib/views/displays/templates/inline_editable.html.haml +8 -0
  105. data/lib/generators/brain_damage/lib/views/displays/templates/link_to.html.haml +9 -0
  106. data/lib/generators/brain_damage/lib/views/displays/templates/linked_collection_list.html.haml +31 -0
  107. data/lib/generators/brain_damage/lib/views/displays/templates/text.html.haml +4 -0
  108. data/lib/generators/brain_damage/lib/views/displays/templates/yes_or_no.html.haml +4 -0
  109. data/lib/generators/brain_damage/lib/views/displays/text.rb +43 -0
  110. data/lib/generators/brain_damage/lib/views/factory.rb +29 -0
  111. data/lib/generators/brain_damage/lib/views/inputs/autocompletable.rb +26 -0
  112. data/lib/generators/brain_damage/lib/views/inputs/autocompletable_multiple_selection.rb +25 -0
  113. data/lib/generators/brain_damage/lib/views/inputs/autocompletable_simple_selection.rb +21 -0
  114. data/lib/generators/brain_damage/lib/views/inputs/base.rb +23 -0
  115. data/lib/generators/brain_damage/lib/views/inputs/checkbox.rb +14 -0
  116. data/lib/generators/brain_damage/lib/views/inputs/collection_checkboxes.rb +10 -0
  117. data/lib/generators/brain_damage/lib/views/inputs/collection_select.rb +11 -0
  118. data/lib/generators/brain_damage/lib/views/inputs/default.rb +11 -0
  119. data/lib/generators/brain_damage/lib/views/inputs/hierarchy_picker.rb +11 -0
  120. data/lib/generators/brain_damage/lib/views/inputs/nested_form.rb +34 -0
  121. data/lib/generators/brain_damage/lib/views/inputs/nested_on_hideable.rb +22 -0
  122. data/lib/generators/brain_damage/lib/views/inputs/polymorphic_hybrid.rb +44 -0
  123. data/lib/generators/brain_damage/lib/views/inputs/polymorphic_select.rb +33 -0
  124. data/lib/generators/brain_damage/lib/views/inputs/templates/autocompletable_multiple_selection.html.haml +20 -0
  125. data/lib/generators/brain_damage/lib/views/inputs/templates/autocompletable_simple_selection.html.haml +25 -0
  126. data/lib/generators/brain_damage/lib/views/inputs/templates/checkbox.html.haml +3 -0
  127. data/lib/generators/brain_damage/lib/views/inputs/templates/collection_checkboxes.html.haml +6 -0
  128. data/lib/generators/brain_damage/lib/views/inputs/templates/collection_select.html.haml +9 -0
  129. data/lib/generators/brain_damage/lib/views/inputs/templates/custom.html.haml +5 -0
  130. data/lib/generators/brain_damage/lib/views/inputs/templates/default.html.haml +1 -0
  131. data/lib/generators/brain_damage/lib/views/inputs/templates/file.html.haml +5 -0
  132. data/lib/generators/brain_damage/lib/views/inputs/templates/hierarchy_picker.html.haml +19 -0
  133. data/lib/generators/brain_damage/lib/views/inputs/templates/nested_form.html.haml +2 -0
  134. data/lib/generators/brain_damage/lib/views/inputs/templates/polymorphic_hybrid.html.haml +20 -0
  135. data/lib/generators/brain_damage/lib/views/inputs/templates/polymorphic_select.html.haml +22 -0
  136. data/lib/generators/brain_damage/lib/views/inputs/templates/simple_select.html.haml +1 -0
  137. data/lib/generators/brain_damage/lib/views/inputs/templates/text.html.haml +1 -0
  138. data/lib/generators/brain_damage/lib/views/labels/base.rb +26 -0
  139. data/lib/generators/brain_damage/lib/views/labels/default.rb +15 -0
  140. data/lib/generators/brain_damage/lib/views/labels/templates/default.html.haml +6 -0
  141. data/lib/generators/brain_damage/lib/views/modules/inline_editable.rb +16 -0
  142. data/lib/generators/brain_damage/lib/views/schemas/autocompletable.rb +36 -0
  143. data/lib/generators/brain_damage/lib/views/schemas/autocompletable/base.rb +26 -0
  144. data/lib/generators/brain_damage/lib/views/schemas/autocompletable/templates/_links.html.haml +8 -0
  145. data/lib/generators/brain_damage/lib/views/schemas/autocompletable/templates/_multiple_selection.html.haml +6 -0
  146. data/lib/generators/brain_damage/lib/views/schemas/autocompletable/templates/_simple_selection.html.haml +6 -0
  147. data/lib/generators/brain_damage/lib/views/schemas/base.rb +97 -0
  148. data/lib/generators/brain_damage/lib/views/schemas/base/base.rb +86 -0
  149. data/lib/generators/brain_damage/lib/views/schemas/base/form.rb +24 -0
  150. data/lib/generators/brain_damage/lib/views/schemas/base/templates/_fields.html.haml +10 -0
  151. data/lib/generators/brain_damage/lib/views/schemas/base/templates/_form.html.haml +15 -0
  152. data/lib/generators/brain_damage/lib/views/schemas/base/templates/index.html.haml +16 -0
  153. data/lib/generators/brain_damage/lib/views/schemas/base/templates/list/_index.html.haml +4 -0
  154. data/lib/generators/brain_damage/lib/views/schemas/base/templates/list/_item.html.haml +5 -0
  155. data/lib/generators/brain_damage/lib/views/schemas/base/templates/new.html.haml +3 -0
  156. data/lib/generators/brain_damage/lib/views/schemas/base/templates/show.html.haml +9 -0
  157. data/lib/generators/brain_damage/lib/views/schemas/base/templates/table/_header.html.haml +5 -0
  158. data/lib/generators/brain_damage/lib/views/schemas/base/templates/table/_index.html.haml +8 -0
  159. data/lib/generators/brain_damage/lib/views/schemas/base/templates/table/_item.html.haml +5 -0
  160. data/lib/generators/brain_damage/lib/views/schemas/custom.rb +36 -0
  161. data/lib/generators/brain_damage/lib/views/schemas/factory.rb +13 -0
  162. data/lib/generators/brain_damage/lib/views/schemas/inline_editable.rb +27 -0
  163. data/lib/generators/brain_damage/lib/views/schemas/inline_editable/base.rb +20 -0
  164. data/lib/generators/brain_damage/lib/views/schemas/inline_editable/field.rb +47 -0
  165. data/lib/generators/brain_damage/lib/views/schemas/inline_editable/inline_edit.rb +10 -0
  166. data/lib/generators/brain_damage/lib/views/schemas/inline_editable/templates/inline_edit/_field.html.haml +33 -0
  167. data/lib/generators/brain_damage/lib/views/schemas/inline_editable/templates/inline_edit/_inline_edit.html.haml +0 -0
  168. data/lib/generators/brain_damage/lib/views/schemas/nested_fields.rb +14 -0
  169. data/lib/generators/brain_damage/lib/views/schemas/nested_fields/base.rb +20 -0
  170. data/lib/generators/brain_damage/lib/views/schemas/nested_fields/templates/_nested.fields.html.haml +33 -0
  171. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager.rb +22 -0
  172. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/base.rb +40 -0
  173. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/list_item.rb +16 -0
  174. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/_single_page_manager.html.haml +20 -0
  175. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/index.html.haml +1 -0
  176. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_index.form.html.haml +20 -0
  177. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_index.html.haml +27 -0
  178. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_item.display.html.haml +5 -0
  179. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_item.form.html.haml +21 -0
  180. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_item.html.haml +33 -0
  181. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_simple.html.haml +4 -0
  182. data/lib/generators/brain_damage/lib/views/views_generator.rb +37 -0
  183. data/lib/generators/brain_damage/resource/USAGE +8 -0
  184. data/lib/generators/brain_damage/resource/helpers.rb +117 -0
  185. data/lib/generators/brain_damage/resource/monkeys/string.rb +17 -0
  186. data/lib/generators/brain_damage/resource/resource_generator.rb +139 -0
  187. data/lib/generators/brain_damage/resource/templates/controller.rb +40 -0
  188. data/lib/generators/brain_damage/resource/templates/inputs/_simple_select.html.haml +1 -0
  189. data/lib/generators/brain_damage/resource/templates/views/common/_fields.html.haml +11 -0
  190. data/lib/generators/brain_damage/resource/templates/views/common/show.html.haml +11 -0
  191. data/lib/generators/brain_damage/resource/templates/views/full_entity/_form.html.haml +13 -0
  192. data/lib/generators/brain_damage/resource/templates/views/full_entity/_index.body.html.haml +4 -0
  193. data/lib/generators/brain_damage/resource/templates/views/full_entity/_index.html.haml +5 -0
  194. data/lib/generators/brain_damage/resource/templates/views/full_entity/_table.header.html.haml +7 -0
  195. data/lib/generators/brain_damage/resource/templates/views/full_entity/_table.item.html.haml +8 -0
  196. data/lib/generators/brain_damage/resource/templates/views/full_entity/index.html.haml +16 -0
  197. data/lib/generators/brain_damage/resource/templates/views/full_entity/new.html.haml +3 -0
  198. data/lib/generators/brain_damage/resource/templates/views/scaffold/_menu.entry.html.haml +1 -0
  199. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_form.html.haml +15 -0
  200. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_index.body.html.haml +4 -0
  201. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_single_page_manager.html.haml +17 -0
  202. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.form.html.haml +21 -0
  203. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.header.html.haml +12 -0
  204. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.html.haml +27 -0
  205. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.item.form.html.haml +21 -0
  206. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.item.html.haml +32 -0
  207. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.item.show.html.haml +13 -0
  208. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/index.html.haml +4 -0
  209. data/lib/generators/brain_damage/resource/templates/views/special/_fields.show.inline.html.haml +10 -0
  210. data/lib/generators/brain_damage/resource/templates/views/special/_inline_edit.html.haml +2 -0
  211. data/lib/generators/brain_damage/resource/templates/views/special/_inner.show.inline.html.haml +20 -0
  212. data/lib/generators/brain_damage/resource/templates/views/special/_nested.fields.html.haml +33 -0
  213. data/lib/generators/brain_damage/resource/templates/views/special/_show.inline.html.haml +10 -0
  214. data/lib/generators/brain_damage/resource/templates/views/special/_trailing_form.show.inline.html.haml +12 -0
  215. metadata +328 -0
@@ -0,0 +1,2 @@
1
+ .field
2
+ = r "<%= nested_plural_table_name %>/nested.fields", f: f, <%= nested_singular_table_name %>: <%= nested_model_class_name %>.new(<%= nested_on %>: <%= singular_table_name %>), prefix: "<%= singular_table_name %>", nested_on: :<%= nested_on %>, <%= nested_plural_table_name %>: <%= singular_table_name %>.<%= nested_plural_table_name %>
@@ -0,0 +1,20 @@
1
+ - polymorphic_hybrid_input_id = bd_id 'polymorphic_hybrid_input_id'
2
+
3
+ .polymorphic-hybrid-input-wrapper{id: polymorphic_hybrid_input_id}
4
+ .ui.top.attached.tabular.menu.polymorphic-hybrid-input-tabbed-menu
5
+ <% first = true %>
6
+ <% specified_inputs.each do |input| %>
7
+ .item{ data: {tab: :<%= input[:name] %>}, class: [('active' if <%= first %> )] }= '<%= input[:label] %>'
8
+ <% first = false %>
9
+ <% end %>
10
+
11
+ <% first = true %>
12
+ <% specified_inputs.each do |input| %>
13
+ .ui.bottom.attached.tab.segment{ data: {tab: :<%= input[:name] %>}, class: [('active' if <%= first %> )] }
14
+ = hidden_field_tag('<%= type_select_name %>', '<%= input[:model] %>' )
15
+ <%= input[:input].render.indent 2 %>
16
+ <% first = false %>
17
+ <% end %>
18
+
19
+ :coffeescript
20
+ new BrainDamage.PolymorphicHibridInput "##{polymorphic_hybrid_input_id}"
@@ -0,0 +1,22 @@
1
+ - if <%= guard %>
2
+ - polymorphic_select_input_id = bd_id 'polymorphic-select-input'
3
+
4
+ .field{ id: polymorphic_select_input_id }
5
+ .ui.two.fields
6
+ .field
7
+ = f.select(:<%= type_select_name %>, [<%= options_for_type %>], {}, <%= tag_options(class: '"polymorphic-select-type-selector"') %>)
8
+
9
+ <% types_options.each do |options| %>
10
+ .field{ class: "polymorphic-select-object-selector-wrapper polymorphic-select-object-selector-<%= options[:model] %>-wrapper" }
11
+ = f.collection_select(:<%= object_select_name %>, <%= options[:model] %>.all, :<%= options[:value] %>, :<%= options[:display_method] %>, <%= tag_options %>)
12
+ <% end %>
13
+
14
+ :coffeescript
15
+ new BrainDamage.PolymorphicSelectInput "##{polymorphic_select_input_id}"
16
+
17
+ - else
18
+ = hidden_field_tag('partial_locals[nested_on]', nested_on)
19
+
20
+ - if nested_on.try(:to_sym) == :<%= name %> and <%= singular_table_name %>.<%= name %>
21
+ = f.hidden_field(:<%= type_select_name %>, <%= tag_options(value: "#{singular_table_name}.#{type_select_name}", name: "name_for_input_tag(:#{type_select_name}, prefix)") %>)
22
+ = f.hidden_field(:<%= object_select_name %>, <%= tag_options(value: "#{singular_table_name}.#{object_select_name}", name: "name_for_input_tag(:#{object_select_name}, prefix)") %>)
@@ -0,0 +1 @@
1
+ = f.select(:<%= name %>, <%= @options[:options] %>, {}, <%= tag_options %>)
@@ -0,0 +1 @@
1
+ = f.text_field :<%= name %>, <%= tag_options %>
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ require_relative '../../templateable/field_templateable'
3
+
4
+ module BrainDamage
5
+ module View
6
+ module Label
7
+ class Base < Templateable::FieldTemplateable
8
+ attr_reader :text
9
+
10
+ def initialize(field, options)
11
+ super
12
+
13
+ @text = options[:text]
14
+ end
15
+
16
+ def rendered_text
17
+ render_erb_string text
18
+ end
19
+
20
+ def dir
21
+ __dir__
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ # coding: utf-8
2
+ require_relative 'base'
3
+
4
+ module BrainDamage
5
+ module View
6
+ module Label
7
+ class Default < Base
8
+ def initialize(field, options)
9
+ super
10
+ @text ||= render_erb_string("cet('<%= singular_table_name %>.<%= name %>')")
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ <% if input and input.label_guard? %>
2
+ - if <%= input.label_guard %>
3
+ %label.strong= <%= text %>
4
+ <% elsif !input or input.show_label? %>
5
+ %label.strong= <%= text %>
6
+ <% end %>
@@ -0,0 +1,16 @@
1
+ # coding: utf-8
2
+ require_relative '../../templateable/field_templateable'
3
+
4
+ module BrainDamage
5
+ module View
6
+ class InlineEditable < Templateable::FieldTemplateable
7
+ def initialize(field, options)
8
+ super
9
+ end
10
+
11
+ def dir
12
+ __dir__
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,36 @@
1
+ module BrainDamage
2
+ module ViewSchemas
3
+ class Autocompletable < Base
4
+ def initialize(resource)
5
+ @resource = resource
6
+ @views = {}
7
+ end
8
+
9
+ def ensure_views_descriptions
10
+ ['_simple_selection', '_multiple_selection', '_links'].each do |name|
11
+ name = "autocompletable/#{name}"
12
+ describe_view(name) unless view_described? name
13
+ end
14
+ end
15
+
16
+ def describe_view(name, options = {})
17
+ options = {
18
+ view_class_name: 'Base',
19
+ template_name: "#{name.split('/').last}.html.haml",
20
+ file_name: "#{name}.html.haml"
21
+ }.merge options
22
+
23
+ super name, options
24
+ end
25
+
26
+ private
27
+ def self.dir
28
+ __dir__
29
+ end
30
+
31
+ def dir
32
+ __dir__
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,26 @@
1
+ require_relative '../base/base'
2
+
3
+ module BrainDamage
4
+ module View
5
+ module Autocompletable
6
+ class Base < Base::Base
7
+ def display_method
8
+ @options[:display_method] || :name
9
+ end
10
+
11
+ def value_method
12
+ @options[:value_method] || :id
13
+ end
14
+
15
+ private
16
+ def self.dir
17
+ __dir__
18
+ end
19
+
20
+ def dir
21
+ __dir__
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,8 @@
1
+ - <%= plural_table_name %>||= @<%= plural_table_name %>
2
+
3
+ - if <%= plural_table_name %>.any?
4
+ - <%= plural_table_name %>.each do |<%= singular_table_name %>|
5
+ %li.autocomplete-result-item.selectable-list-item{ data: { value: <%= singular_table_name %>.<%= value_method %>, url: url_for(<%= singular_table_name %>)}}= <%= singular_table_name %>.<%= display_method %>
6
+
7
+ - else
8
+ %li= t('common.no-result')
@@ -0,0 +1,6 @@
1
+ - if @<%= plural_table_name %>.any?
2
+ - @<%= plural_table_name %>.each do |<%= singular_table_name %>|
3
+ %li.autocomplete-result-item.selectable-list-item{ 'data-value': <%= singular_table_name %>.<%= value_method %> }= <%= singular_table_name %>.<%= display_method %>
4
+
5
+ - else
6
+ %li= t('common.no-result')
@@ -0,0 +1,6 @@
1
+ - if @<%= plural_table_name %>.any?
2
+ - @<%= plural_table_name %>.each do |<%= singular_table_name %>|
3
+ %li.autocomplete-result-item.selectable-list-item{ 'data-value': <%= singular_table_name %>.<%= value_method %> }= <%= singular_table_name %>.<%= display_method %>
4
+
5
+ - else
6
+ %li= t('common.no-result')
@@ -0,0 +1,97 @@
1
+ Dir[File.dirname(__FILE__) + '/base/*.rb'].each {|file| require file }
2
+ Dir[File.dirname(__FILE__) + '/single_page_manager/*.rb'].each {|file| require file }
3
+ Dir[File.dirname(__FILE__) + '/inline_editable/*.rb'].each {|file| require file }
4
+ Dir[File.dirname(__FILE__) + '/nested_fields/*.rb'].each {|file| require file }
5
+ Dir[File.dirname(__FILE__) + '/autocompletable/*.rb'].each {|file| require file }
6
+
7
+ module BrainDamage
8
+ module ViewSchemas
9
+ class Base
10
+ attr_reader :views
11
+
12
+ def initialize(resource)
13
+ @views = {}
14
+ @resource = resource
15
+ find_views_names
16
+ end
17
+
18
+ def find_views_names
19
+ schema_class = self.class
20
+ @views_names = []
21
+
22
+ loop do
23
+ path = File.join(dir, schema_class.name.demodulize.underscore, 'templates/')
24
+
25
+ @views_names += Dir.glob(path + '**/*' ).select{ |name|
26
+ name =~ /html.haml$/
27
+ }.map{ |name|
28
+ name.gsub('.html.haml', '').gsub(path, '')
29
+ }
30
+
31
+ break if schema_class == BrainDamage::ViewSchemas::Base
32
+ schema_class = schema_class.superclass
33
+ end
34
+
35
+ @views_names.uniq!
36
+ end
37
+
38
+ def ensure_views_descriptions
39
+ @views_names.each do |name|
40
+ describe_view name unless view_described? name
41
+ end
42
+ end
43
+
44
+ def describe_view(name, options = {})
45
+ # First it tries BrainDamage::View::[SpecificSchemaClass]::[SpecificViewClass]
46
+ # Then it tries BrainDamage::View::[SpecificSchemaClass]::Base
47
+ # If none exists, it will try both again with SpecificSchemaClass.parent, until eventually
48
+ # landing on BrainDamage::View::Base::Base
49
+
50
+ schema_class = self.class
51
+ view_class_name = options[:view_class_name] || name.to_s.split('/').map{ |part| part.gsub('.', '_').camelize }.join('::')
52
+ options[:schema] = self
53
+
54
+ loop do
55
+ specific_view_class_name = "BrainDamage::View::#{schema_class.name.demodulize}::#{view_class_name}"
56
+ if Object.const_defined? specific_view_class_name
57
+ @views[name] = eval(specific_view_class_name).new @resource, options
58
+ break
59
+ end
60
+
61
+ base_view_class_name = "BrainDamage::View::#{schema_class.name.demodulize}::Base"
62
+ #puts base_view_class_name
63
+ if Object.const_defined? base_view_class_name
64
+ klass = eval base_view_class_name
65
+
66
+ if (options[:template_name] and Pathname.new(options[:template_name]).absolute?) or klass.has_template? name
67
+ options[:file_name] = "#{name}.html.haml" unless options[:file_name]
68
+ options[:template_name] = "#{name}.html.haml" unless options[:template_name]
69
+ @views[name] = eval(base_view_class_name).new @resource, options
70
+ break
71
+ end
72
+ end
73
+
74
+ schema_class = schema_class.superclass
75
+
76
+ if schema_class == Object
77
+ puts "ERROR: Unable to find any class capable of rendering the view: #{name}"
78
+ break
79
+ end
80
+ end
81
+ end
82
+
83
+ def view_described? name
84
+ @views.has_key? name
85
+ end
86
+
87
+ private
88
+ def self.dir
89
+ __dir__
90
+ end
91
+
92
+ def dir
93
+ __dir__
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,86 @@
1
+ # coding: utf-8
2
+ require 'pathname'
3
+ require_relative '../../../templateable/view_templateable'
4
+
5
+ module BrainDamage
6
+ module View
7
+ module Base
8
+ class Base < Templateable::ViewTemplateable
9
+ attr_reader :file_name
10
+
11
+ def initialize(resource, options = {})
12
+ set_file_and_template_names(options)
13
+ @schema = options[:schema]
14
+ super resource, options
15
+ end
16
+
17
+ def set_file_and_template_names(options)
18
+ @file_name ||= options[:file_name]
19
+ @template_file ||= options[:template_name]
20
+
21
+ unless @template_file
22
+ @template_file = infer_file_name
23
+
24
+ unless self.class.has_template? @template_file or Pathname.new(@template_file).absolute?
25
+ partial_version = partialize_file_name @template_file
26
+ if self.class.has_template? partial_version
27
+ @template_file = partial_version
28
+ end
29
+ end
30
+ end
31
+
32
+ unless @file_name
33
+ @file_name = infer_file_name
34
+
35
+ if is_partial_file_name? @template_file
36
+ @file_name = partialize_file_name @file_name
37
+ end
38
+ end
39
+ end
40
+
41
+ def is_partial_file_name?(file_name)
42
+ file_name.split('/').last[0] == '_'
43
+ end
44
+
45
+ def partialize_file_name(file_name)
46
+ parts = file_name.split '/'
47
+
48
+ if parts.length == 1
49
+ "_#{parts.first.gsub('^_*', '')}"
50
+ else
51
+ (parts[0...-1] + ["_#{parts.last.gsub('^_', '')}"]).join '/'
52
+ end
53
+ end
54
+
55
+ def fields(only: nil, except: nil)
56
+ @resource.fields
57
+ end
58
+
59
+ def infer_file_name
60
+ "#{self.class.name.split('::')[3..-1].map(&:underscore).join('/')}.html.haml"
61
+ end
62
+
63
+ def self.has_template?(name)
64
+ File.exists? File.join(dir, 'templates', "#{name.to_s.gsub('.html.haml', '')}.html.haml")
65
+ end
66
+
67
+ def method_missing(method, *args, &block)
68
+ if @schema and @schema.respond_to? method
69
+ @schema.send method, *args, &block
70
+ else
71
+ super
72
+ end
73
+ end
74
+
75
+ private
76
+ def self.dir
77
+ __dir__
78
+ end
79
+
80
+ def dir
81
+ __dir__
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,24 @@
1
+ module BrainDamage
2
+ module View
3
+ module Base
4
+ class Form < Base
5
+ def initialize(resource, options = {})
6
+ options = {
7
+ multipart: false,
8
+ remote: false
9
+ }.merge options
10
+
11
+ super resource, options
12
+ end
13
+
14
+ def multipart?
15
+ @options[:multipart]
16
+ end
17
+
18
+ def remote?
19
+ @options[:remote]
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,10 @@
1
+ - prefix ||= '<%= singular_table_name %>'
2
+
3
+ - if f.object.id
4
+ = f.hidden_field :id, {name: name_for_input_tag(:id, prefix)}
5
+
6
+ <% for field in inputable_fields -%>
7
+ .field
8
+ <%= field.label.render.indent 1 %>
9
+ <%= field.input.render.indent 1 %>
10
+ <% end -%>
@@ -0,0 +1,15 @@
1
+ - <%= singular_table_name %> ||= @<%= singular_table_name %> || <%= name %>.new
2
+ - form_id = "<%= plural_table_name %>-form-#{bd_id}"
3
+
4
+ - @single_page_manager_options ||= Hash.new(false)
5
+ - nested_on ||= @single_page_manager_options[:nested_on]
6
+
7
+ = form_for <%= singular_table_name %>, html: { id: form_id, class: 'ui form', multipart: <%= multipart? %>, data: { single_page_manager_form_context: @single_page_manager_options[:form_context] } }, remote: <%= remote? %>, validate: true do |f|
8
+ = r '<%= plural_table_name %>/fields', <%= singular_table_name %>: <%= singular_table_name %>, nested_on: nested_on, f: f
9
+ = hidden_field_tag 'partial_locals[single_page_manager_options]', @single_page_manager_options.to_json
10
+
11
+ .actions
12
+ = f.submit cet('actions.save'), class: 'ui primary button'
13
+
14
+ - if @single_page_manager_options[:cancel_button] and !@single_page_manager_options[:explicit_form]
15
+ .ui.basic.button.brain-damage-cancel= cet('actions.cancel')