markdown-it-git-graph
Version:
一个markdown-it插件,用于生成git提交图
86 lines (85 loc) • 2.07 kB
JavaScript
const defaultTheme = {
colors: [
'#e6194b',
'#ffe119',
'#4363d8',
'#3cb44b',
'#f58231',
'#911eb4',
'#46f0f0',
'#f032e6',
'#bcf60c',
'#fabebe',
'#008080',
'#e6beff',
],
lineHeight: 24,
lineWidth: 20,
pointRadius: 5,
columns: ['message', 'date', 'hash'],
dateFormat: {
dateStyle: 'short',
timeStyle: 'short',
},
};
const defaultOptions = {
defaultBranchName: 'main',
theme: defaultTheme,
};
function getOptions(options) {
if (!options) {
return defaultOptions;
}
const theme = {
...defaultOptions.theme,
...options.theme,
};
return {
...defaultOptions,
...options,
theme,
};
}
const converters = {
strings: (str) => str ? str.split(',') : undefined,
number: (str) => {
if (!str) {
return undefined;
}
const num = Number.parseInt(str);
return Number.isNaN(num) ? undefined : num;
},
boolean: (str) => str ? str === 'true' ? true : str === 'false' ? false : undefined : undefined,
};
const themeConverter = {
colors: converters.strings,
lineHeight: converters.number,
lineWidth: converters.number,
pointRadius: converters.number,
columns: converters.strings,
dateFormat: undefined,
};
function parseTheme(text) {
const strs = text.trim().split('&');
const obj = {};
strs.forEach((str) => {
const [key, value] = str.split('=');
if (key && value && key.trim().length > 0 && value.trim().length > 0) {
obj[key.trim()] = value.trim();
}
});
const theme = {};
Object.entries(themeConverter).forEach(([key, converter]) => {
const str = obj[key];
if (!str || !converter) {
return;
}
const value = converter(str);
if (value === undefined) {
return;
}
theme[key] = value;
});
return theme;
}
export { getOptions, parseTheme, };