Browse files

Created gh-pages branch via GitHub

  • Loading branch information...
0 parents commit c3c6d27ba7d004517c7b4c13930addbbc9960fdf @tj committed Apr 2, 2012
Showing with 588 additions and 0 deletions.
  1. +247 −0 index.html
  2. +20 −0 javascripts/scale.fix.js
  3. +1 −0 params.json
  4. +69 −0 stylesheets/pygment_trac.css
  5. +251 −0 stylesheets/styles.css
247 index.html
@@ -0,0 +1,247 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="chrome=1">
+ <title>Jog by visionmedia</title>
+
+ <link rel="stylesheet" href="stylesheets/styles.css">
+ <link rel="stylesheet" href="stylesheets/pygment_trac.css">
+ <script src="javascripts/scale.fix.js"></script>
+ <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+ </head>
+ <body>
+ <div class="wrapper">
+ <header>
+ <h1>Jog</h1>
+ <p>JSON document logging &amp; reporting inspired by loggly for node.js</p>
+ <p class="view"><a href="https://github.com/visionmedia/jog">View the Project on GitHub <small>visionmedia/jog</small></a></p>
+ <ul>
+ <li><a href="https://github.com/visionmedia/jog/zipball/master">Download <strong>ZIP File</strong></a></li>
+ <li><a href="https://github.com/visionmedia/jog/tarball/master">Download <strong>TAR Ball</strong></a></li>
+ <li><a href="https://github.com/visionmedia/jog">Fork On <strong>GitHub</strong></a></li>
+ </ul>
+ </header>
+ <section>
+ <p>JSON logging &amp; reporting inspired by Loggly for node.js.</p>
+
+<h2>Installation</h2>
+
+<pre><code>$ npm install jog
+</code></pre>
+
+<h2>Features</h2>
+
+<ul>
+<li>namespace support</li>
+<li>rich json documents</li>
+<li>log levels</li>
+<li>file store</li>
+<li>redis store</li>
+<li>document streaming</li>
+<li>tail -f like streaming</li>
+<li>CLI to tail and map / reduce logs</li>
+</ul><h2>API</h2>
+
+<h3>log.write(level, msg[, obj])</h3>
+
+<p>Write to the logs:</p>
+
+<div class="highlight">
+<pre><span class="nx">log</span><span class="p">.</span><span class="nx">write</span><span class="p">(</span><span class="nx">level</span><span class="p">,</span> <span class="nx">msg</span><span class="p">[,</span> <span class="nx">obj</span><span class="p">])</span>
+<span class="nx">log</span><span class="p">.</span><span class="nx">debug</span><span class="p">(</span><span class="nx">msg</span><span class="p">[,</span> <span class="nx">obj</span><span class="p">])</span>
+<span class="nx">log</span><span class="p">.</span><span class="nx">info</span><span class="p">(</span><span class="nx">msg</span><span class="p">[,</span> <span class="nx">obj</span><span class="p">])</span>
+<span class="nx">log</span><span class="p">.</span><span class="nx">warn</span><span class="p">(</span><span class="nx">msg</span><span class="p">[,</span> <span class="nx">obj</span><span class="p">])</span>
+<span class="nx">log</span><span class="p">.</span><span class="nx">error</span><span class="p">(</span><span class="nx">msg</span><span class="p">[,</span> <span class="nx">obj</span><span class="p">])</span>
+</pre>
+</div>
+
+
+<h3>log.ns(obj)</h3>
+
+<p>Namespace with the given <code>obj</code>, returning a new <code>Jog</code> instance
+ inheriting previous properties. You may call this several times
+ to produce more and more specific loggers.</p>
+
+<div class="highlight">
+<pre><span class="kd">var</span> <span class="nx">log</span> <span class="o">=</span> <span class="nx">jog</span><span class="p">(</span><span class="k">new</span> <span class="nx">jog</span><span class="p">.</span><span class="nx">FileStore</span><span class="p">(</span><span class="s1">'/tmp/log'</span><span class="p">));</span>
+
+<span class="c1">// log a user 5</span>
+<span class="nx">log</span> <span class="o">=</span> <span class="nx">log</span><span class="p">.</span><span class="nx">ns</span><span class="p">({</span> <span class="nx">uid</span><span class="o">:</span> <span class="mi">5</span> <span class="p">});</span>
+
+<span class="c1">// log video id 99 for user 5</span>
+<span class="nx">log</span> <span class="o">=</span> <span class="nx">log</span><span class="p">.</span><span class="nx">ns</span><span class="p">({</span> <span class="nx">vid</span><span class="o">:</span> <span class="mi">99</span> <span class="p">});</span>
+
+<span class="c1">// or both at once</span>
+<span class="nx">log</span> <span class="o">=</span> <span class="nx">log</span><span class="p">.</span><span class="nx">ns</span><span class="p">({</span> <span class="nx">uid</span><span class="o">:</span> <span class="mi">5</span><span class="p">,</span> <span class="nx">vid</span><span class="o">:</span> <span class="mi">99</span> <span class="p">});</span>
+</pre>
+</div>
+
+
+<h3>log.stream(options)</h3>
+
+<p>Return an <code>EventEmitter</code> emitting "data" and "end" events.</p>
+
+<ul>
+<li>
+<code>end</code> when <strong>false</strong> streaming will not end</li>
+<li>
+<code>interval</code> the interval at which to poll (store-specific)</li>
+</ul><h3>log.clear(callback)</h3>
+
+<p>Clear the logs and invoke the callback.</p>
+
+<h2>Example</h2>
+
+<p>Log random data using the <code>FileStore</code> and tail the file
+ for changes (typically in different processes). Jog will add
+ the <code>.level</code> and <code>.msg</code> properties for you.</p>
+
+<div class="highlight">
+<pre><span class="kd">var</span> <span class="nx">jog</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'jog'</span><span class="p">)</span>
+ <span class="p">,</span> <span class="nx">log</span> <span class="o">=</span> <span class="nx">jog</span><span class="p">(</span><span class="k">new</span> <span class="nx">jog</span><span class="p">.</span><span class="nx">FileStore</span><span class="p">(</span><span class="s1">'/tmp/tail'</span><span class="p">))</span>
+ <span class="p">,</span> <span class="nx">id</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+
+<span class="c1">// generate random log data</span>
+<span class="kd">function</span> <span class="nx">again</span><span class="p">()</span> <span class="p">{</span>
+ <span class="nx">log</span><span class="p">.</span><span class="nx">info</span><span class="p">(</span><span class="s1">'something happened'</span><span class="p">,</span> <span class="p">{</span> <span class="nx">id</span><span class="o">:</span> <span class="o">++</span><span class="nx">id</span><span class="p">,</span> <span class="nx">user</span><span class="o">:</span> <span class="s1">'Tobi'</span> <span class="p">});</span>
+ <span class="nx">setTimeout</span><span class="p">(</span><span class="nx">again</span><span class="p">,</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">random</span><span class="p">()</span> <span class="o">*</span> <span class="mi">100</span> <span class="o">|</span> <span class="mi">0</span><span class="p">);</span>
+<span class="p">}</span>
+
+<span class="nx">again</span><span class="p">();</span>
+
+<span class="c1">// tail the json "documents"</span>
+<span class="nx">log</span><span class="p">.</span><span class="nx">stream</span><span class="p">({</span> <span class="nx">end</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span> <span class="nx">interval</span><span class="o">:</span> <span class="mi">500</span> <span class="p">})</span>
+ <span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">'data'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">obj</span><span class="p">){</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">obj</span><span class="p">);</span>
+ <span class="p">});</span>
+</pre>
+</div>
+
+
+<p>yields:</p>
+
+<div class="highlight">
+<pre><span class="p">{</span> <span class="nx">id</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span>
+ <span class="nx">level</span><span class="o">:</span> <span class="s1">'info'</span><span class="p">,</span>
+ <span class="nx">msg</span><span class="o">:</span> <span class="s1">'something happened'</span><span class="p">,</span>
+ <span class="nx">timestamp</span><span class="o">:</span> <span class="mi">1332907641734</span> <span class="p">}</span>
+<span class="p">{</span> <span class="nx">id</span><span class="o">:</span> <span class="mi">2</span><span class="p">,</span>
+ <span class="nx">level</span><span class="o">:</span> <span class="s1">'info'</span><span class="p">,</span>
+ <span class="nx">msg</span><span class="o">:</span> <span class="s1">'something happened'</span><span class="p">,</span>
+ <span class="nx">timestamp</span><span class="o">:</span> <span class="mi">1332907641771</span> <span class="p">}</span>
+<span class="p">...</span>
+</pre>
+</div>
+
+
+<h2>jog(1)</h2>
+
+<pre><code> Usage: jog [options]
+
+ Options:
+
+ -h, --help output usage information
+ -V, --version output the version number
+ -F, --file &lt;path&gt; load from the given &lt;path&gt;
+ -R, --redis load from redis store
+ -s, --select &lt;fn&gt; use the given &lt;fn&gt; for filtering
+ -m, --map &lt;fn&gt; use the given &lt;fn&gt; for mapping
+ -c, --color enable colors for json output
+</code></pre>
+
+<h3>Examples</h3>
+
+<p>View all logs from tobi. The <code>_</code> object for the function
+ bodies of <code>--select</code> and <code>--map</code> represents the current
+ document, it's all just javascript.</p>
+
+<pre><code>jog --file /tmp/jog --select "_.user == 'tobi'"
+[ { user: 'tobi',
+ duration: 1000,
+ level: 'info',
+ msg: 'rendering video',
+ timestamp: 1332861272100 },
+ { user: 'tobi',
+ duration: 2000,
+ level: 'info',
+ msg: 'compiling video',
+ timestamp: 1332861272100 },
+...
+</code></pre>
+
+<p>Filter video compilation durations from "tobi" only:</p>
+
+<pre><code>$ jog --file /var/log/videos.log --select "_.user == 'tobi'" --map _.duration
+[ 1000, 2000, 1200, 1000, 2000, 1200 ]
+</code></pre>
+
+<p>The --map flag can be used several times:</p>
+
+<pre><code>jog --file /var/log/videos.log --select "_.vid &lt; 5" --map _.msg --map "_.split(' ')"
+[ [ 'compiling', 'video' ],
+ [ 'compiling', 'video' ],
+ [ 'compiling', 'video' ],
+ [ 'compiling', 'video' ] ]
+</code></pre>
+
+<h2>Stores</h2>
+
+<p>By default Jog ships with the <code>FileStore</code> and <code>RedisStore</code>, however anything
+ with the following methods implemented will work:</p>
+
+<pre><code>- `add(obj)` to add a log object
+- `stream() =&gt; EventEmitter` to stream data
+- `stream({ end: false }) =&gt; EventEmitter` to stream data indefinitely
+- `clear(fn)` to clear the logs
+</code></pre>
+
+<h3>FileStore(path)</h3>
+
+<p>Store logs on disk.</p>
+
+<div class="highlight">
+<pre><span class="kd">var</span> <span class="nx">jog</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'jog'</span><span class="p">);</span>
+<span class="kd">var</span> <span class="nx">log</span> <span class="o">=</span> <span class="nx">jog</span><span class="p">(</span><span class="k">new</span> <span class="nx">jog</span><span class="p">.</span><span class="nx">FileStore</span><span class="p">(</span><span class="s1">'/var/log/videos.log'</span><span class="p">));</span>
+</pre>
+</div>
+
+
+<h3>RedisStore([client])</h3>
+
+<p>Store logs in redis.</p>
+
+<div class="highlight">
+<pre><span class="kd">var</span> <span class="nx">jog</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'jog'</span><span class="p">);</span>
+<span class="kd">var</span> <span class="nx">log</span> <span class="o">=</span> <span class="nx">jog</span><span class="p">(</span><span class="k">new</span> <span class="nx">jog</span><span class="p">.</span><span class="nx">RedisStore</span><span class="p">);</span>
+</pre>
+</div>
+
+
+<h2>Performance</h2>
+
+<p>No profiling or optimizations yet but the <code>FileStore</code> can
+ stream back 250,000 documents (~21MB) in 1.2 seconds on my
+ macbook air.</p>
+
+<p>The <code>RedisStore</code> with 250,000 documents streamed back
+ in 2.8 seconds on my air.</p>
+
+<h2>Running tests</h2>
+
+<pre><code>$ npm install
+$ redis-server &amp;
+$ make test
+</code></pre>
+ </section>
+ <footer>
+ <p>This project is maintained by <a href="https://github.com/visionmedia">visionmedia</a></p>
+ <p><small>Hosted on GitHub Pages &mdash; Theme by <a href="https://github.com/orderedlist">orderedlist</a></small></p>
+ </footer>
+ </div>
+ <!--[if !IE]><script>fixScale(document);</script><!--<![endif]-->
+ </body>
+</html>
20 javascripts/scale.fix.js
@@ -0,0 +1,20 @@
+fixScale = function(doc) {
+
+ var addEvent = 'addEventListener',
+ type = 'gesturestart',
+ qsa = 'querySelectorAll',
+ scales = [1, 1],
+ meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
+
+ function fix() {
+ meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
+ doc.removeEventListener(type, fix, true);
+ }
+
+ if ((meta = meta[meta.length - 1]) && addEvent in doc) {
+ fix();
+ scales = [.25, 1.6];
+ doc[addEvent](type, fix, true);
+ }
+
+};
1 params.json
@@ -0,0 +1 @@
+{"name":"Jog","body":"\r\n JSON logging & reporting inspired by Loggly for node.js.\r\n\r\n## Installation\r\n\r\n $ npm install jog\r\n\r\n## Features\r\n\r\n - namespace support\r\n - rich json documents\r\n - log levels\r\n - file store\r\n - redis store\r\n - document streaming\r\n - tail -f like streaming\r\n - CLI to tail and map / reduce logs\r\n\r\n## API\r\n\r\n### log.write(level, msg[, obj])\r\n\r\n Write to the logs:\r\n\r\n```js\r\nlog.write(level, msg[, obj])\r\nlog.debug(msg[, obj])\r\nlog.info(msg[, obj])\r\nlog.warn(msg[, obj])\r\nlog.error(msg[, obj])\r\n```\r\n\r\n### log.ns(obj)\r\n\r\n Namespace with the given `obj`, returning a new `Jog` instance\r\n inheriting previous properties. You may call this several times\r\n to produce more and more specific loggers.\r\n\r\n```js\r\nvar log = jog(new jog.FileStore('/tmp/log'));\r\n\r\n// log a user 5\r\nlog = log.ns({ uid: 5 });\r\n\r\n// log video id 99 for user 5\r\nlog = log.ns({ vid: 99 });\r\n\r\n// or both at once\r\nlog = log.ns({ uid: 5, vid: 99 });\r\n```\r\n\r\n### log.stream(options)\r\n\r\n Return an `EventEmitter` emitting \"data\" and \"end\" events.\r\n\r\n - `end` when __false__ streaming will not end\r\n - `interval` the interval at which to poll (store-specific)\r\n\r\n### log.clear(callback)\r\n\r\n Clear the logs and invoke the callback.\r\n\r\n## Example\r\n\r\n Log random data using the `FileStore` and tail the file\r\n for changes (typically in different processes). Jog will add\r\n the `.level` and `.msg` properties for you.\r\n\r\n```js\r\nvar jog = require('jog')\r\n , log = jog(new jog.FileStore('/tmp/tail'))\r\n , id = 0;\r\n\r\n// generate random log data\r\nfunction again() {\r\n log.info('something happened', { id: ++id, user: 'Tobi' });\r\n setTimeout(again, Math.random() * 100 | 0);\r\n}\r\n\r\nagain();\r\n\r\n// tail the json \"documents\"\r\nlog.stream({ end: false, interval: 500 })\r\n .on('data', function(obj){\r\n console.log(obj);\r\n });\r\n```\r\n\r\nyields:\r\n\r\n```js\r\n{ id: 1,\r\n level: 'info',\r\n msg: 'something happened',\r\n timestamp: 1332907641734 }\r\n{ id: 2,\r\n level: 'info',\r\n msg: 'something happened',\r\n timestamp: 1332907641771 }\r\n...\r\n```\r\n\r\n## jog(1)\r\n\r\n```\r\n Usage: jog [options]\r\n\r\n Options:\r\n\r\n -h, --help output usage information\r\n -V, --version output the version number\r\n -F, --file <path> load from the given <path>\r\n -R, --redis load from redis store\r\n -s, --select <fn> use the given <fn> for filtering\r\n -m, --map <fn> use the given <fn> for mapping\r\n -c, --color enable colors for json output\r\n```\r\n\r\n### Examples\r\n\r\n View all logs from tobi. The `_` object for the function\r\n bodies of `--select` and `--map` represents the current\r\n document, it's all just javascript.\r\n\r\n```\r\njog --file /tmp/jog --select \"_.user == 'tobi'\"\r\n[ { user: 'tobi',\r\n duration: 1000,\r\n level: 'info',\r\n msg: 'rendering video',\r\n timestamp: 1332861272100 },\r\n { user: 'tobi',\r\n duration: 2000,\r\n level: 'info',\r\n msg: 'compiling video',\r\n timestamp: 1332861272100 },\r\n...\r\n```\r\n\r\n Filter video compilation durations from \"tobi\" only:\r\n \r\n```\r\n$ jog --file /var/log/videos.log --select \"_.user == 'tobi'\" --map _.duration\r\n[ 1000, 2000, 1200, 1000, 2000, 1200 ]\r\n```\r\n\r\n The --map flag can be used several times:\r\n\r\n```\r\njog --file /var/log/videos.log --select \"_.vid < 5\" --map _.msg --map \"_.split(' ')\"\r\n[ [ 'compiling', 'video' ],\r\n [ 'compiling', 'video' ],\r\n [ 'compiling', 'video' ],\r\n [ 'compiling', 'video' ] ]\r\n```\r\n\r\n## Stores\r\n\r\n By default Jog ships with the `FileStore` and `RedisStore`, however anything\r\n with the following methods implemented will work:\r\n \r\n - `add(obj)` to add a log object\r\n - `stream() => EventEmitter` to stream data\r\n - `stream({ end: false }) => EventEmitter` to stream data indefinitely\r\n - `clear(fn)` to clear the logs\r\n\r\n### FileStore(path)\r\n\r\n Store logs on disk.\r\n\r\n```js\r\nvar jog = require('jog');\r\nvar log = jog(new jog.FileStore('/var/log/videos.log'));\r\n```\r\n\r\n### RedisStore([client])\r\n\r\n Store logs in redis.\r\n\r\n```js\r\nvar jog = require('jog');\r\nvar log = jog(new jog.RedisStore);\r\n```\r\n\r\n## Performance\r\n\r\n No profiling or optimizations yet but the `FileStore` can\r\n stream back 250,000 documents (~21MB) in 1.2 seconds on my\r\n macbook air.\r\n\r\n The `RedisStore` with 250,000 documents streamed back\r\n in 2.8 seconds on my air.\r\n\r\n## Running tests\r\n\r\n```\r\n$ npm install\r\n$ redis-server &\r\n$ make test\r\n```","tagline":"JSON document logging & reporting inspired by loggly for node.js","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."}
69 stylesheets/pygment_trac.css
@@ -0,0 +1,69 @@
+.highlight { background: #ffffff; }
+.highlight .c { color: #999988; font-style: italic } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { font-weight: bold } /* Keyword */
+.highlight .o { font-weight: bold } /* Operator */
+.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
+.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
+.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #999999 } /* Generic.Heading */
+.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
+.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { font-weight: bold } /* Keyword.Constant */
+.highlight .kd { font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #009999 } /* Literal.Number */
+.highlight .s { color: #d14 } /* Literal.String */
+.highlight .na { color: #008080 } /* Name.Attribute */
+.highlight .nb { color: #0086B3 } /* Name.Builtin */
+.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
+.highlight .no { color: #008080 } /* Name.Constant */
+.highlight .ni { color: #800080 } /* Name.Entity */
+.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
+.highlight .nn { color: #555555 } /* Name.Namespace */
+.highlight .nt { color: #000080 } /* Name.Tag */
+.highlight .nv { color: #008080 } /* Name.Variable */
+.highlight .ow { font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #009999 } /* Literal.Number.Float */
+.highlight .mh { color: #009999 } /* Literal.Number.Hex */
+.highlight .mi { color: #009999 } /* Literal.Number.Integer */
+.highlight .mo { color: #009999 } /* Literal.Number.Oct */
+.highlight .sb { color: #d14 } /* Literal.String.Backtick */
+.highlight .sc { color: #d14 } /* Literal.String.Char */
+.highlight .sd { color: #d14 } /* Literal.String.Doc */
+.highlight .s2 { color: #d14 } /* Literal.String.Double */
+.highlight .se { color: #d14 } /* Literal.String.Escape */
+.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
+.highlight .si { color: #d14 } /* Literal.String.Interpol */
+.highlight .sx { color: #d14 } /* Literal.String.Other */
+.highlight .sr { color: #009926 } /* Literal.String.Regex */
+.highlight .s1 { color: #d14 } /* Literal.String.Single */
+.highlight .ss { color: #990073 } /* Literal.String.Symbol */
+.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #008080 } /* Name.Variable.Class */
+.highlight .vg { color: #008080 } /* Name.Variable.Global */
+.highlight .vi { color: #008080 } /* Name.Variable.Instance */
+.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
+
+.type-csharp .highlight .k { color: #0000FF }
+.type-csharp .highlight .kt { color: #0000FF }
+.type-csharp .highlight .nf { color: #000000; font-weight: normal }
+.type-csharp .highlight .nc { color: #2B91AF }
+.type-csharp .highlight .nn { color: #000000 }
+.type-csharp .highlight .s { color: #A31515 }
+.type-csharp .highlight .sc { color: #A31515 }
251 stylesheets/styles.css
@@ -0,0 +1,251 @@
+@import url(https://fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700);
+
+body {
+ padding:50px;
+ font:14px/1.5 Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+ color:#777;
+ font-weight:300;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color:#222;
+ margin:0 0 20px;
+}
+
+p, ul, ol, table, pre, dl {
+ margin:0 0 20px;
+}
+
+h1, h2, h3 {
+ line-height:1.1;
+}
+
+h1 {
+ font-size:28px;
+}
+
+h2 {
+ color:#393939;
+}
+
+h3, h4, h5, h6 {
+ color:#494949;
+}
+
+a {
+ color:#39c;
+ font-weight:400;
+ text-decoration:none;
+}
+
+a small {
+ font-size:11px;
+ color:#777;
+ margin-top:-0.6em;
+ display:block;
+}
+
+.wrapper {
+ width:860px;
+ margin:0 auto;
+}
+
+blockquote {
+ border-left:1px solid #e5e5e5;
+ margin:0;
+ padding:0 0 0 20px;
+ font-style:italic;
+}
+
+code, pre {
+ font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal;
+ color:#333;
+ font-size:12px;
+}
+
+pre {
+ padding:8px 15px;
+ background: #f8f8f8;
+ border-radius:5px;
+ border:1px solid #e5e5e5;
+ overflow-x: auto;
+}
+
+table {
+ width:100%;
+ border-collapse:collapse;
+}
+
+th, td {
+ text-align:left;
+ padding:5px 10px;
+ border-bottom:1px solid #e5e5e5;
+}
+
+dt {
+ color:#444;
+ font-weight:700;
+}
+
+th {
+ color:#444;
+}
+
+img {
+ max-width:100%;
+}
+
+header {
+ width:270px;
+ float:left;
+ position:fixed;
+}
+
+header ul {
+ list-style:none;
+ height:40px;
+
+ padding:0;
+
+ background: #eee;
+ background: -moz-linear-gradient(top, #f8f8f8 0%, #dddddd 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd));
+ background: -webkit-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+ background: -o-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+ background: -ms-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+ background: linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+
+ border-radius:5px;
+ border:1px solid #d2d2d2;
+ box-shadow:inset #fff 0 1px 0, inset rgba(0,0,0,0.03) 0 -1px 0;
+ width:270px;
+}
+
+header li {
+ width:89px;
+ float:left;
+ border-right:1px solid #d2d2d2;
+ height:40px;
+}
+
+header ul a {
+ line-height:1;
+ font-size:11px;
+ color:#999;
+ display:block;
+ text-align:center;
+ padding-top:6px;
+ height:40px;
+}
+
+strong {
+ color:#222;
+ font-weight:700;
+}
+
+header ul li + li {
+ width:88px;
+ border-left:1px solid #fff;
+}
+
+header ul li + li + li {
+ border-right:none;
+ width:89px;
+}
+
+header ul a strong {
+ font-size:14px;
+ display:block;
+ color:#222;
+}
+
+section {
+ width:500px;
+ float:right;
+ padding-bottom:50px;
+}
+
+small {
+ font-size:11px;
+}
+
+hr {
+ border:0;
+ background:#aaa;
+ height:1px;
+ margin:0 0 20px;
+}
+
+footer {
+ width:270px;
+ float:left;
+ position:fixed;
+ bottom:50px;
+}
+
+@media print, screen and (max-width: 960px) {
+
+ div.wrapper {
+ width:auto;
+ margin:0;
+ }
+
+ header, section, footer {
+ float:none;
+ position:static;
+ width:auto;
+ }
+
+ header {
+ padding-right:320px;
+ }
+
+ section {
+ border:1px solid #e5e5e5;
+ border-width:1px 0;
+ padding:20px 0;
+ margin:0 0 20px;
+ }
+
+ header a small {
+ display:inline;
+ }
+
+ header ul {
+ position:absolute;
+ right:50px;
+ top:52px;
+ }
+}
+
+@media print, screen and (max-width: 720px) {
+ body {
+ word-wrap:break-word;
+ }
+
+ header {
+ padding:0;
+ }
+
+ header ul, header p.view {
+ position:static;
+ }
+}
+
+@media print, screen and (max-width: 480px) {
+ body {
+ padding:15px;
+ }
+
+ header ul {
+ display:none;
+ }
+}
+
+@media print {
+ body {
+ padding:0.4in;
+ font-size:12pt;
+ color:#444;
+ }
+}

0 comments on commit c3c6d27

Please sign in to comment.