OSDN Git Service

fix editor lock
authoryasushiito <yas@pen-chan.jp>
Tue, 10 Mar 2015 09:39:52 +0000 (18:39 +0900)
committeryasushiito <yas@pen-chan.jp>
Tue, 10 Mar 2015 09:39:52 +0000 (18:39 +0900)
app/assets/javascripts/controllers.js.coffee
app/assets/javascripts/controllers/panels.js.coffee
app/assets/javascripts/editor/panel_editor.js.coffee
app/assets/javascripts/editor/panel_editor/dock.js.coffee
app/assets/javascripts/locmare/form.js.coffee
app/assets/javascripts/pettanr.js.coffee
app/assets/javascripts/pettanr/proxy.js.coffee
app/assets/javascripts/routes.js.coffee
app/assets/javascripts/views/layout.js.coffee

index bee7d7b..12fdb6d 100644 (file)
@@ -74,15 +74,14 @@ class Pettanr.AppController
     @item.boosts 'post'\r
     # Backbone.Model has defaults property\r
     #@item.supply_default()\r
     @item.boosts 'post'\r
     # Backbone.Model has defaults property\r
     #@item.supply_default()\r
-    Pettanr.History.lock_url = @item.new_url()\r
   \r
   set_edit: () ->\r
     @set_model()\r
     @item = new @my_model_class({id: @params['id']})\r
     @item.fetch({cache: true}).done =>\r
       @item.boosts 'post'\r
   \r
   set_edit: () ->\r
     @set_model()\r
     @item = new @my_model_class({id: @params['id']})\r
     @item.fetch({cache: true}).done =>\r
       @item.boosts 'post'\r
-      Pettanr.History.lock_url = @item.edit_url()\r
       @render_form()\r
       @render_form()\r
