commit 960a5d9ddd989b261341cf10a44452c8fdd1e0ca Author: Tobias Klika Date: Mon Jul 8 13:34:06 2013 -0700 Create gh-pages branch via GitHub diff --git a/images/arrow-down.png b/images/arrow-down.png new file mode 100644 index 0000000..585b0bd Binary files /dev/null and b/images/arrow-down.png differ diff --git a/images/octocat-small.png b/images/octocat-small.png new file mode 100644 index 0000000..66c2539 Binary files /dev/null and b/images/octocat-small.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..eab68bc --- /dev/null +++ b/index.html @@ -0,0 +1,314 @@ + + + + + + PocketSharp by ceee + + + + + + + + +
+
+

PocketSharp

+

C# assembly for accessing the pocket API

+ + + +

This project is maintained by ceee

+ + +
+
+

+PocketSharp

+ +
+

This project is work in progress. +PocketSharp will be released as a NuGet package when ready.

+
+ +

PocketSharp is a C#.NET class library, that integrates the Pocket API v3 and consists of 4 parts:

+ +
    +
  • Authentication
  • +
  • Retrieve
  • +
  • Modify
  • +
  • Add
  • +

If you don't know Pocket, be sure to check it out. It's an awesome service that lets you save articles, videos, ... in the cloud and access it from all your devices.

+ +

+Usage Example

+ +

Request a Consumer Key on Pocket.

+ +

Include the PocketSharp namespace and it's associated models (you will need them later):

+ +
using PocketSharp;
+using PocketSharp.Models;
+
+ +

Initialize PocketClient with:

+ +
PocketClient _client = new PocketClient("[YOUR_CONSUMER_KEY]", "[YOUR_ACCESS_CODE]");
+
+ +

Do a simple request - e.g. a search for CSS:

+ +
_client.Search("css").ForEach(
+    item => Console.WriteLine(item.ID + " | " + item.Title)
+);
+
+ +

Which will output:

+ +
330361896 | CSS Front-end Frameworks with comparison : By usabli.ca
+345541438 | Editr - HTML, CSS, JavaScript playground
+251743431 | CSS Architecture
+343693149 | CSS3 Transitions - Thank God We Have A Specification!
+...
+
+ +

+Create an instance

+ +

Constructor:

+ +
PocketClient(string consumerKey, string accessCode = null, Uri callbackUri = null)
+
+ +

consumerKey: The API key +
accessCode: Provide an access code if the user is already authenticated +
callbackUri: The callback URL is called by Pocket after authentication

+ +

Example:

+ +
PocketClient _client = new PocketClient(
+    consumerKey: "123498237423498723498723",
+    callbackUri: new Uri("http://ceecore.com"),
+    accessCode: "097809-oi987-izi8-jk98-oiuu89"
+);
+
+ +

You can change the Access Code after initialization:

+ +
_client.AccessCode = "[YOU_ACCESS_CODE]";
+
+ +

Before authentication you will need to provide the callbackUri for authentication requests. +
After authentication you will need to provide the accessCode.

+ +

+Authentication

+ +

In order to communicate with a Pocket User, you will need a consumer key (which is generated by creating a new application on Pocket) and an Access Code.

+ +

The authentication is a 3-step process:

+ +

+1) Generate authentication URI

+ +

Receive the request code and authentication URI from the library by calling string GetRequestCode():

+ +
string requestCode = _client.GetRequestCode();
+// 0f453f2d-1605-8584-28fd-39af8e
+Uri authenticationUri = _client.GenerateAuthenticationUri();
+// https://getpocket.com/auth/authorize?request_token=0f453f2d-1605-8584-28fd-39af8e&redirect_uri=http%253a%252f%252fceecore.com
+
+ +

The request code is stored internally, but you can also provide it as param in GenerateAuthenticationUri(string requestCode = null).

+ +

+2) Redirect to Pocket

+ +

Next you need to redirect the user to the authenticationUri, which displays a prompt to grant permissions for the application (see image). After the user granted or denied, he/she is redirected to the callbackUri.

+ +

authentication screen

+ +

+3) Get Access Code

+ +

Call string GetAccessCode(string requestCode = null)

