Security News
PyPI Introduces Digital Attestations to Strengthen Python Package Security
PyPI now supports digital attestations, enhancing security and trust by allowing package maintainers to verify the authenticity of Python packages.
Punch is a simple tool to generate HTML outputs from Mustache templates and content stored in either JSON or Markdown format.
Remember: Punch is not a blogging engine
(You can use Jekyll and other similar tools to power a blog)
Download and Install Node.js. http://nodejs.org/#download
Install npm
- curl http://npmjs.org/install.sh | sh
Finally, run npm install -g punch
Note: If you experience any issues in installing Punch on Windows, please read this guide.
Watch the Screencast - http://vimeo.com/40645795
Read the introductory blog post - http://laktek.com/2012/04/19/punch-a-fun-and-easy-way-to-build-modern-websites/
Here's a step by step guide on how to create a simple HTML site using Punch.
First of all we should create a new directory for our site. (mkdir awesome_site
)
Then, go inside the directory (cd awesome_site
) and run the command punch setup
.
This will create two directories to hold templates
and contents
. Also, it will add a config.json
file which contains the default configuration for Punch.
Say we want to have a page called about.html
, to give an overview of the company and details of the team members.
First we must create a corresponding template for the page inside templates
directory.
Here's how our about.mustache
template will look like.
```mustache
<!doctype html>
<head>
<meta charset="utf-8">
<title>{{title}}</title>
</head>
<body>
<h1>{{title}}</h1>
<p>{{{overview}}}</p>
<ul>
{{#team}}
<li><strong>{{name}}</strong> - {{bio}}</li>
{{/team}}
</ul>
</body>
</html>
```
Now inside contents
directory let's create a file called about.json
to hold the corresponding content.
We'll add the following content in about.json
.
```json
{
"title": "About Us",
"team": [
{
"name": "Pointy-Haired Boss",
"bio": "Incompetent Manager"
},
{
"name": "Wally",
"bio": "Senior Engineer"
},
{
"name": "Dilbert",
"bio": "Engineer"
}
]
}
```
We also have a lengthy company overview written in markdwon format. Instead of adding it to the about.json
file, we'll be keeping it seperately. For that we create a new directory named about
inside the contents
directory and save the markdown file there as overview.markdown
.
To generate and view the site, go back to the top-most directory (cd ../
) and run the command punch server
.
This will start the Punch dev server on port 9009
and store the generated pages in a directory named public
.
Finally, point your browser to http://localhost:9009/about.html
to see the generated about page.
Partial templates
You can specify reusable partial templates with Punch. Partial templates should be named with a leading underscore character (eg. _sidebar.mustache
). To render a partial in another template, do this:
{{> sidebar }}
Shared content
If you create a JSON file with the name shared.json
or a directory named shared
under contents
its content will be automatically available for all templates in your site.
Client-side Rendering
It's possible to use the Punch's renderer in the browser as well. All you need to do is include the latest mustache.js
and the Punch's renderer in your client-side script.
```html
<script type="text/javascript" src="assets/mustache.js"></script>
<script type="text/javascript" src="node_modules/punch/lib/renderers/mustache.js"></script>
```
Here's how you can use it in the browser:
```javascript
var renderer = new MustacheRenderer();
renderer.afterRender = function(output){
document.getElementById("client_block").innerHTML = output;
};
renderer.setTemplate('<p>{{content}}</p>');
renderer.setContent({"content": "test"});
renderer.setPartials({});
```
Since Punch's renderer is asynchronous, you can call setTemplate
, setContent
and setPartials
once you have the data (eg. after loading via AJAX). Rendering will happen when the renderer receives all 3 method calls.
Configuration options
```json
{
"template_dir": "templates", // directory to look for templates
"content_dir": "contents", // directory to look for contents
"output_dir": "public", // directory to save the generated output
"output_extension": "html", // default extension to use for output files
"shared_content": "shared", // name of the file/directory of shared content inside `contents`
// register new renderers or parsers (paths should be valid node.js require paths)
"renderers": {
"mustache": "./renderers/mustache"
},
"parsers": {
"markdown": "./parsers/markdown"
}
};
```
Publish
You can use punch publish
command to publish the generated site to a hosting facility you prefer. Publish to Amazon S3 is supported out of the box (a plugin API will be introduced for other publishing options).
To publish directly to S3, add the following settings to config.json
.
```json
"publish" : {
"s3" : {
"key" : "<api-key>"
, "secret" : "<secret-key>"
, "bucket" : "<bucket-name>"
}
}
```
Then from the root directory of your site, run punch publish s3
(or punch p
shortcut).
There's a sample available in /sample
, which will help you to understand the directory structure and configurations.
Follow this flow to fix bugs, implement new features for Punch:
git clone git@github.com:YOUR_USER/punch.git && cd punch
jasmine-node spec
git checkout -b feature
jasmine-node spec
git push -u YOUR_USER feature
To make updates to site or user guides, follow this flow:
git clone git@github.com:YOUR_USER/punch.git && cd punch
gh-pages
branch.git push -u YOUR_USER feature
FAQs
A fun and easy way to build modern websites
The npm package punch receives a total of 39 weekly downloads. As such, punch popularity was classified as not popular.
We found that punch demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now supports digital attestations, enhancing security and trust by allowing package maintainers to verify the authenticity of Python packages.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.