binda 0.1.1 → 0.1.2
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.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/app/assets/javascripts/binda/components/{form_item_choice.js → field_setting_choices.js} +13 -12
- data/app/assets/javascripts/binda/components/form_item_repeater.js +34 -30
- data/app/assets/javascripts/binda/components/login_form.js +15 -15
- data/app/assets/javascripts/binda/components/sortable.js +22 -20
- data/app/assets/javascripts/binda/dist/binda.bundle.js +154 -140
- data/app/assets/javascripts/binda/index.js +20 -20
- data/app/assets/stylesheets/binda/components/field_setting_choices.scss +90 -0
- data/app/assets/stylesheets/binda/components/form_item.scss +0 -50
- data/app/assets/stylesheets/binda/components/{form_item_choice.scss → form_item_choices.scss} +1 -7
- data/app/assets/stylesheets/binda/components/main_sortable_table.scss +68 -0
- data/app/assets/stylesheets/binda/components/main_table.scss +2 -5
- data/app/assets/stylesheets/binda/components/sortable.scss +1 -2
- data/app/assets/stylesheets/binda/components/standard-form.scss +5 -6
- data/app/assets/stylesheets/binda/index.scss +3 -1
- data/app/controllers/binda/field_groups_controller.rb +22 -75
- data/app/controllers/binda/manage/users_controller.rb +18 -13
- data/app/controllers/binda/structures_controller.rb +12 -11
- data/app/models/binda/choice.rb +10 -5
- data/app/models/binda/field_setting.rb +16 -6
- data/app/models/concerns/binda/fieldable_associations.rb +24 -12
- data/app/views/binda/components/sort_index.html.erb +21 -25
- data/app/views/binda/field_groups/_form_body.html.erb +5 -5
- data/app/views/binda/field_groups/_form_item_choice.erb +49 -66
- data/app/views/binda/structures/_form_section.html.erb +1 -1
- data/app/views/binda/structures/index.html.erb +2 -2
- data/app/views/binda/structures/sort_index.html.erb +28 -21
- data/config/locales/en.yml +7 -5
- data/lib/binda/version.rb +1 -1
- metadata +6 -4
| @@ -2,8 +2,10 @@ | |
| 2 2 | 
             
            {
         | 
| 3 3 | 
             
              table
         | 
| 4 4 | 
             
              {
         | 
| 5 | 
            +
                display: table;
         | 
| 5 6 | 
             
                width: 100%;
         | 
| 6 7 | 
             
                background-color: $color-gray-lightest;
         | 
| 8 | 
            +
                box-sizing: border-box;
         | 
| 7 9 |  | 
| 8 10 | 
             
                th
         | 
| 9 11 | 
             
                {
         | 
| @@ -48,11 +50,6 @@ | |
| 48 50 | 
             
                {
         | 
| 49 51 | 
             
                  border-bottom: 1px solid $color-gray-darker;
         | 
| 50 52 | 
             
                }
         | 
| 51 | 
            -
             | 
| 52 | 
            -
                tr.ui-sortable-handle:hover
         | 
| 53 | 
            -
                {
         | 
| 54 | 
            -
                  border: 1px solid transparent;
         | 
| 55 | 
            -
                }
         | 
| 56 53 | 
             
              }
         | 
| 57 54 |  | 
| 58 55 | 
             
              .prev
         | 
| @@ -16,6 +16,7 @@ ul#sortable | |
| 16 16 | 
             
                transition: box-shadow .3s ease, transform .3s ease;
         | 
| 17 17 | 
             
                box-shadow: 0 0 0 0 rgba(0,0,0,.25);
         | 
| 18 18 |  | 
| 19 | 
            +
             | 
| 19 20 | 
             
                img
         | 
| 20 21 | 
             
                {
         | 
| 21 22 | 
             
                  width: auto;
         | 
| @@ -74,8 +75,6 @@ tbody.sortable | |
| 74 75 | 
             
              tr
         | 
| 75 76 | 
             
              {
         | 
| 76 77 | 
             
                transition: box-shadow .3s ease, transform .3s ease;
         | 
| 77 | 
            -
                margin-bottom: 8px;
         | 
| 78 | 
            -
                padding-bottom: 8px;
         | 
| 79 78 |  | 
| 80 79 | 
             
                img
         | 
| 81 80 | 
             
                {
         | 
| @@ -39,12 +39,7 @@ | |
| 39 39 | 
             
                border-right: none !important;
         | 
| 40 40 | 
             
                border-left: none !important;
         | 
| 41 41 | 
             
              }
         | 
| 42 | 
            -
             | 
| 43 | 
            -
              &.table-sort
         | 
| 44 | 
            -
              {
         | 
| 45 | 
            -
                border: none !important;
         | 
| 46 | 
            -
              }
         | 
| 47 | 
            -
             | 
| 42 | 
            +
              
         | 
| 48 43 | 
             
              .control-label
         | 
| 49 44 | 
             
              {
         | 
| 50 45 | 
             
                font-weight: bold;
         | 
| @@ -210,4 +205,8 @@ | |
| 210 205 | 
             
            .standard-form--hint-on-new-record
         | 
| 211 206 | 
             
            {
         | 
| 212 207 | 
             
              padding: 12px;
         | 
| 208 | 
            +
            }
         | 
| 209 | 
            +
             | 
| 210 | 
            +
            .standard-form--choices-header {
         | 
| 211 | 
            +
              
         | 
| 213 212 | 
             
            }
         | 
| @@ -19,7 +19,7 @@ | |
| 19 19 | 
             
            @import "components/login";
         | 
| 20 20 | 
             
            @import "components/standard-form";
         | 
| 21 21 | 
             
            @import "components/form_item";
         | 
| 22 | 
            -
            @import "components/ | 
| 22 | 
            +
            @import "components/form_item_choices";
         | 
| 23 23 | 
             
            @import "components/form_item_image";
         | 
| 24 24 | 
             
            @import "components/form_item_video";
         | 
| 25 25 | 
             
            @import "components/sortable";
         | 
| @@ -28,6 +28,8 @@ | |
| 28 28 | 
             
            @import "components/select2";
         | 
| 29 29 | 
             
            @import "components/texts";
         | 
| 30 30 | 
             
            @import "components/popup_warning";
         | 
| 31 | 
            +
            @import "components/main_sortable_table";
         | 
| 32 | 
            +
            @import "components/field_setting_choices";
         | 
| 31 33 |  | 
| 32 34 | 
             
            // Controllers
         | 
| 33 35 | 
             
            @import "controllers/components_index";
         | 
| @@ -35,7 +35,7 @@ module Binda | |
| 35 35 | 
             
                  # Add nested classes
         | 
| 36 36 | 
             
                  add_new_field_settings
         | 
| 37 37 | 
             
                  add_new_choices
         | 
| 38 | 
            -
                   | 
| 38 | 
            +
                  check_if_needs_to_update_choices
         | 
| 39 39 |  | 
| 40 40 | 
             
                  # Update the other ones
         | 
| 41 41 | 
             
                  if @field_group.update(field_group_params)
         | 
| @@ -64,63 +64,11 @@ module Binda | |
| 64 64 |  | 
| 65 65 | 
             
                  # Only allow a trusted parameter "white list" through.
         | 
| 66 66 | 
             
                  def field_group_params
         | 
| 67 | 
            -
                    params.require(:field_group).permit(
         | 
| 68 | 
            -
                      :name, 
         | 
| 69 | 
            -
                      :slug, 
         | 
| 70 | 
            -
                      :description, 
         | 
| 71 | 
            -
                      :position, 
         | 
| 72 | 
            -
                      :layout, 
         | 
| 73 | 
            -
                      :structure_id, 
         | 
| 74 | 
            -
                      field_settings_attributes: 
         | 
| 75 | 
            -
                        [ :id, 
         | 
| 76 | 
            -
                          :field_group_id, 
         | 
| 77 | 
            -
                          :field_setting_id, 
         | 
| 78 | 
            -
                          :name, 
         | 
| 79 | 
            -
                          :slug, 
         | 
| 80 | 
            -
                          :description, 
         | 
| 81 | 
            -
                          :field_type, 
         | 
| 82 | 
            -
                          :position, 
         | 
| 83 | 
            -
                          :required,
         | 
| 84 | 
            -
                          :default_text, 
         | 
| 85 | 
            -
                          :ancestry, 
         | 
| 86 | 
            -
                          :default_choice_id, 
         | 
| 87 | 
            -
                          :allow_null,
         | 
| 88 | 
            -
                          accepted_structure_ids: [],
         | 
| 89 | 
            -
                          choices: [], 
         | 
| 90 | 
            -
                          choices_attributes: 
         | 
| 91 | 
            -
                          [ :id, 
         | 
| 92 | 
            -
                            :field_setting_id, 
         | 
| 93 | 
            -
                            :label, 
         | 
| 94 | 
            -
                            :value 
         | 
| 95 | 
            -
                          ]
         | 
| 96 | 
            -
                        ]
         | 
| 97 | 
            -
                      )
         | 
| 67 | 
            +
                    params.require(:field_group).permit(:name, :slug, :description, :position, :layout, :structure_id, field_settings_attributes: [ :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: [ :id, :field_setting_id, :label, :value ]])
         | 
| 98 68 | 
             
                  end
         | 
| 99 69 |  | 
| 100 70 | 
             
                  def new_params
         | 
| 101 | 
            -
                    params.require(:field_group).permit( 
         | 
| 102 | 
            -
                      new_field_settings:
         | 
| 103 | 
            -
                        [ :id,
         | 
| 104 | 
            -
                          :field_group_id, 
         | 
| 105 | 
            -
                          :field_setting_id, 
         | 
| 106 | 
            -
                          :name, 
         | 
| 107 | 
            -
                          :slug, 
         | 
| 108 | 
            -
                          :description, 
         | 
| 109 | 
            -
                          :field_type, 
         | 
| 110 | 
            -
                          :position, 
         | 
| 111 | 
            -
                          :required, 
         | 
| 112 | 
            -
                          :ancestry, 
         | 
| 113 | 
            -
                          :default_choice_id,
         | 
| 114 | 
            -
                          :allow_null,
         | 
| 115 | 
            -
                          choices: [] 
         | 
| 116 | 
            -
                        ],
         | 
| 117 | 
            -
                      new_choices: 
         | 
| 118 | 
            -
                        [ :id,
         | 
| 119 | 
            -
                          :field_setting_id, 
         | 
| 120 | 
            -
                          :label, 
         | 
| 121 | 
            -
                          :value 
         | 
| 122 | 
            -
                        ]
         | 
| 123 | 
            -
                      )
         | 
| 71 | 
            +
                    params.require(:field_group).permit( new_field_settings: [ :id, :field_group_id, :field_setting_id, :name, :slug, :description, :field_type, :position, :required, :ancestry, :default_choice_id, :allow_null, choices: [] ],new_choices: [ :id, :field_setting_id, :label, :value ])
         | 
| 124 72 | 
             
                  end
         | 
| 125 73 |  | 
| 126 74 | 
             
                  def reset_field_settings_cache
         | 
| @@ -130,24 +78,20 @@ module Binda | |
| 130 78 | 
             
                  def add_new_field_settings
         | 
| 131 79 | 
             
                    # Create new fields if any
         | 
| 132 80 | 
             
                    new_params[:new_field_settings].each do |field_setting|
         | 
| 133 | 
            -
                       | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
                        end
         | 
| 138 | 
            -
                      end
         | 
| 81 | 
            +
                      next if field_setting[:name].blank?
         | 
| 82 | 
            +
                      new_field_setting = @field_group.field_settings.create( field_setting )
         | 
| 83 | 
            +
                      next if new_field_setting
         | 
| 84 | 
            +
                      return redirect_to edit_structure_field_group_path( @structure.slug, @field_group.slug ), flash: { error: new_field_setting.errors }
         | 
| 139 85 | 
             
                    end
         | 
| 140 86 | 
             
                  end
         | 
| 141 87 |  | 
| 142 88 | 
             
                  def add_new_choices
         | 
| 143 89 | 
             
                    # Create new fields if any
         | 
| 144 | 
            -
                     | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
                      end
         | 
| 150 | 
            -
                    end 
         | 
| 90 | 
            +
                    return if new_params[:new_choices].nil? 
         | 
| 91 | 
            +
                    new_params[:new_choices].each do |choice|
         | 
| 92 | 
            +
                      next if choice[:label].blank? || choice[:value].blank?
         | 
| 93 | 
            +
                      create_new_choice choice
         | 
| 94 | 
            +
                    end
         | 
| 151 95 | 
             
                  end
         | 
| 152 96 |  | 
| 153 97 | 
             
                  # Create new choice (depends directly from add_new_choice method)
         | 
| @@ -158,18 +102,21 @@ module Binda | |
| 158 102 | 
             
                    end
         | 
| 159 103 | 
             
                  end
         | 
| 160 104 |  | 
| 161 | 
            -
                  def  | 
| 105 | 
            +
                  def check_if_needs_to_update_choices
         | 
| 162 106 | 
             
                    return if field_group_params[:field_settings_attributes].nil?
         | 
| 163 107 | 
             
                    field_group_params[:field_settings_attributes].each do |_, field_setting_params|
         | 
| 164 108 | 
             
                      next if field_setting_params[:choices_attributes].nil?
         | 
| 165 | 
            -
                      field_setting_params | 
| 166 | 
            -
                        choice = Choice.find(choice_params[:id])
         | 
| 167 | 
            -
                        unless choice.update(choice_params)
         | 
| 168 | 
            -
                          return redirect_to edit_structure_field_group_path( @structure.slug, @field_group.slug ), flash: { error: choice.errors }
         | 
| 169 | 
            -
                        end
         | 
| 170 | 
            -
                      end
         | 
| 109 | 
            +
                      update_field_setting_choices field_setting_params
         | 
| 171 110 | 
             
                    end
         | 
| 172 111 | 
             
                  end
         | 
| 173 112 |  | 
| 113 | 
            +
                  def update_field_setting_choices field_setting_params
         | 
| 114 | 
            +
                    field_setting_params[:choices_attributes].each do |_, choice_params|
         | 
| 115 | 
            +
                      choice = Choice.find(choice_params[:id])
         | 
| 116 | 
            +
                      unless choice.update(choice_params)
         | 
| 117 | 
            +
                        return redirect_to edit_structure_field_group_path( @structure.slug, @field_group.slug ), flash: { error: choice.errors }
         | 
| 118 | 
            +
                      end
         | 
| 119 | 
            +
                    end
         | 
| 120 | 
            +
                  end
         | 
| 174 121 | 
             
              end
         | 
| 175 122 | 
             
            end
         | 
| @@ -36,19 +36,18 @@ module Binda | |
| 36 36 | 
             
                end
         | 
| 37 37 |  | 
| 38 38 | 
             
                def update
         | 
| 39 | 
            -
                  if  | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
                      end
         | 
| 39 | 
            +
                  # Check if the user to be updated is superadmin and the user which is updating is superadmin
         | 
| 40 | 
            +
                  check_if_superadmin
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  respond_to do |format|
         | 
| 43 | 
            +
                    if @user.update(user_params)
         | 
| 44 | 
            +
                      format.html { redirect_to manage_user_path( @user.id ), notice: 'User was successfully updated.' }
         | 
| 45 | 
            +
                      format.xml  { head :ok }
         | 
| 46 | 
            +
                      format.json { render :show, status: :ok, location: @user }
         | 
| 47 | 
            +
                    else
         | 
| 48 | 
            +
                      format.html { redirect_to edit_manage_user_path( @user.id ), flash: { alert: @user.errors } }
         | 
| 49 | 
            +
                      format.xml  { head :bad_request }
         | 
| 50 | 
            +
                      format.json { render json: @user.errors, status: :unprocessable_entity }
         | 
| 52 51 | 
             
                    end
         | 
| 53 52 | 
             
                  end
         | 
| 54 53 | 
             
                end
         | 
| @@ -86,5 +85,11 @@ module Binda | |
| 86 85 | 
             
                      params[:user].delete(:password_confirmation)
         | 
| 87 86 | 
             
                    end
         | 
| 88 87 | 
             
                  end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                  def check_if_superadmin
         | 
| 90 | 
            +
                    if @user.is_superadmin && !current_user.is_superadmin
         | 
| 91 | 
            +
                      return redirect_to manage_users_url, notice: 'Sorry, you cannot edit a super administrator.'
         | 
| 92 | 
            +
                    end
         | 
| 93 | 
            +
                  end
         | 
| 89 94 | 
             
              end
         | 
| 90 95 | 
             
            end
         | 
| @@ -31,14 +31,7 @@ module Binda | |
| 31 31 |  | 
| 32 32 | 
             
                def update
         | 
| 33 33 | 
             
                  # Create new fields if any
         | 
| 34 | 
            -
                   | 
| 35 | 
            -
                    unless field_group[:name].blank?
         | 
| 36 | 
            -
                      new_field_group = @structure.field_groups.create( name: field_group[:name] )
         | 
| 37 | 
            -
                      unless new_field_group
         | 
| 38 | 
            -
                        return redirect_to structure_path( @structure.slug ), flash: { error: new_field_group.errors }
         | 
| 39 | 
            -
                      end
         | 
| 40 | 
            -
                    end
         | 
| 41 | 
            -
                  end
         | 
| 34 | 
            +
                  add_new_field_groups
         | 
| 42 35 |  | 
| 43 36 | 
             
                  # Update the other ones
         | 
| 44 37 | 
             
                  if @structure.update(structure_params)
         | 
| @@ -61,8 +54,7 @@ module Binda | |
| 61 54 | 
             
                  params[:structure].each_with_index do |id, i|
         | 
| 62 55 | 
             
                    Structure.find( id ).update({ position: i + 1 })
         | 
| 63 56 | 
             
                  end
         | 
| 64 | 
            -
                  render js: "$('.popup-warning').addClass('popup-warning--hidden');"
         | 
| 65 | 
            -
                  head :ok
         | 
| 57 | 
            +
                  render js: "$('##{params[:id]}').sortable('option', 'disabled', false); $('.popup-warning').addClass('popup-warning--hidden'); $('.sortable').removeClass('sortable--disabled')"
         | 
| 66 58 | 
             
                end
         | 
| 67 59 |  | 
| 68 60 | 
             
                def sort_index
         | 
| @@ -81,7 +73,16 @@ module Binda | |
| 81 73 | 
             
                  end
         | 
| 82 74 |  | 
| 83 75 | 
             
                  def new_params
         | 
| 84 | 
            -
                    params.require(:structure).permit( new_field_groups:[ :name, :structure_id ] )
         | 
| 76 | 
            +
                    params.require(:structure).permit( new_field_groups:[ :name, :slug, :structure_id ] )
         | 
| 77 | 
            +
                  end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                  def add_new_field_groups
         | 
| 80 | 
            +
                    new_params[:new_field_groups].each do |field_group|
         | 
| 81 | 
            +
                      next if field_group[:name].blank?
         | 
| 82 | 
            +
                      new_field_group = @structure.field_groups.create( name: field_group[:name], slug: field_group[:slug] )
         | 
| 83 | 
            +
                      next if new_field_group
         | 
| 84 | 
            +
                      return redirect_to structure_path( @structure.slug ), flash: { error: new_field_group.errors }
         | 
| 85 | 
            +
                    end
         | 
| 85 86 | 
             
                  end
         | 
| 86 87 | 
             
              end
         | 
| 87 88 | 
             
            end
         | 
    
        data/app/models/binda/choice.rb
    CHANGED
    
    | @@ -72,12 +72,17 @@ module Binda | |
| 72 72 | 
             
            			selections = Selection.joins(:field_setting).where(binda_field_settings: {id: field_setting.id })
         | 
| 73 73 |  | 
| 74 74 | 
             
            			# Make sure none of the Binda::Selection instances (radios/checkboxes/selects) are left without a choice
         | 
| 75 | 
            -
            			selections | 
| 76 | 
            -
            				next if selection.choices.any?
         | 
| 77 | 
            -
            				selection.choices << Choice.find(self.field_setting.default_choice_id)
         | 
| 78 | 
            -
            				raise "It hasn't been possible to set the default choice for Binda::Selection with id=#{selection.id}" unless selection.save
         | 
| 79 | 
            -
            			end
         | 
| 75 | 
            +
            			update_selection selections
         | 
| 80 76 | 
             
            		end
         | 
| 81 77 |  | 
| 78 | 
            +
            		private 
         | 
| 79 | 
            +
            			def update_selection selections
         | 
| 80 | 
            +
            				selections.each do |selection|
         | 
| 81 | 
            +
            					next if selection.choices.any?
         | 
| 82 | 
            +
            					selection.choices << Choice.find(self.field_setting.default_choice_id)
         | 
| 83 | 
            +
            					raise "It hasn't been possible to set the default choice for Binda::Selection with id=#{selection.id}" unless selection.save
         | 
| 84 | 
            +
            				end
         | 
| 85 | 
            +
            			end
         | 
| 86 | 
            +
             | 
| 82 87 | 
             
              end
         | 
| 83 88 | 
             
            end
         | 
| @@ -153,19 +153,29 @@ module Binda | |
| 153 153 | 
             
            		def create_field_instances
         | 
| 154 154 | 
             
            			structure = self.field_group.structure
         | 
| 155 155 | 
             
            			field_class = self.field_type.pluralize
         | 
| 156 | 
            +
            			field_setting_id = self.id
         | 
| 156 157 | 
             
            			case 
         | 
| 157 158 | 
             
            				when structure.components.any?
         | 
| 158 159 | 
             
            					structure.components.each do |component|
         | 
| 159 | 
            -
            						 | 
| 160 | 
            -
            							component.send(field_class).create!(field_setting_id: self.id)
         | 
| 161 | 
            -
            						end
         | 
| 160 | 
            +
            						create_field_instances_for_component( component, field_class, field_setting_id )
         | 
| 162 161 | 
             
            					end
         | 
| 163 162 | 
             
            				when structure.board.present?
         | 
| 164 | 
            -
            					 | 
| 165 | 
            -
             | 
| 166 | 
            -
             | 
| 163 | 
            +
            					create_field_instances_for_board( structure.board, field_class, field_setting_id )
         | 
| 164 | 
            +
            			end
         | 
| 165 | 
            +
            		end
         | 
| 166 | 
            +
             | 
| 167 | 
            +
            		# Helper for create_field_instances method
         | 
| 168 | 
            +
            		def create_field_instances_for_component( component, field_class, field_setting_id )
         | 
| 169 | 
            +
            			unless component.send(field_class).where(field_setting_id: field_setting_id).any?
         | 
| 170 | 
            +
            				component.send(field_class).create!(field_setting_id: field_setting_id)
         | 
| 167 171 | 
             
            			end
         | 
| 168 172 | 
             
            		end
         | 
| 169 173 |  | 
| 174 | 
            +
            		# Helper for create_field_instances method
         | 
| 175 | 
            +
            		def create_field_instances_for_board ( board, field_class, field_setting_id )
         | 
| 176 | 
            +
            			unless board.send(field_class).where(field_setting_id: field_setting_id).any?
         | 
| 177 | 
            +
            				board.send(field_class).create!(field_setting_id: field_setting_id)
         | 
| 178 | 
            +
            			end
         | 
| 179 | 
            +
            		end
         | 
| 170 180 | 
             
            	end
         | 
| 171 181 | 
             
            end
         | 
| @@ -96,12 +96,18 @@ module Binda | |
| 96 96 | 
             
            			unless obj.nil?
         | 
| 97 97 | 
             
            				obj.content
         | 
| 98 98 | 
             
            			else
         | 
| 99 | 
            -
            				 | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 99 | 
            +
            				check_text_error field_slug
         | 
| 100 | 
            +
            			end
         | 
| 101 | 
            +
            		end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
            		# Check why get_text doesn't return a value
         | 
| 104 | 
            +
            		# This method isn't supposed to be used by anything other than get_text method
         | 
| 105 | 
            +
            		def check_text_error field_slug
         | 
| 106 | 
            +
            			you_mean_string = !self.strings.find{ |t| t.field_setting_id == FieldSetting.get_id( field_slug ) && t.type = 'Binda::String' }.nil?
         | 
| 107 | 
            +
            			if you_mean_string
         | 
| 108 | 
            +
            				raise ArgumentError, "This slug (#{field_slug}) is associated to a string not a text. Use get_string() instead on instance (#{self.class.name} ##{self.id}).", caller
         | 
| 109 | 
            +
            			else
         | 
| 110 | 
            +
            				raise ArgumentError, "There isn't any text associated to the current slug (#{field_slug}) on instance (#{self.class.name} ##{self.id}).", caller
         | 
| 105 111 | 
             
            			end
         | 
| 106 112 | 
             
            		end
         | 
| 107 113 |  | 
| @@ -130,12 +136,18 @@ module Binda | |
| 130 136 | 
             
            			unless obj.nil?
         | 
| 131 137 | 
             
            				obj.content
         | 
| 132 138 | 
             
            			else
         | 
| 133 | 
            -
            				 | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 139 | 
            +
            				check_string_error field_slug
         | 
| 140 | 
            +
            			end
         | 
| 141 | 
            +
            		end
         | 
| 142 | 
            +
             | 
| 143 | 
            +
            		# Check why get_string doesn't return a value
         | 
| 144 | 
            +
            		# This method isn't supposed to be used by anything other than get_string method
         | 
| 145 | 
            +
            		def check_string_error field_slug
         | 
| 146 | 
            +
            			you_mean_text = !self.strings.find{ |t| t.field_setting_id == FieldSetting.get_id( field_slug ) && t.type = 'Binda::Text' }.nil?
         | 
| 147 | 
            +
            			if you_mean_text
         | 
| 148 | 
            +
            				raise ArgumentError, "This slug (#{field_slug}) is associated to a text not a string. Use get_text() instead on instance (#{self.class.name} ##{self.id}).", caller
         | 
| 149 | 
            +
            			else
         | 
| 150 | 
            +
            				raise ArgumentError, "There isn't any string associated to the current slug (#{field_slug}) on instance (#{self.class.name} ##{self.id}).", caller
         | 
| 139 151 | 
             
            			end
         | 
| 140 152 | 
             
            		end
         | 
| 141 153 |  | 
| @@ -17,30 +17,26 @@ | |
| 17 17 | 
             
                  </div>
         | 
| 18 18 | 
             
                  <p><%= t 'binda.sort_items_loader', { arg1: t('binda.components').downcase } %></p>
         | 
| 19 19 | 
             
              </div>
         | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
                  < | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
                          <td></td>
         | 
| 38 | 
            -
                        </tr>
         | 
| 39 | 
            -
                      <% end %>
         | 
| 40 | 
            -
                    <tbody>
         | 
| 41 | 
            -
                  </table>
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                <%= link_to "<i class=\"fa fa-plus\" aria-hidden=\"true\"></i> New #{ @structure.name.humanize.split.map(&:capitalize).join(' ') }".html_safe, new_structure_component_path, class: 'main-header--link b-btn b-btn-primary', action: "new" %>
         | 
| 44 | 
            -
                    
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              <div class="main-sortable-table">
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                <div class="main-sortable-table--header-row">
         | 
| 24 | 
            +
                  <div class="main-sortable-table--header-title"><p>Title</p></div>
         | 
| 25 | 
            +
                  <div class="main-sortable-table--header-title"><p>Publish State</p></div>
         | 
| 26 | 
            +
                </div>
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                <div id="<%= @structure.slug %>-components--sort-index" class="sortable" data-update-url="<%= structure_components_sort_path( @structure.slug ) %>">
         | 
| 29 | 
            +
                  <% @components.order( :position, :name ).each do |component| %>
         | 
| 30 | 
            +
                    <div class="main-sortable-table--row ui-sortable-handle" id="component_<%= component.id %>">
         | 
| 31 | 
            +
                      <div class="main-sortable-table--row-cell"><%= link_to component.name, structure_component_path( @structure.slug, component ) %></div>
         | 
| 32 | 
            +
                      <div class="main-sortable-table--row-cell"><%= component.publish_state %></div>
         | 
| 33 | 
            +
                    </div>
         | 
| 34 | 
            +
                  <% end %>
         | 
| 35 | 
            +
                </div>
         | 
| 36 | 
            +
             | 
| 45 37 | 
             
              </div>
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              <%= link_to "<i class=\"fa fa-plus\" aria-hidden=\"true\"></i> New #{ @structure.name.humanize.split.map(&:capitalize).join(' ') }".html_safe, new_structure_component_path, class: 'main-header--link b-btn b-btn-primary', action: "new" %>
         | 
| 40 | 
            +
             | 
| 41 | 
            +
             | 
| 46 42 | 
             
            <% end %>
         | 
| @@ -43,10 +43,11 @@ | |
| 43 43 |  | 
| 44 44 | 
             
                    <%= render "form_section", f: f %>
         | 
| 45 45 |  | 
| 46 | 
            -
                    <div class="clearfix"></div>
         | 
| 47 46 | 
             
                  </div>
         | 
| 47 | 
            +
                </div>
         | 
| 48 48 |  | 
| 49 | 
            -
             | 
| 49 | 
            +
                <% @field_group.field_settings.where( field_type: 'repeater' ).order( :position, :id ).each do |repeater| %>
         | 
| 50 | 
            +
                  <div class="standard-form--container">
         | 
| 50 51 | 
             
                    <div id="form-section--repeater-<%= repeater.id %>" class="form-section--wide-container">
         | 
| 51 52 | 
             
                      <div class="form-section">
         | 
| 52 53 |  | 
| @@ -56,12 +57,11 @@ | |
| 56 57 |  | 
| 57 58 | 
             
                        <%= render "form_section_repeater", f: f, repeater: repeater %>
         | 
| 58 59 |  | 
| 59 | 
            -
                        <div class="clearfix"></div>
         | 
| 60 60 | 
             
                      </div>
         | 
| 61 61 | 
             
                    </div>
         | 
| 62 | 
            -
                   | 
| 62 | 
            +
                  </div>
         | 
| 63 | 
            +
                <% end %>
         | 
| 63 64 |  | 
| 64 | 
            -
                </div>
         | 
| 65 65 |  | 
| 66 66 | 
             
              </div>
         | 
| 67 67 |  |