Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/iliggio/grip into export-…
Browse files Browse the repository at this point in the history
…option

Conflicts:
	README.md
	grip/command.py
	grip/renderer.py
  • Loading branch information
joeyespo committed Sep 21, 2013
2 parents d8775cf + 1955831 commit 47dccfb
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 3 deletions.
8 changes: 8 additions & 0 deletions README.md
Expand Up @@ -57,6 +57,14 @@ $ grip AUTHORS.md
Alternatively, you could just run `grip` and visit [localhost:5000/AUTHORS.md][AUTHORS.md]
since grip supports relative URLs.

Or you can even export the file to a monolithic html:

```bash
$ grip --export CHANGES.md
```

will give you a monolithic Html with all stylesheets included

GitHub-Flavored Markdown is also supported:

```bash
Expand Down
12 changes: 12 additions & 0 deletions grip/command.py
Expand Up @@ -20,12 +20,15 @@
--render-offline Render offline instead of via GitHub markdown API
--user=<username> A GitHub username for API authentication
--pass=<password> A GitHub password for API authentication
--export Exports to a given <path>.html if path is a filename, or README.html
otherwise
"""

import sys
from path_and_address import resolve, split_address
from docopt import docopt
from .server import serve
from .exporter import write_html
from . import __version__


Expand All @@ -45,6 +48,15 @@ def main(argv=None):
path, address = resolve(args['<path>'], args['<address>'])
host, port = split_address(address)

if args['--export']:
try:
write_html(path)
return 0
except Exception as e:
print("Error: ", e)
return 1


# Validate address
if address and not host and not port:
print 'Error: Invalid address', repr(address)
Expand Down
43 changes: 43 additions & 0 deletions grip/exporter.py
@@ -0,0 +1,43 @@
import default_config as dc
import os
from server import _get_styles
from urllib2 import urlopen
from renderer import render_page
from server import _find_file, _read_file
from flask import safe_join

vars_dc = [var for var in dir(dc) if not var.startswith('__')]
settings = {var: getattr(dc, var) for var in vars_dc}
try:
import config as cc
vars_cc = [var for var in dir(cc) if not var.startswith('__')]
settings.update({var: getattr(cc, var) for var in vars_cc})
except ImportError:
pass
''' Exports readme files to a monolithic HTML '''

def write_html(path=None):
"""Exports a Html file
Arguments:
- `type`:
- `fname`:
"""
style_urls = _get_styles(settings['STYLE_URL_SOURCE'],
settings['STYLE_URL_RE'])

style_url_contents = [urlopen(css).read().decode('utf-8')
for css in style_urls]

if not path or os.path.isdir(path):
fname_in = _find_file(path)
text = _read_file(fname_in)
outname = os.path.splitext(fname_in)[0]+".html"
else:
text = _read_file(path)
outname = os.path.splitext(path)[0]+".html"
page = render_page(text=text,style_url_contents=style_url_contents)

with open(outname, "w") as f:
f.write(page.encode('utf-8'))

11 changes: 8 additions & 3 deletions grip/renderer.py
Expand Up @@ -6,7 +6,6 @@

# Get jinja templates
env = Environment(loader=PackageLoader('grip', 'templates'))
index_template = env.get_template('index.html')


def render_content(text, gfm=False, context=None, render_offline=False,
Expand All @@ -18,11 +17,17 @@ def render_content(text, gfm=False, context=None, render_offline=False,


def render_page(text, filename=None, gfm=False, context=None, render_offline=False,
username=None, password=None, style_urls=[]):
username=None, password=None, style_urls=[], style_url_contents=None):
"""Renders the specified markup text to an HTML page."""
if style_url_contents:
index_template = env.get_template('index_export.html')
else:
index_template = env.get_template('index.html')

content = render_content(text, gfm, context, render_offline, username, password)
return index_template.render(content=content, filename=filename,
style_urls=style_urls)
style_urls=style_urls,
style_url_contents=style_url_contents)

def render_image(image_data, content_type):
"""Renders the specified image data with the given Content-Type."""
Expand Down
30 changes: 30 additions & 0 deletions grip/templates/index_export.html
@@ -0,0 +1,30 @@
{% extends "base.html" %}

{% block title %}Grip{% if filename %} - {% endif %}{{ filename or '' }}{% endblock %}

{% block styles %}
<style>
{% for style_url_content in style_url_contents %}
{{style_url_content|safe}}
{% endfor %}

</style>
<style>
.previewPage {
margin: 64px auto;
width: 920px;
}
</style>
{% endblock %}

{% block page %}
<div class="previewPage">
<div id="readme" class="announce md">
<article class="markdown-body entry-content">
{{ content|safe }}
</article>
</div>
</div>

<div>&nbsp;</div>
{% endblock %}

0 comments on commit 47dccfb

Please sign in to comment.