From 8ec74dec6d3b971a050d2a14979783ccd54f06a2 Mon Sep 17 00:00:00 2001 From: yasushiito Date: Fri, 2 Oct 2015 08:40:12 +0900 Subject: [PATCH 1/1] fix:pp link --- .../views/panel_pictures/element.js.coffee | 30 +++- app/assets/javascripts/views/panels/body.js.coffee | 10 ++ app/assets/javascripts/views/panels/show.js.coffee | 4 + app/models/panel_picture.rb | 11 +- app/views/panel_pictures/_element.html.erb | 2 +- bin/panel_import.rb | 156 +++++++++++---------- config/routes.rb | 1 + 7 files changed, 140 insertions(+), 74 deletions(-) diff --git a/app/assets/javascripts/views/panel_pictures/element.js.coffee b/app/assets/javascripts/views/panel_pictures/element.js.coffee index 174b382a..70ec929b 100644 --- a/app/assets/javascripts/views/panel_pictures/element.js.coffee +++ b/app/assets/javascripts/views/panel_pictures/element.js.coffee @@ -17,6 +17,7 @@ class Pettanr.Views.PanelPicture.Element extends Pettanr.View picture: @picture, spot: @spot }) + @listenTo(img, 'http_get', @http_get) @restyle() this.$el.html(img.render().el) @init_picture(img) @@ -42,7 +43,34 @@ class Pettanr.Views.PanelPicture.Element extends Pettanr.View Pettanr.Views[element.singular()].Element img_class: () -> - Pettanr.Views.PanelPicture.Element.Img + if @element.get('link') + if @element.get('link').match(/\:\/\//) + Pettanr.Views.PanelPicture.Element.LinkedImg + else + Pettanr.Views.PanelPicture.Element.ButtonImg + else + Pettanr.Views.PanelPicture.Element.Img + + http_get: (url) -> + @trigger('http_get', url) + +class Pettanr.Views.PanelPicture.Element.LinkedImg extends Tag.A_ + + initialize: (options) -> + img = new Pettanr.Views.PanelPicture.Element.Img(options) + super({content: img.render().el, attr: {href: options.element.get('link')}}) + +class Pettanr.Views.PanelPicture.Element.ButtonImg extends Tag.A + + initialize: (options) -> + img = new Pettanr.Views.PanelPicture.Element.Img(options) + @link = options.element.get('link') + super({content: img.render().el, attr: {href: '/' + @link}}) + + click: () -> + super() + @trigger('http_get', @link) + return false class Pettanr.Views.PanelPicture.Element.Img extends Pettanr.View tagName: 'img' diff --git a/app/assets/javascripts/views/panels/body.js.coffee b/app/assets/javascripts/views/panels/body.js.coffee index d7949bb4..9ae783ec 100644 --- a/app/assets/javascripts/views/panels/body.js.coffee +++ b/app/assets/javascripts/views/panels/body.js.coffee @@ -37,11 +37,15 @@ class Pettanr.Views.Panel.Body extends Pettanr.View index = element.get('z') - 1 c = @element_class(element) view = new c({element: element, root: @panel, spot: @spot}) + @add_event(view) @views.splice(index, 0, view) if @is_visible() this.$el.append(view.render().el) view + add_event: (view) -> + @listenTo(view, 'http_get', @http_get) + remove_element: (element) -> _.each @views, (view) => if view.element.cid == element.cid @@ -63,6 +67,9 @@ class Pettanr.Views.Panel.Body extends Pettanr.View 'background-color': 'white' } + http_get: (url) -> + @trigger('http_get', url) + class Pettanr.Views.Panel.Body.Edit extends Pettanr.Views.Panel.Body initialize: (options) -> @@ -111,3 +118,6 @@ class Pettanr.Views.Panel.Body.Edit extends Pettanr.Views.Panel.Body element_class: (element) -> Pettanr.Views[element.singular()].Element.Edit + # stop listen link msg + add_event: (view) -> + diff --git a/app/assets/javascripts/views/panels/show.js.coffee b/app/assets/javascripts/views/panels/show.js.coffee index e8af5f1b..53c043a6 100644 --- a/app/assets/javascripts/views/panels/show.js.coffee +++ b/app/assets/javascripts/views/panels/show.js.coffee @@ -16,6 +16,7 @@ class Pettanr.Views.Panel.Show extends Pettanr.View.Show @owner = new Pettanr.View.Show.Footer(@item, this, @default_footer_options()) @listenTo(@header, 'click:pick', @click_pick) @listenTo(@authored_by, 'click', @click_authored_by) + @listenTo(@body, 'http_get', @http_get) render: () -> this.$el.html('') @@ -27,6 +28,9 @@ class Pettanr.Views.Panel.Show extends Pettanr.View.Show this.$el.append(@owner.render().el) if @item.is_own() this + http_get: (url) -> + @trigger('http_get', url) + click_pick: () -> @trigger('pick', @item) diff --git a/app/models/panel_picture.rb b/app/models/panel_picture.rb index 37137641..d8211abe 100644 --- a/app/models/panel_picture.rb +++ b/app/models/panel_picture.rb @@ -5,7 +5,8 @@ class PanelPicture < Peta::Element validates :panel_id, :numericality => {:allow_blank => true} validates :picture_id, :numericality => true, :existence => {:both => false} - validates :link, :length => {:maximum => 200}, :url => {:allow_blank => true, :message => I18n.t('errors.messages.url')} + validates :link, :length => {:maximum => 200}, :allow_blank => true + #validates :link, :length => {:maximum => 200}, :url => {:allow_blank => true, :message => I18n.t('errors.messages.url')} validates :x, :presence => true, :numericality => true validates :y, :presence => true, :numericality => true validates :width, :presence => true, :numericality => true, :not_zero => true, :reverse => true, :sync_vh => true @@ -125,6 +126,14 @@ class PanelPicture < Peta::Element {:include => {:panel => {:author => {}}, :picture => {:artist => {}, :license => {}}}} end + def disp_link + if self.link =~ /\:\/\// + self.link + else + '/' + self.link + end + end + def scenario if caption.blank? '' diff --git a/app/views/panel_pictures/_element.html.erb b/app/views/panel_pictures/_element.html.erb index 13c65eee..dc367429 100644 --- a/app/views/panel_pictures/_element.html.erb +++ b/app/views/panel_pictures/_element.html.erb @@ -1,3 +1,3 @@ <%= content_tag :div, element.tag_attributes(:div, {'class' => "pettanr-panel-picture-wrapper", 'style' => element.opt_div_style()}) do %> - <%= link_to_unless(element.link.blank?, tag(:img, element.opt_img_tag(spot)), element.link) %> + <%= link_to_unless(element.link.blank?, tag(:img, element.opt_img_tag(spot)), element.disp_link) %> <% end %> diff --git a/bin/panel_import.rb b/bin/panel_import.rb index fc8f576a..969227cd 100644 --- a/bin/panel_import.rb +++ b/bin/panel_import.rb @@ -7,8 +7,7 @@ require 'json' require 'base64' if ARGV.size < 1 - puts "uploader.rb src_host src_email src_token dest_host dest_email dest_token" - puts "upload on child dirs" + puts "panel_import.rb src_host src_email src_token dest_host dest_email dest_token" exit end @@ -40,12 +39,11 @@ class Importer @src_speech_balloon_templates[sb['id'].to_i] = sb end @dest_speech_balloon_templates = {} - self.speech_balloon_templates(@dest_host, @src_email, @src_token).each do |sb| + self.speech_balloon_templates(@dest_host, @dest_email, @dest_token).each do |sb| @dest_speech_balloon_templates[sb['name']] = sb end @src_writing_formats = {} - self.writing_formats(@dest_host, @src_email, @src_token).each do |wf| - # self.writing_formats(@src_host, @src_auth).each do |wf| + self.writing_formats(@src_host, @src_email, @src_token).each do |wf| @src_writing_formats[wf['id'].to_i] = wf end @dest_writing_formats = {} @@ -66,14 +64,16 @@ class Importer res = {} u = host + 'licenses.json' r = RestClient.get(u, :params => {:page_size => 100}) - JSON.parse r + j = JSON.parse r + j['list'] end def license_groups host res = {} u = host + 'license_groups.json' r = RestClient.get(u, :params => {:page_size => 100}) - ary = JSON.parse r + j = JSON.parse r + ary = j['list'] ary.each do |l| res[l['id'].to_i] = l end @@ -83,28 +83,31 @@ class Importer def speech_balloon_templates host, email, token res = {} u = host + 'speech_balloon_templates.json' - r = RestClient.get(u, {:params => {:page_size => 100}}, {:email => email, :token => token}) - JSON.parse r + r = RestClient.get(u, {:params => {:page_size => 100}, :email => email, :token => token}) + j = JSON.parse r + j['list'] end def writing_formats host, email, token res = {} u = host + 'writing_formats.json' - r = RestClient.get(u, {:params => {:page_size => 100}}, {:email => email, :token => token}) - JSON.parse r + r = RestClient.get(u, {:params => {:page_size => 100}, :email => email, :token => token}) + j = JSON.parse r + j['list'] end def system_pictures host, email, token res = {} u = host + 'system_pictures.json' - r = RestClient.get(u, {:params => {:page_size => 100}}, {:email => email, :token => token}) - JSON.parse r + r = RestClient.get(u, {:params => {:page_size => 100}, :email => email, :token => token}) + j = JSON.parse r + j['list'] end def panels host, email, token res = {} u = host + 'home/panels.json' - r = RestClient.get(u, {:params => {:page_size => 100}}, {:email => email, :token => token}) + r = RestClient.get(u, {:params => {:page_size => 100}, :email => email, :token => token}) resp = JSON.parse r status = resp['page_status'] resp['list'].each do |panel| @@ -113,21 +116,27 @@ class Importer res end - def picture id, host, email, token + def panel pid, host, email, token res = {} - u = host + 'pictures/' - r = RestClient.get(u, {:params => {:id => id}}, {:email => email, :token => token}) + u = host + 'panels/' + pid.to_s + '.json' + r = RestClient.get(u, {:params => {:with_elements => true}, :email => email, :token => token}) + j = JSON.parse r + end + + def picture id, host, email, token + u = host + 'pictures/' + id.to_s + '.json' + r = RestClient.get(u, {:email => email, :token => token}) JSON.parse r end def search_resource_picture md5, host, email, token res = {} u = host + 'resource_pictures/search.json' - r = RestClient.get(u, {:params => {:md5 => md5}}, {:email => email, :token => token}) + r = RestClient.get(u, {:params => {:md5 => md5}, :email => email, :token => token}) JSON.parse r end - def prepare_panel_picture panel_picture + def prepare_panel_pictures panel_picture element_name = 'panel_pictures' puts 'panel_picture:' + panel_picture['id'].to_s # get picture from src @@ -145,7 +154,7 @@ class Importer return end # get lisence's id if exists? - src_ls_name = @src_licenses[picture['license_id']]['name'].gsub /License\:/, 'Licenses:' + src_ls_name = @src_licenses[picture['license_id']]['name'] puts 'license:' + picture['license_id'].to_s + '(' + src_ls_name + ')' if dl = @dest_licenses[src_ls_name] puts 'license ok(' + dl['id'].to_s + ')' @@ -155,13 +164,14 @@ class Importer return end panel_picture['picture_id'] = rp['picture_id'] + true end - def prepare_speech_balloon speech_balloon + def prepare_speech_balloons speech_balloon element_name = 'speech_balloons' - puts 'sb:' + e['id'].to_s - src_sb_name = @src_speech_balloon_templates[e['speech_balloon_template_id']]['name'] - puts 'speech_balloon_template:' + e['speech_balloon_template_id'].to_s + '(' + src_sb_name + ')' + puts 'sb:' + speech_balloon['id'].to_s + src_sb_name = @src_speech_balloon_templates[speech_balloon['speech_balloon_template_id']]['name'] + puts 'speech_balloon_template:' + speech_balloon['speech_balloon_template_id'].to_s + '(' + src_sb_name + ')' if dsb = @dest_speech_balloon_templates[src_sb_name] puts 'speech_balloon_template ok(' + dsb['id'].to_s + ')' else @@ -169,8 +179,8 @@ class Importer c = false return end - src_sp_md5 = @src_system_pictures[e['balloon']['system_picture_id']]['md5'] - puts 'balloon picture:' + e['balloon']['system_picture_id'].to_s + '(' + src_sp_md5 + ')' + src_sp_md5 = @src_system_pictures[speech_balloon['balloon']['system_picture_id']]['md5'] + puts 'balloon picture:' + speech_balloon['balloon']['system_picture_id'].to_s + '(' + src_sp_md5 + ')' if dsp = @dest_system_pictures[src_sp_md5] puts 'balloon picture ok(' + dsp['id'].to_s + ')' else @@ -178,8 +188,8 @@ class Importer c = false return end - src_wf_name = @src_writing_formats[e['speech']['writing_format_id']]['name'] - puts 'speech writing_format:' + e['speech']['writing_format_id'].to_s + '(' + src_wf_name + ')' + src_wf_name = @src_writing_formats[speech_balloon['speech']['writing_format_id']]['name'] + puts 'speech writing_format:' + speech_balloon['speech']['writing_format_id'].to_s + '(' + src_wf_name + ')' if dwf = @dest_writing_formats[src_wf_name] puts 'speech writing_format ok(' + dwf['id'].to_s + ')' else @@ -187,47 +197,48 @@ class Importer c = false return end - e['speech_balloon_template_id'] = dsb['id'] - e["speech_balloon_template_settings"] = e["settings"] - e.delete 'settings' - e["speech_balloon_template_classname"] = dsb["classname"] - e.delete 'classname' + speech_balloon['speech_balloon_template_id'] = dsb['id'] + speech_balloon["speech_balloon_template_settings"] = speech_balloon["settings"] + speech_balloon.delete 'settings' + speech_balloon["speech_balloon_template_module_name"] = dsb["module_name"] + speech_balloon.delete 'module_name' #e.delete 'speech_balloon_template' - balloon = e['balloon'] - e.delete 'balloon' + balloon = speech_balloon['balloon'] + speech_balloon.delete 'balloon' balloon.delete 'id' balloon.delete 'speech_balloon_id' - balloon["speech_balloon_template_settings"] = e["settings"] + balloon["speech_balloon_template_settings"] = speech_balloon["settings"] balloon.delete 'settings' balloon['system_picture_id'] = dsp['id'] balloon['speech_balloon_template_id'] = dsb['id'] - balloon["speech_balloon_template_classname"] = dsb["classname"] + balloon["speech_balloon_template_module_name"] = dsb["module_name"] - speech = e['speech'] - e.delete 'speech' + speech = speech_balloon['speech'] + speech_balloon.delete 'speech' speech.delete 'id' speech.delete 'speech_balloon_id' - speech["speech_balloon_template_settings"] = e["settings"] + speech["speech_balloon_template_settings"] = speech_balloon["settings"] speech.delete 'settings' speech['speech_balloon_template_id'] = dsb['id'] - speech["speech_balloon_template_classname"] = dsb["classname"] + speech["speech_balloon_template_module_name"] = dsb["module_name"] speech['writing_format_id'] = dwf['id'] -# speech["writing_format_classname"] = 'Pettanr' + dwf["classname"] - speech["writing_format_classname"] = dwf["classname"] + speech["writing_format_module_name"] = dwf["module_name"] - e['balloon_attributes'] = balloon - e['speech_attributes'] = speech + speech_balloon['balloon_attributes'] = balloon + speech_balloon['speech_attributes'] = speech + true end - def prepare_ground_color ground_color + def prepare_ground_colors ground_color element_name = 'ground_colors' puts 'ground_color:' + ground_color['id'].to_s + true end - def prepare_ground_picture ground_picture + def prepare_ground_pictures ground_picture element_name = 'ground_pictures' puts 'ground_picture:' + ground_picture['id'].to_s - rps = self.resource_picture ground_picture['picture']['md5'], @dest_host, @dest_auth + rps = self.resource_picture ground_picture['picture']['md5'], @dest_host, @dest_email, @dest_token if rps.any? rp = rps.first puts 'picture ok(' + rp['id'].to_s + ')' @@ -238,35 +249,38 @@ class Importer end #e['license_id'] = dl['id'] ground_picture['picture_id'] = rp['id'] - #e.delete 'license' + true + end + + def add_attribute element_name, panel_json, attribute + eid = attribute['id'] + attribute.delete 'id' + attribute.delete 'panel_id' + panel_json[element_name + '_attributes'] ||= [] + panel_json[element_name + '_attributes'].push attribute end - def add_attribute panel_json, attribute - eid = e['id'] - e.delete 'id' - e.delete 'panel_id' - panel_json[element_name + '_attributes'] ||= {} - panel_json[element_name + '_attributes']['new' + eid.to_s] = e + def edit_elements panel_json, element_name + r = true + (panel_json[element_name] || {}).each do |attr| + r = self.__send__ 'prepare_' + element_name, attr + break unless r + self.add_attribute element_name, panel_json, attr + end + panel_json.delete element_name + r end def each_panel - self.panels(@src_host, @src_email, @src_token).each do |key, panel_json| + self.panels(@src_host, @src_email, @src_token).each do |key, attrs| puts 'source panel:' + key.to_s - c = true - panel_json['panel_pictures'].each do |panel_picture| - self.prepare_panel_picture panel_picture - self.add_attribute panel_json, panel_picture - end - panel_json['speech_balloons'].each do |speech_balloon| - self.prepare_speech_balloon speech_balloon - end - panel_json['ground_colors'].each do |ground_color| - self.prepare_ground_color ground_color - end - panel_json['ground_pictures'].each do |ground_picture| - self.prepare_ground_picture ground_picture + panel_json = self.panel(key, @src_host, @src_email, @src_token) + r = true + ['panel_pictures', 'speech_balloons', 'ground_pictures', 'ground_colors'].each do |element_name| + r = self.edit_elements(panel_json, element_name) + break unless r end - next unless c + next unless r puts '============ importable' panel_json.delete 'id' panel_json.delete 'author' @@ -289,7 +303,7 @@ u.each_panel do |panel_json| end begin r = RestClient.post(u, - {:json => panel_json}.to_json, + {:panel => panel_json}.to_json, :content_type => :json, :accept => :json, :email => dest_email, :token => dest_token ) res = JSON.parse r diff --git a/config/routes.rb b/config/routes.rb index 3ccb1e94..f6c969cb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -326,6 +326,7 @@ Pettanr::Application.routes.draw do collection do get :index get :show + get :search get :new post :create end -- 2.11.0