binda 0.1.8 → 0.1.9

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +72 -41
  3. data/app/assets/stylesheets/binda/components/popup_warning.scss +20 -0
  4. data/app/controllers/binda/field_groups_controller.rb +2 -2
  5. data/app/controllers/binda/structures_controller.rb +1 -1
  6. data/app/helpers/binda/components_helper.rb +1 -1
  7. data/app/helpers/binda/field_groups_helper.rb +4 -4
  8. data/app/models/binda/field_setting.rb +1 -1
  9. data/app/models/binda/selection.rb +1 -1
  10. data/app/models/concerns/binda/default_helpers.rb +6 -11
  11. data/app/models/concerns/binda/fieldable_association_helpers/fieldable_audio_helpers.rb +0 -4
  12. data/app/models/concerns/binda/fieldable_association_helpers/fieldable_image_helpers.rb +3 -6
  13. data/app/models/concerns/binda/fieldable_association_helpers/fieldable_selection_helpers.rb +3 -3
  14. data/app/models/concerns/binda/fieldable_association_helpers/fieldable_svg_helpers.rb +0 -4
  15. data/app/models/concerns/binda/fieldable_association_helpers/fieldable_video_helpers.rb +0 -4
  16. data/app/views/binda/field_groups/form_item/_form_item_editor_existing_item.html.erb +5 -2
  17. data/app/views/binda/fieldable/_form_body.html.erb +1 -2
  18. data/app/views/binda/fieldable/_form_item_audio.html.erb +2 -1
  19. data/app/views/binda/fieldable/_form_item_date.html.erb +1 -0
  20. data/app/views/binda/fieldable/_form_item_image.html.erb +2 -1
  21. data/app/views/binda/fieldable/_form_item_string.html.erb +2 -1
  22. data/app/views/binda/fieldable/_form_item_svg.html.erb +3 -3
  23. data/app/views/binda/fieldable/_form_item_text.html.erb +3 -2
  24. data/app/views/binda/fieldable/_form_item_video.html.erb +2 -1
  25. data/app/views/binda/fieldable/_form_section_repeater.html.erb +1 -1
  26. data/app/views/binda/fieldable/form_item_selections/_form_item_checkbox.html.erb +3 -1
  27. data/app/views/binda/fieldable/form_item_selections/_form_item_radio.html.erb +3 -1
  28. data/app/views/binda/fieldable/form_item_selections/_form_item_selection.html.erb +3 -1
  29. data/app/views/binda/structures/sort_index.html.erb +5 -0
  30. data/app/views/layouts/binda/_popup_warning.html.erb +4 -1
  31. data/app/views/layouts/binda/_sidebar.html.erb +7 -7
  32. data/app/views/layouts/binda/application.html.erb +1 -0
  33. data/config/initializers/simple_form__fileupload.rb +19 -14
  34. data/config/locales/en.yml +2 -1
  35. data/db/migrate/1_create_binda_tables.rb +1 -0
  36. data/lib/binda/factories.rb +3 -0
  37. data/lib/binda/version.rb +1 -1
  38. data/lib/generators/binda/install/templates/config/initializers/carrierwave.rb +2 -1
  39. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 53cde4479786e2c592e11052109e6362dd8f7f7e
4
- data.tar.gz: accd202eaa2c680a4758baa06386274a9a5e6634
3
+ metadata.gz: 7cdf2fdd2f63fc54ab639dce6c7c29e45c7c65bf
4
+ data.tar.gz: 73eef58c3714cb6e4c9650e41526ef536602335f
5
5
  SHA512:
