From 540fc7d42a6fa713a661a2401601753f11d5992b Mon Sep 17 00:00:00 2001 From: yasushiito Date: Sat, 17 Aug 2013 15:52:27 +0900 Subject: [PATCH] t#31757:add font --- app/assets/javascripts/panels.js.coffee | 37 +++++++++--- app/models/speech.rb | 3 + config/locales/pettanr.ja.yml | 19 ++++++ config/magic_number.yml | 34 ++++++++++- db/migrate/20130816102354_add_font_on_speeches.rb | 10 ++++ spec/factories.rb | 3 + spec/models/speech_spec.rb | 72 +++++++++++++++++++++++ 7 files changed, 168 insertions(+), 10 deletions(-) create mode 100644 db/migrate/20130816102354_add_font_on_speeches.rb diff --git a/app/assets/javascripts/panels.js.coffee b/app/assets/javascripts/panels.js.coffee index e909acf3..37af5940 100644 --- a/app/assets/javascripts/panels.js.coffee +++ b/app/assets/javascripts/panels.js.coffee @@ -60,6 +60,9 @@ $ -> element_tag_id = (element) -> '#panel' + element.attr('panel_id') + element.attr('element_type') + element.attr('element_id') + element_part_tag_id = (element_part) -> + '#panel' + element_part.attr('panel_id') + element_part.attr('element_type') + element_part.attr('element_id') + element_part.attr('element_part_type') + element_part.attr('element_part_id') + refresh_attribute = () -> attr = {} $('input').map -> @@ -324,6 +327,9 @@ $ -> v = writing_format_functions[writing_formats[wf_id]]($(@).val()) $(trace).html('

' + v + '

