85 lines
2.1 KiB
CoffeeScript
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 |