OSDN Git Service

add folder
authoryasushiito <yas@pen-chan.jp>
Sun, 27 Apr 2014 05:02:41 +0000 (14:02 +0900)
committeryasushiito <yas@pen-chan.jp>
Sun, 27 Apr 2014 05:02:41 +0000 (14:02 +0900)
26 files changed:
app/assets/javascripts/manifest/work/controllers.js.coffee.erb
app/assets/javascripts/manifest/work/filers.js.coffee.erb
app/assets/javascripts/manifest/work/forms.js.coffee.erb
app/assets/javascripts/manifest/work/items.js.coffee.erb
app/assets/javascripts/manifest/work/list_groups.js.coffee.erb
app/assets/javascripts/manifest/work/models.js.coffee.erb
app/assets/javascripts/manifest/work/profilers.js.coffee.erb
app/assets/stylesheets/test.css.scss
app/controllers/folders_controller.rb
app/controllers/original_pictures_controller.rb
app/controllers/pictures_controller.rb
app/controllers/resource_pictures_controller.rb
app/models/folder.rb
app/views/folders/_summary.html.erb [new file with mode: 0644]
app/views/folders/show.html.erb [new file with mode: 0644]
app/views/layouts/application.html.erb
app/views/original_pictures/_exist.html.erb
app/views/templates/r/form/_extend_form.html.erb
config/locales/pettanr.ja.yml
config/routes.rb
db/migrate/20140422233206_add_system_picture_id_on_resource_picture_data.rb
db/migrate/20140425021754_create_folders.rb [moved from db/migrate/20140415021754_create_folders.rb with 76% similarity]
lib/locmare/form.rb
public/images/folder.gif [new file with mode: 0644]
public/local_manifest.json
public/manifest.json

