showoff 0.16.2 → 0.17.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.
- 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;
|