OSDN Git Service

fix:pp link
authoryasushiito <yas@pen-chan.jp>
Thu, 1 Oct 2015 23:40:12 +0000 (08:40 +0900)
committeryasushiito <yas@pen-chan.jp>
Thu, 1 Oct 2015 23:40:12 +0000 (08:40 +0900)
app/assets/javascripts/views/panel_pictures/element.js.coffee
app/assets/javascripts/views/panels/body.js.coffee
app/assets/javascripts/views/panels/show.js.coffee
app/models/panel_picture.rb
app/views/panel_pictures/_element.html.erb
bin/panel_import.rb
config/routes.rb

index 174b382..70ec929 100644 (file)
@@ -17,6 +17,7 @@ class Pettanr.Views.PanelPicture.Element extends Pettanr.View
           picture: @picture,\r
           spot: @spot\r
         })\r
+        @listenTo(img, 'http_get', @http_get)\r
         @restyle()\r
         this.$el.html(img.render().el)\r
         @init_picture(img)\r
@@ -42,7 +43,34 @@ class Pettanr.Views.PanelPicture.Element extends Pettanr.View
     Pettanr.Views[element.singular()].Element\r
   \r
   img_class: () ->\r
-    Pettanr.Views.PanelPicture.Element.Img\r
+    if @element.get('link')\r
+      if @element.get('link').match(/\:\/\//)\r
+        Pettanr.Views.PanelPicture.Element.LinkedImg\r
+      else\r
+        Pettanr.Views.PanelPicture.Element.ButtonImg\r
+    else\r
+      Pettanr.Views.PanelPicture.Element.Img\r
+  \r
+  http_get: (url) ->\r
+    @trigger('http_get', url)\r
+  \r
+class Pettanr.Views.PanelPicture.Element.LinkedImg extends Tag.A_\r
+  \r
+  initialize: (options) ->\r
+    img = new Pettanr.Views.PanelPicture.Element.Img(options)\r
+    super({content: img.render().el, attr: {href: options.element.get('link')}})\r
+  \r
+class Pettanr.Views.PanelPicture.Element.ButtonImg extends Tag.A\r
+  \r
+  initialize: (options) ->\r
+    img = new Pettanr.Views.PanelPicture.Element.Img(options)\r
+    @link = options.element.get('link')\r
+    super({content: img.render().el, attr: {href: '/' + @link}})\r
+  \r
+  click: () ->\r
+    super()\r
+    @trigger('http_get', @link)\r
+    return false\r
   \r
 class Pettanr.Views.PanelPicture.Element.Img extends Pettanr.View\r
   tagName: 'img'\r
index d7949bb..9ae783e 100644 (file)
@@ -37,11 +37,15 @@ class Pettanr.Views.Panel.Body extends Pettanr.View
     index = element.get('z') - 1\r
     c = @element_class(element)\r
     view = new c({element: element, root: @panel, spot: @spot})\r
+    @add_event(view)\r
     @views.splice(index, 0, view)\r
     if @is_visible()\r
       this.$el.append(view.render().el)\r
     view\r
   \r
+  add_event: (view) ->\r
+    @listenTo(view, 'http_get', @http_get)\r
+  \r
   remove_element: (element) ->\r
     _.each @views, (view) =>\r
       if view.element.cid == element.cid\r
@@ -63,6 +67,9 @@ class Pettanr.Views.Panel.Body extends Pettanr.View
       'background-color': 'white'\r
     }\r
   \r
+  http_get: (url) ->\r
+    @trigger('http_get', url)\r
+  \r
 class Pettanr.Views.Panel.Body.Edit extends Pettanr.Views.Panel.Body\r
   \r
   initialize: (options) ->\r
@@ -111,3 +118,6 @@ class Pettanr.Views.Panel.Body.Edit extends Pettanr.Views.Panel.Body
   element_class: (element) ->\r
     Pettanr.Views[element.singular()].Element.Edit\r
   \r
