showoff 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.txt +93 -0
- data/Rakefile +15 -0
- data/bin/showoff +5 -0
- data/lib/showoff.rb +141 -0
- data/public/css/fg.menu.css +114 -0
- data/public/css/sh_style.css +66 -0
- data/public/css/showoff.css +186 -0
- data/public/css/theme/images/ui-bg_diagonals-small_100_f0efea_40x40.png +0 -0
- data/public/css/theme/images/ui-bg_flat_35_f0f0f0_40x100.png +0 -0
- data/public/css/theme/images/ui-bg_glass_55_fcf0ba_1x400.png +0 -0
- data/public/css/theme/images/ui-bg_glow-ball_25_2e2e28_600x600.png +0 -0
- data/public/css/theme/images/ui-bg_highlight-soft_100_f0efea_1x100.png +0 -0
- data/public/css/theme/images/ui-bg_highlight-soft_25_327E04_1x100.png +0 -0
- data/public/css/theme/images/ui-bg_highlight-soft_25_5A9D1A_1x100.png +0 -0
- data/public/css/theme/images/ui-bg_highlight-soft_95_ffedad_1x100.png +0 -0
- data/public/css/theme/images/ui-bg_inset-soft_22_3b3b35_1x100.png +0 -0
- data/public/css/theme/images/ui-icons_808080_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_8DC262_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_e7e6e4_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_eeeeee_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_ffffff_256x240.png +0 -0
- data/public/css/theme/ui.accordion.css +9 -0
- data/public/css/theme/ui.all.css +2 -0
- data/public/css/theme/ui.base.css +9 -0
- data/public/css/theme/ui.core.css +37 -0
- data/public/css/theme/ui.datepicker.css +62 -0
- data/public/css/theme/ui.dialog.css +13 -0
- data/public/css/theme/ui.progressbar.css +4 -0
- data/public/css/theme/ui.resizable.css +13 -0
- data/public/css/theme/ui.slider.css +17 -0
- data/public/css/theme/ui.tabs.css +9 -0
- data/public/css/theme/ui.theme.css +245 -0
- data/public/js/fg.menu.js +645 -0
- data/public/js/jTypeWriter.js +26 -0
- data/public/js/jquery-1.4.min.js +151 -0
- data/public/js/sh_lang/sh_ruby.min.js +1 -0
- data/public/js/sh_main.min.js +4 -0
- data/public/js/showoff.js +243 -0
- data/views/index.erb +57 -0
- metadata +123 -0
data/README.txt
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
ShowOff Presentation Software
|
2
|
+
=============================
|
3
|
+
|
4
|
+
ShowOff is a Sinatra web app that reads simple configuration files for a
|
5
|
+
presentation. It is sort of like a Keynote web app engine. I am using it
|
6
|
+
to do all my talks in 2010, because I have a deep hatred in my heart for
|
7
|
+
Keynote and yet it is by far the best in the field.
|
8
|
+
|
9
|
+
The idea is that you setup your slide files in section subdirectories and
|
10
|
+
then startup the showoff server in that directory. It will read in your
|
11
|
+
showoff.json file for which sections go in which order and then will give
|
12
|
+
you a URL to present from.
|
13
|
+
|
14
|
+
It can:
|
15
|
+
|
16
|
+
* show simple text
|
17
|
+
* show images
|
18
|
+
* show syntax highlighted code
|
19
|
+
* bullets with incremental advancing
|
20
|
+
* re-enact command line interactions
|
21
|
+
* call up a menu of sections/slides at any time to jump around
|
22
|
+
|
23
|
+
It might will can:
|
24
|
+
|
25
|
+
* do simple transitions (instant, fade, slide in)
|
26
|
+
* show a timer - elapsed / remaining
|
27
|
+
* perform simple animations of images moving between keyframes
|
28
|
+
* show syncronized, hidden notes on another browser (like an iphone)
|
29
|
+
* show audience questions / comments (twitter or direct)
|
30
|
+
* let audience members go back / catch up as you talk
|
31
|
+
* let audience members vote on sections (?)
|
32
|
+
* broadcast itself on Bonjour
|
33
|
+
* let audience members download slides, code samples or other supplementary material
|
34
|
+
|
35
|
+
Some of the nice things are that you can easily version control it, you
|
36
|
+
can easily move sections between presentations, and you can rearrange or
|
37
|
+
remove sections easily.
|
38
|
+
|
39
|
+
Usage
|
40
|
+
====================
|
41
|
+
|
42
|
+
To try ShowOff, clone this repo and run ./bin/showoff, which will start
|
43
|
+
up the Sinatra server and serve the examples/ directory. Eventually this
|
44
|
+
will be gemified and you can run it in any ShowOff directory.
|
45
|
+
|
46
|
+
Real World Usage
|
47
|
+
====================
|
48
|
+
|
49
|
+
So far, showoff has been used in the following presentations:
|
50
|
+
|
51
|
+
* LinuxConf.au 2010 - Wrangling Git - Scott Chacon
|
52
|
+
http://github.com/schacon/showoff-wrangling-git
|
53
|
+
|
54
|
+
If you use it for something, please let me know.
|
55
|
+
|
56
|
+
Future Plans
|
57
|
+
====================
|
58
|
+
|
59
|
+
Right now it comes with an example presentation (my LinuxConf.au talk)
|
60
|
+
that will probably change or go away at some point. I would like this
|
61
|
+
to eventually be a general tool rather than having the presentation in
|
62
|
+
the showoff repo. Eventually. So you would install showoff as a gem
|
63
|
+
and then have just the presentation as your git repo (or whatever) and
|
64
|
+
run 'showoff' in the repo to start the presentation.
|
65
|
+
|
66
|
+
I really want this to evolve into a dynamic presentation software server,
|
67
|
+
that gives the audience a lot of interaction into the presentation -
|
68
|
+
helping them decide dynamically what the content of the presentation is,
|
69
|
+
ask questions without interupting the presenter, etc. I want the audience
|
70
|
+
to be able to download a dynamically generated PDF of either the actual
|
71
|
+
talk that was given, or all the available slides, plus supplementary
|
72
|
+
material. And I want the presenter (me) to be able to push each
|
73
|
+
presentation to Heroku or GitHub pages for archiving super easily.
|
74
|
+
|
75
|
+
Why Not S5 or Slidy or Slidedown?
|
76
|
+
=================================
|
77
|
+
|
78
|
+
S5 and Slidy are really cool, and I was going to use them, but mainly I wanted
|
79
|
+
something more dynamic. I wanted Slidy + Slidedown, where I could write my
|
80
|
+
slideshows in a structured format in sections, where the sections could easily
|
81
|
+
be moved around and between presentations and could be written in Markdown. I
|
82
|
+
also like the idea of having interactive presentation system and didn't need
|
83
|
+
half the features of S5/Slidy (style based print view, auto-scaling, themes,
|
84
|
+
etc).
|
85
|
+
|
86
|
+
Requirements
|
87
|
+
============
|
88
|
+
|
89
|
+
* Ruby (duh)
|
90
|
+
* Sinatra (and thus Rack)
|
91
|
+
* BlueCloth
|
92
|
+
* Nokogiri
|
93
|
+
* Firefox or Chrome to present
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
begin
|
2
|
+
require 'mg'
|
3
|
+
rescue LoadError
|
4
|
+
abort "Please `gem install mg`"
|
5
|
+
end
|
6
|
+
|
7
|
+
class MG
|
8
|
+
# Monkey patch until http://github.com/defunkt/mg/commit/no_safe_level
|
9
|
+
# is merged and released upstream.
|
10
|
+
def spec
|
11
|
+
@spec ||= eval(File.read(gemspec))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
MG.new("showoff.gemspec")
|
data/bin/showoff
ADDED
data/lib/showoff.rb
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'sinatra/base'
|
3
|
+
require 'json'
|
4
|
+
require 'nokogiri'
|
5
|
+
|
6
|
+
begin
|
7
|
+
require 'rdiscount'
|
8
|
+
rescue LoadError
|
9
|
+
require 'bluecloth'
|
10
|
+
Markdown = BlueCloth
|
11
|
+
end
|
12
|
+
require 'pp'
|
13
|
+
|
14
|
+
class ShowOff < Sinatra::Application
|
15
|
+
|
16
|
+
set :views, File.dirname(__FILE__) + '/../views'
|
17
|
+
set :public, File.dirname(__FILE__) + '/../public'
|
18
|
+
set :pres_dir, 'example'
|
19
|
+
|
20
|
+
def initialize(app=nil)
|
21
|
+
super(app)
|
22
|
+
puts dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
23
|
+
if Dir.pwd == dir
|
24
|
+
options.pres_dir = dir + '/example'
|
25
|
+
else
|
26
|
+
options.pres_dir = Dir.pwd
|
27
|
+
end
|
28
|
+
puts options.pres_dir
|
29
|
+
end
|
30
|
+
|
31
|
+
helpers do
|
32
|
+
def load_section_files(section)
|
33
|
+
section = File.join(options.pres_dir, section)
|
34
|
+
files = Dir.glob("#{section}/**/*").sort
|
35
|
+
pp files
|
36
|
+
files
|
37
|
+
end
|
38
|
+
|
39
|
+
def process_markdown(name, content)
|
40
|
+
slides = content.split('!SLIDE')
|
41
|
+
slides.delete('')
|
42
|
+
final = ''
|
43
|
+
if slides.size > 1
|
44
|
+
seq = 1
|
45
|
+
end
|
46
|
+
slides.each do |slide|
|
47
|
+
md = ''
|
48
|
+
lines = slide.split("\n")
|
49
|
+
classes = lines.shift
|
50
|
+
slide = lines.join("\n")
|
51
|
+
if seq
|
52
|
+
md += "<div class=\"slide #{classes}\" ref=\"#{name}/#{seq.to_s}\">\n"
|
53
|
+
seq += 1
|
54
|
+
else
|
55
|
+
md += "<div class=\"slide #{classes}\" ref=\"#{name}\">\n"
|
56
|
+
end
|
57
|
+
sl = Markdown.new(slide).to_html
|
58
|
+
sl = update_image_paths(name, sl)
|
59
|
+
md += sl
|
60
|
+
md += "</div>\n"
|
61
|
+
final += update_commandline_code(md)
|
62
|
+
end
|
63
|
+
final
|
64
|
+
end
|
65
|
+
|
66
|
+
def update_image_paths(path, slide)
|
67
|
+
paths = path.split('/')
|
68
|
+
paths.pop
|
69
|
+
path = paths.join('/')
|
70
|
+
slide.gsub(/img src=\"(.*?)\"/, 'img src="/image/' + path + '/\1"')
|
71
|
+
end
|
72
|
+
|
73
|
+
def update_commandline_code(slide)
|
74
|
+
html = Nokogiri::XML.parse(slide)
|
75
|
+
|
76
|
+
html.css('pre').each do |pre|
|
77
|
+
pre.css('code').each do |code|
|
78
|
+
out = code.text
|
79
|
+
lines = out.split("\n")
|
80
|
+
if lines.first[0, 3] == '@@@'
|
81
|
+
lang = lines.shift.gsub('@@@', '').strip
|
82
|
+
pre.set_attribute('class', 'sh_' + lang)
|
83
|
+
code.content = lines.join("\n")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
html.css('.commandline > pre > code').each do |code|
|
89
|
+
out = code.text
|
90
|
+
lines = out.split(/^\$(.*?)$/)
|
91
|
+
lines.delete('')
|
92
|
+
code.content = ''
|
93
|
+
while(lines.size > 0) do
|
94
|
+
command = lines.shift
|
95
|
+
result = lines.shift
|
96
|
+
c = Nokogiri::XML::Node.new('code', html)
|
97
|
+
c.set_attribute('class', 'command')
|
98
|
+
c.content = '$' + command
|
99
|
+
code << c
|
100
|
+
c = Nokogiri::XML::Node.new('code', html)
|
101
|
+
c.set_attribute('class', 'result')
|
102
|
+
c.content = result
|
103
|
+
code << c
|
104
|
+
end
|
105
|
+
end
|
106
|
+
html.root.to_s
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
get '/' do
|
111
|
+
erb :index
|
112
|
+
end
|
113
|
+
|
114
|
+
get '/image/*' do
|
115
|
+
img_file = params[:splat].join('/')
|
116
|
+
img = File.join(options.pres_dir, img_file)
|
117
|
+
send_file img
|
118
|
+
end
|
119
|
+
|
120
|
+
get '/slides' do
|
121
|
+
index = File.join(options.pres_dir, 'showoff.json')
|
122
|
+
files = []
|
123
|
+
if File.exists?(index)
|
124
|
+
order = JSON.parse(File.read(index))
|
125
|
+
order = order.map { |s| s['section'] }
|
126
|
+
order.each do |section|
|
127
|
+
files << load_section_files(section)
|
128
|
+
|
129
|
+
end
|
130
|
+
files = files.flatten
|
131
|
+
files = files.select { |f| f =~ /.md/ }
|
132
|
+
data = ''
|
133
|
+
files.each do |f|
|
134
|
+
fname = f.gsub(options.pres_dir + '/', '').gsub('.md', '')
|
135
|
+
data += process_markdown(fname, File.read(f))
|
136
|
+
end
|
137
|
+
end
|
138
|
+
data
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
/* Styles for jQuery menu widget
|
2
|
+
Author: Maggie Wachs, maggie@filamentgroup.com
|
3
|
+
Date: September 2008
|
4
|
+
*/
|
5
|
+
|
6
|
+
|
7
|
+
/* REQUIRED STYLES - the menus will only render correctly with these rules */
|
8
|
+
|
9
|
+
.fg-menu-container { position: absolute; top:0; left:-999px; padding: .4em; overflow: hidden; }
|
10
|
+
.fg-menu-container.fg-menu-flyout { overflow: visible; }
|
11
|
+
|
12
|
+
.fg-menu, .fg-menu ul { list-style-type:none; padding: 0; margin:0; }
|
13
|
+
|
14
|
+
.fg-menu { position:relative; }
|
15
|
+
.fg-menu-flyout .fg-menu { position:static; }
|
16
|
+
|
17
|
+
.fg-menu ul { position:absolute; top:0; }
|
18
|
+
.fg-menu ul ul { top:-1px; }
|
19
|
+
|
20
|
+
.fg-menu-container.fg-menu-ipod .fg-menu-content,
|
21
|
+
.fg-menu-container.fg-menu-ipod .fg-menu-content ul { background: none !important; }
|
22
|
+
|
23
|
+
.fg-menu.fg-menu-scroll,
|
24
|
+
.fg-menu ul.fg-menu-scroll { overflow: scroll; overflow-x: hidden; }
|
25
|
+
|
26
|
+
.fg-menu li { clear:both; float:left; width:100%; margin: 0; padding:0; border: 0; }
|
27
|
+
.fg-menu li li { font-size:1em; } /* inner li font size must be reset so that they don't blow up */
|
28
|
+
|
29
|
+
.fg-menu-flyout ul ul { padding: .4em; }
|
30
|
+
.fg-menu-flyout li { position:relative; }
|
31
|
+
|
32
|
+
.fg-menu-scroll { overflow: scroll; overflow-x: hidden; }
|
33
|
+
|
34
|
+
.fg-menu-breadcrumb { margin: 0; padding: 0; }
|
35
|
+
|
36
|
+
.fg-menu-footer { margin-top: .4em; padding: .4em; }
|
37
|
+
.fg-menu-header { margin-bottom: .4em; padding: .4em; }
|
38
|
+
|
39
|
+
.fg-menu-breadcrumb li { float: left; list-style: none; margin: 0; padding: 0 .2em; font-size: .9em; opacity: .7; }
|
40
|
+
.fg-menu-breadcrumb li.fg-menu-prev-list,
|
41
|
+
.fg-menu-breadcrumb li.fg-menu-current-crumb { clear: left; float: none; opacity: 1; }
|
42
|
+
.fg-menu-breadcrumb li.fg-menu-current-crumb { padding-top: .2em; }
|
43
|
+
|
44
|
+
.fg-menu-breadcrumb a,
|
45
|
+
.fg-menu-breadcrumb span { float: left; }
|
46
|
+
|
47
|
+
.fg-menu-footer a:link,
|
48
|
+
.fg-menu-footer a:visited { float:left; width:100%; text-decoration: none; }
|
49
|
+
.fg-menu-footer a:hover,
|
50
|
+
.fg-menu-footer a:active { }
|
51
|
+
|
52
|
+
.fg-menu-footer a span { float:left; cursor: pointer; }
|
53
|
+
|
54
|
+
.fg-menu-breadcrumb .fg-menu-prev-list a:link,
|
55
|
+
.fg-menu-breadcrumb .fg-menu-prev-list a:visited,
|
56
|
+
.fg-menu-breadcrumb .fg-menu-prev-list a:hover,
|
57
|
+
.fg-menu-breadcrumb .fg-menu-prev-list a:active { background-image: none; text-decoration:none; }
|
58
|
+
|
59
|
+
.fg-menu-breadcrumb .fg-menu-prev-list a { float: left; padding-right: .4em; }
|
60
|
+
.fg-menu-breadcrumb .fg-menu-prev-list a .ui-icon { float: left; }
|
61
|
+
|
62
|
+
.fg-menu-breadcrumb .fg-menu-current-crumb a:link,
|
63
|
+
.fg-menu-breadcrumb .fg-menu-current-crumb a:visited,
|
64
|
+
.fg-menu-breadcrumb .fg-menu-current-crumb a:hover,
|
65
|
+
.fg-menu-breadcrumb .fg-menu-current-crumb a:active { display:block; background-image:none; font-size:1.3em; text-decoration:none; }
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
/* REQUIRED LINK STYLES: links are "display:block" by default; if the menu options are split into
|
70
|
+
selectable node links and 'next' links, the script floats the node links left and floats the 'next' links to the right */
|
71
|
+
|
72
|
+
.fg-menu a:link,
|
73
|
+
.fg-menu a:visited,
|
74
|
+
.fg-menu a:hover,
|
75
|
+
.fg-menu a:active { float:left; width:92%; padding:.3em 3%; text-decoration:none; outline: 0 !important; }
|
76
|
+
|
77
|
+
.fg-menu a { border: 1px dashed transparent; }
|
78
|
+
|
79
|
+
.fg-menu a.ui-state-default:link,
|
80
|
+
.fg-menu a.ui-state-default:visited,
|
81
|
+
.fg-menu a.ui-state-default:hover,
|
82
|
+
.fg-menu a.ui-state-default:active,
|
83
|
+
.fg-menu a.ui-state-hover:link,
|
84
|
+
.fg-menu a.ui-state-hover:visited,
|
85
|
+
.fg-menu a.ui-state-hover:hover,
|
86
|
+
.fg-menu a.ui-state-hover:active,
|
87
|
+
.fg-menu a.ui-state-active:link,
|
88
|
+
.fg-menu a.ui-state-active:visited,
|
89
|
+
.fg-menu a.ui-state-active:hover,
|
90
|
+
.fg-menu a.ui-state-active:active { border-style: solid; font-weight: normal; }
|
91
|
+
|
92
|
+
.fg-menu a span { display:block; cursor:pointer; }
|
93
|
+
|
94
|
+
|
95
|
+
/* SUGGESTED STYLES - for use with jQuery UI Themeroller CSS */
|
96
|
+
|
97
|
+
.fg-menu-indicator span { float:left; }
|
98
|
+
.fg-menu-indicator span.ui-icon { float:right; }
|
99
|
+
|
100
|
+
.fg-menu-content.ui-widget-content,
|
101
|
+
.fg-menu-content ul.ui-widget-content { border:0; }
|
102
|
+
|
103
|
+
|
104
|
+
/* ICONS AND DIVIDERS */
|
105
|
+
|
106
|
+
.fg-menu.fg-menu-has-icons a:link,
|
107
|
+
.fg-menu.fg-menu-has-icons a:visited,
|
108
|
+
.fg-menu.fg-menu-has-icons a:hover,
|
109
|
+
.fg-menu.fg-menu-has-icons a:active { padding-left:20px; }
|
110
|
+
|
111
|
+
.fg-menu .horizontal-divider hr, .fg-menu .horizontal-divider span { padding:0; margin:5px .6em; }
|
112
|
+
.fg-menu .horizontal-divider hr { border:0; height:1px; }
|
113
|
+
.fg-menu .horizontal-divider span { font-size:.9em; text-transform: uppercase; padding-left:.2em; }
|
114
|
+
|
@@ -0,0 +1,66 @@
|
|
1
|
+
pre.sh_sourceCode {
|
2
|
+
background-color: white;
|
3
|
+
color: black;
|
4
|
+
font-style: normal;
|
5
|
+
font-weight: normal;
|
6
|
+
}
|
7
|
+
|
8
|
+
pre.sh_sourceCode .sh_keyword { color: blue; font-weight: bold; } /* language keywords */
|
9
|
+
pre.sh_sourceCode .sh_type { color: darkgreen; } /* basic types */
|
10
|
+
pre.sh_sourceCode .sh_usertype { color: teal; } /* user defined types */
|
11
|
+
pre.sh_sourceCode .sh_string { color: red; font-family: monospace; } /* strings and chars */
|
12
|
+
pre.sh_sourceCode .sh_regexp { color: orange; font-family: monospace; } /* regular expressions */
|
13
|
+
pre.sh_sourceCode .sh_specialchar { color: pink; font-family: monospace; } /* e.g., \n, \t, \\ */
|
14
|
+
pre.sh_sourceCode .sh_comment { color: brown; font-style: italic; } /* comments */
|
15
|
+
pre.sh_sourceCode .sh_number { color: purple; } /* literal numbers */
|
16
|
+
pre.sh_sourceCode .sh_preproc { color: darkblue; font-weight: bold; } /* e.g., #include, import */
|
17
|
+
pre.sh_sourceCode .sh_symbol { color: darkred; } /* e.g., <, >, + */
|
18
|
+
pre.sh_sourceCode .sh_function { color: black; font-weight: bold; } /* function calls and declarations */
|
19
|
+
pre.sh_sourceCode .sh_cbracket { color: red; } /* block brackets (e.g., {, }) */
|
20
|
+
pre.sh_sourceCode .sh_todo { font-weight: bold; background-color: cyan; } /* TODO and FIXME */
|
21
|
+
|
22
|
+
/* Predefined variables and functions (for instance glsl) */
|
23
|
+
pre.sh_sourceCode .sh_predef_var { color: darkblue; }
|
24
|
+
pre.sh_sourceCode .sh_predef_func { color: darkblue; font-weight: bold; }
|
25
|
+
|
26
|
+
/* for OOP */
|
27
|
+
pre.sh_sourceCode .sh_classname { color: teal; }
|
28
|
+
|
29
|
+
/* line numbers (not yet implemented) */
|
30
|
+
pre.sh_sourceCode .sh_linenum { color: black; font-family: monospace; }
|
31
|
+
|
32
|
+
/* Internet related */
|
33
|
+
pre.sh_sourceCode .sh_url { color: blue; text-decoration: underline; font-family: monospace; }
|
34
|
+
|
35
|
+
/* for ChangeLog and Log files */
|
36
|
+
pre.sh_sourceCode .sh_date { color: blue; font-weight: bold; }
|
37
|
+
pre.sh_sourceCode .sh_time, pre.sh_sourceCode .sh_file { color: darkblue; font-weight: bold; }
|
38
|
+
pre.sh_sourceCode .sh_ip, pre.sh_sourceCode .sh_name { color: darkgreen; }
|
39
|
+
|
40
|
+
/* for Prolog, Perl... */
|
41
|
+
pre.sh_sourceCode .sh_variable { color: darkgreen; }
|
42
|
+
|
43
|
+
/* for LaTeX */
|
44
|
+
pre.sh_sourceCode .sh_italics { color: darkgreen; font-style: italic; }
|
45
|
+
pre.sh_sourceCode .sh_bold { color: darkgreen; font-weight: bold; }
|
46
|
+
pre.sh_sourceCode .sh_underline { color: darkgreen; text-decoration: underline; }
|
47
|
+
pre.sh_sourceCode .sh_fixed { color: green; font-family: monospace; }
|
48
|
+
pre.sh_sourceCode .sh_argument { color: darkgreen; }
|
49
|
+
pre.sh_sourceCode .sh_optionalargument { color: purple; }
|
50
|
+
pre.sh_sourceCode .sh_math { color: orange; }
|
51
|
+
pre.sh_sourceCode .sh_bibtex { color: blue; }
|
52
|
+
|
53
|
+
/* for diffs */
|
54
|
+
pre.sh_sourceCode .sh_oldfile { color: orange; }
|
55
|
+
pre.sh_sourceCode .sh_newfile { color: darkgreen; }
|
56
|
+
pre.sh_sourceCode .sh_difflines { color: blue; }
|
57
|
+
|
58
|
+
/* for css */
|
59
|
+
pre.sh_sourceCode .sh_selector { color: purple; }
|
60
|
+
pre.sh_sourceCode .sh_property { color: blue; }
|
61
|
+
pre.sh_sourceCode .sh_value { color: darkgreen; font-style: italic; }
|
62
|
+
|
63
|
+
/* other */
|
64
|
+
pre.sh_sourceCode .sh_section { color: black; font-weight: bold; }
|
65
|
+
pre.sh_sourceCode .sh_paren { color: red; }
|
66
|
+
pre.sh_sourceCode .sh_attribute { color: darkgreen; }
|
@@ -0,0 +1,186 @@
|
|
1
|
+
body { font-family: "Gill Sans", Helvetica, Arial, sans-serif; }
|
2
|
+
|
3
|
+
#preso {
|
4
|
+
margin: 0;
|
5
|
+
padding: 0;
|
6
|
+
width: 1000px;
|
7
|
+
height: 730px;
|
8
|
+
margin-left:auto;
|
9
|
+
margin-right:auto;
|
10
|
+
overflow:hidden;
|
11
|
+
}
|
12
|
+
#footer {
|
13
|
+
background: #eee;
|
14
|
+
margin: 0;
|
15
|
+
padding: 3px;
|
16
|
+
width: 1000px;
|
17
|
+
height: 30px;
|
18
|
+
margin-left:auto;
|
19
|
+
margin-right:auto;
|
20
|
+
}
|
21
|
+
|
22
|
+
.slide {
|
23
|
+
border: 1px solid #fff;
|
24
|
+
}
|
25
|
+
|
26
|
+
.center img {
|
27
|
+
display:block;
|
28
|
+
margin-left:auto;
|
29
|
+
margin-right:auto;
|
30
|
+
}
|
31
|
+
|
32
|
+
.bullets ul {
|
33
|
+
display: block;
|
34
|
+
height: 600px;
|
35
|
+
font-size: 3em;
|
36
|
+
list-style: none;
|
37
|
+
margin-left: 0;
|
38
|
+
padding-left: 1em;
|
39
|
+
text-indent: -1em;
|
40
|
+
}
|
41
|
+
.bullets ul li {
|
42
|
+
text-align: center;
|
43
|
+
padding: 25px;
|
44
|
+
}
|
45
|
+
|
46
|
+
.smbullets ul {
|
47
|
+
display: block;
|
48
|
+
height: 600px;
|
49
|
+
font-size: 2em;
|
50
|
+
list-style: none;
|
51
|
+
margin-left: 0;
|
52
|
+
padding-left: 1em;
|
53
|
+
text-indent: -1em;
|
54
|
+
}
|
55
|
+
.smbullets ul li {
|
56
|
+
text-align: center;
|
57
|
+
padding: 10px;
|
58
|
+
}
|
59
|
+
|
60
|
+
.commandline pre {
|
61
|
+
font-size: 2em;
|
62
|
+
}
|
63
|
+
|
64
|
+
.commandline code.command {
|
65
|
+
color: #000;
|
66
|
+
}
|
67
|
+
|
68
|
+
.commandline code.result {
|
69
|
+
color: #444;
|
70
|
+
}
|
71
|
+
|
72
|
+
.command h1 {
|
73
|
+
white-space: pre;
|
74
|
+
font-family: monospace;
|
75
|
+
font-size: 3em;
|
76
|
+
}
|
77
|
+
|
78
|
+
.code {
|
79
|
+
white-space: pre;
|
80
|
+
font-family: monospace;
|
81
|
+
}
|
82
|
+
|
83
|
+
.subsection {
|
84
|
+
background: #008;
|
85
|
+
color: #fff;
|
86
|
+
}
|
87
|
+
|
88
|
+
.small {
|
89
|
+
font-size: 80%;
|
90
|
+
}
|
91
|
+
|
92
|
+
.smaller {
|
93
|
+
font-size: 70%;
|
94
|
+
}
|
95
|
+
|
96
|
+
h1 { font-size: 5em; font-weight: normal; text-align: center;}
|
97
|
+
h2 { font-size: 3em; font-weight: normal; text-align: center; }
|
98
|
+
h3 { font-size: 2em; font-weight: normal; text-align: center; }
|
99
|
+
|
100
|
+
pre { margin-left: 40px; font-size: 2.8em; }
|
101
|
+
|
102
|
+
.hidden { position:absolute; top:0; left:-9999px; width:1px; height:1px; overflow:hidden; }
|
103
|
+
#debugInfo { margin-left: 30px; }
|
104
|
+
|
105
|
+
#help {
|
106
|
+
background: #9f9;
|
107
|
+
position: absolute;
|
108
|
+
right: 80px;
|
109
|
+
display: none;
|
110
|
+
}
|
111
|
+
#help table tr td.key {
|
112
|
+
text-align: right;
|
113
|
+
border-right: 2px solid #8b8;
|
114
|
+
padding-right: 4px;
|
115
|
+
font-weight: bold;
|
116
|
+
}
|
117
|
+
|
118
|
+
.fg-button { clear:left; margin:0 4px 40px 20px; padding: .4em 1em; text-decoration:none !important; cursor:pointer; position: relative; text-align: center; zoom: 1; }
|
119
|
+
.fg-button .ui-icon { position: absolute; top: 50%; margin-top: -8px; left: 50%; margin-left: -8px; }
|
120
|
+
a.fg-button { float:left; }
|
121
|
+
.fg-button-icon-right { padding-right: 2.1em; }
|
122
|
+
.fg-button-icon-right .ui-icon { left: auto; right: .2em; margin-left: 0; }
|
123
|
+
|
124
|
+
.fg-button.ui-state-loading .ui-icon { background: url(spinner_bar.gif) no-repeat 0 0; }
|
125
|
+
|
126
|
+
#navmenu { position: absolute; top: 10px; left: 10px; width: 50px; }
|
127
|
+
|
128
|
+
.code .c { color: #999988; font-style: italic } /* Comment */
|
129
|
+
.code .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
130
|
+
.code .k { font-weight: bold } /* Keyword */
|
131
|
+
.code .o { font-weight: bold } /* Operator */
|
132
|
+
.code .cm { color: #999988; font-style: italic } /* Comment.Multiline */
|
133
|
+
.code .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
|
134
|
+
.code .c1 { color: #999988; font-style: italic } /* Comment.Single */
|
135
|
+
.code .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
|
136
|
+
.code .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
|
137
|
+
.code .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
|
138
|
+
.code .ge { font-style: italic } /* Generic.Emph */
|
139
|
+
.code .gr { color: #aa0000 } /* Generic.Error */
|
140
|
+
.code .gh { color: #999999 } /* Generic.Heading */
|
141
|
+
.code .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
|
142
|
+
.code .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
|
143
|
+
.code .go { color: #888888 } /* Generic.Output */
|
144
|
+
.code .gp { color: #555555 } /* Generic.Prompt */
|
145
|
+
.code .gs { font-weight: bold } /* Generic.Strong */
|
146
|
+
.code .gu { color: #aaaaaa } /* Generic.Subheading */
|
147
|
+
.code .gt { color: #aa0000 } /* Generic.Traceback */
|
148
|
+
.code .kc { font-weight: bold } /* Keyword.Constant */
|
149
|
+
.code .kd { font-weight: bold } /* Keyword.Declaration */
|
150
|
+
.code .kp { font-weight: bold } /* Keyword.Pseudo */
|
151
|
+
.code .kr { font-weight: bold } /* Keyword.Reserved */
|
152
|
+
.code .kt { color: #445588; font-weight: bold } /* Keyword.Type */
|
153
|
+
.code .m { color: #009999 } /* Literal.Number */
|
154
|
+
.code .s { color: #d14 } /* Literal.String */
|
155
|
+
.code .na { color: #008080 } /* Name.Attribute */
|
156
|
+
.code .nb { color: #0086B3 } /* Name.Builtin */
|
157
|
+
.code .nc { color: #445588; font-weight: bold } /* Name.Class */
|
158
|
+
.code .no { color: #008080 } /* Name.Constant */
|
159
|
+
.code .ni { color: #800080 } /* Name.Entity */
|
160
|
+
.code .ne { color: #990000; font-weight: bold } /* Name.Exception */
|
161
|
+
.code .nf { color: #990000; font-weight: bold } /* Name.Function */
|
162
|
+
.code .nn { color: #555555 } /* Name.Namespace */
|
163
|
+
.code .nt { color: #000080 } /* Name.Tag */
|
164
|
+
.code .nv { color: #008080 } /* Name.Variable */
|
165
|
+
.code .ow { font-weight: bold } /* Operator.Word */
|
166
|
+
.code .w { color: #bbbbbb } /* Text.Whitespace */
|
167
|
+
.code .mf { color: #009999 } /* Literal.Number.Float */
|
168
|
+
.code .mh { color: #009999 } /* Literal.Number.Hex */
|
169
|
+
.code .mi { color: #009999 } /* Literal.Number.Integer */
|
170
|
+
.code .mo { color: #009999 } /* Literal.Number.Oct */
|
171
|
+
.code .sb { color: #d14 } /* Literal.String.Backtick */
|
172
|
+
.code .sc { color: #d14 } /* Literal.String.Char */
|
173
|
+
.code .sd { color: #d14 } /* Literal.String.Doc */
|
174
|
+
.code .s2 { color: #d14 } /* Literal.String.Double */
|
175
|
+
.code .se { color: #d14 } /* Literal.String.Escape */
|
176
|
+
.code .sh { color: #d14 } /* Literal.String.Heredoc */
|
177
|
+
.code .si { color: #d14 } /* Literal.String.Interpol */
|
178
|
+
.code .sx { color: #d14 } /* Literal.String.Other */
|
179
|
+
.code .sr { color: #009926 } /* Literal.String.Regex */
|
180
|
+
.code .s1 { color: #d14 } /* Literal.String.Single */
|
181
|
+
.code .ss { color: #990073 } /* Literal.String.Symbol */
|
182
|
+
.code .bp { color: #999999 } /* Name.Builtin.Pseudo */
|
183
|
+
.code .vc { color: #008080 } /* Name.Variable.Class */
|
184
|
+
.code .vg { color: #008080 } /* Name.Variable.Global */
|
185
|
+
.code .vi { color: #008080 } /* Name.Variable.Instance */
|
186
|
+
.code .il { color: #009999 } /* Literal.Number.Integer.Long */
|