can.route( ':action/:id' ) can.route( ':action' ) window.Domains = can.Control({ init: (el, opt) -> @opt = opt @model = Domain.models JSON.parse($('#domains_JSON').text()) return render_manage_area: (li, item) -> li.addClass('open').find('.item').append( can.view( 'manage_area_EJS' ) ) users = new Users(li.find('.item .users'), { items: item["virtual_users"] domain_id: item.id domain_name: item.name }) aliases = new Aliases(li.find('.item .aliases'), { items: item["virtual_aliases"] domain_id: item.id domain_name: item.name }) close_manage_area: (li) -> li.find('.nomanage').hide() li.find('.manage').show() li.removeClass('open') it = li.find('.item .item-content:last') if it.hasClass('out') it.remove() "form reset": (el, ev) -> li = el.parents('li') if li.hasClass('empty') $('#domains .empty').remove() $('.add-domain').toggle() else if li.hasClass('inedit') id = li.attr('id').replace('domain_','') item = @model.with_id(parseInt(id)) li.find('.item').html( can.view( 'domain_item_EJS', { item: item } ) ) can.route.attr('action', '' ) "#new_virtual_domain submit": (el, ev) -> ev.preventDefault() values = el.formParams() self = this item = new Domain(values["virtual_domain"]) if item.errors() # validation error item.alert() return li = $('#domains .empty') Domain.create(values, (json) -> # callback function after creation if json["errors"] li.find('.item').append( can.view( 'errors_EJS', { errors: json["errors"] } ) ) else # post-creation hook item.attr(json.domain) li.removeClass('empty').attr('id', 'domain_'+item.attr('id')) ) # show links to edit and remove with right id li.find('.item').html( can.view( 'domain_item_EJS', { item: item } ) ) @model.unshift(item) $('.add-domain').toggle() ":action route": (a) -> # action NEW if a["action"] == 'new' $('#domains .empty').remove() $('#domains').prepend(can.view( 'domain_form_EJS', { item: new Domain } )) $('.add-domain').toggle() ":action/:id route": (params) -> li = $("#domain_" + params["id"]) item = @model.with_id(parseInt(params["id"])) self = this # action EDIT if params["action"] == 'edit' li.find('.item').html(can.view( 'domain_edit_EJS', { item: item } )) li.addClass('inedit') # action DELETE else if params["action"] == 'delete' if confirm(li.find('.rm').data('msg')) Domain.destroy(item, (json) -> if json["errors"] alert(json["errors"]) else # delete from local Model.list self.model.splice(self.model.indexOf(item), 1) li.remove() ) can.route.attr({action:''}) # action SHOW else if params["action"] == 'show' li.find('.manage').hide() li.find('.nomanage').show() @close_manage_area($('.open')) @render_manage_area(li, item) # action HIDE else if params["action"] == 'hide' @close_manage_area(li) })