Spine = require('spine/core') # $ = Spine.$ templates = require('duality/templates') utils = require('lib/utils') FileUploadUI = require('controllers/ui/file-upload') Collection = require('models/collection') Sponsor = require('models/sponsor') Site = require('models/site') class CollectionForm extends Spine.Controller className: 'collection form panel' elements: '.item-title': 'itemTitle' '.error-message': 'errorMessage' 'form': 'form' 'select[name=site]': 'formSite' 'select[name=sponsor_id]': 'formSponsorId' 'input[name=sponsor_propagate]': 'formSponsorPropagate' 'input[name=name]': 'formName' 'input[name=pinned]': 'formPinned' 'input[name=hidden]': 'formHidden' 'textarea[name=intro]': 'formIntro' '.upload-ui': 'fileUploadContainer' '.save-button': 'saveButton' '.cancel-button': 'cancelButton' events: 'submit form': 'preventSubmit' 'change *[name]': 'markAsDirty' 'keyup *[name]': 'markAsDirty' 'click .save-button': 'save' 'click .cancel-button': 'cancel' 'click .delete-button': 'destroy' 'change select[name=site]': 'siteChange' 'blur input[name=slug]': 'updateSlug' constructor: -> super @active @render render: (params) -> @dirtyForm = false @editing = params.id? if @editing @copying = params.id.split('-')[0] is 'copy' if @copying @title = 'Copy Collection' @item = Collection.find(params.id.split('-')[1]).dup() # Important to indicate that we are creating a new record @editing = false else @item = Collection.find(params.id) @title = @item.name # Fetch missing data if need be if not @item.intro? @item.ajax().reload {}, success: => @formIntro.val(@item.intro) else @title = 'New Collection' @item = {} @item._attachments ?= {} @item.sites = Site.all().sort(Site.alphaSort) @item.sponsors = Sponsor.all().sort(Sponsor.alphaSort) @html templates.render('collection-form.html', {}, @item) @itemTitle.html @title # Set few initial form values if @editing or @copying @formSite.val(@item.site) @formSponsorId.val(@item.sponsor_id) @formSponsorPropagate.prop('checked', @item.sponsor_propagate) @formPinned.prop('checked', @item.pinned) @formHidden.prop('checked', @item.hidden) else @formSite.val(@stack.stack.filterBox.siteId) @siteChange() # Files upload area @fileUploadUI = new FileUploadUI docId: @item.id selectedFile: @item.photo attachments: @item._attachments changeCallback: @markAsDirty @fileUploadContainer.html @fileUploadUI.el return @ siteChange: -> $siteSelected = @formSite.parents('.field').find('.site-selected') site = Site.exists(@formSite.val()) if site $siteSelected.html "