.eleventy.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /** @param {import("@11ty/eleventy").UserConfig} eleventyConfig */
  2. const env = process.env.ELEVENTY_ENV || "development"
  3. const { EleventyRenderPlugin } = require("@11ty/eleventy");
  4. const eleventySass = require("eleventy-sass");
  5. function random_number(x, min = 0, max = 100, round = 0) {
  6. let value = ((x * x * Math.PI * Math.E * (max + 1) * (Math.sin(x) / Math.cos(x * x))) % (max + 1 - min)) + min;
  7. value = value > max ? max : value;
  8. value = value < min ? min : value;
  9. if (round !== 0) {
  10. value = parseFloat(value.toFixed(round));
  11. } else {
  12. value = Math.floor(value);
  13. }
  14. return value;
  15. }
  16. module.exports = function (config) {
  17. config.addPlugin(EleventyRenderPlugin);
  18. config.addPlugin(eleventySass, {
  19. sass: {
  20. style: env === "production" ? "compressed" : "expanded",
  21. sourceMap: false
  22. }
  23. });
  24. config.addWatchTarget("./dist/css/*");
  25. config.addWatchTarget("./dist/js/*");
  26. config.addWatchTarget("./scss/*");
  27. config.addPassthroughCopy("dist");
  28. config.addPassthroughCopy("pages/assets");
  29. config.addGlobalData('env', env);
  30. config.addGlobalData('time', new Date());
  31. config.addGlobalData('base', '.');
  32. config.setLiquidOptions({
  33. dynamicPartials: true,
  34. strictVariables: false,
  35. strictFilters: true,
  36. jekyllInclude: true,
  37. extname: ".html",
  38. });
  39. const filters = ["timeago", "markdownify", "extract", "number_color", "htmlbeautifier", "random_id"]
  40. filters.forEach((filter) => {
  41. config.addFilter(filter, (a) => {
  42. return a;
  43. });
  44. });
  45. config.addFilter("size", (obj) => {
  46. if(obj instanceof Array) {
  47. return obj.length;
  48. } else if(obj instanceof Object) {
  49. return Object.keys(obj).length;
  50. } else {
  51. return 0;
  52. }
  53. })
  54. config.addFilter("replace_regex", (text, regex, replace) => {
  55. return text.replace(new RegExp(regex, "g"), replace);
  56. })
  57. config.addFilter("timestamp_to_date", (timestamp) => {
  58. return new Date(timestamp);
  59. })
  60. config.addFilter("concat_objects", (obj1, obj2) => {
  61. return {...obj1, ...obj2};
  62. })
  63. config.addFilter("miliseconds_to_minutes", (miliseconds) => {
  64. return miliseconds / 60000;
  65. })
  66. config.addFilter("seconds_to_minutes", (seconds) => {
  67. return seconds / 60;
  68. })
  69. config.addFilter("first_letters", (text) => {
  70. return (text || '').split(" ").map((word) => word.charAt(0)).join("");
  71. })
  72. config.addFilter('jsonify', function (variable) {
  73. return JSON.stringify(variable);
  74. });
  75. config.addFilter('random_number', random_number);
  76. config.addFilter('random_item', function (x, items) {
  77. var index = random_number(x, 0, items.length);
  78. return items[index];
  79. });
  80. config.addFilter('random_date', function (x, start_date = false, end_date = false) {
  81. const now = new Date();
  82. const oneDay = 24 * 60 * 60 * 1000; // milliseconds in a day
  83. start_date = start_date ? new Date(start_date) : new Date(now - (100 * oneDay)); // default 100 days ago
  84. end_date = end_date ? new Date(end_date) : now;
  85. const randomTime = random_number(x, start_date.getTime(), end_date.getTime());
  86. return new Date(randomTime);
  87. });
  88. config.addFilter('random_date_ago', function (x, days_ago = 100) {
  89. const today = new Date();
  90. const randomDays = random_number(x, 0, days_ago);
  91. const randomDate = new Date(today.getTime() - randomDays * 24 * 60 * 60 * 1000);
  92. return randomDate;
  93. });
  94. config.addFilter('format_number', function (value) {
  95. return value.toString().split('').reverse().join('').match(/.{1,3}/g).join(',').split('').reverse().join('');
  96. });
  97. config.addFilter('date_to_string', function (date) {
  98. return new Date(date).toDateString();
  99. });
  100. const tags = ["capture_global", "endcapture_global", "highlight", "endhighlight"]
  101. tags.forEach((tag) => {
  102. config.addLiquidTag(tag, (liquidEngine) => {
  103. return {
  104. parse: function (tagToken, remainingTokens) {
  105. this.str = tagToken.args; // myVar or "alice"
  106. },
  107. render: async function (scope, hash) {
  108. // Resolve variables
  109. var str = await this.liquid.evalValue(this.str, scope); // "alice"
  110. // Do the uppercasing
  111. return str
  112. }
  113. };
  114. });
  115. });
  116. return {
  117. dir: {
  118. input: "pages",
  119. output: "_site",
  120. includes: "_includes",
  121. layouts: "_layouts",
  122. data: "_data",
  123. }
  124. }
  125. };