require([ 'dojo/_base/json', 'dojo/_base/lang', 'dojo/_base/xhr', 'dojo/parser', 'dojo/query', 'dijit/registry', 'dojo/domReady!' ],function(json,lang,xhr,parser,query,registry){ var logNode; var usernameInput, passwordInput, resetInput, configButton; var defaultUsername = "", defaultPassword = ""; var dbUrl = "../data/"; parser.parse() .then(function(){ query("#log").forEach(function(n){logNode = n;}); usernameInput = registry.byId('username'); passwordInput = registry.byId('password'); resetInput = registry.byId('reset'); configButton = registry.byId('configure'); usernameInput.set('value',defaultUsername); passwordInput.set('value',defaultPassword); configButton.on('click',configure); log("Give CouchDB admin username & password and click 'Configure' to start.\nIf the database already exists, rft_admin password will suffice.",true); }); function configure(){ var docs; log("Configuring CouchDB for RFT:",true); var username = usernameInput.get('value'); var password = passwordInput.get('value'); var reset = resetInput.get('value'); log("Downloading most recent configuration."); xhr('GET',{ url: 'docs.json', handleAs: 'json', sync: true },true) .then(function(result){ docs = result; }); function req(method,url,body) { var args = { url: dbUrl+url, contentType: 'application/json', handleAs: 'json', sync: true }; if ( !body || lang.isObject(body) ) { body = json.toJson(body || {}); } args.rawBody = body; if ( username ) { args.user = username; args.password = password; } return xhr(method,args,true); } log("Checking CouchDB version"); req('GET','/') .then(function(res){ if (res.version !== "1.2.0" ) { log("Found "+res.version+", only tested with CouchDB 1.2.0") } else { log("CouchDB 1.2.0 found") } }); var exists = false; log("Checking database 'rft'"); req('GET','/rft') .then(function(db){ log("Database 'rft' found.") exists = true; }); if ( exists && reset ) { req('DELETE','/rft'); exists = false; } if ( !exists ) { log("Creating database 'rft'") req('PUT','/rft') }; function processDoc(docUrl,doc){ var configAction = doc.__configAction; delete doc.__configAction; switch (configAction) { case "ignore": log(docUrl+" ignored."); return false; case "update": log(docUrl+" updating."); return req('GET',docUrl) .then(function(oldDoc){ lang.mixin(oldDoc,doc); return req('PUT',docUrl,oldDoc); },function(){ return req('PUT',docUrl,doc); }); case "replace": default: log(docUrl+" replacing."); return req('GET',docUrl) .then(function(oldDoc){ doc['_rev'] = oldDoc['_rev']; return req('PUT',docUrl,doc); },function(){ return req('PUT',docUrl,doc); }); } } for (var docUrl in docs) { processDoc(docUrl,docs[docUrl]); } log("Done!"); } function log(text,overwrite) { if ( overwrite ) logNode.innerHTML = text else logNode.innerHTML = logNode.innerHTML + '\n' + text; } });