initialize: (options) ->\r
@panel = options.root_item\r
@item = @panel\r
- @dialog = new Editor.PanelEditor.Dialog({\r
- parent: this\r
- })\r
+ @dialogs = {}\r
@body = new Pettanr.Views.Panel.Body.Edit({\r
panel: @root_item(),\r
spot: null\r
@listenTo(@dock, 'add:element', @add_element)\r
@listenTo(@dock, 'add:credit', @add_credit)\r
@listenTo(@dock, 'destroy', @destroy)\r
+ @listenTo(@dock, 'dialog:open', @open_dialog)\r
+ @listenTo(@dock, 'dialog:close', @close_dialog)\r
\r
add_element: (element) ->\r
@body.add_element(element)\r
add_credit: (element) ->\r
@credits.add_picture(element.picture())\r
\r
+ open_dialog: (dialog) ->\r
+ @dialogs[dialog.cid] = dialog\r
+ \r
+ close_dialog: (dialog) ->\r
+ delete @dialogs[dialog.cid]\r
+ \r
destroy: (element, index) ->\r
@remove_element(element)\r
\r
\r
render: () ->\r
this.$el.html('')\r
- this.$el.append(@dialog.render().el)\r
- @dialog.$el.dialog({\r
- autoOpen: false,\r
- width: 750, \r
- height: 560\r
- })\r
this.$el.append(@body.render().el)\r
this.$el.append(@dock.render().el)\r
this.$el.append(@credits.render().el)\r
\r
quit: () ->\r
@dock.quit()\r
- @dialog.$el.dialog('destroy')\r
+ _.each @dialogs, (dialog) =>\r
+ @close_dialog(dialog)\r
\r
http_post: (url, dock) ->\r
@trigger('http_post', url, this) # send editor\r
stop: () ->\r
this.$el.dialog('close')\r
\r
+ close: () ->\r
+ @trigger('close')\r
+ \r
render: () ->\r
this.$el.html('')\r
this\r
@listenTo(@root_bay.body, 'save:fail', @post_fail)\r
@listenTo(@element_bay, 'add:credit', @add_credit)\r
@listenTo(@element_bay, 'pick', @pick)\r
+ @listenTo(@element_bay, 'dialog:open', @open_dialog)\r
+ @listenTo(@element_bay, 'dialog:close', @close_dialog)\r
@listenTo(@element_bay, 'destroy', @destroy)\r
\r
render: () ->\r
@scenario_bay.add_element(new_item)\r
@trigger('add:element', new_item)\r
\r
+ open_dialog: (dialog) ->\r
+ @trigger('dialog:open', dialog)\r
+ \r
+ close_dialog: (dialog) ->\r
+ @trigger('dialog:close', dialog)\r
+ \r
destroy: (element) ->\r
@trigger('destroy', element)\r
\r
bb\r
)\r
@listenTo(bb, 'pick', @pick)\r
+ @listenTo(bb, 'dialog:open', @open_dialog)\r
+ @listenTo(bb, 'dialog:close', @close_dialog)\r
@boards.add_element_tab(@new_tab)\r
\r
render: () ->\r
@add_element(new_item)\r
@trigger('pick', new_item)\r
\r
+ open_dialog: (dialog) ->\r
+ @trigger('dialog:open', dialog)\r
+ \r
+ close_dialog: (dialog) ->\r
+ @trigger('dialog:close', dialog)\r
+ \r
destroy: (element) ->\r
@remove_element(element)\r
@trigger('destroy', element)\r
\r
render: () ->\r
this.$el.attr('id', @dom_id())\r
- @buttons = new Editor.EditorModule.DockModule.NewElementButtons({\r
+ @launchers = new Editor.EditorModule.DockModule.NewElementLaunchers({\r
parent: this, element_models: @element_models()\r
})\r
- @listenTo(@buttons, 'click', @click_button)\r
- this.$el.append(@buttons.render().el)\r
+ @listenTo(@launchers, 'pick', @pick)\r
+ @listenTo(@launchers, 'dialog:open', @open_dialog)\r
+ @listenTo(@launchers, 'dialog:close', @close_dialog)\r
+ this.$el.append(@launchers.render().el)\r
this\r
\r
panel: () ->\r
element_models: () ->\r
@panel().my_class().child_models()\r
\r
- click_button: (model) ->\r
- @new_element.remove() if @new_element\r
- @new_element = new Pettanr.Views[model.singular()].NewElement({\r
- parent: this, target_model: model\r
- })\r
- @listenTo(@new_element, 'pick', @pick)\r
- this.$el.append(@new_element.clear().el)\r
- \r
pick: (new_item) ->\r
@trigger('pick', new_item)\r
- @new_element.render()\r
\r
-class Editor.EditorModule.DockModule.NewElementButtons extends Backbone.View\r
+ open_dialog: (dialog) ->\r
+ @trigger('dialog:open', dialog)\r
+ \r
+ close_dialog: (dialog) ->\r
+ @trigger('dialog:close', dialog)\r
+ \r
+class Editor.EditorModule.DockModule.NewElementLaunchers extends Backbone.View\r
tagName: 'div'\r
className: 'new-element-buttons'\r
\r
\r
render: () ->\r
_.each @element_models, (model) =>\r
- button = new Editor.EditorModule.DockModule.NewElementButton({\r
+ launcher = new Pettanr.Views[model.singular()].NewElementLauncher({\r
parent: this, model: model\r
})\r
- @listenTo(button, 'click', @click)\r
- this.$el.append(button.render().el)\r
+ @listenTo(launcher, 'pick', @pick)\r
+ @listenTo(launcher, 'dialog:open', @open_dialog)\r
+ @listenTo(launcher, 'dialog:close', @close_dialog)\r
+ this.$el.append(launcher.render().el)\r
this\r
\r
- click: (model) ->\r
- @trigger('click', model)\r
+ pick: (new_item) ->\r
+ @trigger('pick', new_item)\r
+ \r
+ open_dialog: (dialog) ->\r
+ @trigger('dialog:open', dialog)\r
+ \r
+ close_dialog: (dialog) ->\r
+ @trigger('dialog:close', dialog)\r
\r
-class Editor.EditorModule.DockModule.NewElementButton extends Backbone.View\r
+ dock: () ->\r
+ @parent.dock()\r
+ \r
+class Editor.EditorModule.DockModule.NewElementLauncher extends Backbone.View\r
tagName: 'div'\r
\r
initialize: (options) ->\r
\r
render: () ->\r
this.$el.html('')\r
- icon = new Pettanr.Image.Icon({item: @model})\r
- linked_icon = new Editor.EditorModule.DockModule.NewElementLinkedButton({\r
- attr: {href: '#' },\r
- content: icon.render().el\r
- })\r
- @listenTo(linked_icon, 'click', @click)\r
- this.$el.append(linked_icon.render().el)\r
+ header = new Editor.EditorModule.DockModule.NewElementLauncherHeader({model: @model})\r
+ this.$el.append(header.render().el)\r
this\r
\r
- click: () ->\r
- @trigger('click', @model)\r
+ get_action: (params) ->\r
+ controller = Manifest.manifest().controllers[params['controller']]\r
+ controller.actions[params['action']]\r
+ \r
+ add_links: () ->\r
+ _.each @links_conf, (conf, name) =>\r
+ @add_link(name, conf.caption, @get_action(conf.params).url(conf.params))\r
+ \r
+ add_link: (name, caption, url) ->\r
+ link = new Tag.A({\r
+ attr: {href: '/' + url},\r
+ content: caption\r
+ })\r
+ @listenTo(link, 'click', this['click_' + name])\r
+ this.$el.append(link.render().el)\r
+ \r
+ create_dialog: () ->\r
+ dialog = new Editor.PanelEditor.Dialog({\r
+ parent: this\r
+ })\r
+ this.$el.append(dialog.render().el)\r
+ _this = this\r
+ dialog.$el.dialog({\r
+ autoOpen: false,\r
+ width: 750, \r
+ height: 560,\r
+ close: (ui, event) ->\r
+ _this.close_dialog(dialog)\r
+ })\r
+ dialog\r
+ \r
+ click_default: (params) ->\r
+ dialog = @create_dialog()\r
+ picker = new Pettanr.Views[@model.singular()].NewElement({\r
+ parent: this, target_model: @model\r
+ })\r
+ @listenTo(picker, 'pick', @pick)\r
+ @listenTo(picker, 'dialog:open', @open_dialog)\r
+ @listenTo(picker, 'dialog:close', @close_dialog)\r
+ picker.start(dialog, params)\r
+ \r
+ pick: (new_item) ->\r
+ @trigger('pick', new_item)\r
+ \r
+ open_dialog: (dialog) ->\r
+ @trigger('dialog:open', dialog)\r
+ \r
+ close_dialog: (dialog) ->\r
+ @trigger('dialog:close', dialog)\r
\r
-class Editor.EditorModule.DockModule.NewElementLinkedButton extends Tag.A\r
+ dock: () ->\r
+ @parent.dock()\r
\r
- click: () ->\r
- @trigger('click')\r
- return false\r
+class Editor.EditorModule.DockModule.NewElementLauncherHeader extends Backbone.View\r
+ tagName: 'h3'\r
+ \r
+ initialize: (options) ->\r
+ super(options)\r
+ @model = options.model\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ icon = new Pettanr.Image.Icon({item: @model, half: true})\r
+ caption = Pettanr.AppHelper.t_m(@model.singular())\r
+ this.$el.append(icon.render().el)\r
+ this.$el.append(caption)\r
+ this\r
\r
-class Pettanr.Views.GroundColor.NewElement extends Backbone.View\r
- tagName: 'div'\r
- className: 'new-element-body'\r
+class Pettanr.Views.GroundColor.NewElementLauncher extends Editor.EditorModule.DockModule.NewElementLauncher\r
\r
initialize: (options) ->\r
- @parent = options.parent\r
- @target_model = options.target_model\r
+ super(options)\r
+ @links_conf = {\r
+ inspire: {\r
+ caption: 'Inspire',\r
+ params: {\r
+ controller: @model.path_name(), action: 'index',\r
+ page_size: 6, format: 'html'\r
+ }\r
+ }\r
+ }\r
\r
- clear: () ->\r
- this.$el.html('')\r
+ render: () ->\r
+ super()\r
@pick_icon = new Pettanr.Views.Common.PickIcon({name: 'pick'})\r
- @inspire_icon = new Pettanr.Views.Common.PickIcon({name: 'inspire'})\r
@listenTo(@pick_icon, 'click', @pick_click)\r
- @listenTo(@inspire_icon, 'click', @inspire_click)\r
this.$el.append(@pick_icon.render().el)\r
- this.$el.append(@inspire_icon.render().el)\r
- this\r
- \r
- render: () ->\r
+ @add_links()\r
this\r
\r
pick_click: () ->\r
- model = @target_model\r
+ model = @model\r
new_item = new model()\r
# new_item.set({}, {silent: true})\r
- @success(new_item)\r
+ @pick(new_item)\r
\r
- inspire_click: () ->\r
- params = {\r
- controller: @target_model.path_name(), action: 'index',\r
- page_size: 6, format: 'html'\r
- }\r
- @dialog().start(@target_model, params, null)\r
- @listenTo(@dialog(), 'pick', @pick)\r
+ click_inspire: () ->\r
+ @click_default(@links_conf.inspire.params)\r
+ \r
+class Pettanr.Views.GroundColor.NewElement extends Backbone.View\r
+ \r
+ initialize: (options) ->\r
+ @parent = options.parent\r
+ @target_model = options.target_model\r
+ \r
+ start: (@dialog, params) ->\r
+ @dialog.start(@target_model, params, null)\r
+ @listenTo(@dialog, 'pick', @pick)\r
+ @trigger('dialog:open', @dialog)\r
\r
pick: (item) ->\r
new_item = new @target_model(item.attributes)\r
new_item.unset('id', {silent: true})\r
new_item.set({panel_id: @editor().item.get('id')}, {silent: true})\r
- @dialog().stop()\r
- @success(new_item)\r
- \r
- success: (new_item) ->\r
- @set_form(new_item)\r
+ @dialog.stop()\r
@trigger('pick', new_item)\r
\r
- set_form: (item) ->\r
- @form = Locmare.Form.factory({\r
- form_name: item.item_name(), \r
- use_name: 'default' \r
- item: item, \r
- element_form: true, \r
- submit: null, \r
- })\r
- \r
dock: () ->\r
@parent.dock()\r
\r
editor: () ->\r
@dock().editor()\r
\r
- dialog: () ->\r
- @editor().dialog\r
- \r
+class Pettanr.Views.GroundPicture.NewElementLauncher extends Editor.EditorModule.DockModule.NewElementLauncher\r
+ \r
+ initialize: (options) ->\r
+ super(options)\r
+ @links_conf = {\r
+ resource_picture: {\r
+ caption: 'Resource Picture',\r
+ params: {\r
+ controller: @model.pick_model().path_name(), action: 'index',\r
+ page_size: 6, format: 'html'\r
+ }\r
+ }\r
+ }\r
+ \r
+ render: () ->\r
+ super()\r
+ @add_links()\r
+ this\r
+ \r
+ click_resource_picture: () ->\r
+ @click_default(@links_conf.resource_picture.params)\r
+ \r
class Pettanr.Views.GroundPicture.NewElement extends Backbone.View\r
- tagName: 'div'\r
- className: 'new-element-body'\r
\r
initialize: (options) ->\r
@parent = options.parent\r
@target_model = options.target_model\r
@pick_model = @target_model.pick_model()\r
\r
- clear: () ->\r
- this.$el.html('')\r
- params = {\r
- controller: @pick_model.path_name(), action: 'index',\r
- page_size: 6, format: 'html'\r
- }\r
- @dialog().start(@target_model, params, null)\r
- @listenTo(@dialog(), 'pick', @pick)\r
- this\r
- \r
- render: () ->\r
- this.$el.html('')\r
- this\r
+ start: (@dialog, params) ->\r
+ @dialog.start(@target_model, params, null)\r
+ @listenTo(@dialog, 'pick', @pick)\r
+ @trigger('dialog:open', @dialog)\r
\r
pick: (item) ->\r
if item.item_name() == @target_model.item_name()\r
@trigger('ready', new_item)\r
\r
ready: (new_item) ->\r
- @dialog().stop()\r
+ @dialog.stop()\r
@trigger('pick', new_item)\r
\r
trace: (resource_picture) ->\r
- @dialog().http_get(resource_picture.show_url())\r
+ @dialog.http_get(resource_picture.show_url())\r
\r
dock: () ->\r
@parent.dock()\r
editor: () ->\r
@dock().editor()\r
\r
- dialog: () ->\r
- @editor().dialog\r
- \r
+class Pettanr.Views.PanelPicture.NewElementLauncher extends Editor.EditorModule.DockModule.NewElementLauncher\r
+ \r
+ initialize: (options) ->\r
+ super(options)\r
+ @links_conf = {\r
+ resource_picture: {\r
+ caption: 'Resource Picture',\r
+ params: {\r
+ controller: @model.pick_model().path_name(), action: 'index',\r
+ page_size: 6, format: 'html'\r
+ }\r
+ }\r
+ }\r
+ \r
+ render: () ->\r
+ super()\r
+ @add_links()\r
+ this\r
+ \r
+ click_resource_picture: () ->\r
+ @click_default(@links_conf.resource_picture.params)\r
+ \r
class Pettanr.Views.PanelPicture.NewElement extends Backbone.View\r
- tagName: 'div'\r
- className: 'new-element-body'\r
\r
initialize: (options) ->\r
@parent = options.parent\r
@target_model = options.target_model\r
@pick_model = @target_model.pick_model()\r
\r
- clear: () ->\r
- this.$el.html('')\r
- params = {\r
- controller: @pick_model.path_name(), action: 'index',\r
- page_size: 6, format: 'html'\r
- }\r
- @dialog().start(@target_model, params, null)\r
- @listenTo(@dialog(), 'pick', @pick)\r
- this\r
- \r
- render: () ->\r
- this.$el.html('')\r
- this\r
+ start: (@dialog, params) ->\r
+ @dialog.start(@target_model, params, null)\r
+ @listenTo(@dialog, 'pick', @pick)\r
+ @trigger('dialog:open', @dialog)\r
\r
pick: (item) ->\r
if item.item_name() == @target_model.item_name()\r
@trigger('ready', new_item)\r
\r
ready: (new_item) ->\r
- @dialog().stop()\r
+ @dialog.stop()\r
@trigger('pick', new_item)\r
\r
trace: (resource_picture) ->\r
- @dialog().http_get(resource_picture.show_url())\r
+ @dialog.http_get(resource_picture.show_url())\r
\r
dock: () ->\r
@parent.dock()\r
editor: () ->\r
@dock().editor()\r
\r
- dialog: () ->\r
- @editor().dialog\r
- \r
+class Pettanr.Views.SpeechBalloon.NewElementLauncher extends Editor.EditorModule.DockModule.NewElementLauncher\r
+ \r
+ initialize: (options) ->\r
+ super(options)\r
+ @links_conf = {\r
+ speech_balloon_template: {\r
+ caption: 'Speech Balloon Template',\r
+ params: {\r
+ controller: @model.pick_model().path_name(), action: 'index',\r
+ page_size: 6, format: 'html'\r
+ }\r
+ }\r
+ }\r
+ \r
+ render: () ->\r
+ super()\r
+ @add_links()\r
+ this\r
+ \r
+ click_speech_balloon_template: () ->\r
+ @click_default(@links_conf.speech_balloon_template.params)\r
+ \r
class Pettanr.Views.SpeechBalloon.NewElement extends Backbone.View\r
- tagName: 'div'\r
- className: 'new-element-body'\r
\r
initialize: (options) ->\r
@parent = options.parent\r
@target_model = options.target_model\r
@pick_model = @target_model.pick_model()\r
\r
- clear: () ->\r
- this.$el.html('')\r
- params = {\r
- controller: @pick_model.path_name(), action: 'index',\r
- page_size: 6, format: 'html'\r
- }\r
- @dialog().start(@target_model, params, null)\r
- @listenTo(@dialog(), 'pick', @pick)\r
- this\r
- \r
- render: () ->\r
- this.$el.html('')\r
- this\r
+ start: (@dialog, params) ->\r
+ @dialog.start(@target_model, params, null)\r
+ @listenTo(@dialog, 'pick', @pick)\r
+ @trigger('dialog:open', @dialog)\r
\r
pick: (item) ->\r
if item.item_name() == @target_model.item_name()\r
)\r
\r
ready: (new_item) ->\r
- @dialog().stop()\r
+ @dialog.stop()\r
@trigger('pick', new_item)\r
\r
trace: (speech_balloon) ->\r
- @dialog().http_get(speech_balloon.show_url())\r
+ @dialog.http_get(speech_balloon.show_url())\r
\r
dock: () ->\r
@parent.dock()\r
editor: () ->\r
@dock().editor()\r
\r
- dialog: () ->\r
- @editor().dialog\r
- \r
class ResourcePicturePicture < Peta::Item
+ load_manifest
belongs_to :original_picture
belongs_to :resource_picture
belongs_to :picture