From 4aee0b91a00feddf4b1fcd2ff3e7247efc06f451 Mon Sep 17 00:00:00 2001 From: yasushiito Date: Tue, 10 Mar 2015 18:39:52 +0900 Subject: [PATCH] fix editor lock --- app/assets/javascripts/controllers.js.coffee | 17 +++++--- .../javascripts/controllers/panels.js.coffee | 31 +++++++------ .../javascripts/editor/panel_editor.js.coffee | 51 ++++++++++++++++++++-- .../javascripts/editor/panel_editor/dock.js.coffee | 30 +++---------- app/assets/javascripts/locmare/form.js.coffee | 3 ++ app/assets/javascripts/pettanr.js.coffee | 26 ----------- app/assets/javascripts/pettanr/proxy.js.coffee | 4 ++ app/assets/javascripts/routes.js.coffee | 14 +++--- app/assets/javascripts/views/layout.js.coffee | 4 ++ 9 files changed, 103 insertions(+), 77 deletions(-) diff --git a/app/assets/javascripts/controllers.js.coffee b/app/assets/javascripts/controllers.js.coffee index bee7d7b9..12fdb6da 100644 --- a/app/assets/javascripts/controllers.js.coffee +++ b/app/assets/javascripts/controllers.js.coffee @@ -74,15 +74,14 @@ class Pettanr.AppController @item.boosts 'post' # Backbone.Model has defaults property #@item.supply_default() - Pettanr.History.lock_url = @item.new_url() set_edit: () -> @set_model() @item = new @my_model_class({id: @params['id']}) @item.fetch({cache: true}).done => @item.boosts 'post' - Pettanr.History.lock_url = @item.edit_url() @render_form() + Pettanr.History.lock = {url: @item.edit_url(), form: @form} render_form: () -> @form = Locmare.Form.factory({ @@ -98,15 +97,23 @@ class Pettanr.AppController @trigger('ready', @form) form_new: () -> - @set_new() - @render_form() + if Pettanr.History.lock + @trigger('lock', @params) + else + @set_new() + @render_form() + Pettanr.History.lock = {url: @item.new_url(), form: @form} form_edit: () -> - @set_edit() + if Pettanr.History.lock + @trigger('lock', @params) + else + @set_edit() post_success: (model, response) -> @trigger('redirect', @form.item.show_url()) @trigger('success', model, response) + Pettanr.History.release() post_fail: (model, response) -> @trigger('fail', response) diff --git a/app/assets/javascripts/controllers/panels.js.coffee b/app/assets/javascripts/controllers/panels.js.coffee index 6d8819dc..cf5ef67e 100644 --- a/app/assets/javascripts/controllers/panels.js.coffee +++ b/app/assets/javascripts/controllers/panels.js.coffee @@ -50,25 +50,30 @@ class Pettanr.PanelsController extends Pettanr.AppController count: () -> new: () -> - @trigger('title', @params) - @set_new() - Pettanr.History.lock_url = @item.new_url() - @editor() - @trigger('done', @params) + if Pettanr.History.lock + @trigger('lock', @params) + else + @trigger('title', @params) + @set_new() + @editor(@item.new_url()) + @trigger('done', @params) edit: () -> - @trigger('title', @params) - @set_model() - panel = new Pettanr.Panel({id: @params['id']}) - @item = panel.with_elements() - @item.fetch({cache: false}).done => - Pettanr.History.lock_url = @item.edit_url() - @editor() - @trigger('done', @params) + if Pettanr.History.lock + @trigger('lock', @params) + else + @trigger('title', @params) + @set_model() + panel = new Pettanr.Panel({id: @params['id']}) + @item = panel.with_elements() + @item.fetch({cache: false}).done => + @editor(@item.edit_url()) + @trigger('done', @params) editor: () -> editor = new Editor.PanelEditor({root_item: @item, operators: @operators}) editor.render() + Pettanr.History.lock = {url: @item.new_url(), form: editor} @trigger('ready', editor) create: () -> diff --git a/app/assets/javascripts/editor/panel_editor.js.coffee b/app/assets/javascripts/editor/panel_editor.js.coffee index 24fbd6a8..99cbbb07 100644 --- a/app/assets/javascripts/editor/panel_editor.js.coffee +++ b/app/assets/javascripts/editor/panel_editor.js.coffee @@ -7,7 +7,7 @@ class Editor.PanelEditor extends Backbone.View @operators = options.operators @item = @panel @dialog = new Editor.PanelEditor.Dialog({ - parent: this + parent: this, operators: @operators }) @body = new Pettanr.Views.Panel.Body.Edit({ panel: @root_item(), @@ -45,8 +45,8 @@ class Editor.PanelEditor extends Backbone.View render: () -> this.$el.html('') - # this.$el.append(@dialog.render().el) - #@dialog.$el.dialog({autoOpen: false, width: 640, height: 560 }) + this.$el.append(@dialog.render().el) + @dialog.$el.dialog({autoOpen: false, width: 640, height: 560 }) this.$el.append(@body.render().el) this.$el.append(@dock.render().el) @dock.element_bay.add_new_tab() @@ -66,7 +66,6 @@ class Editor.PanelEditor extends Backbone.View quit: () -> @dialog.$el.dialog('destroy') - Pettanr.History.lock_url = null # release editor http_post: (url, dock) -> @trigger('http_post', url, this) # send editor @@ -99,8 +98,52 @@ class Editor.PanelEditor.Dialog extends Backbone.View initialize: (options) -> @parent = options.parent + @operators = options.operators + @history = new Pettanr.Views.History({parent: this}) + @listenTo(@history, 'http_get', @http_get) render: () -> this.$el.html('') + @history.render() this + refresh: (view) -> + this.$el.html('') + this.$el.append(@history.el) + rb = new Tag.RowBreak() + this.$el.append(rb.render().el) + this.$el.append(view.el) + + getter_proxy: () -> + proxy = new Pettanr.Proxy({operators: @operators}) + @listenTo(proxy, 'ready', @ready) + @listenTo(proxy, 'title', @title) + @listenTo(proxy, 'title', @push_history) + @listenTo(proxy, 'done', @done) + @listenTo(proxy, 'lock', @lock) + proxy + + http_get: (url, form) -> + @getter_proxy().http_get(url, form) + + get: (params, form) -> + @getter_proxy().get(params, form) + + ready: (view) -> + @listenTo(view, 'http_get', @http_get) + # @listenTo(view, 'http_post', @http_post) + @refresh(view) + + done: (params) -> + this.$el.dialog('open') + + lock: (params) -> + console.log('_lock') + + push_history: (params, str = null) -> + @history.push(params, str) + + title: (params, str = null) -> + t = str || I18n.t(params['controller'] + '.' + params['action'] + '.title') + this.$el.dialog({title: t}) + diff --git a/app/assets/javascripts/editor/panel_editor/dock.js.coffee b/app/assets/javascripts/editor/panel_editor/dock.js.coffee index 63f6ee34..b550e396 100644 --- a/app/assets/javascripts/editor/panel_editor/dock.js.coffee +++ b/app/assets/javascripts/editor/panel_editor/dock.js.coffee @@ -416,38 +416,20 @@ class Editor.EditorModule.DockModule.NewElementButton extends Backbone.View this.$el.html('') icon = new Pettanr.Image.Icon({item: @model}) linked_icon = new Editor.EditorModule.DockModule.NewElementLinkedButton({ - attr: {href: '#event' }, - content: icon.render().el, - handler_name: 'click' + attr: {href: '#' }, + content: icon.render().el }) @listenTo(linked_icon, 'click', @click) this.$el.append(linked_icon.render().el) this click: () -> - @set_dialog() - @set_form() - @dialog().$el.dialog('open') - - set_dialog: () -> - @params = { + params = { controller: @model.path_name(), action: 'index', page_size: 6 } - @list = Locmare.ListGroup.list( - @model.path_name(), 'index', @operators(), @params - ) - @list.open(() => - pager = Locmare.ListGroupModule.LibModule.Pager.factory(@list.page_status, @params) - f = new Locmare.Filer({ - el: @dialog().$el, - item_name: @model.item_name(), - items: @list.items(), - pager: pager, - operators: @operators() - }) - ) - this + @dialog().get(params, null) + @set_form() set_form: () -> @form_wrapper().select(@model) @@ -481,7 +463,7 @@ class Editor.EditorModule.DockModule.NewElementFormWrapper extends Backbone.View @parent = options.parent clear: () -> - this.$el.html('new form') + this.$el.html('') this render: () -> diff --git a/app/assets/javascripts/locmare/form.js.coffee b/app/assets/javascripts/locmare/form.js.coffee index 419fbbeb..54b22da5 100644 --- a/app/assets/javascripts/locmare/form.js.coffee +++ b/app/assets/javascripts/locmare/form.js.coffee @@ -42,6 +42,9 @@ class Locmare.FormBase extends Backbone.View image_dir: () -> '/images/' + quit: () -> + null + class Locmare.Form extends Locmare.FormBase @factory: (options) -> diff --git a/app/assets/javascripts/pettanr.js.coffee b/app/assets/javascripts/pettanr.js.coffee index 93d72de9..10bea48e 100644 --- a/app/assets/javascripts/pettanr.js.coffee +++ b/app/assets/javascripts/pettanr.js.coffee @@ -117,32 +117,6 @@ class Pettanr @cache = {} @credits = {} - class Pettanr.Dialog extends Backbone.View - - initialize: (options) -> - super(options) - - render: () -> - this.$el.html('') - this - - refresh: (body) -> - @listenTo(body, 'navigate', @navigate) - this.$el.html(body.render().el) - - fire: (params) -> - c = Pettanr[Pettanr.camelize(params['controller']) + 'Controller'] - controller = new c - controller.params = params - @listenTo(controller, 'ready', @refresh) - # ignore retitle message - # @listenTo(controller, 'retitle', @retitle) - controller[params['action']]() - - local_navigate: (url) -> - @router.local_navigate(url, true) - - #>> https://gist.github.com/davidjbeveridge/3813724 @xeach: (arr, func, index=0) -> if index < arr.length then [ func(arr[index], index), @xeach(arr, func, index + 1)... ] else [] diff --git a/app/assets/javascripts/pettanr/proxy.js.coffee b/app/assets/javascripts/pettanr/proxy.js.coffee index 6ed77b52..0dbcb75d 100644 --- a/app/assets/javascripts/pettanr/proxy.js.coffee +++ b/app/assets/javascripts/pettanr/proxy.js.coffee @@ -19,6 +19,7 @@ class Pettanr.Proxy @listenTo(controller, 'ready', @ready) @listenTo(controller, 'title', @title) @listenTo(controller, 'done', @done) + @listenTo(controller, 'lock', @lock) action_name = params['action'] controller[action_name]() @@ -31,6 +32,9 @@ class Pettanr.Proxy done: (params) -> @trigger('done', params) + lock: (params) -> + @trigger('lock', params) + deny: (params, form, safe_url) -> @trigger('deny', params, form, safe_url) diff --git a/app/assets/javascripts/routes.js.coffee b/app/assets/javascripts/routes.js.coffee index 8a0a3cfa..9794c6d3 100644 --- a/app/assets/javascripts/routes.js.coffee +++ b/app/assets/javascripts/routes.js.coffee @@ -1,15 +1,19 @@ class Pettanr.History extends Backbone.History - @lock_url = null + @lock = null checkUrl: (e) -> - if Pettanr.History.lock_url + if Pettanr.History.lock if confirm('leave? edit data unsaved') - Pettanr.History.lock_url = null + Pettanr.History.release() else - @history.pushState({}, document.title, '/' + Pettanr.History.lock_url) + @history.pushState({}, document.title, '/' + Pettanr.History.lock.url) return false super(e) - + + @release: () -> + Pettanr.History.lock.form.quit() + Pettanr.History.lock = null + Backbone.history = new Pettanr.History class Pettanr.Router extends Backbone.Router diff --git a/app/assets/javascripts/views/layout.js.coffee b/app/assets/javascripts/views/layout.js.coffee index 77710fea..18bdd1d1 100644 --- a/app/assets/javascripts/views/layout.js.coffee +++ b/app/assets/javascripts/views/layout.js.coffee @@ -90,6 +90,7 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base @listenTo(proxy, 'title', @body_title) @listenTo(proxy, 'title', @push_history) @listenTo(proxy, 'done', @body_done) + @listenTo(proxy, 'lock', @body_lock) proxy body_http_get: (url, form) -> @@ -107,6 +108,9 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base url = Pettanr.params_to_url(params) @global_router.navigate(url, {trigger: false}) + body_lock: (params) -> + console.log('_lock') + push_history: (params, str = null) -> @history.push(params, str) -- 2.11.0