X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=app%2Fassets%2Fjavascripts%2Feditor%2Fpanel_editor%2Fdock.js.coffee;h=f1e3b22c628d7e899152f50c165d1b7562c69d17;hb=3503fb540493439939ef7f080e650a1a9fc79286;hp=fafb917ede83bb52acb0603122afe91cb85886d3;hpb=6dcbb35feb41e47ccdf37876c3d2e39eea30b285;p=pettanr%2Fpettanr.git diff --git a/app/assets/javascripts/editor/panel_editor/dock.js.coffee b/app/assets/javascripts/editor/panel_editor/dock.js.coffee index fafb917e..f1e3b22c 100644 --- a/app/assets/javascripts/editor/panel_editor/dock.js.coffee +++ b/app/assets/javascripts/editor/panel_editor/dock.js.coffee @@ -40,7 +40,14 @@ class Editor.PanelEditor.Dock extends Editor.EditorModule.DockBase parent: @scenario_bay }) ) - @listenTo(@root_bay.body, 'put', @put) + @listenTo(@root_bay.body, 'http_post', @http_post) + @listenTo(@root_bay.body, 'save:success', @post_success) + @listenTo(@root_bay.body, 'save:fail', @post_fail) + @listenTo(@element_bay, 'add:credit', @add_credit) + @listenTo(@element_bay, 'pick', @pick) + @listenTo(@element_bay, 'dialog:open', @open_dialog) + @listenTo(@element_bay, 'dialog:close', @close_dialog) + @listenTo(@element_bay, 'destroy', @destroy) render: () -> this.$el.html('') @@ -53,17 +60,13 @@ class Editor.PanelEditor.Dock extends Editor.EditorModule.DockBase this init_tabs: () -> + @element_bay.init_tabs() + @scenario_bay.init_tabs() this.$el.tabs({ activate: (e, ui) -> ui.newPanel.trigger('activate') }) - add_element_to_element_tab: (element) -> - @element_bay.add_element(element) - - add_element_to_scenario_tab: (element) -> - @scenario_bay.add_element(element) - editor: () -> @parent @@ -76,654 +79,40 @@ class Editor.PanelEditor.Dock extends Editor.EditorModule.DockBase dom_labels_class: () -> @dom_class() + '-labels' - put: () -> - @trigger('put') + http_post: (url, root_form) -> + @trigger('http_post', url, this) # send dock false - save: (options) -> - attrs = @save_data() - @root_bay.body.form.save(attrs, options) - - save_data: () -> - attrs = @root_bay.save_data() - _.extend(attrs, @element_bay.save_data()) - attrs - - valid: () -> - @root_bay.body.form.valid() - - invalid: () -> - @root_bay.body.form.invalid() - -class Editor.EditorModule.DockModule.RootBay extends Editor.EditorModule.DockModule.SimpleBay - - render: () -> - @body.render() - - save_data: () -> - @body.form.save_data() - -class Editor.EditorModule.DockModule.TabModule.RootBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel - -class Editor.EditorModule.DockModule.TabModule.RootBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody - - initialize: (options) -> - super(options) - @form = Locmare.Form.factory({ - form_name: @root_item().item_name(), - use_name: 'default' - item: @root_item(), - mounted: @mounted(), - submit: 'default' - operators: @dock().editor().operators, - action: '/' + @root_item().table_name() + '/' + Pettanr.to_s(@root_item().get('id')) - }) - @listenTo(@form, 'put', @put) - - render: () -> - super() - @el.className = @bay().body.dom_class() - this.$el.html(@form.render().el) - this - - mounted: () -> - true - - dock: () -> - @parent.dock() - - root_item: () -> - @dock().root_item() - - put: () -> - @trigger('put') - false - -class Editor.EditorModule.DockModule.ElementBay extends Editor.EditorModule.DockModule.BoardBay - - initialize: (options) -> - super(options) - @elements_tabs = new Editor.EditorModule.DockModule.ElementBay.ElementsTabs({ - }) - @listenTo(@elements_tabs, 'sorted', @sorted) - - add_element: (element) -> - index = element.get('z') - 1 - tab = new Editor.EditorModule.DockModule.ElementBoard({ - parent: this, index: index, name: element.item_name(), element: element - }) - bb = new Editor.EditorModule.DockModule.TabModule.ElementBoardBody({parent: tab}) - @add_tab( - tab, - new Editor.EditorModule.DockModule.TabModule.ElementBoardLabel({parent: tab, name: element.item_name()}), - bb - ) - @elements_tabs.add_element_tab(tab) - @elements_tabs.$el.tabs('refresh') - bb.form - - add_new_tab: () -> - tab = new Editor.EditorModule.DockModule.NewElementBoard({ - parent: this, index: 0, name: 'new' - }) - bb = new Editor.EditorModule.DockModule.TabModule.NewElementBoardBody({parent: tab}) - @add_tab( - tab, - new Editor.EditorModule.DockModule.TabModule.NewElementBoardLabel({parent: tab}), - bb - ) - @elements_tabs.add_element_tab(tab) - - render: () -> - this.$el.html('') - @delegateEvents({'activate': 'activate'}) - this.$el.attr('id', @body.dom_id()) - this.$el.append(@elements_tabs.render().el) - _this = this - @elements_tabs.$el.tabs({ - activate: (e, ui) -> - ui.newPanel.trigger('activate') - }) - this - - activate: () -> - _.each @tabs, (tab) -> - return if not tab.element # without new element tab - console.log(tab.body.$el.css('display')) - if tab.body.$el.css('display') != 'none' - tab.body.refresh() - - sorted: () -> - # data-z copy to model - _.each @tabs, (tab) -> - if tab.element # without new_tab - z = parseInt(tab.label.$el.attr('data-z')) - tab.element.set({ - z: z - }, {silent: true}) - tab.element.trigger('sort') - - panel_body: () -> - @dock().editor().body - - save_data: () -> - attrs = {} - _.each @tabs, (tab) -> - return if not tab.element # without new element tab - form = tab.body.form - name = form.item.table_name() + '_attributes' - attrs[name] ||= [] - attrs[name].push(form.save_data()) - attrs - -class Editor.EditorModule.DockModule.ElementBay.ElementsTabs extends Backbone.View - tagName: 'div' - className: 'elements_tabs ui-tabs-vertical ui-helper-clearfix' - - initialize: (options) -> - super(options) - @inner_elements_tabs = new Editor.EditorModule.DockModule.ElementBay.InnerElementsTabs({ - }) - @listenTo(@inner_elements_tabs, 'sorted', @sorted) - - render: () -> - this.$el.html('') - this.$el.append(@inner_elements_tabs.render().$el) - this - - add_element_tab: (tab) -> - @inner_elements_tabs.add_label(tab.label) - this.$el.append(tab.body.render().$el) - - sorted: () -> - # data-z copy to model - @trigger('sorted') + post_success: (model, response) -> + @trigger('save:success', model, response) -class Editor.EditorModule.DockModule.ElementBay.InnerElementsTabs extends Backbone.View - tagName: 'ul' + post_fail: (model, response) -> + @trigger('save:fail', response) - initialize: (options) -> - super(options) - @labels = [] - - render: () -> - this.$el.html('') - this.$el.addClass('inner-elements-tabs') - _.each @zorderd_labels(), (label) => - this.$el.append(label.render().$el) - _this = this - this.$el.sortable { - update: (event, ui) -> - z = 1 - $('.z-label', $(@)).map -> - $(@).attr('data-z', z) - z++ - _this.trigger('sorted') - } - this - - zorderd_labels: () -> - res = [] - _.each @labels, (label) => - res[label.z()] = label - res - - add_label: (label) -> - #z = label.z() - @labels.push(label) # insert array - @render() - label.add_label() - -class Editor.EditorModule.DockModule.TabModule.ElementBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel - -class Editor.EditorModule.DockModule.TabModule.ElementBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody - - render: () -> - @body.render() -class Editor.EditorModule.DockModule.ElementBoard extends Editor.EditorModule.DockModule.Board - - initialize: (options) -> - super(options) - @element = options.element - - dom_id: () -> - super() + '-' + @element.get('id') # use tab index - -class Editor.EditorModule.DockModule.TabModule.ElementBoardLabel extends Editor.EditorModule.DockModule.TabModule.BoardLabel - - render: () -> - super() - this.$el.attr('data-z', @z()) - this.$el.removeClass('ui-corner-top') - this.$el.addClass('ui-corner-left z-label') - _this = this - this.$el.mouseover -> - _this.element().trigger('active') - this.$el.mouseout -> - _this.element().trigger('inactive') - this - - z: () -> - @element().get('z') - - add_label: () -> - this.$el.attr('id', @dom_id()) - -class Editor.EditorModule.DockModule.TabModule.ElementBoardBody extends Editor.EditorModule.DockModule.TabModule.BoardBody - - initialize: (options) -> - super(options) - @form = Locmare.Form.factory({ - form_name: @element().item_name(), - use_name: 'default' - item: @element(), - mounted: @mounted(), - submit: null, - operators: @dock().editor().operators, - action: '/' + @element().table_name() + '/' + Pettanr.to_s(@element().get('id')) - }) - - render: () -> - @delegateEvents({'activate': 'activate'}) - this.$el.attr('id', @dom_id()) - this.$el.html(@form.render().el) - this - - add_element: (element) -> - @form.add_element(element) - - activate: () -> - @refresh() - - refresh: () -> - @form.refresh() - - mounted: () -> - true - - element: () -> - @parent.element - -class Editor.EditorModule.DockModule.NewElementBoard extends Editor.EditorModule.DockModule.Board - - initialize: (options) -> - super(options) - @panel = @parent.dock().editor().panel - -class Editor.EditorModule.DockModule.TabModule.NewElementBoardLabel extends Editor.EditorModule.DockModule.TabModule.BoardLabel - - render: () -> - super() - this.$el.attr('data-z', @z()) - this.$el.removeClass('ui-corner-top') - this.$el.addClass('ui-corner-left') - this - - face: () -> - this.$el.append() - icon = new Pettanr.Image.SymbolImg({attr: {src: '/images/new.gif'}}) - linked_elements_tab = new Tag.A({ - attr: {href: '#' + @board().body.dom_id() }, - content: icon.render().el - }) - this.$el.append(linked_elements_tab.render().el) - - z: () -> - 0 - - add_label: () -> - this.$el.attr('id', @dom_id()) - -class Editor.EditorModule.DockModule.TabModule.NewElementBoardBody extends Editor.EditorModule.DockModule.TabModule.BoardBody - className: 'new-element-board-body' - - initialize: (options) -> - super(options) - - render: () -> - this.$el.attr('id', @dom_id()) - @buttons = new Editor.EditorModule.DockModule.NewElementButtons({ - parent: this, element_models: @element_models() - }) - @form_wrapper = new Editor.EditorModule.DockModule.NewElementFormWrapper({ - parent: this - }) - this.$el.append(@buttons.render().el) - this.$el.append(@form_wrapper.clear().el) - this - - panel: () -> - @parent.panel - - element_models: () -> - @panel().my_class().child_models() - -class Editor.EditorModule.DockModule.NewElementButtons extends Backbone.View - tagName: 'div' - className: 'new-element-buttons' + add_credit: (element) -> + @trigger('add:credit', element) - initialize: (options) -> - super(options) - @parent = options.parent - @element_models = options.element_models - - render: () -> - _.each @element_models, (model) => - button = new Editor.EditorModule.DockModule.NewElementButton({ - parent: this, model: model - }) - this.$el.append(button.render().el) - this - -class Editor.EditorModule.DockModule.NewElementButton extends Backbone.View - tagName: 'div' - - initialize: (options) -> - super(options) - @parent = options.parent - @model = options.model - - render: () -> - 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' - }) - @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 = { - 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 - - set_form: () -> - @form_wrapper().select(@model) - - operators: () -> - @editor().operators - - form_wrapper: () -> - @parent.parent.form_wrapper - - dock: () -> - @parent.parent.dock() - - dialog: () -> - @editor().dialog - - editor: () -> - @dock().parent - -class Editor.EditorModule.DockModule.NewElementLinkedButton extends Tag.A - - click: () -> - @trigger('click') - return false - -class Editor.EditorModule.DockModule.NewElementFormWrapper extends Backbone.View - tagName: 'div' - - initialize: (options) -> - super(options) - @parent = options.parent - - clear: () -> - this.$el.html('new form') - this - - render: () -> - this.$el.html(@model.item_name()) - - select: (model) -> - @model = model - @render() - -class Editor.EditorModule.DockModule.ScenarioBay extends Editor.EditorModule.DockModule.SimpleBay - - render: () -> - @body.render() - - add_element: (element) -> - element_li = @body.add_element(element) - element_li.body.form - - save_data: () -> - @body.form.save_data() - -class Editor.EditorModule.DockModule.TabModule.ScenarioBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel - -class Editor.EditorModule.DockModule.TabModule.ScenarioBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody - - initialize: (options) -> - super(options) - @elements = new Editor.EditorModule.DockModule.ScenarioBay.Elements({ - parent: this, - }) - @listenTo(@elements, 'sorted', @sorted) - - add_element: (element) -> - element_li = @elements.add_element(element) - - render: () -> - super() - this.$el.append(@elements.render().el) - @delegateEvents({'activate': 'activate'}) - this - - activate: () -> - @elements.refresh() - - sorted: () -> - # data-t copy to model - _.each @elements.element_lis, (element_li) => - t = parseInt(element_li.$el.attr('data-t')) - element_li.element.set({ - t: t - }, {silent: true}) - element_li.element.trigger('sort') - - panel_body: () -> - @dock().editor().body - - save_data: () -> - attrs = {} - _.each @tabs, (tab) -> - return if not tab.element # without new element tab - form = tab.body.form - name = form.item.table_name() + '_attributes' - attrs[name] ||= [] - attrs[name].push(form.save_data()) - attrs - -class Editor.EditorModule.DockModule.ScenarioBay.Elements extends Backbone.View - tagName: 'ul' - className: 'scenarios_elements' - - initialize: (options) -> - super(options) - @parent = options.parent - @element_lis = [] - - render: () -> - this.$el.html('') - _.each @scenario_elements(), (element_li) => - this.$el.append(element_li.render().$el) - _this = this - this.$el.sortable { - update: (event, ui) -> - t = 0 - $('.t-label', $(@)).map -> - $(@).attr('data-t', t) - t++ - _this.trigger('sorted') - } - this - - refresh: () -> - _.each @element_lis, (element_li) => - element_li.refresh() - - scenario_elements: () -> - res = [] - _.each @element_lis, (element_li) => - res[element_li.t()] = element_li - res - - add_element: (element) -> - e = new Editor.EditorModule.DockModule.ScenarioBay.Element({ - parent: this, - element: element - }) - @element_lis.push(e) # insert array - @render() - e - - sorted: () -> - # data-t copy to model - @trigger('sorted') - -class Editor.EditorModule.DockModule.ScenarioBay.Element extends Backbone.View - tagName: 'li' - className: 't-label' - - initialize: (options) -> - super(options) - @parent = options.parent - @element = options.element - - render: () -> - this.$el.html('') - this.$el.attr('data-t', @t()) - @label = new Editor.EditorModule.DockModule.ScenarioBay.ElementLabel({ - parent: this, - }) - @body = new Editor.EditorModule.DockModule.ScenarioBay.ElementBody({ - parent: this, - }) - this.$el.append(@label.render().$el) - this.$el.append(@body.render().$el) - rb = new Tag.RowBreak() - this.$el.append(rb.render().el) - this - - refresh: () -> - @body.form.refresh() - - t: () -> - @element.get('t') - - dom_id: () -> - super() + '-' + @element.get('id') # use tab index - -class Editor.EditorModule.DockModule.ScenarioBay.ElementLabel extends Backbone.View - className: 'scenario-label' - - initialize: (options) -> - super(options) - @parent = options.parent - - render: () -> - this.$el.append(@element().element_face().render().el) - _this = this - this.$el.mouseover -> - _this.element().trigger('active') - this.$el.mouseout -> - _this.element().trigger('inactive') - this - - element: () -> - @parent.element - - elements: () -> - @parent.parent - - bay: () -> - @elements().parent - - dock: () -> - @bay().dock() - -class Editor.EditorModule.DockModule.ScenarioBay.ElementBody extends Backbone.View - - initialize: (options) -> - super(options) - @parent = options.parent - @form = Locmare.Form.factory({ - form_name: @element().item_name(), - use_name: 'scenario' - item: @element(), - mounted: @mounted(), - submit: null, - operators: @dock().editor().operators, - action: '/' + @element().table_name() + '/' + Pettanr.to_s(@element().get('id')) - }) - - render: () -> - this.$el.html(@form.render().el) - this - - element: () -> - @parent.element - - elements: () -> - @parent.parent - - bay: () -> - @elements().parent - - dock: () -> - @bay().dock() - - mounted: () -> - true - - element: () -> - @parent.element - -class Editor.EditorModule.DockModule.NewBay extends Editor.EditorModule.DockModule.BoardBay - - -class Editor.EditorModule.DockModule.TabModule.NewBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel + save: () -> + # merge panel and elements + attrs = @root_bay.save_data() + _.extend(attrs, @element_bay.save_data()) + # save json data by panel form + @root_bay.body.form.save(attrs) - -class Editor.EditorModule.DockModule.TabModule.NewBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody + pick: (new_item) -> + @scenario_bay.pick(new_item) + @trigger('add:element', new_item) - initialize: (options) -> - super(options) + open_dialog: (dialog) -> + @trigger('dialog:open', dialog) -class Editor.EditorModule.DockModule.NewBoard extends Editor.EditorModule.DockModule.Board + close_dialog: (dialog) -> + @trigger('dialog:close', dialog) -class Editor.EditorModule.DockModule.TabModule.NewBoardLabel extends Editor.EditorModule.DockModule.TabModule.BoardLabel + destroy: (element) -> + @trigger('destroy', element) + @scenario_bay.remove_element(element) -class Editor.EditorModule.DockModule.TabModule.NewBoardBody extends Editor.EditorModule.DockModule.TabModule.BoardBody - - initialize: (options) -> - super(options) -# form_manager = Pettanr::Application::manifest.form_managers[self.root_item.form_name] -# form = form_manager.open self.root_item, @dock_body.dock.editor.operators, mounted -# bucket = Bucket.new self,form + quit: () -> + @root_bay.body.form.quit()