Merge branch 'master' into uma

pulled in deep link checking and checkbox handling
pull/708/merge
Justin Richer 2015-02-27 10:16:25 -05:00
commit 351ce3995a
5 changed files with 169 additions and 108 deletions

View File

@ -33,6 +33,7 @@ Backbone.Model.prototype.fetchIfNeeded = function(options) {
return options.success(this, null); return options.success(this, null);
} }
}; };
Backbone.Collection.prototype.fetchIfNeeded = function(options) { Backbone.Collection.prototype.fetchIfNeeded = function(options) {
var _self = this; var _self = this;
if (!options) { if (!options) {
@ -639,58 +640,26 @@ var AppRouter = Backbone.Router.extend({
this.updateSidebar('admin/clients'); this.updateSidebar('admin/clients');
var client = this.clientList.get(id); var client = this.clientList.get(id);
if (!client) {
if (client == null) { client = new ClientModel({id:id});
// it wasn't in the list, try loading the client directly
client = new ClientModel({id: id});
} }
$('#loadingbox').sheet('show'); var view = new ClientFormView({model:client, systemScopeList: app.systemScopeList});
$('#loading').html( view.load(function() {
'<span class="label" id="loading-scopes">' + $.t('common.scopes') + '</span> ' if ($.inArray("refresh_token", client.get("grantTypes")) != -1) {
+ '<span class="label" id="loading-client">' + $.t('common.client') + '</span> '); client.set({
allowRefresh: true
}, { silent: true });
}
// re-sync the client every time client.set({
client.fetch({ generateClientSecret:false,
success: function(client, response, options) { displayClientSecret:false
$('#loading-client').addClass('label-success'); }, { silent: true });
if ($.inArray("refresh_token", client.get("grantTypes")) != -1) { $('#content').html(view.render().el);
client.set({ setPageTitle($.t('client.client-form.edit'));
allowRefresh: true });
}, { silent: true });
}
client.set({
generateClientSecret:false,
displayClientSecret:false
}, { silent: true });
var view = new ClientFormView({model:client, systemScopeList: app.systemScopeList});
view.load(function() {
$('#content').html(view.render().el);
setPageTitle($.t('client.client-form.edit'));
});
},
error: function(model, response, options) {
//Pull out the response text.
var responseJson = JSON.parse(response.responseText);
//Display an alert with an error message
$('#modalAlert div.modal-header').html(responseJson.error);
$('#modalAlert div.modal-body').html(responseJson.error_description);
$("#modalAlert").modal({ // wire up the actual modal functionality and show the dialog
"backdrop" : "static",
"keyboard" : true,
"show" : true // ensure the modal is shown immediately
});
}
});
}, },
@ -729,33 +698,35 @@ var AppRouter = Backbone.Router.extend({
return; return;
} }
this.breadCrumbView.collection.reset();
this.breadCrumbView.collection.add([
{text:$.t('admin.home'), href:""},
{text:$.t('whitelist.manage'), href:"manage/#admin/whitelists"},
{text:$.t('whitelist.new'), href:"manage/#admin/whitelist/new/" + cid}
]);
this.updateSidebar('admin/whitelists'); this.updateSidebar('admin/whitelists');
var whiteList = new WhiteListModel();
var client = this.clientList.get(cid); var client = this.clientList.get(cid);
if (!client) {
// if there's no client this is an error client = new ClientModel({id: cid});
if (client != null) {
this.breadCrumbView.collection.reset();
this.breadCrumbView.collection.add([
{text:$.t('admin.home'), href:""},
{text:$.t('whitelist.manage'), href:"manage/#admin/whitelists"},
{text:$.t('whitelist.new'), href:"manage/#admin/whitelist/new/" + cid}
]);
var whiteList = new WhiteListModel();
whiteList.set({
clientId: client.get('clientId'),
allowedScopes: client.get('scope')
}, { silent: true });
this.whiteListFormView = new WhiteListFormView({model: whiteList, client: client, systemScopeList: this.systemScopeList});
$('#content').html(this.whiteListFormView.render().el);
setPageTitle($.t('whitelist.new'));
} else {
console.log('ERROR: no client found for ' + cid);
} }
var view = new WhiteListFormView({model: whiteList, client: client, systemScopeList: this.systemScopeList});
view.load(
function() {
// set the scopes on the model now that everything's loaded
whiteList.set({allowedScopes: client.get('scope')}, {silent: true});
$('#content').html(view.render().el);
view.delegateEvents();
setPageTitle($.t('whitelist.manage'));
}
);
}, },
@ -776,21 +747,20 @@ var AppRouter = Backbone.Router.extend({
this.updateSidebar('admin/whitelists'); this.updateSidebar('admin/whitelists');
var whiteList = this.whiteListList.get(id); var whiteList = this.whiteListList.get(id);
if (whiteList != null) { if (!whiteList) {
var client = app.clientList.getByClientId(whiteList.get('clientId')); whiteList = new WhiteListModel({id: id});
// if there's no client, this is an error
if (client != null) {
this.whiteListFormView = new WhiteListFormView({model: whiteList, client: client, systemScopeList: this.systemScopeList});
$('#content').html(this.whiteListFormView.render().el);
setPageTitle($.t('whitelist.edit'));
} else {
console.log('ERROR: no client found for ' + whiteList.get('clientId'));
}
} else {
console.error('ERROR: no whitelist found for id ' + id);
} }
var view = new WhiteListFormView({model: whiteList, clientList: this.clientList, systemScopeList: this.systemScopeList});
view.load(
function() {
$('#content').html(view.render().el);
view.delegateEvents();
setPageTitle($.t('whitelist.manage'));
}
);
}, },
approvedSites:function() { approvedSites:function() {
@ -912,9 +882,11 @@ var AppRouter = Backbone.Router.extend({
var scope = new SystemScopeModel(); var scope = new SystemScopeModel();
this.systemScopeFormView = new SystemScopeFormView({model:scope}); var view = new SystemScopeFormView({model:scope});
$('#content').html(this.systemScopeFormView.render().el); view.load(function() {
setPageTitle($.t('scope.system-scope-form.new')); $('#content').html(view.render().el);
setPageTitle($.t('scope.system-scope-form.new'));
});
}, },
@ -935,10 +907,15 @@ var AppRouter = Backbone.Router.extend({
this.updateSidebar('admin/scope'); this.updateSidebar('admin/scope');
var scope = this.systemScopeList.get(sid); var scope = this.systemScopeList.get(sid);
if (!scope) {
scope = new SystemScopeModel({id: sid});
}
this.systemScopeFormView = new SystemScopeFormView({model:scope}); var view = new SystemScopeFormView({model:scope});
$('#content').html(this.systemScopeFormView.render().el); view.load(function() {
setPageTitle($.t('scope.system-scope-form.edit')); $('#content').html(view.render().el);
setPageTitle($.t('scope.system-scope-form.new'));
});
}, },

View File

@ -644,20 +644,21 @@ var ClientFormView = Backbone.View.extend({
}, },
load:function(callback) { load:function(callback) {
if (this.options.systemScopeList.isFetched) { if (this.model.isFetched &&
$('#loadingbox').sheet('hide'); this.options.systemScopeList.isFetched) {
callback(); callback();
return; return;
} }
if (this.model.get('id') == null) { $('#loadingbox').sheet('show');
// only show the box if this is a new client, otherwise the box is already showing $('#loading').html(
$('#loadingbox').sheet('show'); '<span class="label" id="loading-clients">' + $.t('common.clients') + '</span> ' +
$('#loading').html('<span class="label" id="loading-scopes">' + $.t("common.scopes") + '</span> '); '<span class="label" id="loading-scopes">' + $.t("common.scopes") + '</span> '
} );
$.when(this.options.systemScopeList.fetchIfNeeded({success:function(e) {$('#loading-scopes').addClass('label-success');}})) $.when(this.options.systemScopeList.fetchIfNeeded({success:function(e) {$('#loading-scopes').addClass('label-success');}}),
.done(function() { this.model.fetchIfNeeded({success:function(e) {$('#loading-clients').addClass('label-success');}}))
.done(function() {
$('#loadingbox').sheet('hide'); $('#loadingbox').sheet('hide');
callback(); callback();
}); });

View File

@ -284,6 +284,25 @@ var SystemScopeFormView = Backbone.View.extend({
'change #isStructured input':'toggleStructuredParamDescription' 'change #isStructured input':'toggleStructuredParamDescription'
}, },
load:function(callback) {
if (this.model.isFetched) {
callback();
return;
}
$('#loadingbox').sheet('show');
$('#loading').html(
'<span class="label" id="loading-scopes">' + $.t("common.scopes") + '</span> '
);
$.when(this.model.fetchIfNeeded({success:function(e) {$('#loading-scopes').addClass('label-success');}}))
.done(function() {
$('#loadingbox').sheet('hide');
callback();
});
},
toggleStructuredParamDescription:function(e) { toggleStructuredParamDescription:function(e) {
if ($('#isStructured input', this.el).is(':checked')) { if ($('#isStructured input', this.el).is(':checked')) {
$('#structuredParamDescription', this.el).show(); $('#structuredParamDescription', this.el).show();

View File

@ -254,6 +254,73 @@ var WhiteListFormView = Backbone.View.extend({
this.listWidgetViews = []; this.listWidgetViews = [];
},
load:function(callback) {
if (this.options.client) {
// we know what client we're dealing with already
if (this.model.isFetched &&
this.options.client.isFetched) {
callback();
return;
}
$('#loadingbox').sheet('show');
$('#loading').html(
'<span class="label" id="loading-whitelist">' + $.t('whitelist.whitelist') + '</span> ' +
'<span class="label" id="loading-clients">' + $.t('common.clients') + '</span> ' +
'<span class="label" id="loading-scopes">' + $.t('common.scopes') + '</span> '
);
$.when(this.model.fetchIfNeeded({success:function(e) {$('#loading-whitelist').addClass('label-success');}}),
this.options.client.fetchIfNeeded({success:function(e) {$('#loading-clients').addClass('label-success');}}),
this.options.systemScopeList.fetchIfNeeded({success:function(e) {$('#loading-scopes').addClass('label-success');}}))
.done(function() {
$('#loadingbox').sheet('hide');
callback();
});
} else {
// we need to get the client information from the list
if (this.model.isFetched &&
this.options.clientList.isFetched &&
this.options.systemScopeList.isFetched) {
var client = this.options.clientList.getByClientId(this.model.get('clientId'));
this.options.client = client;
callback();
return;
}
$('#loadingbox').sheet('show');
$('#loading').html(
'<span class="label" id="loading-whitelist">' + $.t('whitelist.whitelist') + '</span> ' +
'<span class="label" id="loading-clients">' + $.t('common.clients') + '</span> ' +
'<span class="label" id="loading-scopes">' + $.t('common.scopes') + '</span> '
);
var _self = this;
$.when(this.model.fetchIfNeeded({success:function(e) {$('#loading-whitelist').addClass('label-success');}}),
this.options.clientList.fetchIfNeeded({success:function(e) {$('#loading-clients').addClass('label-success');}}),
this.options.systemScopeList.fetchIfNeeded({success:function(e) {$('#loading-scopes').addClass('label-success');}}))
.done(function() {
var client = _self.options.clientList.getByClientId(_self.model.get('clientId'));
_self.options.client = client;
$('#loadingbox').sheet('hide');
callback();
});
}
}, },
events:{ events:{
@ -274,9 +341,7 @@ var WhiteListFormView = Backbone.View.extend({
// process allowed scopes // process allowed scopes
var allowedScopes = this.scopeCollection.pluck("item"); var allowedScopes = this.scopeCollection.pluck("item");
if (this.model.get('id') == null) { this.model.set({clientId: this.options.client.get('clientId')}, {silent: true});
this.model.set({clientId:$('#clientId input').val()});
}
var valid = this.model.set({ var valid = this.model.set({
allowedScopes: allowedScopes allowedScopes: allowedScopes
@ -340,7 +405,7 @@ var WhiteListFormView = Backbone.View.extend({
var scopeView = new ListWidgetView({ var scopeView = new ListWidgetView({
placeholder: $.t('whitelist.whitelist-form.scope-placeholder'), placeholder: $.t('whitelist.whitelist-form.scope-placeholder'),
autocomplete: this.options.client.scope, autocomplete: this.options.client.get("scope"),
helpBlockText: $.t('whitelist.whitelist-form.scope-help'), helpBlockText: $.t('whitelist.whitelist-form.scope-help'),
collection: this.scopeCollection}); collection: this.scopeCollection});
$("#scope .controls",this.el).html(scopeView.render().el); $("#scope .controls",this.el).html(scopeView.render().el);

View File

@ -87,7 +87,6 @@
<div class="control-group" id="clientId"> <div class="control-group" id="clientId">
<label class="control-label" data-i18n="common.client">Client</label> <label class="control-label" data-i18n="common.client">Client</label>
<div class="controls"> <div class="controls">
<input type="hidden" name="clientId" value="<%- client.clientId %>" />
<span title="<%- client.clientId %>"><%- client.clientName != null ? client.clientName : ( client.clientId.substr(0,8) + '...' ) %></span> <span title="<%- client.clientId %>"><%- client.clientName != null ? client.clientName : ( client.clientId.substr(0,8) + '...' ) %></span>
</div> </div>
</div> </div>