Files
sow-nodebb-theme/public/client.js
T

66 lines
1.7 KiB
JavaScript

'use strict';
/*
Hey there!
This is the client file for your theme. If you need to do any client-side work in javascript,
this is where it needs to go.
You can listen for page changes by writing something like this:
$(window).on('action:ajaxify.end', function(ev, data) {
var url = data.url;
console.log('I am now at: ' + url);
});
*/
$(document).ready(function () {
require(['api'], function (api) {
const originalGet = api.get.bind(api);
let categoryClassMapPromise;
function getCategoryClassMap() {
if (!categoryClassMapPromise) {
categoryClassMapPromise = new Promise((resolve) => {
originalGet('/categories', {}, function (err, data) {
if (err || !data || !Array.isArray(data.categories)) {
return resolve({});
}
const classMap = data.categories.reduce((memo, category) => {
if (category && category.cid !== undefined) {
memo[String(category.cid)] = category.class || '';
}
return memo;
}, {});
resolve(classMap);
});
});
}
return categoryClassMapPromise;
}
api.get = function (url, data, callback) {
if (url !== '/search/categories' || typeof callback !== 'function') {
return originalGet(url, data, callback);
}
return originalGet(url, data, function (err, payload) {
if (err || !payload || !Array.isArray(payload.categories)) {
return callback(err, payload);
}
getCategoryClassMap().then((classMap) => {
payload.categories = payload.categories.map(category => ({
...category,
class: category.class || classMap[String(category.cid)] || '',
}));
callback(null, payload);
});
});
};
});
});