+  # stop listen link msg\r
+  add_event: (view) ->\r
+  \r
index e8af5f1..53c043a 100644 (file)
@@ -16,6 +16,7 @@ class Pettanr.Views.Panel.Show extends Pettanr.View.Show
     @owner = new Pettanr.View.Show.Footer(@item, this, @default_footer_options())\r
     @listenTo(@header, 'click:pick', @click_pick)\r
     @listenTo(@authored_by, 'click', @click_authored_by)\r
+    @listenTo(@body, 'http_get', @http_get)\r
   \r
   render: () ->\r
     this.$el.html('')\r
@@ -27,6 +28,9 @@ class Pettanr.Views.Panel.Show extends Pettanr.View.Show
     this.$el.append(@owner.render().el) if @item.is_own()\r
     this\r
   \r
+  http_get: (url) ->\r
+    @trigger('http_get', url)\r
+  \r
   click_pick: () ->\r
     @trigger('pick', @item)\r
   \r
index 3713764..d8211ab 100644 (file)
@@ -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?
       ''
index 13c65ee..dc36742 100644 (file)
@@ -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 %>
index fc8f576..969227c 100644 (file)
@@ -7,8 +7,7 @@ require 'json'
 require 'base64'\r
 \r
 if ARGV.size < 1\r
-  puts "uploader.rb src_host src_email src_token dest_host dest_email dest_token"\r
-  puts "upload on child dirs"\r
+  puts "panel_import.rb src_host src_email src_token dest_host dest_email dest_token"\r
   exit\r
 end\r
 \r
@@ -40,12 +39,11 @@ class Importer
       @src_speech_balloon_templates[sb['id'].to_i] = sb\r
     end\r
     @dest_speech_balloon_templates = {}\r
-    self.speech_balloon_templates(@dest_host, @src_email, @src_token).each do |sb|\r
+    self.speech_balloon_templates(@dest_host, @dest_email, @dest_token).each do |sb|\r
       @dest_speech_balloon_templates[sb['name']] = sb\r
     end\r
     @src_writing_formats = {}\r
-    self.writing_formats(@dest_host, @src_email, @src_token).each do |wf|\r
-  #  self.writing_formats(@src_host, @src_auth).each do |wf|\r
+    self.writing_formats(@src_host, @src_email, @src_token).each do |wf|\r
       @src_writing_formats[wf['id'].to_i] = wf\r
     end\r
     @dest_writing_formats = {}\r
@@ -66,14 +64,16 @@ class Importer
     res = {}\r
     u = host + 'licenses.json'\r
     r = RestClient.get(u, :params => {:page_size  => 100})\r
-    JSON.parse r\r
+    j = JSON.parse r\r
+    j['list']\r
   end\r
   \r
   def license_groups host\r
     res = {}\r
     u = host + 'license_groups.json'\r
     r = RestClient.get(u, :params => {:page_size  => 100})\r
-    ary = JSON.parse r\r
+    j = JSON.parse r\r
+    ary = j['list']\r
     ary.each do |l|\r
       res[l['id'].to_i] = l\r
     end\r
@@ -83,28 +83,31 @@ class Importer
   def speech_balloon_templates host, email, token\r
     res = {}\r
     u = host + 'speech_balloon_templates.json'\r
-    r = RestClient.get(u, {:params => {:page_size  => 100}}, {:email => email, :token => token})\r
-    JSON.parse r\r
+    r = RestClient.get(u, {:params => {:page_size  => 100}, :email => email, :token => token})\r
+    j = JSON.parse r\r
+    j['list']\r
   end\r
   \r
   def writing_formats host, email, token\r
     res = {}\r
     u = host + 'writing_formats.json'\r
-    r = RestClient.get(u, {:params => {:page_size  => 100}}, {:email => email, :token => token})\r
-    JSON.parse r\r
+    r = RestClient.get(u, {:params => {:page_size  => 100}, :email => email, :token => token})\r
+    j = JSON.parse r\r
+    j['list']\r
   end\r
   \r
   def system_pictures host, email, token\r
     res = {}\r
     u = host + 'system_pictures.json'\r
