OSDN Git Service

Merge branch 'v06' of git.sourceforge.jp:/gitroot/pettanr/pettanr into v06
authoryasushiito <yas@pen-chan.jp>
Sun, 21 Dec 2014 23:44:25 +0000 (08:44 +0900)
committeryasushiito <yas@pen-chan.jp>
Sun, 21 Dec 2014 23:44:25 +0000 (08:44 +0900)
58 files changed:
app/assets/javascripts/controllers/artists.js.coffee
app/assets/javascripts/controllers/ground_pictures.js.coffee
app/assets/javascripts/locmare/filer/body/file_body/file_item/caption/default/face/base.js.coffee
app/assets/javascripts/locmare/filer/body/file_body/file_item/caption/default/face/column.js.coffee
app/assets/javascripts/locmare/filer/body/file_body/file_item/caption/default/face/method.js.coffee
app/assets/javascripts/locmare/form/field/tag/select.js.coffee
app/assets/javascripts/locmare/profiler/column/base.js.coffee
app/assets/javascripts/locmare/profiler/column/extend/extend_column.js.coffee
app/assets/javascripts/manifest/model/attribute/source/base.js.coffee
app/assets/javascripts/manifest/model/attribute/source/magic_number.js.coffee
app/assets/javascripts/manifest/model/attribute/source/model.js.coffee
app/assets/javascripts/models/comic_story.js.coffee
app/assets/javascripts/models/folder.js.coffee
app/assets/javascripts/models/ground_picture.js.coffee
app/assets/javascripts/models/license.js.coffee
app/assets/javascripts/models/original_picture.js.coffee
app/assets/javascripts/models/panel_picture.js.coffee
app/assets/javascripts/models/speech.js.coffee
app/assets/javascripts/models/speech_balloon.js.coffee
app/assets/javascripts/pettanr.js.coffee
app/assets/javascripts/views/balloons/summary.js.coffee
app/assets/javascripts/views/common.js.coffee
app/assets/javascripts/views/ground_colors/element_face.js.coffee
app/assets/javascripts/views/ground_colors/summary.js.coffee
app/assets/javascripts/views/ground_pictures/element_face.js.coffee
app/assets/javascripts/views/licenses/summary.js.coffee
app/assets/javascripts/views/panel_pictures/element_face.js.coffee
app/assets/javascripts/views/show.js.coffee
app/assets/javascripts/views/speech_balloons/element_face.js.coffee
app/assets/javascripts/views/speech_balloons/summary.js.coffee
app/assets/javascripts/views/speeches/summary.js.coffee
app/assets/javascripts/views/top/account.js.coffee
app/assets/javascripts/work/controllers.js.coffee.erb
app/assets/javascripts/work/filers.js.coffee.erb
app/assets/stylesheets/test.css.scss
app/controllers/comic_stories_controller.rb
app/controllers/comics_controller.rb
app/controllers/scrolls_controller.rb
app/controllers/stories_controller.rb
app/controllers/story_sheets_controller.rb
app/models/folder.rb
app/models/original_picture.rb
app/models/panel_picture.rb
app/models/speech_balloon.rb
app/views/comics/show.html.erb
app/views/scrolls/show.html.erb
app/views/stories/play.html.erb
app/views/stories/show.html.erb
app/views/templates/r/form/tag/_select.html.erb
app/views/templates/r/profiler/column_note/_default.html.erb
lib/locmare/form/field/tag/select.rb
lib/locmare/list_group/list/base.rb
lib/locmare/profiler/column/source.rb
lib/manifest/model/attribute/source/base.rb
lib/manifest/model/attribute/source/magic_number.rb
lib/manifest/model/attribute/source/model.rb
public/local_manifest.json
public/manifest.json

index bee94df..999793b 100644 (file)
@@ -6,7 +6,7 @@ class Pettanr.ArtistsController extends Pettanr.AppController
   \r
   show_html: () -> \r
     @item.fetch({cache: true}).done =>\r
