Skip to content

Commit

Permalink
Parellel template processing
Browse files Browse the repository at this point in the history
  • Loading branch information
NotWoods committed Mar 27, 2020
1 parent 87ed8a0 commit feb5a1e
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 67 deletions.
8 changes: 6 additions & 2 deletions src/Plugins/Pagination.js
Original file line number Diff line number Diff line change
Expand Up @@ -239,8 +239,12 @@ class Pagination {
cloned.setPaginationData(override);

// TO DO subdirectory to links if the site doesn’t live at /
links.push("/" + (await cloned.getOutputLink()));
hrefs.push(await cloned.getOutputHref());
let [outputLink, outputHref] = await Promise.all([
cloned.getOutputLink(),
cloned.getOutputHref()
]);
links.push("/" + outputLink);
hrefs.push(outputHref);
}

// we loop twice to pass in the appropriate prev/next links (already full generated now)
Expand Down
139 changes: 74 additions & 65 deletions src/Template.js
Original file line number Diff line number Diff line change
Expand Up @@ -189,19 +189,19 @@ class Template extends TemplateContent {
let str = await super.render(data, templateData, true);
return str;
} else if (Array.isArray(data)) {
let arr = [];
for (let j = 0, k = data.length; j < k; j++) {
arr.push(await this.mapDataAsRenderedTemplates(data[j], templateData));
}
return arr;
return Promise.all(
data.map(item => this.mapDataAsRenderedTemplates(item, templateData))
);
} else if (lodashIsObject(data)) {
let obj = {};
for (let value in data) {
obj[value] = await this.mapDataAsRenderedTemplates(
data[value],
templateData
);
}
await Promise.all(
Object.keys(data).map(async value => {
obj[value] = await this.mapDataAsRenderedTemplates(
data[value],
templateData
);
})
);
return obj;
}

Expand Down Expand Up @@ -463,52 +463,59 @@ class Template extends TemplateContent {
this.paging = new Pagination(data);
this.paging.setTemplate(this);
let templates = await this.paging.getPageTemplates();
let pageNumber = 0;
for (let page of templates) {
let pageData = Object.assign({}, await page.getData());

// Issue #115
if (data.collections) {
pageData.collections = data.collections;
}
results = await Promise.all(
templates.map(async (page, pageNumber) => {
let pageData = Object.assign({}, await page.getData());

await page.augmentFinalData(pageData);

results.push({
template: page,
inputPath: this.inputPath,
fileSlug: this.fileSlugStr,
filePathStem: this.filePathStem,
data: pageData,
date: pageData.page.date,
pageNumber: pageNumber++,
outputPath: pageData.page.outputPath,
url: pageData.page.url,
set templateContent(content) {
this._templateContent = content;
},
get templateContent() {
if (this._templateContent === undefined) {
throw new TemplateContentPrematureUseError(
`Tried to use templateContent too early (${this.inputPath} page ${this.pageNumber})`
);
}
return this._templateContent;
// Issue #115
if (data.collections) {
pageData.collections = data.collections;
}
});
}

await page.augmentFinalData(pageData);

return {
template: page,
inputPath: this.inputPath,
fileSlug: this.fileSlugStr,
filePathStem: this.filePathStem,
data: pageData,
date: pageData.page.date,
pageNumber: pageNumber,
outputPath: pageData.page.outputPath,
url: pageData.page.url,
set templateContent(content) {
this._templateContent = content;
},
get templateContent() {
if (this._templateContent === undefined) {
throw new TemplateContentPrematureUseError(
`Tried to use templateContent too early (${this.inputPath} page ${this.pageNumber})`
);
}
return this._templateContent;
}
};
})
);
}

return results;
}

async getRenderedTemplates(data) {
let pages = await this.getTemplates(data);
for (let page of pages) {
let content = await page.template._getContent(page.outputPath, page.data);
await Promise.all(
pages.map(async page => {
let content = await page.template._getContent(
page.outputPath,
page.data
);

page.templateContent = content;
}
page.templateContent = content;
})
);
return pages;
}

Expand Down Expand Up @@ -577,13 +584,12 @@ class Template extends TemplateContent {
}

async writeMapEntry(mapEntry) {
let promises = [];
for (let page of mapEntry._pages) {
let content = await this.renderPageEntry(mapEntry, page);
promises.push(this._write(page.outputPath, content));
}

return Promise.all(promises);
await Promise.all(
mapEntry._pages.map(async page => {
let content = await this.renderPageEntry(mapEntry, page);
return this._write(page.outputPath, content);
})
);
}

// TODO is this still used by anything but tests?
Expand All @@ -594,7 +600,7 @@ class Template extends TemplateContent {
promises.push(this._write(tmpl.outputPath, tmpl.templateContent));
}

return Promise.all(promises);
await Promise.all(promises);
}

// TODO this but better
Expand Down Expand Up @@ -718,19 +724,22 @@ class Template extends TemplateContent {

async _testCompleteRender() {
let entries = await this.getTemplateMapEntries();
let contents = [];

for (let entry of entries) {
entry._pages = await entry.template.getTemplates(entry.data);
let nestedContent = await Promise.all(
entries.map(async entry => {
entry._pages = await entry.template.getTemplates(entry.data);
return Promise.all(
entry._pages.map(async page => {
page.templateContent = await entry.template.getTemplateMapContent(
page
);
return this.renderPageEntry(entry, page);
})
);
})
);

let page;
for (page of entry._pages) {
page.templateContent = await entry.template.getTemplateMapContent(page);
}
for (page of entry._pages) {
contents.push(await this.renderPageEntry(entry, page));
}
}
let contents = [].concat(...nestedContent);
return contents;
}
}
Expand Down

0 comments on commit feb5a1e

Please sign in to comment.