+ +
string accessCode = _client.GetAccessCode();
+// fa8bfc16-69b3-4d22-7db7-84a58d
+
+ +

Again, the received access code is stored internally. +Note that GetAccessCode can only be called with an existing request code. If you need to re-authenticate a user, start again with Step 1).

+ +

+Important

+ +

Be sure to permanently store the Access Code for your user. +
+Without it you would always have to redo the authentication process.

+ +

+Retrieve

+ +

Get list of all items:

+ +
List<PocketItem> items = _client.Retrieve();
+// equivalent to: _client.Retrieve(RetrieveFilter.All)
+
+ +

Find items by a tag:

+ +
List<PocketItem> items = _client.SearchByTag("tutorial");
+
+ +

Find items by a search string:

+ +
List<PocketItem> items = _client.Search("css");
+
+ +

Find items by a filter:

+ +
List<PocketItem> items = _client.Retrieve(RetrieveFilter.Favorite); // only favorites
+
+ +

The RetrieveFilter Enum is specified as follows:

+ +
enum RetrieveFilter { All, Unread, Archive, Favorite, Article, Video, Image }
+
+ +

+Custom Parameters

+ +

You can create a completely custom parameter list for retrieval with the POCO RetrieveParameters:

+ +
var parameters = new RetrieveParameters()
+{
+    Count = 50,
+    Offset = 100,
+    Sort = SortEnum.oldest
+    ...
+};
+
+List<PocketItem> items = _client.Retrieve(parameters);
+
+ +

+Add

+ +

Adds a new item to your pocket list. +Accepts four parameters, with uri being required.

+ +
PocketItem Add(Uri uri, string[] tags = null, string title = null, string tweetID = null)
+
+ +

Example:

+ +
PocketItem newItem = _client.Add(
+    new Uri("http://www.neowin.net/news/full-build-2013-conference-sessions-listing-revealed"),
+    new string[] { "microsoft", "neowin", "build" }
+);
+
+ +

The title can be included for cases where an item does not have a title, which is typical for image or PDF URLs. If Pocket detects a title from the content of the page, this parameter will be ignored.

+ +

If you are adding Pocket support to a Twitter client, please send along a reference to the tweet status id (with the tweetID). This allows Pocket to show the original tweet alongside the article.

+ +

+Modify

+ +

All Modify methods accept either the itemID (as int) or a PocketItem as parameter.

+ +

Archive the specified item:

+ +
bool isSuccess = _client.Archive(myPocketItem);
+
+ +

Un-archive the specified item:

+ +
bool isSuccess = _client.Unarchive(myPocketItem);
+
+ +

Favorites the specified item:

+ +
bool isSuccess = _client.Favorite(myPocketItem);
+
+ +

Un-favorites the specified item:

+ +
bool isSuccess = _client.Unfavorite(myPocketItem);
+
+ +

Deletes the specified item:

+ +
bool isSuccess = _client.Delete(myPocketItem);
+
+ +

+Modify tags

+ +

Add tags to the specified item:

+ +
bool isSuccess = _client.AddTags(myPocketItem, new string[] { "css", "2013" });
+
+ +

Remove tags from the specified item:

+ +
bool isSuccess = _client.RemoveTags(myPocketItem, new string[] { "css", "2013" });
+
+ +

Remove all tags from the specified item:

+ +
bool isSuccess = _client.RemoveTags(myPocketItem);
+
+ +

Replaces all existing tags with new ones for the specified item:

+ +
bool isSuccess = _client.ReplaceTags(myPocketItem, new string[] { "css", "2013" });
+
+ +

Renames a tag for the specified item:

+ +
bool isSuccess = _client.RenameTag(myPocketItem, "oldTagName", "newTagName");
+
+ +

+Release History

+ +
    +
  • 2013-07-07 v0.3.1 authentication fixes
  • +
  • 2013-07-02 v0.3.0 update authentication process
  • +
  • 2013-06-27 v0.2.0 add, modify item & modify tags
  • +
  • 2013-06-26 v0.1.0 authentication & retrieve functionality
  • +

+Used Packages

+ +

+Contributors

