kettek2/acts/edit.js

94 lines
3.4 KiB
JavaScript

var fs = require('fs');
module.exports = function(qwiki) {
qwiki.rule('edit', '@@CONTENT@@', function(req, res, instance, next) {
var area = (req.area == '' ? 'front' : req.area.substr(1));
var path = 'wiki/'+area+'.qwk';
res.write('<form action="" method="POST"><label for="page">Page</label> <input type="text" name="page" value="'+area+'"><br>');
res.write('<label for="format">Format</label> <select name="format">');
for (var format in qwiki.formats) {
var page_format = (typeof qwiki.wiki_index.pages[area] !== 'undefined' ? qwiki.wiki_index.pages[area].format : qwiki.getDefault('format'));
res.write('<option ' + (qwiki.formats[format].name == page_format ? 'selected ' : '') + 'value="'+qwiki.formats[format].name+'">'+qwiki.formats[format].fullname+'</option>');
}
res.write('</select><br>');
res.write('<label for="content">Content</label> <textarea width="100%" height="100%" name="content">');
qwiki.readFile(res, path, function(type, err) {
if (type == 'FNF') {
} else if (err) {
res.write(err);
}
res.write('</textarea><input type="submit" name="submit" value="cancel"><input type="submit" name="submit" value="save"></form>');
next();
});
});
qwiki.act('edit', function(req, res) {
var area = (req.area == '' ? 'front' : req.area.substr(1));
// handle POST
if ('submit' in req.fields && req.fields['submit'] == 'save') {
var old_area = area;
if ('page' in req.fields) {
area = req.fields['page'];
}
if (typeof qwiki.wiki_index.pages[area] == 'undefined') {
qwiki.wiki_index.pages[area] = {
format: qwiki.getDefault('format')
};
}
// get our format
if ('format' in req.fields) {
qwiki.wiki_index.pages[area].format = req.fields['format'];
}
//
console.log(old_area + ' vs ' + area);
if (old_area != area) {
fs.rename('wiki/'+old_area+'.qwk', 'wiki/'+area+'.qwk', function() {
qwiki.deleteCache(old_area, function() {
if ('content' in req.fields) {
qwiki.savePage(area, req.fields['content'], function(err) {
if (err) {
res.write(err.code);
res.end();
} else {
qwiki.createCache(area, req.fields['content'], function(err) {
if (err) {
res.write(err.code);
res.end();
} else {
res.writeHead(302, {'Location': '/'+area+'/edit'});
res.end();
}
});
}
});
}
});
});
} else {
if ('content' in req.fields) {
qwiki.savePage(area, req.fields['content'], function(err) {
if (err) {
res.write(err.code);
res.end();
} else {
qwiki.createCache(area, req.fields['content'], function(err) {
if (err) {
res.write(err.code);
res.end();
} else {
res.writeHead(302, {'Location': '/'+area+'/edit'});
res.end();
}
});
}
});
}
}
return;
}
res.writeHead(200, "OK", {
"Content-Type": "text/html",
});
qwiki.parsePage('edit', '', req, res);
});
};