lazy loading for everybody!

pull/567/head
Justin Richer 2014-03-16 00:18:28 -04:00
parent a10761b889
commit 68580dad72
6 changed files with 164 additions and 72 deletions

View File

@ -16,6 +16,17 @@
******************************************************************************/ ******************************************************************************/
Backbone.Model.prototype.fetchIfNeeded = function(options) { Backbone.Model.prototype.fetchIfNeeded = function(options) {
var _self = this;
if (!options) {
options = {};
}
var success = options.success;
options.success = function(c, r) {
_self.isFetched = true;
if (success) {
success(c, r);
}
};
if (!this.isFetched) { if (!this.isFetched) {
return this.fetch(options); return this.fetch(options);
} else { } else {
@ -23,6 +34,17 @@ Backbone.Model.prototype.fetchIfNeeded = function(options) {
} }
}; };
Backbone.Collection.prototype.fetchIfNeeded = function(options) { Backbone.Collection.prototype.fetchIfNeeded = function(options) {
var _self = this;
if (!options) {
options = {};
}
var success = options.success;
options.success = function(c, r) {
_self.isFetched = true;
if (success) {
success(c, r);
}
};
if (!this.isFetched) { if (!this.isFetched) {
return this.fetch(options); return this.fetch(options);
} else { } else {
@ -244,16 +266,28 @@ var BlackListListView = Backbone.View.extend({
} }
}, },
load:function(callback) {
$('#loadingbox').show();
$('#loading').html('blacklist');
$.when(this.model.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
callback();
});
},
events: { events: {
"click .refresh-table":"refreshTable" "click .refresh-table":"refreshTable"
}, },
refreshTable:function() { refreshTable:function() {
var _self = this; var _self = this;
this.model.fetch({ $('#loadingbox').show();
success: function() { $('#loading').html('blacklist');
$.when(this.model.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
_self.render(); _self.render();
}
}); });
}, },
@ -581,9 +615,16 @@ var AppRouter = Backbone.Router.extend({
{text:"Manage Whitelisted Sites", href:"manage/#admin/whitelists"} {text:"Manage Whitelisted Sites", href:"manage/#admin/whitelists"}
]); ]);
$('#content').html(this.whiteListListView.render().el); var view = this.whiteListListView;
this.whiteListListView.delegateEvents();
view.load(
function() {
$('#content').html(view.render().el);
view.delegateEvents();
setPageTitle("Manage Whitelists"); setPageTitle("Manage Whitelists");
}
);
}, },
@ -663,12 +704,12 @@ var AppRouter = Backbone.Router.extend({
var view = this.approvedSiteListView; var view = this.approvedSiteListView;
this.approvedSiteList.fetch({success: this.approvedSiteListView.load(
function(collection, response, options) { function(collection, response, options) {
$('#content').html(view.render().el); $('#content').html(view.render().el);
setPageTitle("Manage Approved Sites"); setPageTitle("Manage Approved Sites");
} }
}); );
}, },
@ -681,16 +722,13 @@ var AppRouter = Backbone.Router.extend({
var view = this.tokensListView; var view = this.tokensListView;
app.accessTokensList.fetch({ view.load(
success:function(collection, response, options) { function(collection, response, options) {
app.refreshTokensList.fetch({
success:function(collection, response, options) {
$('#content').html(view.render().el); $('#content').html(view.render().el);
setPageTitle("Manage Active Tokens"); setPageTitle("Manage Active Tokens");
} }
}); );
}
});
}, },
notImplemented:function(){ notImplemented:function(){
@ -716,13 +754,12 @@ var AppRouter = Backbone.Router.extend({
var view = this.blackListListView; var view = this.blackListListView;
this.blackListList.fetch({success: view.load(
function(collection, response, options) { function(collection, response, options) {
$('#content').html(view.render().el); $('#content').html(view.render().el);
setPageTitle("Manage Blacklist"); setPageTitle("Manage Blacklist");
} }
}); );
}, },
siteScope:function() { siteScope:function() {
@ -738,9 +775,13 @@ var AppRouter = Backbone.Router.extend({
{text:"Manage System Scopes", href:"manage/#admin/scope"} {text:"Manage System Scopes", href:"manage/#admin/scope"}
]); ]);
$('#content').html(this.systemScopeListView.render().el); var view = this.systemScopeListView;
this.systemScopeListView.delegateEvents();
view.load(function() {
$('#content').html(view.render().el);
view.delegateEvents();
setPageTitle("Manage System Scopes"); setPageTitle("Manage System Scopes");
});
}, },

View File

