dbot-tripsit/tripsit/pages.js

185 lines
7.4 KiB
JavaScript
Raw Permalink Normal View History

var _ = require('underscore');
var cap = function(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
var pages = function(dbot) {
var pages = {
'/factsheet/test': function(req, res) {
res.end(req.user.access);
},
'/factsheet/wikitemplate/:drug': function(req, res) {
this.api.getDrug(req.params.drug, function(drug) {
if(drug) {
d = drug.properties;
if(!_.has(d,'categories')) d.categories = [];
res.header("Content-Type", "text/plain; charset=utf-8");
var template = this.config.wikiTemplate.format({
'dose': d.dose,
'onset': d.onset,
'duration': d.duration,
'avoid': d.avoid,
'categories': d.categories.join(', '),
'summary': d.summary,
'after-effects': d['after-effects'],
'effects': d.effects
});
template += '\n\n[[Category:Drugs]]\n';
_.each(d.categories,function(cat){template+='[[Category:'+cap(cat)+']]\n';});
res.end(template);
}
}.bind(this));
},
'/factsheet': function(req, res) {
var drugs = [];
this.db.scan('drugs', function(drug) {
if(drug && _.has(drug, 'name') && _.has(drug, 'properties')) {
if(drug.name.length <= 4 || drug.name.indexOf('-') != -1) {
drug.name = drug.name.toUpperCase();
} else {
drug.name = drug.name.charAt(0).toUpperCase() + drug.name.slice(1);
}
drug.name = drug.name.replace(/MEO/, 'MeO');
drug.name = drug.name.replace(/ACO/, 'AcO');
drug.name = drug.name.replace(/NBOME/, 'NBOMe');
drug.name = drug.name.replace(/MIPT/, 'MiPT');
drug.name = drug.name.replace(/DIPT/, 'DiPT');
drugs.push(drug);
}
}, function() {
drugs = _.sortBy(drugs, 'name');
res.render('fs_list', {
'drugs': drugs,
'thing': 'Factsheets'
});
});
},
'/factsheet/edit': function(req, res) {
var name = req.body.name,
params = req.body,
pValues = _.omit(params, 'name', 'newname', 'categories', 'aliases', 'formatted_dose'),
response = {
'error': null,
'drug': null
};
if(!_.has(req, 'user') || (_.has(req, 'user') && req.user.access == 'user')) {
response.error = 'Unauthenticated.';
return res.json(response);
}
this.api.getDrug(params.name, function(drug) {
if(drug) {
if(_.has(params, 'categories')) {
var categories = params.categories.replace(/\s/g,'').split(',');
availableCategories = [ 'psychedelic', 'benzodiazepine',
'dissociative', 'opioid', 'depressant', 'common', 'stimulant', 'habit-forming', 'research-chemical', 'empathogen', 'deliriant', 'nootropic', 'tentative', 'inactive' ];
if(_.difference(categories, availableCategories).length !== 0) {
response.error = 'Invalid category.';
return res.json(response);
}
}
drug.categories = categories;
_.each(pValues, function(property, index) {
drug.properties[index] = property;
});
this.db.save('drugs', drug.name, drug, function(err, drug) {
if(_.has(params, 'newname') && params.newname !== drug.name) {
this.api.getDrug(params.newname, function(oDrug) {
if(oDrug) {
response.error = params.newname + ' already exists.';
return res.json(response);
} else {
this.api.delDrug(drug.name, function() {
drug.name = params.newname;
this.db.create('drugs', drug.name, drug, function() {
this.api.getDrug(drug.name, function(drug) {
response.drug = drug;
res.json(response);
dbot.say('tripsit', '#content', dbot.t('websetdrug_log', {
'user': req.user.primaryNick,
'drug': drug.name
}));
});
}.bind(this));
}.bind(this));
}
}.bind(this));
} else {
this.api.getDrug(drug.name, function(drug) {
response.drug = drug;
res.json(response);
dbot.say('tripsit', '#content', dbot.t('websetdrug_log', {
'user': req.user.primaryNick,
'drug': drug.name
}));
});
}
}.bind(this));
} else {
response.error = 'Unknown drug.';
res.json(response);
}
}.bind(this));
},
'/factsheet/:drug': function(req, res) {
this.api.getDrug(req.params.drug, function(drug) {
if(drug && !_.has(drug, 'err')) {
if(drug.name.length <= 3 || drug.name.indexOf('-') != -1) {
drug.name = drug.name.toUpperCase();
} else {
drug.name = drug.name.charAt(0).toUpperCase() + drug.name.slice(1);
}
if(_.has(drug.properties, 'dose')) { // LAAAAME
drug.properties.dose = drug.properties.dose.split('|');
}
if(_.has(drug.properties, 'onset')) { // LAAAAME
drug.properties.onset = drug.properties.onset.split('|');
}
if(_.has(drug.properties, 'wiki')) { // This is also kinda lame
drug.wiki = drug.properties.wiki;
delete drug.properties.wiki;
}
var order = _.union(['summary', 'dose', 'onset', 'duration'], _.keys(drug.properties));
res.render('factsheet', {
'drug': drug,
'order': order,
'thing': drug.name + ' Factsheet'
});
} else {
res.render('error', {
'name': req.params.drug
});
}
});
},
'/chanlist': function(req, res) {
res.render('oclist', {
'channels': this.channels
});
}
};
pages['/factsheet/edit'].type = 'post';
return pages;
}
exports.fetch = function(dbot) {
return pages(dbot);
};