showoff 0.16.2 → 0.17.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/showoff.rb +27 -36
- data/lib/showoff/version.rb +1 -1
- data/lib/showoff_utils.rb +82 -52
- data/public/css/presenter.css +121 -159
- data/public/css/showoff.css +73 -13
- data/public/js/jquery-ui-1.12.1.js +2 -2
- data/public/js/presenter.js +80 -32
- data/public/js/showoff.js +8 -5
- data/views/header.erb +1 -0
- data/views/presenter.erb +130 -106
- metadata +14 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 210a91a071a71b8ec4de4b9c128917eb19eb1f2c
|
4
|
+
data.tar.gz: f0cc7f2e1efc78af6bc92dfea9726d45db035425
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e62e8471ed1070766e8cf84d5387403d7a97ab245dabd5125595b5d986d73ab0b79ceb20ff0abfba06919b4ba9cfa45e45fcdea3b651a6a0fb4937ba17e6d239
|
7
|
+
data.tar.gz: 7c11b48e407c3fe975924e14a00a18ada6d74781029186f84e87d731ac5d0cd119272ff78a6ea0094c83e5fbb924bb017584ddb5271b76fce72caa2ee91050e5
|
data/lib/showoff.rb
CHANGED
@@ -236,17 +236,6 @@ class ShowOff < Sinatra::Application
|
|
236
236
|
end
|
237
237
|
|
238
238
|
helpers do
|
239
|
-
def load_section_files(section)
|
240
|
-
section = File.join(settings.pres_dir, section)
|
241
|
-
files = if File.directory? section
|
242
|
-
Dir.glob("#{section}/**/*").sort
|
243
|
-
else
|
244
|
-
Array(section)
|
245
|
-
end
|
246
|
-
@logger.debug files
|
247
|
-
files
|
248
|
-
end
|
249
|
-
|
250
239
|
def css_files
|
251
240
|
Dir.glob("#{settings.pres_dir}/*.css").map { |path| File.basename(path) }
|
252
241
|
end
|
@@ -297,7 +286,7 @@ class ShowOff < Sinatra::Application
|
|
297
286
|
end
|
298
287
|
end
|
299
288
|
|
300
|
-
def process_markdown(name, content, opts={:static=>false, :pdf=>false, :print=>false, :toc=>false, :supplemental=>nil, :section=>nil})
|
289
|
+
def process_markdown(name, section, content, opts={:static=>false, :pdf=>false, :print=>false, :toc=>false, :supplemental=>nil, :section=>nil})
|
301
290
|
if settings.encoding and content.respond_to?(:force_encoding)
|
302
291
|
content.force_encoding(settings.encoding)
|
303
292
|
end
|
@@ -393,7 +382,7 @@ class ShowOff < Sinatra::Application
|
|
393
382
|
|
394
383
|
# create html for the slide
|
395
384
|
classes = content_classes.join(' ')
|
396
|
-
content = "<div"
|
385
|
+
content = "<div data-section=\"#{section}\" data-title=\"#{File.basename(name)}\""
|
397
386
|
content += " id=\"#{id}\"" if id
|
398
387
|
content += " style=\"background-image: url('file/#{slide.bg}');\"" if slide.bg
|
399
388
|
content += " class=\"slide #{classes}\" data-transition=\"#{transition}\">"
|
@@ -625,7 +614,7 @@ class ShowOff < Sinatra::Application
|
|
625
614
|
end
|
626
615
|
|
627
616
|
# swap out the tag, if found, with the table of contents
|
628
|
-
doc.at('p:contains("~~~TOC~~~")').replace(toc)
|
617
|
+
doc.at('p:contains("~~~TOC~~~")').replace(toc) rescue nil
|
629
618
|
end
|
630
619
|
|
631
620
|
doc.css('.slide.glossary .content').each do |glossary|
|
@@ -1017,28 +1006,26 @@ class ShowOff < Sinatra::Application
|
|
1017
1006
|
def get_slides_html(opts={:static=>false, :pdf=>false, :toc=>false, :supplemental=>nil, :section=>nil})
|
1018
1007
|
|
1019
1008
|
sections = ShowOffUtils.showoff_sections(settings.pres_dir, @logger)
|
1020
|
-
files = []
|
1021
1009
|
if sections
|
1022
1010
|
data = ''
|
1023
|
-
sections.each do |section|
|
1024
|
-
|
1025
|
-
|
1026
|
-
|
1027
|
-
|
1028
|
-
|
1029
|
-
|
1030
|
-
|
1031
|
-
|
1032
|
-
files.each do |f|
|
1033
|
-
fname = f.gsub(settings.pres_dir + '/', '').gsub('.md', '')
|
1034
|
-
begin
|
1035
|
-
data << process_markdown(fname, File.read(f), opts)
|
1036
|
-
rescue Errno::ENOENT => e
|
1037
|
-
@logger.error e.message
|
1038
|
-
data << process_markdown(fname, "!SLIDE\n# Missing File!\n## #{fname}", opts)
|
1039
|
-
end
|
1011
|
+
sections.each do |section, slides|
|
1012
|
+
slides.each do |filename|
|
1013
|
+
next unless filename.end_with? '.md'
|
1014
|
+
path = filename.chomp('.md') # TODO: I don't know why we do this silly thing
|
1015
|
+
begin
|
1016
|
+
data << process_markdown(path, section, File.read(filename), opts)
|
1017
|
+
rescue Errno::ENOENT => e
|
1018
|
+
@logger.error e.message
|
1019
|
+
data << process_markdown(path, section, "!SLIDE\n# Missing File!\n## #{fname}", opts)
|
1040
1020
|
end
|
1041
1021
|
end
|
1022
|
+
|
1023
|
+
# I don't know what this part was supposed to do
|
1024
|
+
# if section =~ /^#/
|
1025
|
+
# name = section.each_line.first.gsub(/^#*/,'').strip
|
1026
|
+
# data << process_markdown(name, "<!SLIDE subsection>\n" + section, opts)
|
1027
|
+
# else
|
1028
|
+
|
1042
1029
|
end
|
1043
1030
|
end
|
1044
1031
|
process_content_for_all_slides(data, @slide_count, opts)
|
@@ -1104,11 +1091,15 @@ class ShowOff < Sinatra::Application
|
|
1104
1091
|
@edit = settings.showoff_config['edit'] if @review
|
1105
1092
|
|
1106
1093
|
# store a cookie to tell clients apart. More reliable than using IP due to proxies, etc.
|
1107
|
-
|
1094
|
+
if request.nil? # when running showoff static
|
1108
1095
|
@client_id = guid()
|
1109
|
-
response.set_cookie('client_id', @client_id)
|
1110
1096
|
else
|
1111
|
-
|
1097
|
+
if request.cookies['client_id']
|
1098
|
+
@client_id = request.cookies['client_id']
|
1099
|
+
else
|
1100
|
+
@client_id = guid()
|
1101
|
+
response.set_cookie('client_id', @client_id)
|
1102
|
+
end
|
1112
1103
|
end
|
1113
1104
|
|
1114
1105
|
erb :index
|
@@ -1428,7 +1419,7 @@ class ShowOff < Sinatra::Application
|
|
1428
1419
|
content = content.split(/^\<?!SLIDE/m).reject { |sl| sl.empty? }[num-1]
|
1429
1420
|
end
|
1430
1421
|
|
1431
|
-
html = process_markdown(slide, content, {})
|
1422
|
+
html = process_markdown(slide, '', content, {})
|
1432
1423
|
doc = Nokogiri::HTML::DocumentFragment.parse(html)
|
1433
1424
|
|
1434
1425
|
if index == 'all'
|
data/lib/showoff/version.rb
CHANGED
data/lib/showoff_utils.rb
CHANGED
@@ -76,7 +76,7 @@ class ShowOffUtils
|
|
76
76
|
FileUtils.mkdir_p('_files/share')
|
77
77
|
FileUtils.mkdir_p('_images')
|
78
78
|
|
79
|
-
self.
|
79
|
+
self.showoff_slide_files('.').each do |filename|
|
80
80
|
next if File.exist? filename
|
81
81
|
|
82
82
|
puts "Creating: #{filename}"
|
@@ -104,15 +104,7 @@ class ShowOffUtils
|
|
104
104
|
errors = []
|
105
105
|
|
106
106
|
# get a list of actual filenames
|
107
|
-
self.
|
108
|
-
if File.directory?(section)
|
109
|
-
files << showoff.load_section_files(section)
|
110
|
-
else
|
111
|
-
files << section
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
files.flatten!
|
107
|
+
files = self.showoff_slide_files('.')
|
116
108
|
files.each do |filename|
|
117
109
|
unless File.exist? filename
|
118
110
|
errors << "Missing path: #{filename}"
|
@@ -405,57 +397,95 @@ class ShowOffUtils
|
|
405
397
|
logger.level = Logger::WARN
|
406
398
|
end
|
407
399
|
|
408
|
-
index
|
409
|
-
|
400
|
+
index = File.join(dir, ShowOffUtils.presentation_config_file)
|
401
|
+
begin
|
402
|
+
data = JSON.parse(File.read(index)) rescue ["."] # default boring showoff.json
|
403
|
+
logger.debug data
|
404
|
+
if data.is_a?(Hash)
|
405
|
+
sections = data['sections'] if data.include? 'sections'
|
406
|
+
else
|
407
|
+
sections = data
|
408
|
+
end
|
410
409
|
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
410
|
+
if sections.is_a? Array
|
411
|
+
sections = showoff_legacy_sections(sections)
|
412
|
+
elsif sections.is_a? Hash
|
413
|
+
raise "Named sections are unsupported on Ruby versions less than 1.9." if RUBY_VERSION.start_with? '1.8'
|
414
|
+
sections.each do |key, value|
|
415
|
+
next if value.is_a? Array
|
416
|
+
cwd = File.expand_path(dir)
|
417
|
+
path = File.dirname(value)
|
418
|
+
data = JSON.parse(File.read(value))
|
419
|
+
raise "The section file #{value} must contain an array of filenames." unless data.is_a? Array
|
420
|
+
|
421
|
+
# get relative paths to each slide in the array
|
422
|
+
sections[key] = data.map do |filename|
|
423
|
+
File.expand_path("#{path}/#{filename}").sub(/^#{cwd}\//, '')
|
424
|
+
end
|
419
425
|
end
|
426
|
+
else
|
427
|
+
raise "The `sections` key must be an Array or Hash, not a #{sections.class}."
|
428
|
+
end
|
420
429
|
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
430
|
+
rescue => e
|
431
|
+
logger.error "There was a problem with the presentation file #{index}"
|
432
|
+
logger.error e.message
|
433
|
+
logger.debug e.backtrace
|
434
|
+
sections = {}
|
435
|
+
end
|
436
|
+
|
437
|
+
sections
|
438
|
+
end
|
439
|
+
|
440
|
+
def self.showoff_legacy_sections(data)
|
441
|
+
# each entry in sections can be:
|
442
|
+
# - "filename.md"
|
443
|
+
# - { "section": "filename.md" }
|
444
|
+
# - { "section": [ "array.md, "of.md, "files.md"] }
|
445
|
+
# - { "include": "sections.json" }
|
446
|
+
sections = {}
|
447
|
+
data.map do |entry|
|
448
|
+
if entry.is_a? String
|
449
|
+
if File.directory? entry
|
450
|
+
next Dir.glob("#{entry}/**/*.md").sort
|
451
|
+
else
|
452
|
+
next entry
|
453
|
+
end
|
454
|
+
end
|
455
|
+
next nil unless entry.is_a? Hash
|
456
|
+
next entry['section'] if entry.include? 'section'
|
457
|
+
|
458
|
+
section = nil
|
459
|
+
if entry.include? 'include'
|
460
|
+
file = entry['include']
|
461
|
+
path = File.dirname(file)
|
462
|
+
data = JSON.parse(File.read(file))
|
463
|
+
if data.is_a? Array
|
464
|
+
if path == '.'
|
465
|
+
section = data
|
466
|
+
else
|
467
|
+
section = data.map do |source|
|
468
|
+
"#{path}/#{source}"
|
445
469
|
end
|
446
470
|
end
|
447
|
-
|
448
|
-
section
|
449
471
|
end
|
450
|
-
rescue => e
|
451
|
-
logger.error "There was a problem with the presentation file #{index}"
|
452
|
-
logger.error e.message
|
453
|
-
logger.debug e.backtrace
|
454
|
-
sections = []
|
455
472
|
end
|
473
|
+
|
474
|
+
section
|
475
|
+
end.flatten.compact.each do |filename|
|
476
|
+
# We do this in two passes simply because most of it was already done
|
477
|
+
# and I don't want to waste time on legacy functionality.
|
478
|
+
path = File.dirname(filename)
|
479
|
+
|
480
|
+
sections[path] ||= []
|
481
|
+
sections[path] << filename
|
456
482
|
end
|
483
|
+
sections
|
484
|
+
end
|
457
485
|
|
458
|
-
|
486
|
+
def self.showoff_slide_files(dir, logger = nil)
|
487
|
+
data = showoff_sections(dir, logger)
|
488
|
+
data.map { |key, value| value }.flatten
|
459
489
|
end
|
460
490
|
|
461
491
|
def self.showoff_title(dir = '.')
|
data/public/css/presenter.css
CHANGED
@@ -13,54 +13,58 @@
|
|
13
13
|
#timerSection,
|
14
14
|
#statusbar,
|
15
15
|
#questions,
|
16
|
-
#notes
|
16
|
+
#notes,
|
17
|
+
#topbar,
|
18
|
+
#presenterPopup {
|
17
19
|
font-size: .8em;
|
18
20
|
}
|
19
21
|
|
22
|
+
#topbar,
|
23
|
+
#topbar a,
|
24
|
+
#topbar .ui-widget,
|
25
|
+
#presenterPopup,
|
26
|
+
#notes-wrapper {
|
27
|
+
color: #ffffff;
|
28
|
+
background-color: #546E7A;
|
29
|
+
}
|
30
|
+
|
20
31
|
#topbar {
|
21
32
|
display: flex;
|
22
33
|
flex-flow: row;
|
23
|
-
line-height:
|
24
|
-
height:
|
25
|
-
|
26
|
-
|
27
|
-
color: #fff;
|
34
|
+
line-height: 3em;
|
35
|
+
height: 3em;
|
36
|
+
box-shadow:0 0 1em rgba(0,0,0,0.35);
|
37
|
+
z-index: 3;
|
28
38
|
}
|
29
39
|
|
30
40
|
#topbar a,
|
31
|
-
#topbar
|
41
|
+
#topbar .ui-widget {
|
32
42
|
text-decoration: none;
|
33
|
-
color: #fff;
|
34
|
-
background: #222222;
|
35
43
|
}
|
36
44
|
|
37
|
-
#topbar a
|
38
|
-
|
39
|
-
background-color: #555;
|
45
|
+
#topbar a i {
|
46
|
+
padding-left: .25em;
|
40
47
|
}
|
41
48
|
|
42
|
-
#topbar
|
43
|
-
|
49
|
+
#topbar a:hover,
|
50
|
+
#topbar .ui-widget:hover {
|
51
|
+
background-color: #263238;
|
44
52
|
}
|
45
|
-
|
46
|
-
|
47
|
-
padding:
|
53
|
+
|
54
|
+
#close-sidebar {
|
55
|
+
padding: .25em;
|
48
56
|
transition: all 200ms;
|
49
57
|
}
|
50
|
-
#
|
58
|
+
#close-sidebar.disabled {
|
51
59
|
color: grey;
|
52
60
|
}
|
53
|
-
#
|
61
|
+
#close-sidebar.disabled:hover {
|
54
62
|
background-color: transparent;
|
55
63
|
cursor: default;
|
56
64
|
}
|
57
65
|
|
58
66
|
#slideSource {
|
59
|
-
|
60
|
-
flex-shrink: 1;
|
61
|
-
white-space: nowrap;
|
62
|
-
overflow: hidden;
|
63
|
-
margin: 0 0.5em;
|
67
|
+
float: right;
|
64
68
|
}
|
65
69
|
|
66
70
|
#links {
|
@@ -69,14 +73,22 @@
|
|
69
73
|
margin: 0 0 0 auto;
|
70
74
|
}
|
71
75
|
|
72
|
-
#links a
|
73
|
-
|
74
|
-
|
75
|
-
padding:
|
76
|
+
#links a,
|
77
|
+
#topbar .ui-widget {
|
78
|
+
display: inline-block;
|
79
|
+
padding: 0 1em;
|
80
|
+
}
|
81
|
+
|
82
|
+
#topbar .ui-button {
|
83
|
+
border: none;
|
84
|
+
border-radius: 0;
|
85
|
+
line-height: 3em;
|
86
|
+
margin-top: -1px; /* hell if I know why, but probably somewhere in jquery-ui */
|
76
87
|
}
|
77
88
|
|
78
|
-
#links a.enabled
|
79
|
-
|
89
|
+
#links a.enabled,
|
90
|
+
#topbar .ui-state-active {
|
91
|
+
background-color: #263238;
|
80
92
|
}
|
81
93
|
#links a.warning {
|
82
94
|
background-color: #8e030a;
|
@@ -90,25 +102,20 @@
|
|
90
102
|
margin: 0 0.5em;
|
91
103
|
}
|
92
104
|
|
93
|
-
#presenterPopup
|
94
|
-
#nextWindowConfirmation {
|
105
|
+
#presenterPopup {
|
95
106
|
display: none;
|
96
107
|
position: absolute;
|
97
108
|
z-index: 2147483647;
|
98
|
-
top:
|
109
|
+
top: 3em;
|
99
110
|
left: 25%;
|
100
111
|
max-height: 80%;
|
101
112
|
width: 50%;
|
113
|
+
padding-bottom: 1em;
|
102
114
|
border-radius: 0 0 .5em .5em;
|
103
|
-
border-bottom: 8px solid #222222;
|
104
|
-
background-color: #222222;
|
105
|
-
color: #ffffff;
|
106
|
-
font-size: .8em;
|
107
115
|
overflow: auto;
|
108
116
|
}
|
109
117
|
|
110
|
-
#presenterPopup a
|
111
|
-
#nextWindowConfirmation a {
|
118
|
+
#presenterPopup a {
|
112
119
|
color: #ffffff;
|
113
120
|
}
|
114
121
|
|
@@ -116,20 +123,6 @@
|
|
116
123
|
color: #000;
|
117
124
|
}
|
118
125
|
|
119
|
-
#nextWindowConfirmation {
|
120
|
-
right: 0.25em;
|
121
|
-
left: auto;
|
122
|
-
width: 14em;
|
123
|
-
}
|
124
|
-
#nextWindowConfirmation p {
|
125
|
-
margin: 0.25em;
|
126
|
-
}
|
127
|
-
#nextWindowConfirmation input {
|
128
|
-
float: right;
|
129
|
-
margin: 0.25em;
|
130
|
-
}
|
131
|
-
|
132
|
-
|
133
126
|
#main {
|
134
127
|
display: -webkit-flex;
|
135
128
|
display: flex;
|
@@ -153,7 +146,8 @@
|
|
153
146
|
padding: 0;
|
154
147
|
margin: 0;
|
155
148
|
background-color: #fff;
|
156
|
-
|
149
|
+
box-shadow:0 0 1em rgba(0,0,0,0.35);
|
150
|
+
z-index: 3;
|
157
151
|
}
|
158
152
|
#timerSection {
|
159
153
|
margin-bottom: 0.25em;
|
@@ -254,9 +248,7 @@
|
|
254
248
|
min-width: 210px;
|
255
249
|
min-height: 210px;
|
256
250
|
height: 210px;
|
257
|
-
background: #F5ED9B;
|
258
251
|
border-top: 1px solid #ccc;
|
259
|
-
border-right: 1px solid #ccc;
|
260
252
|
overflow: auto;
|
261
253
|
}
|
262
254
|
|
@@ -294,6 +286,7 @@
|
|
294
286
|
order: 1;
|
295
287
|
min-width: 0px;
|
296
288
|
justify-content: space-between;
|
289
|
+
background-color: #ECEFF1;
|
297
290
|
}
|
298
291
|
#frame {
|
299
292
|
display: -webkit-flex;
|
@@ -311,7 +304,6 @@
|
|
311
304
|
-webkit-flex: 10;
|
312
305
|
flex: 10;
|
313
306
|
overflow: hidden;
|
314
|
-
background: #eee;
|
315
307
|
padding: 1em;
|
316
308
|
}
|
317
309
|
|
@@ -323,9 +315,8 @@
|
|
323
315
|
display: none;
|
324
316
|
position: absolute;
|
325
317
|
top: 0;
|
318
|
+
padding: 1em;
|
326
319
|
}
|
327
|
-
#preview .thumb .label {
|
328
|
-
}
|
329
320
|
#nextSlide.thumb .label {
|
330
321
|
text-align: right;
|
331
322
|
}
|
@@ -335,26 +326,22 @@
|
|
335
326
|
height: 150px;
|
336
327
|
width: 200px;
|
337
328
|
top: 0;
|
338
|
-
background-color:
|
339
|
-
|
329
|
+
background-color: #ffffff;
|
330
|
+
box-shadow:0 0 1em rgba(0,0,0,0.35);
|
340
331
|
}
|
341
332
|
#preview .thumb .content {
|
342
333
|
transform: scale(.5);
|
343
334
|
transform-origin: 0 0;
|
344
335
|
width: 200%;
|
345
336
|
}
|
337
|
+
|
346
338
|
#prevSlide.thumb {
|
347
339
|
left: 0;
|
348
340
|
}
|
349
|
-
|
350
|
-
border-right: 2px solid #ccc;
|
351
|
-
}
|
341
|
+
|
352
342
|
#nextSlide.thumb {
|
353
343
|
right: 0;
|
354
344
|
}
|
355
|
-
#nextSlide.thumb .container {
|
356
|
-
border-left: 2px solid #ccc;
|
357
|
-
}
|
358
345
|
|
359
346
|
#preview.thumbs #preso {
|
360
347
|
position: absolute;
|
@@ -375,10 +362,9 @@
|
|
375
362
|
/* beside layout */
|
376
363
|
#preview.beside .thumb {
|
377
364
|
display: none;
|
378
|
-
position: absolute;
|
379
365
|
overflow: hidden;
|
380
366
|
width: 34%;
|
381
|
-
|
367
|
+
padding: 1em;
|
382
368
|
}
|
383
369
|
#preview.beside .thumb .container {
|
384
370
|
width: auto;
|
@@ -439,69 +425,30 @@
|
|
439
425
|
|
440
426
|
|
441
427
|
#preso {
|
442
|
-
|
443
|
-
-moz-box-shadow:0 0 25px rgba(0,0,0,0.35);
|
444
|
-
box-shadow:0 0 25px rgba(0,0,0,0.35);
|
428
|
+
box-shadow:0 0 1em rgba(0,0,0,0.35);
|
445
429
|
position: absolute;
|
446
430
|
}
|
447
431
|
|
448
432
|
#statusbar {
|
449
|
-
|
450
|
-
flex: 0.5;
|
451
|
-
height: 22px;
|
452
|
-
max-height: 22px;
|
453
|
-
line-height: 22px;
|
454
|
-
text-transform: uppercase;
|
455
|
-
vertical-align: middle;
|
456
|
-
background: #fff;
|
433
|
+
padding: 0 1em;
|
457
434
|
}
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
padding: 0 0.25em;
|
467
|
-
font-size: 10px;
|
468
|
-
}
|
469
|
-
#progress .ui-progressbar-value {
|
470
|
-
border: 1px solid #ffa215;
|
471
|
-
background: #ffb105;
|
472
|
-
}
|
473
|
-
#debugInfo {
|
474
|
-
display: inline;
|
435
|
+
#progress {
|
436
|
+
width: 100%;
|
437
|
+
height: 8px;
|
438
|
+
background-color: transparent;
|
439
|
+
}
|
440
|
+
#progress.ui-widget.ui-widget-content{
|
441
|
+
border: none;
|
442
|
+
border-radius: 0;
|
475
443
|
}
|
476
|
-
.
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
.controls > .fa {
|
481
|
-
font-size: 18px;
|
482
|
-
text-decoration: none;
|
483
|
-
}
|
484
|
-
.controls > a {
|
485
|
-
color: #222;
|
486
|
-
}
|
487
|
-
.controls > .notes-grippy {
|
488
|
-
top: auto;
|
489
|
-
position: relative;
|
490
|
-
display: inline;
|
491
|
-
}
|
492
|
-
.controls > span {
|
493
|
-
font-size: 10px;
|
494
|
-
}
|
495
|
-
.controls > span > label {
|
496
|
-
margin-bottom: 4px;
|
497
|
-
padding-bottom: 2px;
|
498
|
-
}
|
499
|
-
#enableRemote:checked {
|
500
|
-
background-color: #fff8bf;
|
501
|
-
-webkit-box-shadow: 0px 0px 15px 5px rgba(255, 255, 190, .75);
|
502
|
-
-moz-box-shadow: 0px 0px 15px 5px rgba(255, 255, 190, .75);
|
503
|
-
box-shadow: 0px 0px 15px 5px rgba(255, 255, 190, .75);
|
444
|
+
#progress .ui-progressbar-value {
|
445
|
+
border: none;
|
446
|
+
background: #f44336;
|
447
|
+
border-radius: 0;
|
504
448
|
}
|
449
|
+
#debugInfo {
|
450
|
+
display: inline;
|
451
|
+
}
|
505
452
|
|
506
453
|
#annotationToolbar {
|
507
454
|
display: -webkit-flex;
|
@@ -548,48 +495,76 @@
|
|
548
495
|
#annotationToolbar i.shapes.color4 { color: green }
|
549
496
|
|
550
497
|
|
498
|
+
#notes-wrapper {
|
499
|
+
box-shadow:0 0 1em rgba(0,0,0,0.35);
|
500
|
+
}
|
501
|
+
|
551
502
|
#notes {
|
552
503
|
overflow: auto;
|
553
504
|
height: 210px;
|
554
505
|
padding: 0 1em;
|
555
506
|
display: block;
|
556
507
|
position: relative;
|
557
|
-
background: #F5ED9B;
|
558
|
-
border-top: 1px solid #ccc;
|
559
508
|
top: auto !important; /* jquery-ui-resizable mucks with this */
|
509
|
+
background-color: #ffffff;
|
510
|
+
color: #222;
|
560
511
|
}
|
561
512
|
#notes.hidden {
|
562
513
|
display: none;
|
563
514
|
}
|
564
515
|
|
565
|
-
|
516
|
+
.section-selector {
|
517
|
+
display: inline-block;
|
566
518
|
padding: 0;
|
567
|
-
margin: 0
|
519
|
+
margin: 0;
|
568
520
|
text-align: center;
|
569
|
-
border-bottom: 1px solid #ccc;
|
570
521
|
font-size: 0.8em;
|
571
|
-
position: absolute;
|
572
|
-
background-color: #F5ED9B;
|
573
522
|
}
|
574
|
-
|
575
|
-
display:
|
576
|
-
padding:
|
523
|
+
.section-selector li {
|
524
|
+
display: inline;
|
525
|
+
padding: .1em 1em;
|
577
526
|
}
|
578
|
-
|
579
|
-
|
580
|
-
|
527
|
+
|
528
|
+
.section-selector li a {
|
529
|
+
color: #ffffff;
|
530
|
+
text-decoration: none;
|
581
531
|
}
|
582
|
-
|
583
|
-
|
584
|
-
|
532
|
+
|
533
|
+
.section-selector li.selected {
|
534
|
+
border-top-left-radius: 3px;
|
535
|
+
border-top-right-radius: 3px;
|
536
|
+
background-color: #ffffff;
|
585
537
|
}
|
586
|
-
|
587
|
-
|
538
|
+
|
539
|
+
.section-selector li.selected a {
|
540
|
+
color: #222;
|
588
541
|
}
|
589
542
|
|
590
|
-
|
591
|
-
|
543
|
+
.controls {
|
544
|
+
float: right;
|
545
|
+
margin-right: .5em;
|
592
546
|
}
|
547
|
+
.controls .spacer {
|
548
|
+
display: inline-block;
|
549
|
+
width: 1em;
|
550
|
+
}
|
551
|
+
.controls .fa {
|
552
|
+
font-size: 1em;
|
553
|
+
text-decoration: none;
|
554
|
+
}
|
555
|
+
.controls a,
|
556
|
+
.controls i {
|
557
|
+
color: #fff;
|
558
|
+
}
|
559
|
+
.controls .small {
|
560
|
+
font-size: 0.75em;
|
561
|
+
vertical-align: 15%;
|
562
|
+
}
|
563
|
+
.controls .notes-grippy {
|
564
|
+
top: auto;
|
565
|
+
position: relative;
|
566
|
+
display: inline;
|
567
|
+
}
|
593
568
|
|
594
569
|
#notes ol { list-style-type: decimal; }
|
595
570
|
#notes ul { list-style-type: disc; }
|
@@ -642,13 +617,6 @@ a.controls {
|
|
642
617
|
}
|
643
618
|
|
644
619
|
/* hide some elements when the screen is too small */
|
645
|
-
@media screen and (max-width: 1000px)
|
646
|
-
{
|
647
|
-
#slideSource label {
|
648
|
-
display: none;
|
649
|
-
}
|
650
|
-
}
|
651
|
-
|
652
620
|
@media screen and (max-width: 900px)
|
653
621
|
{
|
654
622
|
#topbar .fa {
|
@@ -683,7 +651,6 @@ a.controls {
|
|
683
651
|
flex: 4;
|
684
652
|
}
|
685
653
|
#questions {
|
686
|
-
border-bottom: 1px solid #ccc;
|
687
654
|
-webkit-flex: 1;
|
688
655
|
flex: 1;
|
689
656
|
}
|
@@ -696,12 +663,7 @@ a.controls {
|
|
696
663
|
margin: 0;
|
697
664
|
padding: 0;
|
698
665
|
}
|
699
|
-
|
700
|
-
max-width: 256px;
|
701
|
-
overflow: hidden;
|
702
|
-
height: 16px;
|
703
|
-
padding-left: 16px;
|
704
|
-
}
|
666
|
+
|
705
667
|
#slideFile {
|
706
668
|
display: inline-block;
|
707
669
|
width: 205px;
|