') ) + $('input').map -> + if $(@).attr('element_type') and $(@).attr('element_type') == 'speech_balloon' and $(@).attr('column') == 'fore_color' + $(@).hide() # ground-picture @@ -366,13 +372,21 @@ $ -> $(trace + 'code_swatch').css('background-color', '#' + h) $(trace + 'code_hex').html('HEX: #' + h) $(trace + 'code_rgb').html('RGB: (' + red + ',' + green + ',' +blue + ')') - $(trace + 'code').val(code) v = '#' + h - $(trace).css('background-color', v) + if is_element_part($(trace)) + $(trace + 'fore_color').val(code) + $(trace).css('color', v) + else + $(trace + 'code').val(code) + $(trace).css('background-color', v) $('.colorpicker').map -> - code_picker_trace = element_tag_id($(@)) - code = parseInt($(code_picker_trace + 'code').val()) + if is_element_part($(@)) + code_picker_trace = element_part_tag_id($(@)) + code = parseInt($(code_picker_trace + 'fore_color').val()) + else + code_picker_trace = element_tag_id($(@)) + code = parseInt($(code_picker_trace + 'code').val()) red = (code >> 16) & 0xFF green = (code >> 8) & 0xFF blue = code & 0xFF @@ -382,7 +396,10 @@ $ -> max: 255, value: red, change: ( event, ui ) -> - trace = element_tag_id($(@).parent()) + if is_element_part($(@).parent()) + trace = element_part_tag_id($(@).parent()) + else + trace = element_tag_id($(@).parent()) color_slider_change(trace) } $(code_picker_trace + 'code_green').slider { @@ -391,7 +408,10 @@ $ -> max: 255, value: green, change: ( event, ui ) -> - trace = element_tag_id($(@).parent()) + if is_element_part($(@).parent()) + trace = element_part_tag_id($(@).parent()) + else + trace = element_tag_id($(@).parent()) color_slider_change(trace) } $(code_picker_trace + 'code_blue').slider { @@ -400,7 +420,10 @@ $ -> max: 255, value: blue, change: ( event, ui ) -> - trace = element_tag_id($(@).parent()) + if is_element_part($(@).parent()) + trace = element_part_tag_id($(@).parent()) + else + trace = element_tag_id($(@).parent()) color_slider_change(trace) } color_slider_change(code_picker_trace) diff --git a/app/models/speech.rb b/app/models/speech.rb index dfa21689..c97e0192 100644 --- a/app/models/speech.rb +++ b/app/models/speech.rb @@ -4,6 +4,9 @@ class Speech < ActiveRecord::Base validates :speech_balloon_id, :numericality => {:allow_blank => true} validates :writing_format_id, :presence => true, :numericality => true, :existence => {:both => false} + validates :font_size, :presence => true, :numericality => {:only_integer => false} + validates :text_align, :presence => true, :numericality => true, :inclusion => { :in => 0..3 } + validates :fore_color, :presence => true, :numericality => {:greater_than_or_equal_to => 0, :less_than => 0x1000000} validates :x, :presence => true, :numericality => true validates :y, :presence => true, :numericality => true validates :width, :presence => true, :numericality => true, :natural_number => true diff --git a/config/locales/pettanr.ja.yml b/config/locales/pettanr.ja.yml index 17130a1e..42eef606 100644 --- a/config/locales/pettanr.ja.yml +++ b/config/locales/pettanr.ja.yml @@ -118,6 +118,9 @@ ja: speech_balloon_id: フキダシ writing_format_id: 記法 content: セリフ + font_size: 基本フォントサイズ + text_align: テキスト揃え + fore_color: フォント色 x: X y: Y width: 幅 @@ -325,6 +328,22 @@ ja: repeat-x: 横方向 repeat-y: 縦方向 no-repeat: なし + speeches: + font_size: + ultra_small: 極小 + very_small: 小小 + small: 小 + semi_small: 微小 + normal: 並 + semi_large: 微大 + large: 大 + very_large: 大大 + ultra_large: 極大 + text_align: + none: 指定しない + left: 左寄せ + right: 右寄せ + center: 中央寄せ provider_status: status: waiting: 待機中 diff --git a/config/magic_number.yml b/config/magic_number.yml index cfb7b52f..e9037f67 100644 --- a/config/magic_number.yml +++ b/config/magic_number.yml @@ -6,8 +6,36 @@ provider_status_status_items: [['select_items.provider_status.status.waiting', 0], ['select_items.provider_status.status.receiving', 1]] demander_status_status_items: [['select_items.demander_status.status.waiting', 0], ['select_items.demander_status.status.rejected', 1], ['select_items.demander_status.status.requesting', 2], ['select_items.demander_status.status.approved', 3]] - comic_visible_items: [['select_items.comic.visible.private', 0], ['select_items.comic.visible.public', 1]] - panel_visible_items: [['select_items.panel.visible.private', 0], ['select_items.panel.visible.public', 1]] - ground_picture_repeat_items: [['select_items.ground_pictures.repeat.repeat', 0], ['select_items.ground_pictures.repeat.repeat-x', 1], ['select_items.ground_pictures.repeat.repeat-y', 2], ['select_items.ground_pictures.repeat.no-repeat', 3]] + comic_visible_items: [ + ['select_items.comic.visible.private', 0], + ['select_items.comic.visible.public', 1] + ] + panel_visible_items: [ + ['select_items.panel.visible.private', 0], + ['select_items.panel.visible.public', 1] + ] + ground_picture_repeat_items: [ + ['select_items.ground_pictures.repeat.repeat', 0], + ['select_items.ground_pictures.repeat.repeat-x', 1], + ['select_items.ground_pictures.repeat.repeat-y', 2], + ['select_items.ground_pictures.repeat.no-repeat', 3] + ] + speech_font_size_items: [ + ['select_items.speeches.font_size.ultra_small', 0.2], + ['select_items.speeches.font_size.very_small', 0.4], + ['select_items.speeches.font_size.small', 0.6], + ['select_items.speeches.font_size.semi_small', 0.8], + ['select_items.speeches.font_size.normal', 1.0], + ['select_items.speeches.font_size.semi_large', 1.5], + ['select_items.speeches.font_size.large', 2.0], + ['select_items.speeches.font_size.very_large', 3.5], + ['select_items.speeches.font_size.ultra_large', 5.0] + ] + speech_text_align_items: [ + ['select_items.speeches.text_align.none', 0], + ['select_items.speeches.text_align.left', 1], + ['select_items.speeches.text_align.right', 2], + ['select_items.speeches.text_align.center', 3] + ] provider_sources: ['http://sourceforge.jp/projects/pettanr/wiki/ProviderSource/attach/provider_source.json'] diff --git a/db/migrate/20130816102354_add_font_on_speeches.rb b/db/migrate/20130816102354_add_font_on_speeches.rb new file mode 100644 index 00000000..032be5bf --- /dev/null +++ b/db/migrate/20130816102354_add_font_on_speeches.rb @@ -0,0 +1,10 @@ +class AddFontOnSpeeches < ActiveRecord::Migration + def up + add_column :speeches, :font_size, :float, :null => false, :default => 1.0 + add_column :speeches, :text_align, :integer, :null => false, :default => 0 + add_column :speeches, :fore_color, :integer, :null => false, :default => 0 + end + + def down + end +end diff --git a/spec/factories.rb b/spec/factories.rb index b4929dd6..edbe9ff7 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -160,6 +160,9 @@ FactoryGirl.define do speech.speech_balloon_id 1 speech.writing_format_id 1 speech.content 'test' + speech.font_size 1.0 + speech.text_align 1 + speech.fore_color 0xffffff speech.x 10 speech.y 100 speech.width 200 diff --git a/spec/models/speech_spec.rb b/spec/models/speech_spec.rb index 542ec891..3e18d1eb 100644 --- a/spec/models/speech_spec.rb +++ b/spec/models/speech_spec.rb @@ -34,6 +34,9 @@ describe Speech do context 'オーソドックスなデータのとき' do it '下限データが通る' do + @speech.font_size = 1.0 + @speech.text_align = 0 + @speech.fore_color = 0 @speech.x = 0 @speech.y = 0 @speech.width = 1 @@ -42,6 +45,9 @@ describe Speech do @speech.should be_valid end it '上限データが通る' do + @speech.font_size = 99999.0 + @speech.text_align = 3 + @speech.fore_color = 0xffffff @speech.x = 99999 @speech.y = 99999 @speech.width = 99999 @@ -64,6 +70,72 @@ describe Speech do end context 'contentを検証するとき' do end + context 'font_sizeを検証するとき' do + it 'nullなら失敗する' do + @speech.font_size = nil + @speech.should_not be_valid + end + it '数値でなければ失敗する' do + @speech.font_size = 'a' + @speech.should_not be_valid + end + it '0なら通る' do + @speech.font_size = '0' + @speech.should be_valid + end + it '10.5なら通る' do + @speech.font_size = '0' + @speech.should be_valid + end + it '負なら失敗する' do + @speech.font_size = 10.5 + @speech.should be_valid + end + end + context 'text_alignを検証するとき' do + it 'nullなら失敗する' do + @speech.text_align = nil + @speech.should_not be_valid + end + it '数値でなければ失敗する' do + @speech.text_align = 'a' + @speech.should_not be_valid + end + it '0なら通る' do + @speech.text_align = '0' + @speech.should be_valid + end + it '負なら失敗する' do + @speech.text_align = -1 + @speech.should_not be_valid + end + it '4なら失敗する' do + @speech.text_align = 4 + @speech.should_not be_valid + end + end + context 'fore_colorを検証するとき' do + it 'nullなら失敗する' do + @speech.fore_color = nil + @speech.should_not be_valid + end + it '数値でなければ失敗する' do + @speech.fore_color = 'a' + @speech.should_not be_valid + end + it '0なら通る' do + @speech.fore_color = '0' + @speech.should be_valid + end + it '負なら失敗する' do + @speech.fore_color = -1 + @speech.should_not be_valid + end + it '24bit colorでなければ失敗する' do + @speech.fore_color = 0x1000000 + @speech.should_not be_valid + end + end context 'xを検証するとき' do it 'nullなら失敗する' do @speech.x = nil -- 2.11.0