Report abuse

Radiant CMS hook to include ajax-save.js in admin edit views

# can be put in the `activate` method of an extension
Admin::PageController.class_eval do
  before_filter :enable_ajax_save, :only => [:edit]

  protected
    def enable_ajax_save
      include_javascript 'ajax-save.js'
    end
end

public/javascripts/ajax-save.js -- unobtrusive Ajax post on "save and continue" (javascript)

// works with page_attachments extension (latest version):
// http://dev.radiantcms.org/svn/radiant/trunk/extensions/page_attachments
document.observe("dom:loaded", function() {
  when('form[method=post]', function(form) {
    var contButton = false, 
        lockField = $('page_lock_version'),
        attachments = $('attachments')

    $(form['continue']).observe('click', function() {
      contButton = true
    })

    form.observe('submit', function(e) {
      if (contButton && !this.down('input[type=file]')) {
        form.request({
          onFailure: function() { alert("Ajax saving failed!") },
          onSuccess: function() {
            lockField.setValue(parseInt(lockField.getValue()) + 1)
            if (attachments)
              when(attachments.select('input[name="page[delete_attachments][]"]'), function(inputs) {
                inputs.invoke('remove')
                attachments.down('.notice').remove()
              })
          }
        })
        contButton = false
        e.stop()
      }
    })
  })
})