summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliris <liris.pp@gmail.com>2013-06-17 18:19:56 -0700
committerliris <liris.pp@gmail.com>2013-06-17 18:19:56 -0700
commite15e85ebf8757dbc79e5a1ced897054fe54f771d (patch)
tree348715d2d7df7a0950e4c0881fd33ec10eeda08d
downloadwebsocket-client-e15e85ebf8757dbc79e5a1ced897054fe54f771d.tar.gz
Create gh-pages branch via GitHub
-rw-r--r--images/checker.pngbin0 -> 250 bytes
-rw-r--r--index.html252
-rw-r--r--javascripts/scale.fix.js20
-rw-r--r--params.json1
-rw-r--r--stylesheets/pygment_trac.css60
-rw-r--r--stylesheets/styles.css356
6 files changed, 689 insertions, 0 deletions
diff --git a/images/checker.png b/images/checker.png
new file mode 100644
index 0000000..ab14540
--- /dev/null
+++ b/images/checker.png
Binary files differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..9c1600e
--- /dev/null
+++ b/index.html
@@ -0,0 +1,252 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="chrome=1">
+ <title>Websocket-client by liris</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>Websocket-client</h1>
+ <p>websocket client for python</p>
+ <p class="view"><a href="https://github.com/liris/websocket-client">View the Project on GitHub <small>liris/websocket-client</small></a></p>
+ <ul>
+ <li><a href="https://github.com/liris/websocket-client/zipball/master">Download <strong>ZIP File</strong></a></li>
+ <li><a href="https://github.com/liris/websocket-client/tarball/master">Download <strong>TAR Ball</strong></a></li>
+ <li><a href="https://github.com/liris/websocket-client">View On <strong>GitHub</strong></a></li>
+ </ul>
+ </header>
+ <section>
+ <h1></h1>
+
+<h1>
+<a name="websocket-client" class="anchor" href="#websocket-client"><span class="octicon octicon-link"></span></a>websocket-client</h1>
+
+<p>websocket-client module is WebSocket client for python. This provide the low level APIs for WebSocket. All APIs are the synchronous functions.</p>
+
+<p>websocket-client supports only hybi-13.</p>
+
+<h1>
+<a name="license" class="anchor" href="#license"><span class="octicon octicon-link"></span></a>License</h1>
+
+<ul>
+<li>LGPL</li>
+</ul><h1>
+<a name="installation" class="anchor" href="#installation"><span class="octicon octicon-link"></span></a>Installation</h1>
+
+<p>This module is tested on only Python 2.7.</p>
+
+<p>Type "python setup.py install" or "pip install websocket-client" to install.</p>
+
+<p>This module does not depend on any other module.</p>
+
+<h1>
+<a name="how-about-python-3" class="anchor" href="#how-about-python-3"><span class="octicon octicon-link"></span></a>How about Python 3</h1>
+
+<p>py3( <a href="https://github.com/liris/websocket-client/tree/py3">https://github.com/liris/websocket-client/tree/py3</a> ) branch is for python 3.3. Every test case is passed.
+If you are using python3, please check it.</p>
+
+<h1>
+<a name="example" class="anchor" href="#example"><span class="octicon octicon-link"></span></a>Example</h1>
+
+<p>Low Level API example::</p>
+
+<pre><code>from websocket import create_connection
+ws = create_connection("ws://echo.websocket.org/")
+print "Sending 'Hello, World'..."
+ws.send("Hello, World")
+print "Sent"
+print "Reeiving..."
+result = ws.recv()
+print "Received '%s'" % result
+ws.close()
+</code></pre>
+
+<p>If you want to customize socket options, set sockopt.</p>
+
+<p>sockopt example:</p>
+
+<pre><code>from websocket import create_connection
+ws = create_connection("ws://echo.websocket.org/".
+ sockopt=((socket.IPPROTO_TCP, socket.TCP_NODELAY),) )
+</code></pre>
+
+<p>JavaScript websocket-like API example::</p>
+
+<p>import websocket
+ import thread
+ import time</p>
+
+<p>def on_message(ws, message):
+ print message</p>
+
+<p>def on_error(ws, error):
+ print error</p>
+
+<p>def on_close(ws):
+ print "### closed ###"</p>
+
+<p>def on_open(ws):
+ def run(*args):
+ for i in range(3):
+ time.sleep(1)
+ ws.send("Hello %d" % i)
+ time.sleep(1)
+ ws.close()
+ print "thread terminating..."
+ thread.start_new_thread(run, ())</p>
+
+<p>if <strong>name</strong> == "__main__":
+ websocket.enableTrace(True)
+ ws = websocket.WebSocketApp("ws://echo.websocket.org/",
+ on_message = on_message,
+ on_error = on_error,
+ on_close = on_close)
+ ws.on_open = on_open</p>
+
+<pre><code> ws.run_forever()
+</code></pre>
+
+<h1>
+<a name="wsdumppy" class="anchor" href="#wsdumppy"><span class="octicon octicon-link"></span></a>wsdump.py</h1>
+
+<p>wsdump.py is simple WebSocket test(debug) tool.</p>
+
+<p>sample for echo.websocket.org::</p>
+
+<p>$ wsdump.py ws://echo.websocket.org/
+ Press Ctrl+C to quit</p>
+
+<blockquote>
+<p>Hello, WebSocket
+ &lt; Hello, WebSocket
+How are you?
+ &lt; How are you?</p>
+</blockquote>
+
+<h2>
+<a name="usage" class="anchor" href="#usage"><span class="octicon octicon-link"></span></a>Usage</h2>
+
+<p>usage::
+ wsdump.py [-h] [-v [VERBOSE]] ws_url</p>
+
+<p>WebSocket Simple Dump Tool</p>
+
+<p>positional arguments:
+ ws_url websocket url. ex. ws://echo.websocket.org/</p>
+
+<p>optional arguments:
+ -h, --help show this help message and exit</p>
+
+<p>-v VERBOSE, --verbose VERBOSE set verbose mode. If set to 1, show opcode. If set to 2, enable to trace websocket module</p>
+
+<p>example::</p>
+
+<p>$ wsdump.py ws://echo.websocket.org/
+ $ wsdump.py ws://echo.websocket.org/ -v
+ $ wsdump.py ws://echo.websocket.org/ -vv</p>
+
+<h1>
+<a name="changelog" class="anchor" href="#changelog"><span class="octicon octicon-link"></span></a>ChangeLog</h1>
+
+<ul>
+<li>
+<p>v0.11.0</p>
+
+<ul>
+<li>Only log non-normal close status(ISSUE#31)</li>
+<li>Fix default Origin isn't URI(ISSUE#32)</li>
+<li>fileno support(ISSUE#33)</li>
+</ul>
+</li>
+<li>
+<p>v0.10.0</p>
+
+<ul>
+<li>allow to set HTTP Header to WebSocketApp(ISSUE#27)</li>
+<li>fix typo in pydoc(ISSUE#28)</li>
+<li>Passing a socketopt flag to the websocket constructor(ISSUE#29)</li>
+<li>websocket.send fails with long data(ISSUE#30)</li>
+</ul>
+</li>
+<li>
+<p>v0.9.0</p>
+
+<ul>
+<li>allow to set opcode in WebSocketApp.send(ISSUE#25)</li>
+<li>allow to modify Origin(ISSUE#26)</li>
+</ul>
+</li>
+<li>
+<p>v0.8.0</p>
+
+<ul>
+<li>many bug fix</li>
+<li>some performance improvement</li>
+</ul>
+</li>
+<li>
+<p>v0.7.0</p>
+
+<ul>
+<li>fixed problem to read long data.(ISSUE#12)</li>
+<li>fix buffer size boundary violation</li>
+</ul>
+</li>
+<li>
+<p>v0.6.0</p>
+
+<ul>
+<li>Patches: UUID4, self.keep_running, mask_key (ISSUE#11)</li>
+<li>add wsdump.py tool </li>
+</ul>
+</li>
+<li>
+<p>v0.5.2</p>
+
+<ul>
+<li>fix Echo App Demo Throw Error: 'NoneType' object has no attribute 'opcode (ISSUE#10)</li>
+</ul>
+</li>
+<li>
+<p>v0.5.1</p>
+
+<ul>
+<li>delete invalid print statement.</li>
+</ul>
+</li>
+<li>
+<p>v0.5.0</p>
+
+<ul>
+<li>support hybi-13 protocol.</li>
+</ul>
+</li>
+<li>
+<p>v0.4.1</p>
+
+<ul>
+<li>fix incorrect custom header order(ISSUE#1)</li>
+</ul>
+</li>
+</ul>
+ </section>
+ </div>
+ <footer>
+ <p>Project maintained by <a href="https://github.com/liris">liris</a></p>
+ <p>Hosted on GitHub Pages &mdash; Theme by <a href="https://github.com/orderedlist">orderedlist</a></p>
+ </footer>
+ <!--[if !IE]><script>fixScale(document);</script><![endif]-->
+
+ </body>
+</html> \ No newline at end of file
diff --git a/javascripts/scale.fix.js b/javascripts/scale.fix.js
new file mode 100644
index 0000000..08716c0
--- /dev/null
+++ b/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);
+ }
+
+}; \ No newline at end of file
diff --git a/params.json b/params.json
new file mode 100644
index 0000000..6d1d1a6
--- /dev/null
+++ b/params.json
@@ -0,0 +1 @@
+{"name":"Websocket-client","tagline":"websocket client for python","body":"=================\r\nwebsocket-client\r\n=================\r\n\r\nwebsocket-client module is WebSocket client for python. This provide the low level APIs for WebSocket. All APIs are the synchronous functions.\r\n\r\nwebsocket-client supports only hybi-13.\r\n\r\nLicense\r\n============\r\n\r\n - LGPL\r\n\r\nInstallation\r\n=============\r\n\r\nThis module is tested on only Python 2.7.\r\n\r\nType \"python setup.py install\" or \"pip install websocket-client\" to install.\r\n\r\nThis module does not depend on any other module.\r\n\r\nHow about Python 3\r\n===========================\r\n\r\npy3( https://github.com/liris/websocket-client/tree/py3 ) branch is for python 3.3. Every test case is passed.\r\nIf you are using python3, please check it.\r\n\r\nExample\r\n============\r\n\r\nLow Level API example::\r\n\r\n from websocket import create_connection\r\n ws = create_connection(\"ws://echo.websocket.org/\")\r\n print \"Sending 'Hello, World'...\"\r\n ws.send(\"Hello, World\")\r\n print \"Sent\"\r\n print \"Reeiving...\"\r\n result = ws.recv()\r\n print \"Received '%s'\" % result\r\n ws.close()\r\n\r\nIf you want to customize socket options, set sockopt.\r\n\r\nsockopt example:\r\n\r\n from websocket import create_connection\r\n ws = create_connection(\"ws://echo.websocket.org/\".\r\n sockopt=((socket.IPPROTO_TCP, socket.TCP_NODELAY),) )\r\n\r\n\r\nJavaScript websocket-like API example::\r\n\r\n import websocket\r\n import thread\r\n import time\r\n \r\n def on_message(ws, message):\r\n print message\r\n \r\n def on_error(ws, error):\r\n print error\r\n \r\n def on_close(ws):\r\n print \"### closed ###\"\r\n \r\n def on_open(ws):\r\n def run(*args):\r\n for i in range(3):\r\n time.sleep(1)\r\n ws.send(\"Hello %d\" % i)\r\n time.sleep(1)\r\n ws.close()\r\n print \"thread terminating...\"\r\n thread.start_new_thread(run, ())\r\n \r\n \r\n if __name__ == \"__main__\":\r\n websocket.enableTrace(True)\r\n ws = websocket.WebSocketApp(\"ws://echo.websocket.org/\",\r\n on_message = on_message,\r\n on_error = on_error,\r\n on_close = on_close)\r\n ws.on_open = on_open\r\n \r\n ws.run_forever()\r\n\r\n\r\nwsdump.py\r\n============\r\n\r\nwsdump.py is simple WebSocket test(debug) tool.\r\n\r\nsample for echo.websocket.org::\r\n\r\n $ wsdump.py ws://echo.websocket.org/\r\n Press Ctrl+C to quit\r\n > Hello, WebSocket\r\n < Hello, WebSocket\r\n > How are you?\r\n < How are you?\r\n\r\nUsage\r\n---------\r\n\r\nusage::\r\n wsdump.py [-h] [-v [VERBOSE]] ws_url\r\n\r\nWebSocket Simple Dump Tool\r\n\r\npositional arguments:\r\n ws_url websocket url. ex. ws://echo.websocket.org/\r\n\r\noptional arguments:\r\n -h, --help show this help message and exit\r\n\r\n -v VERBOSE, --verbose VERBOSE set verbose mode. If set to 1, show opcode. If set to 2, enable to trace websocket module\r\n\r\nexample::\r\n\r\n $ wsdump.py ws://echo.websocket.org/\r\n $ wsdump.py ws://echo.websocket.org/ -v\r\n $ wsdump.py ws://echo.websocket.org/ -vv\r\n\r\nChangeLog\r\n============\r\n\r\n- v0.11.0\r\n\r\n - Only log non-normal close status(ISSUE#31)\r\n - Fix default Origin isn't URI(ISSUE#32)\r\n - fileno support(ISSUE#33)\r\n\r\n- v0.10.0\r\n\r\n - allow to set HTTP Header to WebSocketApp(ISSUE#27)\r\n - fix typo in pydoc(ISSUE#28)\r\n - Passing a socketopt flag to the websocket constructor(ISSUE#29)\r\n - websocket.send fails with long data(ISSUE#30)\r\n\r\n\r\n- v0.9.0\r\n\r\n - allow to set opcode in WebSocketApp.send(ISSUE#25)\r\n - allow to modify Origin(ISSUE#26)\r\n\r\n- v0.8.0\r\n\r\n - many bug fix\r\n - some performance improvement\r\n\r\n- v0.7.0\r\n\r\n - fixed problem to read long data.(ISSUE#12)\r\n - fix buffer size boundary violation\r\n\r\n- v0.6.0\r\n\r\n - Patches: UUID4, self.keep_running, mask_key (ISSUE#11)\r\n - add wsdump.py tool \r\n\r\n- v0.5.2\r\n\r\n - fix Echo App Demo Throw Error: 'NoneType' object has no attribute 'opcode (ISSUE#10)\r\n\r\n- v0.5.1\r\n\r\n - delete invalid print statement.\r\n\r\n- v0.5.0\r\n\r\n - support hybi-13 protocol.\r\n\r\n- v0.4.1\r\n\r\n - fix incorrect custom header order(ISSUE#1)\r\n \r\n","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file
diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css
new file mode 100644
index 0000000..1926cfd
--- /dev/null
+++ b/stylesheets/pygment_trac.css
@@ -0,0 +1,60 @@
+.highlight .hll { background-color: #49483e }
+.highlight { background: #3A3C42; color: #f8f8f2 }
+.highlight .c { color: #75715e } /* Comment */
+.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
+.highlight .k { color: #66d9ef } /* Keyword */
+.highlight .l { color: #ae81ff } /* Literal */
+.highlight .n { color: #f8f8f2 } /* Name */
+.highlight .o { color: #f92672 } /* Operator */
+.highlight .p { color: #f8f8f2 } /* Punctuation */
+.highlight .cm { color: #75715e } /* Comment.Multiline */
+.highlight .cp { color: #75715e } /* Comment.Preproc */
+.highlight .c1 { color: #75715e } /* Comment.Single */
+.highlight .cs { color: #75715e } /* Comment.Special */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .kc { color: #66d9ef } /* Keyword.Constant */
+.highlight .kd { color: #66d9ef } /* Keyword.Declaration */
+.highlight .kn { color: #f92672 } /* Keyword.Namespace */
+.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */
+.highlight .kr { color: #66d9ef } /* Keyword.Reserved */
+.highlight .kt { color: #66d9ef } /* Keyword.Type */
+.highlight .ld { color: #e6db74 } /* Literal.Date */
+.highlight .m { color: #ae81ff } /* Literal.Number */
+.highlight .s { color: #e6db74 } /* Literal.String */
+.highlight .na { color: #a6e22e } /* Name.Attribute */
+.highlight .nb { color: #f8f8f2 } /* Name.Builtin */
+.highlight .nc { color: #a6e22e } /* Name.Class */
+.highlight .no { color: #66d9ef } /* Name.Constant */
+.highlight .nd { color: #a6e22e } /* Name.Decorator */
+.highlight .ni { color: #f8f8f2 } /* Name.Entity */
+.highlight .ne { color: #a6e22e } /* Name.Exception */
+.highlight .nf { color: #a6e22e } /* Name.Function */
+.highlight .nl { color: #f8f8f2 } /* Name.Label */
+.highlight .nn { color: #f8f8f2 } /* Name.Namespace */
+.highlight .nx { color: #a6e22e } /* Name.Other */
+.highlight .py { color: #f8f8f2 } /* Name.Property */
+.highlight .nt { color: #f92672 } /* Name.Tag */
+.highlight .nv { color: #f8f8f2 } /* Name.Variable */
+.highlight .ow { color: #f92672 } /* Operator.Word */
+.highlight .w { color: #f8f8f2 } /* Text.Whitespace */
+.highlight .mf { color: #ae81ff } /* Literal.Number.Float */
+.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */
+.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */
+.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */
+.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */
+.highlight .sc { color: #e6db74 } /* Literal.String.Char */
+.highlight .sd { color: #e6db74 } /* Literal.String.Doc */
+.highlight .s2 { color: #e6db74 } /* Literal.String.Double */
+.highlight .se { color: #ae81ff } /* Literal.String.Escape */
+.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */
+.highlight .si { color: #e6db74 } /* Literal.String.Interpol */
+.highlight .sx { color: #e6db74 } /* Literal.String.Other */
+.highlight .sr { color: #e6db74 } /* Literal.String.Regex */
+.highlight .s1 { color: #e6db74 } /* Literal.String.Single */
+.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */
+.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */
+.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */
+.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */
+.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ \ No newline at end of file
diff --git a/stylesheets/styles.css b/stylesheets/styles.css
new file mode 100644
index 0000000..466b9d6
--- /dev/null
+++ b/stylesheets/styles.css
@@ -0,0 +1,356 @@
+@import url(https://fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700);
+html {
+ background: #6C7989;
+ background: #6c7989 -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #6c7989), color-stop(100%, #434b55)) fixed;
+ background: #6c7989 -webkit-linear-gradient(#6c7989, #434b55) fixed;
+ background: #6c7989 -moz-linear-gradient(#6c7989, #434b55) fixed;
+ background: #6c7989 -o-linear-gradient(#6c7989, #434b55) fixed;
+ background: #6c7989 -ms-linear-gradient(#6c7989, #434b55) fixed;
+ background: #6c7989 linear-gradient(#6c7989, #434b55) fixed;
+}
+
+body {
+ padding: 50px 0;
+ margin: 0;
+ font: 14px/1.5 Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+ color: #555;
+ font-weight: 300;
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAeCAYAAABNChwpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy82LzEygrTcTAAAAFRJREFUSIljfPDggZRf5RIGGNjUHsNATz6jXmSL1Kb2GLiAX+USBnrymRgGGDCORgFmoNAXjEbBaBSMRsFoFIxGwWgUjEbBaBSMRsFoFIxGwWgUAABYNujumib3wAAAAABJRU5ErkJggg==') fixed;
+}
+
+.wrapper {
+ width: 640px;
+ margin: 0 auto;
+ background: #DEDEDE;
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ -ms-border-radius: 8px;
+ -o-border-radius: 8px;
+ border-radius: 8px;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px;
+ box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px;
+}
+
+header, section, footer {
+ display: block;
+}
+
+a {
+ color: #069;
+ text-decoration: none;
+}
+
+p {
+ margin: 0 0 20px;
+ padding: 0;
+}
+
+strong {
+ color: #222;
+ font-weight: 700;
+}
+
+header {
+ -webkit-border-radius: 8px 8px 0 0;
+ -moz-border-radius: 8px 8px 0 0;
+ -ms-border-radius: 8px 8px 0 0;
+ -o-border-radius: 8px 8px 0 0;
+ border-radius: 8px 8px 0 0;
+ background: #C6EAFA;
+ background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ddfbfc), color-stop(100%, #c6eafa));
+ background: -webkit-linear-gradient(#ddfbfc, #c6eafa);
+ background: -moz-linear-gradient(#ddfbfc, #c6eafa);
+ background: -o-linear-gradient(#ddfbfc, #c6eafa);
+ background: -ms-linear-gradient(#ddfbfc, #c6eafa);
+ background: linear-gradient(#ddfbfc, #c6eafa);
+ position: relative;
+ padding: 15px 20px;
+ border-bottom: 1px solid #B2D2E1;
+}
+header h1 {
+ margin: 0;
+ padding: 0;
+ font-size: 24px;
+ line-height: 1.2;
+ color: #069;
+ text-shadow: rgba(255, 255, 255, 0.9) 0 1px 0;
+}
+header.without-description h1 {
+ margin: 10px 0;
+}
+header p {
+ margin: 0;
+ color: #61778B;
+ width: 300px;
+ font-size: 13px;
+}
+header p.view {
+ display: none;
+ font-weight: 700;
+ text-shadow: rgba(255, 255, 255, 0.9) 0 1px 0;
+ -webkit-font-smoothing: antialiased;
+}
+header p.view a {
+ color: #06c;
+}
+header p.view small {
+ font-weight: 400;
+}
+header ul {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ position: absolute;
+ z-index: 1;
+ right: 20px;
+ top: 20px;
+ height: 38px;
+ padding: 1px 0;
+ background: #5198DF;
+ background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #77b9fb), color-stop(100%, #3782cd));
+ background: -webkit-linear-gradient(#77b9fb, #3782cd);
+ background: -moz-linear-gradient(#77b9fb, #3782cd);
+ background: -o-linear-gradient(#77b9fb, #3782cd);
+ background: -ms-linear-gradient(#77b9fb, #3782cd);
+ background: linear-gradient(#77b9fb, #3782cd);
+ border-radius: 5px;
+ -webkit-box-shadow: inset rgba(255, 255, 255, 0.45) 0 1px 0, inset rgba(0, 0, 0, 0.2) 0 -1px 0;
+ -moz-box-shadow: inset rgba(255, 255, 255, 0.45) 0 1px 0, inset rgba(0, 0, 0, 0.2) 0 -1px 0;
+ box-shadow: inset rgba(255, 255, 255, 0.45) 0 1px 0, inset rgba(0, 0, 0, 0.2) 0 -1px 0;
+ width: auto;
+}
+header ul:before {
+ content: '';
+ position: absolute;
+ z-index: -1;
+ left: -5px;
+ top: -4px;
+ right: -5px;
+ bottom: -6px;
+ background: rgba(0, 0, 0, 0.1);
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ -ms-border-radius: 8px;
+ -o-border-radius: 8px;
+ border-radius: 8px;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0, inset rgba(255, 255, 255, 0.7) 0 -1px 0;
+ -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0, inset rgba(255, 255, 255, 0.7) 0 -1px 0;
+ box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0, inset rgba(255, 255, 255, 0.7) 0 -1px 0;
+}
+header ul li {
+ width: 79px;
+ float: left;
+ border-right: 1px solid #3A7CBE;
+ height: 38px;
+}
+header ul li.single {
+ border: none;
+}
+header ul li + li {
+ width: 78px;
+ border-left: 1px solid #8BBEF3;
+}
+header ul li + li + li {
+ border-right: none;
+ width: 79px;
+}
+header ul a {
+ line-height: 1;
+ font-size: 11px;
+ color: #fff;
+ color: rgba(255, 255, 255, 0.8);
+ display: block;
+ text-align: center;
+ font-weight: 400;
+ padding-top: 6px;
+ height: 40px;
+ text-shadow: rgba(0, 0, 0, 0.4) 0 -1px 0;
+}
+header ul a strong {
+ font-size: 14px;
+ display: block;
+ color: #fff;
+ -webkit-font-smoothing: antialiased;
+}
+
+section {
+ padding: 15px 20px;
+ font-size: 15px;
+ border-top: 1px solid #fff;
+ background: -webkit-gradient(linear, 50% 0%, 50% 700, color-stop(0%, #fafafa), color-stop(100%, #dedede));
+ background: -webkit-linear-gradient(#fafafa, #dedede 700px);
+ background: -moz-linear-gradient(#fafafa, #dedede 700px);
+ background: -o-linear-gradient(#fafafa, #dedede 700px);
+ background: -ms-linear-gradient(#fafafa, #dedede 700px);
+ background: linear-gradient(#fafafa, #dedede 700px);
+ -webkit-border-radius: 0 0 8px 8px;
+ -moz-border-radius: 0 0 8px 8px;
+ -ms-border-radius: 0 0 8px 8px;
+ -o-border-radius: 0 0 8px 8px;
+ border-radius: 0 0 8px 8px;
+ position: relative;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color: #222;
+ padding: 0;
+ margin: 0 0 20px;
+ line-height: 1.2;
+}
+
+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;
+}
+
+blockquote {
+ margin: 0 -20px 20px;
+ padding: 15px 20px 1px 40px;
+ font-style: italic;
+ background: #ccc;
+ background: rgba(0, 0, 0, 0.06);
+ color: #222;
+}
+
+img {
+ max-width: 100%;
+}
+
+code, pre {
+ font-family: Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal;
+ color: #333;
+ font-size: 12px;
+ overflow-x: auto;
+}
+
+pre {
+ padding: 20px;
+ background: #3A3C42;
+ color: #f8f8f2;
+ margin: 0 -20px 20px;
+}
+pre code {
+ color: #f8f8f2;
+}
+li pre {
+ margin-left: -60px;
+ padding-left: 60px;
+}
+
+table {
+ width: 100%;
+ border-collapse: collapse;
+}
+
+th, td {
+ text-align: left;
+ padding: 5px 10px;
+ border-bottom: 1px solid #aaa;
+}
+
+dt {
+ color: #222;
+ font-weight: 700;
+}
+
+th {
+ color: #222;
+}
+
+small {
+ font-size: 11px;
+}
+
+hr {
+ border: 0;
+ background: #aaa;
+ height: 1px;
+ margin: 0 0 20px;
+}
+
+footer {
+ width: 640px;
+ margin: 0 auto;
+ padding: 20px 0 0;
+ color: #ccc;
+ overflow: hidden;
+}
+footer a {
+ color: #fff;
+ font-weight: bold;
+}
+footer p {
+ float: left;
+}
+footer p + p {
+ float: right;
+}
+
+@media print, screen and (max-width: 740px) {
+ body {
+ padding: 0;
+ }
+
+ .wrapper {
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ -ms-border-radius: 0;
+ -o-border-radius: 0;
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ width: 100%;
+ }
+
+ footer {
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ -ms-border-radius: 0;
+ -o-border-radius: 0;
+ border-radius: 0;
+ padding: 20px;
+ width: auto;
+ }
+ footer p {
+ float: none;
+ margin: 0;
+ }
+ footer p + p {
+ float: none;
+ }
+}
+@media print, screen and (max-width:580px) {
+ header ul {
+ display: none;
+ }
+
+ header p.view {
+ display: block;
+ }
+
+ header p {
+ width: 100%;
+ }
+}
+@media print {
+ header p.view a small:before {
+ content: 'at http://github.com/';
+ }
+}