-    r = RestClient.get(u, {:params => {:page_size  => 100}}, {:email => email, :token => token})\r
-    JSON.parse r\r
+    r = RestClient.get(u, {:params => {:page_size  => 100}, :email => email, :token => token})\r
+    j = JSON.parse r\r
+    j['list']\r
   end\r
   \r
   def panels host, email, token\r
     res = {}\r
     u = host + 'home/panels.json'\r
-    r = RestClient.get(u, {:params => {:page_size  => 100}}, {:email => email, :token => token})\r
+    r = RestClient.get(u, {:params => {:page_size  => 100}:email => email, :token => token})\r
     resp = JSON.parse r\r
     status = resp['page_status']\r
     resp['list'].each do |panel|\r
@@ -113,21 +116,27 @@ class Importer
     res\r
   end\r
   \r
-  def picture id, host, email, token\r
+  def panel pid, host, email, token\r
     res = {}\r
-    u = host + 'pictures/'\r
-    r = RestClient.get(u, {:params => {:id => id}}, {:email => email, :token => token})\r
+    u = host + 'panels/' +  pid.to_s + '.json'\r
+    r = RestClient.get(u, {:params => {:with_elements  => true}, :email => email, :token => token})\r
+    j = JSON.parse r\r
+  end\r
+  \r
+  def picture id, host, email, token\r
+    u = host + 'pictures/' + id.to_s + '.json'\r
+    r = RestClient.get(u, {:email => email, :token => token})\r
     JSON.parse r\r
   end\r
   \r
   def search_resource_picture md5, host, email, token\r
     res = {}\r
     u = host + 'resource_pictures/search.json'\r
-    r = RestClient.get(u, {:params => {:md5 => md5}}, {:email => email, :token => token})\r
+    r = RestClient.get(u, {:params => {:md5 => md5}:email => email, :token => token})\r
     JSON.parse r\r
   end\r
   \r
-  def prepare_panel_picture panel_picture\r
+  def prepare_panel_pictures panel_picture\r
     element_name = 'panel_pictures'\r
     puts 'panel_picture:' + panel_picture['id'].to_s\r
     # get picture from src\r
@@ -145,7 +154,7 @@ class Importer
       return\r
     end\r
     # get lisence's id if exists?\r
-    src_ls_name = @src_licenses[picture['license_id']]['name'].gsub /License\:/, 'Licenses:'\r
+    src_ls_name = @src_licenses[picture['license_id']]['name']\r
     puts 'license:' + picture['license_id'].to_s + '(' + src_ls_name + ')'\r
     if dl = @dest_licenses[src_ls_name]\r
       puts 'license ok(' + dl['id'].to_s + ')'\r
@@ -155,13 +164,14 @@ class Importer
       return\r
     end\r
     panel_picture['picture_id'] = rp['picture_id']\r
+    true\r
   end\r
   \r
-  def prepare_speech_balloon speech_balloon\r
+  def prepare_speech_balloons speech_balloon\r
     element_name = 'speech_balloons'\r
-    puts 'sb:' + e['id'].to_s\r
-    src_sb_name = @src_speech_balloon_templates[e['speech_balloon_template_id']]['name']\r
-    puts 'speech_balloon_template:' + e['speech_balloon_template_id'].to_s + '(' + src_sb_name + ')'\r
+    puts 'sb:' + speech_balloon['id'].to_s\r
+    src_sb_name = @src_speech_balloon_templates[speech_balloon['speech_balloon_template_id']]['name']\r
+    puts 'speech_balloon_template:' + speech_balloon['speech_balloon_template_id'].to_s + '(' + src_sb_name + ')'\r
     if dsb = @dest_speech_balloon_templates[src_sb_name]\r
       puts 'speech_balloon_template ok(' + dsb['id'].to_s + ')'\r
     else\r
@@ -169,8 +179,8 @@ class Importer
       c = false\r
       return\r
     end\r
