Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8f87db25d9 | |||
| dacf3f218f | |||
| 22c4abc14c | |||
| 7794328b2f |
@@ -1,2 +0,0 @@
|
|||||||
constants.rb
|
|
||||||
*.md
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
GEM
|
|
||||||
remote: https://rubygems.org/
|
|
||||||
specs:
|
|
||||||
addressable (2.3.6)
|
|
||||||
descendants_tracker (0.0.4)
|
|
||||||
thread_safe (~> 0.3, >= 0.3.1)
|
|
||||||
faraday (0.9.0)
|
|
||||||
multipart-post (>= 1.2, < 3)
|
|
||||||
github_api (0.12.2)
|
|
||||||
addressable (~> 2.3)
|
|
||||||
descendants_tracker (~> 0.0.4)
|
|
||||||
faraday (~> 0.8, < 0.10)
|
|
||||||
hashie (>= 3.3)
|
|
||||||
multi_json (>= 1.7.5, < 2.0)
|
|
||||||
nokogiri (~> 1.6.3)
|
|
||||||
oauth2
|
|
||||||
hashie (3.3.1)
|
|
||||||
httparty (0.13.2)
|
|
||||||
json (~> 1.8)
|
|
||||||
multi_xml (>= 0.5.2)
|
|
||||||
json (1.8.1)
|
|
||||||
jwt (1.0.0)
|
|
||||||
mini_portile (0.6.1)
|
|
||||||
multi_json (1.10.1)
|
|
||||||
multi_xml (0.5.5)
|
|
||||||
multipart-post (2.0.0)
|
|
||||||
nokogiri (1.6.4)
|
|
||||||
mini_portile (~> 0.6.0)
|
|
||||||
oauth2 (1.0.0)
|
|
||||||
faraday (>= 0.8, < 0.10)
|
|
||||||
jwt (~> 1.0)
|
|
||||||
multi_json (~> 1.3)
|
|
||||||
multi_xml (~> 0.5)
|
|
||||||
rack (~> 1.2)
|
|
||||||
rack (1.5.2)
|
|
||||||
thread_safe (0.3.4)
|
|
||||||
|
|
||||||
PLATFORMS
|
|
||||||
ruby
|
|
||||||
|
|
||||||
DEPENDENCIES
|
|
||||||
github_api
|
|
||||||
httparty
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
Github Changelog Generator
|
|
||||||
==================
|
|
||||||
|
|
||||||
[](http://badge.fury.io/rb/github_changelog_generator)
|
|
||||||
|
|
||||||
This script automatically generate change-log from your tags and merged pull-requests.
|
|
||||||
|
|
||||||
## Installation:
|
|
||||||
`gem install github_changelog_generator`
|
|
||||||
|
|
||||||
## Usage:
|
|
||||||
|
|
||||||
### Example usage:
|
|
||||||
`github_changelog_generator -u github-username -p github-project`
|
|
||||||
|
|
||||||
In output you will get `[your_project]_CHANGELOG.md` file with *pretty Markdown-formatted* changelogs in your current directory.
|
|
||||||
|
|
||||||
### Params:
|
|
||||||
github_changelog_generator -u user_name -p project_name [-t 16-digit-GitHubToken] [options]
|
|
||||||
-u, --user [USER] your username on GitHub
|
|
||||||
-p, --project [PROJECT] name of project on GitHub
|
|
||||||
-t, --token [TOKEN] To make more than 50 requests this app required your OAuth token for GitHub. You can generate it on https://github.com/settings/applications
|
|
||||||
-h, --help Displays Help
|
|
||||||
-v, --[no-]verbose Run verbosely
|
|
||||||
-l, --last-changes generate log between last 2 tags
|
|
||||||
-f, --date-format [FORMAT] date format. default is %d/%m/%y
|
|
||||||
|
|
||||||
|
|
||||||
## Real examples:
|
|
||||||
### [This changelog](https://github.com/skywinder/ActionSheetPicker-3.0/blob/master/CHANGELOG.md) was generated by
|
|
||||||
`github_changelog_generator -u skywinder -p ActionSheetPicker-3.0`: [ActionSheetPicker-3.0/CHANGELOG.md](https://github.com/skywinder/ActionSheetPicker-3.0/blob/master/CHANGELOG.md)
|
|
||||||
|
|
||||||
## FAQ
|
|
||||||
Since GitHub allow to make only 50 requests without authentication it's recommended to run this scrip with key `-t [your 16 digit token]` that you can easily **[generate here](https://github.com/settings/applications)**.
|
|
||||||
|
|
||||||
So, if you got error like this:
|
|
||||||
>! /Library/Ruby/Gems/2.0.0/gems/github_api-0.12.2/lib/github_api/response/raise_error.rb:14:in `on_complete': GET https://api.github.com/repos/skywinder/ActionSheetPicker-3.0/git/commits/89678f7d7f66873c858e6cb07bf697192aca6768: 403 API rate limit exceeded for 195.88.177.9. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.) (Github::Error::Forbidden)
|
|
||||||
|
|
||||||
Then you have to generate this token or wait for 1 hour
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
Github Changelog Generator is released under the [MIT License](http://www.opensource.org/licenses/MIT).
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
1. Create an issue to discuss about your idea
|
|
||||||
2. [Fork it] (https://github.com/skywinder/Github-Changelog-Generator/fork)
|
|
||||||
3. Create your feature branch (`git checkout -b my-new-feature`)
|
|
||||||
4. Commit your changes (`git commit -am 'Add some feature'`)
|
|
||||||
5. Push to the branch (`git push origin my-new-feature`)
|
|
||||||
6. Create a new Pull Request
|
|
||||||
|
|
||||||
**Bug reports, feature requests, patches, well-wishes, and rap demo tapes are always welcome!**
|
|
||||||
|
|
||||||
*Improvements more than welcome - they are kindly requested! :)*
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
#!/usr/bin/env ruby
|
|
||||||
|
|
||||||
require 'github_changelog_generator'
|
|
||||||
|
|
||||||
ChangelogGenerator.new.compund_changelog
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
Gem::Specification.new do |s|
|
|
||||||
s.name = "github_changelog_generator"
|
|
||||||
s.version = "0.0.2"
|
|
||||||
s.default_executable = "github_changelog_generator"
|
|
||||||
|
|
||||||
s.required_ruby_version = '>= 1.9.3'
|
|
||||||
s.authors = ["Petr Korolev"]
|
|
||||||
s.date = %q{2014-10-10}
|
|
||||||
s.description = %q{Script, that automatically generate change-log from your tags and pull-requests}
|
|
||||||
s.email = %q{sky4winder+github_changelog_generator@gmail.com}
|
|
||||||
s.files = ["lib/github_changelog_generator.rb", "lib/github_changelog_generator/parser.rb", "bin/github_changelog_generator"]
|
|
||||||
s.homepage = %q{https://github.com/skywinder/Github-Changelog-Generator}
|
|
||||||
s.require_paths = ["lib"]
|
|
||||||
s.rubygems_version = %q{1.6.2}
|
|
||||||
s.summary = %q{Script, that automatically generate change-log from your tags and pull-requests.}
|
|
||||||
s.license = "MIT"
|
|
||||||
s.add_runtime_dependency(%q<httparty>, ["~> 0.13"])
|
|
||||||
s.add_runtime_dependency(%q<github_api>, ["~> 0.12"])
|
|
||||||
|
|
||||||
s.executables = %w(github_changelog_generator)
|
|
||||||
end
|
|
||||||
|
After Width: | Height: | Size: 216 B |
|
After Width: | Height: | Size: 78 B |
|
After Width: | Height: | Size: 463 B |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 130 B |
|
After Width: | Height: | Size: 216 B |
|
After Width: | Height: | Size: 477 B |
|
After Width: | Height: | Size: 357 B |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 741 B |
|
After Width: | Height: | Size: 735 B |
@@ -0,0 +1,352 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset='utf-8'>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||||
|
<link href='https://fonts.googleapis.com/css?family=Chivo:900' rel='stylesheet' type='text/css'>
|
||||||
|
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen">
|
||||||
|
<link rel="stylesheet" type="text/css" href="stylesheets/pygment_trac.css" media="screen">
|
||||||
|
<link rel="stylesheet" type="text/css" href="stylesheets/print.css" media="print">
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<title>Github-changelog-generator by skywinder</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<div class="inner">
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<h1>Github-changelog-generator</h1>
|
||||||
|
<h2>Automatically generate changelog from your tags, closed issues and merged pull requests.</h2>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section id="downloads" class="clearfix">
|
||||||
|
<a href="https://github.com/skywinder/github-changelog-generator/zipball/master" id="download-zip" class="button"><span>Download .zip</span></a>
|
||||||
|
<a href="https://github.com/skywinder/github-changelog-generator/tarball/master" id="download-tar-gz" class="button"><span>Download .tar.gz</span></a>
|
||||||
|
<a href="https://github.com/skywinder/github-changelog-generator" id="view-on-github" class="button"><span>View on GitHub</span></a>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<section id="main_content">
|
||||||
|
<p><a href="http://badge.fury.io/rb/github_changelog_generator"><img src="https://badge.fury.io/rb/github_changelog_generator.svg" alt="Gem Version"></a>
|
||||||
|
<a href="https://travis-ci.org/skywinder/Github-Changelog-Generator"><img src="https://travis-ci.org/skywinder/Github-Changelog-Generator.svg?branch=master" alt="Build Status"></a></p>
|
||||||
|
|
||||||
|
<h1>
|
||||||
|
<a id="github-changelog-generator" class="anchor" href="#github-changelog-generator" aria-hidden="true"><span class="octicon octicon-link"></span></a>GitHub Changelog Generator</h1>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="#installation">Installation</a></li>
|
||||||
|
<li><a href="#output-example">Output example</a></li>
|
||||||
|
<li>
|
||||||
|
<a href="#usage">Usage</a>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="#params">Params</a></li>
|
||||||
|
<li><a href="#github-token">GitHub token</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#features-and-advantages-of-this-project">Features and advantages of this project</a>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="#alternatives">Alternatives</a></li>
|
||||||
|
<li><a href="#projects-using-this-library">Projects using this library</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="#am-i-missed-some-essential-feature">Am I missed some essential feature?</a></li>
|
||||||
|
<li><a href="#contributing">Contributing</a></li>
|
||||||
|
<li><a href="#license">License</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>
|
||||||
|
<a id="changelog-generation-has-never-been-so-easy" class="anchor" href="#changelog-generation-has-never-been-so-easy" aria-hidden="true"><span class="octicon octicon-link"></span></a>Changelog generation has never been so easy:</h3>
|
||||||
|
|
||||||
|
<p><strong>Fully automate changelog generation</strong> - This gem generate change log file based on <strong>tags</strong>, <strong>issues</strong> and merged <strong>pull requests</strong> (and split them to separate lists according labels) from <img class="emoji" title=":octocat:" alt=":octocat:" src="https://assets-cdn.github.com/images/icons/emoji/octocat.png" height="20" width="20" align="absmiddle"> GitHub Issue Tracker.</p>
|
||||||
|
|
||||||
|
<p>Since now you don't have to fill your <code>CHANGELOG.md</code> manually: just run script, relax and take a cup of <img class="emoji" title=":coffee:" alt=":coffee:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/2615.png" height="20" width="20" align="absmiddle"> before your next release! <img class="emoji" title=":tada:" alt=":tada:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f389.png" height="20" width="20" align="absmiddle"></p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<h3>
|
||||||
|
<a id="whats-the-point-of-a-change-log" class="anchor" href="#whats-the-point-of-a-change-log" aria-hidden="true"><span class="octicon octicon-link"></span></a><em>What’s the point of a change log?</em>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<p>To make it easier for users and contributors to see precisely what notable changes have been made between each release (or version) of the project.</p>
|
||||||
|
|
||||||
|
<h3>
|
||||||
|
<a id="why-should-i-care" class="anchor" href="#why-should-i-care" aria-hidden="true"><span class="octicon octicon-link"></span></a><em>Why should I care?</em>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<p>Because software tools are for people. If you don’t care, why are you contributing to open source? Surely, there must be a kernel (ha!) of care somewhere in that lovely little brain of yours.</p>
|
||||||
|
|
||||||
|
<p><img class="emoji" title=":copyright:" alt=":copyright:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/00a9.png" height="20" width="20" align="absmiddle"> <em><a href="http://keepachangelog.com/">http://keepachangelog.com</a></em></p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<a id="installation" class="anchor" href="#installation" aria-hidden="true"><span class="octicon octicon-link"></span></a>Installation</h2>
|
||||||
|
|
||||||
|
<pre><code>[sudo] gem install github_changelog_generator
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<a id="output-example" class="anchor" href="#output-example" aria-hidden="true"><span class="octicon octicon-link"></span></a>Output example</h2>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Look at <strong><a href="https://github.com/skywinder/Github-Changelog-Generator/blob/master/CHANGELOG.md">CHANGELOG.md</a></strong> for this project</li>
|
||||||
|
<li>
|
||||||
|
<p><a href="https://github.com/skywinder/ActionSheetPicker-3.0/blob/master/CHANGELOG.md">ActionSheetPicker-3.0/CHANGELOG.md</a> was generated by command:</p>
|
||||||
|
|
||||||
|
<pre><code>github_changelog_generator -u skywinder -p ActionSheetPicker-3.0
|
||||||
|
</code></pre>
|
||||||
|
</li>
|
||||||
|
<li><p>In general it looks like this:</p></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<h2>
|
||||||
|
<a id="125-2015-01-15" class="anchor" href="#125-2015-01-15" aria-hidden="true"><span class="octicon octicon-link"></span></a>
|
||||||
|
<a href="https://github.com/skywinder/Github-Changelog-Generator/tree/1.2.5">1.2.5</a> (2015-01-15)</h2>
|
||||||
|
|
||||||
|
<p><a href="https://github.com/skywinder/Github-Changelog-Generator/compare/1.2.4...1.2.5">Full Changelog</a></p>
|
||||||
|
|
||||||
|
<p><strong>Implemented enhancements:</strong></p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Use milestone to specify in which version bug was fixed <a href="https://github.com/skywinder/Github-Changelog-Generator/issues/22">#22</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p><strong>Fixed bugs:</strong></p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Error when trying to generate log for repo without tags <a href="https://github.com/skywinder/Github-Changelog-Generator/issues/32">#32</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p><strong>Merged pull requests:</strong></p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><p>PrettyPrint class is included using lowercase 'pp' <a href="https://github.com/skywinder/Github-Changelog-Generator/pull/43">#43</a> (<a href="https://github.com/schwing">schwing</a>)</p></li>
|
||||||
|
<li><p>support enterprise github via command line options <a href="https://github.com/skywinder/Github-Changelog-Generator/pull/42">#42</a> (<a href="https://github.com/glenlovett">glenlovett</a>)</p></li>
|
||||||
|
</ul>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<a id="usage" class="anchor" href="#usage" aria-hidden="true"><span class="octicon octicon-link"></span></a>Usage</h2>
|
||||||
|
|
||||||
|
<p><strong>It's really simple</strong>: </p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p>If your <strong>git remote</strong> <code>origin</code> refer to your GitHub repo, then just go to your project folder and run:</p>
|
||||||
|
|
||||||
|
<pre><code>github_changelog_generator
|
||||||
|
</code></pre>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>or from anywhere:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><code>github_changelog_generator -u github_username -p github_project</code></li>
|
||||||
|
<li><code>github_changelog_generator github_username/github_project</code></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>As output you will get <code>CHANGELOG.md</code> file with pretty <em>Markdown-formatted</em> changelog.</p>
|
||||||
|
|
||||||
|
<h3>
|
||||||
|
<a id="params" class="anchor" href="#params" aria-hidden="true"><span class="octicon octicon-link"></span></a>Params</h3>
|
||||||
|
|
||||||
|
<p>Type <code>github_changelog_generator --help</code> for detailed usage.</p>
|
||||||
|
|
||||||
|
<pre><code>Usage: changelog_generator [options]
|
||||||
|
-u, --user [USER] Username of the owner of target GitHub repo
|
||||||
|
-p, --project [PROJECT] Name of project on GitHub
|
||||||
|
-t, --token [TOKEN] To make more than 50 requests per hour your GitHub token required. You can generate it here: https://github.com/settings/tokens/new
|
||||||
|
-f, --date-format [FORMAT] Date format. Default is %d/%m/%y
|
||||||
|
-o, --output [NAME] Output file. Default is CHANGELOG.md
|
||||||
|
--[no-]verbose Run verbosely. Default is true
|
||||||
|
--[no-]issues Include closed issues to changelog. Default is true
|
||||||
|
--[no-]issues-wo-labels Include closed issues without labels to changelog. Default is true
|
||||||
|
--[no-]pr-wo-labels Include pull requests without labels to changelog. Default is true
|
||||||
|
--[no-]pull-requests Include pull-requests to changelog. Default is true
|
||||||
|
--[no-]filter-by-milestone Use milestone to detect when issue was resolved. Default is true
|
||||||
|
--[no-]author Add author of pull-request in the end. Default is true
|
||||||
|
--unreleased-only Generate log from unreleased closed issues only.
|
||||||
|
--[no-]unreleased Add to log unreleased closed issues. Default is true
|
||||||
|
--[no-]compare-link Include compare link between older version and newer version. Default is true
|
||||||
|
--include-labels x,y,z Issues only with that labels will be included to changelog. Default is 'bug,enhancement'
|
||||||
|
--exclude-labels x,y,z Issues with that labels will be always excluded from changelog. Default is 'duplicate,question,invalid,wontfix'
|
||||||
|
--github-site [URL] The Enterprise Github site on which your project is hosted.
|
||||||
|
--github-api [URL] The enterprise endpoint to use for your Github API.
|
||||||
|
-v, --version Print version number
|
||||||
|
-h, --help Displays Help
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<h3>
|
||||||
|
<a id="github-token" class="anchor" href="#github-token" aria-hidden="true"><span class="octicon octicon-link"></span></a>GitHub token</h3>
|
||||||
|
|
||||||
|
<p>Since GitHub allow to make only 50 requests without authentication it's recommended to run this script with token (<code>-t, --token</code> option)</p>
|
||||||
|
|
||||||
|
<p><strong>You can easily <a href="https://github.com/settings/applications">generate it here</a></strong>.</p>
|
||||||
|
|
||||||
|
<p>And:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Run with key <code>-t [your-16-digit-token]</code> </li>
|
||||||
|
<li>
|
||||||
|
<p>Or set environment variable <code>CHANGELOG_GITHUB_TOKEN</code> and specify there your token. </p>
|
||||||
|
|
||||||
|
<p>i.e. add to your <code>~/.bash_profile</code> or <code>~/.zshrc</code> or any other place to load ENV variables string :</p>
|
||||||
|
|
||||||
|
<pre><code>export CHANGELOG_GITHUB_TOKEN="your-40-digit-github-token"
|
||||||
|
</code></pre>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>So, if you got error like this:</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<p>! /Library/Ruby/Gems/2.0.0/gems/github_api-0.12.2/lib/github_api/response/raise_error.rb:14:in `on_complete'</p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p>It's time to create this token or wait for 1 hour before GitHub reset the counter for your IP.</p>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<a id="features-and-advantages-of-this-project" class="anchor" href="#features-and-advantages-of-this-project" aria-hidden="true"><span class="octicon octicon-link"></span></a>Features and advantages of this project</h2>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Generate canonical, neat change log file, followed by <a href="http://keepachangelog.com/">basic change log guidlines</a> <img class="emoji" title=":gem:" alt=":gem:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f48e.png" height="20" width="20" align="absmiddle">
|
||||||
|
</li>
|
||||||
|
<li>Possible to generate <strong>Unreleased</strong> changes (closed issues that have not released yet) <img class="emoji" title=":dizzy:" alt=":dizzy:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ab.png" height="20" width="20" align="absmiddle">
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>GitHub Enterprise support</strong> via command line options! <img class="emoji" title=":factory:" alt=":factory:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ed.png" height="20" width="20" align="absmiddle">
|
||||||
|
</li>
|
||||||
|
<li>Flexible format <strong>customisation</strong>:
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<strong>Customize</strong> issues, that <strong>should be added</strong> to changelog <img class="emoji" title=":eight_spoked_asterisk:" alt=":eight_spoked_asterisk:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/2733.png" height="20" width="20" align="absmiddle">
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>Custom date format</strong> supported <img class="emoji" title=":date:" alt=":date:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c5.png" height="20" width="20" align="absmiddle">
|
||||||
|
</li>
|
||||||
|
<li>Ability to manually specify in which version issue was fixed (in case, when closed date is not match) by setting <code>milestone</code> of issue the same name as tag of required version <img class="emoji" title=":pushpin:" alt=":pushpin:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4cc.png" height="20" width="20" align="absmiddle">
|
||||||
|
</li>
|
||||||
|
<li>Automatically <strong>exclude specific issues</strong>, not-related to change log (any issue, that has label <code>question</code> <code>duplicate</code> <code>invalid</code> <code>wontfix</code>by default) <img class="emoji" title=":scissors:" alt=":scissors:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/2702.png" height="20" width="20" align="absmiddle">
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong>Distinguish</strong> issues <strong>according labels</strong>. <img class="emoji" title=":mag_right:" alt=":mag_right:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f50e.png" height="20" width="20" align="absmiddle"></p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Merged pull requests (all <code>merged</code> pull-requests) <img class="emoji" title=":twisted_rightwards_arrows:" alt=":twisted_rightwards_arrows:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f500.png" height="20" width="20" align="absmiddle">
|
||||||
|
</li>
|
||||||
|
<li>Bug fixes (by label <code>bug</code> in issue) <img class="emoji" title=":beetle:" alt=":beetle:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f41e.png" height="20" width="20" align="absmiddle">
|
||||||
|
</li>
|
||||||
|
<li>Enhancements (by label <code>enhancement</code> in issue) <img class="emoji" title=":star2:" alt=":star2:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f31f.png" height="20" width="20" align="absmiddle">
|
||||||
|
</li>
|
||||||
|
<li> Issues (closed issues <code>w/o any labels</code>) <img class="emoji" title=":non-potable_water:" alt=":non-potable_water:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b1.png" height="20" width="20" align="absmiddle"><br>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><p>You manually can set which labels should be included/excluded. <img class="emoji" title=":wrench:" alt=":wrench:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f527.png" height="20" width="20" align="absmiddle"></p></li>
|
||||||
|
<li>Apply a lot of other customisations, to fit changelog for your personal style <img class="emoji" title=":tophat:" alt=":tophat:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a9.png" height="20" width="20" align="absmiddle">
|
||||||
|
(<em>look <code>github_changelog_generator --help</code> for details)</em>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>
|
||||||
|
<a id="alternatives" class="anchor" href="#alternatives" aria-hidden="true"><span class="octicon octicon-link"></span></a>Alternatives</h3>
|
||||||
|
|
||||||
|
<p>Here is a <a href="https://github.com/skywinder/Github-Changelog-Generator/wiki/Alternatives">wikipage list of alternatives</a>, that I found. But no one was satisfy my requirements.</p>
|
||||||
|
|
||||||
|
<p><em>If you know other projects - feel free to edit this Wiki page!</em></p>
|
||||||
|
|
||||||
|
<h3>
|
||||||
|
<a id="projects-using-this-library" class="anchor" href="#projects-using-this-library" aria-hidden="true"><span class="octicon octicon-link"></span></a>Projects using this library</h3>
|
||||||
|
|
||||||
|
<p><a href="https://github.com/skywinder/Github-Changelog-Generator/wiki/Projects-using-Github-Changelog-Generator">Wikipage with list of projects</a> </p>
|
||||||
|
|
||||||
|
<p><em>If you are using <code>github_changelog_generator</code> for generation change log in your project or know another project that uses it, please add it to <a href="https://github.com/skywinder/Github-Changelog-Generator/wiki/Projects-using-Github-Changelog-Generator">this</a> list.</em></p>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<a id="am-i-missed-some-essential-feature" class="anchor" href="#am-i-missed-some-essential-feature" aria-hidden="true"><span class="octicon octicon-link"></span></a>Am I missed some essential feature?</h2>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><p><strong>Nothing is impossible!</strong> </p></li>
|
||||||
|
<li><p>Open an <a href="https://github.com/skywinder/Github-Changelog-Generator/issues/new">issue</a> and let's make generator better together! </p></li>
|
||||||
|
<li><p><em>Bug reports, feature requests, patches, well-wishes are always welcome</em> <img class="emoji" title=":heavy_exclamation_mark:" alt=":heavy_exclamation_mark:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/2757.png" height="20" width="20" align="absmiddle"></p></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<a id="faq" class="anchor" href="#faq" aria-hidden="true"><span class="octicon octicon-link"></span></a>FAQ</h2>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><strong><em>I already use GitHub Releases. Why do I need this?</em></strong></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>GitHub Releases is a very good thing. And it's very good practice to maintain it (not so much people using it yet)! <img class="emoji" title=":congratulations:" alt=":congratulations:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/3297.png" height="20" width="20" align="absmiddle"> </p>
|
||||||
|
|
||||||
|
<p>I'm not try to compare quality of auto-generated and manually generated logs.</p>
|
||||||
|
|
||||||
|
<p>The Changelog like this sometimes really helps. For example:</p>
|
||||||
|
|
||||||
|
<p>When I found a closed bug - it's very useful to understand, in which release it was fixed. In that case you can easily find this issue by # in <code>CHANGELOG.md</code>.</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>it's not so quite easy to find it in manually filled Releases notes.</li>
|
||||||
|
<li>this file can also help you to build your Release note and not miss features in manually-filled list.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>In the end:</p>
|
||||||
|
|
||||||
|
<p>I think, that GitHub Releases is more for end-users.
|
||||||
|
But <code>CHANGELOG.md</code> could stay in the repo for developers with detailed list of changes.
|
||||||
|
And it's nothing bad to combine GitHub Releases and <code>CHANGELOG.md</code> file together in that manner.</p>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<a id="contributing" class="anchor" href="#contributing" aria-hidden="true"><span class="octicon octicon-link"></span></a>Contributing</h2>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>Create an issue to discuss about your idea</li>
|
||||||
|
<li><a href="https://github.com/skywinder/Github-Changelog-Generator/fork">Fork it</a></li>
|
||||||
|
<li>Create your feature branch (<code>git checkout -b my-new-feature</code>)</li>
|
||||||
|
<li>Commit your changes (<code>git commit -am 'Add some feature'</code>)</li>
|
||||||
|
<li>Push to the branch (<code>git push origin my-new-feature</code>)</li>
|
||||||
|
<li>Create a new Pull Request</li>
|
||||||
|
<li>Profit! <img class="emoji" title=":white_check_mark:" alt=":white_check_mark:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/2705.png" height="20" width="20" align="absmiddle">
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<a id="license" class="anchor" href="#license" aria-hidden="true"><span class="octicon octicon-link"></span></a>License</h2>
|
||||||
|
|
||||||
|
<p>Github Changelog Generator is released under the <a href="http://www.opensource.org/licenses/MIT">MIT License</a>.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Github-changelog-generator is maintained by <a href="https://github.com/skywinder">skywinder</a><br>
|
||||||
|
This page was generated by <a href="https://pages.github.com">GitHub Pages</a>. Tactile theme by <a href="https://twitter.com/jasonlong">Jason Long</a>.
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
||||||
|
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
try {
|
||||||
|
var pageTracker = _gat._getTracker("UA-52127948-2");
|
||||||
|
pageTracker._trackPageview();
|
||||||
|
} catch(err) {}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
console.log('This would be the main JS file.');
|
||||||
@@ -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,206 +0,0 @@
|
|||||||
#!/usr/bin/env ruby
|
|
||||||
|
|
||||||
require 'github_api'
|
|
||||||
require 'json'
|
|
||||||
require 'httparty'
|
|
||||||
require_relative 'github_changelog_generator/parser'
|
|
||||||
|
|
||||||
|
|
||||||
class ChangelogGenerator
|
|
||||||
|
|
||||||
attr_accessor :options, :all_tags
|
|
||||||
|
|
||||||
def initialize()
|
|
||||||
|
|
||||||
@options = Parser.parse_options
|
|
||||||
if @options[:token]
|
|
||||||
@github = Github.new oauth_token: @options[:token]
|
|
||||||
else
|
|
||||||
@github = Github.new
|
|
||||||
end
|
|
||||||
@all_tags = self.get_all_tags
|
|
||||||
@pull_requests = self.get_all_closed_pull_requests
|
|
||||||
|
|
||||||
@tag_times_hash = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
def print_json(json)
|
|
||||||
puts JSON.pretty_generate(json)
|
|
||||||
end
|
|
||||||
|
|
||||||
def exec_command(cmd)
|
|
||||||
exec_cmd = "cd #{$project_path} && #{cmd}"
|
|
||||||
%x[#{exec_cmd}]
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def get_all_closed_pull_requests
|
|
||||||
|
|
||||||
|
|
||||||
issues = @github.pull_requests.list @options[:user], @options[:project], :state => 'closed'
|
|
||||||
json = issues.body
|
|
||||||
|
|
||||||
if @options[:verbose]
|
|
||||||
puts 'Receive all pull requests'
|
|
||||||
end
|
|
||||||
|
|
||||||
json
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
def compund_changelog
|
|
||||||
if @options[:verbose]
|
|
||||||
puts 'Generating changelog:'
|
|
||||||
end
|
|
||||||
|
|
||||||
log = "# Changelog\n\n"
|
|
||||||
|
|
||||||
if @options[:last]
|
|
||||||
log += self.generate_log_between_tags(self.all_tags[0], self.all_tags[1])
|
|
||||||
elsif @options[:tag1] && @options[:tag2]
|
|
||||||
|
|
||||||
tag1 = @options[:tag1]
|
|
||||||
tag2 = @options[:tag2]
|
|
||||||
tags_strings = []
|
|
||||||
self.all_tags.each { |x| tags_strings.push(x['name'])}
|
|
||||||
|
|
||||||
if tags_strings.include?(tag1)
|
|
||||||
if tags_strings.include?(tag2)
|
|
||||||
hash = Hash[tags_strings.map.with_index.to_a]
|
|
||||||
index1 = hash[tag1]
|
|
||||||
index2 = hash[tag2]
|
|
||||||
log += self.generate_log_between_tags(self.all_tags[index1], self.all_tags[index2])
|
|
||||||
else
|
|
||||||
puts "Can't find tag #{tag2} -> exit"
|
|
||||||
exit
|
|
||||||
end
|
|
||||||
else
|
|
||||||
puts "Can't find tag #{tag1} -> exit"
|
|
||||||
exit
|
|
||||||
end
|
|
||||||
else
|
|
||||||
log += self.generate_log_for_all_tags
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
if @options[:verbose]
|
|
||||||
puts log
|
|
||||||
end
|
|
||||||
|
|
||||||
log += "\n\n*This file was generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*"
|
|
||||||
output_filename = "#{@options[:project]}_CHANGELOG.md"
|
|
||||||
File.open(output_filename, 'w') { |file| file.write(log) }
|
|
||||||
|
|
||||||
puts "Done! Generated log placed in #{output_filename}"
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
def generate_log_for_all_tags
|
|
||||||
log = ''
|
|
||||||
for index in 1 ... self.all_tags.size
|
|
||||||
log += self.generate_log_between_tags(self.all_tags[index-1], self.all_tags[index])
|
|
||||||
end
|
|
||||||
|
|
||||||
log
|
|
||||||
end
|
|
||||||
|
|
||||||
def is_megred(number)
|
|
||||||
@github.pull_requests.merged? @options[:user], @options[:project], number
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_all_merged_pull_requests
|
|
||||||
json = self.get_all_closed_pull_requests
|
|
||||||
puts 'Check if the requests is merged... (it can take a while)'
|
|
||||||
|
|
||||||
json.delete_if { |req|
|
|
||||||
merged = self.is_megred(req[:number])
|
|
||||||
if @options[:verbose]
|
|
||||||
puts "##{req[:number]} #{merged ? 'merged' : 'not merged'}"
|
|
||||||
end
|
|
||||||
!merged
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_all_tags
|
|
||||||
|
|
||||||
url = "https://api.github.com/repos/#{@options[:user]}/#{@options[:project]}/tags"
|
|
||||||
|
|
||||||
if @options[:verbose]
|
|
||||||
puts "Receive tags for repo #{url}"
|
|
||||||
end
|
|
||||||
|
|
||||||
response = HTTParty.get(url,
|
|
||||||
:headers => {'Authorization' => 'token 8587bb22f6bf125454768a4a19dbcc774ea68d48',
|
|
||||||
'User-Agent' => 'Changelog-Generator'})
|
|
||||||
|
|
||||||
json_parse = JSON.parse(response.body)
|
|
||||||
|
|
||||||
if @options[:verbose]
|
|
||||||
puts "Found #{json_parse.count} tags"
|
|
||||||
end
|
|
||||||
|
|
||||||
json_parse
|
|
||||||
end
|
|
||||||
|
|
||||||
def generate_log_between_tags(since_tag, till_tag)
|
|
||||||
since_tag_time = self.get_time_of_tag(since_tag)
|
|
||||||
till_tag_time = self.get_time_of_tag(till_tag)
|
|
||||||
|
|
||||||
# if we mix up tags order - lits fix it!
|
|
||||||
if since_tag_time > till_tag_time
|
|
||||||
since_tag, till_tag = till_tag, since_tag
|
|
||||||
since_tag_time, till_tag_time = till_tag_time, since_tag_time
|
|
||||||
end
|
|
||||||
|
|
||||||
till_tag_name = till_tag['name']
|
|
||||||
|
|
||||||
pull_requests = Array.new(@pull_requests)
|
|
||||||
|
|
||||||
pull_requests.delete_if { |req|
|
|
||||||
t = Time.parse(req[:closed_at]).utc
|
|
||||||
true_classor_false_class = t > since_tag_time
|
|
||||||
classor_false_class = t < till_tag_time
|
|
||||||
|
|
||||||
in_range = (true_classor_false_class) && (classor_false_class)
|
|
||||||
!in_range
|
|
||||||
}
|
|
||||||
|
|
||||||
self.create_log(pull_requests, till_tag_name, till_tag_time)
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_log(pull_requests, tag_name, tag_time)
|
|
||||||
|
|
||||||
trimmed_tag = tag_name.tr('v', '')
|
|
||||||
log = "## [#{trimmed_tag}] (https://github.com/#{@options[:user]}/#{@options[:project]}/tree/#{tag_name})\n"
|
|
||||||
|
|
||||||
time_string = tag_time.strftime @options[:format]
|
|
||||||
log += "#### #{time_string}\n"
|
|
||||||
|
|
||||||
pull_requests.each { |dict|
|
|
||||||
merge = "#{dict[:title]} [\\##{dict[:number]}](https://github.com/#{@options[:user]}/#{@options[:project]}/pull/#{dict[:number]})\n\n"
|
|
||||||
log += "- #{merge}"
|
|
||||||
}
|
|
||||||
log
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_time_of_tag(prev_tag)
|
|
||||||
|
|
||||||
if @tag_times_hash[prev_tag['name']]
|
|
||||||
return @tag_times_hash[prev_tag['name']]
|
|
||||||
end
|
|
||||||
|
|
||||||
if @options[:verbose]
|
|
||||||
puts "Get time for tag #{prev_tag['name']}"
|
|
||||||
end
|
|
||||||
|
|
||||||
github_git_data_commits_get = @github.git_data.commits.get @options[:user], @options[:project], prev_tag['commit']['sha']
|
|
||||||
time_string = github_git_data_commits_get['committer']['date']
|
|
||||||
Time.parse(time_string)
|
|
||||||
@tag_times_hash[prev_tag['name']] = Time.parse(time_string)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
if __FILE__ == $0
|
|
||||||
ChangelogGenerator.new.compund_changelog
|
|
||||||
end
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
#!/usr/bin/env ruby
|
|
||||||
require 'optparse'
|
|
||||||
|
|
||||||
class Parser
|
|
||||||
def self.parse_options
|
|
||||||
options = {:tag1 => nil, :tag2 => nil, :format => '%d/%m/%y'}
|
|
||||||
|
|
||||||
parser = OptionParser.new { |opts|
|
|
||||||
opts.banner = 'Usage: changelog_generator -u user_name -p project_name [-t 16-digit-GitHubToken] [options]'
|
|
||||||
opts.on('-u', '--user [USER]', 'your username on GitHub') do |last|
|
|
||||||
options[:user] = last
|
|
||||||
end
|
|
||||||
opts.on('-p', '--project [PROJECT]', 'name of project on GitHub') do |last|
|
|
||||||
options[:project] = last
|
|
||||||
end
|
|
||||||
opts.on('-t', '--token [TOKEN]', 'To make more than 50 requests this app required your OAuth token for GitHub. You can generate it on https://github.com/settings/applications') do |last|
|
|
||||||
options[:token] = last
|
|
||||||
end
|
|
||||||
opts.on('-h', '--help', 'Displays Help') do
|
|
||||||
puts opts
|
|
||||||
exit
|
|
||||||
end
|
|
||||||
opts.on('-v', '--[no-]verbose', 'Run verbosely') do |v|
|
|
||||||
options[:verbose] = v
|
|
||||||
end
|
|
||||||
opts.on('-l', '--last-changes', 'generate log between last 2 tags') do |last|
|
|
||||||
options[:last] = last
|
|
||||||
end
|
|
||||||
opts.on('-f', '--date-format [FORMAT]', 'date format. default is %d/%m/%y') do |last|
|
|
||||||
options[:format] = last
|
|
||||||
end
|
|
||||||
}
|
|
||||||
|
|
||||||
parser.parse!
|
|
||||||
|
|
||||||
#udefined case with 1 parameter:
|
|
||||||
if ARGV[0] && !ARGV[1]
|
|
||||||
puts parser.banner
|
|
||||||
exit
|
|
||||||
end
|
|
||||||
|
|
||||||
if !options[:user] || !options[:project]
|
|
||||||
puts parser.banner
|
|
||||||
exit
|
|
||||||
end
|
|
||||||
|
|
||||||
if ARGV[1]
|
|
||||||
options[:tag1] = ARGV[0]
|
|
||||||
options[:tag2] = ARGV[1]
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
options
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -0,0 +1,228 @@
|
|||||||
|
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 {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
font: inherit;
|
||||||
|
font-size: 100%;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
/* HTML5 display-role reset for older browsers */
|
||||||
|
article, aside, details, figcaption, figure,
|
||||||
|
footer, header, hgroup, menu, nav, section {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
ol, ul {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
blockquote, q {
|
||||||
|
quotes: none;
|
||||||
|
}
|
||||||
|
blockquote:before, blockquote:after,
|
||||||
|
q:before, q:after {
|
||||||
|
content: '';
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
border-spacing: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
font-family: 'Helvetica Neue', Helvetica, Arial, serif;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #d5000d;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
padding-top: 35px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
font-size: 48px;
|
||||||
|
font-weight: bold;
|
||||||
|
line-height: 1.2;
|
||||||
|
color: #303030;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h2 {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: normal;
|
||||||
|
line-height: 1.3;
|
||||||
|
color: #aaa;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
}
|
||||||
|
#downloads {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#main_content {
|
||||||
|
padding-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
code, pre {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #222;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
padding: 0 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 20px;
|
||||||
|
overflow: auto;
|
||||||
|
border: solid 1px #ddd;
|
||||||
|
}
|
||||||
|
pre code {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul, ol, dl {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* COMMON STYLES */
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border: 1px solid #ebebeb;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
font-weight: 300;
|
||||||
|
text-align: center;
|
||||||
|
border: 1px solid #ebebeb;
|
||||||
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
padding: 20px;
|
||||||
|
background: #f2f2f2;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* GENERAL ELEMENT TYPE STYLES */
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 2.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #303030;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #d5000d;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #303030;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
font-size: 1em;
|
||||||
|
color: #303030;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6 {
|
||||||
|
font-size: .8em;
|
||||||
|
color: #303030;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
font-weight: 300;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
p a {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
padding: 0 0 0 30px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
font-size: 1.6em;
|
||||||
|
border-left: 10px solid #e9e9e9;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul li {
|
||||||
|
list-style-position: inside;
|
||||||
|
list-style: disc;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol li {
|
||||||
|
list-style-position: inside;
|
||||||
|
list-style: decimal;
|
||||||
|
padding-left: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl dd {
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
padding-top: 20px;
|
||||||
|
padding-bottom: 30px;
|
||||||
|
margin-top: 40px;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer a {
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MISC */
|
||||||
|
.clearfix:after {
|
||||||
|
display: block;
|
||||||
|
height: 0;
|
||||||
|
clear: both;
|
||||||
|
visibility: hidden;
|
||||||
|
content: '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
.clearfix {display: inline-block;}
|
||||||
|
* html .clearfix {height: 1%;}
|
||||||
|
.clearfix {display: block;}
|
||||||
@@ -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 }
|
||||||
@@ -0,0 +1,421 @@
|
|||||||
|
@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 {
|
||||||
|
list-style: inside;
|
||||||
|
padding-left: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
p img {
|
||||||
|
display: inline;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
vertical-align: middle;
|
||||||
|
text-align: center;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,373 @@
|
|||||||
|
/* http://meyerweb.com/eric/tools/css/reset/
|
||||||
|
v2.0 | 20110126
|
||||||
|
License: none (public domain)
|
||||||
|
*/
|
||||||
|
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 {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
font: inherit;
|
||||||
|
font-size: 100%;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
/* HTML5 display-role reset for older browsers */
|
||||||
|
article, aside, details, figcaption, figure,
|
||||||
|
footer, header, hgroup, menu, nav, section {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
ol, ul {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
blockquote, q {
|
||||||
|
quotes: none;
|
||||||
|
}
|
||||||
|
blockquote:before, blockquote:after,
|
||||||
|
q:before, q:after {
|
||||||
|
content: '';
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
border-spacing: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* LAYOUT STYLES */
|
||||||
|
body {
|
||||||
|
font-family: 'Helvetica Neue', Helvetica, Arial, serif;
|
||||||
|
font-size: 1em;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #6d6d6d;
|
||||||
|
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
|
||||||
|
background: #e7e7e7 url(../images/body-bg.png) 0 0 repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #d5000d;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
color: #c5000c;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
padding-top: 35px;
|
||||||
|
padding-bottom: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
font-family: 'Chivo', 'Helvetica Neue', Helvetica, Arial, serif;
|
||||||
|
font-size: 48px; font-weight: 900;
|
||||||
|
line-height: 1.2;
|
||||||
|
color: #303030;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h2 {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: normal;
|
||||||
|
line-height: 1.3;
|
||||||
|
color: #aaa;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#container {
|
||||||
|
min-height: 595px;
|
||||||
|
background: transparent url(../images/highlight-bg.jpg) 50% 0 no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inner {
|
||||||
|
width: 620px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#container .inner img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#downloads {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.button {
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
width: 179px;
|
||||||
|
padding: 12px 8px 12px 8px;
|
||||||
|
margin-right: 14px;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
|
line-height: 25px;
|
||||||
|
color: #303030;
|
||||||
|
background: #fdfdfd; /* Old browsers */
|
||||||
|
background: -moz-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* FF3.6+ */
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f2f2f2)); /* Chrome,Safari4+ */
|
||||||
|
background: -webkit-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Chrome10+,Safari5.1+ */
|
||||||
|
background: -o-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Opera 11.10+ */
|
||||||
|
background: -ms-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* IE10+ */
|
||||||
|
background: linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* W3C */
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f2f2f2',GradientType=0 ); /* IE6-9 */
|
||||||
|
border-top: solid 1px #cbcbcb;
|
||||||
|
border-right: solid 1px #b7b7b7;
|
||||||
|
border-bottom: solid 1px #b3b3b3;
|
||||||
|
border-left: solid 1px #b7b7b7;
|
||||||
|
border-radius: 30px;
|
||||||
|
-webkit-box-shadow: 10px 10px 5px #888;
|
||||||
|
-moz-box-shadow: 10px 10px 5px #888;
|
||||||
|
box-shadow: 0px 1px 5px #e8e8e8;
|
||||||
|
-moz-border-radius: 30px;
|
||||||
|
-webkit-border-radius: 30px;
|
||||||
|
}
|
||||||
|
a.button:hover {
|
||||||
|
background: #fafafa; /* Old browsers */
|
||||||
|
background: -moz-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* FF3.6+ */
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f6f6f6)); /* Chrome,Safari4+ */
|
||||||
|
background: -webkit-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Chrome10+,Safari5.1+ */
|
||||||
|
background: -o-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Opera 11.10+ */
|
||||||
|
background: -ms-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* IE10+ */
|
||||||
|
background: linear-gradient(top, #fdfdfd 0%,#f6f6f6, 100%); /* W3C */
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f6f6f6',GradientType=0 ); /* IE6-9 */
|
||||||
|
border-top: solid 1px #b7b7b7;
|
||||||
|
border-right: solid 1px #b3b3b3;
|
||||||
|
border-bottom: solid 1px #b3b3b3;
|
||||||
|
border-left: solid 1px #b3b3b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.button span {
|
||||||
|
display: block;
|
||||||
|
height: 23px;
|
||||||
|
padding-left: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#download-zip span {
|
||||||
|
background: transparent url(../images/zip-icon.png) 12px 50% no-repeat;
|
||||||
|
}
|
||||||
|
#download-tar-gz span {
|
||||||
|
background: transparent url(../images/tar-gz-icon.png) 12px 50% no-repeat;
|
||||||
|
}
|
||||||
|
#view-on-github span {
|
||||||
|
background: transparent url(../images/octocat-icon.png) 12px 50% no-repeat;
|
||||||
|
}
|
||||||
|
#view-on-github {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
code, pre {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #222;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
padding: 0 3px;
|
||||||
|
background-color: #f2f2f2;
|
||||||
|
border: solid 1px #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 20px;
|
||||||
|
overflow: auto;
|
||||||
|
color: #f2f2f2;
|
||||||
|
text-shadow: none;
|
||||||
|
background: #303030;
|
||||||
|
}
|
||||||
|
pre code {
|
||||||
|
padding: 0;
|
||||||
|
color: #f2f2f2;
|
||||||
|
background-color: #303030;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul, ol, dl {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* COMMON STYLES */
|
||||||
|
|
||||||
|
hr {
|
||||||
|
height: 1px;
|
||||||
|
padding-bottom: 1em;
|
||||||
|
margin-top: 1em;
|
||||||
|
line-height: 1px;
|
||||||
|
background: transparent url('../images/hr.png') 50% 0 no-repeat;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
em {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border: 1px solid #ebebeb;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
font-weight: 300;
|
||||||
|
text-align: center;
|
||||||
|
border: 1px solid #ebebeb;
|
||||||
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
padding: 20px;
|
||||||
|
background: #f2f2f2;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* GENERAL ELEMENT TYPE STYLES */
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #303030;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #d5000d;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #303030;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
font-size: 1em;
|
||||||
|
color: #303030;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6 {
|
||||||
|
font-size: .8em;
|
||||||
|
color: #303030;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
font-weight: 300;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
p a {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
padding: 0 0 0 30px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
font-size: 1.6em;
|
||||||
|
border-left: 10px solid #e9e9e9;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul li {
|
||||||
|
list-style-position: inside;
|
||||||
|
list-style: disc;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol li {
|
||||||
|
list-style-position: inside;
|
||||||
|
list-style: decimal;
|
||||||
|
padding-left: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl dt {
|
||||||
|
color: #303030;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
padding-top: 20px;
|
||||||
|
padding-bottom: 30px;
|
||||||
|
margin-top: 40px;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #aaa;
|
||||||
|
background: transparent url('../images/hr.png') 0 0 no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer a {
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
footer a:hover {
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MISC */
|
||||||
|
.clearfix:after {
|
||||||
|
display: block;
|
||||||
|
height: 0;
|
||||||
|
clear: both;
|
||||||
|
visibility: hidden;
|
||||||
|
content: '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
.clearfix {display: inline-block;}
|
||||||
|
* html .clearfix {height: 1%;}
|
||||||
|
.clearfix {display: block;}
|
||||||
|
|
||||||
|
/* #Media Queries
|
||||||
|
================================================== */
|
||||||
|
|
||||||
|
/* Smaller than standard 960 (devices and browsers) */
|
||||||
|
@media only screen and (max-width: 959px) { }
|
||||||
|
|
||||||
|
/* Tablet Portrait size to standard 960 (devices and browsers) */
|
||||||
|
@media only screen and (min-width: 768px) and (max-width: 959px) { }
|
||||||
|
|
||||||
|
/* All Mobile Sizes (devices and browser) */
|
||||||
|
@media only screen and (max-width: 767px) {
|
||||||
|
header {
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
#downloads {
|
||||||
|
margin-bottom: 25px;
|
||||||
|
}
|
||||||
|
#download-zip, #download-tar-gz {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.inner {
|
||||||
|
width: 94%;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */
|
||||||
|
@media only screen and (min-width: 480px) and (max-width: 767px) { }
|
||||||
|
|
||||||
|
/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */
|
||||||
|
@media only screen and (max-width: 479px) { }
|
||||||