OSDN Git Service

change page status for offset
authoryasushiito <yas@pen-chan.jp>
Sun, 9 Nov 2014 00:48:29 +0000 (09:48 +0900)
committeryasushiito <yas@pen-chan.jp>
Sun, 9 Nov 2014 00:48:29 +0000 (09:48 +0900)
31 files changed:
app/assets/javascripts/ap.js
app/assets/javascripts/controllers/panels.js.coffee
app/assets/javascripts/editor.js.coffee [new file with mode: 0644]
app/assets/javascripts/editor/panel_editor.js.coffee [new file with mode: 0644]
app/assets/javascripts/editor/panel_editor/dock.js.coffee [new file with mode: 0644]
app/assets/javascripts/locmare/bucket.js.coffee
app/assets/javascripts/models/ground_color.js.coffee
app/assets/javascripts/models/ground_picture.js.coffee
app/assets/javascripts/models/panel_picture.js.coffee
app/assets/javascripts/models/speech_balloon.js.coffee
app/assets/javascripts/peta/element_nestable_content.js.coffee
app/assets/javascripts/tags.js.coffee
app/assets/javascripts/views/ground_colors/element_face.js.coffee [new file with mode: 0644]
app/assets/javascripts/views/ground_colors/symbol.js.coffee
app/assets/javascripts/views/ground_pictures/element_face.js.coffee [new file with mode: 0644]
app/assets/javascripts/views/panel_pictures/element_face.js.coffee [new file with mode: 0644]
app/assets/javascripts/views/panel_pictures/icon.js.coffee [new file with mode: 0644]
app/assets/javascripts/views/speech_balloons/element.js.coffee
app/assets/javascripts/views/speech_balloons/element_face.js.coffee [new file with mode: 0644]
app/assets/javascripts/views/top/index.js.coffee
app/assets/stylesheets/test.css.scss
app/views/layouts/ap.html.erb
app/views/templates/r/filer/pager/_default.html.erb [deleted file]
app/views/templates/r/filer/pager/_more.html.erb [deleted file]
app/views/templates/r/filer/pager/_none.html.erb [deleted file]
app/views/templates/r/pager/_default.html.erb
app/views/templates/r/pager/_offset.html.erb [new file with mode: 0644]
lib/editor/dock.rb
lib/locmare/list_group/lib/page_status.rb
lib/locmare/list_group/lib/pager.rb
lib/manifest/controller/action/base.rb

index 68575ee..02dbcd5 100644 (file)
 //= require ./pettanr
 //= require ./routes
 //= require ./views
+//= require ./editor
+//= require ./editor/panel_editor
+//= require ./editor/panel_editor/dock
 //= require ./i18n/translations
 //= require_directory ./controllers
 //= require_directory ./models
index e352755..9bb5d2c 100644 (file)
@@ -46,11 +46,18 @@ class Pettanr.PanelsController extends Pettanr.AppController
   \r
   new: () ->\r
     @redraw_title(@params)\r
-    @form_new()\r
+    @set_new()\r
+    editor = new Editor.PanelEditor({root_item: @item, operators: @operators})\r
+    $("#pettanr").html(editor.render().el)\r
   \r
   edit: () ->\r
     @redraw_title(@params)\r
-    @form_edit()\r
+    _this = this\r
+    @set_model()\r
+    @item = new Pettanr.Panel({id: @params['id']}, {with_elements: true})\r
+    @item.fetch({cache: false}).done ->\r
+      editor = new Editor.PanelEditor({root_item: _this.item, operators: _this.operators})\r
+      $("#pettanr").html(editor.render().el)\r
   \r
   create: () ->\r
   \r
