123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- Spine = require('spine/core')
- # $ = Spine.$
- templates = require('duality/templates')
- settings = require('settings/root')
- Site = require('models/site')
- class SiteForm extends Spine.Controller
- className: 'site form panel'
- elements:
- '.item-title': 'itemTitle'
- '.error-message': 'errorMessage'
- 'form': 'form'
- 'input[name=_id]': 'formSiteId'
- 'select[name=theme]': 'formTheme'
- 'input[name=default_ad_enabled]': 'formDefaultAdEnabled'
- '.social-links-list': 'socialLinksList'
- '.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'
- 'click .add-social-link': 'addSocialLink'
- constructor: ->
- super
- @active @render
- render: (params) ->
- @dirtyForm = false
- @editing = params.id?
- if @editing
- @copying = params.id.split('-')[0] is 'copy'
- if @copying
- @title = 'Copy Site'
- @item = Site.find(params.id.split('-')[1]).dup()
- # Important to indicate that we are creating a new record
- @editing = false
- else
- @item = Site.find(params.id)
- @title = @item.name
- else
- @title = 'New Site'
- @item = {}
-
- @item.themes = settings.app.themes
- @html templates.render('site-form.html', {}, @item)
- @itemTitle.html @title
-
- # Set few initial form values
- if @editing or @copying
- @formTheme.val(@item.theme)
- @formSiteId.prop('readonly', true)
- @formDefaultAdEnabled.prop('checked', @item.default_ad_enabled)
- else
- @addSocialLink()
- return @
- addSocialLink: (e) ->
- e?.preventDefault()
- @socialLinksList.append templates.render('partials/link-form.html', {}, {})
- save: (e) ->
- e.preventDefault()
- if not navigator.onLine
- alert "Can not save. You are OFFLINE."
- return
-
- if @editing
- @item.fromForm(@form)
- else
- @item = new Site().fromForm(@form)
- # Construct the social links list object
- links = []
- @socialLinksList.find('.link-form').each ->
- label = $.trim $(@).find('input[name=link_label]').val()
- url = $.trim $(@).find('input[name=link_url]').val()
- code = $.trim $(@).find('input[name=link_code]').val()
- if label and url
- links.push label: label, url: url, code: code
- @item.social_links = links
- # Take care of some boolean checkboxes
- @item.default_ad_enabled = @formDefaultAdEnabled.is(':checked')
-
- # Save the item and make sure it validates
- if @item.save()
- @back()
- else
- msg = @item.validate()
- @showError msg
- return @
- showError: (msg) ->
- @errorMessage.html(msg).show()
- @el.scrollTop(0)
-
- destroy: (e) ->
- e.preventDefault()
- if @item and confirm "Are you sure you want to delete this item?"
- @item.destroy()
- @back()
- markAsDirty: =>
- @dirtyForm = true
- @saveButton.addClass('glow')
-
- cancel: (e) ->
- e.preventDefault()
- if @dirtyForm
- if confirm "You may have some unsaved changes.\nAre you sure you want to proceed?"
- @back()
- else
- @back()
- back: ->
- @navigate('/sites/list')
- preventSubmit: (e) ->
- e.preventDefault()
- return false
-
- deactivate: ->
- @el.scrollTop(0)
- super
- class SiteList extends Spine.Controller
- className: 'site list panel fixed-header'
- events:
- 'click h1 .count': 'reload'
- constructor: ->
- super
- # @active @render
- Site.bind 'change refresh', @render
- Spine.bind 'filterbox:change', @filter
- render: =>
- context =
- sites: Site.filter(@filterObj).sort(Site.alphaSort)
- @html templates.render('sites.html', {}, context)
- filter: (@filterObj) =>
- @render()
- @el.scrollTop(0)
- reload: ->
- Site.fetch()
- class Sites extends Spine.Stack
- className: 'sites panel'
- controllers:
- list: SiteList
- form: SiteForm
- default: 'list'
- routes:
- '/sites/list': 'list'
- '/site/new': 'form'
- '/site/:id': 'form'
- constructor: ->
- super
- for k, v of @controllers
- @[k].active => @active()
- module.exports = Sites
|