Archived
2
0
This repository has been archived on 2025-07-16. You can view files and clone it, but cannot push or open issues or pull requests.
cc24-hub/.eleventy.js
2025-07-13 01:00:52 +02:00

112 lines
3.3 KiB
JavaScript

const yaml = require('js-yaml');
const fs = require('fs');
const syntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight');
const sass = require('eleventy-plugin-sass');
module.exports = function(eleventyConfig) {
// Plugins
eleventyConfig.addPlugin(syntaxHighlight);
eleventyConfig.addPlugin(sass, {
compileOptions: {
permalink: function(contents, inputPath) {
return (data) => data.page.filePathStem.replace(/^\/scss\//, "/css/") + ".css";
}
},
sass: {
style: "compressed",
sourceMap: true
}
});
// Copy static assets
eleventyConfig.addPassthroughCopy("src/js");
eleventyConfig.addPassthroughCopy("src/images");
eleventyConfig.addPassthroughCopy("src/icons");
// Watch for changes
eleventyConfig.addWatchTarget("src/scss/");
eleventyConfig.addWatchTarget("src/js/");
eleventyConfig.addWatchTarget("src/_data/");
// Custom YAML data loader
eleventyConfig.addDataExtension("yaml", contents => yaml.load(contents));
eleventyConfig.addDataExtension("yml", contents => yaml.load(contents));
// Filters
eleventyConfig.addFilter("filterByDomain", function(tools, domain) {
if (!domain) return tools;
return tools.filter(tool => tool.domains && tool.domains.includes(domain));
});
eleventyConfig.addFilter("filterByPhase", function(tools, phase) {
if (!phase) return tools;
return tools.filter(tool => tool.phases && tool.phases.includes(phase));
});
eleventyConfig.addFilter("filterByType", function(tools, type) {
if (!type) return tools;
return tools.filter(tool => tool.type === type);
});
eleventyConfig.addFilter("searchTools", function(tools, searchTerm) {
if (!searchTerm) return tools;
const term = searchTerm.toLowerCase();
return tools.filter(tool =>
tool.name.toLowerCase().includes(term) ||
tool.description.toLowerCase().includes(term) ||
(tool.tags && tool.tags.some(tag => tag.toLowerCase().includes(term)))
);
});
// Collection for tools by domain and phase (for matrix view)
eleventyConfig.addCollection("toolMatrix", function(collectionApi) {
const tools = collectionApi.getAll()[0].data.tools || [];
const domains = ['Filesystem Forensics', 'Network Forensics', 'Memory Forensics', 'Live Forensics', 'Malware Analysis', 'Cryptocurrency'];
const phases = ['Data Collection', 'Examination', 'Analysis', 'Reporting'];
const matrix = {};
domains.forEach(domain => {
matrix[domain] = {};
phases.forEach(phase => {
matrix[domain][phase] = tools.filter(tool =>
tool.domains && tool.domains.includes(domain) &&
tool.phases && tool.phases.includes(phase) &&
tool.type === 'FOSS'
);
});
});
return matrix;
});
// Global data
eleventyConfig.addGlobalData("domains", [
'Filesystem Forensics',
'Network Forensics',
'Memory Forensics',
'Live Forensics',
'Malware Analysis',
'Cryptocurrency'
]);
eleventyConfig.addGlobalData("phases", [
'Data Collection',
'Examination',
'Analysis',
'Reporting'
]);
// Configuration
return {
dir: {
input: "src",
output: "_site",
includes: "_includes",
layouts: "_layouts",
data: "_data"
},
templateFormats: ["md", "njk", "html"],
markdownTemplateEngine: "njk",
htmlTemplateEngine: "njk"
};
};