diff --git a/app/assets/javascripts/editor.js.coffee b/app/assets/javascripts/editor.js.coffee
new file mode 100644 (file)
index 0000000..e2e48cd
--- /dev/null
@@ -0,0 +1,277 @@
+class Editor\r
+@Editor = Editor\r
+class Editor.EditorModule\r
+class Editor.EditorModule.DockBase extends Backbone.View\r
+  \r
+  initialize: (options) ->\r
+    @parent = options.parent\r
+    @tabs = []\r
+  \r
+  add_tab: (tab, label, body) ->\r
+    @tabs.push tab\r
+    tab.label = label\r
+    tab.body = body\r
+    tab\r
+  \r
+  root_item: () ->\r
+    @parent.root_item()\r
+  \r
+class Editor.EditorModule.DockModule\r
+  \r
+class Editor.EditorModule.DockModule.Tab extends Editor.EditorModule.DockBase\r
+  initialize: (options) ->\r
+    super(options)\r
+    @index = options.index\r
+    @name = options.name\r
+    @label = null\r
+    @body = null\r
+  \r
+  dom_id: () ->\r
+    console.log "no dom_id"\r
+  \r
+  dom_class: () ->\r
+    console.log "no dom_class"\r
+  \r
+class Editor.EditorModule.DockModule.Bay extends Editor.EditorModule.DockModule.Tab\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+  \r
+  dock: () ->\r
+    @parent\r
+  \r
+  root_item: () ->\r
+    @parent.root_item()\r
+  \r
+  dom_id: () ->\r
+    @parent.dom_id() + '-bay-' + @name\r
+  \r
+  dom_class: () ->\r
+    @parent.dom_class() + '-bay'\r
+  \r
+  dom_labels_class: () ->\r
+    @dom_class() + '-labels'\r
+  \r
+class Editor.EditorModule.DockModule.SimpleBay extends Editor.EditorModule.DockModule.Bay\r
+  tagName: 'div'\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+  \r
+class Editor.EditorModule.DockModule.BoardBay extends Editor.EditorModule.DockModule.Bay\r
+  tagName: 'div'\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @boards = null\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    @el.className = @body.dom_class()\r
+    rb = new Tag.RowBreak()\r
+    this.$el.append(rb.render().el)\r
+    this\r
+  \r
+  dom_labels_class: () ->\r
+    @dom_class() + "-labels"\r
+  \r
+  dom_bodys_class: () ->\r
+    @dom_class() + "-bodys"\r
+  \r
+class Editor.EditorModule.DockModule.Board extends Editor.EditorModule.DockModule.Tab\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+  \r
+  root_item: () ->\r
+    @parent.root_item()\r
+  \r
+  bay: () ->\r
+    @parent\r
+  \r
+  dock: () ->\r
+    @bay().dock()\r
+  \r
+  bay_index: () ->\r
+    @bay().index\r
+  \r
+  dom_id: () ->\r
+    @bay().dom_id() + '-board-' + @name\r
+  \r
+  dom_class: () ->\r
+    @bay().dom_class() + '-board'\r
+  \r
+  header_class: () ->\r
+    ""\r
+  \r
+class Editor.EditorModule.DockModule.Bucket extends Backbone.View\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @parent = options.parent\r
+  \r
+class Editor.EditorModule.DockModule.FormBucket extends Editor.EditorModule.DockModule.Bucket\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @form = options.form\r
+  \r
+  render: () ->\r
+    @form.render()\r
+  \r
+class Editor.EditorModule.DockModule.PriorityBucket extends Editor.EditorModule.DockModule.Bucket\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+  \r
+  board: () ->\r
+    @parent.board()\r
+  \r
+  bay: () ->\r
+    @board().bay()\r
+  \r
+class Editor.EditorModule.DockModule.ScenarioBucket extends Editor.EditorModule.DockModule.Bucket\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @element = options.element\r
+  \r
+  board: () ->\r
+    @parent.board()\r
+  \r
+  bay: () ->\r
+    @board().bay()\r
+  \r
+class Editor.EditorModule.DockModule.TabModule\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.Label extends Backbone.View\r
+  \r
+  initialize: (options) ->\r
+    @parent = options.parent\r
+    @caption = options.caption\r
+  \r
+  root_item: () ->\r
+    @parent.root_item()\r
+  \r
+  index: () ->\r
+    @parent.index\r
+  \r
+  name: () ->\r
+    @parent.name\r
+  \r
+  dom_id: () ->\r
+    console.log "no dom_id"\r
+  \r
+  dom_class: () ->\r
+    console.log "no dom_class"\r
+  \r
+  body: () ->\r
+    @parent.body\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.Body extends Backbone.View\r
+  \r
+  initialize: (options) ->\r
+    @parent = options.parent\r
+  \r
+  root_item: () ->\r
+    @parent.root_item()\r
+  \r
+  index: () ->\r
+    @parent.index\r
+  \r
+  name: () ->\r
+    @parent.name\r
+  \r
+  label: () ->\r
+    @parent.label\r
+  \r
+  dom_id: () ->\r
+    console.log "no dom_id"\r
+  \r
+  dom_class: () ->\r
+    console.log "no dom_class"\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.BayLabel extends Editor.EditorModule.DockModule.TabModule.Label\r
+  tagName: 'li'\r
+  \r
+  bay: () ->\r
+    @parent\r
+  \r
+  dock: () ->\r
+    @bay().dock()\r
+  \r
+  dom_id: () ->\r
+    @bay().dom_id() + '-label'\r
+  \r
+  dom_class: () ->\r
+    @bay().dom_class() + '-label'\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    @el.className = @dom_class()\r
+    a = new Tag.A({attr: {href: '/#' + @body().dom_id()}, content: @caption})\r
+    this.$el.html(a.render().el)\r
+    this\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.BayBody extends Editor.EditorModule.DockModule.TabModule.Body\r
+  bay: () ->\r
+    @parent\r
+  \r
+  dock: () ->\r
+    @bay().dock()\r
+  \r
+  dom_id: () ->\r
+    @bay().dom_id() + '-body'\r
+  \r
+  dom_class: () ->\r
+    @bay().dom_class() + '-body'\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.BoardLabel extends Editor.EditorModule.DockModule.TabModule.Label\r
+  tagName: 'li'\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+  \r
+  board: () ->\r
+    @parent\r
+  \r
+  bay: () ->\r
+    @board().bay()\r
+  \r
+  dock: () ->\r
+    @bay().dock()\r
+  \r
+  element: () ->\r
+    @parent.element\r
+  \r
+  bay_name: () ->\r
+    bay().name\r
+  \r
+  dom_id: () ->\r
+    @board().dom_id() + '-label'\r
+  \r
+  dom_class: () ->\r
+    @board().dom_class() + '-label'\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    @el.className = @dom_class()\r
+    this.$el.html(@element().element_face().render().el)\r
+    this\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.BoardBody extends Editor.EditorModule.DockModule.TabModule.Body\r
+  board: () ->\r
+    @parent\r
+  \r
+  bay: () ->\r
+    @board().bay()\r
+  \r
+  dock: () ->\r
+    @bay().dock()\r
+  \r
+  dom_id: () ->\r
+    @board().dom_id() + '-body'\r
+  \r
+  dom_class: () ->\r
+    @board().dom_class() + '-body'\r
+  \r
diff --git a/app/assets/javascripts/editor/panel_editor.js.coffee b/app/assets/javascripts/editor/panel_editor.js.coffee
new file mode 100644 (file)
index 0000000..0808bad
--- /dev/null
@@ -0,0 +1,33 @@
+class Editor.PanelEditor extends Backbone.View\r
+  tagName: 'div'\r
+  className: 'panel-editor'\r
+  \r
+  initialize: (options) ->\r
+    @panel = options.root_item\r
+    @operators = options.operators\r
+    @body = new Pettanr.Views.Panel.Body({\r
+      panel: @root_item(),\r
+      operators: @operators,\r
+      spot: null\r
+    })\r
+    @dock = new Editor.PanelEditor.Dock({parent: this})\r
+    @credits = new Pettanr.Views.Panel.Show.Credits({panel: @root_item()})\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    this.$el.append(@body.render().el)\r
+    this.$el.append(@dock.render().el)\r
+    this.$el.append(@credits.render().el)\r
+    rb = new Tag.RowBreak()\r
+    this.$el.append(rb.render().el)\r
+    this\r
+  \r
+  root_item: () ->\r
+    @panel\r
+  \r
+  dom_id: () ->\r
+    'editor-' + Pettanr.to_s(@root_item().get('id'))\r
+  \r
+  dom_class: () ->\r
+    'editor'\r
+\r
diff --git a/app/assets/javascripts/editor/panel_editor/dock.js.coffee b/app/assets/javascripts/editor/panel_editor/dock.js.coffee
new file mode 100644 (file)
index 0000000..4fe7308
--- /dev/null
@@ -0,0 +1,302 @@
+class Editor.PanelEditor.Dock extends Editor.EditorModule.DockBase\r
+  tagName: 'div'\r
+  className: 'dock'\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    tab = new Editor.EditorModule.DockModule.RootBay({\r
+      parent: this, index: 0, name: 'panel'\r
+    })\r
+    @add_tab(\r
+      tab, \r
+      new Editor.EditorModule.DockModule.TabModule.RootBayLabel({\r
+        parent: tab, caption: 'panel'\r
+      }), \r
+      new Editor.EditorModule.DockModule.TabModule.RootBayBody({\r
+        parent: tab\r
+      })\r
+    )\r
+    tab = new Editor.EditorModule.DockModule.ElementBay({\r
+      parent: this, index: 1, name: 'elements'\r
+    })\r
+    @add_tab(\r
+      tab, \r
+      new Editor.EditorModule.DockModule.TabModule.ElementBayLabel({\r
+        parent: tab, caption: 'elements'\r
+      }), \r
+      new Editor.EditorModule.DockModule.TabModule.ElementBayBody({\r
+        parent: tab\r
+      })\r
+    )\r
+    tab = new Editor.EditorModule.DockModule.ScenarioBay({\r
+      parent: this, index: 2, name: 'scenario'\r
+    })\r
+    @add_tab(\r
+      tab, \r
+      new Editor.EditorModule.DockModule.TabModule.ScenarioBayLabel({\r
+        parent: tab, caption: 'scenario'\r
+      }), \r
+      new Editor.EditorModule.DockModule.TabModule.ScenarioBayBody({\r
+        parent: tab\r
+      })\r
+    )\r
+    tab = new Editor.EditorModule.DockModule.PriorityBay({\r
+      parent: this, index: 3, name: 'priority'\r
+    })\r
+    @add_tab(\r
+      tab, \r
+      new Editor.EditorModule.DockModule.TabModule.PriorityBayLabel({\r
+        parent: tab, caption: 'priority'\r
+      }), \r
+      new Editor.EditorModule.DockModule.TabModule.PriorityBayBody({\r
+        parent: tab\r
+      })\r
+    )\r
+    tab = new Editor.EditorModule.DockModule.NewBay({\r
+      parent: this, index: 4, name: 'new'\r
+    })\r
+    @add_tab(\r
+      tab, \r
+      new Editor.EditorModule.DockModule.TabModule.NewBayLabel({\r
+        parent: tab, caption: 'new'\r
+      }), \r
+      new Editor.EditorModule.DockModule.TabModule.NewBayBody({\r
+        parent: tab\r
+      })\r
+    )\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    l = _.map @tabs, (tab) ->\r
+      tab.label\r
+    labels = new Tag.Ul({contents: l, class_name: @dom_labels_class()})\r
+    this.$el.append(labels.render().el)\r
+    _this = this\r
+    _.each @tabs, (tab) ->\r
+      _this.$el.append(tab.render().el)\r
+    this\r
+  \r
+  editor: () ->\r
+    @parent\r
+  \r
+  dom_id: () ->\r
+    @editor().dom_id() + '-dock'\r
+  \r
+  dom_class: () ->\r
+    @editor().dom_class() + '-dock'\r
+  \r
+  dom_labels_class: () ->\r
+    @dom_class() + '-labels'\r
+  \r
+class Editor.EditorModule.DockModule.RootBay extends Editor.EditorModule.DockModule.SimpleBay\r
+  \r
+  render: () ->\r
+    @body.render()\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.RootBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.RootBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @form = new Locmare.Form({\r
+      form_name: @root_item().item_name(), \r
+      item: @root_item(), \r
+      mounted: @mounted(), \r
+      submit: 'default', \r
+      operators: @operators\r
+    })\r
+    @bucket = new Editor.EditorModule.DockModule.FormBucket({\r
+      parent: this, form: @form\r
+    })\r
+  \r
+  render: () ->\r
+    @el.className = @bay().body.dom_class()\r
+    this.$el.html(@bucket.render().el)\r
+    this\r
+  \r
+  mounted: () ->\r
+    true\r
+  \r
+  dock: () ->\r
+    @parent.dock()\r
+  \r
+  root_item: () ->\r
+    @dock().root_item()\r
+  \r
+class Editor.EditorModule.DockModule.ElementBay extends Editor.EditorModule.DockModule.BoardBay\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    _this = this\r
+    i = 0\r
+    _.each @elements(), (element) ->\r
+      tab = new Editor.EditorModule.DockModule.ElementBoard({\r
+        parent: _this, index: i, name: element.item_name(), element: element\r
+      })\r
+      _this.add_tab(\r
+        tab, \r
+        new Editor.EditorModule.DockModule.TabModule.ElementBoardLabel({parent: tab, name: element.item_name()}), \r
+        new Editor.EditorModule.DockModule.TabModule.ElementBoardBody({parent: tab})\r
+      )\r
+      i++\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    _this = this\r
+    _.each @tabs, (tab) ->\r
+      _this.$el.append(tab.label.render().el)\r
+    this.$el.append('bdy')\r
+    rb = new Tag.RowBreak()\r
+    this.$el.append(rb.render().el)\r
+    this\r
+  \r
+  elements: () ->\r
+    @root_item().scenario_elements()\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.ElementBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.ElementBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody\r
+  \r
+class Editor.EditorModule.DockModule.ElementBoard extends Editor.EditorModule.DockModule.Board\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @element = options.element\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.ElementBoardLabel extends Editor.EditorModule.DockModule.TabModule.BoardLabel\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.ElementBoardBody extends Editor.EditorModule.DockModule.TabModule.BoardBody\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @form = new Locmare.Bucket({\r
+      bucket_name: @element().item_name(), \r
+      item: @element(), \r
+      mounted: @mounted(), \r
+      submit: null, \r
+      operators: @operators\r
+    })\r
+    @bucket = new Editor.EditorModule.DockModule.FormBucket({\r
+      parent: this, form: @form\r
+    })\r
+  \r
+  mounted: () ->\r
+    true\r
+  \r
+  element: () ->\r
+    @parent.element\r
+  \r
+class Editor.EditorModule.DockModule.PriorityBay extends Editor.EditorModule.DockModule.BoardBay\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    _this = this\r
+    i = 0\r
+    _.each @elements(), (element) ->\r
+      tab = new Editor.EditorModule.DockModule.PriorityBoard({\r
+        parent: this, index: i, name: element.item_name(), element: element\r
+      })\r
+      _this.add_tab(\r
+        tab, \r
+        new Editor.EditorModule.DockModule.TabModule.PriorityBoardLabel({parent: tab, name: element.item_name()}), \r
+        new Editor.EditorModule.DockModule.TabModule.PriorityBoardBody({parent: tab})\r
+      )\r
+      i++\r
+  \r
+  elements: () ->\r
+    @root_item().scenario_elements()\r
+  \r
+  class_name: () ->\r
+    "zsort-box"\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.PriorityBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.PriorityBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody\r
+  \r
+class Editor.EditorModule.DockModule.PriorityBoard extends Editor.EditorModule.DockModule.Board\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @element = options.element\r
+  \r
+  mounted: () ->\r
+    false\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.PriorityBoardLabel extends Editor.EditorModule.DockModule.TabModule.BoardLabel\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.PriorityBoardBody extends Editor.EditorModule.DockModule.TabModule.BoardBody\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @bucket = new Editor.EditorModule.DockModule.PriorityBucket({\r
+      parent: this\r
+    })\r
+    \r
+#    form_manager = Pettanr::Application::manifest.form_managers[self.root_item.form_name]\r
+#    form = form_manager.open self.root_item, @dock_body.dock.editor.operators, mounted\r
+#    bucket = Bucket.new self,form\r
+  \r
+class Editor.EditorModule.DockModule.ScenarioBay extends Editor.EditorModule.DockModule.BoardBay\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    _this = this\r
+    i = 0\r
+    _.each @elements(), (element) ->\r
+      tab = new Editor.EditorModule.DockModule.ScenarioBoard({\r
+        parent: this, index: i, name: element.item_name(), element: element\r
+      })\r
+      _this.add_tab(\r
+        tab, \r
+        new Editor.EditorModule.DockModule.TabModule.ScenarioBoardLabel({parent: tab, caption: element.item_name()}), \r
+        new Editor.EditorModule.DockModule.TabModule.ScenarioBoardBody({parent: tab})\r
+      )\r
+      i++\r
+  \r
+  elements: () ->\r
+    @root_item().scenario_elements()\r
+  \r
+  class_name: () ->\r
+    "tsort-box"\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.ScenarioBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.ScenarioBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody\r
+  \r
+class Editor.EditorModule.DockModule.ScenarioBoard extends Editor.EditorModule.DockModule.Board\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @element = options.element\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.ScenarioBoardLabel extends Editor.EditorModule.DockModule.TabModule.BoardLabel\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.ScenarioBoardBody extends Editor.EditorModule.DockModule.TabModule.BoardBody\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @bucket = new Editor.EditorModule.DockModule.ScenarioBucket({\r
+      parent: this\r
+    })\r
+  \r
+class Editor.EditorModule.DockModule.NewBay extends Editor.EditorModule.DockModule.BoardBay\r
+  \r
+\r
+class Editor.EditorModule.DockModule.TabModule.NewBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel\r
+  \r
+\r
+class Editor.EditorModule.DockModule.TabModule.NewBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody\r
+  \r
+class Editor.EditorModule.DockModule.NewBoard extends Editor.EditorModule.DockModule.Board\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.NewBoardLabel extends Editor.EditorModule.DockModule.TabModule.BoardLabel\r
+  \r
+class Editor.EditorModule.DockModule.TabModule.NewBoardBody extends Editor.EditorModule.DockModule.TabModule.BoardBody\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+#    form_manager = Pettanr::Application::manifest.form_managers[self.root_item.form_name]\r
+#    form = form_manager.open self.root_item, @dock_body.dock.editor.operators, mounted\r
+#    bucket = Bucket.new self,form\r
+  \r
index 72993e2..442c71c 100644 (file)
@@ -68,7 +68,7 @@ class Locmare.Bucket extends Backbone.View
     _this = this\r
     _.each man.members, (member_manifest, member_name) ->\r
       form_name = member_name   # write exchange function if you want\r
