require([ 'dojo/_base/json', 'dojo/_base/lang', 'dojo/_base/xhr', 'dojo/parser', 'dojo/query', 'dijit/registry', 'dojo/text!./docs.json', 'dojo/domReady!', 'dijit/form/TextBox', 'dijit/form/Button', 'dijit/form/CheckBox', ], function(json,lang,xhr,parser,query,registry,docsJson){ var logNode; var usernameInput, passwordInput, resetInput, configButton; var defaultUsername = "", defaultPassword = ""; var dbUrl = "../data/"; parser.parse(); 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(){ log("Configuring CouchDB for RFT:",true); var username = usernameInput.get('value'); var password = passwordInput.get('value'); var reset = resetInput.get('value'); var docs = json.fromJson(docsJson); function req(method,url,body) { var args = { url: dbUrl+url, contentType: 'application/json', handleAs: 'json', sync: true, error: function(err) { log("ERROR: "+err); } }; 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; } });