Merge remote-tracking branch 'origin/master' into sortable-menu
commit
b1f835b053
@ -0,0 +1,37 @@
|
||||
'use strict';
|
||||
/* globals define, app, ajaxify */
|
||||
|
||||
define('ajaxifyCache', function() {
|
||||
var Cache = {
|
||||
url: undefined,
|
||||
DOM: undefined,
|
||||
tempDOM: undefined
|
||||
};
|
||||
|
||||
Cache.set = function() {
|
||||
Cache.DOM = $('#content > *').detach();
|
||||
};
|
||||
|
||||
Cache.get = function(url, callback) {
|
||||
if (url === Cache.url && ajaxify.isPopState) {
|
||||
// Swap DOM elements
|
||||
// setTimeout(function() {
|
||||
Cache.tempDOM = $('#content > *').detach();
|
||||
$('#content').append(Cache.DOM);
|
||||
Cache.DOM = Cache.tempDOM;
|
||||
// }, 100); // 100ms for realism! :sunglasses:
|
||||
|
||||
// Set the values that normally get set on ajaxify
|
||||
Cache.url = ajaxify.currentPage;
|
||||
ajaxify.currentPage = url;
|
||||
|
||||
if (typeof callback === 'function') { callback(); }
|
||||
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
return Cache;
|
||||
});
|
@ -0,0 +1,74 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
var async = require('async'),
|
||||
_ = require('underscore'),
|
||||
|
||||
categories = require('../categories'),
|
||||
search = require('../search'),
|
||||
db = require('../database');
|
||||
|
||||
|
||||
module.exports = function(Topics) {
|
||||
|
||||
Topics.getSuggestedTopics = function(tid, uid, start, end, callback) {
|
||||
async.parallel({
|
||||
tagTids: function(next) {
|
||||
getTidsWithSameTags(tid, next);
|
||||
},
|
||||
searchTids: function(next) {
|
||||
getSearchTids(tid, next);
|
||||
},
|
||||
categoryTids: function(next) {
|
||||
getCategoryTids(tid, next);
|
||||
}
|
||||
}, function(err, results) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
var tids = results.tagTids.concat(results.searchTids).concat(results.categoryTids);
|
||||
tids = tids.filter(function(_tid, index, array) {
|
||||
return parseInt(_tid, 10) !== parseInt(tid, 10) && array.indexOf(_tid) === index;
|
||||
}).slice(start, end + 1);
|
||||
|
||||
Topics.getTopics(tids, uid, callback);
|
||||
});
|
||||
};
|
||||
|
||||
function getTidsWithSameTags(tid, callback) {
|
||||
async.waterfall([
|
||||
function(next) {
|
||||
Topics.getTopicTags(tid, next);
|
||||
},
|
||||
function(tags, next) {
|
||||
async.map(tags, function(tag, next) {
|
||||
Topics.getTagTids(tag, 0, -1, next);
|
||||
}, next);
|
||||
},
|
||||
function(data, next) {
|
||||
next(null, _.unique(_.flatten(data)));
|
||||
}
|
||||
], callback);
|
||||
}
|
||||
|
||||
function getSearchTids(tid, callback) {
|
||||
async.waterfall([
|
||||
function(next) {
|
||||
Topics.getTopicField(tid, 'title', next);
|
||||
},
|
||||
function(title, next) {
|
||||
search.searchQuery('topic', title, next);
|
||||
}
|
||||
], callback);
|
||||
}
|
||||
|
||||
function getCategoryTids(tid, callback) {
|
||||
Topics.getTopicField(tid, 'cid', function(err, cid) {
|
||||
if (err || !cid) {
|
||||
return callback(err, []);
|
||||
}
|
||||
categories.getTopicIds('cid:' + cid + ':tids', true, 0, 9, callback);
|
||||
});
|
||||
}
|
||||
|
||||
};
|
Loading…
Reference in New Issue