6
- metadata.gz: 6ad573ff274813badf16f692a9a345a427016051689987e84e932749e7fbcfc58ee73ab4eb992a1979c16e9211fa687097eac580b1cf0763f54c185007963d5d
7
- data.tar.gz: fb4d4ad2059cfcc5feb9337cf580f497386de1ecb5712bbd46a099d1cb97b80740490a9a5d398040de27c07a4b108f901fd5e353f931a4dc55bb2e7d9c45d735
6
+ metadata.gz: 3028b32b74dd17caf6c09047ad1c471fdbceb89f3e94f53c45ee1b6060563c71ff07eb3605631c467f6014f5cde1295496450627194b66ad04ae7b962297b36b
7
+ data.tar.gz: 51c1457dabf83268f75850c134962476c2e03bc345d9b9a5c056a056bf89e195391abc0dac834ca58ca6730302244bf7c0c8f39d34606685c9a1b40c42806c07
data/README.md CHANGED
@@ -4,7 +4,6 @@ A modular CMS for Ruby on Rails 5.1.
4
4
  [![Gem Version](https://badge.fury.io/rb/binda.svg)](https://badge.fury.io/rb/binda)
5
5
  [![Code Climate](https://codeclimate.com/github/lacolonia/binda/badges/gpa.svg)](https://codeclimate.com/github/lacolonia/binda)
6
6
  [![Test Coverage](https://api.codeclimate.com/v1/badges/5dc62774a6b8b63aa72b/test_coverage)](https://codeclimate.com/github/lacolonia/binda/test_coverage)
7
- [![Dependency Status](https://gemnasium.com/badges/github.com/lacolonia/binda.svg)](https://gemnasium.com/github.com/lacolonia/binda)
8
7
  [![Inline docs](http://inch-ci.org/github/lacolonia/binda.svg?branch=master)](http://inch-ci.org/github/lacolonia/binda)
9
8
 
10
9
  > This documentation has been written for the [Official Documentation](http://www.rubydoc.info/gems/binda), not the Github README.
@@ -16,7 +15,7 @@ A modular CMS for Ruby on Rails 5.1.
16
15
 
17
16
  # Quick Start
18
17
 
19
- **Binda** is a headless CMS with an intuitive out-of-the-box interface which makes very easy to create your application infrastructure.
18
+ **Binda** is a headless CMS with an intuitive out-of-the-box interface which makes very easy creating application infrastructures.
20
19
 
21
20
  The core element is the _structure_ element which is the finger print of any _component_ instance. Every _structure_ can have one or more _field-groups_ which can be populated with several _field-settings_. _Field-groups_ and _field-settings_ represent _components_ features, such as galleries, textareas, dates, repeaters and so on.
22
21
 
@@ -60,7 +59,7 @@ bundle install
60
59
 
61
60
  Before completing the installation you need to setup the database. If you are going to use Postgres set it up now.
62
61
 
63
- To complete binda installation run the installer from terminal. Binda will take you through a bit of configuration where you will setup the first user and some basic details.
62
+ To complete binda installation run the installer from terminal. Binda will take you through a short configuration process where you will setup the first user and some basic details.
64
63
 
65
64
  ```bash
66
65
  rails generate binda:install
@@ -98,6 +97,16 @@ This lets you create another temporary super admin user.
98
97
  ## Specific needs
99
98
  In order to use Carrierwave to process images you need to run MiniMagik. Please refer to [Carrierwave documentation](https://github.com/carrierwaveuploader/carrierwave#using-minimagick) to find more information.
100
99
 
100
+ If you need absolute URLs for your images remember to set up your asset host in config/environments/production.rb
101
+
102
+ ```ruby
103
+ Rails.application.configure do
104
+ ...
105
+ config.action_controller.asset_host = 'http://your.host.com'
106
+ ...
107
+ end
108
+ ```
109
+
101
110
  If you are not going to use Rails default ORM please check [Carrierwave documentation](https://github.com/carrierwaveuploader/carrierwave#datamapper-mongoid-sequel) and [Devise documentation](https://github.com/plataformatec/devise#other-orms).
102
111
 
103
112
  ---
@@ -114,7 +123,7 @@ This two preferences can be changed later on inside _Dashboard_ panel visible in
114
123
 
115
124
  You can customize the _Dashboard_ panel adding, removing and modifing fields as you prefer. As a matter of fact in _Structures_ you can find the one related to _Dashboard_ which you can edit as you like. The only thing you shouldn't do is to turn it into a component!
116
125
 
117
- You can also create new boards if you need it. See https://github.com/lacolonia/binda/wiki/Boards
126
+ You can also create new boards if you need it, you just have to create a structure and set it to `board` via admin panel or assign `instance_type: 'board'` to _structure_ (`your_structure.update_attribute('instance_type', 'board')`).
118
127
 
119
128
  By default after the installation a `Board` called `dashboard` will be populated with three fields: a `Radio` called `maintenance-mode`, a `String` called `website-name` and `Text` called `webiste-description`.
120
129
 
@@ -431,39 +440,38 @@ You can retrieve field content from a instance of `Binda::Component`, `Binda::Bo
431
440
 
432
441
  | Helper |||
433
442
  |---|---|---|
434
- | `has_text`| Returns `true/false` | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:has_text) |
435
- | `get_text`| Returns the text. Use [`simple_format`](https://apidock.com/rails/ActionView/Helpers/TextHelper/simple_format) to maintain HTML tags. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_text) |
436
- | `has_string`| Returns `true/false`. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:has_string) |
437
- | `get_string`| Returns the text. Use [`simple_format`](https://apidock.com/rails/ActionView/Helpers/TextHelper/simple_format) to maintain HTML tags. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_string) |
438
- |`has_image`| Returns `true/false`.| [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:has_image) |
439
- |`get_image_url(size)`| Returns the url of the image. A thumbnail version (200x200) by specifying `thumb` size. If no size is provided the method will return the original image size. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_image_url) |
440
- |`get_image_path(size)`| Returns the path of the image. A thumbnail version (200x200) by specifying `thumb` size. If no size is provided the method will return the original image size. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_image_path) |
441
- |`get_image_size`| Returns the image size in MB. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_image_size) |
442
- |`get_image_dimension`| Returns a hash { width: xxx, height: xxx } with image dimension. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_image_dimension) |
443
- |`get_image_mime_type`| Returns the mime type of the image. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_image_mime_type) |
444
- |`has_svg`| Returns `true/false`.| [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:has_svg) |
445
- |`get_svg_url`| Returns the url of the svg. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_svg_url) |
446
- |`get_svg_path`| Returns the path of the svg. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_svg_path) |
447
- |`get_svg_size`| Returns the svg size in MB. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_svg_size) |
448
- |`get_svg_mime_type`| Returns the mime type of the svg. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_svg_mime_type) |
449
-
450
- |`has_video`| Returns `true/false`.| [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:has_video) |
451
- |`get_video_url`| Returns the url of the video. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_video_url) |
452
- |`get_video_path`| Returns the path of the video. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_video_path) |
453
- |`has_audio`| Returns `true/false`.| [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:has_audio) |
454
- |`get_audio_url`| Returns the url of the audio. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_audio_url) |
455
- |`get_audio_path`| Returns the path of the audio. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_audio_path) |
456
- |`has_date`| Returns `true/false` | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:has_date) |
457
- |`get_date`| Returns the date in `datetime` format. Use [`strftime`](https://apidock.com/rails/ActiveSupport/TimeWithZone/strftime) to change date format. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_date) |
458
- |`has_repeaters`| Returns `true/false`| [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:has_repeaters) |
459
- |`get_repeaters`| Returns an array of repeaters. See next session for more details. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_repeaters) |
460
- |`get_selection_choices`| Returns an hash with label and value of the selected choice. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_selection_choices) |
461
- |`get_radio_choice`| Returns an hash with label and value of the selected choice. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_radio_choice) |
462
- |`get_checkbox_choices`| Returns an array of label/value pairs of all the selected choices. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:get_checkbox_choices) |
463
- |`has_related_components`| Check if has related components. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:has_related_components) |
464
- |`get_related_components`| Retrieve related components. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:has_related_components) |
465
- |`has_related_boards`| Check if has related boards. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:has_related_boards) |
466
- |`get_related_boards`| Retrieve related boards. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers:has_related_boards) |
443
+ | `has_text`| Returns `true/false` | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableTextHelpers:has_text) |
444
+ | `get_text`| Returns the text. Use [`simple_format`](https://apidock.com/rails/ActionView/Helpers/TextHelper/simple_format) to maintain HTML tags. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableTextHelpers:get_text) |
445
+ | `has_string`| Returns `true/false`. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableStringHelpers:has_string) |
446
+ | `get_string`| Returns the text. Use [`simple_format`](https://apidock.com/rails/ActionView/Helpers/TextHelper/simple_format) to maintain HTML tags. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableStringHelpers:get_string) |
447
+ |`has_image`| Returns `true/false`.| [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableImageHelpers:has_image) |
448
+ |`get_image_url(size)`| Returns the url of the image. A thumbnail version (200x200) by specifying `thumb` size. If no size is provided the method will return the original image size. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableImageHelpers:get_image_url) |
449
+ |`get_image_path(size)`| Returns the path of the image. A thumbnail version (200x200) by specifying `thumb` size. If no size is provided the method will return the original image size. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableImageHelpers:get_image_path) |
450
+ |`get_image_size`| Returns the image size in MB. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableImageHelpers:get_image_size) |
451
+ |`get_image_dimension`| Returns a hash { width: xxx, height: xxx } with image dimension. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableImageHelpers:get_image_dimension) |
452
+ |`get_image_mime_type`| Returns the mime type of the image. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableImageHelpers:get_image_mime_type) |
453
+ |`has_svg`| Returns `true/false`.| [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableSvgHelpers:has_svg) |
454
+ |`get_svg_url`| Returns the url of the svg. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableSvgHelpers:get_svg_url) |
455
+ |`get_svg_path`| Returns the path of the svg. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableSvgHelpers:get_svg_path) |
456
+ |`get_svg_size`| Returns the svg size in MB. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableSvgHelpers:get_svg_size) |
457
+ |`get_svg_mime_type`| Returns the mime type of the svg. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableSvgHelpers:get_svg_mime_type) |
458
+ |`has_video`| Returns `true/false`.| [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableAudioHelpers:has_video)|
459
+ |`get_video_url`| Returns the url of the video. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableAudioHelpers:get_video_url) |
460
+ |`get_video_path`| Returns the path of the video. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableAudioHelpers:get_video_path) |
461
+ |`has_audio`| Returns `true/false`.| [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableAudioHelpers:has_audio) |
462
+ |`get_audio_url`| Returns the url of the audio. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableAudioHelpers:get_audio_url) |
463
+ |`get_audio_path`| Returns the path of the audio. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableAudioHelpers:get_audio_path) |
464
+ |`has_date`| Returns `true/false` | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableDateHelpers:has_date) |
465
+ |`get_date`| Returns the date in `datetime` format. Use [`strftime`](https://apidock.com/rails/ActiveSupport/TimeWithZone/strftime) to change date format. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableDateHelpers:get_date) |
466
+ |`has_repeaters`| Returns `true/false`| [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableRepeaterHelpers:has_repeaters) |
467
+ |`get_repeaters`| Returns an array of repeaters. See next session for more details. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableRepeaterHelpers:get_repeaters) |
468
+ |`get_selection_choices`| Returns an hash with label and value of the selected choice. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableSelectionHelpers:get_selection_choices) |
469
+ |`get_radio_choice`| Returns an hash with label and value of the selected choice. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableSelectionHelpers:get_radio_choice) |
470
+ |`get_checkbox_choices`| Returns an array of label/value pairs of all the selected choices. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableSelectionHelpers:get_checkbox_choices) |
471
+ |`has_related_components`| Check if has related components. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableRelationHelpers:has_related_components) |
472
+ |`get_related_components`| Retrieve related components. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableRelationHelpers:has_related_components) |
473
+ |`has_related_boards`| Check if has related boards. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableRelationHelpers:has_related_boards) |
474
+ |`get_related_boards`| Retrieve related boards. | [source](http://www.rubydoc.info/gems/binda/Binda/FieldableAssociationHelpers/FieldableRelationHelpers:has_related_boards) |
467
475
 
468
476
  If you need to get each dependent of all relations with a specified slug (or slugs) you can use `B.get_relation_dependents` helper. This is very useful to retrieve only the instances which have a owner (and therefore are 'dependents').
469
477
 
@@ -893,18 +901,41 @@ Some specs are run against the database. If you haven't installed Binda on the d
893
901
  RAILS_ENV=test rails db:migrate
894
902
  ```
895
903
 
896
- The above command might generate an error. This is probably because you have previously installed Binda and the generator finds migration both in `binda/db/migrate` and `binda/spec/dummy/db/migrate`. To solve the issue, remove the `spec/dummy/db/migrate` folder and run the previous command again. Here below the oneliner (be aware that this destroy both development and test databases of the dummy app):
904
+ The above command might generate an error. This is probably because you have previously installed Binda and the generator finds migration both in `binda/db/migrate` and `binda/spec/dummy/db/migrate`. To solve the issue, remove the `spec/dummy/db/migrate` folder and run the previous command again.
905
+
906
+ ```bash
907
+ cd spec/dummy
908
+ rm -rf db/migrate
909
+ rails db:drop
910
+ rails db:create
911
+ RAILS_ENV=test rails db:migrate
912
+ cd ../..
913
+ ```
914
+
915
+ Here the oneliner:
897
916
 
898
917
  ```bash
899
- cd spec/dummy && rm -rf db/migrate && rails db:drop && rails db:create && RAILS_ENV=test rails db:migrate
918
+ cd spec/dummy && rm -rf db/migrate && rails db:drop && rails db:create && RAILS_ENV=test rails db:migrate && cd ../..
900
919
  ```
901
920
 
902
- In case you are creating new migrations or modifing the default one:
921
+ If Binda migration have been updated then your `schema.rb` is outdated and will generate false failing tests. In this case you need to run following command to refresh your database configuration:
903
922
 
904
923
  ```bash
905
- cd spec/dummy && rm -r db/schema.rb && rails db:drop && rails db:create && RAILS_ENV=test rails db:migrate
924
+ cd spec/dummy
925
+ rm -r db/schema.rb
926
+ rails db:drop
927
+ rails db:create
928
+ rails generate binda:install
929
+ rm -rf db/migrate
930
+ rm -rf config/initializers/devise_backup_*.rb
931
+ cd ../..
906
932
  ```
907
933
 
934
+ Here the oneliner:
935
+
936
+ ```bash
937
+ cd spec/dummy && rm -r db/schema.rb && rails db:drop && rails db:create && rails generate binda:install && rm -rf db/migrate && rm -rf config/initializers/devise_backup_*.rb && cd ../..
938
+ ```
908
939
 
909
940
  If in the future you need to clean your dummy app code, simply run:
910
941
 
@@ -35,6 +35,11 @@
35
35
  }
36
36
 
37
37
  .popup-warning--loader {
38
+ transition: opacity 0.1s 0.1s linear;
39
+ &.popup-warning--loader--hidden {
40
+ opacity: 0;
41
+ }
42
+ opacity: 1;
38
43
  margin-bottom: 16px;
39
44
  span {
40
45
  display: inline-block;
@@ -56,3 +61,18 @@
56
61
  animation-delay: 540ms;
57
62
  }
58
63
  }
64
+
65
+ .popup-warning--success {
66
+ transition: opacity 0.1s 0.1s linear;
67
+ opacity: 1;
68
+ position: absolute;
69
+ left: 50%;
70
+ transform: translateX(-50%);
71
+ margin-bottom: 16px;
72
+ color: $color-success;
73
+ font-size: 30px;
74
+
75
+ &.popup-warning--success--hidden {
76
+ opacity: 0;
77
+ }
78
+ }
@@ -95,7 +95,7 @@ module Binda
95
95
  def field_group_params
96
96
  params.require(:field_group).permit(
97
97
  :name, :slug, :description, :position, :layout, :structure_id, field_settings_attributes: [
98
- :id, :field_group_id, :field_setting_id, :name, :slug, :description, :field_type, :position, :required, :default_text, :ancestry, :default_choice_id, :allow_null, accepted_structure_ids: [], choices: [], choices_attributes: [
98
+ :id, :field_group_id, :field_setting_id, :name, :slug, :description, :field_type, :position, :required, :read_only, :default_text, :ancestry, :default_choice_id, :allow_null, accepted_structure_ids: [], choices: [], choices_attributes: [
99
99
  :id, :field_setting_id, :label, :value
100
100
  ]
101
101
  ]
@@ -105,7 +105,7 @@ module Binda
105
105
  def new_params
106
106
  params.require(:field_group).permit(
107
107
  new_field_settings: [
108
- :id, :field_group_id, :field_setting_id, :name, :slug, :description, :field_type, :position, :required, :ancestry, :default_choice_id, :allow_null, choices: []
108
+ :id, :field_group_id, :field_setting_id, :name, :slug, :description, :field_type, :position, :required, :read_only, :ancestry, :default_choice_id, :allow_null, choices: []
109
109
  ],
110
110
  new_choices: [
111
111
  :id, :field_setting_id, :label, :value
@@ -97,7 +97,7 @@ module Binda
97
97
 
98
98
  # Sort field settings following the order with which are listed in the array provided as a argument.
99
99
  #
100
- # @param field_settings [Array] the list of ids of the field settings
100
+ # @param field_groups [Array] the list of ids of the field groups
101
101
  def sort_field_group_by(field_groups)
102
102
  field_groups.each_with_index do |id, i|
103
103
  FieldGroup.find( id ).update_column('position', i+1)
@@ -66,7 +66,7 @@ module Binda
66
66
  #
67
67
  # Rails guide reference --> http://guides.rubyonrails.org/action_controller_overview.html#hash-and-array-parameters
68
68
  #
69
- # @param arg [string] This should be the database column on which sort will be based
69
+ # @param argument [string] This should be the database column on which sort will be based
70
70
  # @return [string] The URL with the encoded parameters
71
71
  #
72
72
  def get_sort_link_by argument
@@ -10,18 +10,18 @@ module Binda
10
10
  # Get all components related to a "relation" field setting
11
11
  def get_relationable_components(field_setting)
12
12
  if @instance.class.to_s == 'Binda::Component'
13
- Binda::Component.where(structure_id: Binda::Structure.where(id: field_setting.accepted_structure_ids)).where.not(id: @instance.id)
13
+ Component.where(structure_id: Structure.where(id: field_setting.accepted_structure_ids)).where.not(id: @instance.id)
14
14
  elsif @instance.class.to_s == 'Binda::Board'
15
- Binda::Component.where(structure_id: Binda::Structure.where(id: field_setting.accepted_structure_ids))
15
+ Component.where(structure_id: Structure.where(id: field_setting.accepted_structure_ids))
16
16
  end
17
17
  end
18
18
 
19
19
  # Get all boards related to a "relation" field setting
20
20
  def get_relationable_boards(field_setting)
21
21
  if @instance.class.to_s == 'Binda::Component'
22
- Binda::Board.where(structure_id: Binda::Structure.where(id: field_setting.accepted_structure_ids))
22
+ Board.where(structure_id: Structure.where(id: field_setting.accepted_structure_ids))
23
23
  elsif @instance.class.to_s == 'Binda::Board'
24
- Binda::Board.where(structure_id: Binda::Structure.where(id: field_setting.accepted_structure_ids)).where.not(id: @instance.id)
24
+ Board.where(structure_id: Structure.where(id: field_setting.accepted_structure_ids)).where.not(id: @instance.id)
25
25
  end
26
26
  end
27
27
 
@@ -81,12 +81,12 @@ module Binda
81
81
  end
82
82
 
83
83
  after_save do
84
+ self.class.reset_field_settings_array
84
85
  add_choice_if_allow_null_is_false
85
86
  create_field_instances
86
87
  end
87
88
 
88
89
  after_create do
89
- self.class.reset_field_settings_array
90
90
  convert_allow_null__nil_to_false
91
91
  set_default_position
92
92
  end
@@ -201,7 +201,7 @@ module Binda
201
201
  # - depend on a field setting which requires to have at least a choice
202
202
  # - have no choice selected
203
203
  #
204
- # @param field_setting_slug [string] Add the slug of a field setting to filter the query
204
+ # @param field_setting [string] Add the slug of a field setting to filter the query
205
205
  #
206
206
  # @return [array] An array of Binda::Selection objects
207
207
  def self.get_selections_which_must_have_a_choice_but_have_none(field_setting = nil)
@@ -29,8 +29,7 @@ module Binda
29
29
  # # reduce N+1 query issue by including dependencies
30
30
  # B.get_components('page').includes(:strings, :texts, repeaters: [:images, :selections])
31
31
  #
32
- # @param slug [string] The slug of the structure to which the components belong
33
- # @param slug [array] The slugs of the structures to which the components belongs
32
+ # @param slug [string/array] The slug of the structure to which the components belong
34
33
  #
35
34
  # @return [ActiveRecord::Relation Object] if slug is nil or is an array
36
35
  #
@@ -58,8 +57,7 @@ module Binda
58
57
  # # reduce N+1 query issue by including dependencies
59
58
  # B.get_boards('default-dashboard').includes(:strings, :texts, repeaters: [:images, :selections]).first
60
59
  #
61
- # @param slug [string] The slug of the structure on which the board is based
62
- # @param slug [array] The slugs of the structures to which the board belongs
60
+ # @param slug [string/array] The slug of the structure on which the board is based
63
61
  #
64
62
  # @return [ActiveRecord::Relation Object] if slug is nil or is an array
65
63
  #
@@ -86,8 +84,7 @@ module Binda
86
84
  # B.get_categories(['page', 'post'])
87
85
  # # returns all categories belonging to 'page' structure and the ones belonging to 'post' structure
88
86
  #
89
- # @param slug [string] The slug of the structure to which categories belong
90
- # @param slug [array] The slugs of the structures to which categories belong
87
+ # @param slug [string/array] The slug of the structure to which categories belong
91
88
  #
92
89
  # @return [ActiveRecord::Relation Object]
93
90
  #
@@ -111,8 +108,7 @@ module Binda
111
108
  # B.get_field_settings('subtitle')
112
109
  # # returns an ActiveRecord::Relation (a sort of Array) containing the 'subtitle' field setting
113
110
  #
114
- # @param slug [string] The slug of a specific field setting
115
- # @param slug [array] The slugs of the selected field settings
111
+ # @param slug [string/array] The slug of a specific field setting
116
112
  #
117
113
  # @return [ActiveRecord::Relation]
118
114
  #
@@ -126,8 +122,7 @@ module Binda
126
122
 
127
123
  # Get each owner of all relations with the specified slug (or slugs)
128
124
  #
129
- # @param slug [string] The slug of the field setting to which the relations belong
130
- # @param slug [array] The slugs of the field settings to which the relations belong
125
+ # @param field_slug [string/array] The slug of the field setting to which the relations belong
131
126
  #
132
127
  # @return [Array]
133
128
  #
@@ -155,7 +150,7 @@ module Binda
155
150
  # You can also ask for all instance type of dependent or specify 'components' or 'boards' using
156
151
  # the second parameter.
157
152
  #
158
- # @param slug [string] The slug of the field setting to which the relations belong
153
+ # @param field_slug [string] The slug of the field setting to which the relations belong
159
154
  #
160
155
  # @return [Array]
161
156
  #
@@ -17,8 +17,6 @@ module Binda
17
17
  # default is Carrierwave default (usually the real size)
18
18
  #
19
19
  # @param field_slug [string] The slug of the field setting
20
- # @param size [string] The size. It can be 'thumb' 200x200 cropped,
21
- # 'medium' 700x700 max size, 'large' 1400x1400 max size, or blank
22
20
  # @return [string] The url of the audio
23
21
  def get_audio_url(field_slug)
24
22
  get_audio_info( field_slug, 'url' )
@@ -28,8 +26,6 @@ module Binda
28
26
  # default is Carrierwave default (usually the real size)
29
27
  #
30
28
  # @param field_slug [string] The slug of the field setting
31
- # @param size [string] The size. It can be 'thumb' 200x200 cropped,
32
- # 'medium' 700x700 max size, 'large' 1400x1400 max size, or blank
33
29
  # @return [string] The url of the audio
34
30
  def get_audio_path(field_slug)
35
31
  get_audio_info( field_slug, 'path' )
@@ -18,8 +18,7 @@ module Binda
18
18
  # default is Carrierwave default (usually the real size)
19
19
  #
20
20
  # @param field_slug [string] The slug of the field setting
21
- # @param size [string] The size. It can be 'thumb' 200x200 cropped,
22
- # 'medium' 700x700 max size, 'large' 1400x1400 max size, or blank
21
+ # @param size [string] The size. It can be 'thumb' 200x200 cropped.
23
22
  # @return [string] The url of the image
24
23
  def get_image_url(field_slug, size = '')
25
24
  get_image_info( field_slug, size, 'url' )
@@ -29,8 +28,7 @@ module Binda
29
28
  # default is Carrierwave default (usually the real size)
30
29
  #
31
30
  # @param field_slug [string] The slug of the field setting
32
- # @param size [string] The size. It can be 'thumb' 200x200 cropped,
33
- # 'medium' 700x700 max size, 'large' 1400x1400 max size, or blank
31
+ # @param size [string] The size. It can be 'thumb' 200x200 cropped.
34
32
  # @return [string] The url of the image
35
33
  def get_image_path(field_slug, size = '')
36
34
  get_image_info( field_slug, size, 'path' )
@@ -39,8 +37,7 @@ module Binda
39
37
  # Get the object related to that field setting
40
38
  #
41
39
  # @param field_slug [string] The slug of the field setting
42
- # @param size [string] The size. It can be 'thumb' 200x200 cropped,
43
- # 'medium' 700x700 max size, 'large' 1400x1400 max size, or blank
40
+ # @param size [string] The size. It can be 'thumb' 200x200 cropped.
44
41
  # @param info [string] String of the info to be retrieved
45
42
  # @return [string] The info requested if present
46
43
  # @return [boolean] Returns false if no info is found or if image isn't found
@@ -16,10 +16,10 @@ module Binda
16
16
  return { label: obj.choices.first.label, value: obj.choices.first.value }
17
17
  end
18
18
 
19
- # Get the select choices
19
+ # Get the select choice
20
20
  #
21
21
  # @param field_slug [string] The slug of the field setting
22
- # @return [hash] A hash of containing the label and value of the selected choice. `{ label: 'the label', 'value': 'the value'}`
22
+ # @return [hash] A hash of containing the label and value of the selected choice. `{ label: 'the label', value: 'the value'}`
23
23
  def get_selection_choice(field_slug)
24
24
  field_setting = FieldSetting.find_by(slug:field_slug)
25
25
  obj = self.selections.find{ |t| t.field_setting_id == field_setting.id }
@@ -31,7 +31,7 @@ module Binda
31
31
  # Get the select choices
32
32
  #
33
33
  # @param field_slug [string] The slug of the field setting
34
- # @return [array] An array of hashes of containing label and value of the selected choices. `{ label: 'the label', 'value': 'the value'}`
34
+ # @return [array] An array of hashes of containing label and value of the selected choices. `{ label: 'the label', value: 'the value'}`
35
35
  def get_selection_choices(field_slug)
36
36
  field_setting = FieldSetting.find_by(slug:field_slug)
37
37
  obj = self.selections.find{ |t| t.field_setting_id == field_setting.id }
@@ -17,8 +17,6 @@ module Binda
17
17
  # default is Carrierwave default (usually the real size)
18
18
  #
19
19
  # @param field_slug [string] The slug of the field setting
20
- # @param size [string] The size. It can be 'thumb' 200x200 cropped,
21
- # 'medium' 700x700 max size, 'large' 1400x1400 max size, or blank
22
20
  # @return [string] The url of the svg
23
21
  def get_svg_url(field_slug)
24
22
  get_svg_info( field_slug, 'url' )
@@ -28,8 +26,6 @@ module Binda
28
26
  # default is Carrierwave default (usually the real size)
29
27
  #
30
28
  # @param field_slug [string] The slug of the field setting
31
- # @param size [string] The size. It can be 'thumb' 200x200 cropped,
32
- # 'medium' 700x700 max size, 'large' 1400x1400 max size, or blank
33
29
  # @return [string] The url of the svg
34
30
  def get_svg_path(field_slug)
35
31
  get_svg_info( field_slug, 'path' )
@@ -18,8 +18,6 @@ module Binda
18
18
  # default is Carrierwave default (usually the real size)
19
19
  #
20
20
  # @param field_slug [string] The slug of the field setting
21
- # @param size [string] The size. It can be 'thumb' 200x200 cropped,
22
- # 'medium' 700x700 max size, 'large' 1400x1400 max size, or blank
23
21
  # @return [string] The url of the video
24
22
  def get_video_url(field_slug)
25
23
  get_video_info( field_slug, 'url' )
@@ -29,8 +27,6 @@ module Binda
29
27
  # default is Carrierwave default (usually the real size)
30
28
  #
31
29
  # @param field_slug [string] The slug of the field setting
32
- # @param size [string] The size. It can be 'thumb' 200x200 cropped,
33
- # 'medium' 700x700 max size, 'large' 1400x1400 max size, or blank
34
30
  # @return [string] The url of the video
35
31
  def get_video_path(field_slug)
36
32
  get_video_info( field_slug, 'path' )
@@ -1,13 +1,16 @@
1
1
  <div class="form-item--half-size">
2
2
  <%= ff.input :slug, as: :string, input_html: { class: "form-item--input" } %>
3
3
  </div>
4
- <div class="form-item--full-size">
4
+ <div class="form-item--half-size">
5
5
  <% if ff.object.field_type.nil? %>
6
6
  <%= ff.input :field_type, as: :select, collection: get_field_types, include_blank: false, prompt: t(:select_field_type), input_html: { class: 'form-item--select-input' } %>
7
7
  <% else %>
8
8
  <%= ff.input :field_type, as: :string, disabled: true, input_html: { class: "form-item--input" } %>
9
9
  <% end %>
10
10
  </div>
11
+ <div class="form-item--half-size">
12
+ <%= ff.input :read_only, as: :boolean, label: "<span class=\"standard-form--input-box\"></span> #{ t('binda.read_only')}".html_safe, wrapper_html: { class: 'standard-form--radio' } %>
13
+ </div>
11
14
  <div class="form-item--full-size">
12
15
  <%= ff.input :description, input_html: { class: "form-item--input tinymce" } %>
13
16
  </div>
@@ -21,4 +24,4 @@
21
24
  include_blank: false,
22
25
  include_hidden: false %>
23
26
  </div>
24
- <% end %>
27
+ <% end %>
@@ -1,4 +1,3 @@
1
- <%= render 'layouts/binda/popup_warning' %>
2
1
  <%= simple_form_for [ @instance.structure, @instance ], html: { class: 'form-body', multipart: true } do |f| %>
3
2
  <%= f.error_notification %>
4
3
  <%= render 'layouts/binda/form_errors', f: f %>
@@ -44,4 +43,4 @@
44
43
  <div class="standard-form--container standard-form--sidebar">
45
44
  <%= render "binda/fieldable/form_sidebar", f: f %>
46
45
  </div>
47
- <% end %>
46
+ <% end %>
@@ -14,6 +14,7 @@
14
14
  url: url_for([ff.object, action: :remove_audio]).html_safe,
15
15
  object: ff.object,
16
16
  wrapper: false,
17
+ disabled: field_setting.read_only?,
17
18
  input_html: {
18
19
  class: 'form-item--audio--uploader',
19
20
  'data-url': url_for([@instance.structure, @instance, action: :upload]),
@@ -30,4 +31,4 @@
30
31
  <div class="clearfix"></div>
31
32
 
32
33
  </div>
33
- </div>
34
+ </div>
@@ -1,6 +1,7 @@
1
1
  <div id="standard-form--date-<%= field_setting.id %>" class="standard-form--date form-item">
2
2
  <%= ff.input :date,
3
3
  as: :date,
4
+ disabled: field_setting.read_only?,
4
5
  start_year: Date.today.year - 200,
5
6
  end_year: Date.today.year + 200,
6
7
  hint: field_setting.description.nil? ? false : field_setting.description.html_safe,
@@ -12,6 +12,7 @@
12
12
  label: "<i class=\"fa fa-upload\" aria-hidden=\"true\"></i> #{t('binda.choose_file_button')}".html_safe,
13
13
  hint: field_setting.description.nil? ? false : field_setting.description.html_safe,
14
14
  url: url_for([ff.object, action: :remove_image]).html_safe,
15
+ disabled: field_setting.read_only?,
15
16
  object: ff.object,
16
17
  wrapper: false,
17
18
  input_html: {
@@ -30,4 +31,4 @@
30
31
  <%= ff.input :fieldable_type, as: :hidden %>
31
32
  <div class="clearfix"></div>
32
33
  </div>
33
- </div>
34
+ </div>
@@ -3,6 +3,7 @@
3
3
  <%= ff.input :content,
4
4
  input_html: { value: ff.object.content },
5
5
  as: :string,
6
+ disabled: field_setting.read_only?,
6
7
  hint: field_setting.description.nil? ? false : field_setting.description.html_safe,
7
8
  label: field_setting.name %>
8
9
 
@@ -11,4 +12,4 @@
11
12
  <%= ff.input :fieldable_id, as: :hidden %>
12
13
  <%= ff.input :fieldable_type, as: :hidden %>
13
14
 
14
- </div>
15
+ </div>
@@ -1,4 +1,4 @@
1
- <div id="standard-form--image-<%= field_setting.id %>" class="standard-form--image form-item">
1
+ <div id="standard-form--svg-<%= field_setting.id %>" class="standard-form--svg form-item">
2
2
  <div id="fileupload-<%= ff.object.id %>"
3
3
  class="fileupload form-group"
4
4
  data-message="<%= t('binda.upload_loading_message') %>"
@@ -6,13 +6,13 @@
6
6
  <p class="control-label">
7
7
  <%= field_setting.name %>
8
8
  </p>
9
- <% image = ff.object.image.thumb.url if ff.object.image.present? %>
10
9
  <div class="fileupload--field">
11
10
  <%= ff.input :svg,
12
11
  label: "<i class=\"fa fa-upload\" aria-hidden=\"true\"></i> #{t('binda.choose_file_button')}".html_safe,
13
12
  hint: field_setting.description.nil? ? false : field_setting.description.html_safe,
14
13
  url: url_for([ff.object, action: :remove_svg]).html_safe,
15
14
  object: ff.object,
15
+ disabled: field_setting.read_only?,
16
16
  wrapper: false,
17
17
  input_html: {
18
18
  'data-url': url_for([
@@ -30,4 +30,4 @@
30
30
  <%= ff.input :fieldable_type, as: :hidden %>
31
31
  <div class="clearfix"></div>
32
32
  </div>
33
- </div>
33
+ </div>
@@ -1,8 +1,9 @@
1
1
  <div id="standard-form--text-<%= field_setting.id %>" class="standard-form--text form-item">
2
2
 
3
3
  <%= ff.input :content,
4
- input_html: { value: ff.object.content, class: 'tinymce' },
4
+ input_html: { value: ff.object.content, class: ( field_setting.read_only? ? '' : 'tinymce' ) },
5
5
  as: :text,
6
+ disabled: field_setting.read_only?,
6
7
  hint: field_setting.description.nil? ? false : field_setting.description.html_safe,
7
8
  label: field_setting.name %>
8
9
 
@@ -11,4 +12,4 @@
11
12
  <%= ff.input :fieldable_id, as: :hidden %>
12
13
  <%= ff.input :fieldable_type, as: :hidden %>
13
14
 
14
- </div>
15
+ </div>
@@ -12,6 +12,7 @@
12
12
  hint: field_setting.description.nil? ? false : field_setting.description.html_safe,
13
13
  url: url_for([ff.object, action: :remove_video]).html_safe,
14
14
  object: ff.object,
15
+ disabled: field_setting.read_only?,
15
16
  wrapper: false,
16
17
  input_html: {
17
18
  class: 'form-item--video--uploader',
@@ -31,4 +32,4 @@
31
32
  <div class="clearfix"></div>
32
33
 
33
34
  </div>
34
- </div>
35
+ </div>
@@ -1,4 +1,4 @@
1
- <% if %w(text string date image video audio relation).include? repeater_setting_child.field_type %>
1
+ <% if %w(text string date image video audio relation svg).include? repeater_setting_child.field_type %>
2
2
  <% current = @instance.repeaters.select{|r| r.id == f.object.id}.first.find_or_create_a_field_by( repeater_setting_child.id, repeater_setting_child.field_type ) %>
3
3
  <%= f.simple_fields_for "#{repeater_setting_child.field_type}s_attributes[]", current do |ff| %>
4
4
  <%= render "binda/fieldable/form_item_#{repeater_setting_child.field_type}", f: f, ff: ff, field_setting: repeater_setting_child %>
@@ -5,6 +5,7 @@
5
5
  label: field_setting.name.capitalize,
6
6
  hint: prepare_description_for_selections_form_hint(field_setting),
7
7
  as: :check_boxes,
8
+ disabled: field_setting.read_only?,
8
9
  collection: field_setting.choices.order(:label),
9
10
  label_method: -> (field_setting) {
10
11
  "<span class=\"standard-form--input-box\"></span>#{field_setting[:label]}".html_safe
@@ -18,6 +19,7 @@
18
19
  label: field_setting.name.capitalize,
19
20
  hint: prepare_description_for_selections_form_hint(field_setting),
20
21
  as: :check_boxes,
22
+ disabled: field_setting.read_only?,
21
23
  collection: field_setting.choices.order(:label),
22
24
  label_method: -> (field_setting){
23
25
  "<span class=\"standard-form--input-box\"></span>#{field_setting[:label]}".html_safe
@@ -31,4 +33,4 @@
31
33
  <%= ff.input :id, as: :hidden, input_html: { value: ff.object.id } %>
32
34
  <%= ff.input :fieldable_id, as: :hidden %>
33
35
  <%= ff.input :fieldable_type, as: :hidden %>
34
- <% end %>
36
+ <% end %>
@@ -5,6 +5,7 @@
5
5
  label: field_setting.name.capitalize,
6
6
  hint: prepare_description_for_selections_form_hint(field_setting),
7
7
  as: :radio_buttons,
8
+ disabled: field_setting.read_only?,
8
9
  collection: field_setting.choices.order(:label),
9
10
  label_method: -> (x){ "<span class=\"standard-form--input-box\"></span>#{x[:label]}".html_safe },
10
11
  value_method: :id,
@@ -15,6 +16,7 @@
15
16
  label: field_setting.name.capitalize,
16
17
  hint: prepare_description_for_selections_form_hint(field_setting),
17
18
  as: :radio_buttons,
19
+ disabled: field_setting.read_only?,
18
20
  collection: field_setting.choices.order(:label),
19
21
  label_method: -> (x){ "<span class=\"standard-form--input-box\"></span>#{x[:label]}".html_safe },
20
22
  value_method: :id,
@@ -25,4 +27,4 @@
25
27
  <%= ff.input :id, as: :hidden, input_html: { value: ff.object.id } %>
26
28
  <%= ff.input :fieldable_id, as: :hidden %>
27
29
  <%= ff.input :fieldable_type, as: :hidden %>
28
- <% end %>
30
+ <% end %>
@@ -5,6 +5,7 @@
5
5
  label: field_setting.name.capitalize,
6
6
  hint: prepare_description_for_selections_form_hint(field_setting),
7
7
  as: :select,
8
+ disabled: field_setting.read_only?,
8
9
  collection: field_setting.choices.order(:label),
9
10
  label_method: :label,
10
11
  value_method: :id,
@@ -16,6 +17,7 @@
16
17
  label: field_setting.name.capitalize,
17
18
  hint: prepare_description_for_selections_form_hint(field_setting),
18
19
  as: :select,
20
+ disabled: field_setting.read_only?,
19
21
  collection: field_setting.choices.order(:label),
20
22
  label_method: :label,
21
23
  value_method: :id,
@@ -27,4 +29,4 @@
27
29
  <%= ff.input :id, as: :hidden, input_html: { value: ff.object.id } %>
28
30
  <%= ff.input :fieldable_id, as: :hidden %>
29
31
  <%= ff.input :fieldable_type, as: :hidden %>
30
- <% end %>
32
+ <% end %>
@@ -13,6 +13,11 @@
13
13
  <p class="main-header--title">
14
14
  <%= t 'binda.structure.plural' %>
15
15
  </p>
16
+ <a href="<%= structures_path %>"
17
+ class="main-header--back">
18
+ <i class="fas fa-list-ul"></i>
19
+ <%= t(:back_to_index).capitalize %>
20
+ </a>
16
21
  <% end %>
17
22
 
18
23
 
@@ -1,4 +1,7 @@
1
1
  <div class="popup-warning popup-warning--hidden">
2
+ <div class="popup-warning--success popup-warning--success--hidden">
3
+ <i class="fas fa-check-circle"></i>
4
+ </div>
2
5
  <div class="popup-warning--loader">
3
6
  <span></span>
4
7
  <span></span>
@@ -6,4 +9,4 @@
6
9
  <span></span>
7
10
  </div>
8
11
  <p class="popup-warning--message"></p>
9
- </div>
12
+ </div>
@@ -6,9 +6,9 @@
6
6
  %>
7
7
 
8
8
  <% unless is_devise_controller %>
9
- <div id="main-sidebar">
9
+ <div data-hook="main-sidebar" id="main-sidebar">
10
10
  <ul class="main-sidebar--nav">
11
- <li class= "main-sidebar--brand">
11
+ <li data-hook="main-sidebar-head" class= "main-sidebar--brand">
12
12
  <a href="/" target="_blank">
13
13
  <p class="main-sidebar--website-name"><%= get_website_name %></p>
14
14
  <p class= "main-sidebar--view-website">
@@ -41,25 +41,25 @@
41
41
  <% end %>
42
42
  <% end %>
43
43
  <% if current_user.is_superadmin %>
44
- <li>
44
+ <li data-hook="main-sidebar-structures">
45
45
  <a href="<%= structures_path %>">
46
46
  <i class="fas fa-sitemap"></i> Structures
47
47
  </a>
48
48
  </li>
49
49
  <% end %>
50
- <li>
50
+ <li data-hook="main-sidebar-manage-users">
51
51
  <a href="<%= manage_users_path %>">
52
52
  <i class="fas fa-user"></i> Users
53
53
  </a>
54
54
  </li>
55
- <li>
55
+ <li data-hook="main-sidebar-log-out">
56
56
  <a href="<%= destroy_user_session_path %>" data-method="delete">
57
57
  <i class="fas fa-sign-out-alt"></i> Log out
58
58
  </a>
59
59
  </li>
60
60
  </ul>
61
- <div class="main-sidebar--footer">
61
+ <div data-hook="main-sidebar-foot" class="main-sidebar--footer">
62
62
  <small><a href="https://github.com/lacolonia/binda" target="_blank"><%= t('binda.login_credit', { arg1: Binda::VERSION.dup}) %></a></small>
63
63
  </div>
64
64
  </div>
65
- <% end %>
65
+ <% end %>
@@ -16,6 +16,7 @@
16
16
 
17
17
  <body class="<%= action_name %> <%= "#{controller_name}-#{action_name}" %> <%= 'devise-view' if is_devise_controller %>">
18
18
 
19
+ <%= render 'layouts/binda/popup_warning' %>
19
20
  <div id="main-container">
20
21
 
21
22
  <%= yield :background %>
@@ -55,19 +55,24 @@ module SimpleForm
55
55
  @delete_button ||= begin
56
56
  obj = options[:object]
57
57
  url = options[:url]
58
- html = '<a class="b-btn b-btn-outline-danger fileupload--remove-image-btn'
59
- html << ' fileupload--remove-image-btn--hidden' unless obj.image.present? || obj.video.present? || obj.audio.present? || obj.svg.present?
60
- html << '" href="'
61
- html << url
62
- html << '" data-method="delete" data-remote="true" data-confirm="'
63
- html << t('binda.confirm_delete')
64
- html << '" data-id="'
65
- html << obj.id.to_s
66
- html << '">'
67
- html << '<i class="fa fa-trash-alt" aria-hidden="true"></i>'
68
- html << t('binda.delete')
69
- html << '</a>'
70
- html << '<div class="clearfix"></div>'
58
+ html = ''
59
+ unless obj.field_setting.read_only?
60
+ html = '<a class="b-btn b-btn-outline-danger fileupload--remove-image-btn'
61
+ html << ' fileupload--remove-image-btn--hidden' unless obj.image.present? || obj.video.present? || obj.audio.present? || obj.svg.present?
62
+ html << '" href="'
63
+ html << url
64
+ html << '" data-method="delete" data-remote="true" data-confirm="'
65
+ html << t('binda.confirm_delete')
66
+ html << '" data-id="'
67
+ html << obj.id.to_s
68
+ html << '">'
69
+ html << '<i class="fa fa-trash-alt" aria-hidden="true"></i>'
70
+ html << t('binda.delete')
71
+ html << '</a>'
72
+ html << '<div class="clearfix"></div>'
73
+ end
74
+
75
+ html
71
76
  end
72
77
  end
73
78
 
@@ -132,4 +137,4 @@ end
132
137
 
133
138
  SimpleForm::Inputs::Base.send(:include, SimpleForm::Components::Previews)
134
139
  SimpleForm::Inputs::Base.send(:include, SimpleForm::Components::DeleteButtons)
135
- SimpleForm::Inputs::Base.send(:include, SimpleForm::Components::Details)
140
+ SimpleForm::Inputs::Base.send(:include, SimpleForm::Components::Details)
@@ -117,6 +117,7 @@ en:
117
117
  edit_category: Edit %{arg1} category
118
118
  has_categories: Enable categories
119
119
  has_preview: Enable preview
120
+ read_only: Read Only
120
121
  has_categories_hint: Enable a taxonomy specific to this structure
121
122
  preview_path_warning: Make preview available. Once enabled, remember to create a route in you application for
122
123
  relation_warning: This relation isn't set properly. Ensure the setup of this relation refers to at least one structure.
@@ -158,4 +159,4 @@ en:
158
159
  no_available_choice_user_hint: Please contact the administrator
159
160
  no_available_choice_superadmin_hint: Please ensure you setup at least two possible choices when editing the
160
161
  settings: Settings
161
- duplicate_validation: There is already one %{arg1} associated to component '%{arg2}' and field setting '%{arg3}'
162
+ duplicate_validation: There is already one %{arg1} associated to component '%{arg2}' and field setting '%{arg3}'
@@ -48,6 +48,7 @@ class CreateBindaTables < ActiveRecord::Migration[5.0]
48
48
  t.text :description
49
49
  t.integer :position
50
50
  t.boolean :required
51
+ t.boolean :read_only
51
52
  t.text :default_text
52
53
  t.string :field_type
53
54
  t.belongs_to :field_group
@@ -0,0 +1,3 @@
1
+ GEM_ROOT = File.dirname(File.dirname(File.dirname(__FILE__)))
2
+ Dir[File.join(GEM_ROOT, 'spec', 'factories', '*.rb')].each { |file| require(file) }
3
+
@@ -1,3 +1,3 @@
1
1
  module Binda
2
- VERSION = '0.1.8'.freeze
2
+ VERSION = '0.1.9'.freeze
3
3
  end
@@ -1,5 +1,6 @@
1
1
  CarrierWave.configure do |config|
2
2
  config.storage = :file
3
+ config.asset_host = ActionController::Base.asset_host
3
4
 
4
5
 
5
6
  # # If you prefer to use Google uncomment and udpate the following lines
@@ -38,4 +39,4 @@ CarrierWave.configure do |config|
38
39
 
39
40
 
40
41
  config.enable_processing = !Rails.env.test?
41
- end
42
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: binda
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alessandro Barbieri
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-26 00:00:00.000000000 Z
11
+ date: 2018-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -886,6 +886,7 @@ files:
886
886
  - db/migrate/1_create_binda_tables.rb
887
887
  - lib/binda.rb
888
888
  - lib/binda/engine.rb
889
+ - lib/binda/factories.rb
889
890
  - lib/binda/version.rb
890
891
  - lib/generators/binda/install/USAGE
891
892
  - lib/generators/binda/install/install_generator.rb