showoff 0.0.1
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.
- 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 */
|