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