98 lines
4.0 KiB
JavaScript
98 lines
4.0 KiB
JavaScript
var fs = require('fs');
|
|
module.exports = function(qwiki) {
|
|
qwiki.rule('edit', '@@CONTENT@@', function(req, res, instance, next) {
|
|
var area = (req.url == '' ? 'front' : req.url.substr(1));
|
|
var path = 'wiki/'+area+'.qwk';
|
|
res.write('<form action="" method="POST"><div class="edit"><div><label for="page"><span>This is the page name that corresponds to the wiki URL, e.g., my_page => kettek.net/qwiki/my_page</span>Page</label> <input type="text" name="page" value="'+area+'"></div>');
|
|
res.write('<div><label for="format"><span>This is the data format of content source, such as HTML or raw.</span>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></div>');
|
|
res.write('</div><div id="edit_content"><label for="content">Content<span>This is the content of the wiki page</span></label> <textarea name="content">');
|
|
qwiki.readFile(res, path, function(type, err) {
|
|
if (type == 'FNF') {
|
|
} else if (err) {
|
|
res.write(err);
|
|
}
|
|
res.write('</textarea></div><div class="prompt"><input type="submit" name="submit" value="cancel"><input type="submit" name="submit" value="save"></div></form>');
|
|
next();
|
|
});
|
|
});
|
|
qwiki.rule('edit', '@@CONTROLS@@', function(req, res, instance, next) {
|
|
res.write('<li><a href="'+(req.url == '' ? '/' : req.url)+'"><img src="/view.png">View</a></li><li><a href="'+req.url+'/revisions"><img src="/revisions.png">Revisions</a></li><li><a href="'+req.url+'/delete"><img src="/delete.png">Delete</a></li>');
|
|
next();
|
|
});
|
|
qwiki.act('edit', function(req, res) {
|
|
var area = (req.url == '' ? 'front' : req.url.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);
|
|
});
|
|
};
|