kubernetes-handbook/node_modules/prismjs/plugins/custom-class/prism-custom-class.js

96 lines
1.9 KiB
JavaScript
Raw Normal View History

2021-04-13 00:24:28 +08:00
(function () {
if (
(typeof self === 'undefined' || !self.Prism) &&
(typeof global === 'undefined' || !global.Prism)
) {
return;
}
/**
* @callback ClassMapper
* @param {string} className
* @param {string} language
* @returns {string}
*
* @callback ClassAdder
* @param {ClassAdderEnvironment} env
* @returns {undefined | string | string[]}
*
* @typedef ClassAdderEnvironment
* @property {string} language
* @property {string} type
* @property {string} content
*/
// options
/** @type {ClassAdder | undefined} */
var adder;
/** @type {ClassMapper | undefined} */
var mapper;
/** @type {string} */
var prefixString = '';
Prism.plugins.customClass = {
/**
* Sets the function which can be used to add custom aliases to any token.
*
* @param {ClassAdder} classAdder
*/
add: function (classAdder) {
adder = classAdder;
},
/**
* Maps all class names using the given object or map function.
*
* This does not affect the prefix.
*
* @param {Object<string, string> | ClassMapper} classMapper
*/
map: function map(classMapper) {
if (typeof classMapper === 'function') {
mapper = classMapper;
} else {
mapper = function (className) {
return classMapper[className] || className;
};
}
},
/**
* Adds the given prefix to all class names.
*
* @param {string} string
*/
prefix: function prefix(string) {
prefixString = string || '';
}
}
Prism.hooks.add('wrap', function (env) {
if (adder) {
var result = adder({
content: env.content,
type: env.type,
language: env.language
});
if (Array.isArray(result)) {
env.classes.push.apply(env.classes, result);
} else if (result) {
env.classes.push(result);
}
}
if (!mapper && !prefixString) {
return;
}
env.classes = env.classes.map(function (c) {
return prefixString + (mapper ? mapper(c, env.language) : c);
});
});
})();