diff --git a/app/assets/stylesheets/layout.css b/app/assets/stylesheets/layout.css index d9ac8cf..3b46ad1 100644 --- a/app/assets/stylesheets/layout.css +++ b/app/assets/stylesheets/layout.css @@ -181,3 +181,7 @@ footer { margin: 0 auto; } } + +.subsections { + margin: .5em; +} diff --git a/app/controllers/character_sheet_sections_controller.rb b/app/controllers/character_sheet_sections_controller.rb index 24bc5f5..3968ae4 100644 --- a/app/controllers/character_sheet_sections_controller.rb +++ b/app/controllers/character_sheet_sections_controller.rb @@ -15,6 +15,7 @@ class CharacterSheetSectionsController < ApplicationController end def new + @templates = Template.game_system(@character.game_system) if params[:parent_section_id].present? @parent_section = @character.character_sheet_sections.find_by(id: params[:parent_section_id]) end @@ -22,7 +23,16 @@ class CharacterSheetSectionsController < ApplicationController end def create - @section = @character.character_sheet_sections.new(character_sheet_section_params) + @templates = Template.game_system(@character.game_system) + if params[:template_id].present? + @section = CharacterSheetSection.new_from_template( + template: Template.find(params[:template_id]), + params: character_sheet_section_params, + character: @character, + ) + else + @section = @character.character_sheet_sections.new(character_sheet_section_params) + end @editable = true unless @section.save @parent_section = @section.parent_section diff --git a/app/models/character_sheet_feature.rb b/app/models/character_sheet_feature.rb index eaacd6e..2bccd25 100644 --- a/app/models/character_sheet_feature.rb +++ b/app/models/character_sheet_feature.rb @@ -35,7 +35,7 @@ class CharacterSheetFeature < ApplicationRecord def set_order_index return if order_index.present? - if character_sheet_section.character_sheet_features.any? + if character_sheet_section.character_sheet_features.count > 1 self.order_index = character_sheet_section.character_sheet_features.order(:order_index).last.order_index + 1 else self.order_index = 1 diff --git a/app/models/character_sheet_section.rb b/app/models/character_sheet_section.rb index 1101919..73b7e09 100644 --- a/app/models/character_sheet_section.rb +++ b/app/models/character_sheet_section.rb @@ -18,6 +18,13 @@ class CharacterSheetSection < ApplicationRecord scope :top_level, -> { where.missing(:parent_section) } + def self.new_from_template(template:, character:, params:) + section = CharacterSheetSection.deserialize(JSON.parse(template.content)) + section.assign_attributes(params) + section.character = character + section + end + def lowest_order_index character_sheet_features.minimum(:order_index) || 1 end diff --git a/app/models/template.rb b/app/models/template.rb index 0e31f51..7c8de73 100644 --- a/app/models/template.rb +++ b/app/models/template.rb @@ -9,4 +9,6 @@ class Template < ApplicationRecord validates :content, presence: true validates :klass, presence: true, length: { maximum: 200 } + + scope :game_system, ->(game_system) { where(game_system:) } end diff --git a/app/views/character_sheet_sections/_character_sheet_section.html.erb b/app/views/character_sheet_sections/_character_sheet_section.html.erb index 410ef19..5815e67 100644 --- a/app/views/character_sheet_sections/_character_sheet_section.html.erb +++ b/app/views/character_sheet_sections/_character_sheet_section.html.erb @@ -14,4 +14,8 @@ <% end %> + +