Sha256: 51b1ba9a3d424bb6f2cfe89bc034f247a46d6b40ca21660458fb839fd682635e

Contents?: true

Size: 1.5 KB

Versions: 3

Compression:

Stored size: 1.5 KB

Contents

class SaveManager {
  constructor() {
    this.override_save_button()
    this.elements = []
  }

  override_save_button() {
    jQuery(() => {
      this.save_button.click(this.clicked_save)
    })
  }

  push_changed(element) {
    this.elements.push(element)
    this.elements = $.unique(this.elements)
    this.check_button()
  }

  mark_unchanged(element) {
    this.elements = jQuery.grep(this.elements, (value) => {
      return value != element
    })
    this.check_button()
  }

  check_button() {
    if(this.is_changed && this.save_button.text() == "Save") {
      this.save_button.removeClass("disabled")
    } else {
      this.save_button.addClass("disabled")
    }
  }

  persist() {
    let promises = []
    this.elements.forEach((element) => {
      let result = element.persist()
      promises.push(
        result.then(() => { return element })
        .done((element) => { this.mark_unchanged(element) })
        .fail((element) => { this.push_changed(element) })
      )
    })
    this.save_button.text("Saving...")
    this.save_button.addClass("disabled")
    $.when.apply($, promises).always(() => { this.reset_save_button() })
  }
  
  reset_save_button() {
    this.save_button.text("Save")
    this.check_button()
  }

  get is_changed() {
    return this.elements.length > 0
  }

  get save_button() {
    return $("*[data-action='save-actions']")
  }

  get clicked_save() {
    return (event) => {
      event.preventDefault()
      this.persist()
    }
  }
}

window.save_manager = new SaveManager

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
curation_concerns-0.10.0 app/assets/javascripts/curation_concerns/file_manager/save_manager.es6
curation_concerns-0.9.0 app/assets/javascripts/curation_concerns/file_manager/save_manager.es6
curation_concerns-0.8.0 app/assets/javascripts/curation_concerns/file_manager/save_manager.es6