+ + + + + + + + +
twitter/artistandsocial
Tobias Klika @ceee
+
+ +
+ + + + \ 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..2bb9a08 --- /dev/null +++ b/params.json @@ -0,0 +1 @@ +{"name":"PocketSharp","tagline":"C# assembly for accessing the pocket API","body":"# PocketSharp\r\n\r\n> This project is work in progress.\r\n> PocketSharp will be released as a NuGet package when ready.\r\n\r\n**PocketSharp** is a C#.NET class library, that integrates the [Pocket API v3](http://getpocket.com/developer) and consists of 4 parts:\r\n\r\n- Authentication\r\n- Retrieve\r\n- Modify\r\n- Add\r\n\r\n---\r\n\r\n_If you don't know [Pocket](http://getpocket.com), be sure to check it out. It's an awesome service that lets you save articles, videos, ... in the cloud and access it from all your devices._\r\n\r\n---\r\n\r\n## Usage Example\r\n\r\nRequest a [Consumer Key on Pocket.](http://getpocket.com/developer/apps/)\r\n\r\nInclude the PocketSharp namespace and it's associated models (you will need them later):\r\n\r\n```csharp\r\nusing PocketSharp;\r\nusing PocketSharp.Models;\r\n```\r\n\r\nInitialize PocketClient with:\r\n\r\n```csharp\r\nPocketClient _client = new PocketClient(\"[YOUR_CONSUMER_KEY]\", \"[YOUR_ACCESS_CODE]\");\r\n```\r\n\r\nDo a simple request - e.g. a search for `CSS`:\r\n\r\n```csharp\r\n_client.Search(\"css\").ForEach(\r\n\titem => Console.WriteLine(item.ID + \" | \" + item.Title)\r\n);\r\n```\r\n\r\nWhich will output:\r\n\r\n 330361896 | CSS Front-end Frameworks with comparison : By usabli.ca\r\n 345541438 | Editr - HTML, CSS, JavaScript playground\r\n 251743431 | CSS Architecture\r\n 343693149 | CSS3 Transitions - Thank God We Have A Specification!\r\n\t...\r\n\r\n## Create an instance\r\n\r\nConstructor:\r\n\r\n```csharp\r\nPocketClient(string consumerKey, string accessCode = null, Uri callbackUri = null)\r\n```\r\n\r\n`consumerKey`: The API key\r\n
\r\n`accessCode`: Provide an access code if the user is already authenticated\r\n
\r\n`callbackUri`: The callback URL is called by Pocket after authentication\r\n\r\nExample:\r\n\r\n```csharp\r\nPocketClient _client = new PocketClient(\r\n\tconsumerKey: \"123498237423498723498723\",\r\n\tcallbackUri: new Uri(\"http://ceecore.com\"),\r\n\taccessCode: \"097809-oi987-izi8-jk98-oiuu89\"\r\n);\r\n```\r\n\r\nYou can change the _Access Code_ after initialization:\r\n\r\n```csharp\r\n_client.AccessCode = \"[YOU_ACCESS_CODE]\";\r\n```\r\n\r\n**Before authentication** you will need to provide the `callbackUri` for authentication requests.\r\n
\r\n**After authentication** you will need to provide the `accessCode`.\r\n\r\n## Authentication\r\n\r\nIn order to communicate with a Pocket User, you will need a consumer key (which is generated by [creating a new application on Pocket](http://getpocket.com/developer/apps/)) and an **Access Code**.\r\n\r\nThe authentication is a 3-step process:\r\n\r\n#### 1) Generate authentication URI\r\n\r\nReceive the **request code** and **authentication URI** from the library by calling `string GetRequestCode()`:\r\n\r\n```csharp\r\nstring requestCode = _client.GetRequestCode();\r\n// 0f453f2d-1605-8584-28fd-39af8e\r\nUri authenticationUri = _client.GenerateAuthenticationUri();\r\n// https://getpocket.com/auth/authorize?request_token=0f453f2d-1605-8584-28fd-39af8e&redirect_uri=http%253a%252f%252fceecore.com\r\n```\r\n\r\nThe _request code_ is stored internally, but you can also provide it as param in `GenerateAuthenticationUri(string requestCode = null)`.\r\n\r\n#### 2) Redirect to Pocket\r\nNext you need to redirect the user to the `authenticationUri`, which displays a prompt to grant permissions for the application (see image). After the user granted or denied, he/she is redirected to the `callbackUri`.\r\n\r\n![authentication screen](https://raw.github.com/ceee/PocketSharp/master/PocketSharp/authentication-screen.png)\r\n\r\n#### 3) Get Access Code\r\nCall `string GetAccessCode(string requestCode = null)`\r\n\r\n```csharp\r\nstring accessCode = _client.GetAccessCode();\r\n// fa8bfc16-69b3-4d22-7db7-84a58d\r\n```\r\n\r\nAgain, the received _access code_ is stored internally.\r\nNote that `GetAccessCode` can only be called with an existing _request code_. If you need to re-authenticate a user, start again with Step 1).\r\n\r\n#### Important\r\n\r\n**Be sure to permanently store the _Access Code_ for your user.**\r\n
\r\nWithout it you would always have to redo the authentication process.\r\n\r\n## Retrieve\r\n\r\nGet list of all items:\r\n\r\n```csharp\r\nList items = _client.Retrieve();\r\n// equivalent to: _client.Retrieve(RetrieveFilter.All)\r\n```\r\n\r\nFind items by a tag:\r\n\r\n```csharp\r\nList items = _client.SearchByTag(\"tutorial\");\r\n```\r\n\r\nFind items by a search string:\r\n\r\n```csharp\r\nList items = _client.Search(\"css\");\r\n```\r\n\r\nFind items by a filter:\r\n\r\n```csharp\r\nList items = _client.Retrieve(RetrieveFilter.Favorite); // only favorites\r\n```\r\n\r\nThe RetrieveFilter Enum is specified as follows:\r\n\r\n```csharp\r\nenum RetrieveFilter { All, Unread, Archive, Favorite, Article, Video, Image }\r\n```\r\n\r\n#### Custom Parameters\r\n\r\nYou can create a completely custom parameter list for retrieval with the POCO `RetrieveParameters`:\r\n\r\n```csharp\r\nvar parameters = new RetrieveParameters()\r\n{\r\n\tCount = 50,\r\n\tOffset = 100,\r\n\tSort = SortEnum.oldest\r\n\t...\r\n};\r\n\r\nList items = _client.Retrieve(parameters);\r\n```\r\n\r\n## Add\r\n\r\nAdds a new item to your pocket list.\r\nAccepts four parameters, with `uri` being required.\r\n\r\n```csharp\r\nPocketItem Add(Uri uri, string[] tags = null, string title = null, string tweetID = null)\r\n```\r\n\r\nExample:\r\n\r\n```csharp\r\nPocketItem newItem = _client.Add(\r\n\tnew Uri(\"http://www.neowin.net/news/full-build-2013-conference-sessions-listing-revealed\"),\r\n\tnew string[] { \"microsoft\", \"neowin\", \"build\" }\r\n);\r\n```\r\n\r\nThe title can be included for cases where an item does not have a title, which is typical for image or PDF URLs. If Pocket detects a title from the content of the page, this parameter will be ignored.\r\n\r\nIf you are adding Pocket support to a Twitter client, please send along a reference to the tweet status id (with the tweetID). This allows Pocket to show the original tweet alongside the article.\r\n\r\n## Modify\r\n\r\nAll Modify methods accept either the itemID (as int) or a `PocketItem` as parameter.\r\n\r\nArchive the specified item:\r\n\r\n\tbool isSuccess = _client.Archive(myPocketItem);\r\n\r\nUn-archive the specified item:\r\n\r\n\tbool isSuccess = _client.Unarchive(myPocketItem);\r\n\r\nFavorites the specified item:\r\n\r\n\tbool isSuccess = _client.Favorite(myPocketItem);\r\n\r\nUn-favorites the specified item:\r\n\r\n\tbool isSuccess = _client.Unfavorite(myPocketItem);\r\n\r\nDeletes the specified item:\r\n\r\n\tbool isSuccess = _client.Delete(myPocketItem);\r\n\r\n#### Modify tags\r\n\r\nAdd tags to the specified item:\r\n\r\n\tbool isSuccess = _client.AddTags(myPocketItem, new string[] { \"css\", \"2013\" });\r\n\r\nRemove tags from the specified item:\r\n\r\n\tbool isSuccess = _client.RemoveTags(myPocketItem, new string[] { \"css\", \"2013\" });\r\n\r\nRemove all tags from the specified item:\r\n\r\n\tbool isSuccess = _client.RemoveTags(myPocketItem);\r\n\r\nReplaces all existing tags with new ones for the specified item:\r\n\r\n\tbool isSuccess = _client.ReplaceTags(myPocketItem, new string[] { \"css\", \"2013\" });\r\n\r\nRenames a tag for the specified item:\r\n\r\n\tbool isSuccess = _client.RenameTag(myPocketItem, \"oldTagName\", \"newTagName\");\r\n\r\n---\r\n\r\n## Release History\r\n\r\n- 2013-07-07 v0.3.1 authentication fixes\r\n- 2013-07-02 v0.3.0 update authentication process \r\n- 2013-06-27 v0.2.0 add, modify item & modify tags\r\n- 2013-06-26 v0.1.0 authentication & retrieve functionality\r\n\r\n## Used Packages\r\n\r\n- [RestSharp](http://restsharp.org/)\r\n- [ServiceStack.Text](https://github.com/ServiceStack/ServiceStack.Text)\r\n\r\n## Contributors\r\n| [![twitter/artistandsocial](http://gravatar.com/avatar/9c61b1f4307425f12f05d3adb930ba66?s=70)](http://twitter.com/artistandsocial \"Follow @artistandsocial on Twitter\") |\r\n|---|\r\n| [Tobias Klika @ceee](https://github.com/ceee) |","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..c6a6452 --- /dev/null +++ b/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 } diff --git a/stylesheets/styles.css b/stylesheets/styles.css new file mode 100644 index 0000000..f14d9e4 --- /dev/null +++ b/stylesheets/styles.css @@ -0,0 +1,413 @@ +@import url(https://fonts.googleapis.com/css?family=Arvo:400,700,400italic); + +/* MeyerWeb Reset */ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + vertical-align: baseline; +} + + +/* Base text styles */ + +body { + padding:10px 50px 0 0; + font-family:"Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + color: #232323; + background-color: #FBFAF7; + margin: 0; + line-height: 1.8em; + -webkit-font-smoothing: antialiased; + +} + +h1, h2, h3, h4, h5, h6 { + color:#232323; + margin:36px 0 10px; +} + +p, ul, ol, table, dl { + margin:0 0 22px; +} + +h1, h2, h3 { + font-family: Arvo, Monaco, serif; + line-height:1.3; + font-weight: normal; +} + +h1,h2, h3 { + display: block; + border-bottom: 1px solid #ccc; + padding-bottom: 5px; +} + +h1 { + font-size: 30px; +} + +h2 { + font-size: 24px; +} + +h3 { + font-size: 18px; +} + +h4, h5, h6 { + font-family: Arvo, Monaco, serif; + font-weight: 700; +} + +a { + color:#C30000; + font-weight:200; + text-decoration:none; +} + +a:hover { + text-decoration: underline; +} + +a small { + font-size: 12px; +} + +em { + font-style: italic; +} + +strong { + font-weight:700; +} + +ul li { + list-style: inside; + padding-left: 25px; +} + +ol li { + list-style: decimal inside; + padding-left: 20px; +} + +blockquote { + margin: 0; + padding: 0 0 0 20px; + font-style: italic; +} + +dl, dt, dd, dl p { + font-color: #444; +} + +dl dt { + font-weight: bold; +} + +dl dd { + padding-left: 20px; + font-style: italic; +} + +dl p { + padding-left: 20px; + font-style: italic; +} + +hr { + border:0; + background:#ccc; + height:1px; + margin:0 0 24px; +} + +/* Images */ + +img { + position: relative; + margin: 0 auto; + max-width: 650px; + padding: 5px; + margin: 10px 0 32px 0; + border: 1px solid #ccc; +} + + +/* Code blocks */ + +code, pre { + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; + color:#000; + font-size:14px; +} + +pre { + padding: 4px 12px; + background: #FDFEFB; + border-radius:4px; + border:1px solid #D7D8C8; + overflow: auto; + overflow-y: hidden; + margin-bottom: 32px; +} + + +/* Tables */ + +table { + width:100%; +} + +table { + border: 1px solid #ccc; + margin-bottom: 32px; + text-align: left; + } + +th { + font-family: 'Arvo', Helvetica, Arial, sans-serif; + font-size: 18px; + font-weight: normal; + padding: 10px; + background: #232323; + color: #FDFEFB; + } + +td { + padding: 10px; + background: #ccc; + } + + +/* Wrapper */ +.wrapper { + width:960px; +} + + +/* Header */ + +header { + background-color: #171717; + color: #FDFDFB; + width:170px; + float:left; + position:fixed; + border: 1px solid #000; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + padding: 34px 25px 22px 50px; + margin: 30px 25px 0 0; + -webkit-font-smoothing: antialiased; +} + +p.header { + font-size: 16px; +} + +h1.header { + font-family: Arvo, sans-serif; + font-size: 30px; + font-weight: 300; + line-height: 1.3em; + border-bottom: none; + margin-top: 0; +} + + +h1.header, a.header, a.name, header a{ + color: #fff; +} + +a.header { + text-decoration: underline; +} + +a.name { + white-space: nowrap; +} + +header ul { + list-style:none; + padding:0; +} + +header li { + list-style-type: none; + width:132px; + height:15px; + margin-bottom: 12px; + line-height: 1em; + padding: 6px 6px 6px 7px; + + background: #AF0011; + background: -moz-linear-gradient(top, #AF0011 0%, #820011 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd)); + background: -webkit-linear-gradient(top, #AF0011 0%,#820011 100%); + background: -o-linear-gradient(top, #AF0011 0%,#820011 100%); + background: -ms-linear-gradient(top, #AF0011 0%,#820011 100%); + background: linear-gradient(top, #AF0011 0%,#820011 100%); + + border-radius:4px; + border:1px solid #0D0D0D; + + -webkit-box-shadow: inset 0px 1px 1px 0 rgba(233,2,38, 1); + box-shadow: inset 0px 1px 1px 0 rgba(233,2,38, 1); + +} + +header li:hover { + background: #C3001D; + background: -moz-linear-gradient(top, #C3001D 0%, #950119 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd)); + background: -webkit-linear-gradient(top, #C3001D 0%,#950119 100%); + background: -o-linear-gradient(top, #C3001D 0%,#950119 100%); + background: -ms-linear-gradient(top, #C3001D 0%,#950119 100%); + background: linear-gradient(top, #C3001D 0%,#950119 100%); +} + +a.buttons { + -webkit-font-smoothing: antialiased; + background: url(../images/arrow-down.png) no-repeat; + font-weight: normal; + text-shadow: rgba(0, 0, 0, 0.4) 0 -1px 0; + padding: 2px 2px 2px 22px; + height: 30px; +} + +a.github { + background: url(../images/octocat-small.png) no-repeat 1px; +} + +a.buttons:hover { + color: #fff; + text-decoration: none; +} + + +/* Section - for main page content */ + +section { + width:650px; + float:right; + padding-bottom:50px; +} + + +/* Footer */ + +footer { + width:170px; + float:left; + position:fixed; + bottom:10px; + padding-left: 50px; +} + +@media print, screen and (max-width: 960px) { + + div.wrapper { + width:auto; + margin:0; + } + + header, section, footer { + float:none; + position:static; + width:auto; + } + + footer { + border-top: 1px solid #ccc; + margin:0 84px 0 50px; + padding:0; + } + + header { + padding-right:320px; + } + + section { + padding:20px 84px 20px 50px; + margin:0 0 20px; + } + + header a small { + display:inline; + } + + header ul { + position:absolute; + right:130px; + top:84px; + } +} + +@media print, screen and (max-width: 720px) { + body { + word-wrap:break-word; + } + + header { + padding:10px 20px 0; + margin-right: 0; + } + + section { + padding:10px 0 10px 20px; + margin:0 0 30px; + } + + footer { + margin: 0 0 0 30px; + } + + header ul, header p.view { + position:static; + } +} + +@media print, screen and (max-width: 480px) { + + header ul li.download { + display:none; + } + + footer { + margin: 0 0 0 20px; + } + + footer a{ + display:block; + } + +} + +@media print { + body { + padding:0.4in; + font-size:12pt; + color:#444; + } +} \ No newline at end of file