@root_bay.body.form.save(attrs)\r
\r
pick: (new_item) ->\r
- t = @scenario_bay.length()\r
- z = @element_bay.new_tab.label.z()\r
- new_item.set({z: z, t: t}, {silent: true})\r
- @scenario_bay.add_element(new_item)\r
+ @scenario_bay.pick(new_item)\r
@trigger('add:element', new_item)\r
\r
open_dialog: (dialog) ->\r
\r
destroy: (element) ->\r
@trigger('destroy', element)\r
+ @scenario_bay.remove_element(element)\r
\r
quit: () ->\r
@root_bay.body.form.quit()\r
\r
initialize: (options) ->\r
super(options)\r
+ @current_index = 1\r
@boards = new Editor.EditorModule.DockModule.ElementBay.Boards({\r
parent: this\r
})\r
@removed_elements = []\r
\r
add_element: (element) ->\r
- index = @tabs.length\r
@shift_z()\r
tab = new Editor.EditorModule.DockModule.ElementBoard({\r
- parent: this, index: index, name: element.item_name(), element: element\r
+ parent: this, index: @current_index, name: element.item_name(), element: element\r
})\r
bl = new Editor.EditorModule.DockModule.TabModule.ElementBoardLabel({\r
parent: tab, \r
@boards.$el.tabs('refresh')\r
if element.constructor.has_picture()\r
@trigger('add:credit', element)\r
+ @sorted() # recalc z\r
+ @current_index++\r
\r
- remove_element: (element) ->\r
- if !element.isNew()\r
- element.set({_destroy: true}, {silent: true})\r
- @removed_elements.push element\r
+ find_tab: (element) ->\r
t = null\r
_.each @tabs, (tab) =>\r
if tab.element\r
if tab.element.cid == element.cid\r
t = tab\r
return\r
- t.label.remove()\r
- # t.body.form.remove_elements()\r
- t.body.remove()\r
- @remove_tab(t.index)\r
+ t\r
+ \r
+ remove_element: (element) ->\r
+ if !element.isNew()\r
+ element.set({_destroy: true}, {silent: true})\r
+ @removed_elements.push element\r
+ tab = @find_tab(element)\r
+ tab.label.remove()\r
+ tab.body.remove()\r
+ delete @tabs[tab]\r
+ @tabs = _.compact(@tabs)\r
@unshift_z()\r
+ @sorted() # recalc t\r
\r
shift_z: () ->\r
new_tab_z = @new_tab.label.z()\r
\r
unshift_z: () ->\r
@boards.labels.reorder()\r
- new_tab_z = @new_tab.label.z()\r
- index = 0\r
- _.each @tabs, (tab) ->\r
- z = tab.label.z()\r
- tab.label.$el.attr('data-z', z + 1) if z >= new_tab_z # new tab too\r
- tab.index = index\r
- index++\r
- t = 0\r
- _.each @tabs, (tab) =>\r
- if tab.element\r
- tab.element.set({\r
- z: t + 1, t: t\r
- }, {silent: true})\r
- t++\r
\r
add_new_tab: () ->\r
@new_tab = new Editor.EditorModule.DockModule.NewElementBoard({\r
\r
pick: (new_item) ->\r
@add_element(new_item)\r
+ z = @new_tab.label.z()\r
+ new_item.set({z: z}, {silent: true})\r
@trigger('pick', new_item)\r
\r
open_dialog: (dialog) ->\r
attr: {href: '/' + url},\r
content: caption\r
})\r
+ span = new Tag.Span({\r
+ content: link.render().el\r
+ })\r
@listenTo(link, 'click', this['click_' + name])\r
- this.$el.append(link.render().el)\r
+ this.$el.append(span.render().el)\r
\r
create_dialog: () ->\r
dialog = new Editor.PanelEditor.Dialog({\r
add_element: (element) ->\r
@body.add_element(element)\r
\r
+ remove_element: (element) ->\r
+ @body.remove_element(element)\r
+ \r
init_tabs: () ->\r
list = @root_item().scenario_elements()\r
_.each list, (element) =>\r
@add_element(element)\r
\r
+ pick: (new_item) ->\r
+ t = @length()\r
+ new_item.set({t: t}, {silent: true})\r
+ @add_element(new_item)\r
+ \r
save_data: () ->\r
@body.form.save_data()\r
\r
add_element: (element) ->\r
@elements.add_element(element)\r
\r
+ remove_element: (element) ->\r
+ @elements.remove_element(element)\r
+ @sorted() # recalc t\r
+ \r
render: () ->\r
super()\r
this.$el.append(@elements.render().el)\r
panel_body: () ->\r
@dock().editor().body\r
\r
- save_data: () ->\r
- attrs = {}\r
- _.each @tabs, (tab) ->\r
- return if not tab.element # without new element tab\r
- form = tab.body.form\r
- name = form.item.table_name() + '_attributes'\r
- attrs[name] ||= []\r
- attrs[name].push(form.save_data())\r
- attrs\r
- \r
length: () ->\r
@elements.element_lis.length\r
\r
-class Editor.EditorModule.DockModule.ScenarioBay.Elements extends Backbone.View\r
- tagName: 'ul'\r
- className: 'scenarios_elements'\r
- \r
- initialize: (options) ->\r
- super(options)\r
- @parent = options.parent\r
- @element_lis = []\r
- \r
- render: () ->\r
- this.$el.html('')\r
- _.each @scenario_elements(), (element_li) =>\r
- this.$el.append(element_li.render().$el)\r
- _this = this\r
- this.$el.sortable {\r
- update: (event, ui) ->\r
- t = 0\r
- $('.t-label', $(@)).map ->\r
- $(@).attr('data-t', t)\r
- t++\r
- _this.trigger('sorted')\r
- }\r
- this\r
- \r
- refresh: () ->\r
- _.each @element_lis, (element_li) =>\r
- element_li.refresh()\r
- \r
- scenario_elements: () ->\r
- res = []\r
- _.each @element_lis, (element_li) =>\r
- res[element_li.t()] = element_li\r
- res\r
- \r
- add_element: (element) ->\r
- e = new Editor.EditorModule.DockModule.ScenarioBay.Element({\r
- parent: this, \r
- element: element\r
- })\r
- @element_lis.push(e) # insert array\r
- @render()\r
- e\r
- \r
- sorted: () ->\r
- # data-t copy to model\r
- @trigger('sorted')\r
- \r
-class Editor.EditorModule.DockModule.ScenarioBay.Element extends Backbone.View\r
- tagName: 'li'\r
- className: 't-label'\r
- \r
- initialize: (options) ->\r
- super(options)\r
- @parent = options.parent\r
- @element = options.element\r
- \r
- render: () ->\r
- this.$el.html('')\r
- this.$el.attr('data-t', @t())\r
- @label = new Editor.EditorModule.DockModule.ScenarioBay.ElementLabel({\r
- parent: this, \r
- })\r
- @body = new Editor.EditorModule.DockModule.ScenarioBay.ElementBody({\r
- parent: this, \r
- })\r
- this.$el.append(@label.render().$el)\r
- this.$el.append(@body.render().$el)\r
- rb = new Tag.RowBreak()\r
- this.$el.append(rb.render().el)\r
- this\r
- \r
- refresh: () ->\r
- @body.form.refresh()\r
- \r
- t: () ->\r
- @element.get('t')\r
- \r
- dom_id: () ->\r
- super() + '-' + @element.get('id') # use tab index\r
- \r
-class Editor.EditorModule.DockModule.ScenarioBay.ElementLabel extends Backbone.View\r
- className: 'scenario-label'\r
- \r
- initialize: (options) ->\r
- super(options)\r
- @parent = options.parent\r
- \r
- render: () ->\r
- this.$el.append(@element().element_face().render().el)\r
- _this = this\r
- this.$el.mouseover -> \r
- _this.element().trigger('active')\r
- this.$el.mouseout -> \r
- _this.element().trigger('inactive')\r
- this\r
- \r
- element: () ->\r
- @parent.element\r
- \r
- elements: () ->\r
- @parent.parent\r
- \r
- bay: () ->\r
- @elements().parent\r
- \r
- dock: () ->\r
- @bay().dock()\r
- \r
-class Editor.EditorModule.DockModule.ScenarioBay.ElementBody extends Backbone.View\r
- \r
- initialize: (options) ->\r
- super(options)\r
- @parent = options.parent\r
- @form = Locmare.Form.factory({\r
- form_name: @element().item_name(), \r
- use_name: 'scenario' \r
- item: @element(), \r
- element_form: true, \r
- submit: null, \r
- })\r
- \r
- render: () ->\r
- this.$el.html(@form.render().el)\r
- this\r
- \r
- element: () ->\r
- @parent.element\r
- \r
- elements: () ->\r
- @parent.parent\r
- \r
- bay: () ->\r
- @elements().parent\r
- \r
- dock: () ->\r
- @bay().dock()\r
- \r
- mounted: () ->\r
- true\r
- \r
- element: () ->\r
- @parent.element\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
- initialize: (options) ->\r
- super(options)\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
- \r
--- /dev/null
+class Editor.EditorModule.DockModule.ScenarioBay.Element extends Backbone.View\r
+ tagName: 'li'\r
+ className: 't-label'\r
+ \r
+ initialize: (options) ->\r
+ super(options)\r
+ @parent = options.parent\r
+ @element = options.element\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ this.$el.attr('data-t', @t())\r
+ @label = new Editor.EditorModule.DockModule.ScenarioBay.ElementLabel({\r
+ parent: this, \r
+ })\r
+ @body = new Editor.EditorModule.DockModule.ScenarioBay.ElementBody({\r
+ parent: this, \r
+ })\r
+ this.$el.append(@label.render().$el)\r
+ this.$el.append(@body.render().$el)\r
+ rb = new Tag.RowBreak()\r
+ this.$el.append(rb.render().el)\r
+ this\r
+ \r
+ refresh: () ->\r
+ @body.form.refresh()\r
+ \r
+ t: () ->\r
+ @element.get('t')\r
+ \r
+ dom_id: () ->\r
+ super() + '-' + @element.get('id') # use tab index\r
+ \r
+class Editor.EditorModule.DockModule.ScenarioBay.ElementLabel extends Backbone.View\r
+ className: 'scenario-label'\r
+ \r
+ initialize: (options) ->\r
+ super(options)\r
+ @parent = options.parent\r
+ \r
+ render: () ->\r
+ this.$el.append(@element().element_face().render().el)\r
+ _this = this\r
+ this.$el.mouseover -> \r
+ _this.element().trigger('active')\r
+ this.$el.mouseout -> \r
+ _this.element().trigger('inactive')\r
+ this\r
+ \r
+ element: () ->\r
+ @parent.element\r
+ \r
+ elements: () ->\r
+ @parent.parent\r
+ \r
+ bay: () ->\r
+ @elements().parent\r
+ \r
+ dock: () ->\r
+ @bay().dock()\r
+ \r
+class Editor.EditorModule.DockModule.ScenarioBay.ElementBody extends Backbone.View\r
+ \r
+ initialize: (options) ->\r
+ super(options)\r
+ @parent = options.parent\r
+ @form = Locmare.Form.factory({\r
+ form_name: @element().item_name(), \r
+ use_name: 'scenario' \r
+ item: @element(), \r
+ element_form: true, \r
+ submit: null, \r
+ })\r
+ \r
+ render: () ->\r
+ this.$el.html(@form.render().el)\r
+ this\r
+ \r
+ element: () ->\r
+ @parent.element\r
+ \r
+ elements: () ->\r
+ @parent.parent\r
+ \r
+ bay: () ->\r
+ @elements().parent\r
+ \r
+ dock: () ->\r
+ @bay().dock()\r
+ \r
+ mounted: () ->\r
+ true\r
+ \r
+ element: () ->\r
+ @parent.element\r
+ \r
--- /dev/null
+class Editor.EditorModule.DockModule.ScenarioBay.Elements extends Backbone.View\r
+ tagName: 'ul'\r
+ className: 'scenarios_elements'\r
+ \r
+ initialize: (options) ->\r
+ super(options)\r
+ @parent = options.parent\r
+ @element_lis = []\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ _.each @scenario_elements(), (element_li) =>\r
+ this.$el.append(element_li.render().$el)\r
+ _this = this\r
+ this.$el.sortable {\r
+ update: (event, ui) ->\r
+ _this.reorder()\r
+ _this.trigger('sorted')\r
+ }\r
+ this\r
+ \r
+ refresh: () ->\r
+ _.each @element_lis, (element_li) =>\r
+ element_li.refresh()\r
+ \r
+ scenario_elements: () ->\r
+ res = []\r
+ _.each @element_lis, (element_li) =>\r
+ res[element_li.t()] = element_li\r
+ res\r
+ \r
+ add_element: (element) ->\r
+ e = new Editor.EditorModule.DockModule.ScenarioBay.Element({\r
+ parent: this, \r
+ element: element\r
+ })\r
+ @element_lis.push(e) # insert array\r
+ @render()\r
+ e\r
+ \r
+ find_li: (element) ->\r
+ li = null\r
+ _.each @element_lis, (element_li) =>\r
+ if element_li.element.cid == element.cid\r
+ li = element_li\r
+ return\r
+ li\r
+ \r
+ remove_element: (element) ->\r
+ li = @find_li(element)\r
+ li.remove()\r
+ delete @element_lis[li]\r
+ @element_lis = _.compact(@element_lis)\r
+ @unshift_z()\r
+ \r
+ unshift_z: () ->\r
+ @reorder()\r
+ \r
+ reorder: () ->\r
+ t = 0\r
+ $('.t-label', this.$el).map ->\r
+ $(@).attr('data-t', t)\r
+ t++\r
+ \r
+ sorted: () ->\r
+ # data-t copy to model\r
+ @trigger('sorted')\r
+ \r
\r
render: () ->\r
super()\r
- @pick_icon = new Pettanr.Views.Common.PickIcon({name: 'pick'})\r
- @listenTo(@pick_icon, 'click', @pick_click)\r
- this.$el.append(@pick_icon.render().el)\r
+ pick = new Tag.A({\r
+ attr: {href: '/' + @model.path_name() + '/new'},\r
+ content: 'Default'\r
+ })\r
+ @listenTo(pick, 'click', @default_click)\r
+ this.$el.append(pick.render().el)\r
@add_links()\r
this\r
\r
- pick_click: () ->\r
+ default_click: () ->\r
model = @model\r
new_item = new model()\r
# new_item.set({}, {silent: true})\r
@listenTo(@element, 'input:repeat', @restyle)\r
@listenTo(@element, 'input:x', @restyle)\r
@listenTo(@element, 'input:y', @restyle)\r
- @listenTo(@element, 'sort', @restyle)\r
@listenTo(@element, 'active', @active)\r
@listenTo(@element, 'inactive', @inactive)\r
\r
+ retrieve_picture: (picture) ->\r
+ @listenTo(@element, 'sort', @restyle)\r
+ super(picture)\r
+ \r
active: () ->\r
@root.trigger('active')\r
\r
\r
initialize: (options) ->\r
super(options)\r
- @links_conf = {\r
- resource_picture: {\r
- caption: 'Resource Picture',\r
+ @links_conf = {}\r
+ _.extend(@links_conf, {\r
+ users: {\r
+ caption: "User's",\r
params: {\r
controller: @model.pick_model().path_name(), action: 'index',\r
page_size: 6, format: 'html'\r
}\r
}\r
- }\r
+ })\r
+ if Pettanr.cache.operators.artist\r
+ _.extend(@links_conf, {\r
+ mine: {\r
+ caption: 'Mine',\r
+ params: {\r
+ controller: @model.pick_model().path_name(), action: 'by_artist', id: Pettanr.cache.operators.artist.get('id'), \r
+ page_size: 6, format: 'html'\r
+ }\r
+ }\r
+ })\r
+ _.extend(@links_conf, {\r
+ inspire_recent: {\r
+ caption: "Inspire recent item",\r
+ params: {\r
+ controller: @model.path_name(), action: 'index',\r
+ page_size: 6, format: 'html'\r
+ }\r
+ }\r
+ })\r
+ if Pettanr.cache.operators.author\r
+ _.extend(@links_conf, {\r
+ inspire_my_recent: {\r
+ caption: 'Inspire my recent item',\r
+ params: {\r
+ controller: @model.path_name(), action: 'by_author', id: Pettanr.cache.operators.author.get('id'), \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
+ click_users: () ->\r
+ @click_default(@links_conf.users.params)\r
+ \r
+ click_mine: () ->\r
+ @click_default(@links_conf.mine.params)\r
+ \r
+ click_inspire_recent: () ->\r
+ @click_default(@links_conf.inspire_recent.params)\r
+ \r
+ click_inspire_my_recent: () ->\r
+ @click_default(@links_conf.inspire_my_recent.params)\r
\r
class Pettanr.Views.GroundPicture.NewElement extends Backbone.View\r
\r
\r
initialize: (options) ->\r
super(options)\r
- @links_conf = {\r
- resource_picture: {\r
- caption: 'Resource Picture',\r
+ @links_conf = {}\r
+ _.extend(@links_conf, {\r
+ users: {\r
+ caption: "User's",\r
params: {\r
controller: @model.pick_model().path_name(), action: 'index',\r
page_size: 6, format: 'html'\r
}\r
}\r
- }\r
+ })\r
+ if Pettanr.cache.operators.artist\r
+ _.extend(@links_conf, {\r
+ mine: {\r
+ caption: 'Mine',\r
+ params: {\r
+ controller: @model.pick_model().path_name(), action: 'by_artist', id: Pettanr.cache.operators.artist.get('id'), \r
+ page_size: 6, format: 'html'\r
+ }\r
+ }\r
+ })\r
+ _.extend(@links_conf, {\r
+ inspire_recent: {\r
+ caption: "Inspire recent item",\r
+ params: {\r
+ controller: @model.path_name(), action: 'index',\r
+ page_size: 6, format: 'html'\r
+ }\r
+ }\r
+ })\r
+ if Pettanr.cache.operators.author\r
+ _.extend(@links_conf, {\r
+ inspire_my_recent: {\r
+ caption: 'Inspire my recent item',\r
+ params: {\r
+ controller: @model.path_name(), action: 'by_author', id: Pettanr.cache.operators.author.get('id'), \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
+ click_users: () ->\r
+ @click_default(@links_conf.users.params)\r
+ \r
+ click_mine: () ->\r
+ @click_default(@links_conf.mine.params)\r
+ \r
+ click_inspire_recent: () ->\r
+ @click_default(@links_conf.inspire_recent.params)\r
+ \r
+ click_inspire_my_recent: () ->\r
+ @click_default(@links_conf.inspire_my_recent.params)\r
\r
class Pettanr.Views.PanelPicture.NewElement extends Backbone.View\r
\r
\r
initialize: (options) ->\r
super(options)\r
- @links_conf = {\r
- speech_balloon_template: {\r
- caption: 'Speech Balloon Template',\r
+ @links_conf = {}\r
+ _.extend(@links_conf, {\r
+ template: {\r
+ caption: 'Template',\r
params: {\r
controller: @model.pick_model().path_name(), action: 'index',\r
page_size: 6, format: 'html'\r
}\r
}\r
- }\r
+ })\r
+ _.extend(@links_conf, {\r
+ inspire_recent: {\r
+ caption: "Inspire recent item",\r
+ params: {\r
+ controller: @model.path_name(), action: 'index',\r
+ page_size: 6, format: 'html'\r
+ }\r
+ }\r
+ })\r
+ if Pettanr.cache.operators.author\r
+ _.extend(@links_conf, {\r
+ inspire_my_recent: {\r
+ caption: 'Inspire my recent item',\r
+ params: {\r
+ controller: @model.path_name(), action: 'by_author', id: Pettanr.cache.operators.author.get('id'), \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
+ click_template: () ->\r
+ @click_default(@links_conf.template.params)\r
+ \r
+ click_inspire_recent: () ->\r
+ @click_default(@links_conf.inspire_recent.params)\r
+ \r
+ click_inspire_my_recent: () ->\r
+ @click_default(@links_conf.inspire_my_recent.params)\r
\r
class Pettanr.Views.SpeechBalloon.NewElement extends Backbone.View\r
\r
//= require ./editor/panel_editor/element/element_board
//= require ./editor/panel_editor/element/new_board
//= require ./editor/panel_editor/scenario
+//= require ./editor/panel_editor/scenario/elements
+//= require ./editor/panel_editor/scenario/element
//= require ./i18n/translations
//= require_directory ./controllers
//= require_directory ./models
.new-element-buttons div {
clear: both;
}
+.new-element-buttons h3 {
+ margin-top: 6px;
+ margin-bottom: 6px;
+}
+.new-element-buttons span {
+ margin: 3px;
+ margin-right: 8px;
+}
ul.scenarios_elements {
list-style-type: none;
padding: 0;