Refactor admin javascript to backbone application

This commit is contained in:
Nicolas Le Goff
2014-02-27 18:32:00 +01:00
parent 79cf2b7241
commit 93e17c2752
5 changed files with 389 additions and 179 deletions

View File

@@ -0,0 +1,104 @@
/*
* This file is part of Phraseanet
*
* (c) 2005-2014 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
define([
"jquery",
"underscore",
"backbone",
"jquery.tooltip",
"blueimp.loadimage",
"jfu.iframe-transport",
"jfu.fileupload",
"jquery.ui"
], function ($, _, Backbone) {
var RightPanelView = Backbone.View.extend({
initialize: function (options) {
if (false === "eventManager" in options) {
throw "You must set en event manager";
}
this.delegateEvents(this.events);
this.eventManager = options.eventManager;
var $this = this;
this.eventManager.on("panel:right:beforeSend", function() {
$this.$el.empty();
$this.loadingState(true);
});
this.eventManager.on("panel:right:complete", function() {
$this.loadingState(false);
});
this.eventManager.on("panel:right:success", function(data) {
$this.render(data);
})
},
events: {
"submit form:not(.no-ajax)": "submitAction",
"click a:not(.no-ajax)": "clickAction"
},
render: function (data) {
this.$el.html(data);
return this;
},
clickAction: function(event) {
event.preventDefault();
var $this = this;
var link = $(event.currentTarget);
var url = link.attr('href');
if(url && url.indexOf('#') !== 0) {
$.ajax({
type: link.attr("method") || "GET",
url: url,
success: function(data) {
$this.eventManager.trigger('panel:right:success', data);
},
beforeSend: function(){
$this.eventManager.trigger('panel:right:beforeSend');
},
complete: function(){
$this.eventManager.trigger('panel:right:complete');
}
});
}
},
submitAction: function(event) {
event.preventDefault();
var $this = this;
var link = $(event.currentTarget);
var url = link.attr('action') || 'GET';
if(url) {
$.ajax({
type: link.attr('method'),
url: url,
data: link.serializeArray(),
success: function (data) {
$this.eventManager.trigger("panel:right:success", data);
},
beforeSend: function(){
$this.eventManager.trigger('panel:right:beforeSend');
},
complete: function(){
$this.eventManager.trigger('panel:right:complete');
}
});
}
},
loadingState: function(state) {
if (state) {
this.$el.addClass("loading");
} else {
this.$el.removeClass("loading");
}
}
});
return RightPanelView;
});