From 217d11149d268d99fab8517eb3309f33cac5eb19 Mon Sep 17 00:00:00 2001 From: yasushiito Date: Thu, 27 Jun 2013 11:30:03 +0900 Subject: [PATCH] t#: --- app/controllers/speech_balloons_controller.rb | 132 ++++++++++++++++++++++---- app/models/speech_balloon.rb | 1 - app/models/speech_balloon_template.rb | 40 ++++++++ app/views/panels/_footer.html.erb | 8 +- config/application.rb | 11 ++- config/speech_balloon.yml | 2 + 6 files changed, 172 insertions(+), 22 deletions(-) create mode 100644 config/speech_balloon.yml diff --git a/app/controllers/speech_balloons_controller.rb b/app/controllers/speech_balloons_controller.rb index f5c834d7..13acc094 100644 --- a/app/controllers/speech_balloons_controller.rb +++ b/app/controllers/speech_balloons_controller.rb @@ -54,67 +54,167 @@ class SpeechBalloonsController < ApplicationController @panel = Panel.edit(@author.working_panel, @author) @speech_balloon = SpeechBalloon.new :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id + @speech_balloon.extend @speech_balloon_template.engine_speech_balloon_module @speech_balloon.supply_default - @speech_balloon.build_balloon - @speech_balloon.build_speech - @speech_balloon.balloon.supply_default - @speech_balloon.speech.supply_default - + @balloon = @speech_balloon.build_balloon + @speech = @speech_balloon.build_speech + @balloon.extend @speech_balloon_template.engine_balloon_module + @speech.extend @speech_balloon_template.engine_speech_module + @balloon.supply_default @speech_balloon_template.parsed_settings + @speech.supply_default @speech_balloon_template.parsed_settings + respond_to do |format| - format.html + format.html { + render @speech_balloon_template.engine_name + '/speech_balloons/new' + } format.json { render :json => @speech_balloon.to_json(SpeechBalloon.show_json_opt) } end end def edit @speech_balloon = SpeechBalloon.show(params[:id], @author) + @speech_balloon_template = @speech_balloon.speech_balloon_template @panel = Panel.edit(@speech_balloon.panel.id, @author) + @balloon = @speech_balloon.balloon + @speech = @speech_balloon.speech + @speech_balloon.extend @speech_balloon_template.engine_speech_balloon_module + @balloon.extend @speech_balloon_template.engine_balloon_module + @speech.extend @speech_balloon_template.engine_speech_module + respond_to do |format| - format.html + format.html { + render @speech_balloon_template.engine_name + '/speech_balloons/edit' + } end end def create @panel = Panel.edit(@author.working_panel, @author) - + if params[:speech_balloon][:settings] and params[:speech_balloon][:settings].is_a?(Hash) + params[:speech_balloon][:settings] = params[:speech_balloon][:settings].to_json + end + if params[:speech_balloon][:balloon_attributes][:settings] and params[:speech_balloon][:balloon_attributes][:settings].is_a?(Hash) + params[:speech_balloon][:balloon_attributes][:settings] = params[:speech_balloon][:balloon_attributes][:settings].to_json + end + if params[:speech_balloon][:speech_attributes][:settings] and params[:speech_balloon][:speech_attributes][:settings].is_a?(Hash) + params[:speech_balloon][:speech_attributes][:settings] = params[:speech_balloon][:speech_attributes][:settings].to_json + end @speech_balloon = SpeechBalloon.new @speech_balloon.attributes = params[:speech_balloon] + + @speech_balloon_template = @speech_balloon.speech_balloon_template + @balloon = @speech_balloon.balloon + @speech = @speech_balloon.speech + @speech_balloon.extend @speech_balloon_template.engine_speech_balloon_module + @balloon.extend @speech_balloon_template.engine_balloon_module + @speech.extend @speech_balloon_template.engine_speech_module + @speech_balloon_extend = @speech_balloon.extend_speech_balloon + @balloon_extend = @balloon.extend_balloon + @speech_extend = @speech.extend_speech + @speech_balloon.overwrite @panel.id respond_to do |format| - if @speech_balloon.valid? + if @speech_balloon.valid? or @speech_balloon.extend_speech_balloon.valid? or @balloon.extend_balloon.valid? or @speech.extend_speech.valid? or @speech_balloon_extend.valid? if @speech_balloon.store @author, params[:speech_balloon] flash[:notice] = I18n.t('flash.notice.created', :model => Panel.model_name.human) format.html { redirect_to @panel } format.json { render json: @panel.panel_elements_as_json, status: :created, location: @panel } else flash[:notice] = I18n.t('flash.notice.not_created', :model => SpeechBalloon.model_name.human) - format.html { render action: "new" } + format.html { + render @speech_balloon_template.engine_name + '/speech_balloons/new' + } format.json { render json: @speech_balloon.errors, status: :unprocessable_entity } end else flash[:notice] = I18n.t('flash.notice.not_created', :model => SpeechBalloon.model_name.human) - format.html { render action: "new" } + format.html { + render @speech_balloon_template.engine_name + '/speech_balloons/new' + } format.json { render json: @speech_balloon.errors, status: :unprocessable_entity } end end end def update + speech_balloon_settings = params[:speech_balloon][:settings] + if speech_balloon_settings.blank? + speech_balloon_settings = {} + else + if speech_balloon_settings.is_a?(Hash) + params[:speech_balloon][:settings] = speech_balloon_settings.to_json + else + speech_balloon_settings = {} + end + end + balloon_settings = params[:speech_balloon][:balloon_attributes][:settings] + if balloon_settings.blank? + balloon_settings = {} + else + if balloon_settings.is_a?(Hash) + params[:speech_balloon][:balloon_attributes][:settings] = balloon_settings.to_json + else + balloon_settings = {} + end + end + speech_settings = params[:speech_balloon][:speech_attributes][:settings] + if speech_settings.blank? + speech_settings = {} + else + if speech_settings.is_a?(Hash) + params[:speech_balloon][:speech_attributes][:settings] = speech_settings.to_json + else + speech_settings = {} + end + end @speech_balloon = SpeechBalloon.show(params[:id], @author) @speech_balloon.attributes = params[:speech_balloon] + + @speech_balloon_template = @speech_balloon.speech_balloon_template + @speech_balloon.extend @speech_balloon.speech_balloon_template.engine_speech_balloon_module + @balloon = @speech_balloon.balloon + @speech = @speech_balloon.speech + + @speech_balloon.extend @speech_balloon_template.engine_speech_balloon_module + @balloon.extend @speech_balloon_template.engine_balloon_module + @speech.extend @speech_balloon_template.engine_speech_module + + @speech_balloon.extend_speech_balloon = speech_balloon_settings + @balloon.extend_balloon = balloon_settings + @speech.extend_speech = speech_settings + + @speech_balloon_extend = @speech_balloon.extend_speech_balloon + @balloon_extend = @balloon.extend_balloon + @speech_extend = @speech.extend_speech + + @balloon.select_system_picture + @panel = Panel.edit(@speech_balloon.panel.id, @author) @speech_balloon.overwrite @panel.id respond_to do |format| - if @speech_balloon.store @author, params[:speech_balloon] - flash[:notice] = I18n.t('flash.notice.updated', :model => SpeechBalloon.model_name.human) - format.html { redirect_to @speech_balloon } - format.json { head :ok } + sbv = @speech_balloon_extend.valid? + bv = @balloon_extend.valid? + sv = @speech_extend.valid? + if @speech_balloon.valid? and @speech_balloon_extend.valid? and @balloon_extend.valid? and @speech_extend.valid? and sbv and bv and sv + if @speech_balloon.store @author, params[:speech_balloon] + flash[:notice] = I18n.t('flash.notice.updated', :model => SpeechBalloon.model_name.human) + format.html { redirect_to @speech_balloon } + format.json { head :ok } + else + flash[:notice] = I18n.t('flash.notice.not_updated', :model => SpeechBalloon.model_name.human) + format.html { + render @speech_balloon.speech_balloon_template.engine_name + '/speech_balloons/edit' + } + format.json { render json: @speech_balloon.errors, status: :unprocessable_entity } + end else flash[:notice] = I18n.t('flash.notice.not_updated', :model => SpeechBalloon.model_name.human) - format.html { render action: "edit" } + format.html { + render @speech_balloon.speech_balloon_template.engine_name + '/speech_balloons/edit' + } format.json { render json: @speech_balloon.errors, status: :unprocessable_entity } end end diff --git a/app/models/speech_balloon.rb b/app/models/speech_balloon.rb index 1e2deb3b..6ca04cd5 100644 --- a/app/models/speech_balloon.rb +++ b/app/models/speech_balloon.rb @@ -28,7 +28,6 @@ class SpeechBalloon < ActiveRecord::Base self.t = self.panel.new_t self.z = self.panel.new_z end -self.classname = 'SpeechBalloon' end def overwrite pid diff --git a/app/models/speech_balloon_template.rb b/app/models/speech_balloon_template.rb index 9c27ec58..a1f14d99 100644 --- a/app/models/speech_balloon_template.rb +++ b/app/models/speech_balloon_template.rb @@ -69,6 +69,46 @@ class SpeechBalloonTemplate < ActiveRecord::Base r end + def parsed_settings + @template_settings ||= JSON.parse(self.settings) + end + + def engine_name + Pettanr::Application.speech_balloons[self.classname] + end + + def engine_module_name + self.engine_name.camelize + end + + def engine + Object.const_get self.engine_module_name + end + + def engine_speech_balloon_model + engine.const_get 'SpeechBalloon' + end + + def engine_speech_balloon_module + engine.const_get 'SpeechBalloonModule' + end + + def engine_balloon_model + engine.const_get 'Balloon' + end + + def engine_balloon_module + engine.const_get 'BalloonModule' + end + + def engine_speech_model + engine.const_get 'Speech' + end + + def engine_speech_module + engine.const_get 'SpeechModule' + end + def self.import filename SpeechBalloonTemplate.import_file(filename) {|name, attr| SpeechBalloonTemplate.store(name, attr)} end diff --git a/app/views/panels/_footer.html.erb b/app/views/panels/_footer.html.erb index 035a1f29..80ac22f0 100644 --- a/app/views/panels/_footer.html.erb +++ b/app/views/panels/_footer.html.erb @@ -1,14 +1,14 @@ diff --git a/config/application.rb b/config/application.rb index 46b22aa3..3217e06c 100644 --- a/config/application.rb +++ b/config/application.rb @@ -63,10 +63,19 @@ config.assets.initialize_on_precompile = false def self.licenses @@licenses end - end + + def self.speech_balloons=(ary) + @@speech_balloons = ary + end + + def self.speech_balloons + @@speech_balloons + end + end end Pettanr::Application.licenses = YAML.load(open(Rails.root + 'config/license.yml').read) +Pettanr::Application.speech_balloons = YAML.load(open(Rails.root + 'config/speech_balloon.yml').read) MagicNumber = YAML.load(open(Rails.root + 'config/magic_number.yml').read) MagicNumber['test_layout'] = if File.exist? Rails.root + 'config/test_layout' 'test' diff --git a/config/speech_balloon.yml b/config/speech_balloon.yml new file mode 100644 index 00000000..55fa394a --- /dev/null +++ b/config/speech_balloon.yml @@ -0,0 +1,2 @@ + Square: pettanr_square_v01_sbt + TestSpeechBalloon: test_speech_balloon -- 2.11.0
- <%= link_to panel_icon(:object => panel, :size => 25), panel_path(panel) %> - <%= link_to author_icon(:object => panel.author, :size => 17), author_path(panel.author) %> + <%= link_to panel_icon(:object => panel, :size => 25), main_app.panel_path(panel) %> + <%= link_to author_icon(:object => panel.author, :size => 17), main_app.author_path(panel.author) %> <%= l panel.updated_at %> <% if panel.own? author %> - <%= link_to t('link.edit'), edit_panel_path(panel) %> - <%= link_to t('link.catch'), catch_panel_path(panel) %> + <%= link_to t('link.edit'), main_app.edit_panel_path(panel) %> + <%= link_to t('link.catch'), main_app.catch_panel_path(panel) %> <% end %>