-    src_sp_md5 = @src_system_pictures[e['balloon']['system_picture_id']]['md5']\r
-    puts 'balloon picture:' + e['balloon']['system_picture_id'].to_s + '(' + src_sp_md5 + ')'\r
+    src_sp_md5 = @src_system_pictures[speech_balloon['balloon']['system_picture_id']]['md5']\r
+    puts 'balloon picture:' + speech_balloon['balloon']['system_picture_id'].to_s + '(' + src_sp_md5 + ')'\r
     if dsp = @dest_system_pictures[src_sp_md5]\r
       puts 'balloon picture ok(' + dsp['id'].to_s + ')'\r
     else\r
@@ -178,8 +188,8 @@ class Importer
       c = false\r
       return\r
     end\r
-    src_wf_name = @src_writing_formats[e['speech']['writing_format_id']]['name']\r
-    puts 'speech writing_format:' + e['speech']['writing_format_id'].to_s + '(' + src_wf_name + ')'\r
+    src_wf_name = @src_writing_formats[speech_balloon['speech']['writing_format_id']]['name']\r
+    puts 'speech writing_format:' + speech_balloon['speech']['writing_format_id'].to_s + '(' + src_wf_name + ')'\r
     if dwf = @dest_writing_formats[src_wf_name]\r
       puts 'speech writing_format ok(' + dwf['id'].to_s + ')'\r
     else\r
@@ -187,47 +197,48 @@ class Importer
       c = false\r
       return\r
     end\r
-    e['speech_balloon_template_id'] = dsb['id']\r
-    e["speech_balloon_template_settings"] = e["settings"]\r
-    e.delete 'settings'\r
-    e["speech_balloon_template_classname"] = dsb["classname"]\r
-    e.delete 'classname'\r
+    speech_balloon['speech_balloon_template_id'] = dsb['id']\r
+    speech_balloon["speech_balloon_template_settings"] = speech_balloon["settings"]\r
+    speech_balloon.delete 'settings'\r
+    speech_balloon["speech_balloon_template_module_name"] = dsb["module_name"]\r
+    speech_balloon.delete 'module_name'\r
     #e.delete 'speech_balloon_template'\r
-    balloon = e['balloon']\r
-    e.delete 'balloon'\r
+    balloon = speech_balloon['balloon']\r
+    speech_balloon.delete 'balloon'\r
     balloon.delete 'id'\r
     balloon.delete 'speech_balloon_id'\r
-    balloon["speech_balloon_template_settings"] = e["settings"]\r
+    balloon["speech_balloon_template_settings"] = speech_balloon["settings"]\r
     balloon.delete 'settings'\r
     balloon['system_picture_id'] = dsp['id']\r
     balloon['speech_balloon_template_id'] = dsb['id']\r
-    balloon["speech_balloon_template_classname"] = dsb["classname"]\r
+    balloon["speech_balloon_template_module_name"] = dsb["module_name"]\r
     \r
-    speech = e['speech']\r
-    e.delete 'speech'\r
+    speech = speech_balloon['speech']\r
+    speech_balloon.delete 'speech'\r
     speech.delete 'id'\r
     speech.delete 'speech_balloon_id'\r
-    speech["speech_balloon_template_settings"] = e["settings"]\r
+    speech["speech_balloon_template_settings"] = speech_balloon["settings"]\r
     speech.delete 'settings'\r
     speech['speech_balloon_template_id'] = dsb['id']\r
-    speech["speech_balloon_template_classname"] = dsb["classname"]\r
+    speech["speech_balloon_template_module_name"] = dsb["module_name"]\r
     speech['writing_format_id'] = dwf['id']\r
-#      speech["writing_format_classname"] = 'Pettanr' + dwf["classname"]\r
-    speech["writing_format_classname"] = dwf["classname"]\r
+    speech["writing_format_module_name"] = dwf["module_name"]\r
     \r
-    e['balloon_attributes'] = balloon\r
-    e['speech_attributes'] = speech\r
+    speech_balloon['balloon_attributes'] = balloon\r
+    speech_balloon['speech_attributes'] = speech\r
+    true\r
   end\r
   \r
