destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
destroy: () ->\r
@set_show(@render_destroy)\r
\r
- render_destroy: () ->\r
+ render_destroy: (@item) ->\r
@listenTo(@item, 'destroy:success', @destroy_success)\r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
tab.body = body\r
tab\r
\r
+ remove_tab: (index) ->\r
+ @tabs.splice(index, 1)\r
+ \r
root_item: () ->\r
@parent.root_item()\r
\r
})\r
this.$el.append(linked_elements_tab.render().el)\r
@destroy_button = new Editor.EditorModule.DestroyButton()\r
+ @listenTo(@destroy_button, 'destroy', @destroy)\r
this.$el.append(@destroy_button.render().el)\r
\r
render: () ->\r
@face()\r
this\r
\r
+ destroy: () ->\r
+ @trigger('destroy', @element())\r
+ \r
class Editor.EditorModule.DockModule.TabModule.BoardBody extends Editor.EditorModule.DockModule.TabModule.Body\r
board: () ->\r
@parent\r
}, \r
text: false\r
}\r
+ @delegateEvents({'click': @click})\r
this\r
\r
dom_id: () ->\r
@dom_id() + '-destroy_button'\r
\r
+ click: () ->\r
+ @trigger('destroy')\r
+ \r
@listenTo(@dock, 'save:fail', @post_fail)\r
@listenTo(@dock, 'add:element', @add_element)\r
@listenTo(@dock, 'add:credit', @add_credit)\r
+ @listenTo(@dock, 'destroy', @destroy)\r
\r
add_element: (element) ->\r
@body.add_element(element)\r
add_credit: (element) ->\r
@credits.add_picture(element.picture())\r
\r
+ destroy: (element, index) ->\r
+ @remove_element(element)\r
+ \r
remove_element: (element) ->\r
@body.remove_element(element)\r
\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, 'destroy', @destroy)\r
\r
render: () ->\r
this.$el.html('')\r
@scenario_bay.add_element(new_item)\r
@trigger('add:element', new_item)\r
\r
+ destroy: (element) ->\r
+ @trigger('destroy', element)\r
+ \r
quit: () ->\r
@root_bay.body.form.quit()\r
\r
parent: this\r
})\r
@listenTo(@boards, 'sorted', @sorted)\r
+ @removed_elements = []\r
\r
add_element: (element) ->\r
index = @tabs.length\r
tab = new Editor.EditorModule.DockModule.ElementBoard({\r
parent: this, index: index, name: element.item_name(), element: element\r
})\r
+ bl = new Editor.EditorModule.DockModule.TabModule.ElementBoardLabel({\r
+ parent: tab, \r
+ name: element.item_name()\r
+ })\r
bb = new Editor.EditorModule.DockModule.TabModule.ElementBoardBody({parent: tab})\r
- @add_tab(\r
- tab, \r
- new Editor.EditorModule.DockModule.TabModule.ElementBoardLabel({\r
- parent: tab, \r
- name: element.item_name()\r
- }), \r
- bb\r
- )\r
+ @listenTo(bl, 'destroy', @destroy)\r
+ @add_tab(tab, bl, bb)\r
@boards.add_element_tab(tab)\r
@boards.$el.tabs('refresh')\r
if element.constructor.has_picture()\r
@trigger('add:credit', element)\r
\r
+ remove_element: (element) ->\r
+ if !element.isNew()\r
+ element.set({_destroy: true}, {silent: true})\r
+ @removed_elements.push 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
+ @unshift_z()\r
+ \r
shift_z: () ->\r
new_tab_z = @new_tab.label.z()\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
\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
parent: this, index: 0, name: 'new'\r
name = form.item.table_name() + '_attributes'\r
attrs[name] ||= []\r
attrs[name].push(form.save_data())\r
+ _.each @removed_elements, (element) ->\r
+ name = element.table_name() + '_attributes'\r
+ attrs[name] ||= []\r
+ attrs[name].push({id: element.get('id'), _destroy: true})\r
attrs\r
\r
pick: (new_item) ->\r
@add_element(new_item)\r
@trigger('pick', new_item)\r
\r
+ destroy: (element) ->\r
+ @remove_element(element)\r
+ @trigger('destroy', element)\r
+ \r
class Editor.EditorModule.DockModule.TabModule.ElementBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel\r
\r
class Editor.EditorModule.DockModule.TabModule.ElementBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody\r
label.destroy_button.render()\r
this.$el.sortable {\r
update: (event, ui) ->\r
- z = 0\r
- $('li', $(@)).map ->\r
- $(@).attr('data-z', z)\r
- z++\r
+ _this.reorder()\r
_this.trigger('sorted')\r
}\r
this\r
bay: () ->\r
@parent.parent\r
\r
+ reorder: () ->\r
+ z = 0\r
+ $('li', this.$el).map ->\r
+ $(@).attr('data-z', z)\r
+ z++\r
+ \r
@child_forms[child_element_name].push(form)\r
form\r
\r
+ remove_elements: () ->\r
+ _.each @child_forms, (child_form, name) =>\r
+ child_form.item.set({_destroy: true}, {silent: true})\r
+ child_form.remove_elements()\r
+ \r
init_fields: () ->\r
_.each @manifest.field_names, (field_name) =>\r
field_manifest = @manifest.fields[field_name]\r
pagers = {\r
default: Locmare.ListGroupModule.LibModule.PagerModule.Default,\r
offset: Locmare.ListGroupModule.LibModule.PagerModule.Offset,\r
- unlimited: Locmare.ListGroupModule.LibModule.PagerModule.Unlimited\r
+ unlimited: Locmare.ListGroupModule.LibModule.PagerModule.Unlimited,\r
+ more: Locmare.ListGroupModule.LibModule.PagerModule.More\r
}\r
c = pagers[page_status.type]\r
return null if not page_status.total_page\r
content: () ->\r
'>>'\r
\r
+class Locmare.ListGroupModule.LibModule.PagerModule.More extends Backbone.View\r
+ tagName: 'div'\r
+ className: 'pagination'\r
+ \r
+ initialize: (options) ->\r
+ @params = options.params\r
+ \r
+ @controller = Manifest.manifest().controllers[@params['controller']]\r
+ @action = @controller.actions[@params['action']]\r
+ @action = @action.original if @action.original\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ linked_caption = new Tag.A({\r
+ attr: {href: '/' + @url()}, \r
+ content: 'More...'\r
+ })\r
+ @listenTo(linked_caption, 'click', @click)\r
+ this.$el.html(linked_caption.render().el)\r
+ this\r
+ \r
+ url: () ->\r
+ @action.url @params\r
+ \r
+ click: () ->\r
+ @trigger('http_get', @url())\r
+ \r
action.path_name(), action.name, \r
{id: @item().get('id'), page: 1, page_size: 3}\r
)\r
+ @pager = new Locmare.ListGroupModule.LibModule.PagerModule.More({\r
+ params: {controller: action.path_name(), action: action.name, id: @item().get('id')}\r
+ })\r
\r
clear: () ->\r
this.$el.html('')\r
elements.release()\r
\r
fix_elements: () ->\r
+ return \r
_.each @attributes, (elements, name) =>\r
if _.isArray(elements)\r
# has many association\r
model = @my_class().my_manifest().associations.has_many[name].model()\r
_.each elements, (element) =>\r
- element.fix()\r
+ if @has('_destroy')\r
+ element.release() # destroy element by editor\r
+ else\r
+ element.fix()\r
else if _.isObject(elements)\r
# has one association\r
- elements.fix()\r
+ if @has('_destroy')\r
+ element.release()\r
+ else\r
+ element.fix()\r
\r
+class Pettanr.Views.Artist.ShowModule\r
+class Pettanr.Views.Artist.ShowModule.Header extends Pettanr.Views.Show.Header\r
+ \r
+ initialize: (options) ->\r
+ super(options)\r
+ \r
+class Pettanr.Views.Artist.ShowModule.Body extends Backbone.View\r
+ \r
+ initialize: (options) ->\r
+ super(options)\r
+ @item = options.item\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ resource_pictures_params = {controller: 'resource_pictures', action: 'by_artist', id: @item.get('id')}\r
+ resource_pictures_controller = Manifest.manifest().controllers[resource_pictures_params['controller']]\r
+ resource_pictures_action = resource_pictures_controller.actions[resource_pictures_params['action']]\r
+ @resource_pictures_url = resource_pictures_action.url(resource_pictures_params)\r
+ @resource_pictures_caption = new Tag.A({\r
+ attr: {href: '/' + @resource_pictures_url},\r
+ content: Pettanr.AppHelper.t_m('ResourcePicture')\r
+ })\r
+ @listenTo(@resource_pictures_caption, 'click', @click_resource_pictures_caption)\r
+ this.$el.append(@resource_pictures_caption.render().el)\r
+ this\r
+ \r
+ click_resource_pictures_caption: () ->\r
+ @trigger('http_get', @resource_pictures_url)\r
+ \r
class Pettanr.Views.Artist.Show extends Backbone.View\r
tagName: 'div'\r
\r
initialize: (options) ->\r
+ @item = options.item\r
+ @header = new Pettanr.Views.Artist.ShowModule.Header({\r
+ item: @item, \r
+ caption: @item.get('name'), \r
+ icon_url: @item.show_url(),\r
+ caption_url: @item.show_url(),\r
+ prof_url: @item.prof_url()\r
+ })\r
+ @body = new Pettanr.Views.Artist.ShowModule.Body({\r
+ item: @item, \r
+ })\r
+ @listenTo(@body, 'http_get', @http_get)\r
\r
render: () ->\r
this.$el.html('')\r
+ this.$el.append(@header.render().el)\r
+ this.$el.append(@body.render().el)\r
this\r
\r
+ http_get: (url) ->\r
+ @trigger('http_get', url)\r
+ \r
\r
render: () ->\r
this.$el.addClass(@class_name)\r
- linked_caption = new Tag.A({\r
- attr: {href: '/' + @item.show_url()}, \r
- content: @bg_color()\r
- })\r
- @listenTo(linked_caption, 'click', @click)\r
- this.$el.html(linked_caption.render().el)\r
+ this.$el.html(@bg_color())\r
attr = {\r
style: Pettanr.to_style(@style())\r
}\r
this.$el.attr(attr)\r
+ @delegateEvents({'click': @click})\r
this\r
\r
fore_color: () ->\r
view.render()\r
view\r
\r
+ remove_element: (element) ->\r
+ _.each @views, (view) =>\r
+ if view.element.cid == element.cid\r
+ view.remove()\r
+ \r
element_class: (element) ->\r
Pettanr.Views[element.singular()].Element\r
\r
\r
initialize: (options) ->\r
@author = Pettanr.cache.operators.author\r
- @artis = Pettanr.cache.operators.artist\r
+ @artist = Pettanr.cache.operators.artist\r
\r
render: () ->\r
this.$el.html('')\r
belongs_to :speech_balloon_template
belongs_to :panel
- accepts_nested_attributes_for :balloon
- accepts_nested_attributes_for :speech
+ accepts_nested_attributes_for :balloon, :allow_destroy => true
+ accepts_nested_attributes_for :speech, :allow_destroy => true
validates :panel_id, :numericality => {:allow_blank => true}
validates :speech_balloon_template_id, :presence => true, :numericality => true, :existence => {:both => false}