@ -236,20 +236,16 @@ var ClientListView = Backbone.View.extend({
}, },
load:function(callback) { load:function(callback) {
var cleanup = function() { $('#loadingbox').show();
$('#loadingbox').hide('slow');
callback();
}
$('#loadingbox').show('slow');
$('#loading').html('clients'); $('#loading').html('clients');
$.when(this.model.fetchIfNeeded(), $.when(this.model.fetchIfNeeded(),
this.options.whiteListList.fetchIfNeeded(), this.options.whiteListList.fetchIfNeeded(),
this.options.stats.fetchIfNeeded(), this.options.stats.fetchIfNeeded(),
this.options.systemScopeList.fetchIfNeeded()).done(cleanup); this.options.systemScopeList.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
//this.model.fetchIfNeeded({success:cleanup}); callback();
});
}, },
@ -297,14 +293,11 @@ var ClientListView = Backbone.View.extend({
refreshTable:function() { refreshTable:function() {
var _self = this; var _self = this;
_self.model.fetch({ $.when(this.model.fetchIfNeeded(),
success: function() { this.options.whiteListList.fetchIfNeeded(),
_self.options.stats.fetch({ this.options.stats.fetchIfNeeded(),
success: function () { this.options.systemScopeList.fetchIfNeeded()).done(function() {
_self.render(); _self.render();
}
});
}
}); });
} }
}); });

View File

@ -36,6 +36,18 @@ var ApprovedSiteListView = Backbone.View.extend({
initialize:function() { }, initialize:function() { },
load:function(callback) {
$('#loadingbox').show();
$('#loading').html('approved sites');
$.when(this.model.fetchIfNeeded(),
this.options.clientList.fetchIfNeeded(),
this.options.systemScopeList.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
callback();
});
},
events: { events: {
"click .refresh-table":"refreshTable" "click .refresh-table":"refreshTable"
}, },
@ -94,10 +106,14 @@ var ApprovedSiteListView = Backbone.View.extend({
refreshTable:function() { refreshTable:function() {
var _self = this; var _self = this;
this.model.fetch({ $('#loadingbox').show();
success: function() { $('#loading').html('approved sites');
$.when(this.model.fetch(),
this.options.clientList.fetch(),
this.options.systemScopeList.fetch()).done(function() {
$('#loadingbox').hide('slow');
_self.render(); _self.render();
}
}); });
} }

View File

@ -134,6 +134,16 @@ var SystemScopeView = Backbone.View.extend({
var SystemScopeListView = Backbone.View.extend({ var SystemScopeListView = Backbone.View.extend({
tagName: 'span', tagName: 'span',
load:function(callback) {
$('#loadingbox').show();
$('#loading').html('approved sites');
$.when(this.model.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
callback();
});
},
events:{ events:{
"click .new-scope":"newScope", "click .new-scope":"newScope",
"click .refresh-table":"refreshTable" "click .refresh-table":"refreshTable"
@ -146,10 +156,12 @@ var SystemScopeListView = Backbone.View.extend({
refreshTable:function() { refreshTable:function() {
var _self = this; var _self = this;
this.model.fetch({ $('#loadingbox').show();
success: function() { $('#loading').html('approved sites');
$.when(this.model.fetch()).done(function() {
$('#loadingbox').hide('slow');
_self.render(); _self.render();
}
}); });
}, },

View File

@ -311,16 +311,30 @@ var TokenListView = Backbone.View.extend({
"click .refresh-table":"refreshTable" "click .refresh-table":"refreshTable"
}, },
load:function(callback) {
$('#loadingbox').show();
$('#loading').html('tokens');
$.when(this.model.access.fetchIfNeeded(),
this.model.refresh.fetchIfNeeded(),
this.options.clientList.fetchIfNeeded(),
this.options.systemScopeList.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
callback();
});
},
refreshTable:function() { refreshTable:function() {
$('#loadingbox').show();
$('#loading').html('tokens');
var _self = this; var _self = this;
_self.model.access.fetch({ $.when(this.model.access.fetch(),
success: function() { this.model.refresh.fetch(),
_self.model.refresh.fetch({ this.options.clientList.fetch(),
success:function() { this.options.systemScopeList.fetch()).done(function(){
_self.render(); _self.render();
} $('#loadingbox').hide('slow');
})
}
}); });
}, },

View File

@ -50,6 +50,18 @@ var WhiteListListView = Backbone.View.extend({
//this.model.bind("reset", this.render, this); //this.model.bind("reset", this.render, this);
}, },
load:function(callback) {
$('#loadingbox').show();
$('#loading').html('whitelist');
$.when(this.model.fetchIfNeeded(),
this.options.clientList.fetchIfNeeded(),
this.options.systemScopeList.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
callback();
});
},
events:{ events:{
"click .refresh-table":"refreshTable" "click .refresh-table":"refreshTable"
}, },
@ -86,10 +98,14 @@ var WhiteListListView = Backbone.View.extend({
refreshTable:function() { refreshTable:function() {
var _self = this; var _self = this;
this.model.fetch({ $('#loadingbox').show();
success: function() { $('#loading').html('whitelist');
$.when(this.model.fetchIfNeeded(),
this.options.clientList.fetchIfNeeded(),
this.options.systemScopeList.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
_self.render(); _self.render();
}
}); });
} }
}); });