A simple to use flashcards web app written in Node.JS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

96 lines
2.5 KiB

var http = require("http");
var path = require("path");
var express = require("express");
function shuffle(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
var root = path.join(__dirname, "..");
var argc = process.argv.length;
if(argc < 3){
console.error("must provide data file, e.g. \"learncards data.json\"");
process.exit(1);
}
var data_file = path.join(process.cwd(), process.argv[argc - 1]);
var data = require(data_file);
if(typeof(data) !== "object" || !data.hasOwnProperty("cards")){
console.error("data file ", data_file, "does not contain \"cards\" property");
process.exit(1);
}
var num_cards = data.cards.length;
for(var i = 0; i < num_cards; ++i){
var next = data.cards[i];
if(!next.hasOwnProperty("question")){
console.error("card", next, "requires \"question\" property");
process.exit(1);
}
if(!next.hasOwnProperty("answer")){
console.error("card", next, "requires \"answer\" property");
process.exit(1);
}
}
var title = "Learn Cards";
if(data.hasOwnProperty("title")){
title = data.title + " - Learn Cards";
}
var app = express();
app.set("port", process.env.PORT || 8000);
app.set("views", path.join(root, "views"));
app.set("view engine", "jade");
app.use(express.favicon());
app.use(app.router);
app.use(express.static(path.join(root, "public")));
app.use(express.errorHandler());
app.get("/", function(req, res){
res.render("index", {title: title});
});
app.get("/card.json", function(req, res){
var index = 0;
if(req.query.next){
index = parseInt(req.query.next);
} else if(req.query.rand){
index = Math.floor(Math.random() * num_cards);
}
if(index >= num_cards){
index = 0;
}
var card = {};
card.question = data.cards[index].question;
card.answer = data.cards[index].answer;
if(req.query.swap){
var swap = req.query.swap || "";
swap = swap.toLowerCase();
if(Boolean(swap)){
if(swap == "true" || (swap == "random" && Math.random() < 0.5)){
var q = card.question;
card.question = card.answer;
card.answer = q;
}
}
}
res.json(200, {index: index, card: card});
});
var server = http.createServer(app);
server.listen(app.get("port"), function(){
console.log("learncards is listening on port", app.get("port"));
});