index 687dad9..3d9f3c3 100644 (file)
@@ -1,5 +1,33 @@
 #マニフェスト\r
 @controllers = {\r
+  folders: {\r
+    actions: {\r
+      root: {\r
+        type: 'show',\r
+      },\r
+      index: {\r
+        type: 'list',\r
+        args: {\r
+          list_name: 'public',\r
+        },\r
+      },\r
+      show: {\r
+        type: 'show',\r
+      },\r
+      count: {\r
+        type: 'count',\r
+        args: {\r
+          list_name: 'public',\r
+        },\r
+      },\r
+      new: {\r
+        type: 'new',\r
+      },\r
+      edit: {\r
+        type: 'edit',\r
+      },\r
+    },\r
+  },\r
   scrolls: {\r
     actions: {\r
       index: {\r
index 97818ff..2ac275d 100644 (file)
@@ -1,5 +1,24 @@
 #マニフェスト\r
 @filers = {\r
+  folder: {\r
+    symbol: {\r
+    },\r
+    caption: {\r
+      type: 'default',\r
+      args: {\r
+        face: {\r
+          type: 'method',\r
+          args: {\r
+            method_name: 'caption',\r
+          },\r
+        },\r
+      },\r
+    },\r
+    summary: {\r
+    },\r
+    edit: {\r
+    },\r
+  },\r
   scroll: {\r
     symbol: {\r
     },\r
index d436a49..161bb70 100644 (file)
@@ -1,5 +1,82 @@
 #マニフェスト\r
 @forms = {\r
+  folder: {\r
+    fields: {\r
+      name: {\r
+        tag: {\r
+          type: 'text',\r
+        },\r
+        row_break: true,\r
+      },\r
+      controller_name: {\r
+        tag: {\r
+          type: 'text',\r
+        },\r
+        row_break: true,\r
+      },\r
+      action_name: {\r
+        tag: {\r
+          type: 'text',\r
+        },\r
+        row_break: true,\r
+      },\r
+      category_id: {\r
+        tag: {\r
+          type: 'number',\r
+        },\r
+        row_break: true,\r
+      },\r
+      t: {\r
+        tag: {\r
+          type: 'number',\r
+        },\r
+        row_break: true,\r
+      },\r
+      parent_id: {\r
+        tag: {\r
+          type: 'number',\r
+        },\r
+        row_break: true,\r
+      },\r
+      lft: {\r
+        tag: {\r
+          type: 'number',\r
+        },\r
+        row_break: true,\r
+      },\r
+      rgt: {\r
+        tag: {\r
+          type: 'number',\r
+        },\r
+        row_break: true,\r
+      },\r
+      depth: {\r
+        tag: {\r
+          type: 'number',\r
+        },\r
+        row_break: true,\r
+      },\r
+      id: {\r
+        label: {\r
+          type: 'none',\r
+        },\r
+        tag: {\r
+          type: 'hidden',\r
+        },\r
+      },\r
+    },\r
+    field_names: [\r
+      'controller_name',\r
+      'action_name',\r
+      'category_id',\r
+      't',\r
+      'parent_id',\r
+      'lft',\r
+      'rgt',\r
+      'depth',\r
+      'id',\r
+    ]\r
+  },\r
   scroll: {\r
     fields: {\r
       title: {\r
index e4ba044..27b5811 100644 (file)
@@ -1,5 +1,7 @@
 #マニフェスト\r
 @items = {\r
+  folder: {\r
+  },\r
   scroll: {\r
     type: 'binder',\r
     args: {\r
index 6d116ab..a57ad71 100644 (file)
@@ -1,5 +1,12 @@
 #マニフェスト\r
 @list_groups = {\r
+  folder: {\r
+    lists: {\r
+      public: {\r
+        type: 'public',\r
+      },\r
+    },\r
+  },\r
   scroll: {\r
     lists: {\r
       public: {\r
index 4a197d3..58cdd7f 100644 (file)
@@ -1,5 +1,69 @@
 #マニフェスト\r
 @models = {\r
+  folder: {\r
+    associations: {\r
+      belongs_to: {\r
+      },\r
+      has_many: {\r
+      },\r
+    },\r
+    attributes: {\r
+      name: {\r
+        type: 'text',\r
+        rules : {\r
+          required: true,\r
+        }\r
+      },\r
+      controller_name: {\r
+        type: 'text',\r
+        rules : {\r
+        }\r
+      },\r
+      action_name: {\r
+        type: 'text',\r
+        rules : {\r
+        }\r
+      },\r
+      category_id: {\r
+        type: 'number',\r
+      },\r
+      t: {\r
+        type: 'number',\r
+        rules : {\r
+          required: true,\r
+          number: true,\r
+        },\r
+      },\r
+      parent_id: {\r
+        type: 'number',\r
+        rules : {\r
+          required: true,\r
+          number: true,\r
+        },\r
+      },\r
+      lft: {\r
+        type: 'number',\r
+        rules : {\r
+          required: true,\r
+          number: true,\r
+        },\r
+      },\r
+      rgt: {\r
+        type: 'number',\r
+        rules : {\r
+          required: true,\r
+          number: true,\r
+        },\r
+      },\r
+      depth: {\r
+        type: 'number',\r
+        rules : {\r
+          required: true,\r
+          number: true,\r
+        },\r
+      },\r
+    },\r
+  },\r
   scroll: {\r
     associations: {\r
       belongs_to: {\r
           number: true,\r
         }\r
       },\r
-      system_picture_id: {\r
-        type: 'number',\r
-        rules : {\r
-          required: true,\r
-          number: true,\r
-        }\r
-      },\r
       artist_name: {\r
         type: 'text',\r
         rules : {\r
           number: true,\r
         }\r
       },\r
-      system_picture_id: {\r
-        type: 'number',\r
-        rules : {\r
-          required: true,\r
-          number: true,\r
-        }\r
-      },\r
       artist_name: {\r
         type: 'text',\r
         rules : {\r
           number: true,\r
         }\r
       },\r
-      system_picture_id: {\r
-        type: 'number',\r
-        rules : {\r
-          required: true,\r
-          number: true,\r
-        }\r
-      },\r
       artist_name: {\r
         type: 'text',\r
         rules : {\r
           number: true,\r
         }\r
       },\r
-      system_picture_id: {\r
-        type: 'number',\r
-        rules : {\r
-          required: true,\r
-          number: true,\r
-        }\r
-      },\r
       artist_name: {\r
         type: 'text',\r
         rules : {\r
           number: true,\r
         }\r
       },\r
-      system_picture_id: {\r
-        type: 'number',\r
-        rules : {\r
-          required: true,\r
-          number: true,\r
-        }\r
-      },\r
       artist_name: {\r
         type: 'text',\r
         rules : {\r
index b047fd1..f4280e3 100644 (file)
@@ -1,5 +1,22 @@
 #マニフェスト\r
 @profilers = {\r
+  folder: {\r
+    columns: {\r
+    },\r
+    column_names: [\r
+      'name',\r
+      'controller_name',\r
+      'action_name',\r
+      'category_id',\r
+      't',\r
+      'parent_id',\r
+      'lft',\r
+      'rgt',\r
+      'depth',\r
+    ],\r
+    associations: {\r
+    }, \r
+  },\r
   scroll: {\r
     columns: {\r
       visible: {\r
         columns: {\r
         },\r
         column_names: [\r
-          'license_id', \r
-          'system_picture_id', \r
           'artist_name', \r
           'caption', \r
           'artist_url', \r
         columns: {\r
         },\r
         column_names: [\r
-          'license_id', \r
-          'system_picture_id', \r
           'artist_name', \r
           'caption', \r
           'sources', \r
         columns: {\r
         },\r
         column_names: [\r
-          'license_id', \r
-          'system_picture_id', \r
           'artist_name', \r
           'caption', \r
           'sources', \r
         columns: {\r
         },\r
         column_names: [\r
-          'license_id', \r
-          'system_picture_id', \r
           'artist_name', \r
           'caption', \r
           'sources', \r
         columns: {\r
         },\r
         column_names: [\r
-          'license_id', \r
-          'system_picture_id', \r
           'artist_name', \r
           'source_url', \r
           'note', \r
         columns: {\r
         },\r
         column_names: [\r
-          'license_id', \r
-          'system_picture_id', \r
           'source_url', \r
           'note', \r
         ],\r
index 9c1c215..b878e3f 100644 (file)
@@ -361,6 +361,10 @@ font-family : monospace;
   margin-left: 20px;
 }
 
+.extend-field {
+  margin-left: 20px;
+}
+
 .filer {
     list-style-type: none;
     margin: 0;
index 318f1c8..fd8411e 100644 (file)
@@ -2,7 +2,7 @@ class FoldersController < ApplicationController
   if Manifest.manifest.magic_numbers['run_mode'] == 0
     before_filter :authenticate_admin, :only => [:new, :create, :edit, :update, :destroy]
   else
-    before_filter :authenticate_reader, :only => [:index, :show]
+    before_filter :authenticate_reader, :only => [:root, :index, :show]
     before_filter :authenticate_admin, :only => [:new, :create, :edit, :update, :destroy]
   end
   
@@ -10,22 +10,43 @@ class FoldersController < ApplicationController
     Folder
   end
   
+  def root
+    set_model
+    @item = Folder.root
+    respond_to do |format|
+      show_html_format format
+      show_json_format format
+    end
+  end
+  
   def index
     filer_list
   end
   
   def show_html_format format
     format.html {
-      @folder = @item
+      @filer = Locmare::Filer.new self.class.model.item_name, @item.children, nil, :none, @operators
+      render :action => :show
+    }
+  end
+  
+  def show_json_format format
+    format.json {
+      @items = @item.children
+      render json: @items.to_json(self.class.model.list_json_opt)
     }
   end
   
   def show
     set_show
-    respond_to do |format|
-      show_html_format format
-      show_prof_format format
-      show_json_format format
+    if @item.category_id == 10
+      redirect_to @item.remote_name
+    else
+      respond_to do |format|
+        show_html_format format
+        show_prof_format format
+        show_json_format format
+      end
     end
   end
   
index 0c5801b..6daff6e 100644 (file)
@@ -14,6 +14,7 @@ class OriginalPicturesController < ApplicationController
 
   def show_html_format format
     format.html {
+      @item.boosts 'post'
       @original_picture = @item
       #ライセンス付与のために原画ライセンスグループ作成準備
       @original_picture_license_group  = OriginalPictureLicenseGroup.new :original_picture_id => @item.id
index b4c6d8e..6ebc5bf 100644 (file)
@@ -19,6 +19,7 @@ class PicturesController < ApplicationController
   
   def show_html_format format
     format.html {
+      @item.boosts 'post'
       @picture = @item
     }
   end
index 45201cb..abf4225 100644 (file)
@@ -32,6 +32,7 @@ class ResourcePicturesController < ApplicationController
   
   def show_html_format format
     format.html {
+      @item.boosts 'post'
       @resource_picture = @item
     }
   end
index c3c8673..b6546da 100644 (file)
-class Folder < Peta::Item
+class Folder < Peta::SystemResource
   acts_as_nested_set
   
+  validates :name, :presence => true, :uniqueness => true, :length => {:maximum => 200}
   validates :controller_name, :length => {:maximum => 200}
   validates :action_name, :length => {:maximum => 200}
   validates :category_id, :presence => true, :numericality => true
   validates :t, :presence => true, :numericality => true
   
+  #remove last dir name
+  def dir
+    r = name.split('/')
+    r.pop
+    r.join '/'
+  end
+  
+  def caption
+    name.gsub(/\/$/, '').split('/').last
+  end
+  
+  def remote_name
+    '/' + self.controller_name.to_s + '/' + self.action_name.to_s
+  end
+  
+  def self.add_local parent, name
+    key = parent.name + name + '/'
+    if i = self.find_by_name(key)
+    else
+      i = self.create :name => key, :category_id => 0, :t => 0
+    end
+    i.move_to_child_of parent
+    i
+  end
+  
+  def self.add_remote parent, name, controller_name = nil, action_name = nil
+    key = parent.name + name + '/'
+    if i = self.find_by_name(key)
+    else
+      i = self.create :name => key, :category_id => 10, :t => 0, 
+        :controller_name => (controller_name || name), 
+        :action_name => action_name
+    end
+    i.move_to_child_of parent
+    i
+  end
+  
   def self.generate
-    if self.root
+    if r = self.find_by_name('/')
     else
-      self.create :category_id => 0
+      r = self.create :name => '/', :category_id => 0, :t => 0
     end
+    #
+    # child of root
+    #
+    manga = self.add_local r, 'manga'
+    o = self.add_local r, 'people'
+    doc = self.add_local r, 'documents'
+    mydoc = self.add_local r, 'my documents'
+    sr = self.add_local r, 'system_resource'
+    
+    # child of /manga
+    manga_scroll = self.add_remote manga, 'scrolls'
+    manga_panel = self.add_remote manga, 'panels'
+    
+    # child of /people  (owner)
+    au = self.add_remote o, 'authors'
+    ar = self.add_remote o, 'artists'
+    
+    # child of /documents
+    docman = self.add_local doc, 'manga'
+    docpic = self.add_local doc, 'pictures'
+    docparts = self.add_local doc, 'parts'
+    docidx = self.add_local doc, 'index'
+    # child of /documents/manga
+    docman_scroll = self.add_remote docman, 'scrolls'
+    docman_panel = self.add_remote docman, 'panels'
+    # child of /documents/pictures
+    docpic_resource_picture = self.add_remote docpic, 'resource_pictures'
+    # child of /documents/parts
+    docparts_panel_picture = self.add_remote docparts, 'panel_pictures'
+    docparts_speech_balloon = self.add_remote docparts, 'speech_balloons'
+    docparts_balloon = self.add_remote docparts, 'balloons'
+    docparts_speech = self.add_remote docparts, 'speeches'
+    docparts_ground_picture = self.add_remote docparts, 'ground_pictures'
+    docparts_ground_color = self.add_remote docparts, 'ground_colors'
+    # child of /documents/index  (all public contents)
+    docidx_scroll = self.add_remote docidx, 'scrolls'
+    docidx_scroll_panel = self.add_remote docidx, 'scroll_panels'
+    docidx_comic = self.add_remote docidx, 'comics'
+    docidx_story = self.add_remote docidx, 'stories'
+    docidx_story_sheet = self.add_remote docidx, 'story_sheets'
+    docidx_sheet = self.add_remote docidx, 'sheets'
+    docidx_sheet_panel = self.add_remote docidx, 'sheet_panels'
+    docidx_panel = self.add_remote docidx, 'panels'
+    docidx_panel_picture = self.add_remote docidx, 'panel_pictures'
+    docidx_speech_balloon = self.add_remote docidx, 'speech_balloons'
+    docidx_balloon = self.add_remote docidx, 'balloons'
+    docidx_speech = self.add_remote docidx, 'speeches'
+    docidx_ground_picture = self.add_remote docidx, 'ground_pictures'
+    docidx_ground_color = self.add_remote docidx, 'ground_colors'
+    docidx_resource_picture = self.add_remote docidx, 'resource_pictures'
+    
+    # child of /my documents
+    mydocman = self.add_local mydoc, 'manga'
+    mydocpic = self.add_local mydoc, 'pictures'
+    mydocparts = self.add_local mydoc, 'parts'
+    mydocidx = self.add_local mydoc, 'index'
+    mydocedt = self.add_local mydoc, 'create'
+    # child of /my documents/manga
+    mydocman_scroll = self.add_remote mydocman, 'scrolls', 'home', 'scrolls'
+    mydocman_panel = self.add_remote mydocman, 'panels', 'home', 'panels'
+    # child of /my documents/pictures
+    mydocpic_original_picture = self.add_remote mydocpic, 'original_pictures'
+    mydocpic_resource_picture = self.add_remote mydocpic, 'resource_pictures', 'home', 'resource_pictures'
+    # child of /my documents/parts
+    mydocparts_panel_picture = self.add_remote mydocparts, 'panel_pictures'
+    mydocparts_speech_balloon = self.add_remote mydocparts, 'speech_balloons'
+    mydocparts_balloon = self.add_remote mydocparts, 'balloons'
+    mydocparts_speech = self.add_remote mydocparts, 'speeches'
+    mydocparts_ground_picture = self.add_remote mydocparts, 'ground_pictures'
+    mydocparts_ground_color = self.add_remote mydocparts, 'ground_colors'
+    # child of /my documents/index
+    mydocidx_scroll = self.add_remote mydocidx, 'scrolls'
+    mydocidx_scroll_panel = self.add_remote mydocidx, 'scroll_panels'
+    mydocidx_comic = self.add_remote mydocidx, 'comics'
+    mydocidx_story = self.add_remote mydocidx, 'stories'
+    mydocidx_story_sheet = self.add_remote mydocidx, 'story_sheets'
+    mydocidx_sheet = self.add_remote mydocidx, 'sheets'
+    mydocidx_sheet_panel = self.add_remote mydocidx, 'sheet_panels'
+    mydocidx_panel = self.add_remote mydocidx, 'panels'
+    mydocidx_panel_picture = self.add_remote mydocidx, 'panel_pictures'
+    mydocidx_speech_balloon = self.add_remote mydocidx, 'speech_balloons'
+    mydocidx_balloon = self.add_remote mydocidx, 'balloons'
+    mydocidx_speech = self.add_remote mydocidx, 'speeches'
+    mydocidx_ground_picture = self.add_remote mydocidx, 'ground_pictures'
+    mydocidx_ground_color = self.add_remote mydocidx, 'ground_colors'
+    mydocpic_original_picture = self.add_remote mydocpic, 'original_pictures'
+    mydocidx_resource_picture = self.add_remote mydocidx, 'resource_pictures'
+    # child of /my documents/create
+    mydocedt_scroll = self.add_remote mydocedt, 'new scroll', 'scrolls', 'new'
+    mydocedt_panel = self.add_remote mydocedt, 'new panel', 'panels', 'new'
+    mydocedt_original_picture = self.add_remote mydocedt, 'upload picture', 'original_pictures', 'new'
+    
+    # child of /system_resource
+    sbt = self.add_remote sr, 'speech_balloon_templates'
+    lg = self.add_remote sr, 'license_groups'
+    ls = self.add_remote sr, 'licenses'
+    sp = self.add_remote sr, 'system_pictures'
+    wf = self.add_remote sr, 'writing_formats'
     
   end
   
diff --git a/app/views/folders/_summary.html.erb b/app/views/folders/_summary.html.erb
new file mode 100644 (file)
index 0000000..1cb4fcb
--- /dev/null
@@ -0,0 +1,3 @@
+<div>
+  <%= item.category_id %>
+</div>
diff --git a/app/views/folders/show.html.erb b/app/views/folders/show.html.erb
new file mode 100644 (file)
index 0000000..e64377b
--- /dev/null
@@ -0,0 +1,11 @@
+<div>
+  <% @item.self_and_ancestors.each do |f| %>
+    <span>
+      <%= link_to_if f.child?, f.caption, folder_path(f) %>
+    </span>
+    <span>
+      <%= link_to_if f.root?, '/', folder_path(f) %>
+    </span>
+  <% end %>
+</div>
+<%= render @filer.template_name, :filer => @filer %>
index 64487ad..765f381 100644 (file)
 </table>\r
 </div>\r
 <div width="100%" style="background-color: #ddfadd; padding: 5px;">\r
+  <%= link_to t_m('Folder'), main_app.root_folders_path() %>\r
+  :\r
   <%= link_to t('tab.reader.title'), '/' %>\r
-  <%= link_to t_m('Comic'), main_app.comics_path %>\r
   <%= link_to t_m('Scroll'), main_app.scrolls_path %>\r
   <%= link_to t_m('Panel'), main_app.panels_path %>\r
   <%= link_to t_m('ResourcePicture'), main_app.resource_pictures_path %>\r
-  <%= link_to t_m('SpeechBalloonTemplate'), main_app.speech_balloon_templates_path %>\r
-   : \r
-  <%= link_to t_m('Author'), main_app.authors_path %>\r
-  <%= link_to t_m('Artist'), main_app.artists_path %>\r
-</div>\r
-<div width="100%" style="background-color: #fadddd; padding: 5px;">\r
+  :\r
   <%= link_to t('tab.creator.home'), '/home' %>\r
   <% if @operators.author %>\r
-    <%= link_to t('tab.creator.comic'), '/home/comics' %>\r
-    <%= link_to t('*'), main_app.new_comic_path %>\r
-    <%= link_to t('tab.creator.story'), '/home/stories' %>\r
-    <%= link_to t('tab.creator.sheet'), '/home/sheets' %>\r
-    <%= link_to t('*'), main_app.new_sheet_path %>\r
     <%= link_to t('tab.creator.scroll'), '/home/scrolls' %>\r
     <%= link_to t('*'), main_app.new_scroll_path %>\r
     <%= link_to t('tab.creator.panel'), '/home/panels' %>\r
@@ -79,9 +70,6 @@
     <%= link_to t('*'), main_app.new_original_picture_path %>\r
     <%= link_to t('tab.creator.resource_picture'), '/home/resource_pictures' %>\r
   <% end %>\r
-  <% if @operators.author and @operators.author.working? -%>\r
-    <%= link_to t('tab.creator..catch'), main_app.panel_path(@operators.author.working_panel) %>\r
-  <% end %>\r
 </div>\r
 <%= yield %>\r
 <div width="100%" style="background-color: #faddfa; padding: 5px;">\r
index 66df334..a4336a6 100644 (file)
@@ -10,7 +10,7 @@
     </tr>
     <% pictures.each do |picture| %>
       <tr>
-        <% if picture.showable? @author %>
+        <% if picture.showable? @operators %>
           <td>
             <%= link_to tag(:img, picture.tmb_opt_img_tag), picture %>
           </td>
index 2432c7d..2668e96 100644 (file)
@@ -1,4 +1,5 @@
 <%= fields_for(form.field_name, form.item) do |sf| %>
   <%= render 'system/error_explanation', :obj => form.item %>
+  <%= render form.label.template_name, :label => form.label %>
   <%= render form.fields_template_name, :form => form %>
 <% end %>
index 33ec79a..3e36d4c 100644 (file)
@@ -18,6 +18,7 @@ ja:
       user: ユーザ
       admin: 管理者
       demand_user: 借手
+      folder: フォルダ
       scroll: スクロール
       scroll_panel: スクコマ
       comic: コミック
@@ -78,6 +79,15 @@ ja:
         current_password: 現在のパスワード
         remember_me: 次回から自動でログイン
         authentication_token: 認証トークン
+      folder:
+        controller_name: コントローラ名
+        action_name: アクション名
+        category_id: 種別
+        t: 順序
+        parent_id: 親フォルダ
+        lft: ツリー左
+        rgt: ツリー右
+        depth: ツリー深さ
       scroll:
         title: タイトル
         description: あらすじ
@@ -481,7 +491,7 @@ ja:
           artist_name: 著作者名
           caption: 作品の名前
           source_url: 参考にした画像のURL
-          note: å\8f\82è\80\83ã\81«ã\81\97ã\81\9fç\94»å\83\8fã\81®URL
+          note: å\82\99è\80\83
       pettanr_unknown_v01_licenses/license:
           open: クローズドな利用
           commercial: 商用利用
@@ -501,7 +511,7 @@ ja:
           license_id: ライセンスID
           system_picture_id: マーク画像ID
           source_url: 参考にした画像のURL
-          note: å\8f\82è\80\83ã\81«ã\81\97ã\81\9fç\94»å\83\8fã\81®URL
+          note: å\82\99è\80\83
   picture_io:
     error: 画像保管庫との手続きで異常が発生しました。
   select_items:
@@ -677,6 +687,26 @@ ja:
     human_resources: 人物から
     system_resources: システムリソースから
     return: シンプル版に戻る
+  folders:
+    root:
+      title: フォルダ
+    index:
+      title: フォルダ一覧
+    show:
+      title: フォルダ詳細
+    new:
+      title: フォルダ作成
+    edit:
+      title: フォルダ変更
+    create:
+      title: フォルダ作成
+    update:
+      title: フォルダ変更
+    destroy:
+      title: フォルダ削除
+    submit:
+      new: フォルダ作成
+      edit: フォルダ変更
   scrolls:
     scroll_panels_count: '%{c}コマ'
     index:
index ad38cda..6d9c7f7 100644 (file)
@@ -12,6 +12,23 @@ Pettanr::Application.routes.draw do
     end
   end
   
+  resources :folders do
+    new do
+      get :new
+    end
+    collection do
+      get :root
+      get :index
+      get :show
+      get :count
+      post :create
+    end
+    member do
+      get :edit
+      put :update
+      delete :destroy
+    end
+  end
   resources :scrolls do
     new do
       get :new
index bac0710..3a7b73f 100644 (file)
@@ -8,6 +8,11 @@ class AddSystemPictureIdOnResourcePictureData < ActiveRecord::Migration
           s.delete 'resize'
           i.license_group_settings = s.to_json
         end
+        s = JSON.parse i.license_settings
+        if s['system_picture_id']
+          s.delete 'system_picture_id'
+          i.license_settings = s.to_json
+        end
         i.boosts 'post'
         i.save!
       end
@@ -20,6 +25,11 @@ class AddSystemPictureIdOnResourcePictureData < ActiveRecord::Migration
           s.delete 'resize'
           i.license_group_settings = s.to_json
         end
+        s = JSON.parse i.license_settings
+        if s['system_picture_id']
+          s.delete 'system_picture_id'
+          i.license_settings = s.to_json
+        end
         i.boosts 'post'
         i.save!
       end
similarity index 76%
rename from db/migrate/20140415021754_create_folders.rb
rename to db/migrate/20140425021754_create_folders.rb
index 265e379..772280a 100644 (file)
@@ -1,8 +1,10 @@
 class CreateFolders < ActiveRecord::Migration
   def change
+    drop_table :folders
     create_table :folders do |t|
-      t.string :controller_name, :null => false
-      t.string :action_name, :null => false
+      t.string :name, :null => false
+      t.string :controller_name
+      t.string :action_name
       t.integer :category_id, :null => false, :default => 0
       t.integer :t, :null => false, :default => 0
       t.integer :parent_id
index d2463d3..4f3bc9b 100644 (file)
@@ -4,7 +4,7 @@ require_dependency "locmare/form/extend_field"
 module Locmare
   class FormBase
     include FormModule
-    attr :form_name, :item, :mounted, :operators, :template_dir, 
+    attr :manifest, :form_name, :item, :mounted, :operators, :template_dir, 
       :fields
     def initialize form_name, item, mounted, operators
       @form_name = form_name
@@ -86,12 +86,15 @@ module Locmare
   end
   
   class ExtendForm < FormBase
-    attr :parent, :field_name
+    include FieldModule
+    attr :parent, :field_name, :field, :label
     
     def initialize parent, form_name, item, mounted, operators, field_name
       @parent = parent
       @field_name = field_name
       super form_name, item, mounted, operators
+      @field = Field.new @parent, @field_name, @parent.manifest.fields[@field_name]
+      @label = @field.label
       self.init_fields
     end
     
diff --git a/public/images/folder.gif b/public/images/folder.gif
new file mode 100644 (file)
index 0000000..8732441
Binary files /dev/null and b/public/images/folder.gif differ
index 3de3b5a..458e7e1 100644 (file)
@@ -1,5 +1,12 @@
 {\r
   "list_groups": {\r
+    "folder": {\r
+      "lists": {\r
+        "public": {\r
+          "type": "public"\r
+        }\r
+      }\r
+    },\r
     "scroll": {\r
       "lists": {\r
         "public": {\r
     }\r
   },\r
   "profilers": {\r
+    "folder": {\r
+      "columns": {},\r
+      "column_names": [\r
+        "name",\r
+        "controller_name",\r
+        "action_name",\r
+        "category_id",\r
+        "t",\r
+        "parent_id",\r
+        "lft",\r
+        "rgt",\r
+        "depth"\r
+      ],\r
+      "associations": {}\r
+    },\r
     "scroll": {\r
       "columns": {\r
         "visible": {\r
       },\r
       "column_names": [\r
         "original_picture_id",\r
-        "revision",\r
         "ext",\r
         "width",\r
         "height",\r
         "pettanr_creative_commons_v30_licenses_attribute": {\r
           "columns": {},\r
           "column_names": [\r
-            "license_id",\r
-            "system_picture_id",\r
             "artist_name",\r
             "caption",\r
             "artist_url",\r
         "pettanr_pettan_commons_v01_licenses_attribute": {\r
           "columns": {},\r
           "column_names": [\r
-            "license_id",\r
-            "system_picture_id",\r
             "artist_name",\r
             "caption",\r
             "sources"\r
         "pettanr_pettan_protected_v01_licenses_attribute": {\r
           "columns": {},\r
           "column_names": [\r
-            "license_id",\r
-            "system_picture_id",\r
             "artist_name",\r
             "caption",\r
             "sources"\r
         "pettanr_pettan_public_v01_licenses_attribute": {\r
           "columns": {},\r
           "column_names": [\r
-            "license_id",\r
-            "system_picture_id",\r
             "artist_name",\r
             "caption",\r
             "sources"\r
         "pettanr_public_domain_v01_licenses_attribute": {\r
           "columns": {},\r
           "column_names": [\r
-            "license_id",\r
-            "system_picture_id",\r
             "artist_name",\r
             "source_url",\r
             "note"\r
         "pettanr_unknown_v01_licenses_attribute": {\r
           "columns": {},\r
           "column_names": [\r
-            "license_id",\r
-            "system_picture_id",\r
             "source_url",\r
             "note"\r
           ]\r
     }\r
   },\r
   "filers": {\r
+    "folder": {\r
+      "symbol": {},\r
+      "caption": {\r
+        "type": "default",\r
+        "args": {\r
+          "face": {\r
+            "type": "method",\r
+            "args": {\r
+              "method_name": "caption"\r
+            }\r
+          }\r
+        }\r
+      },\r
+      "summary": {},\r
+      "edit": {}\r
+    },\r
     "scroll": {\r
       "symbol": {},\r
       "caption": {\r
     }\r
   },\r
   "forms": {\r
+    "folder": {\r
+      "fields": {\r
+        "name": {\r
+          "tag": {\r
+            "type": "text"\r
+          },\r
+          "row_break": true\r
+        },\r
+        "controller_name": {\r
+          "tag": {\r
+            "type": "text"\r
+          },\r
+          "row_break": true\r
+        },\r
+        "action_name": {\r
+          "tag": {\r
+            "type": "text"\r
+          },\r
+          "row_break": true\r
+        },\r
+        "category_id": {\r
+          "tag": {\r
+            "type": "number"\r
+          },\r
+          "row_break": true\r
+        },\r
+        "t": {\r
+          "tag": {\r
+            "type": "number"\r
+          },\r
+          "row_break": true\r
+        },\r
+        "parent_id": {\r
+          "tag": {\r
+            "type": "number"\r
+          },\r
+          "row_break": true\r
+        },\r
+        "lft": {\r
+          "tag": {\r
+            "type": "number"\r
+          },\r
+          "row_break": true\r
+        },\r
+        "rgt": {\r
+          "tag": {\r
+            "type": "number"\r
+          },\r
+          "row_break": true\r
+        },\r
+        "depth": {\r
+          "tag": {\r
+            "type": "number"\r
+          },\r
+          "row_break": true\r
+        },\r
+        "id": {\r
+          "label": {\r
+            "type": "none"\r
+          },\r
+          "tag": {\r
+            "type": "hidden"\r
+          }\r
+        }\r
+      },\r
+      "field_names": [\r
+        "controller_name",\r
+        "action_name",\r
+        "category_id",\r
+        "t",\r
+        "parent_id",\r
+        "lft",\r
+        "rgt",\r
+        "depth",\r
+        "id"\r
+      ]\r
+    },\r
     "scroll": {\r
       "fields": {\r
         "title": {\r
index 8081e9c..9a09805 100644 (file)
@@ -1,5 +1,6 @@
 {\r
   "items": {\r
+    "folder": {},\r
     "scroll": {\r
       "type": "binder",\r
       "args": {}\r
     "system_picture": {}\r
   },\r
   "controllers": {\r
+    "folders": {\r
+      "actions": {\r
+        "root": {\r
+          "type": "show"\r
+        },\r
+        "index": {\r
+          "type": "list",\r
+          "args": {\r
+            "list_name": "public"\r
+          }\r
+        },\r
+        "show": {\r
+          "type": "show"\r
+        },\r
+        "count": {\r
+          "type": "count",\r
+          "args": {\r
+            "list_name": "public"\r
+          }\r
+        },\r
+        "new": {\r
+          "type": "new"\r
+        },\r
+        "edit": {\r
+          "type": "edit"\r
+        }\r
+      }\r
+    },\r
     "scrolls": {\r
       "actions": {\r
         "index": {\r
     }\r
   },\r
   "models": {\r
+    "folder": {\r
+      "associations": {\r
+        "belongs_to": {},\r
+        "has_many": {}\r
+      },\r
+      "attributes": {\r
+        "name": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "controller_name": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "action_name": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "category_id": {\r
+          "type": "number"\r
+        },\r
+        "t": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "parent_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "lft": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "rgt": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "depth": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        }\r
+      }\r
+    },\r
     "scroll": {\r
       "associations": {\r
         "belongs_to": {\r
             "number": true\r
           }\r
         },\r
-        "revision": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
         "ext": {\r
           "type": "text",\r
           "rules": {\r
             "number": true\r
           }\r
         },\r
-        "system_picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
         "artist_name": {\r
           "type": "text",\r
           "rules": {\r
             "number": true\r
           }\r
         },\r
-        "system_picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
         "artist_name": {\r
           "type": "text",\r
           "rules": {\r
             "number": true\r
           }\r
         },\r
-        "system_picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
         "artist_name": {\r
           "type": "text",\r
           "rules": {\r
             "number": true\r
           }\r
         },\r
-        "system_picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
         "artist_name": {\r
           "type": "text",\r
           "rules": {\r
             "number": true\r
           }\r
         },\r
-        "system_picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
         "artist_name": {\r
           "type": "text",\r
           "rules": {\r