Sha256: 097c9ce008328b943244952a70e91a19f20d4c3b056b63b6dd375c32e3678d2b

Contents?: true

Size: 1.97 KB

Versions: 25

Compression:

Stored size: 1.97 KB

Contents

Blacklight.onLoad(function() {
  $("li[data-reorder-id]").each(function(index, element) {
    let manager_member = new FileManagerMember($(element), window.save_manager)
    $(element).data("file_manager_member", manager_member)
  })
})
class InputTracker {
  constructor(element, notifier) {
    this.element = element
    this.notifier = notifier
    this.element.data("initial-value", this.element.val())
    this.element.data("tracker", this)
    this.element.change(this.value_changed)
  }

  reset() {
    this.element.data("initial-value", this.element.val())
    this.notifier.mark_unchanged(this.element)
  }

  get value_changed() {
    return () => {
      if(this.element.val() == this.element.data("initial-value")) {
        this.notifier.mark_unchanged(this.element)
      } else {
        this.notifier.push_changed(this.element)
      }
    }
  }
}
class FileManagerMember {
  constructor(element, save_manager) {
    this.element = element
    this.save_manager = save_manager
    this.elements = []
    this.track_label()
  }

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

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

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

  track_label() {
    new InputTracker(this.element.find("input[type='text']"), this)
  }

  persist() {
    if(this.is_changed) {
      let form = this.element.find("form")
      let deferred = $.Deferred()
      form.on("ajax:success", () => {
        this.elements.forEach((element) => {
          element.data("tracker").reset()
        })
        deferred.resolve()
      })
      form.on("ajax:error", () => {
        deferred.reject()
      })
      form.submit()
      return deferred
    } else {
      return $.Deferred().resolve()
    }
  }
}

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
curation_concerns-1.0.0.beta3 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-1.0.0.beta2 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-1.0.0.beta1 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.14.0 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.14.0.pre4 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.14.0.pre3 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.14.0.pre2 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.14.0.pre1 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.13.1 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.13.0 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.12.0 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.12.0.pre9 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.12.0.pre8 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.12.0.pre7 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.12.0.pre6 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.12.0.pre5 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.12.0.pre4 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.12.0.pre3 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.12.0.pre2 app/assets/javascripts/curation_concerns/file_manager/member.es6
curation_concerns-0.12.0.pre1 app/assets/javascripts/curation_concerns/file_manager/member.es6