diff --git a/app.js b/app.js index 8dec4daa79..c4084fa676 100644 --- a/app.js +++ b/app.js @@ -106,11 +106,9 @@ upgrade.check(function(schema_ok) { if (schema_ok || nconf.get('check-schema') === false) { - sockets.init(); + sockets.init(webserver.server); plugins.init(); - global.templates = {}; - global.translator = translator; translator.loadServer(); diff --git a/public/language/en/global.json b/public/language/en/global.json index 6c41d49b2a..99fd8c74dc 100644 --- a/public/language/en/global.json +++ b/public/language/en/global.json @@ -33,5 +33,8 @@ "motd.get": "Get NodeBB", "motd.fork": "Fork", "motd.like": "Like", - "motd.follow": "Follow" + "motd.follow": "Follow", + + "previouspage": "Previous Page", + "nextpage": "Next Page" } diff --git a/public/src/app.js b/public/src/app.js index bc583e2b17..21c0c72c86 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -396,6 +396,16 @@ var socket, }); }; + app.enableInfiniteLoading = function(callback) { + $(window).off('scroll').on('scroll', function() { + var bottom = ($(document).height() - $(window).height()) * 0.9; + + if ($(window).scrollTop() > bottom) { + callback(); + } + }); + } + var titleObj = { active: false, interval: undefined, @@ -528,6 +538,9 @@ var socket, }); templates.setGlobal('relative_path', RELATIVE_PATH); + templates.setGlobal('usePagination', config.usePagination); + templates.setGlobal('topicsPerPage', config.topicsPerPage); + templates.setGlobal('postsPerPage', config.postsPerPage); }); showWelcomeMessage = location.href.indexOf('loggedin') !== -1; diff --git a/public/src/forum/category.js b/public/src/forum/category.js index a2f7443768..29dcffa269 100644 --- a/public/src/forum/category.js +++ b/public/src/forum/category.js @@ -1,13 +1,10 @@ -define(['composer'], function(composer) { +define(['composer', 'forum/pagination'], function(composer, pagination) { var Category = {}, loadingMoreTopics = false; Category.init = function() { var cid = templates.get('category_id'), categoryName = templates.get('category_name'), - twitterEl = jQuery('#twitter-intent'), - facebookEl = jQuery('#facebook-share'), - googleEl = jQuery('#google-share'), categoryUrl = encodeURIComponent(window.location.href), twitterUrl = "https://twitter.com/intent/tweet?url=" + categoryUrl + "&text=" + encodeURIComponent(categoryName), facebookUrl = "https://www.facebook.com/sharer/sharer.php?u=" + categoryUrl, @@ -15,17 +12,17 @@ define(['composer'], function(composer) { app.enterRoom('category_' + cid); - - - twitterEl.on('click', function () { + $('#twitter-intent').on('click', function () { window.open(twitterUrl, '_blank', 'width=550,height=420,scrollbars=no,status=no'); return false; }); - facebookEl.on('click', function () { + + $('#facebook-share').on('click', function () { window.open(facebookUrl, '_blank', 'width=626,height=436,scrollbars=no,status=no'); return false; }); - googleEl.on('click', function () { + + $('#google-share').on('click', function () { window.open(googleUrl, '_blank', 'width=500,height=570,scrollbars=no,status=no'); return false; }); @@ -42,15 +39,21 @@ define(['composer'], function(composer) { socket.emit('categories.getRecentReplies', cid, renderRecentReplies); - $(window).off('scroll').on('scroll', function (ev) { - var bottom = ($(document).height() - $(window).height()) * 0.9; - - if ($(window).scrollTop() > bottom && !loadingMoreTopics) { - Category.loadMoreTopics(cid); - } - }); + enableInfiniteLoading(); }; + function enableInfiniteLoading() { + if(!config.usePagination) { + app.enableInfiniteLoading(function() { + if(!loadingMoreTopics) { + Category.loadMoreTopics(templates.get('category_id')); + } + }); + } else { + pagination.init(templates.get('currentPage'), templates.get('pageCount')); + } + } + Category.onNewTopic = function(data) { var html = templates.prepare(templates['category'].blocks['topics']).parse({ topics: [data] @@ -85,7 +88,12 @@ define(['composer'], function(composer) { addActiveUser(data); + socket.emit('categories.getPageCount', templates.get('category_id'), function(err, newPageCount) { + pagination.recreatePaginationLinks(newPageCount); + }); + $('#topics-container span.timeago').timeago(); + app.createUserTooltips(); }); } @@ -116,9 +124,15 @@ define(['composer'], function(composer) { jQuery('#category-no-topics').remove(); html = $(translatedHTML); - container.append(html); + + if(config.usePagination) { + container.empty().append(html); + } else { + container.append(html); + } $('#topics-container span.timeago').timeago(); + app.createUserTooltips(); app.makeNumbersHumanReadable(html.find('.human-readable-number')); }); } diff --git a/public/src/forum/login.js b/public/src/forum/login.js index 9dca615a75..563db9d64e 100644 --- a/public/src/forum/login.js +++ b/public/src/forum/login.js @@ -52,12 +52,6 @@ define(function() { }); document.querySelector('#content input').focus(); - - if(!config.emailSetup) - $('#reset-link').addClass('hide'); - else - $('#reset-link').removeClass('hide'); - }; return Login; diff --git a/public/src/forum/pagination.js b/public/src/forum/pagination.js new file mode 100644 index 0000000000..66db32c959 --- /dev/null +++ b/public/src/forum/pagination.js @@ -0,0 +1,110 @@ + + +define(function() { + var pagination = {}; + + pagination.currentPage = 0; + pagination.pageCount = 0; + + pagination.init = function(currentPage, pageCount) { + pagination.currentPage = parseInt(currentPage, 10); + pagination.pageCount = parseInt(pageCount, 10); + + pagination.recreatePaginationLinks(pageCount); + + $('.pagination') + .on('click', '.previous', function() { + return pagination.loadPage(pagination.currentPage - 1); + }).on('click', '.next', function() { + return pagination.loadPage(pagination.currentPage + 1); + }).on('click', '.page', function() { + return pagination.loadPage($(this).attr('data-page')); + }).on('click', '.select_page', function(e) { + e.preventDefault(); + bootbox.prompt('Enter page number:', function(pageNum) { + pagination.loadPage(pageNum); + }); + }); + } + + pagination.recreatePaginationLinks = function(newPageCount) { + pagination.pageCount = parseInt(newPageCount, 10); + + var pagesToShow = [1]; + if(pagination.pageCount !== 1) { + pagesToShow.push(pagination.pageCount); + } + + var previous = pagination.currentPage - 1; + var next = pagination.currentPage + 1; + + if(previous > 1 && pagesToShow.indexOf(previous) === -1) { + pagesToShow.push(previous); + } + + if(next < pagination.pageCount && pagesToShow.indexOf(next) === -1) { + pagesToShow.push(next); + } + + if(pagesToShow.indexOf(pagination.currentPage) === -1) { + pagesToShow.push(pagination.currentPage); + } + + pagesToShow.sort(function(a, b) { + return parseInt(a, 10) - parseInt(b, 10); + }); + + var html = ''; + for(var i=0; i 0) { + if (pagesToShow[i] - 1 !== pagesToShow[i-1]) { + html += '
  • |
  • '; + } + } + html += '
  • ' + pagesToShow[i] + '
  • '; + } + + $('.pagination li.page').remove(); + $(html).insertAfter($('.pagination li.previous')); + updatePageLinks(); + } + + pagination.loadPage = function(page, callback) { + page = parseInt(page, 10); + if(!utils.isNumber(page) || page < 1 || page > pagination.pageCount) { + return false; + } + + ajaxify.go(window.location.pathname.slice(1) + '?page=' + page); + return true; + } + + function updatePageLinks() { + if(pagination.pageCount === 0) { + $('.pagination').addClass('hide'); + } else { + $('.pagination').removeClass('hide'); + } + + $('.pagination .next').removeClass('disabled'); + $('.pagination .previous').removeClass('disabled'); + + if(pagination.currentPage === 1) { + $('.pagination .previous').addClass('disabled'); + } + + if(pagination.currentPage === pagination.pageCount) { + $('.pagination .next').addClass('disabled'); + } + + $('.pagination .page').removeClass('active'); + $('.pagination .page[data-page="' + pagination.currentPage + '"]').addClass('active'); + $('.pagination .page').each(function(index, element) { + var li = $(this); + var page = li.attr('data-page'); + li.find('a').attr('href', window.location.pathname + '?page=' + page); + }); + } + + return pagination; +}); \ No newline at end of file diff --git a/public/src/forum/recent.js b/public/src/forum/recent.js index 8e0eaeb293..966ce0058d 100644 --- a/public/src/forum/recent.js +++ b/public/src/forum/recent.js @@ -1,20 +1,16 @@ define(function() { var Recent = {}; - Recent.newTopicCount = 0; - Recent.newPostCount = 0; - Recent.loadingMoreTopics = false; + var newTopicCount = 0, + newPostCount = 0, + loadingMoreTopics = false; var active = ''; Recent.init = function() { app.enterRoom('recent_posts'); - ajaxify.register_events([ - 'event:new_topic', - 'event:new_post' - ]); - + Recent.watchForNewPosts(); function getActiveSection() { var url = window.location.href, @@ -37,26 +33,34 @@ define(function() { $(this).addClass('hide'); }); - socket.on('event:new_topic', function(data) { - - ++Recent.newTopicCount; - Recent.updateAlertText(); + app.enableInfiniteLoading(function() { + if(!loadingMoreTopics) { + Recent.loadMoreTopics(); + } }); + }; - socket.on('event:new_post', function(data) { - ++Recent.newPostCount; + Recent.watchForNewPosts = function () { + + newPostCount = 0; + newTopicCount = 0; + + ajaxify.register_events([ + 'event:new_topic', + 'event:new_post' + ]); + + socket.on('event:new_topic', function(data) { + ++newTopicCount; Recent.updateAlertText(); }); - $(window).off('scroll').on('scroll', function() { - var bottom = ($(document).height() - $(window).height()) * 0.9; - - if ($(window).scrollTop() > bottom && !Recent.loadingMoreTopics) { - Recent.loadMoreTopics(); - } + socket.on('event:new_post', function(data) { + ++newPostCount; + Recent.updateAlertText(); }); - }; + } Recent.updateAlertText = function() { var text = 'There'; @@ -76,41 +80,43 @@ define(function() { text += '. Click here to reload.'; $('#new-topics-alert').html(text).removeClass('hide').fadeIn('slow'); + $('#category-no-topics').addClass('hide'); } - Recent.onTopicsLoaded = function(topics) { - var html = templates.prepare(templates['recent'].blocks['topics']).parse({ + Recent.loadMoreTopics = function() { + loadingMoreTopics = true; + socket.emit('topics.loadMoreRecentTopics', { + after: $('#topics-container').children('li').length, + term: active + }, function(err, data) { + if(err) { + return app.alertError(err.message); + } + + if (data.topics && data.topics.length) { + Recent.onTopicsLoaded('recent', data.topics); + } + + loadingMoreTopics = false; + }); + } + + Recent.onTopicsLoaded = function(template, topics) { + var html = templates.prepare(templates[template].blocks['topics']).parse({ topics: topics }); translator.translate(html, function(translatedHTML) { - var container = $('#topics-container'); $('#category-no-topics').remove(); html = $(translatedHTML); - container.append(html); + $('#topics-container').append(html); $('span.timeago').timeago(); app.createUserTooltips(); app.makeNumbersHumanReadable(html.find('.human-readable-number')); }); } - Recent.loadMoreTopics = function() { - Recent.loadingMoreTopics = true; - socket.emit('topics.loadMoreRecentTopics', { - after: $('#topics-container').children('li').length, - term: active - }, function(err, data) { - if(err) { - return app.alertError(err.message); - } - if (data.topics && data.topics.length) { - Recent.onTopicsLoaded(data.topics); - } - Recent.loadingMoreTopics = false; - }); - } - return Recent; }); diff --git a/public/src/forum/topic.js b/public/src/forum/topic.js index a48d8c82cf..b241c9cc5e 100644 --- a/public/src/forum/topic.js +++ b/public/src/forum/topic.js @@ -1,11 +1,11 @@ -define(['composer'], function(composer) { +define(['composer', 'forum/pagination'], function(composer, pagination) { var Topic = {}, infiniteLoaderActive = false, pagination; function showBottomPostBar() { - if($('#post-container .post-row').length > 1) { - $('.topic-main-buttons').removeClass('hide').parent().removeClass('hide'); + if($('#post-container .post-row').length > 1 || !$('#post-container li[data-index="0"]').length) { + $('.bottom-post-bar').removeClass('hide'); } } @@ -17,7 +17,11 @@ define(['composer'], function(composer) { deleted: templates.get('deleted'), pinned: templates.get('pinned') }, - topic_name = templates.get('topic_name'); + topic_name = templates.get('topic_name'), + currentPage = parseInt(templates.get('currentPage'), 10), + pageCount = parseInt(templates.get('pageCount'), 10); + + Topic.postCount = templates.get('postcount'); function fixDeleteStateForPosts() { @@ -38,7 +42,8 @@ define(['composer'], function(composer) { showBottomPostBar(); - // Resetting thread state + updateHeader(); + if (thread_state.locked === '1') set_locked_state(true); if (thread_state.deleted === '1') set_delete_state(true); if (thread_state.pinned === '1') set_pinned_state(true); @@ -327,21 +332,6 @@ define(['composer'], function(composer) { Topic.scrollToPost(parseInt(bookmark, 10)); } - $('#post-container').on('click', '.deleted', function(ev) { - $(this).toggleClass('deleted-expanded'); - }); - - // Show the paginator block, now that the DOM has finished loading - (function delayedHeaderUpdate() { - if (!Topic.postCount) { - setTimeout(function() { - delayedHeaderUpdate(); - }, 25); - } else { - updateHeader(); - } - })(); - $('#post-container').on('mouseenter', '.favourite-tooltip', function(e) { if (!$(this).data('users-loaded')) { $(this).data('users-loaded', "true"); @@ -355,15 +345,19 @@ define(['composer'], function(composer) { }); function enableInfiniteLoading() { - $(window).off('scroll').on('scroll', function() { - var bottom = ($(document).height() - $(window).height()) * 0.9; + if(!config.usePagination) { + app.enableInfiniteLoading(function() { + if (!infiniteLoaderActive && $('#post-container').children().length) { + loadMorePosts(tid, function(posts) { + fixDeleteStateForPosts(); + }); + } + }); + } else { + $('.pagination-block').addClass('hide'); - if ($(window).scrollTop() > bottom && !infiniteLoaderActive && $('#post-container').children().length) { - loadMorePosts(tid, function(posts) { - fixDeleteStateForPosts(); - }); - } - }); + pagination.init(currentPage, pageCount); + } } $('.topic').on('click', '.post_reply', function() { @@ -380,7 +374,7 @@ define(['composer'], function(composer) { var username = '', post = $(this).parents('li[data-pid]'); if (post.length) { - username = '@' + post.attr('data-username') + ' '; + username = '@' + post.attr('data-username').replace(/\s/g, '-') + ' '; } if (thread_state.locked !== '1') { @@ -395,12 +389,12 @@ define(['composer'], function(composer) { pid = $(this).parents('.post-row').attr('data-pid'); if (post.length) { - username = '@' + post.attr('data-username'); + username = '@' + post.attr('data-username').replace(/\s/g, '-'); } socket.emit('posts.getRawPost', pid, function(err, post) { if(err) { - return app.alert(err.message); + return app.alertError(err.message); } var quoted = ''; if(post) { @@ -433,7 +427,7 @@ define(['composer'], function(composer) { var pid = $(this).parents('.post-row').attr('data-pid'); $('#post_' + pid + '_link').val(window.location.href + "#" + pid); // without the setTimeout can't select the text in the input - setTimeout(function(){ + setTimeout(function() { $('#post_' + pid + '_link').select(); }, 50); }); @@ -641,6 +635,11 @@ define(['composer'], function(composer) { }); socket.on('event:new_post', function(data) { + if(config.usePagination) { + onNewPostPagination(data); + return; + } + var posts = data.posts; for (var p in posts) { if (posts.hasOwnProperty(p)) { @@ -894,55 +893,37 @@ define(['composer'], function(composer) { } function toggle_post_delete_state(pid) { - var postEl = $(document.querySelector('#post-container li[data-pid="' + pid + '"]')); - - if (postEl[0]) { - quoteEl = postEl.find('.quote'), - favEl = postEl.find('.favourite'), - replyEl = postEl.find('.post_reply'); + var postEl = $('#post-container li[data-pid="' + pid + '"]'); - socket.emit('posts.getPrivileges', pid, function(err, privileges) { - if(err) { - return app.alert(err.message); - } + if (postEl.length) { + postEl.toggleClass('deleted'); - if (privileges.editable) { - if (!postEl.hasClass('deleted')) { - toggle_post_tools(pid, false); - } else { - toggle_post_tools(pid, true); - } - } + toggle_post_tools(pid, postEl.hasClass('deleted')); - if (privileges.view_deleted) { - postEl.toggleClass('deleted'); - } else { - postEl.toggleClass('none'); - } - updatePostCount(); - }); + updatePostCount(); } } - function toggle_post_tools(pid, state) { - var postEl = $(document.querySelector('#post-container li[data-pid="' + pid + '"]')), + function toggle_post_tools(pid, isDeleted) { + var postEl = $('#post-container li[data-pid="' + pid + '"]'), quoteEl = $(postEl[0].querySelector('.quote')), favEl = $(postEl[0].querySelector('.favourite')), - replyEl = $(postEl[0].querySelector('.post_reply')); + replyEl = $(postEl[0].querySelector('.post_reply')), + chatEl = $(postEl[0].querySelector('.chat')); - if (state) { - quoteEl.removeClass('none'); - favEl.removeClass('none'); - replyEl.removeClass('none'); - } else { + if (isDeleted) { quoteEl.addClass('none'); favEl.addClass('none'); replyEl.addClass('none'); + chatEl.addClass('none'); + } else { + quoteEl.removeClass('none'); + favEl.removeClass('none'); + replyEl.removeClass('none'); + chatEl.removeClass('none'); } } - Topic.postCount = templates.get('postcount'); - window.onscroll = updateHeader; }; @@ -969,7 +950,8 @@ define(['composer'], function(composer) { var progressBarContainer = $('.progress-container'); var tid = templates.get('topic_id'); - pagination.parentNode.style.display = 'block'; + if(pagination.parentNode) + pagination.parentNode.style.display = 'block'; progressBarContainer.css('display', ''); if (scrollTop < jQuery('.posts > .post-row:first-child').height() && Topic.postCount > 1) { @@ -1019,36 +1001,67 @@ define(['composer'], function(composer) { return; } - var container = $(window), + if(config.usePagination) { + socket.emit('posts.getPidPage', pid, function(err, page) { + if(err) { + return; + } + if(parseInt(page, 10) !== pagination.currentPage) { + pagination.loadPage(page); + } else { + scrollToPid(pid); + } + }); + } else { + scrollToPid(pid); + } + + function scrollToPid(pid) { + var container = $(window), scrollTo = $('#post_anchor_' + pid), tid = $('#post-container').attr('data-tid'); - function animateScroll() { - $('window,html').animate({ - scrollTop: scrollTo.offset().top + container.scrollTop() - $('#header-menu').height() - }, 400); - } + function animateScroll() { + $('window,html').animate({ + scrollTop: scrollTo.offset().top + container.scrollTop() - $('#header-menu').height() + }, 400); + } - if (!scrollTo.length && tid) { + if (!scrollTo.length && tid) { - var intervalID = setInterval(function () { - loadMorePosts(tid, function (posts) { - scrollTo = $('#post_anchor_' + pid); + var intervalID = setInterval(function () { + loadMorePosts(tid, function (posts) { + scrollTo = $('#post_anchor_' + pid); - if (tid && scrollTo.length) { - animateScroll(); - } + if (tid && scrollTo.length) { + animateScroll(); + } - if (!posts.length || scrollTo.length) - clearInterval(intervalID); - }); - }, 100); + if (!posts.length || scrollTo.length) + clearInterval(intervalID); + }); + }, 100); - } else if (tid) { - animateScroll(); + } else if (tid) { + animateScroll(); + } } } + function onNewPostPagination(data) { + var posts = data.posts; + socket.emit('topics.getPageCount', templates.get('topic_id'), function(err, newPageCount) { + + pagination.recreatePaginationLinks(newPageCount); + + if(pagination.currentPage === pagination.pageCount) { + createNewPosts(data); + } else if(data.posts && data.posts.length && parseInt(data.posts[0].uid, 10) === parseInt(app.uid, 10)) { + pagination.loadPage(pagination.pageCount); + } + }); + } + function createNewPosts(data, infiniteLoaded) { if(!data || (data.posts && !data.posts.length)) { return; @@ -1063,6 +1076,7 @@ define(['composer'], function(composer) { function findInsertionPoint() { var after = null, firstPid = data.posts[0].pid; + $('#post-container li[data-pid]').each(function() { if(parseInt(firstPid, 10) > parseInt($(this).attr('data-pid'), 10)) { after = $(this); @@ -1083,11 +1097,7 @@ define(['composer'], function(composer) { var insertAfter = findInsertionPoint(); - var html = templates.prepare(templates['topic'].blocks['posts']).parse(data); - var regexp = new RegExp("([\\s\\S]*?)", 'g'); - html = html.replace(regexp, ''); - - translator.translate(html, function(translatedHTML) { + parseAndTranslatePosts(data, function(translatedHTML) { var translated = $(translatedHTML); if(!infiniteLoaded) { @@ -1098,27 +1108,41 @@ define(['composer'], function(composer) { .hide() .fadeIn('slow'); - for (var x = 0, numPosts = data.posts.length; x < numPosts; x++) { - socket.emit('posts.getPrivileges', data.posts[x].pid, function(err, privileges) { - if(err) { - return app.alertError(err.message); - } - toggle_mod_tools(privileges.pid, privileges.editable); - }); - } + onNewPostsLoaded(data.posts); + }); + } - infiniteLoaderActive = false; + function parseAndTranslatePosts(data, callback) { + var html = templates.prepare(templates['topic'].blocks['posts']).parse(data); + var regexp = new RegExp("([\\s\\S]*?)", 'g'); + html = html.replace(regexp, ''); - app.populateOnlineUsers(); - app.createUserTooltips(); - app.addCommasToNumbers(); - $('span.timeago').timeago(); - $('.post-content img').addClass('img-responsive'); - updatePostCount(); - showBottomPostBar(); - }); + translator.translate(html, callback); + } + + + function onNewPostsLoaded(posts) { + for (var x = 0, numPosts = posts.length; x < numPosts; x++) { + socket.emit('posts.getPrivileges', posts[x].pid, function(err, privileges) { + if(err) { + return app.alertError(err.message); + } + toggle_mod_tools(privileges.pid, privileges.editable); + }); + } + + infiniteLoaderActive = false; + + app.populateOnlineUsers(); + app.createUserTooltips(); + app.addCommasToNumbers(); + $('span.timeago').timeago(); + $('.post-content img').addClass('img-responsive'); + updatePostCount(); + showBottomPostBar(); } + function toggle_mod_tools(pid, state) { var postEl = $(document.querySelector('#post-container li[data-pid="' + pid + '"]')), editEl = postEl.find('.edit'), @@ -1150,7 +1174,6 @@ define(['composer'], function(composer) { return; } - if (indicatorEl.attr('done') === '0') { infiniteLoaderActive = true; indicatorEl.fadeIn(); diff --git a/public/src/forum/unread.js b/public/src/forum/unread.js index abd19067de..b562ce1502 100644 --- a/public/src/forum/unread.js +++ b/public/src/forum/unread.js @@ -1,53 +1,15 @@ -define(function() { +define(['forum/recent'], function(recent) { var Unread = {}, loadingMoreTopics = false; Unread.init = function() { app.enterRoom('recent_posts'); - ajaxify.register_events([ - 'event:new_topic', - 'event:new_post', - 'topics.markAllRead' - ]); - - var newTopicCount = 0, - newPostCount = 0; - $('#new-topics-alert').on('click', function() { $(this).addClass('hide'); }); - socket.on('event:new_topic', function(data) { - ++newTopicCount; - updateAlertText(); - }); - - function updateAlertText() { - var text = 'There'; - - if (newTopicCount > 1) { - text += ' are ' + newTopicCount + ' new topics'; - } else if (newTopicCount === 1) { - text += ' is a new topic'; - } - - if (newPostCount > 1) { - text += (newTopicCount?' and ':' are ') + newPostCount + ' new posts'; - } else if(newPostCount === 1) { - text += (newTopicCount?' and ':' is ') + ' a new post'; - } - - text += '. Click here to reload.'; - - $('#new-topics-alert').html(text).removeClass('hide').fadeIn('slow'); - $('#category-no-topics').addClass('hidden'); - } - - socket.on('event:new_post', function(data) { - ++newPostCount; - updateAlertText(); - }); + recent.watchForNewPosts(); $('#mark-allread-btn').on('click', function() { var btn = $(this); @@ -67,24 +29,19 @@ define(function() { }); }); - function onTopicsLoaded(topics) { - - var html = templates.prepare(templates['unread'].blocks['topics']).parse({ - topics: topics - }); - - translator.translate(html, function(translatedHTML) { - var container = $('#topics-container'); + if ($("body").height() <= $(window).height() && $('#topics-container').children().length >= 20) { + $('#load-more-btn').show(); + } - $('#category-no-topics').remove(); + $('#load-more-btn').on('click', function() { + loadMoreTopics(); + }); - html = $(translatedHTML); - container.append(html); - $('span.timeago').timeago(); - app.createUserTooltips(); - app.makeNumbersHumanReadable(html.find('.human-readable-number')); - }); - } + app.enableInfiniteLoading(function() { + if(!loadingMoreTopics) { + loadMoreTopics(); + } + }); function loadMoreTopics() { loadingMoreTopics = true; @@ -96,7 +53,7 @@ define(function() { } if (data.topics && data.topics.length) { - onTopicsLoaded(data.topics); + recent.onTopicsLoaded('unread', data.topics); $('#topics-container').attr('data-next-start', data.nextStart); } else { $('#load-more-btn').hide(); @@ -105,23 +62,6 @@ define(function() { loadingMoreTopics = false; }); } - - $(window).off('scroll').on('scroll', function() { - var bottom = ($(document).height() - $(window).height()) * 0.9; - - if ($(window).scrollTop() > bottom && !loadingMoreTopics) { - loadMoreTopics(); - } - }); - - - if ($("body").height() <= $(window).height() && $('#topics-container').children().length >= 20) { - $('#load-more-btn').show(); - } - - $('#load-more-btn').on('click', function() { - loadMoreTopics(); - }); }; return Unread; diff --git a/public/src/modules/composer.js b/public/src/modules/composer.js index 7b0239aba8..d22153acbd 100644 --- a/public/src/modules/composer.js +++ b/public/src/modules/composer.js @@ -352,7 +352,7 @@ define(['taskbar'], function(taskbar) { } postContainer.css('visibility', 'visible') - .css('z-index', 1); + .css('z-index', 2); $('body').css({'margin-bottom': postContainer.css('height')}); diff --git a/public/src/templates.js b/public/src/templates.js index 06295dc79e..993cf20f30 100644 --- a/public/src/templates.js +++ b/public/src/templates.js @@ -79,7 +79,7 @@ template.prototype.parse = parse; template.prototype.html = String(html); - global.templates[file] = new template; + templates[file] = new template; loaded--; if (loaded === 0) { @@ -196,6 +196,7 @@ template_data = data; parse_template(); }).fail(function (data, textStatus) { + jQuery('#content, #footer').stop(true, true).removeClass('ajaxifying'); if (data && data.status == 404) { return ajaxify.go('404'); } else if (data && data.status === 403) { @@ -396,7 +397,7 @@ namespace = ''; } else { // clean up all undefined conditionals - template = template.replace(//gi, ''); + template = template.replace(//gi, ''); } return template; diff --git a/public/templates/admin/settings.tpl b/public/templates/admin/settings.tpl index 8ddd896da9..3601f7c2ca 100644 --- a/public/templates/admin/settings.tpl +++ b/public/templates/admin/settings.tpl @@ -7,6 +7,7 @@
  • Email
  • User
  • Post
  • +
  • Pagination
  • Web Crawler
  • @@ -133,6 +134,21 @@ + +
    diff --git a/public/templates/category.tpl b/public/templates/category.tpl index 8ba94b3788..5b578dc604 100644 --- a/public/templates/category.tpl +++ b/public/templates/category.tpl @@ -84,7 +84,16 @@ + + +
    +
    [[category:sidebar.recent_replies]]
    @@ -121,4 +130,6 @@
    - \ No newline at end of file + + + \ No newline at end of file diff --git a/public/templates/login.tpl b/public/templates/login.tpl index 1557a6c2e3..8f7807421d 100644 --- a/public/templates/login.tpl +++ b/public/templates/login.tpl @@ -41,7 +41,10 @@

    -   [[login:forgot_password]] + + +   [[login:forgot_password]] +
    diff --git a/public/templates/topic.tpl b/public/templates/topic.tpl index ec72ff958b..7ee6f547c8 100644 --- a/public/templates/topic.tpl +++ b/public/templates/topic.tpl @@ -1,5 +1,7 @@ + + @@ -141,7 +143,7 @@ -
  • +
  • [[category:posts]] @@ -176,15 +178,15 @@ -
    -
    +
    +
    -
    +
    + + + +