mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-12-26 10:20:23 +01:00
* feat: move to npm fontawesome dependency * feat: move shims to a separate file * fix: thin style prefix * feat: proper style and FA pro handling in icon selector * docs: add fontawesome properties to openAPI * fix: default for styles * feat: select all styles by default Turns out browsers lazy-load fonts. So since the actual CSS for each style is small, there is no perf reason for defaulting to free styles for FA pro users. This means they'll have to only change one setting. Still, the option to select styles remains for those who want it. * fix: remove console.log
76 lines
2.2 KiB
JavaScript
76 lines
2.2 KiB
JavaScript
'use strict';
|
|
|
|
const crypto = require('crypto');
|
|
const nconf = require('nconf');
|
|
const path = require('node:path');
|
|
|
|
process.profile = function (operation, start) {
|
|
console.log('%s took %d milliseconds', operation, process.elapsedTimeSince(start));
|
|
};
|
|
|
|
process.elapsedTimeSince = function (start) {
|
|
const diff = process.hrtime(start);
|
|
return (diff[0] * 1e3) + (diff[1] / 1e6);
|
|
};
|
|
const utils = { ...require('../public/src/utils.common') };
|
|
|
|
utils.getLanguage = function () {
|
|
const meta = require('./meta');
|
|
return meta.config && meta.config.defaultLang ? meta.config.defaultLang : 'en-GB';
|
|
};
|
|
|
|
utils.generateUUID = function () {
|
|
// from https://github.com/tracker1/node-uuid4/blob/master/index.js
|
|
let rnd = crypto.randomBytes(16);
|
|
/* eslint-disable no-bitwise */
|
|
rnd[6] = (rnd[6] & 0x0f) | 0x40;
|
|
rnd[8] = (rnd[8] & 0x3f) | 0x80;
|
|
/* eslint-enable no-bitwise */
|
|
rnd = rnd.toString('hex').match(/(.{8})(.{4})(.{4})(.{4})(.{12})/);
|
|
rnd.shift();
|
|
return rnd.join('-');
|
|
};
|
|
|
|
utils.getSass = function () {
|
|
try {
|
|
const sass = require('sass-embedded');
|
|
return sass;
|
|
} catch (_err) {
|
|
return require('sass');
|
|
}
|
|
};
|
|
|
|
utils.getFontawesomePath = function () {
|
|
let packageName = '@fortawesome/fontawesome-free';
|
|
if (nconf.get('fontawesome:pro') === true) {
|
|
packageName = '@fortawesome/fontawesome-pro';
|
|
}
|
|
const pathToMainFile = require.resolve(packageName);
|
|
// main file will be in `js/fontawesome.js` - we need to go up two directories to get to the root of the package
|
|
const fontawesomePath = path.dirname(path.dirname(pathToMainFile));
|
|
return fontawesomePath;
|
|
};
|
|
|
|
utils.getFontawesomeStyles = function () {
|
|
let styles = nconf.get('fontawesome:styles') || '*';
|
|
// "*" is a special case, it means all styles, spread is used to support both string and array (["*"])
|
|
if ([...styles][0] === '*') {
|
|
styles = ['solid', 'brands', 'regular'];
|
|
if (nconf.get('fontawesome:pro')) {
|
|
styles.push('light', 'thin', 'sharp', 'duotone');
|
|
}
|
|
}
|
|
if (!Array.isArray(styles)) {
|
|
styles = [styles];
|
|
}
|
|
return styles;
|
|
};
|
|
|
|
utils.getFontawesomeVersion = function () {
|
|
const fontawesomePath = utils.getFontawesomePath();
|
|
const packageJson = require(path.join(fontawesomePath, 'package.json'));
|
|
return packageJson.version;
|
|
};
|
|
|
|
module.exports = utils;
|