+      Pettanr.History.lock = {url: @item.edit_url(), form: @form}\r
   \r
   render_form: () ->\r
     @form = Locmare.Form.factory({\r
   \r
   render_form: () ->\r
     @form = Locmare.Form.factory({\r
@@ -98,15 +97,23 @@ class Pettanr.AppController
     @trigger('ready', @form)\r
   \r
   form_new: () ->\r
     @trigger('ready', @form)\r
   \r
   form_new: () ->\r
-    @set_new()\r
-    @render_form()\r
+    if Pettanr.History.lock\r
+      @trigger('lock', @params)\r
+    else\r
+      @set_new()\r
+      @render_form()\r
+      Pettanr.History.lock = {url: @item.new_url(), form: @form}\r
   \r
   form_edit: () ->\r
   \r
   form_edit: () ->\r
-    @set_edit()\r
+    if Pettanr.History.lock\r
+      @trigger('lock', @params)\r
+    else\r
+      @set_edit()\r
   \r
   post_success: (model, response) ->\r
     @trigger('redirect', @form.item.show_url())\r
     @trigger('success', model, response)\r
   \r
   post_success: (model, response) ->\r
     @trigger('redirect', @form.item.show_url())\r
     @trigger('success', model, response)\r
+    Pettanr.History.release()\r
   \r
   post_fail: (model, response) ->\r
     @trigger('fail', response)\r
   \r
   post_fail: (model, response) ->\r
     @trigger('fail', response)\r
index 6d8819d..cf5ef67 100644 (file)
@@ -50,25 +50,30 @@ class Pettanr.PanelsController extends Pettanr.AppController
   count: () ->\r
   \r
   new: () ->\r
   count: () ->\r
   \r
   new: () ->\r
-    @trigger('title', @params)\r
-    @set_new()\r
-    Pettanr.History.lock_url = @item.new_url()\r
-    @editor()\r
-    @trigger('done', @params)\r
+    if Pettanr.History.lock\r
+      @trigger('lock', @params)\r
+    else\r
+      @trigger('title', @params)\r
+      @set_new()\r
+      @editor(@item.new_url())\r
+      @trigger('done', @params)\r
   \r
   edit: () ->\r
   \r
   edit: () ->\r
-    @trigger('title', @params)\r
-    @set_model()\r
-    panel = new Pettanr.Panel({id: @params['id']})\r
-    @item = panel.with_elements()\r
-    @item.fetch({cache: false}).done =>\r
-      Pettanr.History.lock_url = @item.edit_url()\r
-      @editor()\r
-      @trigger('done', @params)\r
+    if Pettanr.History.lock\r
+      @trigger('lock', @params)\r
+    else\r
+      @trigger('title', @params)\r
+      @set_model()\r
+      panel = new Pettanr.Panel({id: @params['id']})\r
+      @item = panel.with_elements()\r
+      @item.fetch({cache: false}).done =>\r
+        @editor(@item.edit_url())\r
+        @trigger('done', @params)\r
   \r
   editor: () ->\r
     editor = new Editor.PanelEditor({root_item: @item, operators: @operators})\r
     editor.render()\r
   \r
   editor: () ->\r
     editor = new Editor.PanelEditor({root_item: @item, operators: @operators})\r
     editor.render()\r
+    Pettanr.History.lock = {url: @item.new_url(), form: editor}\r
     @trigger('ready', editor)\r
   \r
   create: () ->\r
     @trigger('ready', editor)\r
   \r
   create: () ->\r
index 24fbd6a..99cbbb0 100644 (file)
@@ -7,7 +7,7 @@ class Editor.PanelEditor extends Backbone.View
     @operators = options.operators\r
     @item = @panel\r
     @dialog = new Editor.PanelEditor.Dialog({\r
     @operators = options.operators\r
     @item = @panel\r
     @dialog = new Editor.PanelEditor.Dialog({\r
-      parent: this\r
+      parent: this, operators: @operators\r
     })\r
     @body = new Pettanr.Views.Panel.Body.Edit({\r
       panel: @root_item(),\r
     })\r
     @body = new Pettanr.Views.Panel.Body.Edit({\r
       panel: @root_item(),\r
@@ -45,8 +45,8 @@ class Editor.PanelEditor extends Backbone.View
   \r
   render: () ->\r
     this.$el.html('')\r
   \r
   render: () ->\r
     this.$el.html('')\r
-    this.$el.append(@dialog.render().el)\r
-    #@dialog.$el.dialog({autoOpen: false,      width: 640, height: 560    })\r
+    this.$el.append(@dialog.render().el)\r
+    @dialog.$el.dialog({autoOpen: false,      width: 640, height: 560    })\r
     this.$el.append(@body.render().el)\r
     this.$el.append(@dock.render().el)\r
     @dock.element_bay.add_new_tab()\r
     this.$el.append(@body.render().el)\r
     this.$el.append(@dock.render().el)\r
     @dock.element_bay.add_new_tab()\r
@@ -66,7 +66,6 @@ class Editor.PanelEditor extends Backbone.View
   \r
   quit: () ->\r
     @dialog.$el.dialog('destroy')\r
   \r
   quit: () ->\r
     @dialog.$el.dialog('destroy')\r
-    Pettanr.History.lock_url = null  # release editor\r
   \r
   http_post: (url, dock) ->\r
     @trigger('http_post', url, this)  # send editor\r
   \r
   http_post: (url, dock) ->\r
     @trigger('http_post', url, this)  # send editor\r
@@ -99,8 +98,52 @@ class Editor.PanelEditor.Dialog extends Backbone.View
   \r
   initialize: (options) ->\r
     @parent = options.parent\r
   \r
   initialize: (options) ->\r
     @parent = options.parent\r
+    @operators = options.operators\r
+    @history = new Pettanr.Views.History({parent: this})\r
+    @listenTo(@history, 'http_get', @http_get)\r
   \r
   render: () ->\r
     this.$el.html('')\r
   \r
   render: () ->\r
     this.$el.html('')\r
+    @history.render()\r
     this\r
   \r
     this\r
   \r
+  refresh: (view) ->\r
+    this.$el.html('')\r
+    this.$el.append(@history.el)\r
+    rb = new Tag.RowBreak()\r
+    this.$el.append(rb.render().el)\r
+    this.$el.append(view.el)\r
+  \r
+  getter_proxy: () ->\r
+    proxy = new Pettanr.Proxy({operators: @operators})\r
+    @listenTo(proxy, 'ready', @ready)\r
+    @listenTo(proxy, 'title', @title)\r
+    @listenTo(proxy, 'title', @push_history)\r
+    @listenTo(proxy, 'done', @done)\r
+    @listenTo(proxy, 'lock', @lock)\r
+    proxy\r
+  \r
+  http_get: (url, form) ->\r
+    @getter_proxy().http_get(url, form)\r
+  \r
+  get: (params, form) ->\r
+    @getter_proxy().get(params, form)\r
+  \r
+  ready: (view) ->\r
+    @listenTo(view, 'http_get', @http_get)\r
+    # @listenTo(view, 'http_post', @http_post)\r
+    @refresh(view)\r
+  \r
+  done: (params) ->\r
+    this.$el.dialog('open')\r
+  \r
+  lock: (params) ->\r
+    console.log('_lock')\r
+  \r
+  push_history: (params, str = null) ->\r
+    @history.push(params, str)\r
+  \r
+  title: (params, str = null) ->\r
+    t = str || I18n.t(params['controller'] + '.' + params['action'] + '.title')\r
+    this.$el.dialog({title: t})\r
+  \r
index 63f6ee3..b550e39 100644 (file)
@@ -416,38 +416,20 @@ class Editor.EditorModule.DockModule.NewElementButton extends Backbone.View
     this.$el.html('')\r
     icon = new Pettanr.Image.Icon({item: @model})\r
     linked_icon = new Editor.EditorModule.DockModule.NewElementLinkedButton({\r
     this.$el.html('')\r
     icon = new Pettanr.Image.Icon({item: @model})\r
     linked_icon = new Editor.EditorModule.DockModule.NewElementLinkedButton({\r
-      attr: {href: '#event' },\r
-      content: icon.render().el,\r
-      handler_name: 'click'\r
+      attr: {href: '#' },\r
+      content: icon.render().el\r
     })\r
     @listenTo(linked_icon, 'click', @click)\r
     this.$el.append(linked_icon.render().el)\r
     this\r
   \r
   click: () ->\r
     })\r
     @listenTo(linked_icon, 'click', @click)\r
     this.$el.append(linked_icon.render().el)\r
     this\r
   \r
   click: () ->\r
-    @set_dialog()\r
-    @set_form()\r
-    @dialog().$el.dialog('open')\r
-  \r
-  set_dialog: () ->\r
-    @params = {\r
+    params = {\r
       controller: @model.path_name(), action: 'index',\r
       page_size: 6\r
     }\r
       controller: @model.path_name(), action: 'index',\r
       page_size: 6\r
     }\r
-    @list = Locmare.ListGroup.list(\r
-      @model.path_name(), 'index', @operators(), @params\r
-    )\r
-    @list.open(() =>\r
-      pager = Locmare.ListGroupModule.LibModule.Pager.factory(@list.page_status, @params)\r
-      f = new Locmare.Filer({\r
-        el: @dialog().$el,\r
-        item_name: @model.item_name(), \r
-        items: @list.items(), \r
-        pager: pager, \r
-        operators: @operators()\r
-      })\r
-    )\r
-    this\r
+    @dialog().get(params, null)\r
+    @set_form()\r
   \r
   set_form: () ->\r
     @form_wrapper().select(@model)\r
   \r
   set_form: () ->\r
     @form_wrapper().select(@model)\r
@@ -481,7 +463,7 @@ class Editor.EditorModule.DockModule.NewElementFormWrapper extends Backbone.View
     @parent = options.parent\r
   \r
   clear: () ->\r
     @parent = options.parent\r
   \r
   clear: () ->\r
-    this.$el.html('new form')\r
+    this.$el.html('')\r
     this\r
   \r
   render: () ->\r
     this\r
   \r
   render: () ->\r
index 419fbbe..54b22da 100644 (file)
@@ -42,6 +42,9 @@ class Locmare.FormBase extends Backbone.View
   image_dir: () ->\r
     '/images/'\r
   \r
   image_dir: () ->\r
     '/images/'\r
   \r
+  quit: () ->\r
+    null\r
+  \r
 class Locmare.Form extends Locmare.FormBase\r
   \r
   @factory: (options) ->\r
 class Locmare.Form extends Locmare.FormBase\r
   \r
   @factory: (options) ->\r
index 93d72de..10bea48 100644 (file)
@@ -117,32 +117,6 @@ class Pettanr
   @cache = {}\r
   @credits = {}\r
   \r
   @cache = {}\r
   @credits = {}\r
   \r
-  class Pettanr.Dialog extends Backbone.View\r
-    \r
-    initialize: (options) ->\r
-      super(options)\r
-    \r
-    render: () ->\r
-      this.$el.html('')\r
-      this\r
-    \r
-    refresh: (body) ->\r
-      @listenTo(body, 'navigate', @navigate)\r
-      this.$el.html(body.render().el)\r
-    \r
-    fire: (params) ->\r
-      c = Pettanr[Pettanr.camelize(params['controller']) + 'Controller']\r
-      controller = new c\r
-      controller.params = params\r
-      @listenTo(controller, 'ready', @refresh)\r
-      # ignore retitle message\r
-      # @listenTo(controller, 'retitle', @retitle)\r
-      controller[params['action']]()\r
-    \r
-    local_navigate: (url) ->\r
-      @router.local_navigate(url, true)\r
-    \r
-  \r
   #>> https://gist.github.com/davidjbeveridge/3813724\r
   @xeach: (arr, func, index=0) ->\r
     if index < arr.length then [ func(arr[index], index), @xeach(arr, func, index + 1)... ] else []\r
   #>> https://gist.github.com/davidjbeveridge/3813724\r
   @xeach: (arr, func, index=0) ->\r
     if index < arr.length then [ func(arr[index], index), @xeach(arr, func, index + 1)... ] else []\r
index 6ed77b5..0dbcb75 100644 (file)
@@ -19,6 +19,7 @@ class Pettanr.Proxy
     @listenTo(controller, 'ready', @ready)\r
     @listenTo(controller, 'title', @title)\r
     @listenTo(controller, 'done', @done)\r
     @listenTo(controller, 'ready', @ready)\r
     @listenTo(controller, 'title', @title)\r
     @listenTo(controller, 'done', @done)\r
+    @listenTo(controller, 'lock', @lock)\r
     action_name = params['action']\r
     controller[action_name]()\r
   \r
     action_name = params['action']\r
     controller[action_name]()\r
   \r
@@ -31,6 +32,9 @@ class Pettanr.Proxy
   done: (params) ->\r
     @trigger('done', params)\r
   \r
   done: (params) ->\r
     @trigger('done', params)\r
   \r
+  lock: (params) ->\r
+    @trigger('lock', params)\r
+  \r
   deny: (params, form, safe_url) ->\r
     @trigger('deny', params, form, safe_url)\r
   \r
   deny: (params, form, safe_url) ->\r
     @trigger('deny', params, form, safe_url)\r
   \r
index 8a0a3cf..9794c6d 100644 (file)
@@ -1,15 +1,19 @@
 class Pettanr.History extends Backbone.History\r
 class Pettanr.History extends Backbone.History\r
-  @lock_url = null\r
+  @lock = null\r
   \r
   checkUrl: (e) ->\r
   \r
   checkUrl: (e) ->\r
-    if Pettanr.History.lock_url\r
+    if Pettanr.History.lock\r
       if confirm('leave? edit data unsaved')\r
       if confirm('leave? edit data unsaved')\r
-        Pettanr.History.lock_url = null\r
+        Pettanr.History.release()\r
       else\r
       else\r
-        @history.pushState({}, document.title, '/' + Pettanr.History.lock_url)\r
+        @history.pushState({}, document.title, '/' + Pettanr.History.lock.url)\r
         return false\r
     super(e)\r
         return false\r
     super(e)\r
-    \r
+  \r
+  @release: () ->\r
+    Pettanr.History.lock.form.quit()\r
+    Pettanr.History.lock = null\r
+  \r
 Backbone.history = new Pettanr.History\r
 class Pettanr.Router extends Backbone.Router\r
   \r
 Backbone.history = new Pettanr.History\r
 class Pettanr.Router extends Backbone.Router\r
   \r
index 77710fe..18bdd1d 100644 (file)
@@ -90,6 +90,7 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base
     @listenTo(proxy, 'title', @body_title)\r
     @listenTo(proxy, 'title', @push_history)\r
     @listenTo(proxy, 'done', @body_done)\r
     @listenTo(proxy, 'title', @body_title)\r
     @listenTo(proxy, 'title', @push_history)\r
     @listenTo(proxy, 'done', @body_done)\r
+    @listenTo(proxy, 'lock', @body_lock)\r
     proxy\r
   \r
   body_http_get: (url, form) ->\r
     proxy\r
   \r
   body_http_get: (url, form) ->\r
@@ -107,6 +108,9 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base
     url = Pettanr.params_to_url(params)\r
     @global_router.navigate(url, {trigger: false})\r
   \r
     url = Pettanr.params_to_url(params)\r
     @global_router.navigate(url, {trigger: false})\r
   \r
+  body_lock: (params) ->\r
+    console.log('_lock')\r
+  \r
   push_history: (params, str = null) ->\r
     @history.push(params, str)\r
   \r
   push_history: (params, str = null) ->\r
     @history.push(params, str)\r
   \r