From 30b122f57c1f407b64cfe0678b3eec0424aa51ec Mon Sep 17 00:00:00 2001 From: Florian Michaut Date: Thu, 21 Nov 2024 16:00:52 +0100 Subject: [PATCH 1/4] fix(): use esm import since upgrade to V3 --- src/_data/global.js | 2 +- src/_data/helpers.js | 2 +- src/_data/styleguide.js | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/_data/global.js b/src/_data/global.js index 683a0a3..5852884 100644 --- a/src/_data/global.js +++ b/src/_data/global.js @@ -1,4 +1,4 @@ -module.exports = { +export default { random() { const segment = () => { return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); diff --git a/src/_data/helpers.js b/src/_data/helpers.js index 9ae9b78..c1a8429 100644 --- a/src/_data/helpers.js +++ b/src/_data/helpers.js @@ -1,4 +1,4 @@ -module.exports = { +export default { getNextHeadingLevel(currentLevel) { return parseInt(currentLevel, 10) + 1; }, diff --git a/src/_data/styleguide.js b/src/_data/styleguide.js index 4969bec..2a5e996 100644 --- a/src/_data/styleguide.js +++ b/src/_data/styleguide.js @@ -1,6 +1,6 @@ -const tokens = require('./tokens.json'); +import tokens from './tokens.json' with { type: "json" }; -module.exports = { +export default { colors() { let response = []; From f69296f1ad3bc48b0ca03aa4ae0c6e0dc716a4cb Mon Sep 17 00:00:00 2001 From: Florian Michaut Date: Thu, 21 Nov 2024 16:01:10 +0100 Subject: [PATCH 2/4] fix(): use description for seo purpose --- src/_includes/partials/global/meta-info.njk | 12 ++++++------ src/index.md | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/_includes/partials/global/meta-info.njk b/src/_includes/partials/global/meta-info.njk index 1742f0a..b0e172c 100644 --- a/src/_includes/partials/global/meta-info.njk +++ b/src/_includes/partials/global/meta-info.njk @@ -7,8 +7,8 @@ {% set pageTitle = metaTitle %} {% endif %} -{% if metaDesc %} - {% set pageDesc = metaDesc %} +{% if description %} + {% set pageDesc = description %} {% endif %} {{ pageTitle }} @@ -24,10 +24,10 @@ {% endif %} -{% if metaDesc %} - - - +{% if description %} + + + {% endif %} {% if socialImage %} diff --git a/src/index.md b/src/index.md index 196b93d..36a5a28 100644 --- a/src/index.md +++ b/src/index.md @@ -5,5 +5,5 @@ brandHeading: La Coopérative d'Entrepreneur·es spécialisée dans le numériqu newsHeading: Actualité & Évenements customersHeading: Ils nous font confiance partnersHeading: Nos partenaires -metaDesc: 'Astrolabe CAE est une coopérative d Entrepreneur·es (scop) spécialisée dans l accompagnement au développement de projets autour des métiers du numérique. L entrepreneuriat (entrepreneur, entrepreneure, entrepreneuse, indépendant, indépendante, freelance, createur, créatrice) sans prise de tête, vous développez votre projet, vous gérez vos clients et nous faisons le reste et le tout dans un cadre coopératif (SCOP, ESS).' +description: 'Astrolabe CAE est une coopérative d Entrepreneur·es (scop) spécialisée dans l accompagnement au développement de projets autour des métiers du numérique. L entrepreneuriat (entrepreneur, entrepreneure, entrepreneuse, indépendant, indépendante, freelance, createur, créatrice) sans prise de tête, vous développez votre projet, vous gérez vos clients et nous faisons le reste et le tout dans un cadre coopératif (SCOP, ESS).' --- From a0983633e298cac5b50e75af1aa1cc2f53a46029 Mon Sep 17 00:00:00 2001 From: Florian Michaut Date: Thu, 21 Nov 2024 16:03:38 +0100 Subject: [PATCH 3/4] fix(rss): add posts with both types event + news as feed items --- src/feed.njk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/feed.njk b/src/feed.njk index ff3677f..b4ef51e 100644 --- a/src/feed.njk +++ b/src/feed.njk @@ -19,7 +19,7 @@ {{ metadata.description }} {{ metadata.language or page.lang }} - {%- for post in collections.news %} + {%- for post in collections.posts %} {%- set absolutePostUrl = post.url | htmlBaseUrl(metadata.base) %} {{ post.data.title }} From 54ab6b7e7347abdd77fa07576b577ab7f1301a99 Mon Sep 17 00:00:00 2001 From: Florian Michaut Date: Fri, 22 Nov 2024 16:58:33 +0100 Subject: [PATCH 4/4] fix(esm): only use esm + temp fix for importing json files --- .eleventy.js | 99 +++++++++++++++------------- package.json | 1 + src/_data/styleguide.js | 7 +- src/filters/date-filter.js | 23 +++++-- src/filters/markdown-filter.js | 10 +-- src/filters/w3-date-filter.js | 4 +- src/transforms/html-min-transform.js | 6 +- src/transforms/parse-transform.js | 27 ++++---- src/utils/minify.js | 4 +- 9 files changed, 106 insertions(+), 75 deletions(-) diff --git a/.eleventy.js b/.eleventy.js index 95ccb7f..5f136f8 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -1,27 +1,31 @@ -const rssPlugin = require('@11ty/eleventy-plugin-rss'); -const syntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight'); -const fs = require('fs'); -const util = require('util') +import rssPlugin from '@11ty/eleventy-plugin-rss'; +import syntaxHighlight from '@11ty/eleventy-plugin-syntaxhighlight'; +import fs from 'fs'; +import util from 'util'; // Import filters -const dateFilter = require('./src/filters/date-filter.js'); -const markdownFilter = require('./src/filters/markdown-filter.js'); -const w3DateFilter = require('./src/filters/w3-date-filter.js'); +import dateFilter from './src/filters/date-filter.js'; +import markdownFilter from './src/filters/markdown-filter.js'; +import w3DateFilter from './src/filters/w3-date-filter.js'; // Import transforms -const htmlMinTransform = require('./src/transforms/html-min-transform.js'); -const parseTransform = require('./src/transforms/parse-transform.js'); +import htmlMinTransform from './src/transforms/html-min-transform.js'; +import parseTransform from './src/transforms/parse-transform.js'; // Import data files +import {createRequire} from 'node:module'; +const require = createRequire(import.meta.url); +// need this because of issue when using ESM : https://github.com/11ty/eleventy-dependency-tree-esm/issues/2 +// This will get soon resolved const site = require('./src/_data/site.json'); -module.exports = function(config) { +export default function(config) { // Filters config.addFilter('dateFilter', dateFilter); config.addFilter('markdownFilter', markdownFilter); config.addFilter('w3DateFilter', w3DateFilter); config.addFilter('dump', obj => { - return util.inspect(obj) + return util.inspect(obj); }); // Layout aliases @@ -48,11 +52,9 @@ module.exports = function(config) { const livePosts = post => post.date <= now && !post.data.draft; const newsPosts = post => post.data.type === 'news'; const eventPosts = post => post.data.type === 'event'; - + config.addCollection('posts', collection => { - return [ - ...collection.getFilteredByGlob('./src/posts/*.md') - ].reverse(); + return [...collection.getFilteredByGlob('./src/posts/*.md')].reverse(); }); config.addCollection('news', collection => { return [ @@ -70,56 +72,59 @@ module.exports = function(config) { .slice(0, site.maxNewsPerPage); }); config.addCollection('members', collection => { - return [...collection.getFilteredByGlob("./src/members/*.md")]; + return [...collection.getFilteredByGlob('./src/members/*.md')]; }); config.addCollection('profiles', collection => { - return [...collection.getFilteredByGlob("./src/members/*.md")] - .reverse() - .slice(0, site.maxProfilePreview) - ; + return [...collection.getFilteredByGlob('./src/members/*.md')] + .reverse() + .slice(0, site.maxProfilePreview); }); - config.addCollection("tagsList", function(collectionApi) { + config.addCollection('tagsList', function(collectionApi) { const tagsList = new Set(); - collectionApi.getAll().map( item => { - if (item.data.tags) { // handle pages that don't have tags - item.data.tags.map( tag => tagsList.add(tag)) - } + collectionApi.getAll().map(item => { + if (item.data.tags) { + // handle pages that don't have tags + item.data.tags.map(tag => tagsList.add(tag)); + } }); return tagsList; }); - config.addCollection("skillsList", function(collectionApi) { + config.addCollection('skillsList', function(collectionApi) { const skillsList = new Set(); - collectionApi.getFilteredByGlob("./src/members/*.md").map( item => { - if (item.data.tags) { // handle pages that don't have skills - item.data.tags.map( skill => { // exclude non related tags - if (['post', 'news', 'event'].indexOf(skill) == -1) { - skillsList.add(skill) - } - }) - } + collectionApi.getFilteredByGlob('./src/members/*.md').map(item => { + if (item.data.tags) { + // handle pages that don't have skills + item.data.tags.map(skill => { + // exclude non related tags + if (['post', 'news', 'event'].indexOf(skill) == -1) { + skillsList.add(skill); + } + }); + } }); return skillsList; }); - config.addCollection("membersLocations", function(collectionApi) { - return collectionApi.getFilteredByGlob("./src/members/*.md") + config.addCollection('membersLocations', function(collectionApi) { + return collectionApi + .getFilteredByGlob('./src/members/*.md') .filter(item => typeof item.data.location !== 'undefined') - .map( member => { + .map(member => { return { name: member.data.name, url: member.data.url, - location: member.data.location, + location: member.data.location }; - }); + }); }); config.addCollection('customers', collection => { - return [...collection.getFilteredByGlob("./src/customers/*.md")] - .reverse() - .slice(0, site.maxCustomerPerPage); + return [...collection.getFilteredByGlob('./src/customers/*.md')] + .reverse() + .slice(0, site.maxCustomerPerPage); }); config.addCollection('partners', collection => { - return [...collection.getFilteredByGlob("./src/partners/*.md")] - .reverse() - .slice(0, site.maxPartnerPerPage); + return [...collection.getFilteredByGlob('./src/partners/*.md')] + .reverse() + .slice(0, site.maxPartnerPerPage); }); // Plugins @@ -146,6 +151,6 @@ module.exports = function(config) { input: 'src', output: 'dist' }, - passthroughFileCopy: true, + passthroughFileCopy: true }; -}; +} diff --git a/package.json b/package.json index 75bbcd1..6259c7d 100755 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.1.0", "description": "Site web de la coopérative Astrolabe CAE", "main": "index.js", + "type": "module", "dependencies": { "@11ty/eleventy": "^3.0.0", "@11ty/eleventy-plugin-rss": "^2.0.2", diff --git a/src/_data/styleguide.js b/src/_data/styleguide.js index 2a5e996..baa36b3 100644 --- a/src/_data/styleguide.js +++ b/src/_data/styleguide.js @@ -1,4 +1,9 @@ -import tokens from './tokens.json' with { type: "json" }; +import {createRequire} from 'node:module'; +const require = createRequire(import.meta.url); +// need this because of issue when using ESM : https://github.com/11ty/eleventy-dependency-tree-esm/issues/2 +// This will get soon resolved + +const tokens = require('./tokens.json'); export default { colors() { diff --git a/src/filters/date-filter.js b/src/filters/date-filter.js index fa06928..e36574e 100644 --- a/src/filters/date-filter.js +++ b/src/filters/date-filter.js @@ -5,13 +5,28 @@ const appendSuffix = n => { return n + (s[(v - 20) % 10] || s[v] || s[0]); }; -module.exports = function dateFilter(value) { +export default function dateFilter(value) { const dateObject = new Date(value); // const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; - const months = ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juill.', 'août', 'sept.', 'oct.', 'nov.', 'déc.']; + const months = [ + 'janv.', + 'févr.', + 'mars', + 'avr.', + 'mai', + 'juin', + 'juill.', + 'août', + 'sept.', + 'oct.', + 'nov.', + 'déc.' + ]; const dayWithSuffix = appendSuffix(dateObject.getDate()); // return `${dayWithSuffix} ${months[dateObject.getMonth()]} ${dateObject.getFullYear()}`; - return `${dateObject.getDate()} ${months[dateObject.getMonth()]} ${dateObject.getFullYear()}`; -}; + return `${dateObject.getDate()} ${ + months[dateObject.getMonth()] + } ${dateObject.getFullYear()}`; +} diff --git a/src/filters/markdown-filter.js b/src/filters/markdown-filter.js index 530c2f5..a1fabb4 100644 --- a/src/filters/markdown-filter.js +++ b/src/filters/markdown-filter.js @@ -1,9 +1,11 @@ -const markdownIt = require('markdown-it')({ +import markdownIt from 'markdown-it'; + +const m = markdownIt({ html: true, breaks: true, linkify: true }); -module.exports = function markdown(value) { - return markdownIt.render(value); -}; +export default function markdown(value) { + return m.render(value); +} diff --git a/src/filters/w3-date-filter.js b/src/filters/w3-date-filter.js index d31538d..a1da017 100644 --- a/src/filters/w3-date-filter.js +++ b/src/filters/w3-date-filter.js @@ -1,5 +1,5 @@ -module.exports = function w3cDate(value) { +export default function w3cDate(value) { const dateObject = new Date(value); return dateObject.toISOString(); -}; +} diff --git a/src/transforms/html-min-transform.js b/src/transforms/html-min-transform.js index 7d0c8f9..c91625e 100644 --- a/src/transforms/html-min-transform.js +++ b/src/transforms/html-min-transform.js @@ -1,6 +1,6 @@ -const htmlmin = require('html-minifier'); +import htmlmin from 'html-minifier'; -module.exports = function htmlMinTransform(value, outputPath) { +export default function htmlMinTransform(value, outputPath) { if (outputPath.indexOf('.html') > -1) { let minified = htmlmin.minify(value, { useShortDoctype: true, @@ -11,4 +11,4 @@ module.exports = function htmlMinTransform(value, outputPath) { return minified; } return value; -}; +} diff --git a/src/transforms/parse-transform.js b/src/transforms/parse-transform.js index befbb08..f301859 100644 --- a/src/transforms/parse-transform.js +++ b/src/transforms/parse-transform.js @@ -1,17 +1,20 @@ -const jsdom = require('@tbranyen/jsdom'); -const {JSDOM} = jsdom; -const minify = require('../utils/minify.js'); -const slugify = require('slugify'); -const getSize = require('image-size'); +import {JSDOM} from '@tbranyen/jsdom'; +import minify from '../utils/minify.js'; +import slugify from 'slugify'; +import getSize from 'image-size'; -module.exports = function(value, outputPath) { +export default function(value, outputPath) { if (outputPath.endsWith('.html')) { const DOM = new JSDOM(value, { resources: 'usable' }); const document = DOM.window.document; - const articleImages = [...document.querySelectorAll('main section:not(.process-cae, .presentation, .member) article img, .intro img')]; + const articleImages = [ + ...document.querySelectorAll( + 'main section:not(.process-cae, .presentation, .member) article img, .intro img' + ) + ]; const articleHeadings = [ ...document.querySelectorAll('main article h2, main article h3') ]; @@ -22,12 +25,12 @@ module.exports = function(value, outputPath) { image.setAttribute('loading', 'lazy'); const file = image.getAttribute('src'); - + if (file.indexOf('http') < 0) { const dimensions = getSize('src' + file); - + image.setAttribute('width', dimensions.width); - image.setAttribute('height', dimensions.height);; + image.setAttribute('height', dimensions.height); } // Replace p tags by figure tag for img @@ -44,7 +47,7 @@ module.exports = function(value, outputPath) { figCaption.innerHTML = image.getAttribute('title'); figure.appendChild(figCaption); } - + image.parentNode.replaceWith(figure); }); } @@ -86,4 +89,4 @@ module.exports = function(value, outputPath) { return '\r\n' + document.documentElement.outerHTML; } return value; -}; +} diff --git a/src/utils/minify.js b/src/utils/minify.js index dd80e24..74130bd 100644 --- a/src/utils/minify.js +++ b/src/utils/minify.js @@ -1,3 +1,3 @@ -module.exports = function minify(input) { +export default function minify(input) { return input.replace(/\s{2,}/g, '').replace(/\'/g, '"'); -}; +}