Comments (10)
You could do it in the render method
render: (locals, contents, templates, callback) ->
### *callback* with a ReadStream/Buffer or null if the contents should not be rendered
*locals* rendering context variables
*contents* is the full content tree
*templates* is a map of all templates as: {filename: templateInstance} ###
from wintersmith.
I'm pretty sure this will work for regular pages, but not things like the blog example's main page since it pulls in multiple articles from other markdown files.render
would only be called once for the main page and not for any of the articles, right?
from wintersmith.
Ah yes, you are correct.
The problem touches upon the same underlying issue as #45 – all view logic is done in templates. And in this case you would need a templating language capable of doing async calls to avoid preloading any async content you (maybe) want to access.
I'm thinking of introducing a view layer (like contents -> view -> template
) in wintersmith 2.0. But i'm not sure yet how to go about it without adding another layer of complexity :)
I think pre-rendering it in fromFile
is the best option right now.
from wintersmith.
The issue with fromFile
is that in preview mode, sometimes the page gets rendered before Pandoc is done with the content. Not sure if that's a bug.
from wintersmith.
That sounds really strange. Are you sure you are not calling any callbacks prematurely?
from wintersmith.
I don't think so, but I'm no async
expert. The call to pandoc is near the end of the waterfall
and I didn't make any other changes to the process:
PandocPage.fromFile = (filename, base, callback) ->
async.waterfall [
(callback) ->
fs.readFile path.join(base, filename), callback
(buffer, callback) ->
extractMetadata buffer.toString(), callback
(result, callback) =>
{markdown, metadata} = result
page = new this filename, markdown, metadata
callback null, page
(page, callback) =>
pandocRender page, callback
(page, callback) =>
callback null, page
], callback
from wintersmith.
The waterfall looks ok, try dropping the async queue in your pandocRender method and see if that helps.
I also did a quick test and wintersmith behaves well even if a plugin takes a long time to complete
module.exports = (ws, callback) ->
delay = 10000
page = ws.defaultPlugins.MarkdownPage
class Delay extends page
render: (args...) ->
setTimeout (=> page::render.apply(this, args)), delay
Delay.fromFile = (args...) ->
setTimeout (=> page.fromFile.apply(this, args)), delay
ws.registerContentPlugin 'pages', '**/*.*(markdown|mkd|md)', Delay
callback()
from wintersmith.
Unfortunately, without the queue node runs up against a limit for number of open files and crashes on larger sites. I'll try to use your example code above to see if queue is the culprit.
from wintersmith.
It looks like the issue must be a subtle problem with pandoc
or its wrapper. Everything works fine with another converter.
from wintersmith.
Ok, closing this
from wintersmith.
Related Issues (20)
- Feature Request: Adding custom markdown tags HOT 2
- Use plain HTML content instead of Markdown? HOT 2
- Beta release with Pug v2 support HOT 6
- Is wintesmith support on Windows? HOT 3
- Yarn installation is broken HOT 5
- Sitemap HOT 1
- Generating website with javascript HOT 1
- Website links in markdown containing numbers are not being parsed correctly HOT 2
- npm issues deprecated warning when installing wintersmith HOT 1
- No mention of AMP support
- update help output to reflect that some options cannot be set in the config file
- Wintersmith preview/build fails when upgrading from 2.4.1 to 2.5.0 HOT 1
- marked upgrade from 0.3.x to 0.5.x changed how markdown inside html is parsed HOT 1
- Error loading plugin './node_modules/wintersmith-sassify': Module did not self-register.
- marked must be >=0.6.1else github displays security error
- Any way to use chrome devtools for debugging purposes? HOT 1
- upgrade highlight.js to version 10
- [Question] Does Wintersmith support multi-languages ?
- Asset hashes or versioning
- [Question/Bug?] Archives shows '404 Not Found' after I changed config "baseUrl" HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from wintersmith.