fixed a bug in templates, introduced categories, added default setup script onload, moved home.tpl code over to category, created hierachies

v1.18.x
psychobunny 12 years ago
parent 178bc82a55
commit fa64e84dcc

@ -2,6 +2,7 @@ var modules = {
user: require('./src/user.js'), user: require('./src/user.js'),
topics: require('./src/topics.js'), topics: require('./src/topics.js'),
posts: require('./src/posts.js'), posts: require('./src/posts.js'),
categories: require('./src/categories.js'),
templates: require('./src/templates.js'), templates: require('./src/templates.js'),
webserver: require('./src/webserver.js'), webserver: require('./src/webserver.js'),
websockets: require('./src/websockets.js'), websockets: require('./src/websockets.js'),
@ -23,4 +24,36 @@ global.modules = modules;
//setup scripts to be moved outside of the app in future.
function setup_categories() {
console.log('Checking categories...');
modules.categories.get(function(data) {
if (data.categories.length === 0) {
console.log('Setting up default categories...');
modules.categories.create({
'name': 'General',
'description': 'A place to talk about whateeeever you want'
});
modules.categories.create({
'name': 'NodeBB Development',
'description': 'Bugs? Dont worry, we dont read this thread, so post them here.'
});
modules.categories.create({
'name': 'Design Create Play',
'description': 'In future an example of how a hidden category should look like.'
});
} else console.log('Good.');
});
}
setup_categories();
}(global.configuration)); }(global.configuration));

