1
0
Fork 0
arangodb/js/apps/system/aardvark/frontend/js/views/databaseView.js

165 lines
4.6 KiB
JavaScript

/*jslint indent: 2, nomen: true, maxlen: 100, sloppy: true, vars: true, white: true, plusplus: true */
/*global window, document, Backbone, EJS, SwaggerUi, hljs, $, arangoHelper */
window.databaseView = Backbone.View.extend({
el: '#content',
template: new EJS({url: 'js/templates/databaseView.ejs'}),
currentDB: "",
events: {
"click #createDatabase" : "createDatabase",
"click #submitCreateDatabase" : "submitCreateDatabase",
"click #selectDatabase" : "updateDatabase",
"click #databaseTable .glyphicon-minus-sign" : "removeDatabase",
"click #submitDeleteDatabase" : "submitRemoveDatabase",
"click .databaseInactive a" : "changeDatabase"
},
initialize: function() {
var self = this;
this.collection.fetch({async:false});
},
render: function(){
this.currentDatabase();
$(this.el).html(this.template.render({}));
this.renderTable();
this.selectCurrentDatabase();
return this;
},
renderTable: function () {
this.collection.map(function(dbs) {
$("#databaseTable tbody").append(
'<tr><td><a>' + dbs.get("name") + '</a></td>' +
'<td><span class="glyphicon glyphicon-minus-sign"' +
'data-original-title="Delete database"></span></td></tr>'
);
});
},
selectedDatabase: function () {
return $('#selectDatabases').val();
},
handleError: function(status, text, dbname) {
if (status === 409) {
arangoHelper.arangoError("Database " + dbname + " already exists.");
return;
}
if (status === 400) {
arangoHelper.arangoError("Invalid Parameters");
return;
}
if (status === 403) {
arangoHelper.arangoError("Insufficent rights. Execute this from _system database");
return;
}
},
validateDatabaseInfo: function (db, user, pw) {
if (user === "") {
arangoHelper.arangoError("You have to define an owner for the new database");
return false;
}
if (db === "") {
arangoHelper.arangoError("You have to define a name for the new database");
return false;
}
if (db.indexOf("_") === 0) {
arangoHelper.arangoError("Databasename should not start with _");
return false;
}
if (!db.match(/^[a-zA-Z][a-zA-Z0-9_\-]*$/)) {
arangoHelper.arangoError("Databasename may only contain numbers, letters, _ and -");
return false;
}
return true;
},
submitCreateDatabase: function() {
var self = this;
var name = $('#newDatabaseName').val();
var userName = $('#newUser').val();
var userPassword = $('#newPassword').val();
if (!this.validateDatabaseInfo(name, userName, userPassword)) {
return;
}
var options = {
name: name,
users: [
{
username: userName,
passwd: userPassword,
active: true
}
]
};
this.collection.create(options, {
wait:true,
error: function(data, err) {
self.handleError(err.status, err.statusText, name);
},
success: function(data) {
arangoHelper.arangoNotification("Database " + name + " created.");
self.hideModal();
self.updateDatabases();
}
});
},
hideModal: function() {
$('#createDatabaseModal').modal('hide');
},
showModal: function() {
$('#createDatabaseModal').modal('show');
},
createDatabase: function() {
this.showModal();
},
submitRemoveDatabase: function(e) {
var toDelete = this.collection.where({name: this.dbToDelete});
toDelete[0].destroy({wait: true, url:"/_api/database/"+this.dbToDelete});
arangoHelper.arangoNotification("Database " + this.dbToDelete + " deleted.");
this.dbToDelete = '';
$('#deleteDatabaseModal').modal('hide');
this.updateDatabases();
},
removeDatabase: function(e) {
this.dbToDelete = $(e.currentTarget).parent().parent().children().first().text();
$('#deleteDatabaseModal').modal('show');
},
currentDatabase: function() {
this.currentDB = this.collection.getCurrentDatabase();
},
selectCurrentDatabase: function() {
$('#databaseTableBody tr').addClass('databaseInactive');
var tr = $('#databaseTableBody td:contains('+this.currentDB+')').parent();
$(tr).removeClass('databaseInactive').addClass('databaseActive');
},
changeDatabase: function(e) {
var dbname = $(e.currentTarget).text();
var route = '/_db/' + encodeURIComponent(dbname) + '/_admin/aardvark/index.html#databases';
window.location = "http://"+window.location.host + route;
},
updateDatabases: function() {
var self = this;
this.collection.fetch({
success: function() {
self.render();
}
});
}
});