2019-11-14 09:32:09 +01:00
const makeItemLink = ( slug ) => ` # ${ slug } `
2019-11-11 23:51:52 +01:00
module . exports = function ( config ) {
// Add a filter using the Config API
2019-11-14 09:32:09 +01:00
config . addFilter ( 'linkTarget' , makeItemLink ) ;
config . addFilter ( 'linkIfExistsInCollection' , ( word , collection ) => {
2019-11-15 20:08:41 +01:00
const existingDefinition = collection . find ( item => item . data . title === word )
2019-11-14 09:32:09 +01:00
2019-11-15 20:08:41 +01:00
if ( existingDefinition ) {
return ` <a href= ${ makeItemLink ( existingDefinition . data . slug ) } > ${ word } </a> `
2019-11-14 09:32:09 +01:00
}
2019-11-12 15:08:40 +01:00
2019-11-14 09:32:09 +01:00
return word
} )
// just a debug filter to lazily inspect the content of anything in a template
2019-11-12 15:08:40 +01:00
config . addFilter ( 'postInspect' , function ( post ) {
console . log ( post ) ;
} )
config . addPassthroughCopy ( { '_site/css/' : 'assets/css/' } )
2019-11-11 23:51:52 +01:00
2019-11-15 23:24:12 +01:00
config . addShortcode ( "definitionFlag" , ( flag ) => {
const cleanText = new Map ( [
[ 'avoid' , {
class : 'avoid' ,
text : 'Avoid'
} ] ,
[ 'better-alternative' , {
class : 'better' ,
text : 'Better alternate'
} ] ,
[ 'tool' , {
class : 'tool' ,
text : ''
} ]
] )
if ( flag ) {
const info = cleanText . get ( flag . level )
const sep = flag . text && 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"></p>'
} ) ;
2019-11-15 22:19:37 +01:00
// 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
2019-11-11 23:51:52 +01:00
config . addCollection ( 'definitions' , collection => {
2019-11-15 22:19:37 +01:00
const allItems = collection
2019-11-11 23:51:52 +01:00
. getFilteredByGlob ( './11ty/definitions/*.md' )
. sort ( ( a , b ) => {
// `localeCompare()` is super cool: http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare
2019-11-15 21:21:06 +01:00
return a . data . title . toLowerCase ( ) . localeCompare ( b . data . title . toLowerCase ( ) )
2019-11-15 20:09:21 +01:00
} )
2019-11-15 22:19:37 +01:00
const split = {
notLetters : {
title : '#' ,
definitions : [ ]
} ,
aToE : {
title : 'A– E' ,
definitions : [ ]
} ,
fToL : {
title : 'F– L' ,
definitions : [ ]
} ,
mToS : {
title : 'M– S' ,
definitions : [ ]
} ,
tToZ : {
title : 'T– Z' ,
definitions : [ ]
}
}
allItems . forEach ( word => {
const { title } = word . data
const { notLetters , aToE , fToL , mToS , tToZ } = split
if ( /^[a-e]/gmi . test ( title ) ) {
return aToE . definitions . push ( word )
}
if ( /^[f-l]/i . test ( title ) ) {
return fToL . definitions . push ( word )
}
if ( /^[m-s]/i . test ( title ) ) {
return mToS . definitions . push ( word )
}
if ( /^[t-z]/i . test ( title ) ) {
return tToZ . definitions . push ( word )
}
// no reg ex as the fallback to avoid testing for emojis and numbers
notLetters . definitions . push ( word )
} )
return Object . keys ( split ) . map ( key => {
const { title , definitions } = split [ key ]
return { title , definitions }
} )
2019-11-11 23:51:52 +01:00
} )
2019-11-14 09:31:40 +01:00
config . addCollection ( 'definedWords' , collection => {
2019-11-15 20:09:21 +01:00
return collection
2019-11-12 01:17:21 +01:00
. getFilteredByGlob ( './11ty/definitions/*.md' )
. filter ( word => word . data . defined )
. sort ( ( a , b ) => {
// `localeCompare()` is super cool: http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare
2019-11-15 21:21:06 +01:00
return a . data . title . toLowerCase ( ) . localeCompare ( b . data . title . toLowerCase ( ) )
2019-11-15 20:09:21 +01:00
} )
2019-11-12 01:17:21 +01:00
} )
2019-11-11 23:51:52 +01:00
// You can return your Config object (optional).
return {
dir : {
2019-11-12 15:17:44 +01:00
input : '11ty' ,
output : 'dist'
} ,
templateFormats : [ 'njk' , 'md' ] ,
htmlTemplateEngine : 'njk' ,
markdownTemplateEngine : 'njk' ,
passthroughFileCopy : true
2019-11-11 23:51:52 +01:00
} ;
} ;