From 166254b8481cee4725fd2ba9fa4cfb53aa8cf325 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 24 Jun 2013 12:54:14 -0400 Subject: [PATCH 1/8] fixes issue #16 (ajaxify.go is now called) and reintroduces the fadein animation for new topic post --- public/src/forum/category.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/public/src/forum/category.js b/public/src/forum/category.js index 4388198e5b..99c4d300e0 100644 --- a/public/src/forum/category.js +++ b/public/src/forum/category.js @@ -27,20 +27,21 @@ jQuery('#category-no-topics').remove(); topic.innerHTML = html; + topic = topic.querySelector('a'); + if (numTopics > 0) { for(x=0;x').appendTo("#topics-container").hide().append(html).fadeIn('slow'); - // set_up_posts(uniqueid); + ajaxify.enable(); }); From dbf7887cc62a525fc5f8691c21bd550968546465 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 24 Jun 2013 13:03:18 -0400 Subject: [PATCH 2/8] fixes issue #14 --- public/src/modules/mobileMenu.js | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/public/src/modules/mobileMenu.js b/public/src/modules/mobileMenu.js index c21bc5bed9..2ee74f12ad 100644 --- a/public/src/modules/mobileMenu.js +++ b/public/src/modules/mobileMenu.js @@ -5,18 +5,23 @@ define(function() { var categories = null, overlay = null, menuBtn = null, - postBtn = null; + postBtn = null, + initialized = false; function loadCategories(callback) { if (categories) { - displayCategories(); + callback(true); return; } jQuery.getJSON('/api/home', function(data) { categories = data.categories; - displayCategories(); + initialized = true; + + if (callback) { + callback(true); + } }); } @@ -65,6 +70,8 @@ define(function() { mobileMenu.onNavigate = function() { + if (initialized == false) return false; + var cid = templates.get('category_id'), tid = templates.get('topic_id'); @@ -100,9 +107,11 @@ define(function() { animateIcons(); } - - loadCategories(displayCategories); - mobileMenu.onNavigate(); + loadCategories(function() { + displayCategories(); + mobileMenu.onNavigate(); + }); + } return { From 89e852f6929a37cfaa38ce0f8bf7efdd46f0defe Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 24 Jun 2013 13:03:34 -0400 Subject: [PATCH 3/8] adding 'load more topics' button to topic admin --- public/src/forum/admin/topics.js | 18 +++++++++++++++++- public/templates/admin/topics.tpl | 4 ++++ src/routes/admin.js | 5 +---- src/topics.js | 28 ++++++++++++++++++++++++++-- src/websockets.js | 7 ++++++- 5 files changed, 54 insertions(+), 8 deletions(-) diff --git a/public/src/forum/admin/topics.js b/public/src/forum/admin/topics.js index 4294f140a4..322cc75b33 100644 --- a/public/src/forum/admin/topics.js +++ b/public/src/forum/admin/topics.js @@ -1,5 +1,6 @@ $(document).ready(function() { - var topicsListEl = document.querySelector('.topics'); + var topicsListEl = document.querySelector('.topics'), + loadMoreEl = document.getElementById('topics_loadmore'); $(topicsListEl).on('click', '[data-action]', function() { var $this = $(this), @@ -22,6 +23,16 @@ $(document).ready(function() { } }); + loadMoreEl.addEventListener('click', function() { + var topics = document.querySelectorAll('.topics li[data-tid]'), + lastTid = parseInt(topics[topics.length - 1].getAttribute('data-tid')); + + socket.emit('api:admin.topics.getMore', { + limit: 10, + after: lastTid + }); + }, false); + // Resolve proper button state for all topics var topicEls = topicsListEl.querySelectorAll('li'), numTopics = topicEls.length; @@ -81,4 +92,9 @@ socket.on('api:topic.restore', function(response) { $(btnEl).removeClass('active'); } +}); + +socket.on('api:admin.topics.getMore', function(topics) { + var html = templates.prepare(templates['admin/topics'].blocks['topics']).parse(topics); + console.log(html); }); \ No newline at end of file diff --git a/public/templates/admin/topics.tpl b/public/templates/admin/topics.tpl index d3fef7b6b5..68d58e2c19 100644 --- a/public/templates/admin/topics.tpl +++ b/public/templates/admin/topics.tpl @@ -19,4 +19,8 @@ +
+ +
+ \ No newline at end of file diff --git a/src/routes/admin.js b/src/routes/admin.js index 76bd9d8fb9..615a412cfb 100644 --- a/src/routes/admin.js +++ b/src/routes/admin.js @@ -57,10 +57,7 @@ var user = require('./../user.js'), } break; case 'topics': - topics.getAllTopics(function(topics) { - topics.sort(function(a, b) { - return b.timestamp - a.timestamp; - }); + topics.getAllTopics(10, null, function(topics) { res.json({ topics: topics }); diff --git a/src/topics.js b/src/topics.js index c14bd425f2..bc24eca30b 100644 --- a/src/topics.js +++ b/src/topics.js @@ -184,9 +184,33 @@ marked.setOptions({ }); } - Topics.getAllTopics = function(callback) { + Topics.getAllTopics = function(limit, after, callback) { RDB.smembers('topics:tid', function(err, tids) { - var topics = []; + var topics = [], + numTids, x; + + // Sort into ascending order + tids.sort(function(a, b) { return a - b; }); + + // Eliminate everything after the "after" tid + if (after) { + for(x=0,numTids=tids.length;x= after) { + tids = tids.slice(0, x); + break; + } + } + } + + if (limit) { + if (limit > 0 && limit < tids.length) { + tids = tids.slice(tids.length - limit); + } + } + + // Sort into descending order + tids.sort(function(a, b) { return b - a; }); + async.each(tids, function(tid, next) { Topics.get_topic(tid, 0, function(topicData) { topics.push(topicData); diff --git a/src/websockets.js b/src/websockets.js index 6d161313f2..6530896f9d 100644 --- a/src/websockets.js +++ b/src/websockets.js @@ -121,7 +121,6 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), }); // BEGIN: API calls (todo: organize) - // julian: :^) socket.on('api:updateHeader', function(data) { if(uid) { @@ -391,6 +390,12 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), }); } }); + + socket.on('api:admin.topics.getMore', function(data) { + topics.getAllTopics(data.limit, data.after, function(topics) { + socket.emit('api:admin.topics.getMore', JSON.stringify(topics)); + }); + }); }); }(SocketIO)); From 838387430473af6315f7efbf39bbe9cf0fac52f2 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 24 Jun 2013 13:30:33 -0400 Subject: [PATCH 4/8] closes issue #15 - fixed some issues in templates.js --- public/src/templates.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/public/src/templates.js b/public/src/templates.js index 10116f6663..f8d97edcc0 100644 --- a/public/src/templates.js +++ b/public/src/templates.js @@ -250,19 +250,22 @@ if (data[d] === null) { template = replace(namespace + d, '', template); } else if (data[d].constructor == Array) { - namespace += d; + namespace += d + '.'; regex = makeRegex(d), block = getBlock(regex, namespace, template) - if (block == null) continue; + if (block == null) { + namespace = namespace.replace(d + '.', ''); + continue; + } var numblocks = data[d].length - 1, i = 0, result = ""; do { - result += parse(data[d][i], namespace + '.', block); + result += parse(data[d][i], namespace, block); } while (i++ < numblocks); - namespace = namespace.replace(d, ''); + namespace = namespace.replace(d + '.', ''); template = setBlock(regex, result, template); } else if (data[d] instanceof Object) { namespace += d + '.'; From 39aac310920daa1eee340ed8f27537c2bbcf9a06 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 24 Jun 2013 13:32:36 -0400 Subject: [PATCH 5/8] minor fix to template rendering --- public/src/forum/admin/topics.js | 2 ++ public/src/templates.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/public/src/forum/admin/topics.js b/public/src/forum/admin/topics.js index 322cc75b33..a6c291f957 100644 --- a/public/src/forum/admin/topics.js +++ b/public/src/forum/admin/topics.js @@ -95,6 +95,8 @@ socket.on('api:topic.restore', function(response) { }); socket.on('api:admin.topics.getMore', function(topics) { + topics = JSON.parse(topics); + console.log(topics); var html = templates.prepare(templates['admin/topics'].blocks['topics']).parse(topics); console.log(html); }); \ No newline at end of file diff --git a/public/src/templates.js b/public/src/templates.js index 10116f6663..dfa393d348 100644 --- a/public/src/templates.js +++ b/public/src/templates.js @@ -273,7 +273,7 @@ block = parse(data[d], namespace, block); template = setBlock(regex, block, template); - } else { + } else { template = replace(namespace + d, data[d], template); } } From f732ab4d5aefb50eafbcaba448e5de952d695eac Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 24 Jun 2013 13:51:13 -0400 Subject: [PATCH 6/8] fixed another issues in templates.js causing grief in topics admin view --- public/src/templates.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/public/src/templates.js b/public/src/templates.js index 3c6aa35cd2..418018dded 100644 --- a/public/src/templates.js +++ b/public/src/templates.js @@ -252,8 +252,9 @@ } else if (data[d].constructor == Array) { namespace += d + '.'; - regex = makeRegex(d), - block = getBlock(regex, namespace, template) + var regex = makeRegex(d), + block = getBlock(regex, namespace.substring(0, namespace.length-1), template); + if (block == null) { namespace = namespace.replace(d + '.', ''); continue; From d86dd2fbdf16e5975341bd91bed9937fa99ffc5a Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 24 Jun 2013 13:55:40 -0400 Subject: [PATCH 7/8] fixing up styling for category noscript view --- public/css/noscript.less | 14 ++++++++++++++ public/templates/noscript/category.tpl | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/public/css/noscript.less b/public/css/noscript.less index 76f15d2325..9df1243c50 100644 --- a/public/css/noscript.less +++ b/public/css/noscript.less @@ -29,8 +29,22 @@ noscript { } .teaser { + margin-left: 16px; + margin-top: 8px; + img { float: left; + width: 32px; + } + + p { + color: #666; + font-size: 13px; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + margin-left: 64px; + padding-top: 10px; } } } diff --git a/public/templates/noscript/category.tpl b/public/templates/noscript/category.tpl index 00728916b0..3aeb8ddc87 100644 --- a/public/templates/noscript/category.tpl +++ b/public/templates/noscript/category.tpl @@ -6,7 +6,7 @@
  • - {topics.title} + {topics.title} ({topics.post_count})

    From b1aef19ee99b4c33d90f6cd47831955a3f64bed5 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 24 Jun 2013 14:10:42 -0400 Subject: [PATCH 8/8] finishing up topics list in admin panel with infinite loading --- public/src/forum/admin/topics.js | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/public/src/forum/admin/topics.js b/public/src/forum/admin/topics.js index a6c291f957..ba4ae12ea3 100644 --- a/public/src/forum/admin/topics.js +++ b/public/src/forum/admin/topics.js @@ -24,13 +24,16 @@ $(document).ready(function() { }); loadMoreEl.addEventListener('click', function() { - var topics = document.querySelectorAll('.topics li[data-tid]'), - lastTid = parseInt(topics[topics.length - 1].getAttribute('data-tid')); + if (this.className.indexOf('disabled') === -1) { + var topics = document.querySelectorAll('.topics li[data-tid]'), + lastTid = parseInt(topics[topics.length - 1].getAttribute('data-tid')); - socket.emit('api:admin.topics.getMore', { - limit: 10, - after: lastTid - }); + this.innerHTML = ' Retrieving topics'; + socket.emit('api:admin.topics.getMore', { + limit: 10, + after: lastTid + }); + } }, false); // Resolve proper button state for all topics @@ -95,8 +98,21 @@ socket.on('api:topic.restore', function(response) { }); socket.on('api:admin.topics.getMore', function(topics) { + var btnEl = document.getElementById('topics_loadmore'); + topics = JSON.parse(topics); console.log(topics); - var html = templates.prepare(templates['admin/topics'].blocks['topics']).parse(topics); - console.log(html); + if (topics.length > 0) { + var html = templates.prepare(templates['admin/topics'].blocks['topics']).parse({ + topics: topics + }), + topicsListEl = document.querySelector('.topics'); + + topicsListEl.innerHTML += html; + btnEl.innerHTML = 'Load More Topics'; + } else { + // Exhausted all topics + btnEl.className += ' disabled'; + btnEl.innerHTML = 'No more topics'; + } }); \ No newline at end of file