@ -98,12 +98,12 @@ var socket,
post_window = post_window || document.getElementById('post_window'); post_window = post_window || document.getElementById('post_window');
jQuery(post_window).slideToggle(250); jQuery(post_window).slideToggle(250);
if (post_mode == null || post_mode == 'topic') { if (post_mode == 'topic') {
post_title.style.display = "block"; post_title.style.display = "block";
reply_title.style.display = "none"; reply_title.style.display = "none";
post_title.focus(); post_title.focus();
submit_post_btn.onclick = function() { submit_post_btn.onclick = function() {
app.post_topic(); app.post_topic(id);
} }
} else { } else {
if (post_mode == 'reply') { if (post_mode == 'reply') {
@ -146,7 +146,7 @@ var socket,
jQuery(post_window).slideToggle(250); jQuery(post_window).slideToggle(250);
}; };
app.post_topic = function() { app.post_topic = function(category_id) {
var title = document.getElementById('post_title').value, var title = document.getElementById('post_title').value,
content = document.getElementById('post_content').value; content = document.getElementById('post_content').value;
@ -163,11 +163,11 @@ var socket,
socket.emit('api:topics.post', { socket.emit('api:topics.post', {
'title' : title, 'title' : title,
'content' : content 'content' : content,
'category_id' : category_id
}); });
jQuery('#post_title').val(''); jQuery('#post_title, #post_content').val('');
jQuery('#post_content').val('');
jQuery(post_window).slideToggle(250); jQuery(post_window).slideToggle(250);
}; };

@ -49,7 +49,7 @@ var templates = {};
function init() { function init() {
loadTemplates([ loadTemplates([
'header', 'footer', 'register', 'home', 'topic','account', 'header', 'footer', 'register', 'home', 'topic','account', 'category',
'login', 'reset', 'reset_code', 'account', 'login', 'reset', 'reset_code', 'account',
'confirm', 'confirm',
'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext' 'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext'
@ -90,9 +90,8 @@ var templates = {};
var template = this.html, regex, block; var template = this.html, regex, block;
return (function parse(data, namespace, template) { return (function parse(data, namespace, template) {
if (data.length == 0) { if (!data || data.length == 0) {
regex = makeRegex('[^]*'); template = '';
template = template.replace(regex, '');
} }
for (var d in data) { for (var d in data) {
@ -147,6 +146,7 @@ function load_template(callback) {
url = (url === '' || url === '/') ? 'home' : url; url = (url === '' || url === '/') ? 'home' : url;
jQuery.get(API_URL + url, function(data) { jQuery.get(API_URL + url, function(data) {
console.log(data)
document.getElementById('content').innerHTML = templates[url.split('/')[0]].parse(JSON.parse(data)); document.getElementById('content').innerHTML = templates[url.split('/')[0]].parse(JSON.parse(data));
if (callback) callback(); if (callback) callback();
}); });

@ -1,29 +1,9 @@
<button id="new_post" class="btn btn-primary btn-large">New Post</button> <h3>Categories</h3>
<ul class="topic-container"> <ul class="topic-container">
<!-- BEGIN topics --> <!-- BEGIN categories -->
<a href="topic/{topics.slug}"><li class="topic-row"> <a href="category/{categories.slug}"><li class="topic-row">
<h4>{topics.title}</h4> <h4>{categories.name}</h4>
<p>Posted {topics.relativeTime} ago by <span class="username">{topics.username}</span>. {topics.post_count} posts.</p> <p>{categories.description}</p>
</li></a> </li></a>
<!-- END topics --> <!-- END categories -->
</ul> </ul>
<script type="text/javascript">
var new_post = document.getElementById('new_post');
new_post.onclick = function() {
app.open_post_window();
}
jQuery('document').ready(function() {
});
/*app.alert({
title: 'Welcome back',
message: 'Some welcome message to test alerts!',
type: 'info',
timeout: 2000
});*/
</script>

@ -1,8 +1,7 @@
var RDB = require('./redis.js'), var RDB = require('./redis.js'),
utils = require('./utils.js'), utils = require('./utils.js'),
marked = require('marked'), marked = require('marked'),
user = require('./user.js'), user = require('./user.js');
async = require('async');
(function(Posts) { (function(Posts) {

@ -11,12 +11,14 @@ var RDB = require('./redis.js'),
Topics.get = function(callback, start, end) { Topics.get = function(callback, category_id, start, end) {
if (start == null) start = 0; if (start == null) start = 0;
if (end == null) end = start + 10; if (end == null) end = start + 10;
//build a proper wrapper for this and move it into above function later
var range_var = (category_id) ? 'categories:' + category_id + ':tid' : 'topics:tid';
RDB.lrange('topics:tid', start, end, function(tids) { RDB.lrange(range_var, start, end, function(tids) {
var title = [], var title = [],
uid = [], uid = [],
timestamp = [], timestamp = [],
@ -64,17 +66,17 @@ var RDB = require('./redis.js'),
}); });
} }
callback({'topics': topics}); callback({'category_id': category_id, 'topics': topics});
}); });
} }
); );
} else callback([]); } else callback({'category_id': category_id, 'topics': []});
}); });
} }
Topics.post = function(socket, uid, title, content, category) { Topics.post = function(socket, uid, title, content, category_id) {
if (uid === 0) { if (uid === 0) {
socket.emit('event:alert', { socket.emit('event:alert', {
@ -102,8 +104,8 @@ var RDB = require('./redis.js'),
if (category) { if (category_id) {
RDB.lpush('topics:' + category + ':tid', tid); RDB.lpush('categories:' + category_id + ':tid', tid);
} }
var slug = tid + '/' + utils.slugify(title); var slug = tid + '/' + utils.slugify(title);

@ -147,6 +147,10 @@ passport.deserializeUser(function(uid, done) {
res.send(templates['header'] + '<script>templates.ready(function(){ajaxify.go("' + 'topic/' + req.params.topic_id + '");});</script>' + templates['footer']); res.send(templates['header'] + '<script>templates.ready(function(){ajaxify.go("' + 'topic/' + req.params.topic_id + '");});</script>' + templates['footer']);
}); });
app.get('/category/:category_id/:slug?', function(req, res) {
res.send(templates['header'] + '<script>templates.ready(function(){ajaxify.go("' + 'category/' + req.params.category_id + '");});</script>' + templates['footer']);
});
app.get('/confirm/:code', function(req, res) { app.get('/confirm/:code', function(req, res) {
res.send(templates['header'] + '<script>templates.ready(function(){ajaxify.go("' + 'confirm/' + req.params.code + '");});</script>' + templates['footer']); res.send(templates['header'] + '<script>templates.ready(function(){ajaxify.go("' + 'confirm/' + req.params.code + '");});</script>' + templates['footer']);
}); });
@ -155,7 +159,7 @@ passport.deserializeUser(function(uid, done) {
function api_method(req, res) { function api_method(req, res) {
switch(req.params.method) { switch(req.params.method) {
case 'home' : case 'home' :
global.modules.topics.get(function(data) { global.modules.categories.get(function(data) {
res.send(JSON.stringify(data)); res.send(JSON.stringify(data));
}); });
break; break;
@ -185,6 +189,12 @@ passport.deserializeUser(function(uid, done) {
res.send(JSON.stringify(data)); res.send(JSON.stringify(data));
}, req.params.id, (req.user) ? req.user.uid : 0); }, req.params.id, (req.user) ? req.user.uid : 0);
break; break;
case 'category' :
global.modules.topics.get(function(data) {
console.log(data);
res.send(JSON.stringify(data));
}, req.params.id);
break;
case 'account' : case 'account' :
get_account_fn(req, res, function(userData) { get_account_fn(req, res, function(userData) {
res.send(JSON.stringify(userData)); res.send(JSON.stringify(userData));

@ -161,7 +161,7 @@ var SocketIO = require('socket.io').listen(global.server,{log:false}),
}); });
socket.on('api:topics.post', function(data) { socket.on('api:topics.post', function(data) {
modules.topics.post(socket, uid, data.title, data.content); modules.topics.post(socket, uid, data.title, data.content, data.category_id);
}); });
socket.on('api:posts.reply', function(data) { socket.on('api:posts.reply', function(data) {

Loading…
Cancel
Save