123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546 |
- import { readFileSync } from 'fs';
- import { EleventyRenderPlugin } from "@11ty/eleventy";
- /** @type {import('@11ty/eleventy').LocalConfig} */
- export default function (eleventyConfig) {
- const env = process.env.NODE_ENV || "development";
- const isDevelopment = env === "development";
- eleventyConfig.setInputDirectory("src/pages");
- eleventyConfig.setOutputDirectory(process.env.DIST_DIR || "demo");
- eleventyConfig.setLayoutsDirectory("_layouts");
- eleventyConfig.setIncludesDirectory("_includes");
- eleventyConfig.setWatchThrottleWaitTime(100);
- eleventyConfig.addPassthroughCopy("src/pages/favicon.ico");
- eleventyConfig.addPlugin(EleventyRenderPlugin, {
- accessGlobalData: true,
- });
- eleventyConfig.setLiquidOptions({
- timezoneOffset: 0,
- jekyllInclude: true,
- dynamicPartials: true,
- jekyllWhere: true,
- });
- if (isDevelopment) {
- eleventyConfig.addWatchTarget("dist");
- }
- /**
- * Data
- */
- eleventyConfig.addGlobalData("environment", env);
- eleventyConfig.addGlobalData("package", JSON.parse(readFileSync("package.json", "utf-8")));
- eleventyConfig.addGlobalData("readme", readFileSync("README.md", "utf-8"));
- eleventyConfig.addGlobalData("license", readFileSync("LICENSE", "utf-8"));
- eleventyConfig.addGlobalData("changelog", readFileSync("CHANGELOG.md", "utf-8"));
- eleventyConfig.addGlobalData("site", {
- title: "Tabler",
- description: "Premium and Open Source dashboard template with responsive and high quality UI.",
- themeColor: "#066fd1",
- email: "support@tabler.io",
- homepage: "https://tabler.io",
- githubUrl: "https://github.com/tabler/tabler",
- githubSponsorsUrl: "https://github.com/sponsors/codecalm",
- changelogUrl: "https://github.com/tabler/tabler/releases",
- sponsorUrl: "https://github.com/sponsors/codecalm",
- previewUrl: "https://tabler.io/demo",
- docsUrl: "https://tabler.io/docs",
- mapboxKey: "pk.eyJ1IjoidGFibGVyIiwiYSI6ImNscHh3dnhndjB2M3QycW85bGd0NXRmZ3YifQ.9LfHPsNoEXQH-xzz-81Ffw",
- googleMapsKey: "AIzaSyAr5mRB4U1KRkVznIrDWEvZjroYcD202DI",
- googleMapsDevKey: "AIzaSyCL-BY8-sq12m0S9H-S_yMqDmcun3A9znw",
- npmPackage: "@tabler/core",
- tablerCssPlugins: [
- "tabler-flags",
- "tabler-socials",
- "tabler-payments",
- "tabler-vendors",
- "tabler-marketing"
- ],
- icons: {
- link: "https://tabler.io/icons"
- },
- emails: {
- price: "$29",
- buy_link: "https://r.tabler.io/buy-emails"
- },
- illustrations: {
- price: "$59",
- count: 50,
- buy_link: "https://r.tabler.io/buy-illustrations"
- },
- colors: {
- "blue": {
- "class": "blue",
- "hex": "#066fd1",
- "title": "Blue"
- },
- "azure": {
- "class": "azure",
- "hex": "#45aaf2",
- "title": "Azure"
- },
- "indigo": {
- "class": "indigo",
- "hex": "#6574cd",
- "title": "Indigo"
- },
- "purple": {
- "class": "purple",
- "hex": "#a55eea",
- "title": "Purple"
- },
- "pink": {
- "class": "pink",
- "hex": "#f66d9b",
- "title": "Pink"
- },
- "red": {
- "class": "red",
- "hex": "#fa4654",
- "title": "Red"
- },
- "orange": {
- "class": "orange",
- "hex": "#fd9644",
- "title": "Orange"
- },
- "yellow": {
- "class": "yellow",
- "hex": "#f1c40f",
- "title": "Yellow"
- },
- "lime": {
- "class": "lime",
- "hex": "#7bd235",
- "title": "Lime"
- },
- "green": {
- "class": "green",
- "hex": "#5eba00",
- "title": "Green"
- },
- "teal": {
- "class": "teal",
- "hex": "#2bcbba",
- "title": "Teal"
- },
- "cyan": {
- "class": "cyan",
- "hex": "#17a2b8",
- "title": "Cyan"
- }
- },
- skinColors: {
- "rose": {
- "hex": "#FFCB9D",
- "title": "Rose",
- "class": "rose"
- },
- "yellow": {
- "hex": "#F0BA60",
- "title": "Yellow",
- "class": "yellow"
- },
- "skin-1": {
- "hex": "#e2c6a7",
- "title": "Skin 1",
- "class": "skin-1"
- },
- "skin-2": {
- "hex": "#c7a786",
- "title": "Skin 2",
- "class": "skin-2"
- },
- "skin-3": {
- "hex": "#a68063",
- "title": "Skin 3",
- "class": "skin-3"
- },
- "skin-4": {
- "hex": "#926241",
- "title": "Skin 4",
- "class": "skin-4"
- },
- "skin-5": {
- "hex": "#654c45",
- "title": "Skin 5",
- "class": "skin-5"
- },
- "gray": {
- "hex": "#d5d7dd",
- "title": "Gray",
- "class": "gray"
- }
- },
- colorsExtra: {
- "white": {
- "hex": "#ffffff",
- "title": "White"
- },
- "dark": {
- "hex": "#303645",
- "title": "Dark"
- },
- "gray": {
- "hex": "#868e96",
- "title": "Gray"
- }
- },
- variants: [
- {
- "name": "success",
- "icon": "check"
- },
- {
- "name": "info",
- "icon": "info-circle"
- },
- {
- "name": "warning",
- "icon": "alert-triangle"
- },
- {
- "name": "danger",
- "icon": "alert-circle"
- }
- ],
- "themeColors": {
- "primary": {
- "class": "primary",
- "title": "Primary"
- },
- "secondary": {
- "class": "secondary",
- "title": "Secondary"
- },
- "success": {
- "class": "success",
- "title": "Success"
- },
- "warning": {
- "class": "warning",
- "title": "Warning"
- },
- "danger": {
- "class": "danger",
- "title": "Danger"
- },
- "info": {
- "class": "info",
- "title": "Info"
- },
- "dark": {
- "class": "dark",
- "title": "Dark"
- },
- "light": {
- "class": "light",
- "title": "Light"
- }
- },
- "buttonStates": [
- {
- "class": null,
- "title": "Normal"
- },
- {
- "class": "active",
- "title": "Active state"
- },
- {
- "class": "disabled",
- "title": "Disabled"
- }
- ],
- "socials": {
- "x": {
- "icon": "brand-x",
- "title": "X"
- },
- "facebook": {
- "icon": "brand-facebook",
- "title": "Facebook"
- },
- "twitter": {
- "icon": "brand-twitter",
- "title": "Twitter"
- },
- "google": {
- "icon": "brand-google",
- "title": "Google"
- },
- "youtube": {
- "icon": "brand-youtube",
- "title": "Youtube"
- },
- "vimeo": {
- "icon": "brand-vimeo",
- "title": "Vimeo"
- },
- "dribbble": {
- "icon": "brand-dribbble",
- "title": "Dribbble"
- },
- "github": {
- "icon": "brand-github",
- "title": "Github"
- },
- "instagram": {
- "icon": "brand-instagram",
- "title": "Instagram"
- },
- "pinterest": {
- "icon": "brand-pinterest",
- "title": "Pinterest"
- },
- "vk": {
- "icon": "brand-vk",
- "title": "VK"
- },
- "rss": {
- "icon": "rss",
- "title": "RSS"
- },
- "flickr": {
- "icon": "brand-flickr",
- "title": "Flickr"
- },
- "bitbucket": {
- "icon": "brand-bitbucket",
- "title": "Bitbucket"
- },
- "tabler": {
- "icon": "brand-tabler",
- "title": "Tabler"
- }
- },
- "months-short": [
- "Jan",
- "Feb",
- "Mar",
- "Apr",
- "May",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Oct",
- "Nov",
- "Dec"
- ],
- "months-long": [
- "January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December"
- ]
- });
- /**
- * Filters
- */
- eleventyConfig.addFilter("miliseconds_to_minutes", function (value) {
- // Raturn 3:45 time format
- const minutes = Math.floor(value / 60000);
- const seconds = ((value % 60000) / 1000).toFixed(0);
- return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
- });
- eleventyConfig.addFilter("relative", (page) => {
- const segments = (page.url || '').replace(/^\//).split('/');
- if (segments.length === 1) {
- return '.';
- } else {
- return '../'.repeat(segments.length - 1).slice(0, -1);
- }
- });
- eleventyConfig.addFilter("concat_objects", function (object, object2) {
- if (
- object &&
- object2 &&
- typeof object === 'object' &&
- typeof object2 === 'object' &&
- !Array.isArray(object) &&
- !Array.isArray(object2)
- ) {
- return { ...object, ...object2 };
- }
- return object;
- });
- eleventyConfig.addFilter("replace_regex", function (input, regStr, replStr) {
- const regex = new RegExp(regStr, 'gm');
- return input.replace(regex, replStr);
- });
- eleventyConfig.addFilter("timestamp_to_date", function (timestamp) {
- const date = new Date(timestamp * 1000); // Convert timestamp to milliseconds
- return date.toISOString().split('T')[0]; // Extract the date in 'YYYY-MM-DD' format
- });
- eleventyConfig.addFilter("split_to_n", function (arr, n) {
- const chunkSize = Math.round(arr.length / n);
- const result = [];
- for (let i = 0; i < arr.length; i += chunkSize) {
- result.push(arr.slice(i, i + chunkSize));
- }
- return result;
- })
- eleventyConfig.addFilter("format_number", function (value) {
- return value.toString()
- .split('')
- .reverse()
- .reduce((acc, char, index) => {
- if (index > 0 && index % 3 === 0) {
- acc.push(',');
- }
- acc.push(char);
- return acc;
- }, [])
- .reverse()
- .join('');
- });
- function randomNumber(x, min = 0, max = 100, round = 0) {
- let value = ((x * x * Math.PI * Math.E * (max + 1) * (Math.sin(x) / Math.cos(x * x))) % (max + 1 - min)) + min;
- value = value > max ? max : value;
- value = value < min ? min : value;
- if (round !== 0) {
- value = parseFloat(value.toFixed(round));
- } else {
- value = Math.floor(value);
- }
- return value;
- }
- eleventyConfig.addFilter("random_date_ago", function (x, daysAgo = 100) {
- const today = new Date();
- const randomDaysAgo = randomNumber(x, 0, daysAgo);
- today.setDate(today.getDate() - randomDaysAgo);
- return today;
- });
- eleventyConfig.addFilter("random_date", function (x, startDate = null, endDate = null) {
- const start = startDate ? new Date(startDate).getTime() : Date.now() - 100 * 24 * 60 * 60 * 1000;
- const end = endDate ? new Date(endDate).getTime() : Date.now();
- const randomTimestamp = randomNumber(x, start, end);
- return new Date(randomTimestamp);
- });
- eleventyConfig.addFilter("random_item", function (x, items) {
- const index = randomNumber(x, 0, items.length - 1);
- return items[index];
- });
- eleventyConfig.addFilter("random_number", randomNumber);
- eleventyConfig.addFilter("first_letters", function capitalizeFirstLetter(string) {
- return string.split(' ').map(word => word.charAt(0)).join('');
- })
- eleventyConfig.addFilter("size", function (elem) {
- if (elem instanceof Object) {
- return Object.keys(elem).length;
- }
- return elem.length;
- })
- eleventyConfig.addFilter("first", function (elem) {
- if (elem instanceof Object) {
- return elem[Object.keys(elem)[0]];
- }
- return elem[0];
- })
- // time ago from today
- eleventyConfig.addFilter("timeago", function (date) {
- const seconds = Math.floor((new Date() - date) / 1000);
- let interval = Math.floor(seconds / 31536000);
- if (interval > 1) {
- return interval + " years ago";
- }
- interval = Math.floor(seconds / 2592000);
- if (interval > 1) {
- return interval + " months ago";
- }
- interval = Math.floor(seconds / 86400);
- if (interval > 1) {
- return interval + " days ago";
- }
- interval = Math.floor(seconds / 3600);
- if (interval > 1) {
- return interval + " hours ago";
- }
- interval = Math.floor(seconds / 60);
- if (interval > 1) {
- return interval + " minutes ago";
- }
- if (seconds > 0) {
- return Math.floor(seconds) + " seconds ago";
- }
- return "now";
- })
- /**
- * Shortcodes
- */
- const tags = ["capture_global", "endcapture_global", "highlight", "endhighlight"];
- tags.forEach(tag => {
- eleventyConfig.addLiquidTag(tag, function (liquidEngine) {
- return {
- parse: function (tagToken, remainingTokens) {
- this.str = tagToken.args;
- },
- render: function (scope, hash) {
- return "";
- },
- };
- });
- });
- /**
- * Transforms
- */
- function prettifyHTML(content, outputPath) {
- return outputPath.endsWith('.html')
- ? content
- .replace(/\/\/ @formatter:(on|off)\n+/gm, '')
- // remove empty lines
- .replace(/^\s*[\r\n]/gm, '')
- : content
- }
- eleventyConfig.addTransform('htmlformat', prettifyHTML)
- };
|