-      member_item = item[form_name]\r
+      member_item = item.get(form_name)\r
       new_key = key + '.' + form_name\r
       _this.forms[new_key] = new Locmare.Form({\r
         form_name: new_key, \r
index 3643f1f..09cfeaf 100644 (file)
@@ -18,6 +18,9 @@ class Pettanr.GroundColor extends Peta.Element
   panel: () ->\r
     new Pettanr.Panel({id: @get('panel_id')})\r
   \r
+  element_face: () ->\r
+    new Pettanr.Views.GroundColor.ElementFace({element: this})\r
+  \r
   initialize: () ->\r
     if @id\r
       @url = @url + @id\r
index e4e2fb9..ccadfa9 100644 (file)
@@ -44,6 +44,9 @@ class Pettanr.GroundPicture extends Peta.Element
   repeat_text: () ->\r
     Pettanr.GroundPicture.repeat_texts()[@get('repeat')]\r
   \r
+  element_face: () ->\r
+    new Pettanr.Views.GroundPicture.ElementFace({element: this})\r
+  \r
   initialize: () ->\r
     if @id\r
       @url = @url + @id\r
index c1f2068..3c3003d 100644 (file)
@@ -55,6 +55,9 @@ class Pettanr.PanelPicture extends Peta.Element
     i.fetch({cache: true}).done ->\r
       cb(_this.tmb_opt_img_tag(i))\r
   \r
+  element_face: () ->\r
+    new Pettanr.Views.PanelPicture.ElementFace({element: this})\r
+  \r
   initialize: () ->\r
     if @id\r
       @url = @url + @id\r
index bedcfa1..23e821b 100644 (file)
@@ -32,6 +32,9 @@ class Pettanr.SpeechBalloon extends Peta.Element
   plain_scenario: () ->\r
     @get('caption')\r
   \r
+  element_face: () ->\r
+    new Pettanr.Views.SpeechBalloon.ElementFace({element: this})\r
+  \r
   initialize: () ->\r
     if @id\r
       @url = @url + @id\r
index c90638e..5fb8392 100644 (file)
@@ -1,13 +1,7 @@
 class Peta.ElementNestableContent extends Peta.Content\r
   element_items: (element_model) ->\r
     n = @my_class().my_manifest().associations.child_element_name(element_model)\r
-    attrs = @get(n)\r
-    if attrs\r
-      if @my_class().my_manifest().associations.is_has_one(element_model)\r
-        new element_model(attrs)\r
-      else\r
-        _.map attrs, (attr) ->\r
-          new element_model(attr)\r
+    @get(n)\r
   \r
   elements_items: () ->\r
     _this = this\r
@@ -20,3 +14,20 @@ class Peta.ElementNestableContent extends Peta.Content
     _.each @elements_items(), (item) ->\r
       item.boosts(level)\r
   \r
+  get: (name) ->\r
+    val = super(name)\r
+    return val if !(typeof val == 'object')\r
+    _this = this\r
+    attrs = val\r
+    r = null\r
+    _.each @my_class().child_models(), (element_model) ->\r
+      n = _this.my_class().my_manifest().associations.child_element_name(element_model)\r
+      if n == name\r
+        if _this.my_class().my_manifest().associations.is_has_one(element_model)\r
+          r = new element_model(attrs)\r
+        else\r
+          r = _.map attrs, (attr) ->\r
+            new element_model(attr)\r
+    r\r
+  \r
+  \r
index b875ce5..554c456 100644 (file)
@@ -53,6 +53,23 @@ class Tag.Div extends Backbone.View
 class Tag.Span extends Tag.Div\r
   tagName: 'span'\r
     \r
+class Tag.Ul extends Backbone.View\r
+  tagName: 'ul'\r
+  \r
+  initialize: (options) ->\r
+    @attr = options.attr || {}\r
+    @contents = options.contents\r
+    @class_name = options.class_name\r
+  \r
+  render: () ->\r
+    @el.className = @class_name if @class_name\r
+    _this = this\r
+    this.$el.attr(@attr)\r
+    this.$el.html('')\r
+    _.each @contents, (content) ->\r
+      _this.$el.append(content.render().el)\r
+    this\r
+  \r
 class Tag.RowBreak extends Tag.Div\r
   initialize: (options) ->\r
     @attr = {}\r
diff --git a/app/assets/javascripts/views/ground_colors/element_face.js.coffee b/app/assets/javascripts/views/ground_colors/element_face.js.coffee
new file mode 100644 (file)
index 0000000..4761565
--- /dev/null
@@ -0,0 +1,17 @@
+class Pettanr.Views.GroundColor.ElementFace extends Backbone.View\r
+  tagName: 'div'\r
+  className: 'elements-tab'\r
+  \r
+  initialize: (options) ->\r
+    @element = options.element\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    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
+    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
+    this\r
index 01cf55a..6aeaa69 100644 (file)
@@ -1,11 +1,12 @@
 class Pettanr.Views.GroundColor.Symbol extends Backbone.View\r
   tagName: 'div'\r
-  className: 'face'\r
   \r
   initialize: (options) ->\r
     @item = options.item\r
+    @class_name = options.class_name || 'face'\r
   \r
   render: () ->\r
+    this.$el.addClass(@class_name)\r
     this.$el.html(@fore_color())\r
     attr = {\r
       style: Pettanr.to_style(@style())\r
diff --git a/app/assets/javascripts/views/ground_pictures/element_face.js.coffee b/app/assets/javascripts/views/ground_pictures/element_face.js.coffee
new file mode 100644 (file)
index 0000000..721c6c8
--- /dev/null
@@ -0,0 +1,33 @@
+class Pettanr.Views.GroundPicture.ElementSymbol extends Backbone.View\r
+  tagName: 'div'\r
+  className: 'elements-tab-face-icon'\r
+  \r
+  initialize: (options) ->\r
+    @element = options.element\r
+  \r
+  render: () ->\r
+    picture = @element.picture()\r
+    _this = this\r
+    picture.fetch({cache: true}).done ->\r
+      img = _this.element.tmb_opt_img_tag(picture)\r
+      _this.$el.html(img.render().el)\r
+    this\r
+  \r
+class Pettanr.Views.GroundPicture.ElementFace extends Backbone.View\r
+  tagName: 'div'\r
+  className: 'elements-tab'\r
+  \r
+  initialize: (options) ->\r
+    @element = options.element\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    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
+    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
+    this\r
+  \r
diff --git a/app/assets/javascripts/views/panel_pictures/element_face.js.coffee b/app/assets/javascripts/views/panel_pictures/element_face.js.coffee
new file mode 100644 (file)
index 0000000..f871fb3
--- /dev/null
@@ -0,0 +1,33 @@
+class Pettanr.Views.PanelPicture.ElementSymbol extends Backbone.View\r
+  tagName: 'div'\r
+  className: 'elements-tab-face-icon'\r
+  \r
+  initialize: (options) ->\r
+    @element = options.element\r
+  \r
+  render: () ->\r
+    picture = @element.picture()\r
+    _this = this\r
+    picture.fetch({cache: true}).done ->\r
+      img = _this.element.tmb_opt_img_tag(picture)\r
+      _this.$el.html(img.render().el)\r
+    this\r
+  \r
+class Pettanr.Views.PanelPicture.ElementFace extends Backbone.View\r
+  tagName: 'div'\r
+  className: 'elements-tab'\r
+  \r
+  initialize: (options) ->\r
+    @element = options.element\r
+  \r
+  render: () ->\r
+    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
+    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
+    this\r
+  \r
diff --git a/app/assets/javascripts/views/panel_pictures/icon.js.coffee b/app/assets/javascripts/views/panel_pictures/icon.js.coffee
new file mode 100644 (file)
index 0000000..2b14b44
--- /dev/null
@@ -0,0 +1,5 @@
+class Pettanr.Views.SpeechBalloon.Icon extends Pettanr.Views.Common.Icon\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+  \r
index d1a61df..01b9c79 100644 (file)
@@ -6,8 +6,8 @@ class Pettanr.Views.SpeechBalloon.Element extends Backbone.View
     @element = options.element\r
     @root = options.root\r
     @spot = options.spot\r
-    @balloon = new Pettanr.Balloon(@element.get('balloon'))\r
-    @speech = new Pettanr.Speech(@element.get('speech'))\r
+    @balloon = @element.get('balloon')\r
+    @speech = @element.get('speech')\r
   \r
   render: () ->\r
     @attr = {style: Pettanr.to_style(@style())}\r
diff --git a/app/assets/javascripts/views/speech_balloons/element_face.js.coffee b/app/assets/javascripts/views/speech_balloons/element_face.js.coffee
new file mode 100644 (file)
index 0000000..532b0c7
--- /dev/null
@@ -0,0 +1,36 @@
+class Pettanr.Views.SpeechBalloon.ElementSymbol extends Backbone.View\r
+  tagName: 'div'\r
+  className: 'elements-tab-face-icon'\r
+  \r
+  initialize: (options) ->\r
+    @element = options.element\r
+  \r
+  render: () ->\r
+    speech_balloon_template = @element.speech_balloon_template()\r
+    _this = this\r
+    speech_balloon_template.fetch({cache: true}).done ->\r
+      system_picture = speech_balloon_template.system_picture()\r
+      system_picture.fetch({cache: true}).done ->\r
+        img = system_picture.tmb_opt_img_tag()\r
+        _this.$el.html(img.render().el)\r
+    this\r
+  \r
+class Pettanr.Views.SpeechBalloon.ElementFace extends Backbone.View\r
+  tagName: 'div'\r
+  className: 'elements-tab'\r
+  \r
+  initialize: (options) ->\r
+    @element = options.element\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    symbol = new Pettanr.Views.SpeechBalloon.ElementSymbol({element: @element})\r
+    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
+    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
+    this\r
+  \r
index 0726994..b588f64 100644 (file)
@@ -4,14 +4,22 @@ class Pettanr.Views.Top.Index extends Backbone.View
   \r
   initialize: (options) ->\r
     @operators = options.operators\r
+    @title = Manifest.manifest().magic_numbers.profile.users.caption\r
   \r
   render: () ->\r
     this.$el.html('')\r
     t = _.template($("#header_template").html())\r
-    this.$el.append(t())\r
-    @delegateEvents({'click .sign_in': 'click_sign_in'})\r
+    this.$el.append(t({title: @title}))\r
+    @delegateEvents({\r
+      'click .logo': 'click_logo', \r
+      'click .sign_in': 'click_sign_in'\r
+    })\r
     this\r
   \r
+  click_logo: () ->\r
+    window.router.navigate('', true)\r
+    return false\r
+  \r
   click_sign_in: () ->\r
     window.router.navigate('users/sign_in', true)\r
     return false\r
index f037eb7..f88250c 100644 (file)
@@ -661,6 +661,10 @@ font-family : monospace;
 .filer-item-speech_balloon_template .filer-item-caption {
 }
 
+.logo{
+  float: left;
+}
+
 ul.pagination {
   list-style-type: none;
 }
index 27984ba..2e46ddb 100644 (file)
 <div id="footer">\r
 </div>\r
 <script type="text/template" id="header_template">\r
-  <div id="account">\r
+  <span id="logo">\r
+    <a class="logo" href="/"><&= title &></a>\r
+  </span>\r
+  <span id="account">\r
     <a class="sign_in" href="/users/sign_in">sign_in</a>\r
-  </div>\r
+  </span>\r
+  <span class="row_break">\r
+  </span>\r
 </script>\r
 <script type="text/template" id="sign_in">\r
   <h3><&= 'title' &></h3>\r
diff --git a/app/views/templates/r/filer/pager/_default.html.erb b/app/views/templates/r/filer/pager/_default.html.erb
deleted file mode 100644 (file)
index 938994e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<% if pager.paginate %>
-  <%= paginate(pager.paginate) %>
-<% end %>
diff --git a/app/views/templates/r/filer/pager/_more.html.erb b/app/views/templates/r/filer/pager/_more.html.erb
deleted file mode 100644 (file)
index dfa3d9a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<div>
-  <%= link_to 'more', pager.api_path %>
-</div>
diff --git a/app/views/templates/r/filer/pager/_none.html.erb b/app/views/templates/r/filer/pager/_none.html.erb
deleted file mode 100644 (file)
index e69de29..0000000
index 7804dc6..27cdf83 100644 (file)
@@ -16,7 +16,7 @@
   <% end %>
   <% pager.range.each do |page| %>
     <li class="page">
-      <%= link_to page.to_s, pager.url(page) %>
+      <%= link_to_if (page != pager.current_page), page.to_s, pager.url(page) %>
     </li>
   <% end %>
   <% if pager.has_next_page_gap %>
diff --git a/app/views/templates/r/pager/_offset.html.erb b/app/views/templates/r/pager/_offset.html.erb
new file mode 100644 (file)
index 0000000..6ff7550
--- /dev/null
@@ -0,0 +1,38 @@
+<ul class="pagination">
+  <% if pager.has_previous_page %>
+    <li class="first">
+      <%= link_to '<<', pager.url(pager.diff_offset(-pager.current_page + 1)) %>
+    </li>
+  <% end %>
+  <% if pager.has_previous_page %>
+    <li class="prev">
+      <%= link_to '<', pager.url(pager.diff_offset(-1)) %>
+    </li>
+  <% end %>
+  <% if pager.has_previous_page_gap %>
+    <li class="page-gap">
+      ...
+    </li>
+  <% end %>
+  <% pager.ranges.each do |range| %>
+    <li class="page">
+      <%= link_to_if (range['page'] != pager.current_page), range['page'].to_s, pager.url(pager.diff_offset(range['distance'])) %>
+    </li>
+  <% end %>
+  <% if pager.has_next_page_gap %>
+    <li class="page-gap">
+      ...
+    </li>
+  <% end %>
+  <% if pager.has_next_page %>
+    <li class="next">
+      <%= link_to '>', pager.url(pager.diff_offset(+1)) %>
+    </li>
+  <% end %>
+  <% if pager.has_next_page %>
+    <li class="last">
+      <%= link_to '>>', pager.url(pager.diff_offset(pager.total_page - pager.current_page)) %>
+    </li>
+  <% end %>
+</ul>
+<div class="row_break"></div>
index 188a1e1..2298b06 100644 (file)
@@ -7,10 +7,6 @@ module Editor
         @tabs = []
       end
       
-      def root_item
-        @parent.root_item
-      end
-      
       def add_tab tab, label, body
         @tabs << tab
         tab.label = label
index 4176ee1..843a877 100644 (file)
@@ -82,15 +82,15 @@ module Locmare
             }
           end
           
-          def paginate
-            c = @total ? @total.to_i : 0
+          def pager
+            @pager ||= ::Locmare::ListGroupModule::LibModule::Pager::Offset.new(self, @options)
           end
           
           def offset
             return @offset if @offset
             @offset = PageStatus.offset(@options).to_i
-            @offset = self.count - 1 if @offset >= self.count
-            @offset = self.count - @offset.abs if @offset < 0
+            @offset = @total - 1 if @offset >= @total
+            @offset = @total - @offset.abs if @offset < 0
             @offset = 0 if @offset < 0
             @offset
           end
@@ -98,6 +98,7 @@ module Locmare
           def limit
             return @limit if @limit
             @limit = self.count || self.default_page_size
+            @limit = self.default_page_size if @limit == 0
             if @list.limited?
               @limit = self.default_page_size if @limit < 0
               @limit = self.max_page_size if @limit > self.max_page_size
@@ -112,6 +113,37 @@ module Locmare
             @count ||= PageStatus.count(@options)
           end
           
+          def mod
+            self.offset % self.limit
+          end
+          
+          def adjust
+            self.mod == 0 ? 0 : 1
+          end
+          
+          def page
+            return 1 if self.limit < 0
+            self.offset / self.limit + 1 + self.adjust
+          end
+          
+          def default_page_size
+            @list.default_page_size
+          end
+          
+          def max_page_size
+            @list.max_page_size
+          end
+          
+          def total_page
+            return 1 if self.limit < 0
+            round = (@total % self.limit) == 0 ? 0 : 1
+            @total / self.limit + round + self.adjust
+          end
+          
+          def pageable?
+            self.total_page > 1
+          end
+          
         end
         
         class Unlimited
@@ -125,11 +157,11 @@ module Locmare
           
           def to_hash
             {
-              :type => :none
+              :type => :unlimited
             }
           end
           
-          def paginate
+          def pager
             nil
           end
           
@@ -141,6 +173,10 @@ module Locmare
             -1
           end
           
+          def pageable?
+            false
+          end
+          
         end
         
         def self.load list, total, options
index f904e78..cf5d4d0 100644 (file)
@@ -12,14 +12,16 @@ module Locmare
             @page_status = page_status
             @options = options
             @total = @page_status.total
-            @current_page = @page_status.page
-            @per_page = @page_status.limit
-            @total_page = @page_status.total_page
+            
             @window_size = 3
             @template_dir = 'templates/r/pager/'
             @template_name = @template_dir + 'default'
             @controller = Manifest.manifest.controllers[@options['controller'].to_s]
             @action = @controller.actions[@options['action'].to_s]
+            
+            @current_page = @page_status.page
+            @per_page = @page_status.limit
+            @total_page = @page_status.total_page
           end
           
           def range
@@ -63,8 +65,78 @@ module Locmare
           end
           
         end
+        
+        class Offset
+          
+          attr :page_status, :options, :window_size, 
+            :total, :current_page, :per_page, :total_page, 
+            :template_dir, :template_name
+          
+          def initialize page_status, options
+            @page_status = page_status
+            @options = options
+            @total = @page_status.total
+            
+            @window_size = 3
+            @template_dir = 'templates/r/pager/'
+            @template_name = @template_dir + 'offset'
+            @controller = Manifest.manifest.controllers[@options['controller'].to_s]
+            @action = @controller.actions[@options['action'].to_s]
+            
+            @current_page = @page_status.page
+            @per_page = @page_status.limit
+            @total_page = @page_status.total_page
+          end
+          
+          def ranges
+            ranges = []
+            (-@window_size..@window_size).each do |d|
+              next unless r = self.diff_offset(d)
+              ranges << r
+            end
+            ranges
+          end
+          
+          def has_previous_page
+            @current_page > 1
+          end
+          
+          def has_next_page
+            @current_page < @total_page
+          end
+          
+          def has_previous_page_gap
+            @current_page > @window_size + 1
+          end
+          
+          def has_next_page_gap
+            @total_page - @current_page > @window_size
+          end
+          
+          def diff_offset d
+            f = @page_status.offset + d * @per_page
+            t = f + @per_page - 1
+            return nil if t < 0 or f >= @total
+            f = 0 if f < 0
+            t = @total - 1 if t >= @total
+            {
+              'offset' => f, 'count' => t - f + 1, 
+              'page' => @current_page + d, 'distance' => d
+            }
+          end
+          
+          def url range
+            params = {}
+            @options.each do |k, v|  # deep copy
+              params[k] = v
+            end
+            params['offset'] = range['offset']
+            params['count'] = range['count']
+            @action.url params
+          end
+          
+        end
       end
-      
     end
   end
 end
index e7488e5..ebed55a 100644 (file)
@@ -25,6 +25,8 @@ module Manifest
           q = []
           q.push('page=' + params['page'].to_s) if params['page']
           q.push('page_size=' + params['page_size'].to_s) if params['page_size']
+          q.push('offset=' + params['offset'].to_s) if params['offset']
+          q.push('count=' + params['count'].to_s) if params['count']
           if q.length > 0
             '?' + q.join('&')
           else