Glorious.

This commit is contained in:
Manuel Ebert 2013-10-22 13:24:16 -10:00
parent 3d943591cb
commit 3ee749c26c
24 changed files with 886 additions and 1647 deletions

226
README.md
View file

@ -1,7 +1,7 @@
jrnl [![Build Status](https://travis-ci.org/maebert/jrnl.png?branch=master)](https://travis-ci.org/maebert/jrnl)
====
_For news on updates or to get help, follow [@maebert](https://twitter.com/maebert) or [submit an issue](https://github.com/maebert/jrnl/issues/new) on Github._
_For news on updates or to get help, [read the docs](http://maebert.github.io/jrnl), follow [@maebert](https://twitter.com/maebert) or [submit an issue](https://github.com/maebert/jrnl/issues/new) on Github._
*jrnl* is a simple journal application for your command line. Journals are stored as human readable plain text files - you can put them into a Dropbox folder for instant syncing and you can be assured that your journal will still be readable in 2050, when all your fancy iPad journal applications will long be forgotten.
@ -39,230 +39,6 @@ Or, if you want the option to encrypt your journal,
pip install jrnl[encrypted]
To install `pycrypto` as well (Note: this requires a `gcc` compiler. You can also [install PyCyrypto manually](https://www.dlitz.net/software/pycrypto/) first)). Alternatively, install _jrnl_ manually by cloning the repository:
git clone git://github.com/maebert/jrnl.git
cd jrnl
python setup.py install
The first time you run `jrnl` you will be asked where your journal file should be created and whether you wish to encrypt it.
Usage
-----
_jrnl_ has two modes: __composing__ and __viewing__.
### Viewing:
jrnl -n 10
will list you the ten latest entries,
jrnl -from "last year" -until march
everything that happened from the start of last year to the start of last march. If you only want to see the titles of your entries, use
jrnl -short
### Using Tags:
Keep track of people, projects or locations, by tagging them with an `@` in your entries:
jrnl Had a wonderful day on the @beach with @Tom and @Anna.
You can filter your journal entries just like this:
jrnl @pinkie @WorldDomination
Will print all entries in which either `@pinkie` or `@WorldDomination` occurred.
jrnl -n 5 -and @pineapple @lubricant
the last five entries containing both `@pineapple` __and__ `@lubricant`. You can change which symbols you'd like to use for tagging in the configuration.
> __Note:__ `jrnl @pinkie @WorldDomination` will switch to viewing mode because although _no_ command line arguments are given, all the input strings look like tags - _jrnl_ will assume you want to filter by tag.
### Composing:
Composing mode is entered by either starting `jrnl` without any arguments -- which will prompt you to write an entry or launch your editor -- or by just writing an entry on the prompt, such as
jrnl today at 3am: I just met Steve Buscemi in a bar! He looked funny.
### Smart timestamps:
Timestamps that work:
* at 6am
* yesterday
* last monday
* sunday at noon
* 2 march 2012
* 7 apr
* 5/20/1998 at 23:42
Import and export
-----------------
### Tag export
With
jrnl --tags
you'll get a list of all tags you used in your journal, sorted by most frequent. Tags occurring several times in the same entry are only counted as one.
### JSON export
Can do:
jrnl --export json
Why not create a beautiful [timeline](http://timeline.verite.co/) of your journal?
### Markdown export
Use:
jrnl --export markdown
or
jrnl --export md
Markdown is a simple markup language that is human readable and can be used to be rendered to other formats (html, pdf). This README for example is formatted in markdown and github makes it look nice.
### Text export
jrnl --export text
or
jrnl --export txt
Prettyprints your entire journal.
### Export to files
You can specify the output file of your exported journal using the `-o` argument:
jrnl --export md -o journal.md
The above command will generate a file named `journal.md`. If the `-o` argument is a directory, jrnl will export each entry into an individual file:
jrnl --export json -o my_entries/
The contents of `my_entries/` will then look like this:
my_entries/
|- 2013_06_03_a-beautiful-day.json
|- 2013_06_07_dinner-with-gabriel.json
|- ...
Encryption
----------
If you don't choose to encrypt your file when you run `jrnl` for the first time, you can encrypt your existing journal file or change its password using
jrnl --encrypt
If it is already encrypted, you will first be asked for the current password. You can then enter a new password and your plain journal will replaced by the encrypted file. Conversely,
jrnl --decrypt
will replace your encrypted journal file by a Journal in plain text. You can also specify a filename, ie. `jrnl --decrypt plain_text_copy.txt`, to leave your original file untouched.
Advanced usages
--------------
The first time launched, _jrnl_ will create a file configuration file at `~/.jrnl_config` or, if the `XDG_CONFIG_HOME` environment variable is set, `$XDG_CONFIG_HOME/jrnl`.
### .jrnl_config
The configuration file is a simple JSON file with the following options.
- `journals`: paths to your journal files
- `editor`: if set, executes this command to launch an external editor for writing your entries, e.g. `vim` or `subl -w` (note the `-w` flag to make sure _jrnl_ waits for Sublime Text to close the file before writing into the journal).
- `encrypt`: if `true`, encrypts your journal using AES.
- `tagsymbols`: Symbols to be interpreted as tags. (__See note below__)
- `default_hour` and `default_minute`: if you supply a date, such as `last thursday`, but no specific time, the entry will be created at this time
- `timeformat`: how to format the timestamps in your journal, see the [python docs](http://docs.python.org/library/time.html#time.strftime) for reference
- `highlight`: if `true`, tags will be highlighted in cyan.
- `linewrap`: controls the width of the output. Set to `0` or `false` if you don't want to wrap long lines.
> __Note on `tagsymbols`:__ Although it seems intuitive to use the `#` character for tags, there's a drawback: on most shells, this is interpreted as a meta-character starting a comment. This means that if you type
>
> jrnl Implemented endless scrolling on the #frontend of our website.
>
> your bash will chop off everything after the `#` before passing it to _jrnl_). To avoid this, wrap your input into quotation marks like this:
>
> jrnl "Implemented endless scrolling on the #frontend of our website."
>
> Or use the built-in prompt or an external editor to compose your entries.
### DayOne Integration
Using your DayOne journal instead of a flat text file is dead simple - instead of pointing to a text file, change your `.jrnl_conf` to point to your DayOne journal. This is a folder ending with `.dayone`, and it's located at
* `~/Library/Application Support/Day One/` by default
* `~/Dropbox/Apps/Day One/` if you're syncing with Dropbox and
* `~/Library/Mobile Documents/5U8NS4GX82~com~dayoneapp~dayone/Documents/` if you're syncing with iCloud.
Instead of all entries being in a single file, each entry will live in a separate `plist` file. You can also star entries when you write them:
jrnl -star yesterday: Lunch with @Arthur
### Multiple journal files
You can configure _jrnl_ to use with multiple journals (eg. `private` and `work`) by defining more journals in your `.jrnl_config`, for example:
"journals": {
"default": "~/journal.txt",
"work": "~/work.txt"
},
The `default` journal gets created the first time you start _jrnl_. Now you can access the `work` journal by using `jrnl work` instead of `jrnl`, eg.
jrnl work at 10am: Meeting with @Steve
jrnl work -n 3
will both use `~/work.txt`, while `jrnl -n 3` will display the last three entries from `~/journal.txt` (and so does `jrnl default -n 3`).
You can also override the default options for each individual journal. If you `.jrnl_conf` looks like this:
{
...
"encrypt": false
"journals": {
"default": "~/journal.txt",
"work": {
"journal": "~/work.txt",
"encrypt": true
},
"food": "~/my_recipes.txt",
}
Your `default` and your `food` journals won't be encrypted, however your `work` journal will! You can override all options that are present at the top level of `.jrnl_conf`, just make sure that at the very least you specify a `"journal": ...` key that points to the journal file of that journal.
### Manual decryption
Should you ever want to decrypt your journal manually, you can do so with any program that supports the AES algorithm. The key used for encryption is the SHA-256-hash of your password, and the IV (initialisation vector) is stored in the first 16 bytes of the encrypted file. So, to decrypt a journal file in python, run
import hashlib, Crypto.Cipher
key = hashlib.sha256(my_password).digest()
with open("my_journal.txt") as f:
cipher = f.read()
crypto = AES.new(key, AES.MODE_CBC, iv = cipher[:16])
plain = crypto.decrypt(cipher[16:])
Known Issues
------------
- The Windows shell prior to Windows 7 has issues with unicode encoding. If you want to use non-ascii characters, change the codepage with `chcp 1252` before using `jrnl` (Thanks to Yves Pouplard for solving this!)
- _jrnl_ relies on the `PyCrypto` package to encrypt journals, which has some known problems with installing on Windows and within virtual environments. If you have trouble installing __jrnl__, [install PyCyrypto manually](https://www.dlitz.net/software/pycrypto/) first.
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/maebert/jrnl/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

View file

@ -6,22 +6,22 @@
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title></title>
<title>jrnl- The Command Line Journal</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="{{ pathto('_static/css/main.css', 1) }}">
<link href='http://fonts.googleapis.com/css?family=Open+Sans:300,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="{{ pathto('_static/css/jrnl.css', 1) }}">
<script src="js/vendor/modernizr-2.6.2.min.js"></script>
<link rel="apple-touch-icon-precomposed" href="{{ pathto('_static/img/favicon-152.png', 1) }}">
<link rel="shortcut icon" href="{{ pathto('_static/img/favicon.ico', 1) }}">
</head>
<body id="landing">
<body id="landing" class="landing">
<div id="upper">
<a id="twitter" href="https://twitter.com/intent/tweet?text=Write+your+memoirs+on+the+command+line.+Like+a+boss.+%23jrnl&url=http%3A%2F%2Fmaebert.github.io%2Fjrnl&via=maebert">Tell your friends</a>
<div id="title">
<img id="logo" src="{{ pathto('_static/img/logo.png', 1) }}" title="jrnl"/>
<h1>Collect your thoughts and notes<br />without leaving the command line</h1>
<h1>Collect your thoughts and notes <br />without leaving the command line</h1>
</div>
<div id="prompt">
<div class="pleft" onlick="next(); return false;"><i class="icon left"></i></div>
@ -30,8 +30,9 @@
</div>
</div>
<div id="nav">
<a href="{{ pathto('installation') }}" title="Documentation">Documenation</a>
<a href="{{ pathto('overview') }}" title="Documentation">Documenation</a>
<a href="http://github.com/maebert/jrnl" title="View on Github">Fork me on GitHub</a>
<a id="twitter-nav" href="https://twitter.com/intent/tweet?text=Write+your+memoirs+on+the+command+line.+Like+a+boss.+%23jrnl&url=http%3A%2F%2Fmaebert.github.io%2Fjrnl&via=maebert">Tell your friends on twitter</a>
<a href="{{ pathto('installation') }}" title="Quick Start" class="cta">Download &#9654;</a>
</div>
<div id="lower">
@ -74,7 +75,12 @@
<p>Effortlessly access several journals for all parts of your life.</p>
</div>
</div>
<div class="footer">
Journal is made with love by {{ copyright }} and other fabulous people. If you need help, tweet to <a href="https://twitter.com/maebert" title="Follow @maebert on twitter">@maebert</a> or <a href="https://github.com/maebert/jrnl/issues/new" title="Open a new issue on Github">submit an issue</a> on Github.
</div>
</div>
<script src="{{ pathto('_static/js/landing.js', 1) }}"></script>
<script>

View file

@ -5,25 +5,25 @@
{%- block extrahead %}
{{ super() }}
{% if theme_touch_icon %}
<link rel="apple-touch-icon" href="{{ pathto('_static/' ~ theme_touch_icon, 1) }}" />
{% endif %}
<link media="only screen and (max-device-width: 480px)" href="{{
pathto('_static/small_flask.css', 1) }}" type= "text/css" rel="stylesheet" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9">
<link rel="apple-touch-icon-precomposed" href="{{ pathto('_static/img/favicon-152.png', 1) }}">
<link rel="shortcut icon" href="{{ pathto('_static/img/favicon.ico', 1) }}">
{% endblock %}
{%- block relbar1 %}{% endblock %}
{%- block relbar2 %}{% endblock %}
{%- block sidebar2 %}
<aside>
<img class="logo" src="{{ pathto('_static/img/logo.png', 1) }}" title="jrnl"/>
{{ super()}}
<a href="/" id="logolink" title="jrnl"><img class="logo" src="{{ pathto('_static/img/logo.png', 1) }}" title="jrnl"/></a>
<h2>Documentation</h2>
{{ toctree() }}
{%- include "searchbox.html" %}
</aside>
{% endblock %}
{%- block footer %}
<div class="footer">
&copy; Copyright {{ copyright }}.
Journal is made with love by {{ copyright }} and other fabulous people. If you need help, tweet to <a href="https://twitter.com/maebert" title="Follow @maebert on twitter">@maebert</a> or <a href="https://github.com/maebert/jrnl/issues/new" title="Open a new issue on Github">submit an issue</a> on Github.
</div>
{%- endblock %}
{% endif %}

View file

@ -158,8 +158,30 @@ table {
body {
font-family: "Open Sans", "Helvetica Neue", sans-serif;
font-weight: 300;
color: #333;
background: #f7f8f9;
}
body:not(.landing) {
padding-top: 40px;
}
body:not(.landing) h2 {
margin-top: 40px;
}
input {
background: transparent;
border: 1px solid #999;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
padding: 2px 5px;
color: #666;
font-family: "Open Sans";
font-weight: 300;
outline: none;
}
input:focus {
background: white;
}
div.related {
background: rgba(255, 200, 200, 0.2);
}
@ -184,6 +206,19 @@ a:active {
text-decoration: underline;
color: #f6c324;
}
.literal {
color: #47375d;
font-size: 1em;
background: #e8e2ee;
padding: 1px 2px;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
-webkit-box-shadow: inset 0px 0px 0px 1px #c0b2d2;
-moz-box-shadow: inset 0px 0px 0px 1px #c0b2d2;
-o-box-shadow: inset 0px 0px 0px 1px #c0b2d2;
box-shadow: inset 0px 0px 0px 1px #c0b2d2;
}
.note {
background: #8c72ac;
background-image: -moz-linear-gradient(top, #8c72ac 0%, #6e5691 100%);
@ -229,7 +264,7 @@ a:active {
background-image: url("../img/icons@2x.png");
}
}
.note:before.share {
.note:before.secure {
background-position: 0em 0em;
}
.note:before.future {
@ -241,8 +276,8 @@ a:active {
.note:before.nli {
background-position: -3em 0em;
}
.note:before.secure {
background-position: -4em 0em;
.note:before.share {
background-position: 0em -1em;
}
.note:before.sync {
background-position: 0em -1em;
@ -268,12 +303,35 @@ a:active {
.note:before.info {
background-position: -2em -2em;
}
.highlight-python {
.note .literal,
.note .highlight-note {
color: white;
background: #6b518a;
padding: 1px 3px;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
-webkit-box-shadow: inset 0px 0px 0px 1px #8c72ac;
-moz-box-shadow: inset 0px 0px 0px 1px #8c72ac;
-o-box-shadow: inset 0px 0px 0px 1px #8c72ac;
box-shadow: inset 0px 0px 0px 1px #8c72ac;
}
.note .highlight-note {
padding: 1px 10px;
}
.note .highlight-note pre:before {
content: "$ ";
color: #deaa09;
}
.highlight {
background: transparent !important;
}
.highlight-output {
background: #2f1e34;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
padding: 50px 20px 10px 20px;
padding: 1px 20px;
margin: 40px auto;
width: 500px;
-webkit-box-shadow: 0px 1px 8px #a0acb7;
@ -284,6 +342,55 @@ a:active {
color: #f7f8f9;
font-family: "Monaco", "Courier New";
font-size: 12pt;
background: #49374e;
}
.highlight-output #args {
color: #f6f7b9;
}
.highlight-output #output {
color: #9278b5;
}
.highlight-javascript {
background: #2f1e34;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
padding: 1px 20px;
margin: 40px auto;
width: 500px;
-webkit-box-shadow: 0px 1px 8px #a0acb7;
-moz-box-shadow: 0px 1px 8px #a0acb7;
-o-box-shadow: 0px 1px 8px #a0acb7;
box-shadow: 0px 1px 8px #a0acb7;
position: relative;
color: #f7f8f9;
font-family: "Monaco", "Courier New";
font-size: 12pt;
background: #49374e;
}
.highlight-javascript #args {
color: #f6f7b9;
}
.highlight-javascript #output {
color: #9278b5;
}
.highlight-python {
background: #2f1e34;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
padding: 1px 20px;
margin: 40px auto;
width: 500px;
-webkit-box-shadow: 0px 1px 8px #a0acb7;
-moz-box-shadow: 0px 1px 8px #a0acb7;
-o-box-shadow: 0px 1px 8px #a0acb7;
box-shadow: 0px 1px 8px #a0acb7;
position: relative;
color: #f7f8f9;
font-family: "Monaco", "Courier New";
font-size: 12pt;
padding: 50px 20px 10px 20px;
}
.highlight-python #args {
color: #f6f7b9;
@ -346,6 +453,9 @@ tt {
color: #47375d;
font-size: 1.2em;
}
ul li {
margin-bottom: 10px;
}
div.document {
max-width: 900px;
margin: 20px auto;
@ -355,10 +465,68 @@ div.documentwrapper {
margin-left: 240px;
padding: 0;
}
div.sphinxsidebar {
aside {
position: absolute;
width: 220px;
top: 0px;
color: #999;
}
aside .logo {
margin: 0 auto 20px auto;
display: block;
width: 90px;
height: 98px;
}
aside h2,
aside h3,
aside h3 a:link,
aside h3 a:visited {
color: #777;
}
aside a:link,
aside a:visited {
color: #999;
}
aside a:hover,
aside a:active {
color: #deaa09;
}
aside input[type=submit] {
display: none;
}
aside > ul {
margin: 0 4px;
padding: 0;
list-style: none;
}
aside > ul > li {
margin-bottom: 10px;
font-size: 18px;
color: #777;
}
aside > ul > li a:link,
aside > ul > li a:visited {
color: #777;
}
aside > ul > li ul {
margin: 10px 0 0 0;
padding-left: 20px;
font-size: 16px;
color: #999;
}
aside > ul > li ul a:link,
aside > ul > li ul a:visited {
color: #999;
}
div.footer {
font-size: .8em;
text-align: center;
margin: 40px 0;
color: #999;
}
div.footer a:link,
div.footer a:visited {
color: #555;
}
.icon {
background-image: url("../img/icons.png");
@ -373,7 +541,7 @@ div.sphinxsidebar {
background-image: url("../img/icons@2x.png");
}
}
.icon.share {
.icon.secure {
background-position: 0em 0em;
}
.icon.future {
@ -385,8 +553,8 @@ div.sphinxsidebar {
.icon.nli {
background-position: -3em 0em;
}
.icon.secure {
background-position: -4em 0em;
.icon.share {
background-position: 0em -1em;
}
.icon.sync {
background-position: 0em -1em;
@ -412,12 +580,12 @@ div.sphinxsidebar {
.icon.info {
background-position: -2em -2em;
}
.terminal {
.pre-block {
background: #2f1e34;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
padding: 50px 20px 10px 20px;
padding: 1px 20px;
margin: 40px auto;
width: 500px;
-webkit-box-shadow: 0px 1px 8px #a0acb7;
@ -429,6 +597,30 @@ div.sphinxsidebar {
font-family: "Monaco", "Courier New";
font-size: 12pt;
}
.pre-block #args {
color: #f6f7b9;
}
.pre-block #output {
color: #9278b5;
}
.terminal {
background: #2f1e34;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
padding: 1px 20px;
margin: 40px auto;
width: 500px;
-webkit-box-shadow: 0px 1px 8px #a0acb7;
-moz-box-shadow: 0px 1px 8px #a0acb7;
-o-box-shadow: 0px 1px 8px #a0acb7;
box-shadow: 0px 1px 8px #a0acb7;
position: relative;
color: #f7f8f9;
font-family: "Monaco", "Courier New";
font-size: 12pt;
padding: 50px 20px 10px 20px;
}
.terminal #args {
color: #f6f7b9;
}
@ -475,6 +667,20 @@ body#landing {
font-family: "Open Sans", "Helvetica Neue", sans-serif;
font-weight: 300;
}
body#landing #twitter {
display: block;
position: absolute;
top: 20px;
right: 20px;
border: 1px solid #47375d;
padding: 5px 10px 5px 30px;
color: #47375d;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
background: url(../img/twitter.png) left center no-repeat transparent;
background: red;
}
body#landing #title,
body#landing .row3,
body#landing .row4,

View file

@ -1,223 +0,0 @@
/* ==========================================================================
HTML5 Boilerplate styles - h5bp.com (generated via initializr.com)
========================================================================== */
html,
button,
input,
select,
textarea {
color: #222;
}
body {
font-size: 1em;
line-height: 1.4;
}
::-moz-selection {
background: #b3d4fc;
text-shadow: none;
}
::selection {
background: #b3d4fc;
text-shadow: none;
}
hr {
display: block;
height: 1px;
border: 0;
border-top: 1px solid #ccc;
margin: 1em 0;
padding: 0;
}
img {
vertical-align: middle;
}
fieldset {
border: 0;
margin: 0;
padding: 0;
}
textarea {
resize: vertical;
}
.chromeframe {
margin: 0.2em 0;
background: #ccc;
color: #000;
padding: 0.2em 0;
}
/* ==========================================================================
Author's custom styles
========================================================================== */
/* ==========================================================================
Media Queries
========================================================================== */
@media only screen and (min-width: 35em) {
}
@media print,
(-o-min-device-pixel-ratio: 5/4),
(-webkit-min-device-pixel-ratio: 1.25),
(min-resolution: 120dpi) {
}
/* ==========================================================================
Helper classes
========================================================================== */
.ir {
background-color: transparent;
border: 0;
overflow: hidden;
*text-indent: -9999px;
}
.ir:before {
content: "";
display: block;
width: 0;
height: 150%;
}
.hidden {
display: none !important;
visibility: hidden;
}
.visuallyhidden {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
.visuallyhidden.focusable:active,
.visuallyhidden.focusable:focus {
clip: auto;
height: auto;
margin: 0;
overflow: visible;
position: static;
width: auto;
}
.invisible {
visibility: hidden;
}
.clearfix:before,
.clearfix:after {
content: " ";
display: table;
}
.clearfix:after {
clear: both;
}
.clearfix {
*zoom: 1;
}
/* ==========================================================================
Print styles
========================================================================== */
@media print {
* {
background: transparent !important;
color: #000 !important; /* Black prints faster: h5bp.com/s */
box-shadow: none !important;
text-shadow: none !important;
}
a,
a:visited {
text-decoration: underline;
}
a[href]:after {
content: " (" attr(href) ")";
}
abbr[title]:after {
content: " (" attr(title) ")";
}
/*
* Don't show links for images, or javascript/internal links
*/
.ir a:after,
a[href^="javascript:"]:after,
a[href^="#"]:after {
content: "";
}
pre,
blockquote {
border: 1px solid #999;
page-break-inside: avoid;
}
thead {
display: table-header-group; /* h5bp.com/t */
}
tr,
img {
page-break-inside: avoid;
}
img {
max-width: 100% !important;
}
@page {
margin: 0.5cm;
}
p,
h2,
h3 {
orphans: 3;
widows: 3;
}
h2,
h3 {
page-break-after: avoid;
}
}

View file

@ -1,481 +0,0 @@
/*
* flasky.css_t
* ~~~~~~~~~~~~
*
* :copyright: Copyright 2010 by Armin Ronacher. Modifications by Kenneth Reitz.
* :license: Flask Design License, see LICENSE for details.
*/
{% set page_width = '940px' %}
{% set sidebar_width = '220px' %}
@import url("basic.css");
/* -- page layout ----------------------------------------------------------- */
body {
font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro';
font-size: 17px;
background-color: white;
color: #000;
margin: 0;
padding: 0;
}
div.document {
width: {{ page_width }};
margin: 30px auto 0 auto;
}
div.documentwrapper {
float: left;
width: 100%;
}
div.bodywrapper {
margin: 0 0 0 {{ sidebar_width }};
}
div.sphinxsidebar {
width: {{ sidebar_width }};
}
hr {
border: 1px solid #B1B4B6;
}
div.body {
background-color: #ffffff;
color: #3E4349;
padding: 0 30px 0 30px;
}
img.floatingflask {
padding: 0 0 10px 10px;
float: right;
}
div.footer {
width: {{ page_width }};
margin: 20px auto 30px auto;
font-size: 14px;
color: #888;
text-align: right;
}
div.footer a {
color: #888;
}
div.related {
display: none;
}
div.sphinxsidebar a {
color: #444;
text-decoration: none;
border-bottom: 1px dotted #999;
}
div.sphinxsidebar a:hover {
border-bottom: 1px solid #999;
}
div.sphinxsidebar {
font-size: 14px;
line-height: 1.5;
}
div.sphinxsidebarwrapper {
padding: 18px 10px;
}
div.sphinxsidebarwrapper p.logo {
padding: 0;
margin: -10px 0 0 -20px;
text-align: center;
}
div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: 'Garamond', 'Georgia', serif;
color: #444;
font-size: 24px;
font-weight: normal;
margin: 0 0 5px 0;
padding: 0;
}
div.sphinxsidebar h4 {
font-size: 20px;
}
div.sphinxsidebar h3 a {
color: #444;
}
div.sphinxsidebar p.logo a,
div.sphinxsidebar h3 a,
div.sphinxsidebar p.logo a:hover,
div.sphinxsidebar h3 a:hover {
border: none;
}
div.sphinxsidebar p {
color: #555;
margin: 10px 0;
}
div.sphinxsidebar ul {
margin: 10px 0;
padding: 0;
color: #000;
}
div.sphinxsidebar input {
border: 1px solid #ccc;
font-family: 'Georgia', serif;
font-size: 1em;
}
/* -- body styles ----------------------------------------------------------- */
a {
color: #004B6B;
text-decoration: underline;
}
a:hover {
color: #6D4100;
text-decoration: underline;
}
div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
font-family: 'Garamond', 'Georgia', serif;
font-weight: normal;
margin: 30px 0px 10px 0px;
padding: 0;
}
div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
div.body h2 { font-size: 180%; }
div.body h3 { font-size: 150%; }
div.body h4 { font-size: 130%; }
div.body h5 { font-size: 100%; }
div.body h6 { font-size: 100%; }
a.headerlink {
color: #ddd;
padding: 0 4px;
text-decoration: none;
}
a.headerlink:hover {
color: #444;
background: #eaeaea;
}
div.body p, div.body dd, div.body li {
line-height: 1.4em;
}
div.admonition {
background: #fafafa;
margin: 20px -30px;
padding: 10px 30px;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
}
div.admonition tt.xref, div.admonition a tt {
border-bottom: 1px solid #fafafa;
}
dd div.admonition {
margin-left: -60px;
padding-left: 60px;
}
div.admonition p.admonition-title {
font-family: 'Garamond', 'Georgia', serif;
font-weight: normal;
font-size: 24px;
margin: 0 0 10px 0;
padding: 0;
line-height: 1;
}
div.admonition p.last {
margin-bottom: 0;
}
div.highlight {
background-color: white;
}
dt:target, .highlight {
background: #FAF3E8;
}
div.note {
background-color: #eee;
border: 1px solid #ccc;
}
div.seealso {
background-color: #ffc;
border: 1px solid #ff6;
}
div.topic {
background-color: #eee;
}
p.admonition-title {
display: inline;
}
p.admonition-title:after {
content: ":";
}
pre, tt {
font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
font-size: 0.9em;
}
img.screenshot {
}
tt.descname, tt.descclassname {
font-size: 0.95em;
}
tt.descname {
padding-right: 0.08em;
}
img.screenshot {
-moz-box-shadow: 2px 2px 4px #eee;
-webkit-box-shadow: 2px 2px 4px #eee;
box-shadow: 2px 2px 4px #eee;
}
table.docutils {
border: 1px solid #888;
-moz-box-shadow: 2px 2px 4px #eee;
-webkit-box-shadow: 2px 2px 4px #eee;
box-shadow: 2px 2px 4px #eee;
}
table.docutils td, table.docutils th {
border: 1px solid #888;
padding: 0.25em 0.7em;
}
table.field-list, table.footnote {
border: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
table.footnote {
margin: 15px 0;
width: 100%;
border: 1px solid #eee;
background: #fdfdfd;
font-size: 0.9em;
}
table.footnote + table.footnote {
margin-top: -15px;
border-top: none;
}
table.field-list th {
padding: 0 0.8em 0 0;
}
table.field-list td {
padding: 0;
}
table.footnote td.label {
width: 0px;
padding: 0.3em 0 0.3em 0.5em;
}
table.footnote td {
padding: 0.3em 0.5em;
}
dl {
margin: 0;
padding: 0;
}
dl dd {
margin-left: 30px;
}
blockquote {
margin: 0 0 0 30px;
padding: 0;
}
ul, ol {
margin: 10px 0 10px 30px;
padding: 0;
}
pre {
background: #eee;
padding: 7px 30px;
margin: 15px -30px;
line-height: 1.3em;
}
dl pre, blockquote pre, li pre {
margin-left: -60px;
padding-left: 60px;
}
dl dl pre {
margin-left: -90px;
padding-left: 90px;
}
tt {
background-color: #ecf0f3;
color: #222;
/* padding: 1px 2px; */
}
tt.xref, a tt {
background-color: #FBFBFB;
border-bottom: 1px solid white;
}
a.reference {
text-decoration: none;
border-bottom: 1px dotted #004B6B;
}
a.reference:hover {
border-bottom: 1px solid #6D4100;
}
a.footnote-reference {
text-decoration: none;
font-size: 0.7em;
vertical-align: top;
border-bottom: 1px dotted #004B6B;
}
a.footnote-reference:hover {
border-bottom: 1px solid #6D4100;
}
a:hover tt {
background: #EEE;
}
@media screen and (max-width: 600px) {
div.sphinxsidebar {
display: none;
}
div.document {
width: 100%;
}
div.documentwrapper {
margin-left: 0;
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
}
div.bodywrapper {
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
margin-left: 0;
}
ul {
margin-left: 0;
}
.document {
width: auto;
}
.footer {
width: auto;
}
.bodywrapper {
margin: 0;
}
.footer {
width: auto;
}
.github {
display: none;
}
}
/* misc. */
.revsys-inline {
display: none!important;
}
div.highlight-python {
box-shadow: 0px 0px 15px #aaa;
margin: 20px 0px;
border-radius: 5px;
}
div.highlight-python:before {
content: " ";
background: #ccc;
height: 15px;
background-image: -ms-linear-gradient(top, #E5E5E5 0%, #BBBBBB 100%);
background-image: -moz-linear-gradient(top, #E5E5E5 0%, #BBBBBB 100%);
background-image: -o-linear-gradient(top, #E5E5E5 0%, #BBBBBB 100%);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #E5E5E5), color-stop(1, #BBBBBB));
background-image: -webkit-linear-gradient(top, #E5E5E5 0%, #BBBBBB 100%);
background-image: linear-gradient(to bottom, #E5E5E5 0%, #BBBBBB 100%);
box-shadow: inset 0px 1px 0px #f0f0f0, inset 0px -1px 0px #999;
border-radius: 5px 5px 0px 0px;
display: block;
padding: 5px 0px;
color: #555;
text-shadow: 0px 1px 0px #eee;
text-align: center;
}
div.highlight-python pre {
color: #f0ede6;
border-radius: 0px 0px 5px 5px;
box-shadow: inset 0px 4px 3px -3px #333;
margin: 0px;
background-color: #444;
padding: 10px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 B

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 661 B

BIN
docs/_themes/jrnl/static/img/twitter.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -14,9 +14,12 @@ var output = document.getElementById("output");
var right = document.getElementById("right");
var left = document.getElementById("left");
var current = 0
var timer = null;
var next = function() {
clearTimeout(timer);
reveal(++current % phrases.length);
setTimeout(next, 5000);
}
var prev = function() {
reveal(--current % phrases.length);
@ -86,3 +89,4 @@ var letter = function(text, element, next, timeout, index) {
var nx = function() { letter(text, element, next, timeout, ++index); }
setTimeout(nx, timeout);
}
setTimeout(next, 3000);

View file

@ -18,6 +18,22 @@
sodipodi:docname="landing.svg">
<defs
id="defs4">
<linearGradient
inkscape:collect="always"
id="linearGradient4380">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop4382" />
<stop
id="stop4396"
offset="0.47619048"
style="stop-color:#dedae5;stop-opacity:1" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="1"
id="stop4384" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4339">
@ -2523,6 +2539,15 @@
r="16"
gradientTransform="matrix(-1.9882057,0.35398273,-0.09041508,-0.50783204,4433.218,252.55239)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4380"
id="linearGradient4386"
x1="1576"
y1="656.36218"
x2="1597"
y2="656.36218"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
@ -2531,9 +2556,9 @@
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="3.7454562"
inkscape:cx="1457.6936"
inkscape:cy="541.40343"
inkscape:zoom="2.5546875"
inkscape:cx="1478.282"
inkscape:cy="464.73087"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
@ -2559,7 +2584,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@ -2567,6 +2592,28 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#604b7f;fill-opacity:1;stroke:none"
id="rect4398"
width="152"
height="152"
x="1698"
y="632.36218"
inkscape:export-filename="/Users/maebert/projects/jrnl/docs/_themes/jrnl/static/favicon-152.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:0.08695652;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="M 1727.5312 658.3125 C 1720.3085 658.3125 1714.4687 664.15843 1714.4688 671.375 L 1714.4688 745.34375 C 1714.4688 752.56032 1720.3085 758.4375 1727.5312 758.4375 L 1733.875 758.4375 L 1814.1562 758.4375 L 1820.4688 758.4375 C 1827.6914 758.4375 1833.5312 752.56032 1833.5312 745.34375 L 1833.5312 671.375 C 1833.5312 664.15843 1827.6914 658.3125 1820.4688 658.3125 L 1814.1562 658.3125 L 1733.875 658.3125 L 1727.5312 658.3125 z "
id="path4556" />
<path
style="fill:url(#linearGradient4386);fill-opacity:1;stroke:none"
d="m 1574,637.375 c -2.216,0 -4,1.784 -4,4 l 0,24 c 0,2.216 1.784,4 4,4 l 4,0 8,0 10,0 4,0 c 2.216,0 4,-1.784 4,-4 l 0,-24 c 0,-2.216 -1.784,-4 -4,-4 l -4,0 -10,0 -8,0 z"
id="path4378"
inkscape:connector-curvature="0"
inkscape:export-filename="/Users/maebert/projects/jrnl/docs/_themes/jrnl/static/img/favicon.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
id="path6705"
style="fill:url(#linearGradient6707);fill-opacity:1;stroke:none"
@ -3402,5 +3449,110 @@
style="fill:url(#radialGradient4345);fill-opacity:1;stroke:none"
d="M 1468.1875 514.375 C 1459.7336 514.80353 1453 521.81459 1453 530.375 C 1453 530.51322 1453.0278 530.64387 1453.0312 530.78125 C 1453.3347 522.49344 1459.9305 515.79355 1468.1875 515.375 C 1468.4602 515.3611 1468.7239 515.375 1469 515.375 C 1477.6698 515.375 1484.7054 522.26912 1484.9688 530.875 C 1484.974 530.7063 1485 530.54498 1485 530.375 C 1485 521.53845 1477.8366 514.375 1469 514.375 C 1468.7239 514.375 1468.4602 514.3611 1468.1875 514.375 z "
id="path4318" />
<path
id="path3549"
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#564371;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="m 1558.9773,638.22513 c 1.3129,0.22888 2.2955,1.35828 2.2955,2.74011 l 0,19.88473 c 0,1.38184 -0.9826,2.51123 -2.2955,2.74012 0.8053,-0.64365 1.3258,-1.62977 1.3258,-2.74012 l 0,-19.88473 c 0,-1.11034 -0.5205,-2.09646 -1.3258,-2.74011 z m -1.697,0 c 1.3129,0.22888 2.2955,1.35828 2.2955,2.74011 l 0,19.88473 c 0,1.38184 -0.9826,2.51123 -2.2955,2.74012 0.8054,-0.64365 1.3258,-1.62977 1.3258,-2.74012 l 0,-19.88473 c 0,-1.11034 -0.5204,-2.09646 -1.3258,-2.74011 z m -22.5606,0 c -0.8053,0.64365 -1.3257,1.62977 -1.3257,2.74011 l 0,19.88473 c 0,1.11035 0.5204,2.09647 1.3257,2.74012 -1.3129,-0.22889 -2.2955,-1.35828 -2.2955,-2.74012 l 0,-19.88473 c 0,-1.38183 0.9827,-2.51123 2.2955,-2.74011 z m -1.6969,0 c -0.8053,0.64365 -1.3258,1.62977 -1.3258,2.74011 l 0,19.88473 c 0,1.11035 0.5205,2.09647 1.3258,2.74012 -1.3129,-0.22889 -2.2955,-1.35828 -2.2955,-2.74012 l 0,-19.88473 c 0,-1.38183 0.9826,-2.51123 2.2955,-2.74011 z m 13.2197,-0.0454 2.6666,0 0,22.30693 1.8182,-1.45332 1.8182,1.45332 0,-22.30693 2.5455,0 c 1.5507,0 2.7878,1.23606 2.7878,2.78552 l 0,19.88474 c 0,1.54947 -1.2371,2.78553 -2.7878,2.78553 l -8.8485,0 0,-25.45579 z m -9.3334,0 8.6061,0 0,25.45579 -8.6061,0 c -1.5508,0 -2.7879,-1.23606 -2.7879,-2.78553 l 0,-19.88474 c 0,-1.54946 1.2371,-2.78552 2.7879,-2.78552 z m -3.3939,-0.72666 c -1.9412,0 -3.5152,1.57272 -3.5152,3.51218 l 0,19.88474 c 0,1.93947 1.5741,3.51219 3.5152,3.51219 l 1.6969,0 21.5758,0 1.697,0 c 1.9411,0 3.5151,-1.57272 3.5151,-3.51219 l 0,-19.88474 c 0,-1.93946 -1.5741,-3.51218 -3.5151,-3.51218 l -1.697,0 -21.5758,0 -1.6969,0 z"
inkscape:connector-curvature="0" />
<path
style="fill:#564371;fill-opacity:1;stroke:none"
d="m 1574,637.375 c -2.216,0 -4,1.784 -4,4 l 0,24 c 0,2.216 1.784,4 4,4 l 4,0 8,0 8,0 4,0 c 2.216,0 4,-1.784 4,-4 l 0,-24 c 0,-2.216 -1.784,-4 -4,-4 l -4,0 -8,0 -8,0 z m 4,1 8,0 8,0 c 0.9369,0 3,0.76625 3,3 l 0,24 c 0,2.23375 -2.0631,3 -3,3 l -8,0 -8,0 c -0.9369,0 -3,-0.76625 -3,-3 l 0,-24 c 0,-2.23375 2.0631,-3 3,-3 z m -2.7812,0.0937 c -0.7604,0.72729 -1.2188,1.76611 -1.2188,2.90625 l 0,24 c 0,1.14014 0.4584,2.17896 1.2188,2.90625 -1.1755,-0.2818 -2.2188,-1.20303 -2.2188,-2.90625 l 0,-24 c 0,-1.70322 1.0433,-2.62445 2.2188,-2.90625 z m 21.5624,0 c 1.1755,0.2818 2.2188,1.20303 2.2188,2.90625 l 0,24 c 0,1.70322 -1.0433,2.62445 -2.2188,2.90625 0.7604,-0.72729 1.2188,-1.76611 1.2188,-2.90625 l 0,-24 c 0,-1.14014 -0.4584,-2.17896 -1.2188,-2.90625 z m -23.625,0.0625 c -0.723,0.723 -1.1562,1.73575 -1.1562,2.84375 l 0,24 c 0,1.108 0.4332,2.12075 1.1562,2.84375 -1.3254,-0.44542 -2.1562,-1.84068 -2.1562,-2.8437 l 0,-24 c 0,-1.00302 0.8308,-2.39828 2.1562,-2.84375 z m 25.6876,0 c 1.3254,0.44547 2.1562,1.84073 2.1562,2.84375 l 0,24 c 0,1.00302 -0.8308,2.39828 -2.1562,2.84375 0.723,-0.723 1.1562,-1.73575 1.1562,-2.84375 l 0,-24 c 0,-1.108 -0.4332,-2.12075 -1.1562,-2.84375 z"
id="rect3567"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sccscccsccscccsscsccscsccsccccccccccccccccccccccccccccc"
inkscape:export-filename="/Users/maebert/projects/jrnl/docs/_themes/jrnl/static/img/favicon.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<rect
style="fill:#564371;fill-opacity:1;stroke:none"
id="rect4344"
width="1"
height="30"
x="1585"
y="638.36218"
rx="0"
ry="0"
inkscape:export-filename="/Users/maebert/projects/jrnl/docs/_themes/jrnl/static/img/favicon.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
id="rect4346"
style="fill:#564371;fill-opacity:1;stroke:none"
d="m 1589,638.36218 4,0 0,22 -2,-2 -2,2 z"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="/Users/maebert/projects/jrnl/docs/_themes/jrnl/static/img/favicon.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<g
id="g4400"
transform="matrix(0.90203745,0,0,0.90203745,1341.23,615.11586)"
style="fill:#ffffff;fill-opacity:0">
<path
inkscape:connector-curvature="0"
d="m 442.85017,55.231703 c 5.41544,0.944151 9.46875,5.602891 9.46875,11.302952 l 0,82.024465 c 0,5.70007 -4.05331,10.3588 -9.46875,11.30296 3.32198,-2.65505 5.46874,-6.72278 5.46874,-11.30296 l 0,-82.024465 c 0,-4.58017 -2.14676,-8.647906 -5.46874,-11.302952 z m -7,0 c 5.41544,0.944151 9.46875,5.602891 9.46875,11.302952 l 0,82.024465 c 0,5.70007 -4.05331,10.3588 -9.46875,11.30296 3.32197,-2.65505 5.46875,-6.72278 5.46875,-11.30296 l 0,-82.024465 c 0,-4.58017 -2.14678,-8.647906 -5.46875,-11.302952 z m -93.0625,0 c -3.32198,2.655046 -5.46875,6.722782 -5.46875,11.302952 l 0,82.024465 c 0,4.58018 2.14677,8.64791 5.46875,11.30296 -5.41545,-0.94416 -9.46875,-5.60289 -9.46875,-11.30296 l 0,-82.024465 c 0,-5.700061 4.0533,-10.358801 9.46875,-11.302952 z m -7,0 c -3.32198,2.655046 -5.46875,6.722782 -5.46875,11.302952 l 0,82.024465 c 0,4.58018 2.14677,8.64791 5.46875,11.30296 -5.41544,-0.94416 -9.46875,-5.60289 -9.46875,-11.30296 l 0,-82.024465 c 0,-5.700061 4.05331,-10.358801 9.46875,-11.302952 z m 54.53125,-0.187342 11,0 0,92.016029 7.5,-5.99494 7.5,5.99494 0,-92.016029 10.5,0 c 6.39694,0 11.49999,5.098754 11.49999,11.490294 l 0,82.024465 c 0,6.39155 -5.10305,11.49031 -11.49999,11.49031 l -36.5,0 0,-105.005069 z m -38.5,0 35.5,0 0,105.005059 -35.5,0 c -6.39694,0 -11.5,-5.09875 -11.5,-11.4903 l 0,-82.024465 c 0,-6.39154 5.10306,-11.490294 11.5,-11.490294 z m -14,-2.997468 c -8.00706,0 -14.5,6.487466 -14.5,14.487762 l 0,82.024465 c 0,8.0003 6.49295,14.48777 14.5,14.48777 l 7,0 89,0 6.99999,0 c 8.00706,0 14.50001,-6.48747 14.50001,-14.48777 l 0,-82.024465 c 0,-8.000296 -6.49295,-14.487762 -14.50001,-14.487762 l -6.99999,0 -89,0 -7,0 z"
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
id="path4402" />
<g
id="g4404"
style="fill:#ffffff;fill-opacity:0">
<path
inkscape:connector-curvature="0"
id="path4406"
d="m 420.43407,194.49011 c -1.19645,-0.0222 -2.19349,-0.1551 -2.99111,-0.39882 -0.77548,-0.24371 -1.39586,-0.58714 -1.86112,-1.03027 -0.46529,-0.46528 -0.79763,-1.03026 -0.99705,-1.69495 -0.17725,-0.68685 -0.26587,-1.46232 -0.26587,-2.32642 l 0,-12.54276 4.02138,-0.66469 0,12.44306 c -1e-5,0.48744 0.0332,0.89733 0.0997,1.22967 0.0886,0.33235 0.23262,0.62038 0.43204,0.8641 0.1994,0.22157 0.46527,0.39882 0.79763,0.53175 0.35449,0.11079 0.79762,0.19941 1.32938,0.26588 l -0.56499,3.32345"
style="font-size:35.61915969999999731px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:0;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Medium"
sodipodi:nodetypes="ccccscccccccc" />
<path
inkscape:connector-curvature="0"
id="path4408"
d="m 390.31891,177.23024 c 0.77547,-0.22155 1.78358,-0.43203 3.02435,-0.63145 1.24075,-0.19939 3.54748,-0.2991 5.05413,-0.29912 1.41798,2e-5 2.60336,0.19943 3.55609,0.59823 0.9527,0.37667 1.70602,0.9195 2.25994,1.62849 0.57605,0.68686 0.97486,1.5288 1.19644,2.52582 0.24371,0.97489 0.36557,2.04947 0.36558,3.22374 l 0,9.77095 -4.02137,0 0,-9.13949 c -1e-5,-0.93056 -0.0665,-1.71711 -0.1994,-2.35965 -0.11081,-0.66468 -0.3102,-1.19643 -0.59823,-1.59526 -0.26589,-0.42095 -0.64255,-0.72006 -1.12997,-0.89733 -0.4653,-0.19939 -1.04136,-0.29909 -1.7282,-0.29911 -0.5096,2e-5 -1.9744,0.0333 -2.5283,0.0997 -0.55392,0.0665 -0.96381,0.12188 -1.22968,0.16618 l 0,14.02495 -4.02137,0 0,-16.81665"
style="font-size:35.61915969999999731px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:0;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Medium"
sodipodi:nodetypes="ccccccccccccccccccc" />
<path
inkscape:connector-curvature="0"
id="path4410"
d="m 383.22281,180.28781 c -0.33236,-0.11077 -0.79764,-0.22155 -1.39586,-0.33234 -0.57607,-0.13293 -1.25183,-0.1994 -2.0273,-0.19941 -0.44314,1e-5 -0.91949,0.0443 -1.42908,0.13294 -0.48745,0.0886 -0.83087,0.16618 -1.03027,0.23264 l 0,13.92525 -4.02138,0 0,-16.55078 c 0.77547,-0.28801 1.73927,-0.55389 2.89141,-0.79762 1.17428,-0.26586 2.47042,-0.3988 3.88844,-0.39882 0.26587,2e-5 0.57605,0.0222 0.93055,0.0665 0.3545,0.0222 0.70901,0.0665 1.06352,0.13294 0.35449,0.0443 0.69791,0.1108 1.03026,0.19941 0.33234,0.0665 0.59821,0.13295 0.79763,0.1994 l -0.69792,3.38992"
style="font-size:35.61915969999999731px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:0;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Medium" />
<path
inkscape:connector-curvature="0"
id="path4412"
d="m 359.09221,194.21225 c -0.28804,-1e-5 -0.68685,-0.0332 -1.19644,-0.0997 -0.53175,-0.0443 -0.99703,-0.14403 -1.39585,-0.29911 l 0.53175,-3.29022 c 0.48745,0.1551 1.07458,0.23264 1.76143,0.23265 0.93057,-10e-6 1.58418,-0.27696 1.96083,-0.83086 0.37666,-0.53176 0.56499,-1.34046 0.56499,-2.42612 l 0,-10.45199 4.05,-0.675 -0.0286,11.19346 c -0.006,2.25993 -0.54285,3.93274 -1.62849,5.0184 -1.06351,1.08566 -2.60337,1.62849 -4.6196,1.6285"
style="font-size:35.61915969999999731px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:0;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Medium"
sodipodi:nodetypes="ccccccsccscc" />
</g>
</g>
<path
id="path4416"
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="m 1822.2871,661.17192 c 4.885,0.85166 8.5412,5.05402 8.5412,10.19569 l 0,73.98914 c 0,5.14168 -3.6562,9.34403 -8.5412,10.19569 2.9966,-2.39495 4.933,-6.0642 4.933,-10.19569 l 0,-73.98914 c 0,-4.13148 -1.9364,-7.80073 -4.933,-10.19569 z m -6.3142,0 c 4.8849,0.85166 8.5411,5.05402 8.5411,10.19569 l 0,73.98914 c 0,5.14168 -3.6562,9.34403 -8.5411,10.19569 2.9965,-2.39495 4.933,-6.0642 4.933,-10.19569 l 0,-73.98914 c 0,-4.13148 -1.9365,-7.80073 -4.933,-10.19569 z m -83.9458,0 c -2.9965,2.39496 -4.933,6.06421 -4.933,10.19569 l 0,73.98914 c 0,4.13149 1.9365,7.80074 4.933,10.19569 -4.8849,-0.85166 -8.5412,-5.05401 -8.5412,-10.19569 l 0,-73.98914 c 0,-5.14167 3.6563,-9.34403 8.5412,-10.19569 z m -6.3143,0 c -2.9965,2.39496 -4.933,6.06421 -4.933,10.19569 l 0,73.98914 c 0,4.13149 1.9365,7.80074 4.933,10.19569 -4.885,-0.85166 -8.5411,-5.05401 -8.5411,-10.19569 l 0,-73.98914 c 0,-5.14167 3.6561,-9.34403 8.5411,-10.19569 z m 49.1893,-0.16898 9.9223,0 0,83.0019 6.7653,-5.40766 6.7653,5.40766 0,-83.0019 9.4714,0 c 5.7702,0 10.3734,4.59926 10.3734,10.36467 l 0,73.98914 c 0,5.76542 -4.6032,10.36469 -10.3734,10.36469 l -32.9244,0 0,-94.7185 z m -34.7285,0 32.0224,0 0,94.71849 -32.0224,0 c -5.7702,0 -10.3734,-4.59926 -10.3734,-10.36468 l 0,-73.98914 c 0,-5.76541 4.6032,-10.36467 10.3734,-10.36467 z m -12.6285,-2.70383 c -7.2227,0 -13.0796,5.85193 -13.0796,13.0685 l 0,73.98914 c 0,7.21657 5.8569,13.06851 13.0796,13.06851 l 6.3143,0 80.2813,0 6.3143,0 c 7.2226,0 13.0795,-5.85194 13.0795,-13.06851 l 0,-73.98914 c 0,-7.21657 -5.8569,-13.0685 -13.0795,-13.0685 l -6.3143,0 -80.2813,0 -6.3143,0 z"
inkscape:connector-curvature="0" />
<image
y="496.24753"
x="1615.4082"
id="image3575"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEUAAAA1CAIAAACYzbG/AAAAA3NCSVQICAjb4U/gAAAEVUlEQVRo
ge2Zf0wbZRjHnyu9K3ClDoRB3a8qrCgjsImrxixmumFmYP4hYtyIskUsicVscWMdbJDpwlYXnLAw
DD8iIQZBRhaGbEZFJbhsWXFyZG44tgVBNigFykrL2it3r38wbYFNrrbnDtbPX2/fvO+T7+f63tNr
i92x2WEBIXrQAbyMz0fY+HyEjc9H2Cw0HzGXReNma0Pl1/qfqeGbo3wH8hBOPg2VTT3X+g+UfhAu
X8x3IA/hdN5aT5/X5KcLXwY4+kyM2+aFDCy8fuDzETY+H2Hj8/EelxormgfZ2WNP4PR8MAeTV3at
PdqH3+PSxNWW5EUS99yEMGvX++cuf7stOULkOvYwizd8xDH7W3Q0AJKQ9q7KvWmQ05EebqMBgJRK
AND99qEoEEvQ7LFHWTwvAQDBj4ZODRi5DIVLFdJHZORUOC9EdAsv3z80gJiaOTna0ZT5zLupKnWq
Sq1r6eVay9F9aP0n7Y5pCduL9nzcYQWAUarun5oZRWeNGAYAgDl47wcjnZ9lZjZHlu4r+6G4uDr5
Ym7BjrbbXDYiYsmTcKm61eScmqSKvjStXiEz6Y9lqn9cWaStOltU0ZQVXVH13uZTZgxDQPPrg0RD
9W+0x5Ud36NShAQFPPbUq1UlCsO+FvPU5fxXMEQmFq8Ze825eKitdjI07YWwvsrtnZHlR3avi5IS
gYsi4rIp7fI/m4qv24Hvfo3Rw1SQX1SoxWoxGkaGBy13GPk6duL8VXpuHwAgn34lPOqb7wf8AACJ
xprVxlUFqgD77RvYkpRVIc51uFLztu3EuX7wVj+4H8xA96gIO5miPek6GxIr49YmRIwyI92iqbmW
sutxtrf1Ozy2IEHK9FJjwfHRBHLtNaKlZBguBr59/ORK/4nfcrryY5gZn5Usx8YXu+WtsI01/dl5
dENtb+7hSJYF+epFproeOjUed9Zw0BbUxwDf542VBC4T/3Hmqu0/V5iMWL/ZcqO6k6r7XLo7UQkA
gMQkfutMt7MmEg01HvJ/9qVw4NtHxCgydKEXtuxsuGwCAMAcY4O/63vd+FEFQ2TyFyupd47rn3sz
Uc4AAOBKbeHyX7ftbLxuAgCgb9bvyO6wPq9JIDFEev+82V/EXV8+sUn3EVGSv1371d8zYYc/VK0A
DAhZNHM3tMt4NsFrkggoidSslaG7B2zxxpy8/Z8e3KqtAQAAW8Kmwu60pSwLABiX/39SVeoT+nK3
zVzBHBa7g0A4IcHnXjwdP8Pp11/W5/5yMB6ffhNijgmzgyUIqcT5rvDbD5wgXEq4bTIFVVZjSD8w
UwYAEB4YNLPm/+XjPgizXrnYYzK2FTdLs0/FAExy2SVcH4w2/qQ71iZatqHsSJKckwwI2QdwRVZ9
eZabm3zft4XNQ+kTQPqPm618R/EKnHyStm4o3FtqGBjiO43ncHo+AICqo7UX2qiRW6a5lz5QuPrM
Fx7KfjCP8PkIG5+PsPH5CJuF5vMXDY2R1HSfRZQAAAAASUVORK5CYII=
"
height="53"
width="69" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 191 KiB

After

Width:  |  Height:  |  Size: 208 KiB

View file

@ -5,6 +5,15 @@ body
color: #333;
background: @white;
}
body:not(.landing)
{
padding:0px 20px;
padding-top: 40px;
h2
{
margin-top: 40px;
}
}
input
{
background: transparent;
@ -45,6 +54,17 @@ a:hover, a:active
text-decoration: underline;
color: lighten(@orange, 10);
}
.literal
{
color: @purple;
font-size: 1em;
background: lighten(@purple-light, 45);
padding: 1px 2px;
.border-radius(2px);
.box-shadow(inset 0px 0px 0px 1px lighten(@purple-light, 30));
}
.note
{
.gradient(lighten(@purple-light, 10), lighten(@purple-light-shade, 10));
@ -65,11 +85,38 @@ a:hover, a:active
margin: auto;
top: 0; bottom: 0; left: 20px;
}
.literal, .highlight-note
{
color: white;
background: darken(@purple-light, 3);
padding: 1px 3px;
.border-radius(2px);
.box-shadow(inset 0px 0px 0px 1px lighten(@purple-light, 10));
}
.highlight-note
{
padding: 1px 10px;
pre:before
{
content: "$ ";
color: @orange;
}
}
}
.highlight
{
background:transparent !important;
}
.highlight-output
{
.pre-block;
background: desaturate(lighten(@terminal,10), 10);
}
.highlight-javascript
{
.pre-block;
background: desaturate(lighten(@terminal,10), 10);
}
.highlight-python
{
@ -99,7 +146,9 @@ tt
color: @purple;
font-size: 1.2em;
}
ul li {
margin-bottom: 10px;
}
div.document
{
@ -119,15 +168,16 @@ aside
top: 0px;
.logo
{
margin: 0 0 20px 0px;
background: green;
margin: 0 auto 20px auto;
display: block;
width: 90px;
height: 98px;
}
}
.sphinxsidebarwrapper
{
color: #999;
h2, h3, h3 a:link, h3 a:visited
{
color: #777;
}
a:link, a:visited
{
@ -146,5 +196,82 @@ aside
margin: 0 4px;
padding: 0;
list-style: none;
&>li
{
margin-bottom: 10px;
font-size: 18px;
color: #777;
a:link, a:visited {color: #777;}
ul
{
margin: 10px 0 0 0;
padding-left: 20px;
font-size: 16px;
color: #999;
a:link, a:visited {color: #999;}
}
}
}
}
div.footer
{
font-size: .8em;
text-align: center;
margin: 40px 0;
color: #999;
a:link, a:visited {color: #555;}
}
@media screen and (max-width: 820px)
{
body:not(.landing){
padding-top: 130px;
.highlight-output,.highlight-python, .highlight-javascript
{
width: auto;
max-width: 500px;
}
.highlight-python
{
pre { margin: -10px 0 10px 0;}
&:before
{
height: 24px !important;
line-height: 24px;
font-size: .7em;
}
&:after
{
background: none;
}
}
aside
{
position: static;
}
div.documentwrapper
{
margin: 0px;
}
h1, .section
{
margin: 0px !important;
}
aside
{
background-color: #f0f0f0;
width: 100%;
margin: 5px -20px;
padding: 5px 20px 10px 20px;
}
#logolink
{
position: absolute;
top: -120px;
left: 50%;
margin-left: -49px;
}
}
}

View file

@ -17,11 +17,11 @@
.icon,
{
.sprite("../img/icons.png", 32px, 5, 3, 8px);
&.share {.sprite(0, 0)};
&.secure {.sprite(0, 0)};
&.future {.sprite(1, 0)};
&.search {.sprite(2, 0)};
&.nli {.sprite(3, 0)};
&.secure {.sprite(4, 0)};
&.share {.sprite(0, 1)};
&.sync {.sprite(0, 1)};
&.dayone {.sprite(1, 1)};
&.github {.sprite(2, 1)};
@ -88,6 +88,24 @@ body#landing
background-color: @purple;
font-family: "Open Sans", "Helvetica Neue", sans-serif;
font-weight: 300;
#twitter
{
display: block;
position: absolute;
top: 20px;
right: 20px;
border: 1px solid @purple;
padding: 5px 10px 5px 30px;
color: @purple;
.border-radius(3px);
.opacity(.7);
background: url(../img/twitter.png) 8px center no-repeat transparent;
&:hover, &:active
{
.opacity(1);
text-decoration: none;
}
}
#title, .row3, .row4, #prompt
{
width: 900px;
@ -145,6 +163,7 @@ body#landing
height: 60px;
.box-shadow(0px 6px 6px -3px @purple-shade);
text-align: center;
a#twitter-nav {display: none;}
a
{
color: @white;
@ -165,6 +184,7 @@ body#landing
.box-shadow(0px 1px 0px @purple-shade);
.border-radius(5px);
padding: 6px 10px 5px 10px;
white-space: nowrap;
&:hover
{
.gradient(lighten(@orange, 10), darken(@orange, 5));
@ -215,3 +235,81 @@ body#landing
.row4 .col { color: mix(@white, @purple, 80); i {.opacity(80);}}
}
}
@media screen and (max-width: 680px)
{
body#landing
{
#nav
{
height: auto;
padding-bottom: 10px;
a, a#twitter-nav
{
display: block;
}
a.cta
{
margin: 10px;
padding: 1px;
}
}
#upper
{
#twitter { display: none;}
#title
{
margin: 30px 0 10px 0;
}
#logo
{
backgound: red;
display: block;
float: none;
margin: 0px auto;
}
#title br {display: none;}
.pleft, .pright {display: none;}
#prompt, #title
{
width: 100%;
.border-box-sizing;
padding: 0px 20px;
}
.terminal
{
width: 100%;
}
}
}
}
@media screen and (max-width: 900px)
{
body#landing
{
#lower
{
padding: 40px 20px;
.row3, .row4
{
width: auto;
}
.row3 .col, .row4 .col
{
float: none;
width: 100%;
text-align: center;
margin-bottom: 40px;
h3 {font-size: 1.5em;}
p {font-size: 1em;}
i
{
position: static;
margin-bottom: -20px;
}
}
}
}
}

View file

@ -1,527 +0,0 @@
/*! normalize.css v1.1.2 | MIT License | git.io/normalize */
/* ==========================================================================
HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined in IE 6/7/8/9 and Firefox 3.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary {
display: block;
}
/**
* Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3.
*/
audio,
canvas,
video {
display: inline-block;
*display: inline;
*zoom: 1;
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address styling not present in IE 7/8/9, Firefox 3, and Safari 4.
* Known issue: no IE 6 support.
*/
[hidden] {
display: none;
}
/* ==========================================================================
Base
========================================================================== */
/**
* 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using
* `em` units.
* 2. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-size: 100%; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Address `font-family` inconsistency between `textarea` and other form
* elements.
*/
html,
button,
input,
select,
textarea {
font-family: sans-serif;
}
/**
* Address margins handled incorrectly in IE 6/7.
*/
body {
margin: 0;
}
/* ==========================================================================
Links
========================================================================== */
/**
* Address `outline` inconsistency between Chrome and other browsers.
*/
a:focus {
outline: thin dotted;
}
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* ==========================================================================
Typography
========================================================================== */
/**
* Address font sizes and margins set differently in IE 6/7.
* Address font sizes within `section` and `article` in Firefox 4+, Safari 5,
* and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
h2 {
font-size: 1.5em;
margin: 0.83em 0;
}
h3 {
font-size: 1.17em;
margin: 1em 0;
}
h4 {
font-size: 1em;
margin: 1.33em 0;
}
h5 {
font-size: 0.83em;
margin: 1.67em 0;
}
h6 {
font-size: 0.67em;
margin: 2.33em 0;
}
/**
* Address styling not present in IE 7/8/9, Safari 5, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome.
*/
b,
strong {
font-weight: bold;
}
blockquote {
margin: 1em 40px;
}
/**
* Address styling not present in Safari 5 and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address differences between Firefox and other browsers.
* Known issue: no IE 6/7 normalization.
*/
hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0;
}
/**
* Address styling not present in IE 6/7/8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Address margins set differently in IE 6/7.
*/
p,
pre {
margin: 1em 0;
}
/**
* Correct font family set oddly in IE 6, Safari 4/5, and Chrome.
*/
code,
kbd,
pre,
samp {
font-family: monospace, serif;
_font-family: 'courier new', monospace;
font-size: 1em;
}
/**
* Improve readability of pre-formatted text in all browsers.
*/
pre {
white-space: pre;
white-space: pre-wrap;
word-wrap: break-word;
}
/**
* Address CSS quotes not supported in IE 6/7.
*/
q {
quotes: none;
}
/**
* Address `quotes` property not supported in Safari 4.
*/
q:before,
q:after {
content: '';
content: none;
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* ==========================================================================
Lists
========================================================================== */
/**
* Address margins set differently in IE 6/7.
*/
dl,
menu,
ol,
ul {
margin: 1em 0;
}
dd {
margin: 0 0 0 40px;
}
/**
* Address paddings set differently in IE 6/7.
*/
menu,
ol,
ul {
padding: 0 0 0 40px;
}
/**
* Correct list images handled incorrectly in IE 7.
*/
nav ul,
nav ol {
list-style: none;
list-style-image: none;
}
/* ==========================================================================
Embedded content
========================================================================== */
/**
* 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3.
* 2. Improve image quality when scaled in IE 7.
*/
img {
border: 0; /* 1 */
-ms-interpolation-mode: bicubic; /* 2 */
}
/**
* Correct overflow displayed oddly in IE 9.
*/
svg:not(:root) {
overflow: hidden;
}
/* ==========================================================================
Figures
========================================================================== */
/**
* Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11.
*/
figure {
margin: 0;
}
/* ==========================================================================
Forms
========================================================================== */
/**
* Correct margin displayed oddly in IE 6/7.
*/
form {
margin: 0;
}
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct color not being inherited in IE 6/7/8/9.
* 2. Correct text not wrapping in Firefox 3.
* 3. Correct alignment displayed oddly in IE 6/7.
*/
legend {
border: 0; /* 1 */
padding: 0;
white-space: normal; /* 2 */
*margin-left: -7px; /* 3 */
}
/**
* 1. Correct font size not being inherited in all browsers.
* 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5,
* and Chrome.
* 3. Improve appearance and consistency in all browsers.
*/
button,
input,
select,
textarea {
font-size: 100%; /* 1 */
margin: 0; /* 2 */
vertical-align: baseline; /* 3 */
*vertical-align: middle; /* 3 */
}
/**
* Address Firefox 3+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
button,
input {
line-height: normal;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+.
* Correct `select` style inheritance in Firefox 4+ and Opera.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
* 4. Remove inner spacing in IE 7 without affecting normal text inputs.
* Known issue: inner spacing remains in IE 6.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
*overflow: visible; /* 4 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* 1. Address box sizing set to content-box in IE 8/9.
* 2. Remove excess padding in IE 8/9.
* 3. Remove excess padding in IE 7.
* Known issue: excess padding remains in IE 6.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
*height: 13px; /* 3 */
*width: 13px; /* 3 */
}
/**
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; /* 2 */
box-sizing: content-box;
}
/**
* Remove inner padding and search cancel button in Safari 5 and Chrome
* on OS X.
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Remove inner padding and border in Firefox 3+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* 1. Remove default vertical scrollbar in IE 6/7/8/9.
* 2. Improve readability and alignment in all browsers.
*/
textarea {
overflow: auto; /* 1 */
vertical-align: top; /* 2 */
}
/* ==========================================================================
Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}

View file

@ -1,91 +0,0 @@
/*
* small_flask.css_t
* ~~~~~~~~~~~~~~~~~
*
* :copyright: Copyright 2010 by Armin Ronacher.
* :license: Flask Design License, see LICENSE for details.
*/
body {
margin: 0;
padding: 20px 30px;
}
div.documentwrapper {
float: none;
background: white;
}
div.sphinxsidebar {
display: block;
float: none;
width: 102.5%;
margin: 50px -30px -20px -30px;
padding: 10px 20px;
background: #333;
color: white;
}
div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
div.sphinxsidebar h3 a {
color: white;
}
div.sphinxsidebar a {
color: #aaa;
}
div.sphinxsidebar p.logo {
display: none;
}
div.document {
width: 100%;
margin: 0;
}
div.related {
display: block;
margin: 0;
padding: 10px 0 20px 0;
}
div.related ul,
div.related ul li {
margin: 0;
padding: 0;
}
div.footer {
display: none;
}
div.bodywrapper {
margin: 0;
}
div.body {
min-height: 0;
padding: 0;
}
.rtd_doc_footer {
display: none;
}
.document {
width: auto;
}
.footer {
width: auto;
}
.footer {
width: auto;
}
.github {
display: none;
}

View file

@ -1,41 +0,0 @@
.icon-bookmark,.icon-refresh,.icon-share,.icon-search,.icon-lock,.icon-pen,.icon-bubble,.icon-michael-howarth-tardis,.icon-drawer,.icon-github,.icon-calendar {
display: inline-block;
width: 48px;
height: 48px;
background-image: url(sprites.png);
background-repeat: no-repeat;
}
.icon-bookmark {
background-position: 0 0;
}
.icon-refresh {
background-position: -96px 0;
}
.icon-share {
background-position: -192px 0;
}
.icon-search {
background-position: -288px 0;
}
.icon-lock {
background-position: -384px 0;
}
.icon-pen {
background-position: -480px 0;
width: 49px;
}
.icon-bubble {
background-position: -576px 0;
}
.icon-michael-howarth-tardis {
background-position: -672px 0;
}
.icon-drawer {
background-position: -768px 0;
}
.icon-github {
background-position: -864px 0;
}
.icon-calendar {
background-position: -960px 0;
}

100
docs/advanced.rst Normal file
View file

@ -0,0 +1,100 @@
.. _advanced:
Advanced Usage
==============
Configuration File
-------------------
The configuration file is a simple JSON file with the following options.
- ``journals``
paths to your journal files
- ``editor``
if set, executes this command to launch an external editor for writing your entries, e.g. ``vim`` or ``subl -w`` (note the ``-w`` flag to make sure _jrnl_ waits for Sublime Text to close the file before writing into the journal. If you're using MacVim, that would be ``mvim -f``).
- ``encrypt``
if ``true``, encrypts your journal using AES.
- ``tagsymbols``
Symbols to be interpreted as tags. (__See note below__)
- ``default_hour`` and ``default_minute``
if you supply a date, such as ``last thursday``, but no specific time, the entry will be created at this time
- ``timeformat``
how to format the timestamps in your journal, see the [python docs](http://docs.python.org/library/time.html#time.strftime) for reference
- ``highlight``
if ``true``, tags will be highlighted in cyan.
- ``linewrap``
controls the width of the output. Set to ``false`` if you don't want to wrap long lines.
.. note::
Although it seems intuitive to use the `#` character for tags, there's a drawback: on most shells, this is interpreted as a meta-character starting a comment. This means that if you type
.. code-block:: note
jrnl Implemented endless scrolling on the #frontend of our website.
your bash will chop off everything after the ``#`` before passing it to _jrnl_). To avoid this, wrap your input into quotation marks like this:
.. code-block:: note
jrnl "Implemented endless scrolling on the #frontend of our website."
Or use the built-in prompt or an external editor to compose your entries.
DayOne Integration
------------------
Using your DayOne journal instead of a flat text file is dead simple - instead of pointing to a text file, change your `.jrnl_conf` to point to your DayOne journal. This is a folder ending with `.dayone`, and it's located at
* ``~/Library/Application Support/Day One/`` by default
* ``~/Dropbox/Apps/Day One/`` if you're syncing with Dropbox and
* ``~/Library/Mobile Documents/5U8NS4GX82~com~dayoneapp~dayone/Documents/`` if you're syncing with iCloud.
Instead of all entries being in a single file, each entry will live in a separate `plist` file. You can also star entries when you write them:
jrnl -star yesterday: Lunch with @Arthur
Multiple journal files
----------------------
You can configure _jrnl_ to use with multiple journals (eg. ``private`` and ``work``) by defining more journals in your ``.jrnl_config``, for example:
.. code-block:: javascript
{
...
"journals": {
"default": "~/journal.txt",
"work": "~/work.txt"
}
}
The ``default`` journal gets created the first time you start _jrnl_. Now you can access the ``work`` journal by using ``jrnl work`` instead of ``jrnl``, eg. ::
jrnl work at 10am: Meeting with @Steve
jrnl work -n 3
will both use ``~/work.txt``, while ``jrnl -n 3`` will display the last three entries from ``~/journal.txt`` (and so does ``jrnl default -n 3``).
You can also override the default options for each individual journal. If you ``.jrnl_conf`` looks like this:
.. code-block:: javascript
{
...
"encrypt": false
"journals": {
"default": "~/journal.txt",
"work": {
"journal": "~/work.txt",
"encrypt": true
},
"food": "~/my_recipes.txt",
}
Your ``default`` and your ``food`` journals won't be encrypted, however your ``work`` journal will! You can override all options that are present at the top level of ``.jrnl_conf``, just make sure that at the very least you specify a ``"journal": ...`` key that points to the journal file of that journal.
.. note::
Changing ``encrypt`` to a different value will not encrypt or decrypt your journal file, it merely says whether or not your journal `is` encrypted. Hence manually changing this option will most likely result in your journal file being impossible to load.

39
docs/encryption.rst Normal file
View file

@ -0,0 +1,39 @@
.. _encryption:
Encryption
==========
Encrypting and decrypting
-------------------------
If you don't choose to encrypt your file when you run `jrnl` for the first time, you can encrypt your existing journal file or change its password using ::
jrnl --encrypt
If it is already encrypted, you will first be asked for the current password. You can then enter a new password and your plain journal will replaced by the encrypted file. Conversely, ::
jrnl --decrypt
will replace your encrypted journal file by a Journal in plain text. You can also specify a filename, ie. `jrnl --decrypt plain_text_copy.txt`, to leave your original file untouched.
Storing passwords in your keychain
----------------------------------
Whenever you encrypt your journal, you are asked whether you want to store the encryption password in your keychain. If you do this, you won't have to enter your password every time you want to write or read your journal.
If you don't initially store the password in the keychain but decide to do so at a later point -- or maybe want to store it on one computer but not on another -- you can simply run `jrnl --encrypt` on an encrypted journal and use the same password again.
Manual decryption
-----------------
Should you ever want to decrypt your journal manually, you can do so with any program that supports the AES algorithm. The key used for encryption is the SHA-256-hash of your password, and the IV (initialisation vector) is stored in the first 16 bytes of the encrypted file. So, to decrypt a journal file in python, run::
import hashlib, Crypto.Cipher
key = hashlib.sha256(my_password).digest()
with open("my_journal.txt") as f:
cipher = f.read()
crypto = AES.new(key, AES.MODE_CBC, iv = cipher[:16])
plain = crypto.decrypt(cipher[16:])

69
docs/export.rst Normal file
View file

@ -0,0 +1,69 @@
.. _export:
Import and Export
=================
Tag export
----------
With::
jrnl --tags
you'll get a list of all tags you used in your journal, sorted by most frequent. Tags occurring several times in the same entry are only counted as one.
JSON export
-----------
Can do::
jrnl --export json
Why not create a beautiful [timeline](http://timeline.verite.co/) of your journal?
Markdown export
---------------
Use::
jrnl --export markdown
or::
jrnl --export md
Markdown is a simple markup language that is human readable and can be used to be rendered to other formats (html, pdf). This README for example is formatted in markdown and github makes it look nice.
Text export
-----------
::
jrnl --export text
or ::
jrnl --export txt
Pretty-prints your entire journal.
Export to files
---------------
You can specify the output file of your exported journal using the `-o` argument::
jrnl --export md -o journal.md
The above command will generate a file named `journal.md`. If the `-o` argument is a directory, jrnl will export each entry into an individual file::
jrnl --export json -o my_entries/
The contents of `my_entries/` will then look like this:
.. code-block:: output
my_entries/
|- 2013_06_03_a-beautiful-day.json
|- 2013_06_07_dinner-with-gabriel.json
|- ...

View file

@ -1,31 +1,20 @@
.. jrnl documentation master file, created by
sphinx-quickstart on Wed Aug 7 13:22:51 2013.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
jrnl: The command-line journal
==============================
Release v\ |version|. (:ref:`Installation <install>`)
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}
Contents:
.. toctree::
:maxdepth: 2
:maxdepth: 3
overview
installation
usage
encryption
export
advanced
recipes

View file

@ -18,7 +18,7 @@ to install the dependencies for encrypting journals as well.
.. note::
Installing the encryption library, `pycrypto`, requires a `gcc` compiler. You can also `install PyCyrypto manually <https://www.dlitz.net/software/pycrypto/>`_ first.
Installing the encryption library, `pycrypto`, requires a `gcc` compiler. For this reason, jrnl will not install `pycrypto` unless explicitly told so like this. You can `install PyCyrypto manually <https://www.dlitz.net/software/pycrypto/>`_ first or install it with ``pip install pycrypto`` if you have a `gcc` compiler.
The first time you run ``jrnl`` you will be asked where your journal file should be created and whether you wish to encrypt it.
@ -28,9 +28,9 @@ Quickstart
to make a new entry, just type::
jrnl yesterday: Called in sick. Used the time to clean the house anspent 4h on writing my book.
jrnl yesterday: Called in sick. Used the time to clean the house and spent 4h on writing my book.
and hit return. ```yesterday:``` will be interpreted as a timestamp. Everything until the first sentence mark (```.?!:```) will be interpreted as the title, the rest as the body. In your journal file, the result will look like this:
and hit return. ``yesterday:`` will be interpreted as a time stamp. Everything until the first sentence mark (``.?!:``) will be interpreted as the title, the rest as the body. In your journal file, the result will look like this:
.. code-block:: output

19
docs/overview.rst Normal file
View file

@ -0,0 +1,19 @@
.. _overview:
Overview
===============
What is jrnl?
-------------
`jrnl` is a simple journal application for your command line. Journals are stored as human readable plain text files - you can put them into a Dropbox folder for instant syncing and you can be assured that your journal will still be readable in 2050, when all your fancy iPad journal applications will long be forgotten.
`jrnl` also plays nice with the fabulous `DayOne <http://dayoneapp.com>`_ and can read and write directly from and to DayOne Journals.
Optionally, your journal can be encrypted using the `256-bit AES <http://en.wikipedia.org/wiki/Advanced_Encryption_Standard>`_.
Why keep a journal?
-------------------
Journals aren't only for 13-year old girls and people who have too much time on their summer vacation. A journal helps you to keep track of the things you get done and how you did them. Your imagination may be limitless, but your memory isn't. For personal use, make it a good habit to write at least 20 words a day. Just to reflect what made this day special, why you haven't wasted it. For professional use, consider a text-based journal to be the perfect complement to your GTD todo list - a documentation of what and how you've done it.

17
docs/recipes.rst Normal file
View file

@ -0,0 +1,17 @@
.. _recipes:
FAQ
===
Recipes
-------
~~~~~~~~~~~~~~~~
Known Issues
------------
- The Windows shell prior to Windows 7 has issues with unicode encoding. If you want to use non-ascii characters, change the codepage with ``chcp 1252`` before using `jrnl` (Thanks to Yves Pouplard for solving this!)
- _jrnl_ relies on the `PyCrypto` package to encrypt journals, which has some known problems with installing on Windows and within virtual environments.