engine/app/assets/javascripts/locomotive/views/content_types/select_options_view.js.coffee

85 lines
2.1 KiB
CoffeeScript

Locomotive.Views.ContentTypes ||= {}
class Locomotive.Views.ContentTypes.SelectOptionsView extends Backbone.View
tagName: 'div'
className: 'list'
events:
'click a.add': 'add_entry'
'click span.name': 'edit_entry'
'click a.remove': 'remove_entry'
initialize: ->
_.bindAll(@, 'refresh_position_entries', '_insert_entry')
@collection.bind 'add', @_insert_entry
render: ->
$(@el).html(ich.select_options_list())
@prompt_message = @$('> ul').attr('data-prompt')
@render_entries()
@make_list_sortable()
return @
render_entries: ->
@collection.each @_insert_entry
make_list_sortable: ->
@sortable_list = @$('> ul').sortable
handle: 'a.drag'
items: 'li.entry'
update: @refresh_position_entries
refresh_position_entries: ->
@$('> ul li.entry').each (index, view_dom) =>
select_option = @collection.getByCid($(view_dom).attr('data-cid'))
select_option.set position: index
add_entry: (event) ->
event.stopPropagation() & event.preventDefault()
name = prompt(@prompt_message)
if name != ''
@collection.add [{ name: name }]
edit_entry: (event) ->
event.stopPropagation() & event.preventDefault()
span = $(event.target)
view_dom = span.closest('li')
select_option = @collection.getByCid(view_dom.attr('data-cid'))
if (name = prompt(@prompt_message, select_option.get('name'))) != ''
select_option.set(name: name)
span.html(name)
remove_entry: (event) ->
event.stopPropagation() & event.preventDefault()
link = $(event.target)
view_dom = link.closest('li')
select_option = @collection.getByCid(view_dom.attr('data-cid'))
if confirm(link.attr('date-confirm'))
if select_option.isNew()
@collection.remove(select_option)
else
select_option.set _destroy: true
view_dom.remove()
_insert_entry: (select_option) ->
view_dom = ich.select_option_entry(select_option.toJSON())
view_dom.attr('data-cid', select_option.cid)
@$('> ul').append(view_dom)
@refresh_position_entries