66 lines
1.7 KiB
JavaScript
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);
|
|
});
|
|
});
|
|
};
|
|
});
|
|
});
|