-      @redraw_title(@params, @item.get('title'))\r
+      @redraw_title(@params, @item.get('name'))\r
       view = new Pettanr.Views.Artist.Show({\r
         el: "#pettanr",\r
         item: @item,\r
index 41e10aa..f357d62 100644 (file)
@@ -15,7 +15,7 @@ class Pettanr.GroundPicturesController extends Pettanr.AppController
   show_html: () -> \r
     @redraw_title(@params)\r
     @item.fetch({cache: true}).done =>\r
-      @redraw_title(@params, @item.get('caption'))\r
+      @redraw_title(@params, @item.eget('caption'))\r
       view = new Pettanr.Views.GroundPicture.Show({\r
         el: "#pettanr",\r
         item: @item,\r
index d7d0f50..7c555c9 100644 (file)
@@ -15,6 +15,11 @@ class Locmare.FilerModule.BodyModule.FileBodyModule.FileItemModule.CaptionItemCo
     this\r
   \r
   render: () ->\r
+    if Pettanr.is_blank(@caption())\r
+      empty = new Pettanr.Views.Common.EmptyCaption()\r
+      this.$el.html(empty.render().el)\r
+    else\r
+      this.$el.html(@caption())\r
     this\r
   \r
   filer: () ->\r
index 9e98f82..a6f815c 100644 (file)
@@ -4,13 +4,9 @@ class Locmare.FilerModule.BodyModule.FileBodyModule.FileItemModule.CaptionItemCo
     super(options)\r
     @render()\r
   \r
-  render: () ->\r
-    if Pettanr.is_blank(@face())\r
-      this.$el.html('empty')\r
-    else\r
-      this.$el.html(@face())\r
-    this\r
-  \r
   face: () ->\r
-    @item.get(@my_manifest.column_name)\r
+    @item.escape(@my_manifest.column_name)\r
+  \r
+  caption: () ->\r
+    @face()\r
   \r
index 612544d..6277d79 100644 (file)
@@ -5,10 +5,9 @@ class Locmare.FilerModule.BodyModule.FileBodyModule.FileItemModule.CaptionItemCo
     if @item[@method_name()]\r
       @item[@method_name()]()\r
   \r
-  render: () ->\r
-    this.$el.html(@item.caption_text)\r
-    this\r
-  \r
   method_name: () ->\r
     @my_manifest.method_name\r
   \r
+  caption: () ->\r
+    @item.caption_text\r
+  \r
index a88d904..1e45f7d 100644 (file)
@@ -9,7 +9,11 @@ class Locmare.FormModule.FieldModule.TagModule.SelectTag extends Locmare.FormMod
     _.extend(@attr, @options())\r
     this.$el.attr(@attr)\r
     @select_values((members) =>\r
-      _.each members, (member) =>\r
+      values = if @model_attribute_manifest().source.translate()\r
+        Pettanr.AppHelper.t_select_items(members)\r
+      else\r
+        members\r
+      _.each values, (member) =>\r
         selected = if @is_selected(member)\r
           ' selected'\r
         else\r
@@ -58,7 +62,6 @@ class Locmare.FormModule.FieldModule.TagModule.SelectTag extends Locmare.FormMod
         cb(members)\r
       )\r
     else\r
-      s = Manifest.manifest().system_resources.select_items[@select_item_name()]\r
-      members = Pettanr.AppHelper.t_select_items(s)\r
+      members = Manifest.manifest().system_resources.select_items[@select_item_name()]\r
       cb(members)\r
   \r
index cb9802e..4157846 100644 (file)
@@ -56,7 +56,7 @@ class Locmare.ProfilerModule.ColumnModule.Value extends Backbone.View
     this\r
   \r
   value: () ->\r
-    @column.item().get(@column.column_name)\r
+    @column.item().escape(@column.column_name)\r
   \r
 class Locmare.ProfilerModule.ColumnModule.DateValue extends Backbone.View\r
   tagName: 'span'\r
@@ -83,7 +83,7 @@ class Locmare.ProfilerModule.ColumnModule.JsonValue extends Backbone.View
     this\r
   \r
   value: () ->\r
-    JSON.stringify(JSON.parse(@column.item().get(@column.column_name)), 2)\r
+    JSON.stringify(JSON.parse(@column.item().escape(@column.column_name)), 2)\r
   \r
 class Locmare.ProfilerModule.ColumnModule.ExtendValue extends Backbone.View\r
   tagName: 'div'\r
index 4746873..1ee1591 100644 (file)
@@ -49,7 +49,7 @@ class Locmare.ProfilerModule.ColumnModule.ExtendModule.Value extends Backbone.Vi
     this\r
   \r
   value: () ->\r
-    @extend_item().get(@extend_column.extend_column_name)\r
+    @extend_item().escape(@extend_column.extend_column_name)\r
   \r
   extend_item: () ->\r
     @column.extend_item()\r
index f063d5e..d7bd3f4 100644 (file)
@@ -6,6 +6,9 @@ class Manifest.ModelModule.AttributeModule.SourceModule.Base extends ManifestBas
   init: () ->\r
     super()\r
   \r
+  translate: () ->\r
+    @has_translation > 0\r
+  \r
   item_name: () ->\r
     @parent.item_name()\r
 \r
index 23a2beb..b45b03b 100644 (file)
@@ -3,8 +3,10 @@ class Manifest.ModelModule.AttributeModule.SourceModule.MagicNumberSource extend
   set_default: () ->\r
     super()\r
     ManifestBase.alert_undefined_message 'select_item_name', @module_message if not @args['select_item_name']\r
+    @args['has_translation'] ||= 1\r
     \r
   init: () ->\r
     super()\r
+    @has_translation = @args['has_translation']\r
     @select_item_name = @args['select_item_name']\r
   \r
index 0f4dd21..86edd92 100644 (file)
@@ -2,6 +2,7 @@ class Manifest.ModelModule.AttributeModule.SourceModule.ModelSource extends Mani
   \r
   set_default: () ->\r
     super()\r
+    @args['has_translation'] ||= 0\r
     @args['resource_item_name'] ||= (@parent.name.replace('_id', ''))\r
     @args['resource_action_name'] ||= 'index'\r
     @args['select_item_name'] ||= @item_name() + '_' + @parent.name.replace('_id', '') + '_items'\r
@@ -9,6 +10,7 @@ class Manifest.ModelModule.AttributeModule.SourceModule.ModelSource extends Mani
     \r
   init: () ->\r
     super()\r
+    @has_translation = @args['has_translation']\r
     @resource_item_name = @args['resource_item_name']\r
     @resource_action_name = @args['resource_action_name']\r
     @select_item_name = @args['select_item_name']\r
index c8cfc2b..f45e3a3 100644 (file)
@@ -27,7 +27,7 @@ class Pettanr.ComicStory extends Peta.Leaf
     I18n.t('comic_stories.show.t', {t: @disp_t()})\r
   \r
   title: () ->\r
-    @disp_t_by_text() + ':' + @story().get('title')\r
+    @disp_t_by_text() + ':' + @story().escape('title')\r
   \r
   initialize: () ->\r
     if @id\r
index dafdf52..5e8e8b3 100644 (file)
@@ -16,7 +16,7 @@ class Pettanr.Folder extends Peta.Owner
     @get('name').replace(/\/$/, '').split('/').pop()\r
   \r
   filer_caption: () ->\r
-    @caption_text = @caption()\r
+    @caption_text = _.escape(@caption())\r
     @trigger('ready:caption')\r
   \r
   is_remote: () ->\r
index 0682e06..ec7bf15 100644 (file)
@@ -30,7 +30,7 @@ class Pettanr.GroundPicture extends Peta.Element
     new Pettanr.Image.SymbolPicture({\r
       attr: {\r
         src: picture.r_url(), \r
-        alt: @get('caption')\r
+        alt: @escape('caption')\r
       },\r
       picture: picture\r
     })\r
index 466b841..7c4799f 100644 (file)
@@ -26,7 +26,7 @@ class Pettanr.License extends Peta.SystemResource
   caption_with_group: () ->\r
     i = @license_group()\r
     i.fetch({cache: true}).done =>\r
-      @caption_text = i.get('caption') + '/' + @get('caption')\r
+      @caption_text = i.escape('caption') + '/' + @escape('caption')\r
       @trigger('ready:caption')\r
   \r
   initialize: () ->\r
index 6eafde9..77015a3 100644 (file)
@@ -38,11 +38,21 @@ class Pettanr.OriginalPicture extends Peta.Content
       picture: this\r
     })\r
   \r
-  symbol_option: (cb) ->\r
+  symbol_option: () ->\r
     @fetch({cache: true}).done =>\r
       @symbol_picture = @tmb_opt_img_tag()\r
       @trigger('ready:symbol')\r
   \r
+  filer_caption: () ->\r
+    history = @history()\r
+    history.fetch({cache: true}).done =>\r
+      @caption_text = if _.isEmpty(history.models)\r
+        'unpublished'\r
+      else\r
+        head = _.first(history.models)\r
+        Pettanr.to_s(head.get('revision'))\r
+      @trigger('ready:caption')\r
+  \r
   revision: () ->\r
     new Pettanr.OriginalPicture.Head({original_picture: this})\r
   \r
@@ -82,8 +92,9 @@ class Pettanr.OriginalPicture.History extends Backbone.Collection
   url: '/original_pictures/'\r
   \r
   initialize: (options) ->\r
+    @original_picture = options.original_picture\r
     @model = Pettanr.Picture\r
-    @url = @url + options.id + '/history'\r
+    @url = @url + @original_picture.get('id') + '/history'\r
   \r
 class Pettanr.OriginalPicture.Head extends Backbone.View\r
   tagName: 'span'\r
index 22465d2..7544193 100644 (file)
@@ -35,7 +35,11 @@ class Pettanr.PanelPicture extends Peta.Element
     res\r
   \r
   filename: (picture) ->\r
-    picture.filename() + '?subdir=' + @flip()\r
+    q = if _.isEmpty(@flip())\r
+      ''\r
+    else\r
+      '?subdir=' + @flip()\r
+    picture.filename() + q\r
   \r
   r_url: (picture) ->\r
     '/pictures/' + @filename(picture)\r
@@ -44,7 +48,7 @@ class Pettanr.PanelPicture extends Peta.Element
     new Pettanr.Image.SymbolPicture({\r
       attr: {\r
         src: picture.r_url(), \r
-        alt: @get('caption')\r
+        alt: @escape('caption')\r
       },\r
       picture: picture\r
     })\r
index 97e5a62..42e53d7 100644 (file)
@@ -36,7 +36,7 @@ class Pettanr.Speech extends Peta.Element
   \r
   scenario: () ->\r
     @boosts('read')\r
-    @render(@get('content'))\r
+    @render(@escape('content'))\r
     \r
   \r
   initialize: () ->\r
index a330668..341fc01 100644 (file)
@@ -30,6 +30,11 @@ class Pettanr.SpeechBalloon extends Peta.Element
         @symbol_picture = sp.tmb_opt_img_tag()\r
         @trigger('ready:symbol')\r
   \r
+  filer_caption: () ->\r
+    @fetch({cache: true}).done =>\r
+      @caption_text = @escape('caption')\r
+      @trigger('ready:caption')\r
+  \r
   plain_scenario: () ->\r
     @get('caption')\r
   \r
index f267f65..6685799 100644 (file)
@@ -198,7 +198,7 @@ class Pettanr
     \r
     redraw_title: (params, str = null) ->\r
       t = str || I18n.t(params['controller'] + '.' + params['action'] + '.title')\r
-      site_caption = Manifest.manifest().magic_numbers.profile.users.caption\r
+      site_caption = _.escape(Manifest.manifest().magic_numbers.profile.users.caption)\r
       $(document).attr('title', t + ' - ' + site_caption)\r
     \r
   #>> https://gist.github.com/davidjbeveridge/3813724\r
index 087fff9..f594975 100644 (file)
@@ -8,13 +8,17 @@ class Pettanr.Views.Balloon.Summary extends Pettanr.Views.Common.Summary
   load: () ->\r
     @speech_balloon = @item.speech_balloon()\r
     @speech_balloon.fetch({cache: true}).done =>\r
-      @panel = @speech_balloon.panel()\r
-      @panel.fetch({cache: true}).done =>\r
-        @panel_icon = new Pettanr.Views.Common.Icon({item: @panel, half: true})\r
-        @trigger('ready')\r
+      panel = @speech_balloon.panel()\r
+      panel.fetch({cache: true}).done =>\r
+        @panel_icon = new Pettanr.Views.Common.Icon({item: panel, half: true})\r
+        author = panel.author()\r
+        author.fetch({cache: true}).done =>\r
+          @author_icon_with_caption = author.icon_with_caption_view(true, 'name', 12)\r
+          @trigger('ready')\r
   \r
   render: () ->\r
     this.$el.html('')\r
     this.$el.append(@panel_icon.render().el)\r
+    this.$el.append(@author_icon_with_caption.render().el)\r
     this\r
   \r
index e958bde..6e6b1cb 100644 (file)
@@ -17,6 +17,14 @@ class Pettanr.Views.Common.LoadIcon extends Tag.Img
     }\r
     super(opt)\r
 \r
+class Pettanr.Views.Common.EmptyCaption extends Backbone.View\r
+  tagName: 'div'\r
+  className: 'empty'\r
+  \r
+  render: () ->\r
+    this.$el.html('empty')\r
+    this\r
+  \r
 class Pettanr.Views.Common.Icon extends Backbone.View\r
   tagName: 'span'\r
   \r
@@ -48,7 +56,7 @@ class Pettanr.Views.Common.Caption extends Backbone.View
     @linked_name = new Tag.A({\r
       attr: {href: '/' + @url}, \r
       handler_name: @url,\r
-      content: @name\r
+      content: _.escape(@name)\r
     })\r
   \r
   render: () ->\r
index 4761565..ee9f75d 100644 (file)
@@ -10,7 +10,10 @@ class Pettanr.Views.GroundColor.ElementFace extends Backbone.View
     symbol = new Pettanr.Views.GroundColor.Symbol({item: @element, class_name: 'elements-tab-face-icon'})\r
     this.$el.append(symbol.render().el)\r
     name = Pettanr.truncate(@element.get('caption'), 15)\r
-    caption = new Tag.Span({class_name: 'elements-tab-face-caption', content: name})\r
+    caption = new Tag.Span({\r
+      class_name: 'elements-tab-face-caption', \r
+      content: _.escape(name)\r
+    })\r
     this.$el.append(caption.render().el)\r
     fe = new Tag.Div({class_name: 'elements-tab-face-end'})\r
     this.$el.append(fe.render().el)\r
index e0632e2..faee4dd 100644 (file)
@@ -9,10 +9,14 @@ class Pettanr.Views.GroundColor.Summary extends Pettanr.Views.Common.Summary
     panel = @item.panel()\r
     panel.fetch({cache: true}).done =>\r
       @panel_icon = new Pettanr.Views.Common.Icon({item: panel, half: true})\r
-      @trigger('ready')\r
+      author = panel.author()\r
+      author.fetch({cache: true}).done =>\r
+        @author_icon_with_caption = author.icon_with_caption_view(true, 'name', 12)\r
+        @trigger('ready')\r
   \r
   render: () ->\r
     this.$el.html('')\r
     this.$el.append(@panel_icon.render().el)\r
+    this.$el.append(@author_icon_with_caption.render().el)\r
     this\r
   \r
index 43870b0..42a4b56 100644 (file)
@@ -24,7 +24,10 @@ class Pettanr.Views.GroundPicture.ElementFace extends Backbone.View
     symbol = new Pettanr.Views.GroundPicture.ElementSymbol({element: @element})\r
     this.$el.append(symbol.render().el)\r
     name = Pettanr.truncate(@element.get('caption'), 15)\r
-    caption = new Tag.Span({class_name: 'elements-tab-face-caption', content: name})\r
+    caption = new Tag.Span({\r
+      class_name: 'elements-tab-face-caption', \r
+      content: _.escape(name)\r
+    })\r
     this.$el.append(caption.render().el)\r
     fe = new Tag.Div({class_name: 'elements-tab-face-end'})\r
     this.$el.append(fe.render().el)\r
index 09c718a..c3b42f5 100644 (file)
@@ -1,6 +1,7 @@
 class Pettanr.Views.License.Summary extends Pettanr.Views.Common.Summary\r
   \r
   initialize: (options) ->\r
+    super(options)\r
     @item = options.item\r
     @load()\r
   \r
index 88368a7..b6edaf6 100644 (file)
@@ -23,8 +23,15 @@ class Pettanr.Views.PanelPicture.ElementFace extends Backbone.View
     this.$el.html('')\r
     symbol = new Pettanr.Views.PanelPicture.ElementSymbol({element: @element})\r
     this.$el.append(symbol.render().el)\r
-    name = Pettanr.truncate(@element.get('caption'), 15)\r
-    caption = new Tag.Span({class_name: 'elements-tab-face-caption', content: name})\r
+    if name = @element.get('caption')\r
+      content = _.escape(Pettanr.truncate(@element.get('caption'), 15))\r
+    else\r
+      empty = new Pettanr.Views.Common.EmptyCaption()\r
+      content = empty.render().el\r
+    caption = new Tag.Span({\r
+      class_name: 'elements-tab-face-caption', \r
+      content: content\r
+    })\r
     this.$el.append(caption.render().el)\r
     fe = new Tag.Div({class_name: 'elements-tab-face-end'})\r
     this.$el.append(fe.render().el)\r
index e7425ff..3035497 100644 (file)
@@ -22,7 +22,7 @@ class Pettanr.Views.Show.Header extends Backbone.View
       attr: {href: '/' + @caption_url},\r
       handler_name: @caption_url,\r
       class_name: 'caption',\r
-      content: @title\r
+      content: _.escape(@title)\r
     })\r
     @prof = new Pettanr.Image.SymbolImg({attr: {src: '/images/prof.gif'}, half: true})\r
     @prof_button = new Tag.A({\r
@@ -46,7 +46,7 @@ class Pettanr.Views.Show.HeaderAuthor extends Backbone.View
     @item = options.item\r
     @author = @item.author()\r
     @author.fetch({cache: true}).done =>\r
-      name = @author.get('name')\r
+      name = @author.escape('name')\r
       author_url = Pettanr.url(@author.table_name(), 'show', {id: @author.get('id')})\r
       @linked_author =  new Tag.A({\r
         attr: {href: '/' + author_url}, \r
index 8c0bc0f..d5135e4 100644 (file)
@@ -27,7 +27,10 @@ class Pettanr.Views.SpeechBalloon.ElementFace extends Backbone.View
     this.$el.append(symbol.render().el)\r
     speech = @element.get('speech')\r
     name = Pettanr.truncate(speech.get('content'), 15)\r
-    caption = new Tag.Span({class_name: 'elements-tab-face-caption', content: name})\r
+    caption = new Tag.Span({\r
+      class_name: 'elements-tab-face-caption', \r
+      content: _.escape(name)\r
+    })\r
     this.$el.append(caption.render().el)\r
     rb = new Tag.RowBreak()\r
     this.$el.append(rb.render().el)\r
index 3891082..f23d763 100644 (file)
@@ -1,6 +1,7 @@
 class Pettanr.Views.SpeechBalloon.Summary extends Pettanr.Views.Common.Summary\r
   \r
   initialize: (options) ->\r
+    super(options)\r
     @item = options.item\r
     @load()\r
   \r
@@ -8,10 +9,14 @@ class Pettanr.Views.SpeechBalloon.Summary extends Pettanr.Views.Common.Summary
     panel = @item.panel()\r
     panel.fetch({cache: true}).done =>\r
       @panel_icon = new Pettanr.Views.Common.Icon({item: panel, half: true})\r
-      @trigger('ready')\r
+      author = panel.author()\r
+      author.fetch({cache: true}).done =>\r
+        @author_icon_with_caption = author.icon_with_caption_view(true, 'name', 12)\r
+        @trigger('ready')\r
   \r
   render: () ->\r
     this.$el.html('')\r
     this.$el.append(@panel_icon.render().el)\r
+    this.$el.append(@author_icon_with_caption.render().el)\r
     this\r
   \r
index 8c1eccd..d35d201 100644 (file)
@@ -11,10 +11,14 @@ class Pettanr.Views.Speech.Summary extends Pettanr.Views.Common.Summary
       panel = @speech_balloon.panel()\r
       panel.fetch({cache: true}).done =>\r
         @panel_icon = new Pettanr.Views.Common.Icon({item: panel, half: true})\r
-        @trigger('ready')\r
+        author = panel.author()\r
+        author.fetch({cache: true}).done =>\r
+          @author_icon_with_caption = author.icon_with_caption_view(true, 'name', 12)\r
+          @trigger('ready')\r
   \r
   render: () ->\r
     this.$el.html('')\r
     this.$el.append(@panel_icon.render().el)\r
+    this.$el.append(@author_icon_with_caption.render().el)\r
     this\r
   \r
index 5bd7fb8..f290274 100644 (file)
@@ -12,7 +12,11 @@ class Pettanr.Views.Top.Account extends Backbone.View
     if ar = @operators.artist\r
       artist = ar.icon_with_caption_view()\r
       this.$el.append(artist.render().el)\r
-    sign_out = new Tag.A({attr: {href: '/'}, class_name: 'sign_out', content: 'sign out'})\r
+    sign_out = new Tag.A({\r
+      attr: {href: '/'}, \r
+      class_name: 'sign_out', \r
+      content: 'sign out'\r
+    })\r
     this.$el.append(sign_out.render().el)\r
     @delegateEvents({'click .sign_out': 'sign_out'})\r
     this\r
index 8f03709..da76340 100644 (file)
         type: 'list',\r
         args: {\r
           alias: 'comic_stories.by_comic',\r
+          max_page_size: -1,\r
           order: 't',\r
           direction: 1\r
         },\r
         type: 'list',\r
         args: {\r
           alias: 'story_sheets.by_story',\r
+          max_page_size: -1,\r
           order: 't',\r
           direction: 1\r
         },\r
index 1556523..68b738e 100644 (file)
         face: {\r
           type: 'method',\r
           args: {\r
-            method_name: 'plain_scenario',\r
+            method_name: 'filer_caption',\r
           },\r
         },\r
         link: {\r
         face: {\r
           type: 'method',\r
           args: {\r
-            method_name: 'revision',\r
+            method_name: 'filer_caption',\r
           },\r
         },\r
         link: {\r
index 768a1ee..4231d73 100644 (file)
@@ -23,6 +23,10 @@ div.md5 {
   text-align: left;
 }
 
+div.empty {
+  color:   #aaaaaa;
+}
+
 input.error {
   border-width: 3px;
   border-style:  solid;
index fd777ec..839b469 100644 (file)
@@ -47,7 +47,7 @@ class ComicStoriesController < ApplicationController
   end
   
   def create
-    @my_model_class = self.class.model
+    set_model
     @item = @my_model_class.new
     @item.supply_default
     @item.attributes = params[@item.item_name]
@@ -55,7 +55,7 @@ class ComicStoriesController < ApplicationController
     @binder = @my_model_class.binder_model.edit(@item.binder_id, @operators) if @item.binder_id
     @panel = @my_model_class.destination_model.show(@item.destination_id, @operators) if @item.destination_id
     
-    leaf_render_create play_scroll_path(@binder)
+    leaf_render_create play_comic_path(@binder)
   end
   
   def update
@@ -69,7 +69,7 @@ class ComicStoriesController < ApplicationController
     # swapable hidden panel
     #@panel = @my_model_class.destination_model.show(@item.destination_id, @operators) if @item.destination_id
     
-    leaf_render_update ot, play_scroll_path(@binder)
+    leaf_render_update ot, play_comic_path(@binder)
   end
   
   def destroy
index f5e04ed..2b6005c 100644 (file)
@@ -24,11 +24,10 @@ class ComicsController < ApplicationController
   
   def show_html_format format
     format.html {
-      play_list = Locmare::ListGroup.list(
+      @play_list = Locmare::ListGroup.list(
         'comic_stories', 'by_comic', @operators, 
-        {:id => @item.id, :my_play => @item.own?(@operators)}
+        {:id => @item.id, :page_size => -1}  # set no limit options
       )
-      @play_count = play_list.count(@operators)
     }
   end
   
@@ -45,9 +44,9 @@ class ComicsController < ApplicationController
   
   def play
     set_play
+    @list.options.merge!({'page_size' => -1})    # no limit no pager
+    @list.reset
     play_list
-    # no limit
-    # no pager
     respond_to do |format|
       format.html {
         if @item.own? @operators
index 323f224..f95ade4 100644 (file)
@@ -24,11 +24,10 @@ class ScrollsController < ApplicationController
   
   def show_html_format format
     format.html {
-      play_list = Locmare::ListGroup.list(
+      @play_list = Locmare::ListGroup.list(
         'scroll_panels', 'by_scroll', @operators, 
-        {:id => @item.id, :my_play => @item.own?(@operators)}
+        {:id => @item.id, :page_size => -1}  # set no limit options}
       )
-      @play_count = play_list.count(@operators)
     }
   end
   
index becb8d1..22a4b19 100644 (file)
@@ -28,11 +28,10 @@ class StoriesController < ApplicationController
   
   def show_html_format format
     format.html {
-      play_list = Locmare::ListGroup.list(
+      @play_list = Locmare::ListGroup.list(
         'story_sheets', 'by_story', @operators, 
-        {:id => @item.id, :my_play => @item.own?(@operators)}
+        {:id => @item.id, :page_size => -1}  # set no limit options
       )
-      @play_count = play_list.count(@operators)
     }
   end
   
@@ -46,11 +45,13 @@ class StoriesController < ApplicationController
   end
   
   def play
+    set_play
+    @list.options.merge!({'per_page' => 1})    # show one sheet
+    @list.reset
     play_list
-    # no limit
-    # no pager
     respond_to do |format|
       format.html {
+        @pager = @list.page_status.pager
         if @item.own? @operators
           @new_sheet_items = assist_items('home', 'sheets')
         end
index 748f195..ac40f9b 100644 (file)
@@ -51,7 +51,7 @@ class StorySheetsController < ApplicationController
     @binder = @my_model_class.binder_model.edit(@item.binder_id, @operators) if @item.binder_id
     @panel = @my_model_class.destination_model.show(@item.destination_id, @operators) if @item.destination_id
     
-    leaf_render_create play_scroll_path(@binder)
+    leaf_render_create play_story_path(@binder)
   end
   
   def update
@@ -65,7 +65,7 @@ class StorySheetsController < ApplicationController
     # swapable hidden panel
     #@panel = @my_model_class.destination_model.show(@item.destination_id, @operators) if @item.destination_id
     
-    leaf_render_update ot, play_scroll_path(@binder)
+    leaf_render_update ot, play_story_path(@binder)
   end
   
   def destroy
index 7b13631..e004a57 100644 (file)
@@ -18,6 +18,10 @@ class Folder < Peta::SystemResource
     name.gsub(/\/$/, '').split('/').last
   end
   
+  def filer_caption
+    self.caption
+  end
+  
   def remote_name
     '/' + self.controller_name.to_s + '/' + self.action_name.to_s
   end
index 759da1d..20ec95b 100644 (file)
@@ -50,6 +50,10 @@ class OriginalPicture < Peta::Content
     self.tmb_opt_img_tag
   end
   
+  def filer_caption
+    self.revision
+  end
+  
   def revision
     head = self.history.first
     head ? head.revision : 'unpublished'
index 1c9ce40..80cf323 100644 (file)
@@ -67,7 +67,8 @@ class PanelPicture < Peta::Element
   end
   
   def filename
-    self.picture.filename + '?subdir=' + self.flip
+    q = self.flip.empty? ? '' : '?subdir=' + self.flip
+    self.picture.filename + q
   end
   
   def url
index 00f38ad..0289e59 100644 (file)
@@ -42,6 +42,10 @@ class SpeechBalloon < Peta::Element
     self.speech_balloon_template.symbol_option
   end
   
+  def filer_caption
+    self.plain_scenario
+  end
+  
   def self.public_list_where list
     'panels.publish > 0'
   end
index 5947c47..d35424c 100644 (file)
@@ -25,8 +25,8 @@
     <%= l @item.updated_at %>
   </p>
   <p>
-    <b>pages:</b>
-    <%= @play_count %>
+    <b>stories:</b>
+    <%= @play_list.total %>
   </p>
 </div>
 
index 6c58714..6e19fdf 100644 (file)
@@ -25,8 +25,8 @@
     <%= l @item.updated_at %>
   </p>
   <p>
-    <b>pages:</b>
-    <%= @play_count %>
+    <b>panels:</b>
+    <%= @play_list.total %>
   </p>
 </div>
 
index 7f2af7d..2ba7b81 100644 (file)
@@ -13,7 +13,7 @@
 <% if @items.empty? -%>
   <h2><%= t('stories.play.empty') %></h2>
 <% else %>
-  <%= paginate(@pager) %>
+  <%= render @pager.template_name, :pager => @pager %>
   <% @items.each do |story_sheet| %>
     <% if story_sheet.sheet and story_sheet.sheet.visible?(@operators) -%>
       <%= render 'sheets/standard', :sheet => story_sheet.sheet, :operators => @operators %>
@@ -21,7 +21,7 @@
       sheet is hidden or deleted
     <% end %>
   <% end %>
-  <%= paginate(@pager) %>
+  <%= render @pager.template_name, :pager => @pager %>
 <% end %>
 
 <% if @item.own? @operators -%>
index 2f58cfc..e34e300 100644 (file)
@@ -24,8 +24,8 @@
     <%= l @item.updated_at %>
   </p>
   <p>
-    <b>pages:</b>
-    <%= @play_count %>
+    <b>sheets:</b>
+    <%= @play_list.total %>
   </p>
 </div>
 
index 9ff0603..67e64e6 100644 (file)
@@ -1,4 +1,4 @@
 <%= select_tag tag.form_field_name, 
-  options_for_select(tag.source_by_filter? ? tag.items : t_select_items(tag.items), :selected => tag.value.to_s), 
+  options_for_select((tag.translate? ? t_select_items(tag.items) : tag.items), :selected => tag.value.to_s), 
   tag.options 
 %>
index fbefb96..2faa640 100644 (file)
@@ -1 +1 @@
-(<%= t_selected_item(column.select_item_name, column.value) %>)
+(<%= column.translate? ? t_selected_item(column.select_item_name, column.value) : column.value %>)
index 4e38f37..0d9672e 100644 (file)
@@ -19,6 +19,10 @@ module Locmare
             self.model_attribute_manifest.source.select_item_name
           end
           
+          def translate?
+            self.model_attribute_manifest.source.translate?
+          end
+          
           def items
             if self.source_by_filter?
               resource_item_name = self.model_attribute_manifest.source.resource_item_name
@@ -30,11 +34,9 @@ module Locmare
                 resource_controller_name, 
                 resource_action_name, 
                 self.form.operators, 
-                {:id => filter_id}
+                {:id => filter_id, 'page_size' => -1} # no limit
               )
-              list.items(nil, 
-                0, -1 # no limit
-              ).map {|i| [i.caption, i.id] }
+              list.items.map {|i| [i.caption, i.id] }
             else
               ::Manifest.manifest.system_resources.select_items[self.select_item_name]
             end
index 3bd122a..bc15c90 100644 (file)
@@ -29,6 +29,12 @@ module Locmare
       def init
       end
       
+      def reset
+        @page_status = nil
+        @item = nil
+        @total = nil
+      end
+      
       def page_status
         @page_status ||= LibModule::PageStatus.load(self, self.total, @options)
       end
index dace381..0a2b030 100644 (file)
@@ -19,6 +19,10 @@ module Locmare
           self.model_attribute_manifest.source
         end
         
+        def translate?
+          self.model_attribute_source_manifest.translate?
+        end
+        
         def template_file_name
           "source"
         end
index ce94a50..c07eabc 100644 (file)
@@ -3,6 +3,7 @@ module Manifest
     module AttributeModule
       module SourceModule
         class Base < ManifestBase::TypeArgs
+          attr :has_translation
           
           def set_default
             super
@@ -16,6 +17,10 @@ module Manifest
             @parent.item_name
           end
           
+          def translate?
+            @has_translation > 0
+          end
+          
         end
         
       end
index d477ff5..55a592b 100644 (file)
@@ -8,11 +8,13 @@ module Manifest
           def set_default
             super
             ManifestBase.alert_undefined_message 'select_item_name',  self.module_message unless @args['select_item_name']
+            @args['has_translation'] ||= 1
           end
           
           def init
             super
             @select_item_name = @args['select_item_name']
+            @has_translation = @args['has_translation']
           end
           
         end
index ea70de2..486ca3e 100644 (file)
@@ -8,6 +8,7 @@ module Manifest
           
           def set_default
             super
+            @args['has_translation'] ||= 0
             @args['resource_item_name'] ||= (@parent.name.gsub('_id', ''))
             @args['resource_action_name'] ||= 'index'
             @args['select_item_name'] ||= self.item_name + '_' + @parent.name.gsub('_id', '') + '_items'
@@ -16,6 +17,7 @@ module Manifest
           
           def init
             super
+            @has_translation = @args['has_translation']
             @resource_item_name = @args['resource_item_name']
             @resource_action_name = @args['resource_action_name']
             @select_item_name = @args['select_item_name']
index c466554..c84f4a7 100644 (file)
           }\r
         },\r
         "play": {\r
-          "type": "public"\r
+          "type": "play",\r
+          "args": {\r
+            "filter_item_name": "comic",\r
+            "wheres": [\r
+              "index",\r
+              "play"\r
+            ]\r
+          }\r
         }\r
       }\r
     },\r
           "type": "filter"\r
         },\r
         "play": {\r
-          "type": "public"\r
+          "type": "play",\r
+          "args": {\r
+            "filter_item_name": "story",\r
+            "wheres": [\r
+              "index",\r
+              "play"\r
+            ]\r
+          }\r
         }\r
       }\r
     },\r
           "face": {\r
             "type": "method",\r
             "args": {\r
-              "method_name": "plain_scenario"\r
+              "method_name": "filer_caption"\r
             }\r
           },\r
           "link": {\r
           "face": {\r
             "type": "method",\r
             "args": {\r
-              "method_name": "revision"\r
+              "method_name": "filer_caption"\r
             }\r
           },\r
           "link": {\r
index 85f150a..ccf41ba 100644 (file)
           "type": "list",\r
           "args": {\r
             "alias": "comic_stories.by_comic",\r
+            "max_page_size": -1,\r
             "order": "t",\r
             "direction": 1\r
           }\r
           "type": "list",\r
           "args": {\r
             "alias": "story_sheets.by_story",\r
+            "max_page_size": -1,\r
             "order": "t",\r
             "direction": 1\r
           }\r