brain_damage 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.byebug_history +32 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +41 -0
- data/Rakefile +6 -0
- data/app/assets/javascripts/ajax_delete.js.coffee +14 -0
- data/app/assets/javascripts/ajax_form.js.coffee +94 -0
- data/app/assets/javascripts/autocomplete-input.js.coffee +43 -0
- data/app/assets/javascripts/autocomplete-list.js.coffee +41 -0
- data/app/assets/javascripts/autocomplete-simple-select.js.coffee +39 -0
- data/app/assets/javascripts/autocomplete.js.coffee +17 -0
- data/app/assets/javascripts/brain_damage.js +3 -0
- data/app/assets/javascripts/datepicker.js.coffee +49 -0
- data/app/assets/javascripts/document_validity_input.js.coffee +16 -0
- data/app/assets/javascripts/expandable-list.js.coffee +16 -0
- data/app/assets/javascripts/form_initializer.js.coffee +8 -0
- data/app/assets/javascripts/helpers/conditionally-visible-field.js.coffee +13 -0
- data/app/assets/javascripts/hideable_content.js.coffee +25 -0
- data/app/assets/javascripts/inline_edit.js.coffee +58 -0
- data/app/assets/javascripts/label_file_field.js.coffee +22 -0
- data/app/assets/javascripts/label_file_field_ui_initializer.js.coffee +10 -0
- data/app/assets/javascripts/list_item.js.coffee +10 -0
- data/app/assets/javascripts/nested_form_controls.js.coffee +84 -0
- data/app/assets/javascripts/polymorphic_hibrid_input.js.coffee +14 -0
- data/app/assets/javascripts/polymorphic_select_input.js.coffee +28 -0
- data/app/assets/javascripts/rails.validations.actionView.js.coffee +18 -0
- data/app/assets/javascripts/scroll_loader.js.coffee +28 -0
- data/app/assets/javascripts/searchable_contents.js.coffee +62 -0
- data/app/assets/javascripts/selectable-list.js.coffee +92 -0
- data/app/assets/javascripts/sensible_to_ajax_view.js.coffee +60 -0
- data/app/assets/javascripts/single_page_manager.js.coffee +60 -0
- data/app/assets/javascripts/stylesheets/_custom-best-in-place.css.sass +12 -0
- data/app/assets/javascripts/stylesheets/_top-search.css.sass +0 -0
- data/app/assets/javascripts/stylesheets/application.css +0 -0
- data/app/assets/javascripts/trailing_form.js.coffee +16 -0
- data/app/assets/javascripts/ui_initializer.js.coffee +23 -0
- data/app/assets/javascripts/underscore.min.js +6 -0
- data/app/assets/stylesheets/brain_damage.css.sass +214 -0
- data/app/views/brain_damage/_empty.html.haml +1 -0
- data/app/views/brain_damage/empty.html.haml +1 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/brain_damage.gemspec +36 -0
- data/lib/brain_damage.rb +16 -0
- data/lib/brain_damage/brain_damage_helper.rb +75 -0
- data/lib/brain_damage/version.rb +3 -0
- data/lib/generators/brain_damage/full/full_generator.rb +37 -0
- data/lib/generators/brain_damage/lib/controller/controller_generator.rb +45 -0
- data/lib/generators/brain_damage/lib/controller/templates/controller.rb +9 -0
- data/lib/generators/brain_damage/lib/controller/templates/private_methods/get_partial_locals.rb +3 -0
- data/lib/generators/brain_damage/lib/controller/templates/private_methods/set_singular_table_name.rb +3 -0
- data/lib/generators/brain_damage/lib/controller/templates/private_methods/singular_table_name_params.rb +3 -0
- data/lib/generators/brain_damage/lib/controller/templates/public_methods/create.rb +21 -0
- data/lib/generators/brain_damage/lib/controller/templates/public_methods/destroy.rb +14 -0
- data/lib/generators/brain_damage/lib/controller/templates/public_methods/edit.rb +2 -0
- data/lib/generators/brain_damage/lib/controller/templates/public_methods/index.rb +3 -0
- data/lib/generators/brain_damage/lib/controller/templates/public_methods/new.rb +3 -0
- data/lib/generators/brain_damage/lib/controller/templates/public_methods/show.rb +2 -0
- data/lib/generators/brain_damage/lib/controller/templates/public_methods/update.rb +25 -0
- data/lib/generators/brain_damage/lib/field.rb +163 -0
- data/lib/generators/brain_damage/lib/field_white_list.rb +21 -0
- data/lib/generators/brain_damage/lib/includes.rb +12 -0
- data/lib/generators/brain_damage/lib/migration.rb +76 -0
- data/lib/generators/brain_damage/lib/model/model_generator.rb +115 -0
- data/lib/generators/brain_damage/lib/model/templates/model.rb +12 -0
- data/lib/generators/brain_damage/lib/parametizer.rb +19 -0
- data/lib/generators/brain_damage/lib/relation/base.rb +50 -0
- data/lib/generators/brain_damage/lib/relation/belongs_to.rb +29 -0
- data/lib/generators/brain_damage/lib/relation/has_and_belongs_to_many.rb +22 -0
- data/lib/generators/brain_damage/lib/relation/has_many.rb +35 -0
- data/lib/generators/brain_damage/lib/relation/has_one.rb +18 -0
- data/lib/generators/brain_damage/lib/resource.rb +150 -0
- data/lib/generators/brain_damage/lib/ruby_simple_parser/block.rb +33 -0
- data/lib/generators/brain_damage/lib/ruby_simple_parser/class_definition.rb +19 -0
- data/lib/generators/brain_damage/lib/ruby_simple_parser/code_line.rb +16 -0
- data/lib/generators/brain_damage/lib/ruby_simple_parser/global_context.rb +8 -0
- data/lib/generators/brain_damage/lib/ruby_simple_parser/line_classifier.rb +107 -0
- data/lib/generators/brain_damage/lib/ruby_simple_parser/method.rb +23 -0
- data/lib/generators/brain_damage/lib/ruby_simple_parser/parser.rb +114 -0
- data/lib/generators/brain_damage/lib/ruby_simple_parser/ruby_simple_parser.rb +11 -0
- data/lib/generators/brain_damage/lib/templateable/base.rb +53 -0
- data/lib/generators/brain_damage/lib/templateable/class_templateable.rb +88 -0
- data/lib/generators/brain_damage/lib/templateable/field_templateable.rb +42 -0
- data/lib/generators/brain_damage/lib/templateable/view_templateable.rb +23 -0
- data/lib/generators/brain_damage/lib/views/displays/base.rb +14 -0
- data/lib/generators/brain_damage/lib/views/displays/bright_text.rb +14 -0
- data/lib/generators/brain_damage/lib/views/displays/collection_list.rb +22 -0
- data/lib/generators/brain_damage/lib/views/displays/default.rb +11 -0
- data/lib/generators/brain_damage/lib/views/displays/foreign_single_page_manager.rb +46 -0
- data/lib/generators/brain_damage/lib/views/displays/hidden.rb +26 -0
- data/lib/generators/brain_damage/lib/views/displays/inline_editable.rb +27 -0
- data/lib/generators/brain_damage/lib/views/displays/link_to.rb +42 -0
- data/lib/generators/brain_damage/lib/views/displays/linked_collection_list.rb +26 -0
- data/lib/generators/brain_damage/lib/views/displays/templates/bright_text.html.haml +7 -0
- data/lib/generators/brain_damage/lib/views/displays/templates/collection_list.html.haml +31 -0
- data/lib/generators/brain_damage/lib/views/displays/templates/custom.html.haml +5 -0
- data/lib/generators/brain_damage/lib/views/displays/templates/default.html.haml +4 -0
- data/lib/generators/brain_damage/lib/views/displays/templates/foreign_single_page_manager.html.haml +1 -0
- data/lib/generators/brain_damage/lib/views/displays/templates/inline_editable.html.haml +8 -0
- data/lib/generators/brain_damage/lib/views/displays/templates/link_to.html.haml +9 -0
- data/lib/generators/brain_damage/lib/views/displays/templates/linked_collection_list.html.haml +31 -0
- data/lib/generators/brain_damage/lib/views/displays/templates/text.html.haml +4 -0
- data/lib/generators/brain_damage/lib/views/displays/templates/yes_or_no.html.haml +4 -0
- data/lib/generators/brain_damage/lib/views/displays/text.rb +43 -0
- data/lib/generators/brain_damage/lib/views/factory.rb +29 -0
- data/lib/generators/brain_damage/lib/views/inputs/autocompletable.rb +26 -0
- data/lib/generators/brain_damage/lib/views/inputs/autocompletable_multiple_selection.rb +25 -0
- data/lib/generators/brain_damage/lib/views/inputs/autocompletable_simple_selection.rb +21 -0
- data/lib/generators/brain_damage/lib/views/inputs/base.rb +23 -0
- data/lib/generators/brain_damage/lib/views/inputs/checkbox.rb +14 -0
- data/lib/generators/brain_damage/lib/views/inputs/collection_checkboxes.rb +10 -0
- data/lib/generators/brain_damage/lib/views/inputs/collection_select.rb +11 -0
- data/lib/generators/brain_damage/lib/views/inputs/default.rb +11 -0
- data/lib/generators/brain_damage/lib/views/inputs/hierarchy_picker.rb +11 -0
- data/lib/generators/brain_damage/lib/views/inputs/nested_form.rb +34 -0
- data/lib/generators/brain_damage/lib/views/inputs/nested_on_hideable.rb +22 -0
- data/lib/generators/brain_damage/lib/views/inputs/polymorphic_hybrid.rb +44 -0
- data/lib/generators/brain_damage/lib/views/inputs/polymorphic_select.rb +33 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/autocompletable_multiple_selection.html.haml +20 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/autocompletable_simple_selection.html.haml +25 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/checkbox.html.haml +3 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/collection_checkboxes.html.haml +6 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/collection_select.html.haml +9 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/custom.html.haml +5 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/default.html.haml +1 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/file.html.haml +5 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/hierarchy_picker.html.haml +19 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/nested_form.html.haml +2 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/polymorphic_hybrid.html.haml +20 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/polymorphic_select.html.haml +22 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/simple_select.html.haml +1 -0
- data/lib/generators/brain_damage/lib/views/inputs/templates/text.html.haml +1 -0
- data/lib/generators/brain_damage/lib/views/labels/base.rb +26 -0
- data/lib/generators/brain_damage/lib/views/labels/default.rb +15 -0
- data/lib/generators/brain_damage/lib/views/labels/templates/default.html.haml +6 -0
- data/lib/generators/brain_damage/lib/views/modules/inline_editable.rb +16 -0
- data/lib/generators/brain_damage/lib/views/schemas/autocompletable.rb +36 -0
- data/lib/generators/brain_damage/lib/views/schemas/autocompletable/base.rb +26 -0
- data/lib/generators/brain_damage/lib/views/schemas/autocompletable/templates/_links.html.haml +8 -0
- data/lib/generators/brain_damage/lib/views/schemas/autocompletable/templates/_multiple_selection.html.haml +6 -0
- data/lib/generators/brain_damage/lib/views/schemas/autocompletable/templates/_simple_selection.html.haml +6 -0
- data/lib/generators/brain_damage/lib/views/schemas/base.rb +97 -0
- data/lib/generators/brain_damage/lib/views/schemas/base/base.rb +86 -0
- data/lib/generators/brain_damage/lib/views/schemas/base/form.rb +24 -0
- data/lib/generators/brain_damage/lib/views/schemas/base/templates/_fields.html.haml +10 -0
- data/lib/generators/brain_damage/lib/views/schemas/base/templates/_form.html.haml +15 -0
- data/lib/generators/brain_damage/lib/views/schemas/base/templates/index.html.haml +16 -0
- data/lib/generators/brain_damage/lib/views/schemas/base/templates/list/_index.html.haml +4 -0
- data/lib/generators/brain_damage/lib/views/schemas/base/templates/list/_item.html.haml +5 -0
- data/lib/generators/brain_damage/lib/views/schemas/base/templates/new.html.haml +3 -0
- data/lib/generators/brain_damage/lib/views/schemas/base/templates/show.html.haml +9 -0
- data/lib/generators/brain_damage/lib/views/schemas/base/templates/table/_header.html.haml +5 -0
- data/lib/generators/brain_damage/lib/views/schemas/base/templates/table/_index.html.haml +8 -0
- data/lib/generators/brain_damage/lib/views/schemas/base/templates/table/_item.html.haml +5 -0
- data/lib/generators/brain_damage/lib/views/schemas/custom.rb +36 -0
- data/lib/generators/brain_damage/lib/views/schemas/factory.rb +13 -0
- data/lib/generators/brain_damage/lib/views/schemas/inline_editable.rb +27 -0
- data/lib/generators/brain_damage/lib/views/schemas/inline_editable/base.rb +20 -0
- data/lib/generators/brain_damage/lib/views/schemas/inline_editable/field.rb +47 -0
- data/lib/generators/brain_damage/lib/views/schemas/inline_editable/inline_edit.rb +10 -0
- data/lib/generators/brain_damage/lib/views/schemas/inline_editable/templates/inline_edit/_field.html.haml +33 -0
- data/lib/generators/brain_damage/lib/views/schemas/inline_editable/templates/inline_edit/_inline_edit.html.haml +0 -0
- data/lib/generators/brain_damage/lib/views/schemas/nested_fields.rb +14 -0
- data/lib/generators/brain_damage/lib/views/schemas/nested_fields/base.rb +20 -0
- data/lib/generators/brain_damage/lib/views/schemas/nested_fields/templates/_nested.fields.html.haml +33 -0
- data/lib/generators/brain_damage/lib/views/schemas/single_page_manager.rb +22 -0
- data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/base.rb +40 -0
- data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/list_item.rb +16 -0
- data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/_single_page_manager.html.haml +20 -0
- data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/index.html.haml +1 -0
- data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_index.form.html.haml +20 -0
- data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_index.html.haml +27 -0
- data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_item.display.html.haml +5 -0
- data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_item.form.html.haml +21 -0
- data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_item.html.haml +33 -0
- data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_simple.html.haml +4 -0
- data/lib/generators/brain_damage/lib/views/views_generator.rb +37 -0
- data/lib/generators/brain_damage/resource/USAGE +8 -0
- data/lib/generators/brain_damage/resource/helpers.rb +117 -0
- data/lib/generators/brain_damage/resource/monkeys/string.rb +17 -0
- data/lib/generators/brain_damage/resource/resource_generator.rb +139 -0
- data/lib/generators/brain_damage/resource/templates/controller.rb +40 -0
- data/lib/generators/brain_damage/resource/templates/inputs/_simple_select.html.haml +1 -0
- data/lib/generators/brain_damage/resource/templates/views/common/_fields.html.haml +11 -0
- data/lib/generators/brain_damage/resource/templates/views/common/show.html.haml +11 -0
- data/lib/generators/brain_damage/resource/templates/views/full_entity/_form.html.haml +13 -0
- data/lib/generators/brain_damage/resource/templates/views/full_entity/_index.body.html.haml +4 -0
- data/lib/generators/brain_damage/resource/templates/views/full_entity/_index.html.haml +5 -0
- data/lib/generators/brain_damage/resource/templates/views/full_entity/_table.header.html.haml +7 -0
- data/lib/generators/brain_damage/resource/templates/views/full_entity/_table.item.html.haml +8 -0
- data/lib/generators/brain_damage/resource/templates/views/full_entity/index.html.haml +16 -0
- data/lib/generators/brain_damage/resource/templates/views/full_entity/new.html.haml +3 -0
- data/lib/generators/brain_damage/resource/templates/views/scaffold/_menu.entry.html.haml +1 -0
- data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_form.html.haml +15 -0
- data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_index.body.html.haml +4 -0
- data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_single_page_manager.html.haml +17 -0
- data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.form.html.haml +21 -0
- data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.header.html.haml +12 -0
- data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.html.haml +27 -0
- data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.item.form.html.haml +21 -0
- data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.item.html.haml +32 -0
- data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.item.show.html.haml +13 -0
- data/lib/generators/brain_damage/resource/templates/views/single_page_manager/index.html.haml +4 -0
- data/lib/generators/brain_damage/resource/templates/views/special/_fields.show.inline.html.haml +10 -0
- data/lib/generators/brain_damage/resource/templates/views/special/_inline_edit.html.haml +2 -0
- data/lib/generators/brain_damage/resource/templates/views/special/_inner.show.inline.html.haml +20 -0
- data/lib/generators/brain_damage/resource/templates/views/special/_nested.fields.html.haml +33 -0
- data/lib/generators/brain_damage/resource/templates/views/special/_show.inline.html.haml +10 -0
- data/lib/generators/brain_damage/resource/templates/views/special/_trailing_form.show.inline.html.haml +12 -0
- metadata +328 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
class @DocumentValidityInput
|
2
|
+
constructor: (wrapper_selector, @types_with_validity) ->
|
3
|
+
@wrapper = $ wrapper_selector
|
4
|
+
|
5
|
+
@outer_wrapper = @wrapper.parents '.field'
|
6
|
+
@form = @wrapper.parents 'form'
|
7
|
+
@kind_field = $ "#document_kind"
|
8
|
+
|
9
|
+
@kind_field.change @update_validity_visibility
|
10
|
+
@update_validity_visibility()
|
11
|
+
|
12
|
+
update_validity_visibility: =>
|
13
|
+
if @kind_field.val() in @types_with_validity
|
14
|
+
@outer_wrapper.show()
|
15
|
+
else
|
16
|
+
@outer_wrapper.hide()
|
@@ -0,0 +1,16 @@
|
|
1
|
+
@BrainDamage ?= {}
|
2
|
+
|
3
|
+
class @BrainDamage.ExpandableList
|
4
|
+
constructor: (wrapper_selector) ->
|
5
|
+
@wrapper = $ wrapper_selector
|
6
|
+
@list = $ '.brain-damage-list', @wrapper
|
7
|
+
@form = $ '[id^=new]', @wrapper
|
8
|
+
|
9
|
+
# $('.brain-damage-list-item-wrapper', @list).each @iterateInstall
|
10
|
+
# new BrainDamage.AjaxForm @form, $('thead', @list), 'after', complete: @installListItem
|
11
|
+
|
12
|
+
# iterateInstall: (i, _item_wrapper) =>
|
13
|
+
# @installListItem _item_wrapper
|
14
|
+
|
15
|
+
# installListItem: (item_wrapper) =>
|
16
|
+
# new BrainDamage.ListItem item_wrapper
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class @ConditionallyVisibleField
|
2
|
+
constructor: (@field, @dependsOn, @condition) ->
|
3
|
+
@dependsOn.change @verifyFieldVisibility
|
4
|
+
@verifyFieldVisibility()
|
5
|
+
|
6
|
+
verifyFieldVisibility: =>
|
7
|
+
if @shouldBeVisible()
|
8
|
+
@field.fadeIn()
|
9
|
+
else
|
10
|
+
@field.hide()
|
11
|
+
|
12
|
+
shouldBeVisible: ->
|
13
|
+
@dependsOn.val() == @condition
|
@@ -0,0 +1,25 @@
|
|
1
|
+
@BrainDamage ?= {}
|
2
|
+
|
3
|
+
class @BrainDamage.HideableContent
|
4
|
+
constructor: (wrapper_selector, @args = {}) ->
|
5
|
+
@args = $.extend @args,
|
6
|
+
show_selector: '.brain-damage-show',
|
7
|
+
hide_selector: '.brain-damage-cancel',
|
8
|
+
hideable_selector: '.brain-damage-hideable-content',
|
9
|
+
|
10
|
+
@wrapper = $ wrapper_selector
|
11
|
+
|
12
|
+
@hideable = $ @args.hideable_selector, @wrapper
|
13
|
+
@show_button = $ @args.show_selector, @wrapper
|
14
|
+
@hide_button = $ @args.hide_selector, @wrapper
|
15
|
+
|
16
|
+
@show_button.click @show
|
17
|
+
@hide_button.click @hide
|
18
|
+
|
19
|
+
show: =>
|
20
|
+
@show_button.hide()
|
21
|
+
@hideable.fadeIn()
|
22
|
+
|
23
|
+
hide: =>
|
24
|
+
@hideable.hide()
|
25
|
+
@show_button.css 'display', ''
|
@@ -0,0 +1,58 @@
|
|
1
|
+
@BrainDamage ?= {}
|
2
|
+
|
3
|
+
class @BrainDamage.InlineEdit
|
4
|
+
constructor: (wrapper_selector, @options = {}) ->
|
5
|
+
|
6
|
+
@options = $.extend {
|
7
|
+
cancel_button_selector: '.brain-damage-inline-edit-cancel'
|
8
|
+
edit_button_selector: '.brain-damage-inline-edit-edit'
|
9
|
+
|
10
|
+
display_selector: '.brain-damage-inline-edit-display'
|
11
|
+
edition_selector: '.brain-damage-inline-edit-form'
|
12
|
+
edit_complete: null
|
13
|
+
partial_to_show: null
|
14
|
+
}, @options
|
15
|
+
|
16
|
+
@wrapper = $ wrapper_selector
|
17
|
+
|
18
|
+
@install()
|
19
|
+
|
20
|
+
install: =>
|
21
|
+
@display = $ @options.display_selector, @wrapper
|
22
|
+
@edition = $ @options.edition_selector, @wrapper
|
23
|
+
|
24
|
+
inner_inline_edit_form = $(".brain-damage-inline-edit form", @wrapper)
|
25
|
+
inner_inline_edit_buttons = $(".brain-damage-inline-edit #{@options.edit_button_selector}", @wrapper)
|
26
|
+
|
27
|
+
@form = $('form', @edition).not inner_inline_edit_form
|
28
|
+
|
29
|
+
$(@options.edit_button_selector, @wrapper).not(inner_inline_edit_buttons).click @show_form
|
30
|
+
$(@options.cancel_button_selector, @wrapper).click @hide_form
|
31
|
+
|
32
|
+
new BrainDamage.AjaxDelete @wrapper
|
33
|
+
new BrainDamage.AjaxForm @edition,
|
34
|
+
target: @wrapper
|
35
|
+
strategy: 'replace'
|
36
|
+
callbacks:
|
37
|
+
complete: @edit_complete
|
38
|
+
|
39
|
+
if @options.partial_to_show
|
40
|
+
@form.append "<input type='hidden' name='partial_to_show' value='#{@options.partial_to_show}' />"
|
41
|
+
|
42
|
+
@form.enableClientSideValidations()
|
43
|
+
|
44
|
+
show_form: =>
|
45
|
+
@display.hide()
|
46
|
+
@edition.fadeIn()
|
47
|
+
|
48
|
+
hide_form: =>
|
49
|
+
@edition.hide()
|
50
|
+
@display.fadeIn()
|
51
|
+
|
52
|
+
edit_complete: (item) =>
|
53
|
+
if @options.edit_complete
|
54
|
+
@options.edit_complete item
|
55
|
+
|
56
|
+
else
|
57
|
+
@install()
|
58
|
+
@hide_form()
|
@@ -0,0 +1,22 @@
|
|
1
|
+
@BrainDamage ?= {}
|
2
|
+
|
3
|
+
class BrainDamage.LabelFileField
|
4
|
+
constructor: (wrapper_selector = '.label-file-field-wrapper') ->
|
5
|
+
@wrapper = $ wrapper_selector
|
6
|
+
|
7
|
+
@input = $ 'input', @wrapper
|
8
|
+
@label = $ 'label', @wrapper
|
9
|
+
@label_text = $ ".text", @label
|
10
|
+
@original_label = @label_text.text()
|
11
|
+
|
12
|
+
@input.change @update_label
|
13
|
+
@update_label()
|
14
|
+
|
15
|
+
update_label: =>
|
16
|
+
if @input.val() == ''
|
17
|
+
@label_text.text @original_label
|
18
|
+
@label.removeClass('green').addClass 'basic'
|
19
|
+
|
20
|
+
else
|
21
|
+
@label_text.text @input.val()
|
22
|
+
@label.addClass('green').removeClass 'basic'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
@BrainDamage ?= {}
|
2
|
+
|
3
|
+
class BrainDamage.LabelFileFieldUiInitializer
|
4
|
+
constructor: (wrapper_selector = '.label-file-field-wrapper') ->
|
5
|
+
|
6
|
+
setup: ->
|
7
|
+
|
8
|
+
install: ->
|
9
|
+
$('.label-file-field-wrapper').each (i, wrapper) ->
|
10
|
+
new BrainDamage.LabelFileField wrapper
|
@@ -0,0 +1,10 @@
|
|
1
|
+
@BrainDamage ?= {}
|
2
|
+
|
3
|
+
class @BrainDamage.ListItem
|
4
|
+
constructor: (item_wrapper_selector) ->
|
5
|
+
new BrainDamage.InlineEdit item_wrapper_selector,
|
6
|
+
display_selector: '.brain-damage-list-item'
|
7
|
+
edition_selector: '.brain-damage-edit-list-item'
|
8
|
+
|
9
|
+
cancel_button_selector: '.brain-damage-cancel'
|
10
|
+
edit_button_selector: '.brain-damage-edit'
|
@@ -0,0 +1,84 @@
|
|
1
|
+
@BrainDamage ?= {}
|
2
|
+
|
3
|
+
class @BrainDamage.NestedFormControls
|
4
|
+
@configuration = {
|
5
|
+
after_add_line: []
|
6
|
+
}
|
7
|
+
|
8
|
+
constructor: (wrapper_selector, @config = {}) ->
|
9
|
+
_.defaults @config, {
|
10
|
+
context: 'new',
|
11
|
+
prototype_selector: '.brain-damage-nested-form-prototype'
|
12
|
+
add_button_selector: '.brain-damage-nested-form-add-button'
|
13
|
+
remove_button_selector: '.brain-damage-nested-form-remove-button'
|
14
|
+
line_selector: '.brain-damage-nested-form-line'
|
15
|
+
}
|
16
|
+
|
17
|
+
@wrapper = $ wrapper_selector
|
18
|
+
@submit = $ ':submit', @wrapper
|
19
|
+
|
20
|
+
@prototype = $ @config.prototype_selector, @wrapper
|
21
|
+
@add_button = $ @config.add_button_selector, @wrapper
|
22
|
+
@container = @prototype.parent()
|
23
|
+
|
24
|
+
@init()
|
25
|
+
@check_submit_visibility()
|
26
|
+
@add_button.on 'click', @add_line
|
27
|
+
@container.on 'click', @config.remove_button_selector, @remove_this_line
|
28
|
+
|
29
|
+
check_submit_visibility: =>
|
30
|
+
if @number_of_lines() > 0
|
31
|
+
@submit.parent().append(@submit)
|
32
|
+
@submit.fadeIn()
|
33
|
+
|
34
|
+
else
|
35
|
+
@submit.hide()
|
36
|
+
|
37
|
+
number_of_lines: ->
|
38
|
+
$(@config.prototype_selector, @wrapper).length
|
39
|
+
|
40
|
+
prepare_prototype_html: ->
|
41
|
+
replacements = []
|
42
|
+
|
43
|
+
$('[name]', @prototype).each (i, _input) =>
|
44
|
+
input = $ _input
|
45
|
+
name = input.attr('name')
|
46
|
+
input.attr 'name', name.replace('[0]', "[#{@placeholder}]")
|
47
|
+
|
48
|
+
@prototype_html = @prototype.get(0).outerHTML
|
49
|
+
@prototype.remove()
|
50
|
+
|
51
|
+
@add_line() if @config.context == 'new'
|
52
|
+
|
53
|
+
add_line: =>
|
54
|
+
@i = (new Date).getTime()
|
55
|
+
|
56
|
+
line = $ @prototype_html.replace(@placeholder_regexp, @i)
|
57
|
+
line.hide()
|
58
|
+
@container.append line
|
59
|
+
line.fadeIn()
|
60
|
+
|
61
|
+
@check_submit_visibility()
|
62
|
+
|
63
|
+
if BrainDamage.NestedFormControls.configuration.after_add_line?
|
64
|
+
for f in BrainDamage.NestedFormControls.configuration.after_add_line
|
65
|
+
f line
|
66
|
+
|
67
|
+
remove_this_line: (e) =>
|
68
|
+
line = $(e.target).parents @config.line_selector
|
69
|
+
|
70
|
+
line.fadeOut =>
|
71
|
+
line.remove()
|
72
|
+
@check_submit_visibility()
|
73
|
+
|
74
|
+
add_ajax_delete_to_edit_lines: ->
|
75
|
+
$('.brain-damage-nested-form-edit-line', @wrapper).each (i, _e) =>
|
76
|
+
new BrainDamage.AjaxDelete _e
|
77
|
+
|
78
|
+
init: ->
|
79
|
+
@placeholder = @config.name+'-index'
|
80
|
+
@placeholder_regexp = new RegExp(@placeholder, 'g')
|
81
|
+
|
82
|
+
@i = 0
|
83
|
+
@prepare_prototype_html()
|
84
|
+
@add_ajax_delete_to_edit_lines()
|
@@ -0,0 +1,14 @@
|
|
1
|
+
@BrainDamage ?= {}
|
2
|
+
|
3
|
+
class @BrainDamage.PolymorphicHibridInput
|
4
|
+
constructor: (wrapper_selector, url, @action, @partial_to_show) ->
|
5
|
+
@wrapper = $ wrapper_selector
|
6
|
+
@form = @wrapper.parents 'form'
|
7
|
+
@inputs_items = $ '.polymorphic-hybrid-input-tabbed-menu .item', @wrapper
|
8
|
+
|
9
|
+
@inputs_items.tab()
|
10
|
+
@form.submit @remove_unused_inputs
|
11
|
+
|
12
|
+
remove_unused_inputs: =>
|
13
|
+
$('.tab.segment:not(.active)', @wrapper).remove()
|
14
|
+
true
|
@@ -0,0 +1,28 @@
|
|
1
|
+
@BrainDamage ?= {}
|
2
|
+
|
3
|
+
class @BrainDamage.PolymorphicSelectInput
|
4
|
+
constructor: (wrapper_selector) ->
|
5
|
+
@wrapper = $ wrapper_selector
|
6
|
+
@form = @wrapper.parents 'form'
|
7
|
+
|
8
|
+
@type_selector = $ '.polymorphic-select-type-selector', @wrapper
|
9
|
+
@object_selectors_wrappers = $ '.polymorphic-select-object-selector-wrapper', @wrapper
|
10
|
+
|
11
|
+
@toggle_object_selectors_visibility()
|
12
|
+
@type_selector.change @toggle_object_selectors_visibility
|
13
|
+
@form.submit @remove_unused_inputs
|
14
|
+
|
15
|
+
toggle_object_selectors_visibility: =>
|
16
|
+
@object_selectors_wrappers.hide()
|
17
|
+
|
18
|
+
@object_selectors_wrappers.filter(@current_object_selector_selector()).show()
|
19
|
+
|
20
|
+
current_object_selector_selector: ->
|
21
|
+
if @type_selector.val() == ''
|
22
|
+
':first'
|
23
|
+
else
|
24
|
+
".polymorphic-select-object-selector-#{@type_selector.val()}-wrapper"
|
25
|
+
|
26
|
+
remove_unused_inputs: =>
|
27
|
+
@object_selectors_wrappers.not(@current_object_selector_selector()).remove()
|
28
|
+
true
|
@@ -0,0 +1,18 @@
|
|
1
|
+
window.ClientSideValidations.formBuilders['ActionView::Helpers::FormBuilder'] =
|
2
|
+
add: (input, settings, messages) ->
|
3
|
+
window.ClientSideValidations.formBuilders['ActionView::Helpers::FormBuilder'].remove input, settings
|
4
|
+
|
5
|
+
input_wrapper = input.parents '.field'
|
6
|
+
messages = [ messages ] unless $.isArray messages
|
7
|
+
contents = messages.join "<br />"
|
8
|
+
|
9
|
+
input_wrapper.addClass 'error'
|
10
|
+
input_wrapper.append "<p class=\"ui red fluid small pointing label client-side-validations-error-message\">#{contents}</p>"
|
11
|
+
|
12
|
+
remove: (input, settings) ->
|
13
|
+
input_wrapper = input.parents '.field'
|
14
|
+
|
15
|
+
if input_wrapper.length > 0
|
16
|
+
# console.log input, input_wrapper, $('.client-side-validations-error-message', input_wrapper)
|
17
|
+
$('.client-side-validations-error-message', input_wrapper).remove()
|
18
|
+
input_wrapper.removeClass 'error'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class @ScrollLoader
|
2
|
+
constructor: (@url = document.URL, scrollable_selector = window, list_selector = '.brain-damage-list', status_selector = '.scroll-loader-status') ->
|
3
|
+
|
4
|
+
@scrollable = $ scrollable_selector
|
5
|
+
@list = $ list_selector
|
6
|
+
@status = $ status_selector
|
7
|
+
@offset = 0
|
8
|
+
|
9
|
+
@url = @url.replace('.json', '')+'.json'
|
10
|
+
|
11
|
+
@scrollable.scroll () =>
|
12
|
+
if @scrollable.scrollTop() == ($(document).height() - @scrollable.height())
|
13
|
+
@load_entries()
|
14
|
+
|
15
|
+
load_entries: =>
|
16
|
+
@offset += 1
|
17
|
+
@status.addClass 'loading'
|
18
|
+
|
19
|
+
$.ajax
|
20
|
+
url: @url
|
21
|
+
method: 'get'
|
22
|
+
data: { offset: @offset }
|
23
|
+
complete: @entries_loaded
|
24
|
+
type: 'json'
|
25
|
+
|
26
|
+
entries_loaded: (data) =>
|
27
|
+
@status.removeClass 'loading'
|
28
|
+
@list.append data.responseJSON.html
|
@@ -0,0 +1,62 @@
|
|
1
|
+
@BrainDamage = @BrainDamage or {}
|
2
|
+
|
3
|
+
class BrainDamage.SearchableContent
|
4
|
+
constructor: (wrapper_selector, @item_selector = '.searchable-item', @args = {}) ->
|
5
|
+
@wrapper = $ wrapper_selector
|
6
|
+
@input_wrapper = $ '.searchable-input-wrapper', @wrapper
|
7
|
+
|
8
|
+
@input = $ '.searchable-input', @input_wrapper
|
9
|
+
@input.on 'keyup', _.throttle @filter, 200, leading: false
|
10
|
+
|
11
|
+
@input_wrapper.on 'click', '.icon', =>
|
12
|
+
@input.val('').keyup()
|
13
|
+
|
14
|
+
@query = false
|
15
|
+
@update_items()
|
16
|
+
@state()
|
17
|
+
|
18
|
+
state: ->
|
19
|
+
if @query
|
20
|
+
$('.close', @input_wrapper).show()
|
21
|
+
$('.search', @input_wrapper).hide()
|
22
|
+
|
23
|
+
else
|
24
|
+
$('.close', @input_wrapper).hide()
|
25
|
+
$('.search', @input_wrapper).show()
|
26
|
+
|
27
|
+
update_items: ->
|
28
|
+
@items = []
|
29
|
+
|
30
|
+
$(@item_selector, @wrapper).each (index, _item) =>
|
31
|
+
item = $ _item
|
32
|
+
|
33
|
+
@items.push
|
34
|
+
match_text: item.attr 'data-searchable-text'
|
35
|
+
item: item
|
36
|
+
|
37
|
+
filter: =>
|
38
|
+
if @input.val() != ''
|
39
|
+
@query = new RegExp(@input.val(), 'i')
|
40
|
+
else
|
41
|
+
@query = false
|
42
|
+
|
43
|
+
@state()
|
44
|
+
@filter_items()
|
45
|
+
|
46
|
+
filter_items: ->
|
47
|
+
for item in @items
|
48
|
+
if @query and !item.match_text.match @query
|
49
|
+
item.item.hide()
|
50
|
+
else
|
51
|
+
item.item.show()
|
52
|
+
|
53
|
+
evalCandidate: (item) =>
|
54
|
+
matcheable_item = $ '> .hierarchy-view-item-name .hierarchy-search-matcheable-string', item
|
55
|
+
|
56
|
+
if @query and matcheable_item.text().match @query
|
57
|
+
Hierarchy.View.showHierarchyToItem item
|
58
|
+
matcheable_item.addClass 'hierarchy-search-match'
|
59
|
+
|
60
|
+
else if matcheable_item.is '.hierarchy-search-match'
|
61
|
+
Hierarchy.View.closeHierarchyToItem item
|
62
|
+
matcheable_item.removeClass 'hierarchy-search-match'
|
@@ -0,0 +1,92 @@
|
|
1
|
+
@BrainDamage ?= {}
|
2
|
+
|
3
|
+
class @BrainDamage.SelectableList
|
4
|
+
constructor: (list_selector, wrapper_selector, @selected_class, @action) ->
|
5
|
+
@list = $ list_selector
|
6
|
+
@wrapper = $ wrapper_selector
|
7
|
+
|
8
|
+
@list.on 'mouseenter', '.selectable-list-item', @mouse_over_item
|
9
|
+
@list.on 'mousedown', '.selectable-list-item', @prevent_outside_focus_loss
|
10
|
+
@list.on 'click', '.selectable-list-item', @take_action
|
11
|
+
|
12
|
+
@list_scrollable_container = @list.parent()
|
13
|
+
|
14
|
+
@wrapper.on 'keyup', @keyup
|
15
|
+
@wrapper.on 'keydown', @prevent_form_submission
|
16
|
+
|
17
|
+
prevent_outside_focus_loss: (e) ->
|
18
|
+
e.preventDefault()
|
19
|
+
|
20
|
+
html: (itens) ->
|
21
|
+
@list.html itens
|
22
|
+
@select $ '.selectable-list-item:first', @results_list
|
23
|
+
|
24
|
+
select: (item) ->
|
25
|
+
@selected_item.removeClass 'autocomplete-result-item-selected' if @selected_item
|
26
|
+
|
27
|
+
if item.length > 0
|
28
|
+
item.addClass 'autocomplete-result-item-selected'
|
29
|
+
@selected_item = item
|
30
|
+
else
|
31
|
+
@selected_item = false
|
32
|
+
|
33
|
+
@scroll_to_selected_item()
|
34
|
+
|
35
|
+
scroll_to_selected_item: ->
|
36
|
+
if @selected_item
|
37
|
+
item_top = @selected_item.position().top
|
38
|
+
item_height = @selected_item.outerHeight true
|
39
|
+
wrapper_scroll = @list_scrollable_container.scrollTop()
|
40
|
+
wrapper_height = @list_scrollable_container.height()
|
41
|
+
position_difference = 0
|
42
|
+
|
43
|
+
if item_top < wrapper_scroll
|
44
|
+
position_difference = item_top - wrapper_scroll
|
45
|
+
|
46
|
+
else if (item_top + item_height) > (wrapper_scroll + wrapper_height)
|
47
|
+
position_difference = (item_top + item_height) - (wrapper_scroll + wrapper_height)
|
48
|
+
|
49
|
+
@list_scrollable_container.scrollTop @list_scrollable_container.scrollTop() + position_difference if position_difference != 0
|
50
|
+
|
51
|
+
mouse_over_item: (e) =>
|
52
|
+
@select $ e.target
|
53
|
+
|
54
|
+
take_action: =>
|
55
|
+
@action @selected_item if @action and @selected_item
|
56
|
+
|
57
|
+
keyup: (e) =>
|
58
|
+
if e.which == 38
|
59
|
+
@select_above()
|
60
|
+
|
61
|
+
else if e.which == 40 #bottom
|
62
|
+
@select_below()
|
63
|
+
|
64
|
+
else if e.which == 13 #enter
|
65
|
+
@take_action()
|
66
|
+
return false
|
67
|
+
|
68
|
+
prevent_form_submission: (e) =>
|
69
|
+
if e.which == 13 #enter
|
70
|
+
e.preventDefault()
|
71
|
+
e.stopPropagation()
|
72
|
+
return false
|
73
|
+
|
74
|
+
select_above: =>
|
75
|
+
if @selected_item
|
76
|
+
prev = @selected_item.prevAll('.selectable-list-item:visible').first()
|
77
|
+
|
78
|
+
if prev.length > 0
|
79
|
+
@select prev
|
80
|
+
return
|
81
|
+
|
82
|
+
@select $ '.selectable-list-item:last', @results_list
|
83
|
+
|
84
|
+
select_below: =>
|
85
|
+
if @selected_item
|
86
|
+
next = @selected_item.nextAll('.selectable-list-item:visible').first()
|
87
|
+
|
88
|
+
if next.length > 0
|
89
|
+
@select next
|
90
|
+
return
|
91
|
+
|
92
|
+
@select $ '.selectable-list-item:first', @results_list
|