pug-slides-loader
Advanced tools
Comparing version 1.0.5 to 1.0.6
58
index.js
@@ -5,2 +5,11 @@ /* eslint-disable no-useless-concat */ | ||
function checkPathToBeIncluded(id, pathOrder) { | ||
const pathToInclude = pathOrder.find(path => { | ||
const str = `.*revealSlide${id}[^0-9].*`; | ||
const regex = new RegExp(str); | ||
return regex.test(path); | ||
}); | ||
return pathToInclude; | ||
} | ||
module.exports = function RevealSliderLoader(source) { | ||
@@ -12,2 +21,16 @@ let newSource = source; | ||
let slidesOrderTag = newSource.match(/<!--inject:order=.*,?-->\n/); | ||
let slidesCustomOrder = []; | ||
let slidesDefaultOrder = []; | ||
if (slidesOrderTag) { | ||
slidesOrderTag = slidesOrderTag[0]; | ||
slidesCustomOrder = slidesOrderTag.match(/(\d+,)+\d+|\d+/)[0].split(','); | ||
slidesCustomOrder = [...new Set(slidesCustomOrder)].map(num => +num); | ||
} | ||
const pathOrder = []; | ||
fs.readdir(fromPath, (err, files) => { | ||
@@ -21,6 +44,32 @@ const regex = /(import.*from.*;)(?!.*\1)/g; | ||
if (/slide.*\.pug$/.test(file)) { | ||
extendedImport += `import revealSlide${i} from '${path.resolve(fromPath, file).replace(/\\/g, '/')}';\n`; | ||
stringTemplatesImports += '${' + `revealSlide${i}` + '}\n'; | ||
const id = file.replace(/slide[^0-9]+(\d+)\.pug$/, "$1"); | ||
if(id){ | ||
if (!slidesCustomOrder.length) slidesDefaultOrder.push(+id); | ||
pathOrder.push(`import revealSlide${id} from '${path.resolve(fromPath, file).replace(/\\/g, '/')}';\n`) | ||
} | ||
} | ||
}); | ||
// Sort all imports | ||
if(slidesCustomOrder.length && !slidesDefaultOrder.length) { | ||
slidesCustomOrder.forEach(id => { | ||
const pathToInclude = checkPathToBeIncluded(id, pathOrder); | ||
if (pathToInclude) { | ||
extendedImport+=pathToInclude; | ||
stringTemplatesImports+= '${' + `revealSlide${id}` + '}\n'; | ||
} | ||
}); | ||
} else if (slidesDefaultOrder.length && !slidesCustomOrder.length) { | ||
slidesDefaultOrder.sort((a,b) => a - b); | ||
slidesDefaultOrder = [...new Set(slidesDefaultOrder)]; | ||
slidesDefaultOrder.forEach(id => { | ||
const pathToInclude = checkPathToBeIncluded(id, pathOrder); | ||
if (pathToInclude) { | ||
extendedImport+=pathToInclude; | ||
stringTemplatesImports+= '${' + `revealSlide${id}` + '}\n'; | ||
} | ||
}); | ||
} | ||
if (lastImport) { | ||
@@ -32,4 +81,7 @@ newSource = newSource.replace(lastImport, extendedImport); | ||
newSource = newSource.replace('<!--inject:slides-->', stringTemplatesImports); | ||
if (slidesCustomOrder.length) { | ||
newSource = newSource.replace(slidesOrderTag, ''); | ||
} | ||
callback(null, newSource); | ||
}); | ||
}; | ||
}; |
{ | ||
"name": "pug-slides-loader", | ||
"version": "1.0.5", | ||
"version": "1.0.6", | ||
"description": "Simple Webpack loader for Reveal.js slides (.pug files) to fast inject them in one place", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -42,2 +42,6 @@ ## Custom webpack loader to use with [these](https://github.com/xmelsky/reveal.js-boilerplates) boilerplates | ||
> note: all slides are sorted by default from lower number to highest | ||
> but you can specify custom order. | ||
``` | ||
@@ -50,2 +54,3 @@ import Reveal from 'reveal.js'; | ||
<!--inject:slides--> // HERE SLIDES WILL BE INJECTED | ||
<!--inject:order=15,18,11,0,2,3,4,5,6,7,8,21,12,--> // CUSTOM RENDER ORDER | ||
<section> | ||
@@ -52,0 +57,0 @@ <img data-src="images/logo.webp"> |
5036
71
61