mirror of
https://github.com/fooflington/selfdefined.git
synced 2025-04-19 16:19:16 +00:00
💅
This commit is contained in:
parent
c10fbdd82a
commit
98bac08e84
160
.eleventy.js
160
.eleventy.js
@ -1,80 +1,96 @@
|
|||||||
const makeItemLink = (slug) => `#${slug}`
|
const makeItemLink = (slug) => `#${slug}`;
|
||||||
const findExistingDefinition = (word, collection) => collection.find(item => item.data.title === word)
|
const findExistingDefinition = (word, collection) =>
|
||||||
|
collection.find((item) => item.data.title === word);
|
||||||
|
|
||||||
module.exports = function (config) {
|
module.exports = function(config) {
|
||||||
// Add a filter using the Config API
|
// Add a filter using the Config API
|
||||||
config.addFilter('linkTarget', makeItemLink);
|
config.addFilter('linkTarget', makeItemLink);
|
||||||
|
|
||||||
config.addFilter('linkIfExistsInCollection', (word, collection) => {
|
config.addFilter('linkIfExistsInCollection', (word, collection) => {
|
||||||
const existingDefinition = findExistingDefinition(word, collection)
|
const existingDefinition = findExistingDefinition(word, collection);
|
||||||
|
|
||||||
if (existingDefinition) {
|
if (existingDefinition) {
|
||||||
return `<a href="${makeItemLink(existingDefinition.data.slug)}">${word}</a>`
|
return `<a href="${makeItemLink(
|
||||||
|
existingDefinition.data.slug
|
||||||
|
)}">${word}</a>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return word
|
return word;
|
||||||
})
|
});
|
||||||
|
|
||||||
config.addFilter('linkSubTermIfDefined', (subTermData, collection) => {
|
config.addFilter('linkSubTermIfDefined', (subTermData, collection) => {
|
||||||
const existingDefinition = findExistingDefinition(subTermData.full_title, collection)
|
const existingDefinition = findExistingDefinition(
|
||||||
|
subTermData.full_title,
|
||||||
|
collection
|
||||||
|
);
|
||||||
|
|
||||||
if (existingDefinition) {
|
if (existingDefinition) {
|
||||||
return `<a href="${makeItemLink(existingDefinition.data.slug)}" aria-label="${subTermData.full_title}">${subTermData.text}</a>`
|
return `<a href="${makeItemLink(
|
||||||
|
existingDefinition.data.slug
|
||||||
|
)}" aria-label="${subTermData.full_title}">${subTermData.text}</a>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return subTermData.text
|
return subTermData.text;
|
||||||
})
|
});
|
||||||
|
|
||||||
// just a debug filter to lazily inspect the content of anything in a template
|
// just a debug filter to lazily inspect the content of anything in a template
|
||||||
config.addFilter('postInspect', function (post) {
|
config.addFilter('postInspect', function(post) {
|
||||||
console.log(post);
|
console.log(post);
|
||||||
})
|
});
|
||||||
|
|
||||||
config.addPassthroughCopy({'assets/css/': 'assets/css/'})
|
config.addPassthroughCopy({ 'assets/css/': 'assets/css/' });
|
||||||
|
|
||||||
config.addShortcode('definitionFlag', (flag) => {
|
config.addShortcode('definitionFlag', (flag) => {
|
||||||
const cleanText = new Map([
|
const cleanText = new Map([
|
||||||
['avoid', {
|
[
|
||||||
class: 'avoid',
|
'avoid',
|
||||||
text: 'Avoid'
|
{
|
||||||
}],
|
class: 'avoid',
|
||||||
['better-alternative', {
|
text: 'Avoid'
|
||||||
class: 'better',
|
}
|
||||||
text: 'Better alternate'
|
],
|
||||||
}],
|
[
|
||||||
['tool', {
|
'better-alternative',
|
||||||
class: 'tool',
|
{
|
||||||
text: ''
|
class: 'better',
|
||||||
}]
|
text: 'Better alternate'
|
||||||
])
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'tool',
|
||||||
|
{
|
||||||
|
class: 'tool',
|
||||||
|
text: ''
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
if (flag) {
|
if (flag) {
|
||||||
const info = cleanText.get(flag.level)
|
const info = cleanText.get(flag.level);
|
||||||
|
|
||||||
const sep = flag.text && info.text ? '—' : ''
|
const sep = flag.text && info.text ? '—' : '';
|
||||||
const text = flag.text ? [info.text, flag.text].join(sep) : info.text
|
const text = flag.text ? [info.text, flag.text].join(sep) : info.text;
|
||||||
|
|
||||||
return `<p class="word__signal word__signal--${info.class}">${text}</p>`
|
return `<p class="word__signal word__signal--${info.class}">${text}</p>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return '<p class="word__signal"></p>'
|
return '<p class="word__signal"></p>';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// NOTE (ovlb): this will not be remembered as the best code i’ve written. if anyone seeing this has a better solution then the following to achieve sub groups of the definitions: i am happy to get rid of it
|
// NOTE (ovlb): this will not be remembered as the best code i’ve written. if anyone seeing this has a better solution then the following to achieve sub groups of the definitions: i am happy to get rid of it
|
||||||
config.addCollection('tableOfContent', collection => {
|
config.addCollection('tableOfContent', (collection) => {
|
||||||
const allItems = collection
|
const allItems = collection
|
||||||
.getFilteredByGlob('./11ty/definitions/*.md')
|
.getFilteredByGlob('./11ty/definitions/*.md')
|
||||||
.filter(word => !word.data.skip_in_table_of_content)
|
.filter((word) => !word.data.skip_in_table_of_content)
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
const { title: firstTitle } = a.data
|
const { title: firstTitle } = a.data;
|
||||||
const { title: secondTitle } = b.data
|
const { title: secondTitle } = b.data;
|
||||||
const sortA = firstTitle.toLowerCase().replace(/^-/, '')
|
const sortA = firstTitle.toLowerCase().replace(/^-/, '');
|
||||||
const sortB = secondTitle.toLowerCase().replace(/^-/, '')
|
const sortB = secondTitle.toLowerCase().replace(/^-/, '');
|
||||||
|
|
||||||
// `localeCompare()` is super cool: http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare
|
// `localeCompare()` is super cool: http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare
|
||||||
return sortA.localeCompare(sortB)
|
return sortA.localeCompare(sortB);
|
||||||
})
|
});
|
||||||
|
|
||||||
const split = {
|
const split = {
|
||||||
notLetters: {
|
notLetters: {
|
||||||
@ -97,58 +113,60 @@ module.exports = function (config) {
|
|||||||
title: 'T–Z',
|
title: 'T–Z',
|
||||||
definitions: []
|
definitions: []
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
allItems.forEach(word => {
|
allItems.forEach((word) => {
|
||||||
const { title } = word.data
|
const { title } = word.data;
|
||||||
const { notLetters, aToE, fToL, mToS, tToZ } = split
|
const { notLetters, aToE, fToL, mToS, tToZ } = split;
|
||||||
const sortableTitle = title.replace(/^-/, '')
|
const sortableTitle = title.replace(/^-/, '');
|
||||||
|
|
||||||
if (/^[a-e]/gmi.test(sortableTitle)) {
|
if (/^[a-e]/gim.test(sortableTitle)) {
|
||||||
return aToE.definitions.push(word)
|
return aToE.definitions.push(word);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (/^[f-l]/i.test(sortableTitle)) {
|
if (/^[f-l]/i.test(sortableTitle)) {
|
||||||
return fToL.definitions.push(word)
|
return fToL.definitions.push(word);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (/^[m-s]/i.test(sortableTitle)) {
|
if (/^[m-s]/i.test(sortableTitle)) {
|
||||||
return mToS.definitions.push(word)
|
return mToS.definitions.push(word);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (/^[t-z]/i.test(sortableTitle)) {
|
if (/^[t-z]/i.test(sortableTitle)) {
|
||||||
return tToZ.definitions.push(word)
|
return tToZ.definitions.push(word);
|
||||||
}
|
}
|
||||||
|
|
||||||
// no reg ex as the fallback to avoid testing for emojis and numbers
|
// no reg ex as the fallback to avoid testing for emojis and numbers
|
||||||
notLetters.definitions.push(word)
|
notLetters.definitions.push(word);
|
||||||
})
|
});
|
||||||
|
|
||||||
return Object.keys(split).map(key => {
|
return Object.keys(split).map((key) => {
|
||||||
const { title, definitions } = split[key]
|
const { title, definitions } = split[key];
|
||||||
|
|
||||||
return { title, definitions }
|
return { title, definitions };
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
|
|
||||||
config.addCollection('definedWords', collection => {
|
config.addCollection('definedWords', (collection) => {
|
||||||
return collection
|
return collection
|
||||||
.getFilteredByGlob('./11ty/definitions/*.md')
|
.getFilteredByGlob('./11ty/definitions/*.md')
|
||||||
.filter(word => word.data.defined)
|
.filter((word) => word.data.defined)
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
// `localeCompare()` is super cool: http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare
|
// `localeCompare()` is super cool: http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare
|
||||||
return a.data.title.toLowerCase().localeCompare(b.data.title.toLowerCase())
|
return a.data.title
|
||||||
})
|
.toLowerCase()
|
||||||
})
|
.localeCompare(b.data.title.toLowerCase());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
const mdIt = require('markdown-it')({
|
const mdIt = require('markdown-it')({
|
||||||
html: true
|
html: true
|
||||||
})
|
});
|
||||||
const prism = require('markdown-it-prism')
|
const prism = require('markdown-it-prism');
|
||||||
const anchor = require('markdown-it-anchor')
|
const anchor = require('markdown-it-anchor');
|
||||||
|
|
||||||
mdIt.use(prism)
|
mdIt.use(prism);
|
||||||
mdIt.use(anchor)
|
mdIt.use(anchor);
|
||||||
|
|
||||||
config.setLibrary('md', mdIt);
|
config.setLibrary('md', mdIt);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user