/* * This file is part of Phraseanet * * (c) 2005-2013 Alchemy * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ define([ "jquery", "underscore", "backbone", "i18n", "bootstrap", "apps/admin/fields/views/alert" ], function($, _, Backbone, i18n, bootstrap, AlertView) { var SaveView = Backbone.View.extend({ initialize: function() { var self = this; this.previousAttributes = []; this.$overlay = null; AdminFieldApp.errorManager.on("add-error", function(errors) { self._disableSaveButton(true); }); AdminFieldApp.errorManager.on("no-error", function() { self._disableSaveButton(false); }); }, events: { "click button.save-all" : "clickSaveAction" }, clickSaveAction: function(event) { var self = this; if (this._isModelDesync()) { this._loadingState(true); $.when.apply($, _.map(AdminFieldApp.fieldsToDelete, function(m){ return m.destroy({ success: function(model, response) { AdminFieldApp.fieldsToDelete = _.filter(AdminFieldApp.fieldsToDelete, function(m){ return model.get("id") !== m.get("id"); }); }, error: function(xhr, textStatus, errorThrown) { new AlertView({ alert: "error", message: '' !== xhr.responseText ? xhr.responseText : i18n.t("something_wrong") }).render(); } }); })).done( function() { AdminFieldApp.fieldsCollection.save({ success: function(fields) { // reset collection with new one AdminFieldApp.fieldsCollection.reset(fields); new AlertView({ alert: "success", message: i18n.t("fields_save"), delay: 2000 }).render(); }, error: function(xhr, textStatus, errorThrown) { new AlertView({ alert: "error", message: '' !== xhr.responseText ? xhr.responseText : i18n.t("something_wrong") }).render(); } }).done(function() { self._loadingState(false); }); } ); } return this; }, render: function () { var template = _.template($("#save_template").html()); this.$el.html(template); this.updateStateButton(); return this; }, updateStateButton: function() { this._disableSaveButton(!this._isModelDesync()); }, // check whether model has changed or not _isModelDesync: function () { return "undefined" !== typeof AdminFieldApp.fieldsCollection.find(function(model) { return !_.isEmpty(model.previousAttributes()); }); }, // create a transparent overlay on top of the application _overlay: function(showOrHide) { if(showOrHide && !this.$overlay) { this.$overlay = $("
").addClass("overlay"); AdminFieldApp.$bottom.append(this.$overlay); } else if (!showOrHide && this.$overlay) { this.$overlay.remove(); this.$overlay = null; } }, _disableSaveButton: function (active) { $("button.save-all", this.$el).attr("disabled", active); }, // put application on loading state (add overlay, add spinner, disable global save button) _loadingState: function(active) { if (active) { $(".save-block", AdminFieldApp.$top).addClass("loading"); $(".block-alert", AdminFieldApp.$top).empty(); } else { $(".save-block", AdminFieldApp.$top).removeClass("loading"); } this.updateStateButton(); this._overlay(active); } }); return SaveView; });