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,16 @@
1
+ .ui.two.column.grid
2
+ .column
3
+ %h1.ui.header
4
+ = "#{cet('<%= "entities.#{plural_table_name}" %>')}"
5
+
6
+ .column
7
+ .float-right
8
+ = link_to new_<%= singular_table_name %>_path, class: 'ui primary tiny icon button' do
9
+ %i.add.icon
10
+ = "#{cet('actions.new')} #{cet('<%= "entities.#{singular_table_name}" %>')}"
11
+
12
+ <%= template_hook 'before index.body' %>
13
+
14
+ = r '<%= plural_table_name %>/table/index', <%= plural_table_name %>: @<%= plural_table_name %>
15
+
16
+ <%= template_hook 'after index.body' -%>
@@ -0,0 +1,4 @@
1
+ - <%= plural_table_name %> ||= @<%= plural_table_name %>
2
+
3
+ - <%= plural_table_name %>.each do |<%= singular_table_name %>|
4
+ = r "<%= plural_table_name %>/list/item", <%= singular_table_name %>: <%= singular_table_name %>
@@ -0,0 +1,5 @@
1
+ <% for field in displayable_fields(:list_item) -%>
2
+ .field
3
+ %label= <%= field.label.text %>
4
+ <%= field.display(:list_item).render.indent 1 %>
5
+ <% end -%>
@@ -0,0 +1,3 @@
1
+ %h1.ui.header= "#{cet('actions.new')} #{cet('entities.<%= singular_table_name %>')}"
2
+
3
+ = render 'form', <%= singular_table_name %>: @<%= singular_table_name %>
@@ -0,0 +1,9 @@
1
+ - <%= singular_table_name %> ||= @<%= singular_table_name %>
2
+
3
+ .ui.form
4
+
5
+ <% for field in displayable_fields(:show) -%>
6
+ .field
7
+ %label= <%= field.label.text %>
8
+ <%= field.display(:show).render.indent 2 %>
9
+ <% end -%>
@@ -0,0 +1,5 @@
1
+ %thead
2
+ %tr
3
+ <% for field in displayable_fields(:table_item) -%>
4
+ %th= <%= field.label.text %>
5
+ <% end -%>
@@ -0,0 +1,8 @@
1
+ - <%= plural_table_name %> ||= @<%= plural_table_name %>
2
+
3
+ %table.ui.table
4
+ = r "<%= plural_table_name %>/table/header"
5
+
6
+ %tbody
7
+ - <%= plural_table_name %>.each do |<%= singular_table_name %>|
8
+ = r "<%= plural_table_name %>/table/item", <%= singular_table_name %>: <%= singular_table_name %>
@@ -0,0 +1,5 @@
1
+ %tr
2
+ <% for field in displayable_fields(:table_item) -%>
3
+ %td
4
+ <%= field.display(:table_item).render.indent 2 %>
5
+ <% end -%>
@@ -0,0 +1,36 @@
1
+ require_relative 'base'
2
+
3
+ module BrainDamage
4
+ module ViewSchemas
5
+ class Custom < Base
6
+ def find_views_names
7
+ @views_names = []
8
+ end
9
+
10
+ def ensure_views_descriptions
11
+ if @resource.root and File.directory? @resource.root
12
+ custom_views = Dir[ File.join(@resource.root, 'views/**/*') ].select { |file|
13
+ file =~ /\.html\.haml/
14
+ }.map { |file|
15
+ file_name = file.gsub(@resource.root+'/views/', '')
16
+
17
+ { name: file_name.gsub('.html.haml', ''), template_name: file, file_name: file_name }
18
+ }
19
+
20
+ custom_views.each do |custom_view|
21
+ describe_view custom_view[:name], template_name: custom_view[:template_name], file_name: custom_view[:file_name]
22
+ end
23
+ end
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,13 @@
1
+ require_relative 'base'
2
+
3
+ module BrainDamage
4
+ module ViewSchemas
5
+ class Factory
6
+ def self.create(name, resource)
7
+ name = name.to_s
8
+ require_relative name
9
+ eval("BrainDamage::ViewSchemas::#{name.camelize}").new resource
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,27 @@
1
+ module BrainDamage
2
+ module ViewSchemas
3
+ class InlineEditable < Base
4
+ def initialize(resource)
5
+ @resource = resource
6
+ @views = {}
7
+ end
8
+
9
+ def ensure_views_descriptions
10
+ @resource.displayable_and_inputable_fields.each do |field|
11
+ unless view_described? "inline_edit/_#{field.name}"
12
+ describe_view "inline_edit/_#{field.name}", view_class_name: 'InlineEdit::Field', field: field
13
+ end
14
+ end
15
+ end
16
+
17
+ private
18
+ def self.dir
19
+ __dir__
20
+ end
21
+
22
+ def dir
23
+ __dir__
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../base/base'
2
+
3
+ module BrainDamage
4
+ module View
5
+ module InlineEditable
6
+ class Base < Base::Base
7
+ attr_reader :file_name
8
+
9
+ private
10
+ def self.dir
11
+ __dir__
12
+ end
13
+
14
+ def dir
15
+ __dir__
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,47 @@
1
+ module BrainDamage
2
+ module View
3
+ module InlineEditable
4
+ module InlineEdit
5
+ class Field < Base
6
+ attr_reader :field
7
+
8
+ def initialize(resource, options = {})
9
+ @file_name = "inline_edit/_#{options[:field].name}.html.haml"
10
+ @field = options[:field]
11
+
12
+ options = {
13
+ multipart: false,
14
+ remote: true
15
+ }.merge options
16
+
17
+ super
18
+ end
19
+
20
+ def display_class
21
+ ''
22
+ end
23
+
24
+ def explicit_edit_action?
25
+ false
26
+ end
27
+
28
+ def multipart?
29
+ @options[:multipart]
30
+ end
31
+
32
+ def remote?
33
+ @options[:remote]
34
+ end
35
+
36
+ def guard?
37
+ true
38
+ end
39
+
40
+ def guard
41
+ ['alface']
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,10 @@
1
+ module BrainDamage
2
+ module View
3
+ module InlineEditable
4
+ module InlineEdit
5
+ class InlineEdit < Base
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,33 @@
1
+ - <%= singular_table_name %> ||= @<%= singular_table_name %>
2
+ - prefix ||= '<%= singular_table_name %>'
3
+
4
+ - inner_inline_edit_id = bd_id 'inline-edit-<%= singular_table_name %>'
5
+ .brain-damage-with-hidden-actions.brain-damage-inline-edit{ id: inner_inline_edit_id, class: '<%= display_class %>' }
6
+ .brain-damage-inline-edit-display
7
+ <%= field.display(:inline_editable_display).render.indent 2 %>
8
+
9
+ <% if explicit_edit_action? %>
10
+ .line
11
+ %br
12
+ .ui.basic.tiny.icon.button.brain-damage-edit
13
+ = t('actions.edit')
14
+ %i.edit.icon
15
+
16
+ <% else %>
17
+ .brain-damage-inline-edit-actions
18
+ %a.icon-wrapper
19
+ %i.brain-damage-inline-edit-edit.edit.icon
20
+ <% end %>
21
+
22
+ .brain-damage-inline-edit-form.ui.segment
23
+ = form_for <%= singular_table_name %>, html: { class: 'ui form', multipart: <%= multipart? %> }, remote: <%= remote? %>, validate: true do |f|
24
+ <%= field.input.render.indent 3 %>
25
+
26
+ %button.ui.small.icon.primary.button{ type: :submit }
27
+ %i.save.icon
28
+
29
+ .ui.small.basic.icon.button.brain-damage-inline-edit-cancel
30
+ %i.remove.icon
31
+
32
+ :coffeescript
33
+ new BrainDamage.InlineEdit "##{inner_inline_edit_id}", partial_to_show: "<%= plural_table_name %>/inline_edit/<%= field.name %>"
@@ -0,0 +1,14 @@
1
+ module BrainDamage
2
+ module ViewSchemas
3
+ class NestedFields < Base
4
+ private
5
+ def self.dir
6
+ __dir__
7
+ end
8
+
9
+ def dir
10
+ __dir__
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../base/base'
2
+
3
+ module BrainDamage
4
+ module View
5
+ module NestedFields
6
+ class Base < Base::Base
7
+ attr_reader :file_name
8
+
9
+ private
10
+ def self.dir
11
+ __dir__
12
+ end
13
+
14
+ def dir
15
+ __dir__
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,33 @@
1
+ - new_line_prefix = "#{prefix}[<%= plural_table_name %>_attributes][0]"
2
+ - edit_line_prefix = "#{prefix}[<%= plural_table_name %>_attributes][$id]"
3
+
4
+ - id = bd_id 'brain-damage-nested-form'
5
+ - prototype_id = bd_id 'brain-damage-nested-form-prototype'
6
+ - skip_nested_fields_controls ||= false
7
+ - <%= plural_table_name %> ||= []
8
+
9
+ %div{ :id => id }
10
+ - unless skip_nested_fields_controls
11
+ .ui.basic.mini.fluid.button.brain-damage-nested-form-add-button
12
+ %i.add.icon
13
+ = cet('actions.add')
14
+
15
+ - <%= plural_table_name %>.each do |edit_<%= singular_table_name %>|
16
+ .brain-damage-nested-form-line.brain-damage-nested-form-edit-line
17
+ - unless skip_nested_fields_controls
18
+ = link_to p, method: :delete, remote: true, data: { confirm: t('actions.confirm_nested_delete') }, class: 'brain-damage-nested-form-destroy-button brain-damage-delete' do
19
+ %i.trash.icon
20
+
21
+ = f.fields_for edit_<%= singular_table_name %> do |f|
22
+ = r "<%= plural_table_name %>/fields", f: f, prefix: edit_line_prefix.gsub('$id', edit_<%= singular_table_name %>.id.to_s), <%= singular_table_name %>: edit_<%= singular_table_name %>, nested_on: nested_on
23
+
24
+ .brain-damage-nested-form-line.brain-damage-nested-form-prototype{ id: prototype_id }
25
+ - unless skip_nested_fields_controls
26
+ .ui.mini.red.icon.button.brain-damage-nested-form-remove-button
27
+ %i.remove.icon
28
+
29
+ = fields_for <%= singular_table_name %> do |f|
30
+ = r "<%= plural_table_name %>/fields", f: f, prefix: new_line_prefix, <%= singular_table_name %>: <%= singular_table_name %>, nested_on: nested_on
31
+
32
+ :coffeescript
33
+ new BrainDamage.NestedFormControls "##{id}", { prototype_selector: "##{prototype_id}" }
@@ -0,0 +1,22 @@
1
+ module BrainDamage
2
+ module ViewSchemas
3
+ class SinglePageManager < Base
4
+ attr_accessor :list_layout
5
+
6
+ def initialize(resource)
7
+ super
8
+ @list_layout = :list
9
+ describe_view '_form', { remote: true }
10
+ end
11
+
12
+ private
13
+ def self.dir
14
+ __dir__
15
+ end
16
+
17
+ def dir
18
+ __dir__
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,40 @@
1
+ require_relative '../base/base'
2
+
3
+ module BrainDamage
4
+ module View
5
+ module SinglePageManager
6
+ class Base < Base::Base
7
+ attr_reader :file_name
8
+
9
+ def editable_guard
10
+ '@single_page_manager_options[:editable]'
11
+ end
12
+
13
+ def deletable_guard
14
+ '@single_page_manager_options[:deletable]'
15
+ end
16
+
17
+ def viewable_guard
18
+ '@single_page_manager_options[:viewable]'
19
+ end
20
+
21
+ def default_single_page_manager_options
22
+ {
23
+ editable: true,
24
+ deletable: true,
25
+ viewable: false
26
+ }.inspect
27
+ end
28
+
29
+ private
30
+ def self.dir
31
+ __dir__
32
+ end
33
+
34
+ def dir
35
+ __dir__
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'base'
2
+
3
+ module BrainDamage
4
+ module View
5
+ module SinglePageManager
6
+ module List
7
+ class Item < SinglePageManager::Base
8
+ def item_separator
9
+ return '' if @options[:item_separator] == false
10
+ @options[:item_separator] || '.ui.divider'
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,20 @@
1
+ - single_page_manager_id = bd_id 'single-page-manager'
2
+ - <%= plural_table_name %> ||= @<%= plural_table_name %>
3
+
4
+ - @single_page_manager_options ||= <%= default_single_page_manager_options %>
5
+ - @single_page_manager_options[:single_page_manager_script_duplicate_guard] = true
6
+
7
+ %h1
8
+ = "#{cet('<%= "entities.#{plural_table_name}" %>')}"
9
+
10
+ .ui.two.column.grid.brain-damage-single-page-manager{ id: single_page_manager_id }
11
+ .column
12
+ <%= template_hook 'before list.index' %>
13
+ = r '<%= plural_table_name %>/<%= list_layout %>/index', <%= plural_table_name %>: @<%= plural_table_name %>
14
+ <%= template_hook 'after list.index' -%>
15
+
16
+ .column.brain-damage-add-form-wrapper
17
+ = r '<%= plural_table_name %>/form'
18
+
19
+ :coffeescript
20
+ new BrainDamage.SinglePageManager "##{single_page_manager_id}"