-  def prepare_ground_color ground_color\r
+  def prepare_ground_colors ground_color\r
     element_name = 'ground_colors'\r
     puts 'ground_color:' + ground_color['id'].to_s\r
+    true\r
   end\r
   \r
-  def prepare_ground_picture ground_picture\r
+  def prepare_ground_pictures ground_picture\r
     element_name = 'ground_pictures'\r
     puts 'ground_picture:' + ground_picture['id'].to_s\r
-    rps = self.resource_picture ground_picture['picture']['md5'], @dest_host, @dest_auth\r
+    rps = self.resource_picture ground_picture['picture']['md5'], @dest_host, @dest_email, @dest_token\r
     if rps.any?\r
       rp = rps.first\r
       puts 'picture ok(' + rp['id'].to_s + ')'\r
@@ -238,35 +249,38 @@ class Importer
     end\r
     #e['license_id'] = dl['id']\r
     ground_picture['picture_id'] = rp['id']\r
-    #e.delete 'license'\r
+    true\r
+  end\r
+  \r
+  def add_attribute element_name, panel_json, attribute\r
+    eid = attribute['id']\r
+    attribute.delete 'id'\r
+    attribute.delete 'panel_id'\r
+    panel_json[element_name + '_attributes'] ||= []\r
+    panel_json[element_name + '_attributes'].push attribute\r
   end\r
   \r
-  def add_attribute panel_json, attribute\r
-    eid = e['id']\r
-    e.delete 'id'\r
-    e.delete 'panel_id'\r
-    panel_json[element_name + '_attributes'] ||= {}\r
-    panel_json[element_name + '_attributes']['new' + eid.to_s] = e\r
+  def edit_elements panel_json, element_name\r
+    r = true\r
+    (panel_json[element_name] || {}).each do |attr|\r
+      r = self.__send__ 'prepare_' + element_name, attr\r
+      break unless r\r
+      self.add_attribute element_name, panel_json, attr\r
+    end\r
+    panel_json.delete element_name\r
+    r\r
   end\r
   \r
   def each_panel\r
-    self.panels(@src_host, @src_email, @src_token).each do |key, panel_json|\r
+    self.panels(@src_host, @src_email, @src_token).each do |key, attrs|\r
       puts 'source panel:' + key.to_s\r
-      c = true\r
-      panel_json['panel_pictures'].each do |panel_picture|\r
-        self.prepare_panel_picture panel_picture\r
-        self.add_attribute panel_json, panel_picture\r
-      end\r
-      panel_json['speech_balloons'].each do |speech_balloon|\r
-        self.prepare_speech_balloon speech_balloon\r
-      end\r
-      panel_json['ground_colors'].each do |ground_color|\r
-        self.prepare_ground_color ground_color\r
-      end\r
-      panel_json['ground_pictures'].each do |ground_picture|\r
-        self.prepare_ground_picture ground_picture\r
+      panel_json = self.panel(key, @src_host, @src_email, @src_token)\r
+      r = true\r
+      ['panel_pictures', 'speech_balloons', 'ground_pictures', 'ground_colors'].each do |element_name|\r
+        r = self.edit_elements(panel_json, element_name)\r
+        break unless r\r
       end\r
-      next unless c\r
+      next unless r\r
       puts '============ importable'\r
       panel_json.delete 'id'\r
       panel_json.delete 'author'\r
@@ -289,7 +303,7 @@ u.each_panel do |panel_json|
   end\r
   begin\r
     r = RestClient.post(u, \r
-      {:json => panel_json}.to_json, \r
+      {:panel => panel_json}.to_json, \r
       :content_type => :json, :accept => :json, :email => dest_email, :token => dest_token\r
     )\r
     res = JSON.parse r\r
index 3ccb1e9..f6c969c 100644 (file)
@@ -326,6 +326,7 @@ Pettanr::Application.routes.draw do
     collection do
       get :index
       get :show
+      get :search
       get :new
       post :create
     end