mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-01 11:35:55 +01:00
fixed a bug in templates, introduced categories, added default setup script onload, moved home.tpl code over to category, created hierachies
This commit is contained in:
33
app.js
33
app.js
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user