timeline_setter 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. data/.document +4 -0
  2. data/LICENSE.txt +18 -0
  3. data/README +15 -0
  4. data/Rakefile +98 -0
  5. data/bin/timeline-setter +9 -0
  6. data/doc/doc.markdown +253 -0
  7. data/doc/doc_wrapper.erb +87 -0
  8. data/doc/docco.css +186 -0
  9. data/doc/timeline-setter.html +592 -0
  10. data/doc/todo.markdown +28 -0
  11. data/doc/twitter-demo.html +122 -0
  12. data/documentation/TimelineSetter/CLI.html +575 -0
  13. data/documentation/TimelineSetter/Parser.html +285 -0
  14. data/documentation/TimelineSetter/Timeline.html +513 -0
  15. data/documentation/TimelineSetter/Util.html +246 -0
  16. data/documentation/TimelineSetter.html +112 -0
  17. data/documentation/_index.html +132 -0
  18. data/documentation/class_list.html +36 -0
  19. data/documentation/css/common.css +1 -0
  20. data/documentation/css/full_list.css +53 -0
  21. data/documentation/css/style.css +318 -0
  22. data/documentation/file.README.html +70 -0
  23. data/documentation/file_list.html +38 -0
  24. data/documentation/frames.html +13 -0
  25. data/documentation/index.html +70 -0
  26. data/documentation/js/app.js +203 -0
  27. data/documentation/js/full_list.js +149 -0
  28. data/documentation/js/jquery.js +16 -0
  29. data/documentation/method_list.html +155 -0
  30. data/documentation/top-level-namespace.html +88 -0
  31. data/index.html +397 -0
  32. data/lib/timeline_setter/cli.rb +85 -0
  33. data/lib/timeline_setter/parser.rb +28 -0
  34. data/lib/timeline_setter/timeline.rb +44 -0
  35. data/lib/timeline_setter/version.rb +3 -0
  36. data/lib/timeline_setter.rb +22 -0
  37. data/public/javascripts/timeline-setter.js +822 -0
  38. data/public/javascripts/vendor/jquery-min.js +16 -0
  39. data/public/javascripts/vendor/underscore-min.js +26 -0
  40. data/public/stylesheets/timeline-setter.css +396 -0
  41. data/spec/spec_helper.rb +10 -0
  42. data/spec/test_data.csv +4 -0
  43. data/spec/timeline_setter_spec.rb +85 -0
  44. data/templates/timeline-markup.erb +61 -0
  45. data/templates/timeline-min.erb +1 -0
  46. data/templates/timeline.erb +12 -0
  47. data/timeline_setter.gemspec +104 -0
  48. metadata +189 -0
data/.document ADDED
@@ -0,0 +1,4 @@
1
+ README
2
+ lib/**/*.rb
3
+ bin/*
4
+ LICENSE
data/LICENSE.txt ADDED
@@ -0,0 +1,18 @@
1
+ Copyright © 2011 ProPublica
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the “Software”), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to
8
+ do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
17
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,15 @@
1
+ =
2
+ '
3
+ _______ ___ _____ __ __
4
+ /_ __(_)___ ___ ___ / (_)___ ___ / ___/___ / /_/ /____ _____
5
+ / / / / __ `__ \/ _ \/ / / __ \/ _ \\__ \/ _ \/ __/ __/ _ \/ ___/
6
+ / / / / / / / / / __/ / / / / / __/__/ / __/ /_/ /_/ __/ /
7
+ /_/ /_/_/ /_/ /_/\___/_/_/_/ /_/\___/____/\___/\__/\__/\___/_/
8
+
9
+ TimelineSetter is a tool to create HTML timelines from spreadsheets of events.
10
+
11
+ For usage and installation instructions, see:
12
+ http://propublica.github.com/timeline-setter/
13
+
14
+ To report a bug or suggest a feature:
15
+ http://github.com/propublica/timeline-setter/issues
data/Rakefile ADDED
@@ -0,0 +1,98 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/rdoctask'
5
+ require 'rspec/core/rake_task'
6
+ require './lib/timeline_setter'
7
+
8
+
9
+ desc "build docs"
10
+ task :docs do
11
+ require 'rdiscount'
12
+ require 'erb'
13
+ version = TimelineSetter::VERSION
14
+ license = File.open('LICENSE.txt','r').read
15
+ mdown = RDiscount.new(ERB.new(File.open('doc/doc.markdown','r').read).result(binding), :smart).to_html
16
+ wrapper = File.open('doc/doc_wrapper.erb','r').read
17
+ mdown = File.open('index.html','w+') do |f|
18
+ f.write ERB.new(wrapper).result(binding)
19
+ end
20
+ end
21
+
22
+ desc "generate gh-pages"
23
+ task :gh_pages do
24
+ `rake docs`
25
+ `rake yard`
26
+ `rake docco`
27
+ `rake sample`
28
+
29
+ `git branch` =~ /^\* (.+)?\n/
30
+ current_branch = $1
31
+
32
+ `git commit -am "docs"`
33
+ `git push github #{current_branch}`
34
+ `git checkout gh-pages`
35
+ `git merge #{current_branch}`
36
+ `git push github gh-pages`
37
+ `git checkout #{current_branch}`
38
+ end
39
+
40
+ desc "generate docco"
41
+ task :docco do
42
+ `docco ./public/javascripts/*.js`
43
+ `cp -R ./docs/* ./doc`
44
+ `rm -R docs`
45
+ end
46
+
47
+ begin
48
+ require 'jeweler'
49
+ Jeweler::Tasks.new do |gem|
50
+ gem.name = "timeline_setter"
51
+ gem.summary = %Q{TimelineSetter is a tool to create HTML timelines from spreadsheets of events.}
52
+ gem.description = %Q{TimelineSetter is a tool to create HTML timelines from spreadsheets of events.}
53
+ gem.email = "almshaw@gmail.com"
54
+ gem.homepage = "http://github.com/propublica/timeline-setter"
55
+ gem.authors = ["Al Shaw", "Jeff Larson"]
56
+ gem.executables = "timeline-setter"
57
+ gem.require_paths = ['lib']
58
+ gem.add_dependency "json"
59
+ gem.add_dependency "table_fu"
60
+ gem.add_dependency "kompress", ">= 0.0.2"
61
+ gem.add_dependency "closure-compiler"
62
+ gem.add_development_dependency "rspec", ">= 2.0.0"
63
+ gem.version = TimelineSetter::VERSION
64
+ end
65
+ Jeweler::GemcutterTasks.new
66
+ rescue LoadError
67
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
68
+ end
69
+
70
+ Rake::RDocTask.new do |rdoc|
71
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
72
+ rdoc.rdoc_dir = 'rdoc'
73
+ rdoc.title = "TimelineSetter #{version}"
74
+ rdoc.rdoc_files.include('README*')
75
+ rdoc.rdoc_files.include('lib/**/*.rb')
76
+ end
77
+
78
+ # run tests with `rake spec`
79
+ RSpec::Core::RakeTask.new(:spec) do |spec|
80
+ spec.pattern = 'spec/*_spec.rb'
81
+ spec.rspec_opts = ['--color', '--format nested']
82
+ end
83
+
84
+ desc "generate yard docs"
85
+ task :yard do
86
+ `yard -o ./documentation`
87
+ end
88
+
89
+ desc "generate sample timeline"
90
+ task :sample do
91
+ # noop this for now.
92
+
93
+ # `./bin/timeline-setter -c ./tbi.csv -m -o ./public/`
94
+ # `cp ./public/timeline.html ./doc/timeline-sample.html`
95
+ end
96
+
97
+
98
+
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # $ ./bin/timeline-setter -c ./test.csv -o ./public/ -O
4
+
5
+ require 'rubygems'
6
+ require File.expand_path("../../lib/timeline_setter.rb", __FILE__)
7
+ require File.expand_path("../../lib/timeline_setter/cli.rb", __FILE__)
8
+
9
+ TimelineSetter::CLI.new
data/doc/doc.markdown ADDED
@@ -0,0 +1,253 @@
1
+ # TimelineSetter <%= version %>
2
+
3
+ TimelineSetter creates beautiful timelines.
4
+
5
+ It is a command-line utility that takes a [specially-structured CSV file](#csv)
6
+ as input and outputs standards-compliant HTML/CSS/JavaScript. It supports any
7
+ span of time from minutes to years, and supports multiple parallel event
8
+ series in a single timeline. It can handle custom descriptions and even
9
+ arbitrary HTML in each event "card." It creates fluid embeds that will look
10
+ great at any width.
11
+
12
+ TimelineSetter "bakes out" timelines, ready for uploading directly into your
13
+ CMS, Amazon S3, or however you typically serve static files. It requires no
14
+ server-side processing at all once you've generated a timeline.
15
+
16
+ TimelineSetter [source on Github](https://github.com/propublica/timeline-setter/).
17
+
18
+ <a id="samples"></a>
19
+ ## Assorted Docs and Samples
20
+
21
+ * TimelineSetter Ruby source [documentation](documentation/index.html)
22
+ * timeline-setter.js [annotated source](doc/timeline-setter.html)
23
+ * A [TimelineSetter demo](doc/twitter-demo.html) using Twitter data
24
+
25
+ <a id="innards"></a>
26
+ ## How it Works
27
+
28
+ The project is broken into two parts: a Ruby package (along with a binary) for
29
+ generating the assets, and the HTML, CSS and JavaScript for the timeline
30
+ itself. TimelineSetter will create a unique HTML page that embeds a JSON
31
+ object with your data. The CSS and JavaScript are identical for every timeline
32
+ created, so you can host those centrally and simply point to them when you
33
+ deploy a timeline, or (with the minified option) you can package them up with your HTML
34
+ and paste it into your CMS all at once. You can [customize the CSS](#styling) to match the look
35
+ and feel of your site.
36
+
37
+ <a id="deps"></a>
38
+ ## Dependencies
39
+
40
+ TimelineSetter relies on [TableFu](http://propublica.github.com/table-fu/), as
41
+ well as the JavaScript libraries
42
+ [Underscore](http://documentcloud.github.com/underscore/) and
43
+ [jQuery](http://jquery.com/). All of these are either installed along with
44
+ TableSetter, or packaged with the source. It has been tested with jQuery 1.5.1
45
+ and Underscore 1.1.5.
46
+
47
+ <a id="install"></a>
48
+ ## Installation
49
+
50
+ Install TimelineSetter through RubyGems on Unix-like OSes:
51
+
52
+ gem install timeline_setter
53
+
54
+ (Note: We haven't tested using the TimelineSetter tools on Windows even once,
55
+ though the timelines themselves have been tested in modern browsers on
56
+ Windows, Mac and Linux.)
57
+
58
+ <a id="commandline"></a>
59
+ ## The \`timeline-setter\` command
60
+
61
+ After TimelineSetter is installed, the `timeline-setter` command should be
62
+ available in your shell. The command looks for a CSV file to parse and outputs
63
+ static assets. At any point, you can find help by running `timeline-setter`
64
+ without any arguments, or by adding the `-h` flag. Run the command like so:
65
+
66
+ timeline-setter -c /path/to/data.csv -o /path/to/output/directory
67
+
68
+ Running `timeline-setter` with no `-o` option will generate the timeline (and
69
+ supporting assets if applicable) within the current directory.
70
+
71
+ Full list of options:
72
+
73
+ * `-c CSV` Path to your CSV file.
74
+ * `-o OUTPUT_PATH` Path to output timeline and assets. If absent, timeline will be created in current directory.
75
+ * `-a` Add the default supporting assets to the output directory, along with the timeline itself.
76
+ * `-m` Create a minified one-page version of your timeline with all supporting assets inline.
77
+ * `-O` Open a browser to your new timeline after it is generated (currently Mac OS only).
78
+ * `-h` Print help to standard output.
79
+
80
+ <a id="csv"></a>
81
+ ## Setting Up Your CSV File
82
+
83
+ TimelineSetter looks for certain column names in your CSV file in order to
84
+ generate a timeline. All columns are required, though as you'll see, some of
85
+ them can be left blank. Here's a summary of each column and its significance:
86
+
87
+ <a id="date-csv"></a>
88
+ ### date
89
+
90
+ The date the event happened. Right now, TimelineSetter only supports
91
+ single-date events, but this can be specific down to the second. The generator
92
+ will try its best to parse out human dates. Try "March 20, 2010," "3/20/2010,"
93
+ "Mar. 20, 2010 11:59 PM" etc.
94
+
95
+ <a id="display-date-csv"></a>
96
+ ### display\_date
97
+
98
+ The date *displayed* on the event's card in the timeline. If this is blank, it
99
+ will fall back to `date`
100
+
101
+ <a id="desc-csv"></a>
102
+ ### description
103
+
104
+ A description of the event.
105
+
106
+ <a id="link-csv"></a>
107
+ ### link
108
+
109
+ A URL to send users to more details about an event. This will generate a "read
110
+ more" button at the bottom of the card pointing to the URL.
111
+
112
+ <a id="series-csv"></a>
113
+ ### series
114
+
115
+ A string representing the name of the series of events this particular event
116
+ is a part of. TimelineSetter will find all the unique series among events in
117
+ the spreadsheet and assign both colors and checkboxes for them at the top of
118
+ the spreadsheet. Events not assigned to a series will be part of the "default"
119
+ series, which have their timeline notches colored charcoal, and have no
120
+ associated checkbox. **Note:** As a corollary, if you only have one series, it is
121
+ best not to assign a name.
122
+
123
+ <a id="html-csv"></a>
124
+ ### html
125
+
126
+ Any arbitrary HTML that will be inserted above `description`. This
127
+ field may contain image tags, YouTube tags, etc. -- nearly everything except
128
+ `<script>` tags. If you choose to use JavaScript, you must do it inside an
129
+ iframe and call that iframe inside this field.
130
+
131
+ <a id="deployment"></a>
132
+ ## Folder structure and deployment
133
+
134
+ After you've generated a timeline with the `timeline-setter` command, you
135
+ should see a structure much like this where you've specified your output:
136
+
137
+ |-output
138
+ |---timeline.html
139
+ |---javascripts
140
+ |-----timeline-setter.js
141
+ |-----vendor
142
+ |-------underscore-min.js
143
+ |-------jquery-min.js
144
+ |---stylesheets
145
+ |-----timeline-setter.css
146
+
147
+ Dropping the whole folder onto your server or an asset host like S3 will allow
148
+ the app to run self-contained. It requires no server-side processing at all.
149
+ To drop into your CMS, simply copy the relevant bits of `timeline.html` and
150
+ paste into your site's template. Then, adjust the `<link>` and `<script>` tags
151
+ to point to their appropriate destinations.
152
+
153
+ <a id="defn"></a>
154
+ ## Definitions
155
+
156
+ The timeline is made up of non-clickable *interval notches* used to denote
157
+ periods of time, and *event notches*, which, when clicked, reveal their
158
+ associated *event cards*.
159
+
160
+ <a name="styling"></a>
161
+ ## Styling Your Timeline
162
+
163
+ TimelineSetter timelines are fully style-able. The default "ProPublica theme"
164
+ stylesheet is packaged alongside each generated asset bundle, and is available
165
+ in `stylesheets/timeline-setter.css`. You can alter this stylesheet, or
166
+ replace it completely. Here's a guide to do that.
167
+
168
+ <a id="styling-container"></a>
169
+ ### Overview and Styling the Container and Top Matter
170
+
171
+ All TimelineSetter CSS is scoped within a namespace starting with `TS.` The
172
+ outermost container is `#timeline_setter.`
173
+
174
+ Upon first glance, it may not seem like there is much markup at all. That's
175
+ because we make extensive use of JavaScript (ERB-style) templating via
176
+ [Underscore.js](http://documentcloud.github.com/underscore/#template) -- so
177
+ templates for each part of the timeline reside in the DOM. The controls (zoom
178
+ in/out, previous/next buttons) are available within `#TS-top_matter_container .TS-controls`.
179
+
180
+ Series checkboxes are injected into `.TS-series_nav_container` and templated
181
+ via `script#TS-notch_tmpl`. Currently, series colors are hard coded in the
182
+ JavaScript. We support a maximum of nine series colors (assigned in this order:
183
+ ``#065718, #EDC047, #91ADD1, #929E5E, #9E5E23, #C44846, #065718, #EDD4A5, #CECECE``,
184
+ they can be overridden in the "color priority" section of `timeline-setter.css`). Technically
185
+ you can create an unlimited number of series, but they will eventually fall back
186
+ to the default charcoal notch color.
187
+
188
+ <a id="styling-bar"></a>
189
+ ### Styling the bar, notches and cards
190
+
191
+ Interval notches are templated within `script#TS-year_notch_tmpl`. Their
192
+ position is based on the interval of time between events as automatically
193
+ determined by the JavaScript. Here's a sampling of what you might see in
194
+ interval notches:
195
+
196
+ year => 2001
197
+ month => June, 2004
198
+ day => May 1, 2005
199
+ hour/minute => 11:59
200
+ second => 11:59:22
201
+
202
+ Event notches are templated through `#TS-card-tmpl` and contain individual
203
+ classes corresponding to spreadsheet columns. `.TS-item-label` corresponds to
204
+ `description`, `.TS-item_html` corresponds to `html`,
205
+ `.TS-read_btn` is linked to `link` and `.TS-item_year` corresponds to
206
+ `display_date` falling through to `date`. Finally, `TS-permalink`
207
+ is a fragment link which will show the active card on page load if used.
208
+
209
+ <a id="roadmap"></a>
210
+ ## Roadmap
211
+
212
+ On the client side, there are a number of features we plan to add, including:
213
+
214
+ * Smoother zooming
215
+ * Deactivating series checkboxes if none of its events are within the zoomed viewport
216
+ * Auto-zooming the timeline if embedded into smaller containers
217
+ * More iOS gestures such as "pinching"
218
+ * Zooming to fit a series when the series is activated
219
+ * Ranges of events (e.g. Elizabeth Taylor was married to Michael Wilding between
220
+ Feb. 21, 1952 and Jan. 26, 1957, as shown
221
+ [here](http://www.nytimes.com/interactive/2011/03/23/movies/20110323-ELIZABETH-TAYLOR-TIMELINE.html))
222
+ * Embed code
223
+ * JavaScript tests
224
+
225
+ <a id="links"></a>
226
+ ## Links
227
+
228
+ * In the Wild: [ProPublica: How One Blast Affected Five Soldiers](http://www.propublica.org/special/tbi-psycho-platoon-timeline)
229
+
230
+ <a id="credits"></a>
231
+ ## Credits
232
+
233
+ [Al Shaw](http://twitter.com/a_l), [Jeff Larson](http://github.com/thejefflarson), ProPublica
234
+
235
+ <a id="contact"></a>
236
+ ## Contact
237
+
238
+ For issues with TimelineSetter, use the
239
+ [Issue Tracker](https://github.com/propublica/timeline-setter/issues). General
240
+ questions should go to <a href="mailto:opensource@propublica.org">opensource@propublica.org</a>.
241
+
242
+ <a id="changelog"></a>
243
+ ## Change Log
244
+
245
+ <a id="release-001"></a>
246
+ ### 0.1.0
247
+
248
+ Initial release
249
+
250
+ <a id="license"></a>
251
+ ## License
252
+
253
+ <%= license %>
@@ -0,0 +1,87 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
5
+ <link href="http://cloud.webtype.com/css/50942e7d-aebe-4c83-9824-ead7e49ec5af.css" rel="stylesheet" type="text/css" />
6
+ <style>
7
+ html {
8
+ background: #f7f7f7;
9
+ }
10
+ body {
11
+ font-family: Georgia, serif;
12
+ font-size: 16px;
13
+ line-height:24px;
14
+ width: 600px;
15
+ margin-left:auto;
16
+ margin-right:auto;
17
+ margin-top:10px;
18
+ background: #fff;
19
+ padding:10px 10px;
20
+ color:#444;
21
+ border-top:1px solid #cecece;
22
+ border-bottom:1px solid #cecece;
23
+ }
24
+ h1,h2,h3,h4,h5 {
25
+ font-family: 'Helvetica Neue', Arial, sans-serif;
26
+ color:#444;
27
+ }
28
+ h1 {
29
+ padding-top:0;
30
+ margin-top:0;
31
+ }
32
+ h2,h3 {
33
+ }
34
+ a.propublica{
35
+ position:absolute;
36
+ background: transparent url(http://propublica.github.com/table-fu/documentation/images/proplogo.png) no-repeat -40px -20px;
37
+ top: 0;
38
+ left: 0;
39
+ width: 160px;
40
+ height: 141px;
41
+ }
42
+
43
+ pre,code {
44
+ font-family: Monaco, Courier, monospace;
45
+ font-size:12px;
46
+ }
47
+ pre {
48
+ line-height: 16px;
49
+ padding:0.5em 1em;
50
+ overflow: auto;
51
+ border-left: 1px solid #cecece;
52
+ margin-left: 0;
53
+ background:#f7f7f7;
54
+ }
55
+ code {
56
+ padding: 2px;
57
+ background-color: #f7f7f7;
58
+ }
59
+ pre > code {
60
+ padding:0;
61
+ }
62
+ a {
63
+ color: #4369AF;
64
+ text-decoration: none;
65
+ font-weight: bold;
66
+ }
67
+ a:hover {
68
+ text-decoration:underline;
69
+ }
70
+ ul {
71
+ margin:0 1em;
72
+ padding:0;
73
+ list-style: disc;
74
+ }
75
+ li {
76
+ margin:0;
77
+ padding:0;
78
+ }
79
+
80
+ </style>
81
+ <title>TimelineSetter</title>
82
+ </head>
83
+ <body>
84
+ <a href="http://www.propublica.org" class="propublica">&nbsp;</a>
85
+ <%= mdown %>
86
+ </body>
87
+ </html>
data/doc/docco.css ADDED
@@ -0,0 +1,186 @@
1
+ /*--------------------- Layout and Typography ----------------------------*/
2
+ body {
3
+ font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
4
+ font-size: 15px;
5
+ line-height: 22px;
6
+ color: #252519;
7
+ margin: 0; padding: 0;
8
+ }
9
+ a {
10
+ color: #261a3b;
11
+ }
12
+ a:visited {
13
+ color: #261a3b;
14
+ }
15
+ p {
16
+ margin: 0 0 15px 0;
17
+ }
18
+ h1, h2, h3, h4, h5, h6 {
19
+ margin: 0px 0 15px 0;
20
+ }
21
+ h1 {
22
+ margin-top: 40px;
23
+ }
24
+ #container {
25
+ position: relative;
26
+ }
27
+ #background {
28
+ position: fixed;
29
+ top: 0; left: 525px; right: 0; bottom: 0;
30
+ background: #f5f5ff;
31
+ border-left: 1px solid #e5e5ee;
32
+ z-index: -1;
33
+ }
34
+ #jump_to, #jump_page {
35
+ background: white;
36
+ -webkit-box-shadow: 0 0 25px #777; -moz-box-shadow: 0 0 25px #777;
37
+ -webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px;
38
+ font: 10px Arial;
39
+ text-transform: uppercase;
40
+ cursor: pointer;
41
+ text-align: right;
42
+ }
43
+ #jump_to, #jump_wrapper {
44
+ position: fixed;
45
+ right: 0; top: 0;
46
+ padding: 5px 10px;
47
+ }
48
+ #jump_wrapper {
49
+ padding: 0;
50
+ display: none;
51
+ }
52
+ #jump_to:hover #jump_wrapper {
53
+ display: block;
54
+ }
55
+ #jump_page {
56
+ padding: 5px 0 3px;
57
+ margin: 0 0 25px 25px;
58
+ }
59
+ #jump_page .source {
60
+ display: block;
61
+ padding: 5px 10px;
62
+ text-decoration: none;
63
+ border-top: 1px solid #eee;
64
+ }
65
+ #jump_page .source:hover {
66
+ background: #f5f5ff;
67
+ }
68
+ #jump_page .source:first-child {
69
+ }
70
+ table td {
71
+ border: 0;
72
+ outline: 0;
73
+ }
74
+ td.docs, th.docs {
75
+ max-width: 450px;
76
+ min-width: 450px;
77
+ min-height: 5px;
78
+ padding: 10px 25px 1px 50px;
79
+ overflow-x: hidden;
80
+ vertical-align: top;
81
+ text-align: left;
82
+ }
83
+ .docs pre {
84
+ margin: 15px 0 15px;
85
+ padding-left: 15px;
86
+ }
87
+ .docs p tt, .docs p code {
88
+ background: #f8f8ff;
89
+ border: 1px solid #dedede;
90
+ font-size: 12px;
91
+ padding: 0 0.2em;
92
+ }
93
+ .pilwrap {
94
+ position: relative;
95
+ }
96
+ .pilcrow {
97
+ font: 12px Arial;
98
+ text-decoration: none;
99
+ color: #454545;
100
+ position: absolute;
101
+ top: 3px; left: -20px;
102
+ padding: 1px 2px;
103
+ opacity: 0;
104
+ -webkit-transition: opacity 0.2s linear;
105
+ }
106
+ td.docs:hover .pilcrow {
107
+ opacity: 1;
108
+ }
109
+ td.code, th.code {
110
+ padding: 14px 15px 16px 25px;
111
+ width: 100%;
112
+ vertical-align: top;
113
+ background: #f5f5ff;
114
+ border-left: 1px solid #e5e5ee;
115
+ }
116
+ pre, tt, code {
117
+ font-size: 12px; line-height: 18px;
118
+ font-family: Monaco, Consolas, "Lucida Console", monospace;
119
+ margin: 0; padding: 0;
120
+ }
121
+
122
+
123
+ /*---------------------- Syntax Highlighting -----------------------------*/
124
+ td.linenos { background-color: #f0f0f0; padding-right: 10px; }
125
+ span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; }
126
+ body .hll { background-color: #ffffcc }
127
+ body .c { color: #408080; font-style: italic } /* Comment */
128
+ body .err { border: 1px solid #FF0000 } /* Error */
129
+ body .k { color: #954121 } /* Keyword */
130
+ body .o { color: #666666 } /* Operator */
131
+ body .cm { color: #408080; font-style: italic } /* Comment.Multiline */
132
+ body .cp { color: #BC7A00 } /* Comment.Preproc */
133
+ body .c1 { color: #408080; font-style: italic } /* Comment.Single */
134
+ body .cs { color: #408080; font-style: italic } /* Comment.Special */
135
+ body .gd { color: #A00000 } /* Generic.Deleted */
136
+ body .ge { font-style: italic } /* Generic.Emph */
137
+ body .gr { color: #FF0000 } /* Generic.Error */
138
+ body .gh { color: #000080; font-weight: bold } /* Generic.Heading */
139
+ body .gi { color: #00A000 } /* Generic.Inserted */
140
+ body .go { color: #808080 } /* Generic.Output */
141
+ body .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
142
+ body .gs { font-weight: bold } /* Generic.Strong */
143
+ body .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
144
+ body .gt { color: #0040D0 } /* Generic.Traceback */
145
+ body .kc { color: #954121 } /* Keyword.Constant */
146
+ body .kd { color: #954121; font-weight: bold } /* Keyword.Declaration */
147
+ body .kn { color: #954121; font-weight: bold } /* Keyword.Namespace */
148
+ body .kp { color: #954121 } /* Keyword.Pseudo */
149
+ body .kr { color: #954121; font-weight: bold } /* Keyword.Reserved */
150
+ body .kt { color: #B00040 } /* Keyword.Type */
151
+ body .m { color: #666666 } /* Literal.Number */
152
+ body .s { color: #219161 } /* Literal.String */
153
+ body .na { color: #7D9029 } /* Name.Attribute */
154
+ body .nb { color: #954121 } /* Name.Builtin */
155
+ body .nc { color: #0000FF; font-weight: bold } /* Name.Class */
156
+ body .no { color: #880000 } /* Name.Constant */
157
+ body .nd { color: #AA22FF } /* Name.Decorator */
158
+ body .ni { color: #999999; font-weight: bold } /* Name.Entity */
159
+ body .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
160
+ body .nf { color: #0000FF } /* Name.Function */
161
+ body .nl { color: #A0A000 } /* Name.Label */
162
+ body .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
163
+ body .nt { color: #954121; font-weight: bold } /* Name.Tag */
164
+ body .nv { color: #19469D } /* Name.Variable */
165
+ body .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
166
+ body .w { color: #bbbbbb } /* Text.Whitespace */
167
+ body .mf { color: #666666 } /* Literal.Number.Float */
168
+ body .mh { color: #666666 } /* Literal.Number.Hex */
169
+ body .mi { color: #666666 } /* Literal.Number.Integer */
170
+ body .mo { color: #666666 } /* Literal.Number.Oct */
171
+ body .sb { color: #219161 } /* Literal.String.Backtick */
172
+ body .sc { color: #219161 } /* Literal.String.Char */
173
+ body .sd { color: #219161; font-style: italic } /* Literal.String.Doc */
174
+ body .s2 { color: #219161 } /* Literal.String.Double */
175
+ body .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
176
+ body .sh { color: #219161 } /* Literal.String.Heredoc */
177
+ body .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
178
+ body .sx { color: #954121 } /* Literal.String.Other */
179
+ body .sr { color: #BB6688 } /* Literal.String.Regex */
180
+ body .s1 { color: #219161 } /* Literal.String.Single */
181
+ body .ss { color: #19469D } /* Literal.String.Symbol */
182
+ body .bp { color: #954121 } /* Name.Builtin.Pseudo */
183
+ body .vc { color: #19469D } /* Name.Variable.Class */
184
+ body .vg { color: #19469D } /* Name.Variable.Global */
185
+ body .vi { color: #19469D } /* Name.Variable.Instance */
186
+ body .il { color: #666666 } /* Literal.Number.Integer.Long */