Sfoglia il codice sorgente

custom presentation

master
Ignacio Falco 4 anni fa
parent
commit
a0ad5ba734
100 ha cambiato i file con 13980 aggiunte e 0 eliminazioni
  1. 1
    0
      .gitignore
  2. 222
    0
      data/presentation/0.81/acornmediaplayer/acornmediaplayer.base.css
  3. 1157
    0
      data/presentation/0.81/acornmediaplayer/jquery.acornmediaplayer.js
  4. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-captions-dark.png
  5. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-captions.png
  6. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-exit-fullscreen-dark.png
  7. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-exit-fullscreen.png
  8. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-fullscreen-dark.png
  9. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-fullscreen.png
  10. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-pause-dark.png
  11. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-pause.png
  12. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-play-dark.png
  13. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-play.png
  14. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-transcript-dark.png
  15. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-transcript.png
  16. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-volume-dark.png
  17. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-volume-full-dark.png
  18. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-volume-full.png
  19. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/access-volume.png
  20. 314
    0
      data/presentation/0.81/acornmediaplayer/themes/access/acorn.access.css
  21. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/button-background-dark.png
  22. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/button-background-light.png
  23. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/controls-background-dark.png
  24. BIN
      data/presentation/0.81/acornmediaplayer/themes/access/controls-background-light.png
  25. 143
    0
      data/presentation/0.81/acornmediaplayer/themes/barebones/acorn.barebones.css
  26. 363
    0
      data/presentation/0.81/acornmediaplayer/themes/darkglass/acorn.darkglass.css
  27. BIN
      data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-caption.png
  28. BIN
      data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-exit-fullscreen.png
  29. BIN
      data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-fullscreen.png
  30. BIN
      data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-pause.png
  31. BIN
      data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-play.png
  32. BIN
      data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-swap.png
  33. BIN
      data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-transcript.png
  34. BIN
      data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-volume-full.png
  35. BIN
      data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-volume.png
  36. 247
    0
      data/presentation/0.81/css/bbb.playback.css
  37. 21
    0
      data/presentation/0.81/lib/jquery-ui-1.8.23.custom.min.js
  38. 5
    0
      data/presentation/0.81/lib/jquery-ui.min.js
  39. 2
    0
      data/presentation/0.81/lib/jquery.min.js
  40. 160
    0
      data/presentation/0.81/lib/popcorn-complete.min.js
  41. 125
    0
      data/presentation/0.81/lib/popcorn.chattimeline.js
  42. 452
    0
      data/presentation/0.81/lib/writing.js
  43. BIN
      data/presentation/0.81/logo.png
  44. 100
    0
      data/presentation/0.81/playback.html
  45. 427
    0
      data/presentation/0.81/playback.js
  46. 222
    0
      data/presentation/0.9.0/acornmediaplayer/acornmediaplayer.base.css
  47. 962
    0
      data/presentation/0.9.0/acornmediaplayer/jquery.acornmediaplayer.js
  48. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-captions-dark.png
  49. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-captions.png
  50. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-exit-fullscreen-dark.png
  51. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-exit-fullscreen.png
  52. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-fullscreen-dark.png
  53. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-fullscreen.png
  54. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-pause-dark.png
  55. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-pause.png
  56. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-play-dark.png
  57. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-play.png
  58. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-transcript-dark.png
  59. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-transcript.png
  60. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-volume-dark.png
  61. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-volume-full-dark.png
  62. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-volume-full.png
  63. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/access-volume.png
  64. 314
    0
      data/presentation/0.9.0/acornmediaplayer/themes/access/acorn.access.css
  65. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/button-background-dark.png
  66. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/button-background-light.png
  67. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/controls-background-dark.png
  68. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/access/controls-background-light.png
  69. 143
    0
      data/presentation/0.9.0/acornmediaplayer/themes/barebones/acorn.barebones.css
  70. 337
    0
      data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/acorn.bigbluebutton.css
  71. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-caption.png
  72. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-exit-fullscreen.png
  73. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-fullscreen.png
  74. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-pause.png
  75. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-play.png
  76. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-swap.png
  77. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-transcript.png
  78. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-volume-full.png
  79. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-volume.png
  80. 363
    0
      data/presentation/0.9.0/acornmediaplayer/themes/darkglass/acorn.darkglass.css
  81. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-caption.png
  82. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-exit-fullscreen.png
  83. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-fullscreen.png
  84. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-pause.png
  85. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-play.png
  86. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-swap.png
  87. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-transcript.png
  88. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-volume-full.png
  89. BIN
      data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-volume.png
  90. 256
    0
      data/presentation/0.9.0/css/bbb.playback.css
  91. 594
    0
      data/presentation/0.9.0/css/foundation-icons.css
  92. BIN
      data/presentation/0.9.0/css/foundation-icons.eot
  93. BIN
      data/presentation/0.9.0/css/foundation-icons.ttf
  94. BIN
      data/presentation/0.9.0/css/foundation-icons.woff
  95. 6580
    0
      data/presentation/0.9.0/css/foundation.css
  96. 424
    0
      data/presentation/0.9.0/css/normalize.css
  97. 20
    0
      data/presentation/0.9.0/lib/foundation.min.js
  98. 21
    0
      data/presentation/0.9.0/lib/jquery-ui-1.8.23.custom.min.js
  99. 5
    0
      data/presentation/0.9.0/lib/jquery-ui.min.js
  100. 0
    0
      data/presentation/0.9.0/lib/jquery.min.js

+ 1
- 0
.gitignore Vedi File

@@ -12,6 +12,7 @@
12 12
 
13 13
 /data/*
14 14
 !/data/nginx/
15
+!/data/presentation/
15 16
 
16 17
 /tmp*
17 18
 

+ 222
- 0
data/presentation/0.81/acornmediaplayer/acornmediaplayer.base.css Vedi File

@@ -0,0 +1,222 @@
1
+/*
2
+ * Acorn Media Player - jQuery plugin 1.0
3
+ *
4
+ * Copyright (C) 2010 Cristian I. Colceriu
5
+ *
6
+ * Dual licensed under the MIT and GPL licenses:
7
+ *   http://www.opensource.org/licenses/mit-license.php
8
+ *   http://www.gnu.org/licenses/gpl.html
9
+ *
10
+ * www.ghinda.net
11
+ * contact@ghinda.net
12
+ *
13
+ * Base stylesheet
14
+ *
15
+ */
16
+
17
+/* Main elements */
18
+.acorn-player, .acorn-controls {
19
+	position: relative;
20
+}
21
+.acorn-timer {
22
+	cursor: default;
23
+}
24
+.acorn-buffer {
25
+	width: 0px;
26
+}
27
+/* <video> */
28
+.acorn-player video {
29
+	background-color: #000;
30
+}
31
+/* <audio> */
32
+.acorn-player.audio-player {
33
+	width: 500px;
34
+}
35
+.acorn-player.audio-player audio {
36
+	display: none;
37
+}
38
+/* Captions and Transcript */
39
+.acorn-transcript {	
40
+	clear: both;
41
+	display: none;
42
+	
43
+	overflow: auto;
44
+	height: 15em;
45
+}
46
+.acorn-transcript-button {
47
+	display: none;
48
+}
49
+/* 
50
+ * Show the timings in square brackets before each "subtitle" in the transcript.
51
+ * Borrowed and adapted from Bruce Lawson's “Accessible HTML5 Video with JavaScripted captions”
52
+ * http://dev.opera.com/articles/view/accessible-html5-video-with-javascripted-captions/
53
+ */
54
+.acorn-transcript span {
55
+	display: block;
56
+	float: left;
57
+	width: 100%;
58
+	line-height: 1.5em;
59
+	
60
+	-moz-border-radius: 5px;
61
+	-webkit-border-radius: 5px;
62
+	border-radius: 5px;
63
+}
64
+.acorn-transcript span:hover {
65
+	background-color: #cadde7 !important;
66
+	
67
+	font-weight: bold;
68
+}
69
+.acorn-transcript span:nth-of-type(even) {
70
+	background-color: #efefef;
71
+}
72
+.acorn-transcript [data-begin]:before {
73
+	display: block;
74
+	float: left;
75
+	content: " [" attr(data-begin) "s-" attr(data-end)"s]   ";
76
+	width: 15%;
77
+	padding: 0.2em 1.5em 0.2em 0.2em;	
78
+}
79
+.acorn-caption {
80
+	display: none;
81
+	position: absolute;
82
+	bottom: 75px;
83
+	width: 100%;
84
+	
85
+	text-align: center;
86
+}
87
+.acorn-caption-button {
88
+	display: none;
89
+}
90
+.acorn-caption-selector {
91
+	position: absolute;
92
+	display: none;
93
+	width: 170px;
94
+	padding: 5px;
95
+	height: 75px;
96
+	margin-bottom: 10px;
97
+	overflow: auto;
98
+	
99
+	background-color: #000;
100
+	border: 3px solid #fff;
101
+
102
+	z-index: 3;
103
+	
104
+	-moz-border-radius: 5px;
105
+	-webkit-border-radius: 5px;
106
+	border-radius: 5px;
107
+	
108
+	-moz-box-shadow: 0px 1px 5px #000;
109
+	-webkit-box-shadow: 0px 1px 5px #000;
110
+	box-shadow: 0px 1px 5px #000;
111
+}
112
+.acorn-caption-selector label {
113
+	display: block;
114
+	
115
+	font-weight: bold;
116
+	color: #fff;
117
+}
118
+.acorn-caption-selector ul, .acorn-caption-selector li {
119
+	list-style-type: none;
120
+	margin: 0px;
121
+	padding: 0px;
122
+}
123
+/* Fullscreen Mode */
124
+.fullscreen-video {
125
+	position: fixed !important;
126
+	top: 0px;
127
+	left: 0px;
128
+	z-index: 99999 !important;
129
+	
130
+	background-color: #000;
131
+}
132
+.acorn-controls.fullscreen-controls {
133
+	position: fixed !important;
134
+	z-index: 100000 !important;
135
+}
136
+/* Loading */
137
+.show-loading .loading-media {
138
+	visibility: visible;
139
+}
140
+
141
+.loading-media {
142
+	visibility: hidden;
143
+	position: absolute;
144
+	left: 25%;
145
+	top: 50%;
146
+	width: 20px;
147
+	height: 20px;
148
+	margin-top: -10px;
149
+	margin-lefT: -10px;
150
+	
151
+	background-color: #000;
152
+	border: 5px solid #fff;
153
+	border-top: 5px solid rgba(0,0,0,0);
154
+	border-left: 5px solid rgba(0,0,0,0);
155
+	border-radius: 20px;
156
+	
157
+	animation: spin 1s infinite linear;
158
+	-o-animation: spin 1s infinite linear;
159
+	-moz-animation: spin 1s infinite linear;
160
+	-webkit-animation: spin 1s infinite linear;
161
+}
162
+
163
+@-o-keyframes spin {
164
+	0% { -o-transform:rotate(0deg); }
165
+	100% { -o-transform:rotate(360deg); }
166
+}
167
+@-ms-keyframes spin {
168
+	0% { -ms-transform:rotate(0deg); }
169
+	100% { -ms-transform:rotate(360deg); }
170
+}
171
+@-moz-keyframes spin {
172
+	0% { -moz-transform:rotate(0deg); }
173
+	100% { -moz-transform:rotate(360deg); }
174
+}
175
+@-webkit-keyframes spin {
176
+	0% { -webkit-transform:rotate(0deg); }
177
+	100% { -webkit-transform:rotate(360deg); }
178
+}
179
+@keyframes spin {
180
+	0% { transform:rotate(0deg); }
181
+	100% { transform:rotate(360deg); }
182
+}
183
+
184
+/* Controls overlay while loading */
185
+.show-loading .acorn-controls:after {
186
+	content: '';
187
+	position: absolute;
188
+	top: -2px; /* Slider handle goes above */
189
+	padding-bottom: 2px;
190
+	left: 0;
191
+	z-index: 10;
192
+	width: 100%;
193
+	height: 100%;
194
+	
195
+	background: #000;
196
+	opacity: 0.9;
197
+}
198
+
199
+/* Styles needed for the jQuery UI slider
200
+ * We're declaring these so we don't have to use jQuery UI's stylesheet
201
+ */
202
+a.ui-slider-handle {
203
+	position: absolute;
204
+	display: block;
205
+	margin-left: -0.6em;
206
+	z-index: 2;
207
+	cursor: default;
208
+	outline: none;
209
+}
210
+.ui-slider {
211
+	position: relative;
212
+}
213
+.ui-slider-range {
214
+	position: absolute;
215
+	display: block;
216
+	width: 100%;
217
+	height: 100%;
218
+	left: 0;
219
+	bottom: 0;
220
+	border: none;
221
+	z-index: 1;
222
+}

+ 1157
- 0
data/presentation/0.81/acornmediaplayer/jquery.acornmediaplayer.js
File diff soppresso perché troppo grande
Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-captions-dark.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-captions.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-exit-fullscreen-dark.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-exit-fullscreen.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-fullscreen-dark.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-fullscreen.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-pause-dark.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-pause.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-play-dark.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-play.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-transcript-dark.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-transcript.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-volume-dark.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-volume-full-dark.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-volume-full.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/access-volume.png Vedi File


+ 314
- 0
data/presentation/0.81/acornmediaplayer/themes/access/acorn.access.css Vedi File

@@ -0,0 +1,314 @@
1
+/*
2
+ * acccess - Accessible Theme for Acorn Media Player
3
+ * accesslight - Child theme of access
4
+ *
5
+ * To be used with the horizontal volume slider.
6
+ *
7
+ * Copyright (C) 2010 Cristian I. Colceriu
8
+ *
9
+ * Dual licensed under the MIT and GPL licenses:
10
+ *   http://www.opensource.org/licenses/mit-license.php
11
+ *   http://www.gnu.org/licenses/gpl.html
12
+ *
13
+ * www.ghinda.net
14
+ * contact@ghinda.net
15
+ *
16
+ */
17
+ 
18
+/* Start of access theme */
19
+.acorn-player.access {
20
+	float: left;
21
+	position: relative;
22
+	overflow: hidden;
23
+	
24
+	font-family: Arial, Helvetica, sans-serif;
25
+}
26
+/* <video> element */
27
+.acorn-player.access video {
28
+	float: left;
29
+	clear: both;
30
+	background-color: #000;
31
+}
32
+/* Player Controls */
33
+.acorn-player.access .acorn-controls {
34
+	position: relative;	
35
+	float: left;
36
+	clear: both;
37
+	width: 100%;
38
+	padding-top: 15px;
39
+		
40
+	background-image: url(controls-background-dark.png);
41
+	background-position: bottom left;
42
+}
43
+/* <button>s */
44
+.acorn-player.access button {
45
+	position: relative;	
46
+	margin: 0;
47
+	padding-left: 25px;
48
+	height: 35px;
49
+	border: 1px solid #333;
50
+	background-color: #3F3F3F;
51
+	background-position: 5px center, top left;
52
+	background-repeat: no-repeat, repeat-x;	
53
+	
54
+	font-weight: bold;
55
+	color: #fff;
56
+	text-shadow: 0px -1px 1px #000;
57
+	
58
+	cursor: pointer;
59
+}
60
+.acorn-player.access button:hover, .acorn-player.access button:focus {
61
+	background-color: #044293;
62
+	background-position: 5px center, left -33px;
63
+}
64
+.acorn-player.access button:active {
65
+	top: 1px;	
66
+	box-shadow: inset 1px 1px 10px #000;
67
+}
68
+/* Playback Controls(Play, Pause) */
69
+.acorn-player.access .acorn-play-button {
70
+	float: left;
71
+	display: block;
72
+	width: 75px;
73
+	background-image: url(access-play.png), url(button-background-dark.png);
74
+}
75
+.acorn-player.access .acorn-paused-button {
76
+	background-image: url(access-pause.png), url(button-background-dark.png);
77
+}
78
+/* Seek Slider */
79
+.acorn-player.access .acorn-seek-slider {
80
+	position:absolute;
81
+	top: 0px;
82
+	display: block;
83
+	width: 100%;
84
+	height: 15px;
85
+		
86
+	background: #7289A8;
87
+	z-index: 2;
88
+}
89
+.acorn-player.access .acorn-seek-slider .ui-slider-handle {
90
+	display: block;
91
+	position: absolute;
92
+	width: 13px;
93
+	height: 13px;
94
+	border: 3px solid #fff;
95
+	top: -2px;
96
+
97
+	-moz-border-radius: 10px;
98
+	-webkit-border-radius: 10px;
99
+	border-radius: 10px;
100
+	
101
+	-moz-box-shadow: 0px 2px 8px #000;
102
+	-webkit-box-shadow: 0px 2px 8px #000;
103
+	box-shadow: 0px 2px 8px #000;
104
+	
105
+	background: #888;
106
+}
107
+.acorn-player.access .acorn-seek-slider .ui-slider-range {	
108
+	background: #0750B2;	
109
+}
110
+.acorn-player.access .acorn-buffer {	
111
+	background: #8E9DAF !important;	
112
+}
113
+.acorn-player.access .acorn-seek-slider .ui-state-focus, .acorn-player.access .acorn-seek-slider .ui-slider-handle.ui-state-hover {
114
+	background: #0750B2 !important;
115
+	
116
+	-moz-box-shadow: 0px 2px 15px #000;
117
+	-webkit-box-shadow: 0px 2px 15px #000;
118
+	box-shadow: 0px 2px 15px #000;
119
+}
120
+/* Timer */
121
+.acorn-player.access .acorn-timer {
122
+	position: absolute;
123
+	top: 25px;
124
+	left: 260px;
125
+	
126
+	color: #efefef;
127
+	font-size: 14px;
128
+	font-weight: bold;
129
+	text-shadow: 0px -1px 2px #000;
130
+}
131
+/* Volume Container */
132
+.acorn-player.access .acorn-volume-box {
133
+	float: left;
134
+	overflow: hidden;
135
+	padding-right: 10px;
136
+	
137
+	-moz-box-shadow: 2px 0px 5px #111;
138
+	-webkit-box-shadow: 2px 0px 5px #111;
139
+	box-shadow: 2px 0px 5px #111;
140
+}
141
+/* Volume Button */
142
+.acorn-player.access .acorn-volume-button {
143
+	float: left;
144
+	width: 85px;
145
+	border-left: none;
146
+	background-image: url(access-volume-full.png), url(button-background-dark.png);
147
+	
148
+	-moz-box-shadow: 2px 0px 5px #111;
149
+	-webkit-box-shadow: 2px 0px 5px #111;
150
+	box-shadow: 2px 0px 5px #111;
151
+}
152
+.acorn-player.access .acorn-volume-mute {
153
+	background-image: url(access-volume.png), url(button-background-dark.png);
154
+}
155
+/* Volume Slider */
156
+.acorn-player.access .acorn-volume-slider {
157
+	float: left;
158
+	height: 5px;
159
+	width: 70px;
160
+	margin-left: 10px;
161
+	margin-top: 15px;		
162
+	border: 1px solid #333;	
163
+	
164
+	background: #111;
165
+	
166
+	-moz-box-shadow: 0px 1px 1px #777;
167
+	-webkit-box-shadow: 0px 1px 1px #777;
168
+	box-shadow: 0px 1px 1px #777;
169
+}
170
+.acorn-player.access .acorn-volume-slider .ui-slider-handle {
171
+	width: 5px;
172
+	height: 15px;	
173
+	margin-top: -5px;
174
+	margin-left: -5px;
175
+	
176
+	border: 1px solid #333;
177
+	background: #BCBCBC;
178
+		
179
+	-moz-box-shadow: 0px 0px 5px #000;
180
+	-webkit-box-shadow: 0px 0px 5px #000;
181
+	box-shadow: 0px 0px 5px #000;
182
+}
183
+.acorn-player.access .acorn-volume-slider .ui-slider-handle.ui-state-hover, .acorn-player.access .acorn-volume-slider .ui-slider-handle.ui-state-focus {
184
+	background: #fff !important;
185
+}
186
+.acorn-player.access .acorn-volume-slider .ui-slider-range {	
187
+	background: #636F7C;
188
+}
189
+/* Fullscreen Button */
190
+.acorn-player.access .acorn-fullscreen-button {
191
+	float: right;
192
+	background-image: url(access-fullscreen.png), url(button-background-dark.png);
193
+	
194
+	-moz-box-shadow: -2px 0px 5px #111;
195
+	-webkit-box-shadow: -2px 0px 5px #111;
196
+	box-shadow: -2px 0px 5px #111;
197
+}
198
+/* Fullscreen Mode */
199
+.acorn-player.access .fullscreen-controls {	
200
+	left: 0px;
201
+	bottom: 0px;
202
+}
203
+.acorn-player.access .fullscreen-controls .acorn-fullscreen-button {
204
+	background-image: url(access-exit-fullscreen.png), url(button-background-dark.png);
205
+}
206
+/* Caption Button */
207
+.acorn-player.access .acorn-caption-button {
208
+	float: right;
209
+	border-right: none;
210
+	background-image: url(access-captions.png), url(button-background-dark.png);
211
+	
212
+	-moz-box-shadow: -2px 0px 5px #111;
213
+	-webkit-box-shadow: -2px 0px 5px #111;
214
+	box-shadow: -2px 0px 5px #111;
215
+}
216
+.acorn-player.access .acorn-caption {
217
+	font-size: 14px;
218
+	font-weight: bold;
219
+	color: #fff;
220
+	
221
+	text-shadow: 0px 1px 5px #000;
222
+}
223
+/* Transcript */
224
+.acorn-player.access .acorn-transcript-button {
225
+	float: right;
226
+	border-right: none;
227
+	background-image: url(access-transcript.png), url(button-background-dark.png);
228
+	
229
+	-moz-box-shadow: -2px 0px 5px #111;
230
+	-webkit-box-shadow: -2px 0px 5px #111;
231
+	box-shadow: -2px 0px 5px #111;
232
+}
233
+.acorn-player.access .acorn-caption-active, .acorn-player.access .acorn-transcript-active {
234
+	background-position: 5px center, left bottom;
235
+}
236
+/* 
237
+ * acesslight Child Theme
238
+ */
239
+.acorn-player.access.accesslight .acorn-controls {
240
+	background-image: url(controls-background-light.png);
241
+}
242
+/* <button>s */
243
+.acorn-player.access.accesslight button {
244
+	border: 1px solid #bdbdbd;
245
+		
246
+	color: #333;
247
+	text-shadow: 0px 1px 0px #fff;
248
+}
249
+/* Playback Controls(Play, Pause) */
250
+.acorn-player.access.accesslight .acorn-play-button {
251
+	background-image: url(access-play-dark.png), url(button-background-light.png);
252
+}
253
+.acorn-player.access.accesslight .acorn-paused-button {
254
+	background-image: url(access-pause-dark.png), url(button-background-light.png);
255
+}
256
+/* Volume Button */
257
+.acorn-player.access.accesslight .acorn-volume-button {
258
+	background-image: url(access-volume-full-dark.png), url(button-background-light.png);
259
+	
260
+	-moz-box-shadow: 2px 0px 5px #8c8c8c;
261
+	-webkit-box-shadow: 2px 0px 5px #8c8c8c;
262
+	box-shadow: 2px 0px 5px #8c8c8c;
263
+}
264
+.acorn-player.access.accesslight .acorn-volume-mute {
265
+	background-image: url(access-volume-dark.png), url(button-background-light.png);
266
+}
267
+/* Caption Buttton */
268
+.acorn-player.access.accesslight .acorn-caption-button {
269
+	background-image: url(access-captions-dark.png), url(button-background-light.png);
270
+	
271
+	-moz-box-shadow: -2px 0px 5px #8c8c8c;
272
+	-webkit-box-shadow: -2px 0px 5px #8c8c8c;
273
+	box-shadow: -2px 0px 5px #8c8c8c;
274
+}
275
+/* Transcript */
276
+.acorn-player.access.accesslight .acorn-transcript-button {
277
+	background-image: url(access-transcript-dark.png), url(button-background-light.png);
278
+	
279
+	-moz-box-shadow: -2px 0px 5px #8c8c8c;
280
+	-webkit-box-shadow: -2px 0px 5px #8c8c8c;
281
+	box-shadow: -2px 0px 5px #8c8c8c;
282
+}
283
+.acorn-player.access.accesslight .acorn-caption-active, .acorn-player.access.accesslight .acorn-transcript-active {
284
+	color: #000;
285
+	text-shadow: none;
286
+}
287
+/* Fullscreen Button */
288
+.acorn-player.access.accesslight .acorn-fullscreen-button {	
289
+	background-image: url(access-fullscreen-dark.png), url(button-background-light.png);
290
+	
291
+	-moz-box-shadow: -2px 0px 5px #8c8c8c;
292
+	-webkit-box-shadow: -2px 0px 5px #8c8c8c;
293
+	box-shadow: -2px 0px 5px #8c8c8c;
294
+}
295
+/* Volume Container */
296
+.acorn-player.access.accesslight .acorn-volume-box {
297
+	-moz-box-shadow: 2px 0px 5px #8c8c8c;
298
+	-webkit-box-shadow: 2px 0px 5px #8c8c8c;
299
+	box-shadow: 2px 0px 5px #8c8c8c;
300
+}
301
+/* Timer */
302
+.acorn-player.access.accesslight .acorn-timer {	
303
+	color: #333;
304
+	text-shadow: 0px 1px 2px #fff;
305
+}
306
+/* Volume Slider */
307
+.acorn-player.access.accesslight .acorn-volume-slider {
308
+	border: 1px solid #333;	
309
+	background: #c1c1c1;
310
+	
311
+	-moz-box-shadow: 0px 1px 1px #fff;
312
+	-webkit-box-shadow: 0px 1px 1px #fff;
313
+	box-shadow: 0px 1px 1px #fff;
314
+}

BIN
data/presentation/0.81/acornmediaplayer/themes/access/button-background-dark.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/button-background-light.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/controls-background-dark.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/access/controls-background-light.png Vedi File


+ 143
- 0
data/presentation/0.81/acornmediaplayer/themes/barebones/acorn.barebones.css Vedi File

@@ -0,0 +1,143 @@
1
+/*
2
+ * barebones - Theme for Acorn Media Player 
3
+ * 
4
+ * To be used with the horizontal volume slider.
5
+ *
6
+ * Copyright (C) 2010 Cristian I. Colceriu
7
+ *
8
+ * Dual licensed under the MIT and GPL licenses:
9
+ *   http://www.opensource.org/licenses/mit-license.php
10
+ *   http://www.gnu.org/licenses/gpl.html
11
+ *
12
+ * www.ghinda.net
13
+ * contact@ghinda.net
14
+ *
15
+ */
16
+ 
17
+/* Start of barebones theme */
18
+.acorn-player.barebones {
19
+	float: left;
20
+	position: relative;
21
+	
22
+	font-family: Arial, Helvetica, sans-serif;
23
+}
24
+/* <video> element */
25
+.acorn-player.barebones video {
26
+	float: left;
27
+	clear: both;
28
+	
29
+	margin-bottom: 5px;
30
+}
31
+/* Player Controls */
32
+.acorn-player.barebones .acorn-controls {
33
+	position: relative;
34
+	float: left;
35
+	clear: both;
36
+	
37
+	width: 100%;	
38
+}
39
+/* <button>s */
40
+.acorn-player.barebones button {	
41
+}
42
+/* Playback controls(Play, Pause) */
43
+.acorn-player.barebones .acorn-play-button {
44
+	float: left;
45
+}
46
+.acorn-player.barebones .acorn-paused-button {	
47
+}
48
+/* Seek Slider */
49
+.acorn-player.barebones .acorn-seek-slider {
50
+	position: relative;
51
+	display: block;
52
+	float: left;
53
+	width: 40%;
54
+	height: 10px;
55
+	margin: 6px 0px 0px 10px;
56
+	background: #ADADAD;
57
+}
58
+.acorn-player.barebones .acorn-seek-slider .ui-slider-handle {
59
+	display: block;
60
+	position: absolute;	
61
+	width: 15px;
62
+	height: 15px;	
63
+	top: -3px;
64
+	background: #e6e6e6;
65
+	border: 1px solid #000;
66
+}
67
+.acorn-player.barebones .acorn-seek-slider .ui-slider-range {		
68
+	background: #4cbae8;
69
+}
70
+.acorn-player.barebones .acorn-buffer {
71
+	background: #939393 !important;
72
+}
73
+.acorn-player.barebones .acorn-seek-slider .ui-state-focus, .acorn-player.barebones .acorn-seek-slider .ui-slider-handle.ui-state-hover {
74
+	background: #fff !important;
75
+}
76
+/* Timer */
77
+.acorn-player.barebones .acorn-timer {
78
+	float: left;
79
+	margin: 2px 0px 0px 5px;
80
+}
81
+/* Volume Box */
82
+.acorn-player.barebones .acorn-volume-box {	
83
+	float: left;
84
+	margin-left: 10px;
85
+}
86
+/* Volume Slider */
87
+.acorn-player.barebones .acorn-volume-slider {
88
+	float: left;
89
+	height: 10px;
90
+	width: 50px;
91
+	left: 4px;
92
+	margin: 6px 0px 0px 10px;
93
+	
94
+	background: #535353;
95
+}
96
+.acorn-player.barebones .acorn-volume-slider .ui-slider-handle {
97
+	width: 12px;
98
+	height: 12px;
99
+	left: -4px;
100
+	top: -2px;	
101
+	border: 1px solid #000;
102
+	background: #e6e6e6;
103
+}
104
+.acorn-player.barebones .acorn-volume-slider .ui-slider-handle.ui-state-hover {
105
+	background: #fff;
106
+}
107
+.acorn-player.barebones .acorn-volume-slider .ui-slider-range {	
108
+	background: #e6e6e6;
109
+}
110
+/* Volume Button */
111
+.acorn-player.barebones .acorn-volume-button {
112
+	float: left;
113
+}
114
+.acorn-player.barebones .acorn-volume-mute {
115
+}
116
+/* Fullscreen Button */
117
+.acorn-player.barebones .acorn-fullscreen-button {
118
+	float: right;
119
+}
120
+/* Fullscreen Mode */
121
+.acorn-player.barebones .fullscreen-controls {	
122
+	left: 0px;
123
+	bottom: 0px;
124
+}
125
+/* Caption Button */
126
+.acorn-player.barebones .acorn-caption-button {
127
+	float: right;
128
+}
129
+.acorn-player.barebones .acorn-caption {
130
+	font-size: 14px;
131
+	font-weight: bold;
132
+	color: #fff;
133
+}
134
+.acorn-player.barebones .acorn-caption-active {
135
+	border: 2px solid #8F0000 !important;
136
+}
137
+.acorn-player.barebones .acorn-transcript-active {
138
+	border: 2px solid #8F0000 !important;
139
+}
140
+/* Transcript Button */
141
+.acorn-player.barebones .acorn-transcript-button {
142
+	float: right;
143
+}

+ 363
- 0
data/presentation/0.81/acornmediaplayer/themes/darkglass/acorn.darkglass.css Vedi File

@@ -0,0 +1,363 @@
1
+/*
2
+ * darkglass - Theme for Acorn Media Player
3
+ * darkglasssmall - Child theme of darkglass
4
+ *
5
+ * To be used with the vertical volume slider.
6
+ *
7
+ * Copyright (C) 2010 Cristian I. Colceriu
8
+ *
9
+ * Dual licensed under the MIT and GPL licenses:
10
+ *   http://www.opensource.org/licenses/mit-license.php
11
+ *   http://www.gnu.org/licenses/gpl.html
12
+ *
13
+ * www.ghinda.net
14
+ * contact@ghinda.net
15
+ *
16
+ */
17
+ 
18
+/* Start of darkglass theme */
19
+.acorn-player.darkglass {
20
+	float: left;
21
+	position: relative;	
22
+	padding: 2px;
23
+	font-family: Arial, Helvetica, sans-serif;
24
+}
25
+/* <video> element */
26
+.acorn-player.darkglass video {
27
+	float: left;
28
+	clear: both;
29
+	margin-bottom: 5px;	
30
+}
31
+/* Audio player */
32
+/* 
33
+ * If you're playing <audio>, we're assigning a Width larger by 10%, because we're missing two buttons(Captions and Transcript)
34
+ * each with a 5% Width
35
+ */
36
+.acorn-player.darkglass.audio-player .acorn-seek-slider {
37
+	width: 82%;
38
+}
39
+/* Player Controls */
40
+.acorn-player.darkglass .acorn-controls {
41
+	position: relative;
42
+	float: left;
43
+	clear: both;
44
+	width: 95%;
45
+	padding-right: 5%;
46
+	padding-left: 1%;
47
+	border: 2px solid #61625d;	
48
+	-moz-border-radius: 5px;
49
+	-webkit-border-radius: 5px;
50
+	border-radius: 5px;
51
+	background: #000000;
52
+	background-image: -moz-linear-gradient(top, #313131, #000000);
53
+	background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #313131),color-stop(1, #000000));		
54
+}
55
+/* <button>s */
56
+.acorn-player.darkglass button {
57
+	position: relative;
58
+	height: 22px;	
59
+	width: 4%;
60
+	margin-right: 1%;
61
+	padding: 0px;
62
+	border: none;
63
+	background-color: transparent;
64
+	background-repeat: no-repeat;
65
+	background-position: center center;
66
+	background-size: auto 100%;
67
+	
68
+	opacity: 0.7;
69
+	-moz-transition: all 0.2s ease-in-out;
70
+	-webkit-transition: all 0.2s ease-in-out;
71
+	-o-transition: all 0.2s ease-in-out;
72
+	transition: all 0.2s ease-in-out;
73
+	
74
+	-moz-border-radius: 2px;
75
+	-webkit-border-radius: 2px;
76
+	border-radius: 2px;
77
+	
78
+	cursor: pointer;
79
+	text-indent: -9999px;
80
+}
81
+.acorn-player.darkglass button:hover, .acorn-player.darkglass button:focus {
82
+	opacity: 1;
83
+}
84
+.acorn-player.darkglass button:active {
85
+	top: 1px;	
86
+}
87
+/* Playback controls(Play, Pause) */
88
+.acorn-player.darkglass .acorn-play-button {
89
+	float: left;
90
+	display: block;
91
+	background-image: url(darkglass-play.png);
92
+}
93
+.acorn-player.darkglass .acorn-paused-button {
94
+	background-image: url(darkglass-pause.png);
95
+}
96
+/* Seek Slider */
97
+.acorn-player.darkglass .acorn-seek-slider {
98
+	position: relative;
99
+	display: block;
100
+	float: left;
101
+	width: 72%;
102
+	height: 10px;
103
+	margin: 5px 1% 0px 1%;
104
+	background: #7289A8;
105
+	-moz-border-radius: 15px;
106
+	-webkit-border-radius: 15px;
107
+	border-radius: 15px;	
108
+}
109
+.acorn-player.darkglass .acorn-seek-slider .ui-slider-handle {
110
+	display: block;
111
+	position: absolute;	
112
+	width: 15px;
113
+	height: 15px;
114
+	border: 1px solid #333;
115
+	top: -4px;
116
+	background: #e6e6e6;	
117
+
118
+	-moz-border-radius: 10px;
119
+	-webkit-border-radius: 10px;
120
+	border-radius: 10px;
121
+}
122
+.acorn-player.darkglass .acorn-seek-slider .ui-slider-range {		
123
+	background: #0750B2;
124
+	
125
+	-moz-border-radius:10px;
126
+	-webkit-border-radius:10px;
127
+	border-radius:10px;
128
+}
129
+.acorn-player.darkglass .acorn-buffer {
130
+	background: #8E9DAF !important;
131
+}
132
+.acorn-player.darkglass .acorn-seek-slider .ui-state-focus, .acorn-player.darkglass .acorn-seek-slider .ui-slider-handle.ui-state-hover {
133
+	background: #fff !important;
134
+	
135
+	-moz-box-shadow: 0px 2px 15px #ff0000;
136
+	-webkit-box-shadow: 0px 2px 15px #ff0000;
137
+	box-shadow: 0px 2px 15px #ff0000;
138
+}
139
+/* Timer */
140
+.acorn-player.darkglass .acorn-timer {
141
+	float: left;
142
+	width: 6%;
143
+	overflow: hidden;
144
+	margin-top: 5px;	
145
+	
146
+	color: #999;
147
+	font-size: 0.7em;
148
+	font-weight: bold;
149
+}
150
+/* Volume Box */
151
+.acorn-player.darkglass .acorn-volume-box {
152
+	position: absolute;
153
+	float: left;
154
+	bottom: 0px;
155
+	right: 0px;
156
+	overflow: visible;
157
+	width: 5%;
158
+	height: 35px;
159
+	color: #fff;	
160
+	
161
+	-moz-transition: all 0.1s ease-in-out;
162
+	-webkit-transition: all 0.1s ease-in-out;
163
+	-o-transition: all 0.2s ease-in-out;
164
+	transition: all 0.1s ease-in-out;
165
+}
166
+.acorn-player.darkglass .acorn-volume-box:hover {
167
+	height: 135px;
168
+}
169
+.acorn-player.darkglass .acorn-volume-slider.handle-focused {
170
+	position: relative;
171
+	visibility: visible;
172
+	height: 100px;
173
+	opacity: 1;
174
+	top: -100px;
175
+}
176
+.acorn-player.darkglass .acorn-volume-box:hover .acorn-volume-slider {
177
+	position: relative;
178
+	visibility: visible;
179
+	height: 100px;
180
+	opacity: 1;
181
+	top: 0px;
182
+}
183
+/* Volume Slider */
184
+.acorn-player.darkglass .acorn-volume-slider {
185
+	position: relative;
186
+	height: 1px;
187
+	width: 7px;
188
+	left: 4px;
189
+	
190
+	visibility: visible;
191
+	opacity: 0;
192
+	
193
+	border: 1px solid #444;
194
+
195
+	-moz-border-radius: 15px;
196
+	-webkit-border-radius: 15px;
197
+	border-radius: 15px;
198
+	
199
+	background: #535353;
200
+	background-image: -moz-linear-gradient(top, #535353, #333333);
201
+	background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #535353),color-stop(1, #333333));
202
+	
203
+	box-shadow: inset 0 3px 3px #333333;
204
+	
205
+	-moz-transition: all 0.1s ease-in-out;
206
+	-webkit-transition: all 0.1s ease-in-out;
207
+	-o-transition: all 0.1s ease-in-out;
208
+	transition: all 0.1s ease-in-out; 
209
+}
210
+.acorn-player.darkglass .acorn-volume-slider .ui-slider-handle {
211
+	width: 12px;
212
+	height: 12px;
213
+	left: -4px;
214
+	margin-bottom:-0.6em;
215
+	margin-left:0;
216
+	border: 1px solid #333;	
217
+
218
+	-moz-border-radius:10px;
219
+	-webkit-border-radius:10px;
220
+	border-radius:10px;	
221
+	
222
+	background: #e6e6e6;
223
+	background-image: -moz-linear-gradient(top, #e6e6e6, #d5d5d5);
224
+	background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e6e6e6),color-stop(1, #d5d5d5));
225
+	
226
+	box-shadow: inset 0 3px 3px #d5d5d5;	
227
+}
228
+.acorn-player.darkglass .acorn-volume-slider .ui-slider-handle:hover, .acorn-player.darkglass .acorn-volume-slider.handle-focused .ui-slider-handle {
229
+	background: #fff;
230
+
231
+	-moz-box-shadow: 0px 2px 15px #ff0000;
232
+	-webkit-box-shadow: 0px 2px 15px #ff0000;
233
+	box-shadow: 0px 2px 15px #ff0000;
234
+}
235
+.acorn-player.darkglass .acorn-volume-slider .ui-slider-range {
236
+	-moz-border-radius: 15px;
237
+	-webkit-border-radius: 15px;
238
+	border-radius: 15px;
239
+	
240
+	background: #e6e6e6;
241
+	background-image: -moz-linear-gradient(top, #e6e6e6, #d5d5d5);
242
+	background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e6e6e6),color-stop(1, #d5d5d5));
243
+	
244
+	box-shadow: inset 0 3px 3px #d5d5d5;
245
+}
246
+/* Volume Button */
247
+.acorn-player.darkglass .acorn-volume-button {
248
+	position: absolute;	
249
+	bottom: 0px;
250
+	width: 100%;
251
+	display: block;	
252
+	background: url(darkglass-volume-full.png) no-repeat;
253
+	text-indent: -9999px;
254
+	
255
+	opacity: 0.8;
256
+}
257
+.acorn-player.darkglass .acorn-volume-button:active {
258
+	top: auto;
259
+}
260
+.acorn-player.darkglass .acorn-volume-mute {
261
+	background-image: url(darkglass-volume.png);
262
+}
263
+/* Swap Button */
264
+.acorn-player.darkglass .acorn-swap-button {
265
+	float: right;
266
+	background-image: url(darkglass-swap.png);
267
+}
268
+/* Fullscreen Button */
269
+.acorn-player.darkglass .acorn-fullscreen-button {
270
+	float: right;
271
+	background-image: url(darkglass-fullscreen.png);
272
+}
273
+/* Fullscreen Mode */
274
+.acorn-player.darkglass .fullscreen-controls {	
275
+	left: 0px;
276
+	bottom: 0px;
277
+}
278
+.acorn-player.darkglass .fullscreen-controls button {
279
+	height: 35px;
280
+}
281
+.acorn-player.darkglass .fullscreen-controls .acorn-fullscreen-button {
282
+	background-image: url(darkglass-exit-fullscreen.png);
283
+}
284
+.acorn-player.darkglass .fullscreen-controls .acorn-seek-slider {
285
+	margin-top: 10px;
286
+}
287
+/* Caption Button */
288
+.acorn-player.darkglass .acorn-caption-button {
289
+	float: right;
290
+	background-image: url(darkglass-caption.png);
291
+}
292
+.acorn-player.darkglass .acorn-caption {
293
+	font-size: 14px;
294
+	font-weight: bold;
295
+	color: #fff;
296
+	
297
+	text-shadow: 0px 1px 5px #000;
298
+}
299
+.acorn-player.darkglass .acorn-caption-active {
300
+	background-color: #8F0000 !important;
301
+}
302
+.acorn-player.darkglass .acorn-transcript-active {
303
+	background-color: #8F0000 !important;
304
+}
305
+/* Transcript Button */
306
+.acorn-player.darkglass .acorn-transcript-button {
307
+	float: right;
308
+	background-image: url(darkglass-transcript.png);
309
+}
310
+/* 
311
+ * darkglasssmall Child Theme
312
+ */
313
+.acorn-player.darkglasssmall {
314
+	padding: 0px;
315
+}
316
+.acorn-player.darkglasssmall video:hover + .acorn-controls {
317
+	visibility: visible;
318
+	opacity: 0.7;
319
+}
320
+.acorn-player.darkglasssmall .acorn-controls:hover {
321
+	visibility: visible;
322
+	opacity: 0.7;
323
+}
324
+.acorn-player.darkglasssmall .acorn-controls {
325
+	position: absolute;	
326
+	bottom: 5%;
327
+	width: 87%;
328
+	margin-left: 2%;
329
+	padding: 2% 7% 2% 2%;
330
+	
331
+	border: 1px solid #2E2E2E;
332
+	
333
+	-moz-border-radius: 5px;
334
+	-webkit-border-radius: 5px;
335
+	border-radius: 5px;
336
+	
337
+	background: #000000;
338
+	background-image: -moz-linear-gradient(top, #313131, #000000);
339
+	background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #313131),color-stop(1, #000000));
340
+	
341
+	opacity: 0;
342
+	visibility: hidden;	
343
+	
344
+	-moz-transition: all 0.1s ease-in-out;
345
+	-webkit-transition: all 0.1s ease-in-out;
346
+	-o-transition: all 0.1s ease-in-out;
347
+	transition: all 0.1s ease-in-out;
348
+}
349
+.acorn-player.darkglasssmall .acorn-volume-box {
350
+	margin-right: 2%;
351
+	margin-bottom: 2%;
352
+}
353
+/* Audio player */
354
+.acorn-player.darkglasssmall.audio-player .acorn-controls {
355
+	display: block;
356
+	position: relative;
357
+	visibility: visible;
358
+	opacity: 1;
359
+	margin-left: 0px;
360
+	width: 91%;
361
+	
362
+	border: none;
363
+}

BIN
data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-caption.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-exit-fullscreen.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-fullscreen.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-pause.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-play.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-swap.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-transcript.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-volume-full.png Vedi File


BIN
data/presentation/0.81/acornmediaplayer/themes/darkglass/darkglass-volume.png Vedi File


+ 247
- 0
data/presentation/0.81/css/bbb.playback.css Vedi File

@@ -0,0 +1,247 @@
1
+/*
2
+
3
+BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
4
+
5
+Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
6
+
7
+This program is free software; you can redistribute it and/or modify it under the
8
+terms of the GNU Lesser General Public License as published by the Free Software
9
+Foundation; either version 3.0 of the License, or (at your option) any later
10
+version.
11
+
12
+BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
13
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14
+PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
15
+
16
+You should have received a copy of the GNU Lesser General Public License along
17
+with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
18
+
19
+*/
20
+
21
+html{
22
+}
23
+body {
24
+	font-family: Verdana;
25
+	background: #fff;
26
+	padding-top: 30px;
27
+}
28
+h1 {
29
+	text-align:center
30
+}
31
+br{
32
+	display:none
33
+}
34
+
35
+/*
36
+ * clearfix
37
+ * see: http://css-tricks.com/snippets/css/clear-fix/
38
+ */
39
+.clearfix:after {
40
+	visibility: hidden;
41
+	display: block;
42
+	font-size: 0;
43
+	content: " ";
44
+	clear: both;
45
+	height: 0;
46
+}
47
+* html .clearfix             { zoom: 1; } /* IE6 */
48
+*:first-child+html .clearfix { zoom: 1; } /* IE7 */
49
+
50
+#playbackArea {
51
+	width: 1360px; /* #slide.width + #chat.width + #audioRecording.width */
52
+	height: 650px;
53
+	margin: 0 auto;
54
+	overflow: hidden;
55
+}
56
+
57
+#audioRecordingWrapper{
58
+	float: left;
59
+	width: 800px;
60
+}
61
+
62
+#audioRecording{
63
+	display: block;
64
+	margin-left: auto;
65
+	margin-right: auto;
66
+	width: 100%;
67
+}
68
+
69
+#audioRecordingWrapper .acorn-controls, #videoRecordingWrapper .acorn-controls{
70
+	position: relative;
71
+	top: 0;
72
+	left: -810px;
73
+	width: 730px;
74
+}
75
+
76
+#playbackControls{
77
+	width: 1360px;
78
+	margin: 0 auto;
79
+	margin-top: -50px;
80
+}
81
+
82
+#autoscrollWrapper{
83
+	float: left;
84
+	margin-left: 10px;
85
+	margin-top: 8px;
86
+	font-size: 14px;
87
+}
88
+
89
+.webcam{
90
+  width: 402px;
91
+  height: 300px;
92
+}
93
+
94
+#video{
95
+  width: 402px;
96
+  background: white;
97
+}
98
+
99
+/* To remove the white space on top of the audio tag in Firefox
100
+ * See: http://stackoverflow.com/questions/9527453/firefox-and-html5-audio-element-dont-play-well-together
101
+ */
102
+@-moz-document url-prefix() {
103
+	#audioRecordingWrapper{
104
+		position: relative;
105
+		height: 28px;
106
+	}
107
+	#audioRecording {
108
+		position: absolute;
109
+		bottom: 0;
110
+	}
111
+}
112
+
113
+#presentation {
114
+	float: left;
115
+	position: relative;
116
+	height: 600px;
117
+}
118
+
119
+#slide {
120
+	background-image: url('../logo.png');
121
+	text-align: center;
122
+	border: 0px solid #ccc;
123
+	width: 800px;
124
+	height: 600px; /* same as slide images */
125
+	position: relative;
126
+	top: -12px;
127
+}
128
+
129
+/* Visually hides text
130
+ * see: yaccessibilityblog.com/library/css-clip-hidden-content.html
131
+ */
132
+.visually-hidden {
133
+	position: absolute !important;
134
+	clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
135
+	clip: rect(1px, 1px, 1px, 1px);
136
+	padding: 0 !important;
137
+	border: 0 !important;
138
+	height: 1px !important;
139
+	width: 1px !important;
140
+	overflow: hidden;
141
+}
142
+
143
+#mediaArea {
144
+	float: right;
145
+	background: white;
146
+	width: 402px;
147
+}
148
+
149
+#chatAndMediaArea{
150
+	float: right;
151
+	background: white;
152
+	height: 600px;
153
+	width: 402px;
154
+}
155
+#chat{
156
+	margin: 0 auto;
157
+	padding: 0 10px;
158
+	border: 0px solid #ccc;
159
+	height: 300px;
160
+	overflow: auto;
161
+}
162
+#chat div{
163
+	padding:0px;
164
+	font-size:13px;
165
+}
166
+#big {display:none}
167
+#mid {display:none}
168
+
169
+#thumbnails {
170
+	float: left;
171
+	width: 130px;
172
+	height: 600px; /* same as #slide */
173
+	background: #fff;
174
+	border: 0px solid #bbb;
175
+	margin-right: 10px;
176
+	overflow-y: scroll;
177
+	overflow-x: hidden;
178
+}
179
+
180
+#thumbnails img.thumbnail {
181
+	width: 100px;
182
+	height: auto;
183
+	border: 0px solid #eee;
184
+	margin: 5px;
185
+	cursor: pointer;
186
+	vertical-align: bottom;
187
+}
188
+
189
+#thumbnails .thumbnail-wrapper {
190
+	position: relative;
191
+	margin: 0;
192
+	padding: 0;
193
+}
194
+
195
+#thumbnails .thumbnail-wrapper.active {
196
+	background-color: #D9EDF7;
197
+}
198
+
199
+#thumbnails .thumbnail-wrapper.active img.thumbnail {
200
+	border-color: #3A87AD;
201
+}
202
+
203
+#thumbnails .thumbnail-label {
204
+	color: #fff;
205
+	background: #3A87AD;
206
+	font-weight: bold;
207
+	font-size: 12px;
208
+	position: absolute;
209
+	bottom: 5px;
210
+	left: 5px;
211
+	max-width: 90px;
212
+	text-align: center;
213
+	display: none;
214
+	padding: 2px 5px;
215
+	cursor: pointer;
216
+}
217
+
218
+#accInfo{
219
+        margin: 20px auto;
220
+        font-size:0.75em;
221
+        text-align: center;
222
+        clear: both;
223
+	padding-top: 75px;
224
+}
225
+
226
+#footer{
227
+        margin: 20px auto;
228
+        font-size:0.75em;
229
+        color: #666;
230
+        text-align: center;
231
+        clear: both;
232
+	padding-top: 35px;
233
+}
234
+
235
+.circle {
236
+	height: 12px;
237
+	width: 12px;
238
+	border-radius: 50%;
239
+}
240
+
241
+
242
+#cursor {
243
+	position: relative;
244
+	background: red;
245
+	z-index: 10;
246
+}
247
+

+ 21
- 0
data/presentation/0.81/lib/jquery-ui-1.8.23.custom.min.js
File diff soppresso perché troppo grande
Vedi File


+ 5
- 0
data/presentation/0.81/lib/jquery-ui.min.js
File diff soppresso perché troppo grande
Vedi File


+ 2
- 0
data/presentation/0.81/lib/jquery.min.js
File diff soppresso perché troppo grande
Vedi File


+ 160
- 0
data/presentation/0.81/lib/popcorn-complete.min.js Vedi File

@@ -0,0 +1,160 @@
1
+/*
2
+ * popcorn.js version 1.3
3
+ * http://popcornjs.org
4
+ *
5
+ * Copyright 2011, Mozilla Foundation
6
+ * Licensed under the MIT license
7
+ */
8
+
9
+(function(r,f){function n(a,g){return function(){if(d.plugin.debug)return a.apply(this,arguments);try{return a.apply(this,arguments)}catch(l){d.plugin.errors.push({plugin:g,thrown:l,source:a.toString()});this.emit("pluginerror",d.plugin.errors)}}}if(f.addEventListener){var c=Array.prototype,b=Object.prototype,e=c.forEach,h=c.slice,i=b.hasOwnProperty,j=b.toString,p=r.Popcorn,m=[],o=false,q={events:{hash:{},apis:{}}},s=function(){return r.requestAnimationFrame||r.webkitRequestAnimationFrame||r.mozRequestAnimationFrame||
10
+r.oRequestAnimationFrame||r.msRequestAnimationFrame||function(a){r.setTimeout(a,16)}}(),d=function(a,g){return new d.p.init(a,g||null)};d.version="1.3";d.isSupported=true;d.instances=[];d.p=d.prototype={init:function(a,g){var l,k=this;if(typeof a==="function")if(f.readyState==="complete")a(f,d);else{m.push(a);if(!o){o=true;var t=function(){f.removeEventListener("DOMContentLoaded",t,false);for(var z=0,C=m.length;z<C;z++)m[z].call(f,d);m=null};f.addEventListener("DOMContentLoaded",t,false)}}else{if(typeof a===
11
+"string")try{l=f.querySelector(a)}catch(u){throw Error("Popcorn.js Error: Invalid media element selector: "+a);}this.media=l||a;l=this.media.nodeName&&this.media.nodeName.toLowerCase()||"video";this[l]=this.media;this.options=g||{};this.id=this.options.id||d.guid(l);if(d.byId(this.id))throw Error("Popcorn.js Error: Cannot use duplicate ID ("+this.id+")");this.isDestroyed=false;this.data={running:{cue:[]},timeUpdate:d.nop,disabled:{},events:{},hooks:{},history:[],state:{volume:this.media.volume},trackRefs:{},
12
+trackEvents:{byStart:[{start:-1,end:-1}],byEnd:[{start:-1,end:-1}],animating:[],startIndex:0,endIndex:0,previousUpdateTime:-1}};d.instances.push(this);var v=function(){if(k.media.currentTime<0)k.media.currentTime=0;k.media.removeEventListener("loadeddata",v,false);var z,C,E,B,w;z=k.media.duration;z=z!=z?Number.MAX_VALUE:z+1;d.addTrackEvent(k,{start:z,end:z});if(k.options.frameAnimation){k.data.timeUpdate=function(){d.timeUpdate(k,{});d.forEach(d.manifest,function(D,F){if(C=k.data.running[F]){B=C.length;
13
+for(var I=0;I<B;I++){E=C[I];(w=E._natives)&&w.frame&&w.frame.call(k,{},E,k.currentTime())}}});k.emit("timeupdate");!k.isDestroyed&&s(k.data.timeUpdate)};!k.isDestroyed&&s(k.data.timeUpdate)}else{k.data.timeUpdate=function(D){d.timeUpdate(k,D)};k.isDestroyed||k.media.addEventListener("timeupdate",k.data.timeUpdate,false)}};Object.defineProperty(this,"error",{get:function(){return k.media.error}});k.media.readyState>=2?v():k.media.addEventListener("loadeddata",v,false);return this}}};d.p.init.prototype=
14
+d.p;d.byId=function(a){for(var g=d.instances,l=g.length,k=0;k<l;k++)if(g[k].id===a)return g[k];return null};d.forEach=function(a,g,l){if(!a||!g)return{};l=l||this;var k,t;if(e&&a.forEach===e)return a.forEach(g,l);if(j.call(a)==="[object NodeList]"){k=0;for(t=a.length;k<t;k++)g.call(l,a[k],k,a);return a}for(k in a)i.call(a,k)&&g.call(l,a[k],k,a);return a};d.extend=function(a){var g=h.call(arguments,1);d.forEach(g,function(l){for(var k in l)a[k]=l[k]});return a};d.extend(d,{noConflict:function(a){if(a)r.Popcorn=
15
+p;return d},error:function(a){throw Error(a);},guid:function(a){d.guid.counter++;return(a?a:"")+(+new Date+d.guid.counter)},sizeOf:function(a){var g=0,l;for(l in a)g++;return g},isArray:Array.isArray||function(a){return j.call(a)==="[object Array]"},nop:function(){},position:function(a){a=a.getBoundingClientRect();var g={},l=f.documentElement,k=f.body,t,u,v;t=l.clientTop||k.clientTop||0;u=l.clientLeft||k.clientLeft||0;v=r.pageYOffset&&l.scrollTop||k.scrollTop;l=r.pageXOffset&&l.scrollLeft||k.scrollLeft;
16
+t=Math.ceil(a.top+v-t);u=Math.ceil(a.left+l-u);for(var z in a)g[z]=Math.round(a[z]);return d.extend({},g,{top:t,left:u})},disable:function(a,g){if(!a.data.disabled[g]){a.data.disabled[g]=true;for(var l=a.data.running[g].length-1,k;l>=0;l--){k=a.data.running[g][l];k._natives.end.call(a,null,k)}}return a},enable:function(a,g){if(a.data.disabled[g]){a.data.disabled[g]=false;for(var l=a.data.running[g].length-1,k;l>=0;l--){k=a.data.running[g][l];k._natives.start.call(a,null,k)}}return a},destroy:function(a){var g=
17
+a.data.events,l=a.data.trackEvents,k,t,u,v;for(t in g){k=g[t];for(u in k)delete k[u];g[t]=null}for(v in d.registryByName)d.removePlugin(a,v);l.byStart.length=0;l.byEnd.length=0;if(!a.isDestroyed){a.data.timeUpdate&&a.media.removeEventListener("timeupdate",a.data.timeUpdate,false);a.isDestroyed=true}}});d.guid.counter=1;d.extend(d.p,function(){var a={};d.forEach("load play pause currentTime playbackRate volume duration preload playbackRate autoplay loop controls muted buffered readyState seeking paused played seekable ended".split(/\s+/g),
18
+function(g){a[g]=function(l){var k;if(typeof this.media[g]==="function"){if(l!=null&&/play|pause/.test(g))this.media.currentTime=d.util.toSeconds(l);this.media[g]();return this}if(l!=null){k=this.media[g];this.media[g]=l;k!==l&&this.emit("attrchange",{attribute:g,previousValue:k,currentValue:l});return this}return this.media[g]}});return a}());d.forEach("enable disable".split(" "),function(a){d.p[a]=function(g){return d[a](this,g)}});d.extend(d.p,{roundTime:function(){return Math.round(this.media.currentTime)},
19
+exec:function(a,g,l){var k=arguments.length,t,u;try{u=d.util.toSeconds(a)}catch(v){}if(typeof u==="number")a=u;if(typeof a==="number"&&k===2){l=g;g=a;a=d.guid("cue")}else if(k===1)g=-1;else if(t=this.getTrackEvent(a)){if(typeof a==="string"&&k===2){if(typeof g==="number")l=t._natives.start;if(typeof g==="function"){l=g;g=t.start}}}else if(k>=2){if(typeof g==="string"){try{u=d.util.toSeconds(g)}catch(z){}g=u}if(typeof g==="number")l=d.nop();if(typeof g==="function"){l=g;g=-1}}d.addTrackEvent(this,
20
+{id:a,start:g,end:g+1,_running:false,_natives:{start:l||d.nop,end:d.nop,type:"cue"}});return this},mute:function(a){a=a==null||a===true?"muted":"unmuted";if(a==="unmuted"){this.media.muted=false;this.media.volume=this.data.state.volume}if(a==="muted"){this.data.state.volume=this.media.volume;this.media.muted=true}this.emit(a);return this},unmute:function(a){return this.mute(a==null?false:!a)},position:function(){return d.position(this.media)},toggle:function(a){return d[this.data.disabled[a]?"enable":
21
+"disable"](this,a)},defaults:function(a,g){if(d.isArray(a)){d.forEach(a,function(l){for(var k in l)this.defaults(k,l[k])},this);return this}if(!this.options.defaults)this.options.defaults={};this.options.defaults[a]||(this.options.defaults[a]={});d.extend(this.options.defaults[a],g);return this}});d.Events={UIEvents:"blur focus focusin focusout load resize scroll unload",MouseEvents:"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave click dblclick",Events:"loadstart progress suspend emptied stalled play pause error loadedmetadata loadeddata waiting playing canplay canplaythrough seeking seeked timeupdate ended ratechange durationchange volumechange"};
22
+d.Events.Natives=d.Events.UIEvents+" "+d.Events.MouseEvents+" "+d.Events.Events;q.events.apiTypes=["UIEvents","MouseEvents","Events"];(function(a,g){for(var l=q.events.apiTypes,k=a.Natives.split(/\s+/g),t=0,u=k.length;t<u;t++)g.hash[k[t]]=true;l.forEach(function(v){g.apis[v]={};for(var z=a[v].split(/\s+/g),C=z.length,E=0;E<C;E++)g.apis[v][z[E]]=true})})(d.Events,q.events);d.events={isNative:function(a){return!!q.events.hash[a]},getInterface:function(a){if(!d.events.isNative(a))return false;var g=
23
+q.events,l=g.apiTypes;g=g.apis;for(var k=0,t=l.length,u,v;k<t;k++){v=l[k];if(g[v][a]){u=v;break}}return u},all:d.Events.Natives.split(/\s+/g),fn:{trigger:function(a,g){var l;if(this.data.events[a]&&d.sizeOf(this.data.events[a])){if(l=d.events.getInterface(a)){l=f.createEvent(l);l.initEvent(a,true,true,r,1);this.media.dispatchEvent(l);return this}d.forEach(this.data.events[a],function(k){k.call(this,g)},this)}return this},listen:function(a,g){var l=this,k=true,t=d.events.hooks[a],u;if(!this.data.events[a]){this.data.events[a]=
24
+{};k=false}if(t){t.add&&t.add.call(this,{},g);if(t.bind)a=t.bind;if(t.handler){u=g;g=function(v){t.handler.call(l,v,u)}}k=true;if(!this.data.events[a]){this.data.events[a]={};k=false}}this.data.events[a][g.name||g.toString()+d.guid()]=g;!k&&d.events.all.indexOf(a)>-1&&this.media.addEventListener(a,function(v){d.forEach(l.data.events[a],function(z){typeof z==="function"&&z.call(l,v)})},false);return this},unlisten:function(a,g){if(this.data.events[a]&&this.data.events[a][g]){delete this.data.events[a][g];
25
+return this}this.data.events[a]=null;return this}},hooks:{canplayall:{bind:"canplaythrough",add:function(a,g){var l=false;if(this.media.readyState){g.call(this,a);l=true}this.data.hooks.canplayall={fired:l}},handler:function(a,g){if(!this.data.hooks.canplayall.fired){g.call(this,a);this.data.hooks.canplayall.fired=true}}}}};d.forEach([["trigger","emit"],["listen","on"],["unlisten","off"]],function(a){d.p[a[0]]=d.p[a[1]]=d.events.fn[a[0]]});d.addTrackEvent=function(a,g){var l,k;if(g.id)l=a.getTrackEvent(g.id);
26
+if(l){k=true;g=d.extend({},l,g);a.removeTrackEvent(g.id)}if(g&&g._natives&&g._natives.type&&a.options.defaults&&a.options.defaults[g._natives.type])g=d.extend({},a.options.defaults[g._natives.type],g);if(g._natives){g._id=g.id||g._id||d.guid(g._natives.type);a.data.history.push(g._id)}g.start=d.util.toSeconds(g.start,a.options.framerate);g.end=d.util.toSeconds(g.end,a.options.framerate);var t=a.data.trackEvents.byStart,u=a.data.trackEvents.byEnd,v;for(v=t.length-1;v>=0;v--)if(g.start>=t[v].start){t.splice(v+
27
+1,0,g);break}for(t=u.length-1;t>=0;t--)if(g.end>u[t].end){u.splice(t+1,0,g);break}if(g.end>a.media.currentTime&&g.start<=a.media.currentTime){g._running=true;a.data.running[g._natives.type].push(g);a.data.disabled[g._natives.type]||g._natives.start.call(a,null,g)}v<=a.data.trackEvents.startIndex&&g.start<=a.data.trackEvents.previousUpdateTime&&a.data.trackEvents.startIndex++;t<=a.data.trackEvents.endIndex&&g.end<a.data.trackEvents.previousUpdateTime&&a.data.trackEvents.endIndex++;this.timeUpdate(a,
28
+null,true);g._id&&d.addTrackEvent.ref(a,g);if(k){k=g._natives.type==="cue"?"cuechange":"trackchange";a.emit(k,{id:g.id,previousValue:{time:l.start,fn:l._natives.start},currentValue:{time:g.start,fn:g._natives.start}})}};d.addTrackEvent.ref=function(a,g){a.data.trackRefs[g._id]=g;return a};d.removeTrackEvent=function(a,g){for(var l,k,t=a.data.history.length,u=a.data.trackEvents.byStart.length,v=0,z=0,C=[],E=[],B=[],w=[];--u>-1;){l=a.data.trackEvents.byStart[v];k=a.data.trackEvents.byEnd[v];if(!l._id){C.push(l);
29
+E.push(k)}if(l._id){l._id!==g&&C.push(l);k._id!==g&&E.push(k);if(l._id===g){z=v;l._natives._teardown&&l._natives._teardown.call(a,l)}}v++}u=a.data.trackEvents.animating.length;v=0;if(u)for(;--u>-1;){l=a.data.trackEvents.animating[v];l._id||B.push(l);l._id&&l._id!==g&&B.push(l);v++}z<=a.data.trackEvents.startIndex&&a.data.trackEvents.startIndex--;z<=a.data.trackEvents.endIndex&&a.data.trackEvents.endIndex--;a.data.trackEvents.byStart=C;a.data.trackEvents.byEnd=E;a.data.trackEvents.animating=B;for(u=
30
+0;u<t;u++)a.data.history[u]!==g&&w.push(a.data.history[u]);a.data.history=w;d.removeTrackEvent.ref(a,g)};d.removeTrackEvent.ref=function(a,g){delete a.data.trackRefs[g];return a};d.getTrackEvents=function(a){var g=[];a=a.data.trackEvents.byStart;for(var l=a.length,k=0,t;k<l;k++){t=a[k];t._id&&g.push(t)}return g};d.getTrackEvents.ref=function(a){return a.data.trackRefs};d.getTrackEvent=function(a,g){return a.data.trackRefs[g]};d.getTrackEvent.ref=function(a,g){return a.data.trackRefs[g]};d.getLastTrackEventId=
31
+function(a){return a.data.history[a.data.history.length-1]};d.timeUpdate=function(a,g){var l=a.media.currentTime,k=a.data.trackEvents.previousUpdateTime,t=a.data.trackEvents,u=t.endIndex,v=t.startIndex,z=t.byStart.length,C=t.byEnd.length,E=d.registryByName,B,w,D;if(k<=l){for(;t.byEnd[u]&&t.byEnd[u].end<=l;){B=t.byEnd[u];w=(k=B._natives)&&k.type;if(!k||E[w]||a[w]){if(B._running===true){B._running=false;D=a.data.running[w];D.splice(D.indexOf(B),1);if(!a.data.disabled[w]){k.end.call(a,g,B);a.emit("trackend",
32
+d.extend({},B,{plugin:w,type:"trackend"}))}}u++}else{d.removeTrackEvent(a,B._id);return}}for(;t.byStart[v]&&t.byStart[v].start<=l;){B=t.byStart[v];w=(k=B._natives)&&k.type;if(!k||E[w]||a[w]){if(B.end>l&&B._running===false){B._running=true;a.data.running[w].push(B);if(!a.data.disabled[w]){k.start.call(a,g,B);a.emit("trackstart",d.extend({},B,{plugin:w,type:"trackstart"}))}}v++}else{d.removeTrackEvent(a,B._id);return}}}else if(k>l){for(;t.byStart[v]&&t.byStart[v].start>l;){B=t.byStart[v];w=(k=B._natives)&&
33
+k.type;if(!k||E[w]||a[w]){if(B._running===true){B._running=false;D=a.data.running[w];D.splice(D.indexOf(B),1);if(!a.data.disabled[w]){k.end.call(a,g,B);a.emit("trackend",d.extend({},B,{plugin:w,type:"trackend"}))}}v--}else{d.removeTrackEvent(a,B._id);return}}for(;t.byEnd[u]&&t.byEnd[u].end>l;){B=t.byEnd[u];w=(k=B._natives)&&k.type;if(!k||E[w]||a[w]){if(B.start<=l&&B._running===false){B._running=true;a.data.running[w].push(B);if(!a.data.disabled[w]){k.start.call(a,g,B);a.emit("trackstart",d.extend({},
34
+B,{plugin:w,type:"trackstart"}))}}u--}else{d.removeTrackEvent(a,B._id);return}}}t.endIndex=u;t.startIndex=v;t.previousUpdateTime=l;t.byStart.length<z&&t.startIndex--;t.byEnd.length<C&&t.endIndex--};d.extend(d.p,{getTrackEvents:function(){return d.getTrackEvents.call(null,this)},getTrackEvent:function(a){return d.getTrackEvent.call(null,this,a)},getLastTrackEventId:function(){return d.getLastTrackEventId.call(null,this)},removeTrackEvent:function(a){d.removeTrackEvent.call(null,this,a);return this},
35
+removePlugin:function(a){d.removePlugin.call(null,this,a);return this},timeUpdate:function(a){d.timeUpdate.call(null,this,a);return this},destroy:function(){d.destroy.call(null,this);return this}});d.manifest={};d.registry=[];d.registryByName={};d.plugin=function(a,g,l){if(d.protect.natives.indexOf(a.toLowerCase())>=0)d.error("'"+a+"' is a protected function name");else{var k=["start","end"],t={},u=typeof g==="function",v=["_setup","_teardown","start","end","frame"],z=function(B,w){B=B||d.nop;w=w||
36
+d.nop;return function(){B.apply(this,arguments);w.apply(this,arguments)}};d.manifest[a]=l=l||g.manifest||{};v.forEach(function(B){g[B]=n(g[B]||d.nop,a)});var C=function(B,w){if(!w)return this;if(w.ranges&&d.isArray(w.ranges)){d.forEach(w.ranges,function(G){G=d.extend({},w,G);delete G.ranges;this[a](G)},this);return this}var D=w._natives={},F="",I;d.extend(D,B);w._natives.type=a;w._running=false;D.start=D.start||D["in"];D.end=D.end||D.out;if(w.once)D.end=z(D.end,function(){this.removeTrackEvent(w._id)});
37
+D._teardown=z(function(){var G=h.call(arguments),H=this.data.running[D.type];G.unshift(null);G[1]._running&&H.splice(H.indexOf(w),1)&&D.end.apply(this,G)},D._teardown);w.compose=w.compose&&w.compose.split(" ")||[];w.effect=w.effect&&w.effect.split(" ")||[];w.compose=w.compose.concat(w.effect);w.compose.forEach(function(G){F=d.compositions[G]||{};v.forEach(function(H){D[H]=z(D[H],F[H])})});w._natives.manifest=l;if(!("start"in w))w.start=w["in"]||0;if(!w.end&&w.end!==0)w.end=w.out||Number.MAX_VALUE;
38
+if(!i.call(w,"toString"))w.toString=function(){var G=["start: "+w.start,"end: "+w.end,"id: "+(w.id||w._id)];w.target!=null&&G.push("target: "+w.target);return a+" ( "+G.join(", ")+" )"};if(!w.target){I="options"in l&&l.options;w.target=I&&"target"in I&&I.target}if(w._natives)w._id=d.guid(w._natives.type);w._natives._setup&&w._natives._setup.call(this,w);d.addTrackEvent(this,w);d.forEach(B,function(G,H){H!=="type"&&k.indexOf(H)===-1&&this.on(H,G)},this);return this};d.p[a]=t[a]=function(B,w){var D;
39
+if(B&&!w)w=B;else if(D=this.getTrackEvent(B)){w=d.extend({},D,w);d.addTrackEvent(this,w);return this}else w.id=B;this.data.running[a]=this.data.running[a]||[];D=d.extend({},this.options.defaults&&this.options.defaults[a]||{},w);return C.call(this,u?g.call(this,D):g,D)};l&&d.extend(g,{manifest:l});var E={fn:t[a],definition:g,base:g,parents:[],name:a};d.registry.push(d.extend(t,E,{type:a}));d.registryByName[a]=E;return t}};d.plugin.errors=[];d.plugin.debug=d.version==="1.3";d.removePlugin=function(a,
40
+g){if(!g){g=a;a=d.p;if(d.protect.natives.indexOf(g.toLowerCase())>=0){d.error("'"+g+"' is a protected function name");return}var l=d.registry.length,k;for(k=0;k<l;k++)if(d.registry[k].name===g){d.registry.splice(k,1);delete d.registryByName[g];delete d.manifest[g];delete a[g];return}}l=a.data.trackEvents.byStart;k=a.data.trackEvents.byEnd;var t=a.data.trackEvents.animating,u,v;u=0;for(v=l.length;u<v;u++){if(l[u]&&l[u]._natives&&l[u]._natives.type===g){l[u]._natives._teardown&&l[u]._natives._teardown.call(a,
41
+l[u]);l.splice(u,1);u--;v--;if(a.data.trackEvents.startIndex<=u){a.data.trackEvents.startIndex--;a.data.trackEvents.endIndex--}}k[u]&&k[u]._natives&&k[u]._natives.type===g&&k.splice(u,1)}u=0;for(v=t.length;u<v;u++)if(t[u]&&t[u]._natives&&t[u]._natives.type===g){t.splice(u,1);u--;v--}};d.compositions={};d.compose=function(a,g,l){d.manifest[a]=l||g.manifest||{};d.compositions[a]=g};d.plugin.effect=d.effect=d.compose;var A=/^(?:\.|#|\[)/;d.dom={debug:false,find:function(a,g){var l=null;a=a.trim();g=
42
+g||f;if(a){if(!A.test(a)){l=f.getElementById(a);if(l!==null)return l}try{l=g.querySelector(a)}catch(k){if(d.dom.debug)throw Error(k);}}return l}};var y=/\?/,x={url:"",data:"",dataType:"",success:d.nop,type:"GET",async:true,xhr:function(){return new r.XMLHttpRequest}};d.xhr=function(a){a.dataType=a.dataType&&a.dataType.toLowerCase()||null;if(a.dataType&&(a.dataType==="jsonp"||a.dataType==="script"))d.xhr.getJSONP(a.url,a.success,a.dataType==="script");else{a=d.extend({},x,a);a.ajax=a.xhr();if(a.ajax){if(a.type===
43
+"GET"&&a.data){a.url+=(y.test(a.url)?"&":"?")+a.data;a.data=null}a.ajax.open(a.type,a.url,a.async);a.ajax.send(a.data||null);return d.xhr.httpData(a)}}};d.xhr.httpData=function(a){var g,l=null,k,t=null;a.ajax.onreadystatechange=function(){if(a.ajax.readyState===4){try{l=JSON.parse(a.ajax.responseText)}catch(u){}g={xml:a.ajax.responseXML,text:a.ajax.responseText,json:l};if(!g.xml||!g.xml.documentElement){g.xml=null;try{k=new DOMParser;t=k.parseFromString(a.ajax.responseText,"text/xml");if(!t.getElementsByTagName("parsererror").length)g.xml=
44
+t}catch(v){}}if(a.dataType)g=g[a.dataType];a.success.call(a.ajax,g)}};return g};d.xhr.getJSONP=function(a,g,l){var k=f.head||f.getElementsByTagName("head")[0]||f.documentElement,t=f.createElement("script"),u=false,v=[];v=/(=)\?(?=&|$)|\?\?/;var z,C;if(!l){C=a.match(/(callback=[^&]*)/);if(C!==null&&C.length){v=C[1].split("=")[1];if(v==="?")v="jsonp";z=d.guid(v);a=a.replace(/(callback=[^&]*)/,"callback="+z)}else{z=d.guid("jsonp");if(v.test(a))a=a.replace(v,"$1"+z);v=a.split(/\?(.+)?/);a=v[0]+"?";if(v[1])a+=
45
+v[1]+"&";a+="callback="+z}window[z]=function(E){g&&g(E);u=true}}t.addEventListener("load",function(){l&&g&&g();u&&delete window[z];k.removeChild(t)},false);t.src=a;k.insertBefore(t,k.firstChild)};d.getJSONP=d.xhr.getJSONP;d.getScript=d.xhr.getScript=function(a,g){return d.xhr.getJSONP(a,g,true)};d.util={toSeconds:function(a,g){var l=/^([0-9]+:){0,2}[0-9]+([.;][0-9]+)?$/,k,t,u;if(typeof a==="number")return a;typeof a==="string"&&!l.test(a)&&d.error("Invalid time format");l=a.split(":");k=l.length-
46
+1;t=l[k];if(t.indexOf(";")>-1){t=t.split(";");u=0;if(g&&typeof g==="number")u=parseFloat(t[1],10)/g;l[k]=parseInt(t[0],10)+u}k=l[0];return{1:parseFloat(k,10),2:parseInt(k,10)*60+parseFloat(l[1],10),3:parseInt(k,10)*3600+parseInt(l[1],10)*60+parseFloat(l[2],10)}[l.length||1]}};d.p.cue=d.p.exec;d.protect={natives:function(a){return Object.keys?Object.keys(a):function(g){var l,k=[];for(l in g)i.call(g,l)&&k.push(l);return k}(a)}(d.p).map(function(a){return a.toLowerCase()})};d.forEach({listen:"on",unlisten:"off",
47
+trigger:"emit",exec:"cue"},function(a,g){var l=d.p[g];d.p[g]=function(){if(typeof console!=="undefined"&&console.warn){console.warn("Deprecated method '"+g+"', "+(a==null?"do not use.":"use '"+a+"' instead."));d.p[g]=l}return d.p[a].apply(this,[].slice.call(arguments))}});r.Popcorn=d}else{r.Popcorn={isSupported:false};for(c="byId forEach extend effects error guid sizeOf isArray nop position disable enable destroyaddTrackEvent removeTrackEvent getTrackEvents getTrackEvent getLastTrackEventId timeUpdate plugin removePlugin compose effect xhr getJSONP getScript".split(/\s+/);c.length;)r.Popcorn[c.shift()]=
48
+function(){}}})(window,window.document);(function(r,f){var n=r.document,c=r.location,b=/:\/\//,e=c.href.replace(c.href.split("/").slice(-1)[0],""),h=function(j,p,m){j=j||0;p=(p||j||0)+1;m=m||1;p=Math.ceil((p-j)/m)||0;var o=0,q=[];for(q.length=p;o<p;){q[o++]=j;j+=m}return q};f.sequence=function(j,p){return new f.sequence.init(j,p)};f.sequence.init=function(j,p){this.parent=n.getElementById(j);this.seqId=f.guid("__sequenced");this.queue=[];this.playlist=[];this.inOuts={ofVideos:[],ofClips:[]};this.dims={width:0,height:0};this.active=0;this.playing=
49
+this.cycling=false;this.times={last:0};this.events={};var m=this,o=0;f.forEach(p,function(q,s){var d=n.createElement("video");d.preload="auto";d.controls=true;d.style.display=s&&"none"||"";d.id=m.seqId+"-"+s;m.queue.push(d);var A=q["in"],y=q.out;m.inOuts.ofVideos.push({"in":A!==undefined&&A||1,out:y!==undefined&&y||0});m.inOuts.ofVideos[s].out=m.inOuts.ofVideos[s].out||m.inOuts.ofVideos[s]["in"]+2;d.src=!b.test(q.src)?e+q.src:q.src;d.setAttribute("data-sequence-owner",j);d.setAttribute("data-sequence-guid",
50
+m.seqId);d.setAttribute("data-sequence-id",s);d.setAttribute("data-sequence-clip",[m.inOuts.ofVideos[s]["in"],m.inOuts.ofVideos[s].out].join(":"));m.parent.appendChild(d);m.playlist.push(f("#"+d.id))});m.inOuts.ofVideos.forEach(function(q){q={"in":o,out:o+(q.out-q["in"])};m.inOuts.ofClips.push(q);o=q.out+1});f.forEach(this.queue,function(q,s){function d(){if(!s){m.dims.width=q.videoWidth;m.dims.height=q.videoHeight}q.currentTime=m.inOuts.ofVideos[s]["in"]-0.5;q.removeEventListener("canplaythrough",
51
+d,false);return true}q.addEventListener("canplaythrough",d,false);q.addEventListener("play",function(){m.playing=true},false);q.addEventListener("pause",function(){m.playing=false},false);q.addEventListener("timeupdate",function(A){A=A.srcElement||A.target;A=+(A.dataset&&A.dataset.sequenceId||A.getAttribute("data-sequence-id"));var y=Math.floor(q.currentTime);if(m.times.last!==y&&A===m.active){m.times.last=y;y===m.inOuts.ofVideos[A].out&&f.sequence.cycle.call(m,A)}},false)});return this};f.sequence.init.prototype=
52
+f.sequence.prototype;f.sequence.cycle=function(j){this.queue||f.error("Popcorn.sequence.cycle is not a public method");var p=this.queue,m=this.inOuts.ofVideos,o=p[j],q=0,s;if(p[j+1])q=j+1;if(p[j+1]){p=p[q];m=m[q];f.extend(p,{width:this.dims.width,height:this.dims.height});s=this.playlist[q];o.pause();this.active=q;this.times.last=m["in"]-1;s.currentTime(m["in"]);s[q?"play":"pause"]();this.trigger("cycle",{position:{previous:j,current:q}});if(q){o.style.display="none";p.style.display=""}this.cycling=
53
+false}else this.playlist[j].pause();return this};var i=["timeupdate","play","pause"];f.extend(f.sequence.prototype,{eq:function(j){return this.playlist[j]},remove:function(){this.parent.innerHTML=null},clip:function(j){return this.inOuts.ofVideos[j]},duration:function(){for(var j=0,p=this.inOuts.ofClips,m=0;m<p.length;m++)j+=p[m].out-p[m]["in"]+1;return j-1},play:function(){this.playlist[this.active].play();return this},exec:function(j,p){var m=this.active;this.inOuts.ofClips.forEach(function(o,q){if(j>=
54
+o["in"]&&j<=o.out)m=q});j+=this.inOuts.ofVideos[m]["in"]-this.inOuts.ofClips[m]["in"];f.addTrackEvent(this.playlist[m],{start:j-1,end:j,_running:false,_natives:{start:p||f.nop,end:f.nop,type:"exec"}});return this},listen:function(j,p){var m=this,o=this.playlist,q=o.length,s=0;if(!p)p=f.nop;if(f.Events.Natives.indexOf(j)>-1)f.forEach(o,function(d){d.listen(j,function(A){A.active=m;if(i.indexOf(j)>-1)p.call(d,A);else++s===q&&p.call(d,A)})});else{this.events[j]||(this.events[j]={});o=p.name||f.guid("__"+
55
+j);this.events[j][o]=p}return this},unlisten:function(){},trigger:function(j,p){var m=this;if(!(f.Events.Natives.indexOf(j)>-1)){this.events[j]&&f.forEach(this.events[j],function(o){o.call(m,{type:j},p)});return this}}});f.forEach(f.manifest,function(j,p){f.sequence.prototype[p]=function(m){var o={},q=[],s,d,A,y,x;for(s=0;s<this.inOuts.ofClips.length;s++){q=this.inOuts.ofClips[s];d=h(q["in"],q.out);A=d.indexOf(m.start);y=d.indexOf(m.end);if(A>-1)o[s]=f.extend({},q,{start:d[A],clipIdx:A});if(y>-1)o[s]=
56
+f.extend({},q,{end:d[y],clipIdx:y})}s=Object.keys(o).map(function(g){return+g});q=h(s[0],s[1]);for(s=0;s<q.length;s++){A={};y=q[s];var a=o[y];if(a){x=this.inOuts.ofVideos[y];d=a.clipIdx;x=h(x["in"],x.out);if(a.start){A.start=x[d];A.end=x[x.length-1]}if(a.end){A.start=x[0];A.end=x[d]}}else{A.start=this.inOuts.ofVideos[y]["in"];A.end=this.inOuts.ofVideos[y].out}this.playlist[y][p](f.extend({},m,A))}return this}})})(this,Popcorn);(function(r){document.addEventListener("DOMContentLoaded",function(){var f=document.querySelectorAll("[data-timeline-sources]");r.forEach(f,function(n,c){var b=f[c],e,h,i;if(!b.id)b.id=r.guid("__popcorn");if(b.nodeType&&b.nodeType===1){i=r("#"+b.id);e=(b.getAttribute("data-timeline-sources")||"").split(",");e[0]&&r.forEach(e,function(j){h=j.split("!");if(h.length===1){h=j.match(/(.*)[\/\\]([^\/\\]+\.\w+)$/)[2].split(".");h[0]="parse"+h[1].toUpperCase();h[1]=j}e[0]&&i[h[0]]&&i[h[0]](h[1])});i.autoplay()&&
57
+i.play()}})},false)})(Popcorn);(function(r,f){function n(e){e=typeof e==="string"?e:[e.language,e.region].join("-");var h=e.split("-");return{iso6391:e,language:h[0]||"",region:h[1]||""}}var c=r.navigator,b=n(c.userLanguage||c.language);f.locale={get:function(){return b},set:function(e){b=n(e);f.locale.broadcast();return b},broadcast:function(e){var h=f.instances,i=h.length,j=0,p;for(e=e||"locale:changed";j<i;j++){p=h[j];e in p.data.events&&p.trigger(e)}}}})(this,this.Popcorn);(function(r){var f=Object.prototype.hasOwnProperty;r.parsers={};r.parser=function(n,c,b){if(r.protect.natives.indexOf(n.toLowerCase())>=0)r.error("'"+n+"' is a protected function name");else{if(typeof c==="function"&&!b){b=c;c=""}if(!(typeof b!=="function"||typeof c!=="string")){var e={};e[n]=function(h,i){if(!h)return this;var j=this;r.xhr({url:h,dataType:c,success:function(p){var m,o,q=0;p=b(p).data||[];if(m=p.length){for(;q<m;q++){o=p[q];for(var s in o)f.call(o,s)&&j[s]&&j[s](o[s])}i&&i()}}});
58
+return this};r.extend(r.p,e);return e}}}})(Popcorn);(function(r){var f=function(b,e){b=b||r.nop;e=e||r.nop;return function(){b.apply(this,arguments);e.apply(this,arguments)}},n=/^.*\.(ogg|oga|aac|mp3|wav)($|\?)/,c=/^.*\.(ogg|oga|aac|mp3|wav|ogg|ogv|mp4|webm)($|\?)/;r.player=function(b,e){if(!r[b]){e=e||{};var h=function(i,j,p){p=p||{};var m=new Date/1E3,o=m,q=0,s=0,d=1,A=false,y={},x=typeof i==="string"?r.dom.find(i):i,a={};Object.prototype.__defineGetter__||(a=x||document.createElement("div"));for(var g in x)if(!(g in a))if(typeof x[g]==="object")a[g]=
59
+x[g];else if(typeof x[g]==="function")a[g]=function(k){return"length"in x[k]&&!x[k].call?x[k]:function(){return x[k].apply(x,arguments)}}(g);else r.player.defineProperty(a,g,{get:function(k){return function(){return x[k]}}(g),set:r.nop,configurable:true});var l=function(){m=new Date/1E3;if(!a.paused){a.currentTime+=m-o;a.dispatchEvent("timeupdate");setTimeout(l,10)}o=m};a.play=function(){this.paused=false;if(a.readyState>=4){o=new Date/1E3;a.dispatchEvent("play");l()}};a.pause=function(){this.paused=
60
+true;a.dispatchEvent("pause")};r.player.defineProperty(a,"currentTime",{get:function(){return q},set:function(k){q=+k;a.dispatchEvent("timeupdate");return q},configurable:true});r.player.defineProperty(a,"volume",{get:function(){return d},set:function(k){d=+k;a.dispatchEvent("volumechange");return d},configurable:true});r.player.defineProperty(a,"muted",{get:function(){return A},set:function(k){A=+k;a.dispatchEvent("volumechange");return A},configurable:true});r.player.defineProperty(a,"readyState",
61
+{get:function(){return s},set:function(k){return s=k},configurable:true});a.addEventListener=function(k,t){y[k]||(y[k]=[]);y[k].push(t);return t};a.removeEventListener=function(k,t){var u,v=y[k];if(v){for(u=y[k].length-1;u>=0;u--)t===v[u]&&v.splice(u,1);return t}};a.dispatchEvent=function(k){var t,u=k.type;if(!u){u=k;if(k=r.events.getInterface(u)){t=document.createEvent(k);t.initEvent(u,true,true,window,1)}}if(y[u])for(k=y[u].length-1;k>=0;k--)y[u][k].call(this,t,this)};a.src=j||"";a.duration=0;a.paused=
62
+true;a.ended=0;p&&p.events&&r.forEach(p.events,function(k,t){a.addEventListener(t,k,false)});if(e._canPlayType(x.nodeName,j)!==false)if(e._setup)e._setup.call(a,p);else{a.readyState=4;a.dispatchEvent("loadedmetadata");a.dispatchEvent("loadeddata");a.dispatchEvent("canplaythrough")}else setTimeout(function(){a.dispatchEvent("error")},0);i=new r.p.init(a,p);if(e._teardown)i.destroy=f(i.destroy,function(){e._teardown.call(a,p)});return i};h.canPlayType=e._canPlayType=e._canPlayType||r.nop;r[b]=r.player.registry[b]=
63
+h}};r.player.registry={};r.player.defineProperty=Object.defineProperty||function(b,e,h){b.__defineGetter__(e,h.get||r.nop);b.__defineSetter__(e,h.set||r.nop)};r.player.playerQueue=function(){var b=[],e=false;return{next:function(){e=false;b.shift();b[0]&&b[0]()},add:function(h){b.push(function(){e=true;h&&h()});!e&&b[0]()}}};r.smart=function(b,e,h){var i=["AUDIO","VIDEO"],j,p=r.dom.find(b),m;j=document.createElement("video");var o={ogg:"video/ogg",ogv:"video/ogg",oga:"audio/ogg",webm:"video/webm",
64
+mp4:"video/mp4",mp3:"audio/mp3"};if(p){if(i.indexOf(p.nodeName)>-1&&!e){if(typeof e==="object")h=e;return r(p,h)}if(typeof e==="string")e=[e];b=0;for(srcLength=e.length;b<srcLength;b++){m=c.exec(e[b]);m=!m||!m[1]?false:j.canPlayType(o[m[1]]);if(m){e=e[b];break}for(var q in r.player.registry)if(r.player.registry.hasOwnProperty(q))if(r.player.registry[q].canPlayType(p.nodeName,e[b]))return r[q](p,e[b],h)}if(i.indexOf(p.nodeName)===-1){j=typeof e==="string"?e:e.length?e[0]:e;b=document.createElement(n.exec(j)?
65
+i[0]:i[1]);b.controls=true;p.appendChild(b);p=b}h&&h.events&&h.events.error&&p.addEventListener("error",h.events.error,false);p.src=e;return r(p,h)}else r.error("Specified target "+b+" was not found.")}})(Popcorn);(function(r){var f=function(n,c){var b=0,e=0,h;r.forEach(c.classes,function(i,j){h=[];if(i==="parent")h[0]=document.querySelectorAll("#"+c.target)[0].parentNode;else h=document.querySelectorAll("#"+c.target+" "+i);b=0;for(e=h.length;b<e;b++)h[b].classList.toggle(j)})};r.compose("applyclass",{manifest:{about:{name:"Popcorn applyclass Effect",version:"0.1",author:"@scottdowne",website:"scottdowne.wordpress.com"},options:{}},_setup:function(n){n.classes={};n.applyclass=n.applyclass||"";for(var c=n.applyclass.replace(/\s/g,
66
+"").split(","),b=[],e=0,h=c.length;e<h;e++){b=c[e].split(":");if(b[0])n.classes[b[0]]=b[1]||""}},start:f,end:f})})(Popcorn);(function(r){var f=/(?:http:\/\/www\.|http:\/\/|www\.|\.|^)(youtu|vimeo|soundcloud|baseplayer)/,n={},c={vimeo:false,youtube:false,soundcloud:false,module:false};Object.defineProperty(n,void 0,{get:function(){return c[void 0]},set:function(b){c[void 0]=b}});r.plugin("mediaspawner",{manifest:{about:{name:"Popcorn Media Spawner Plugin",version:"0.1",author:"Matthew Schranz, @mjschranz",website:"mschranz.wordpress.com"},options:{source:{elem:"input",type:"text",label:"Media Source","default":"http://www.youtube.com/watch?v=CXDstfD9eJ0"},
67
+caption:{elem:"input",type:"text",label:"Media Caption","default":"Popcorn Popping",optional:true},target:"mediaspawner-container",start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},autoplay:{elem:"input",type:"checkbox",label:"Autoplay Video",optional:true},width:{elem:"input",type:"number",label:"Media Width","default":400,units:"px",optional:true},height:{elem:"input",type:"number",label:"Media Height","default":200,units:"px",optional:true}}},_setup:function(b){function e(){function o(){if(j!==
68
+"HTML5"&&!window.Popcorn[j])setTimeout(function(){o()},300);else{b.id=b._container.id;b._container.style.width=b.width+"px";b._container.style.height=b.height+"px";b.popcorn=r.smart("#"+b.id,b.source);j==="HTML5"&&b.popcorn.controls(true);b._container.style.width="0px";b._container.style.height="0px";b._container.style.visibility="hidden";b._container.style.overflow="hidden"}}if(j!=="HTML5"&&!window.Popcorn[j]&&!n[j]){n[j]=true;r.getScript("http://popcornjs.org/code/players/"+j+"/popcorn."+j+".js",
69
+function(){o()})}else o()}function h(){window.Popcorn.player?e():setTimeout(function(){h()},300)}var i=document.getElementById(b.target)||{},j,p,m;if(p=f.exec(b.source)){j=p[1];if(j==="youtu")j="youtube"}else j="HTML5";b._type=j;b._container=document.createElement("div");p=b._container;p.id="mediaSpawnerdiv-"+r.guid();b.width=b.width||400;b.height=b.height||200;if(b.caption){m=document.createElement("div");m.innerHTML=b.caption;m.style.display="none";b._capCont=m;p.appendChild(m)}i&&i.appendChild(p);
70
+if(!window.Popcorn.player&&!n.module){n.module=true;r.getScript("http://popcornjs.org/code/modules/player/popcorn.player.js",h)}else h()},start:function(b,e){if(e._capCont)e._capCont.style.display="";e._container.style.width=e.width+"px";e._container.style.height=e.height+"px";e._container.style.visibility="visible";e._container.style.overflow="visible";e.autoplay&&e.popcorn.play()},end:function(b,e){if(e._capCont)e._capCont.style.display="none";e._container.style.width="0px";e._container.style.height=
71
+"0px";e._container.style.visibility="hidden";e._container.style.overflow="hidden";e.popcorn.pause()},_teardown:function(b){b.popcorn&&b.popcorn.destory&&b.popcorn.destroy();document.getElementById(b.target)&&document.getElementById(b.target).removeChild(b._container)}})})(Popcorn,this);(function(r){r.plugin("code",function(f){var n=false,c=this,b=function(){var e=function(h){return function(i,j){var p=function(){n&&i.call(c,j);n&&h(p)};p()}};return window.webkitRequestAnimationFrame?e(window.webkitRequestAnimationFrame):window.mozRequestAnimationFrame?e(window.mozRequestAnimationFrame):e(function(h){window.setTimeout(h,16)})}();if(!f.onStart||typeof f.onStart!=="function")f.onStart=r.nop;if(f.onEnd&&typeof f.onEnd!=="function")f.onEnd=undefined;if(f.onFrame&&typeof f.onFrame!==
72
+"function")f.onFrame=undefined;return{start:function(e,h){h.onStart.call(c,h);if(h.onFrame){n=true;b(h.onFrame,h)}},end:function(e,h){if(h.onFrame)n=false;h.onEnd&&h.onEnd.call(c,h)}}},{about:{name:"Popcorn Code Plugin",version:"0.1",author:"David Humphrey (@humphd)",website:"http://vocamus.net/dave"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},onStart:{elem:"input",type:"function",label:"onStart"},onFrame:{elem:"input",type:"function",label:"onFrame",
73
+optional:true},onEnd:{elem:"input",type:"function",label:"onEnd"}}})})(Popcorn);(function(r){var f=0;r.plugin("flickr",function(n){var c,b=document.getElementById(n.target),e,h,i,j,p=n.numberofimages||4,m=n.height||"50px",o=n.width||"50px",q=n.padding||"5px",s=n.border||"0px";c=document.createElement("div");c.id="flickr"+f;c.style.width="100%";c.style.height="100%";c.style.display="none";f++;b&&b.appendChild(c);var d=function(){if(e)setTimeout(function(){d()},5);else{h="http://api.flickr.com/services/rest/?method=flickr.people.findByUsername&";h+="username="+n.username+"&api_key="+
74
+n.apikey+"&format=json&jsoncallback=flickr";r.getJSONP(h,function(y){e=y.user.nsid;A()})}},A=function(){h="http://api.flickr.com/services/feeds/photos_public.gne?";if(e)h+="id="+e+"&";if(n.tags)h+="tags="+n.tags+"&";h+="lang=en-us&format=json&jsoncallback=flickr";r.xhr.getJSONP(h,function(y){var x=document.createElement("div");x.innerHTML="<p style='padding:"+q+";'>"+y.title+"<p/>";r.forEach(y.items,function(a,g){if(g<p){i=document.createElement("a");i.setAttribute("href",a.link);i.setAttribute("target",
75
+"_blank");j=document.createElement("img");j.setAttribute("src",a.media.m);j.setAttribute("height",m);j.setAttribute("width",o);j.setAttribute("style","border:"+s+";padding:"+q);i.appendChild(j);x.appendChild(i)}else return false});c.appendChild(x)})};if(n.username&&n.apikey)d();else{e=n.userid;A()}return{start:function(){c.style.display="inline"},end:function(){c.style.display="none"},_teardown:function(y){document.getElementById(y.target)&&document.getElementById(y.target).removeChild(c)}}},{about:{name:"Popcorn Flickr Plugin",
76
+version:"0.2",author:"Scott Downe, Steven Weerdenburg, Annasob",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},userid:{elem:"input",type:"text",label:"User ID",optional:true},tags:{elem:"input",type:"text",label:"Tags"},username:{elem:"input",type:"text",label:"Username",optional:true},apikey:{elem:"input",type:"text",label:"API Key",optional:true},target:"flickr-container",height:{elem:"input",type:"text",
77
+label:"Height","default":"50px",optional:true},width:{elem:"input",type:"text",label:"Width","default":"50px",optional:true},padding:{elem:"input",type:"text",label:"Padding",optional:true},border:{elem:"input",type:"text",label:"Border","default":"5px",optional:true},numberofimages:{elem:"input",type:"number","default":4,label:"Number of Images"}}})})(Popcorn);(function(r){r.plugin("footnote",{manifest:{about:{name:"Popcorn Footnote Plugin",version:"0.2",author:"@annasob, @rwaldron",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},text:{elem:"input",type:"text",label:"Text"},target:"footnote-container"}},_setup:function(f){var n=r.dom.find(f.target);f._container=document.createElement("div");f._container.style.display="none";f._container.innerHTML=f.text;n.appendChild(f._container)},
78
+start:function(f,n){n._container.style.display="inline"},end:function(f,n){n._container.style.display="none"},_teardown:function(f){var n=r.dom.find(f.target);n&&n.removeChild(f._container)}})})(Popcorn);(function(r){function f(b){return String(b).replace(/&(?!\w+;)|[<>"']/g,function(e){return c[e]||e})}function n(b,e){var h=b.container=document.createElement("div"),i=h.style,j=b.media,p=function(){var m=b.position();i.fontSize="18px";i.width=j.offsetWidth+"px";i.top=m.top+j.offsetHeight-h.offsetHeight-40+"px";i.left=m.left+"px";setTimeout(p,10)};h.id=e||"";i.position="absolute";i.color="white";i.textShadow="black 2px 2px 6px";i.fontWeight="bold";i.textAlign="center";p();b.media.parentNode.appendChild(h);
79
+return h}var c={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};r.plugin("text",{manifest:{about:{name:"Popcorn Text Plugin",version:"0.1",author:"@humphd"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},text:{elem:"input",type:"text",label:"Text","default":"Popcorn.js"},escape:{elem:"input",type:"checkbox",label:"Escape"},multiline:{elem:"input",type:"checkbox",label:"Multiline"}}},_setup:function(b){var e,h,i=b._container=document.createElement("div");
80
+i.style.display="none";if(b.target)if(e=r.dom.find(b.target)){if(["VIDEO","AUDIO"].indexOf(e.nodeName)>-1)e=n(this,b.target+"-overlay")}else e=n(this,b.target);else e=this.container?this.container:n(this);b._target=e;h=b.escape?f(b.text):b.text;h=b.multiline?h.replace(/\r?\n/gm,"<br>"):h;i.innerHTML=h||"";e.appendChild(i)},start:function(b,e){e._container.style.display="inline"},end:function(b,e){e._container.style.display="none"},_teardown:function(b){var e=b._target;e&&e.removeChild(b._container)}})})(Popcorn);var googleCallback;
81
+(function(r){function f(i,j,p){i=i.type?i.type.toUpperCase():"HYBRID";var m;if(i==="STAMEN-WATERCOLOR"||i==="STAMEN-TERRAIN"||i==="STAMEN-TONER")m=i.replace("STAMEN-","").toLowerCase();p=new google.maps.Map(p,{mapTypeId:m?m:google.maps.MapTypeId[i],mapTypeControlOptions:{mapTypeIds:[]}});m&&p.mapTypes.set(m,new google.maps.StamenMapType(m));p.getDiv().style.display="none";return p}var n=1,c=false,b=false,e,h;googleCallback=function(i){if(typeof google!=="undefined"&&google.maps&&google.maps.Geocoder&&
82
+google.maps.LatLng){e=new google.maps.Geocoder;r.getScript("//maps.stamen.com/js/tile.stamen.js",function(){b=true})}else setTimeout(function(){googleCallback(i)},1)};h=function(){if(document.body){c=true;r.getScript("//maps.google.com/maps/api/js?sensor=false&callback=googleCallback")}else setTimeout(function(){h()},1)};r.plugin("googlemap",function(i){var j,p,m,o=document.getElementById(i.target);i.type=i.type||"ROADMAP";i.zoom=i.zoom||1;i.lat=i.lat||0;i.lng=i.lng||0;c||h();j=document.createElement("div");
83
+j.id="actualmap"+n;j.style.width=i.width||"100%";j.style.height=i.height?i.height:o&&o.clientHeight?o.clientHeight+"px":"100%";n++;o&&o.appendChild(j);var q=function(){if(b){if(j)if(i.location)e.geocode({address:i.location},function(s,d){if(j&&d===google.maps.GeocoderStatus.OK){i.lat=s[0].geometry.location.lat();i.lng=s[0].geometry.location.lng();m=new google.maps.LatLng(i.lat,i.lng);p=f(i,m,j)}});else{m=new google.maps.LatLng(i.lat,i.lng);p=f(i,m,j)}}else setTimeout(function(){q()},5)};q();return{start:function(s,
84
+d){var A=this,y,x=function(){if(p){d._map=p;p.getDiv().style.display="block";google.maps.event.trigger(p,"resize");p.setCenter(m);if(d.zoom&&typeof d.zoom!=="number")d.zoom=+d.zoom;p.setZoom(d.zoom);if(d.heading&&typeof d.heading!=="number")d.heading=+d.heading;if(d.pitch&&typeof d.pitch!=="number")d.pitch=+d.pitch;if(d.type==="STREETVIEW"){p.setStreetView(y=new google.maps.StreetViewPanorama(j,{position:m,pov:{heading:d.heading=d.heading||0,pitch:d.pitch=d.pitch||0,zoom:d.zoom}}));var a=function(z,
85
+C){var E=google.maps.geometry.spherical.computeHeading;setTimeout(function(){var B=A.media.currentTime;if(typeof d.tween==="object"){for(var w=0,D=z.length;w<D;w++){var F=z[w];if(B>=F.interval*(w+1)/1E3&&(B<=F.interval*(w+2)/1E3||B>=F.interval*D/1E3)){u.setPosition(new google.maps.LatLng(F.position.lat,F.position.lng));u.setPov({heading:F.pov.heading||E(F,z[w+1])||0,zoom:F.pov.zoom||0,pitch:F.pov.pitch||0})}}a(z,z[0].interval)}else{w=0;for(D=z.length;w<D;w++){F=d.interval;if(B>=F*(w+1)/1E3&&(B<=F*
86
+(w+2)/1E3||B>=F*D/1E3)){g.setPov({heading:E(z[w],z[w+1])||0,zoom:d.zoom,pitch:d.pitch||0});g.setPosition(l[w])}}a(l,d.interval)}},C)};if(d.location&&typeof d.tween==="string"){var g=y,l=[],k=new google.maps.DirectionsService,t=new google.maps.DirectionsRenderer(g);k.route({origin:d.location,destination:d.tween,travelMode:google.maps.TravelMode.DRIVING},function(z,C){if(C==google.maps.DirectionsStatus.OK){t.setDirections(z);for(var E=z.routes[0].overview_path,B=0,w=E.length;B<w;B++)l.push(new google.maps.LatLng(E[B].lat(),
87
+E[B].lng()));d.interval=d.interval||1E3;a(l,10)}})}else if(typeof d.tween==="object"){var u=y;k=0;for(var v=d.tween.length;k<v;k++){d.tween[k].interval=d.tween[k].interval||1E3;a(d.tween,10)}}}d.onmaploaded&&d.onmaploaded(d,p)}else setTimeout(function(){x()},13)};x()},end:function(){if(p)p.getDiv().style.display="none"},_teardown:function(s){var d=document.getElementById(s.target);d&&d.removeChild(j);j=p=m=null;s._map=null}}},{about:{name:"Popcorn Google Map Plugin",version:"0.1",author:"@annasob",
88
+website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"start",label:"Start"},end:{elem:"input",type:"start",label:"End"},target:"map-container",type:{elem:"select",options:["ROADMAP","SATELLITE","STREETVIEW","HYBRID","TERRAIN","STAMEN-WATERCOLOR","STAMEN-TERRAIN","STAMEN-TONER"],label:"Map Type",optional:true},zoom:{elem:"input",type:"text",label:"Zoom","default":0,optional:true},lat:{elem:"input",type:"text",label:"Lat",optional:true},lng:{elem:"input",type:"text",label:"Lng",optional:true},
89
+location:{elem:"input",type:"text",label:"Location","default":"Toronto, Ontario, Canada"},heading:{elem:"input",type:"text",label:"Heading","default":0,optional:true},pitch:{elem:"input",type:"text",label:"Pitch","default":1,optional:true}}})})(Popcorn);(function(r){function f(b){function e(){var p=b.getBoundingClientRect(),m=i.getBoundingClientRect();if(m.left!==p.left)i.style.left=p.left+"px";if(m.top!==p.top)i.style.top=p.top+"px"}var h=-1,i=document.createElement("div"),j=getComputedStyle(b).zIndex;i.setAttribute("data-popcorn-helper-container",true);i.style.position="absolute";i.style.zIndex=isNaN(j)?n:j+1;document.body.appendChild(i);return{element:i,start:function(){h=setInterval(e,c)},stop:function(){clearInterval(h);h=-1},destroy:function(){document.body.removeChild(i);
90
+h!==-1&&clearInterval(h)}}}var n=2E3,c=10;r.plugin("image",{manifest:{about:{name:"Popcorn image Plugin",version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},src:{elem:"input",type:"url",label:"Image URL","default":"http://mozillapopcorn.org/wp-content/themes/popcorn/images/for_developers.png"},href:{elem:"input",type:"url",label:"Link","default":"http://mozillapopcorn.org/wp-content/themes/popcorn/images/for_developers.png",
91
+optional:true},target:"image-container",text:{elem:"input",type:"text",label:"Caption","default":"Popcorn.js",optional:true}}},_setup:function(b){var e=document.createElement("img"),h=document.getElementById(b.target);b.anchor=document.createElement("a");b.anchor.style.position="relative";b.anchor.style.textDecoration="none";b.anchor.style.display="none";if(h)if(["VIDEO","AUDIO"].indexOf(h.nodeName)>-1){b.trackedContainer=f(h);b.trackedContainer.element.appendChild(b.anchor)}else h&&h.appendChild(b.anchor);
92
+e.addEventListener("load",function(){e.style.borderStyle="none";b.anchor.href=b.href||b.src||"#";b.anchor.target="_blank";var i,j;e.style.height=h.style.height;e.style.width=h.style.width;b.anchor.appendChild(e);if(b.text){i=e.height/12+"px";j=document.createElement("div");r.extend(j.style,{color:"black",fontSize:i,fontWeight:"bold",position:"relative",textAlign:"center",width:e.style.width||e.width+"px",zIndex:"10"});j.innerHTML=b.text||"";j.style.top=(e.style.height.replace("px","")||e.height)/
93
+2-j.offsetHeight/2+"px";b.anchor.insertBefore(j,e)}},false);e.src=b.src},start:function(b,e){e.anchor.style.display="inline";e.trackedContainer&&e.trackedContainer.start()},end:function(b,e){e.anchor.style.display="none";e.trackedContainer&&e.trackedContainer.stop()},_teardown:function(b){if(b.trackedContainer)b.trackedContainer.destroy();else b.anchor.parentNode&&b.anchor.parentNode.removeChild(b.anchor)}})})(Popcorn);(function(r){var f=1,n=false;r.plugin("googlefeed",function(c){var b=function(){var j=false,p=0,m=document.getElementsByTagName("link"),o=m.length,q=document.head||document.getElementsByTagName("head")[0],s=document.createElement("link");if(window.GFdynamicFeedControl)n=true;else r.getScript("//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.js",function(){n=true});for(;p<o;p++)if(m[p].href==="//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.css")j=true;if(!j){s.type=
94
+"text/css";s.rel="stylesheet";s.href="//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.css";q.insertBefore(s,q.firstChild)}};window.google?b():r.getScript("//www.google.com/jsapi",function(){google.load("feeds","1",{callback:function(){b()}})});var e=document.createElement("div"),h=document.getElementById(c.target),i=function(){if(n)c.feed=new GFdynamicFeedControl(c.url,e,{vertical:c.orientation.toLowerCase()==="vertical"?true:false,horizontal:c.orientation.toLowerCase()==="horizontal"?
95
+true:false,title:c.title=c.title||"Blog"});else setTimeout(function(){i()},5)};if(!c.orientation||c.orientation.toLowerCase()!=="vertical"&&c.orientation.toLowerCase()!=="horizontal")c.orientation="vertical";e.style.display="none";e.id="_feed"+f;e.style.width="100%";e.style.height="100%";f++;h&&h.appendChild(e);i();return{start:function(){e.setAttribute("style","display:inline")},end:function(){e.setAttribute("style","display:none")},_teardown:function(j){document.getElementById(j.target)&&document.getElementById(j.target).removeChild(e);
96
+delete j.feed}}},{about:{name:"Popcorn Google Feed Plugin",version:"0.1",author:"David Seifried",website:"dseifried.wordpress.com"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"feed-container",url:{elem:"input",type:"url",label:"Feed URL","default":"http://planet.mozilla.org/rss20.xml"},title:{elem:"input",type:"text",label:"Title","default":"Planet Mozilla",optional:true},orientation:{elem:"select",options:["Vertical","Horizontal"],
97
+label:"Orientation","default":"Vertical",optional:true}}})})(Popcorn);(function(r){var f=0,n=function(c,b){var e=c.container=document.createElement("div"),h=e.style,i=c.media,j=function(){var p=c.position();h.fontSize="18px";h.width=i.offsetWidth+"px";h.top=p.top+i.offsetHeight-e.offsetHeight-40+"px";h.left=p.left+"px";setTimeout(j,10)};e.id=b||r.guid();h.position="absolute";h.color="white";h.textShadow="black 2px 2px 6px";h.fontWeight="bold";h.textAlign="center";j();c.media.parentNode.appendChild(e);return e};r.plugin("subtitle",{manifest:{about:{name:"Popcorn Subtitle Plugin",
98
+version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"text",label:"Start"},end:{elem:"input",type:"text",label:"End"},target:"subtitle-container",text:{elem:"input",type:"text",label:"Text"}}},_setup:function(c){var b=document.createElement("div");b.id="subtitle-"+f++;b.style.display="none";!this.container&&(!c.target||c.target==="subtitle-container")&&n(this);c.container=c.target&&c.target!=="subtitle-container"?document.getElementById(c.target)||
99
+n(this,c.target):this.container;document.getElementById(c.container.id)&&document.getElementById(c.container.id).appendChild(b);c.innerContainer=b;c.showSubtitle=function(){c.innerContainer.innerHTML=c.text||""}},start:function(c,b){b.innerContainer.style.display="inline";b.showSubtitle(b,b.text)},end:function(c,b){b.innerContainer.style.display="none";b.innerContainer.innerHTML=""},_teardown:function(c){c.container.removeChild(c.innerContainer)}})})(Popcorn);(function(r){var f=false;r.plugin("twitter",{manifest:{about:{name:"Popcorn Twitter Plugin",version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},src:{elem:"input",type:"text",label:"Tweet Source (# or @)","default":"@popcornjs"},target:"twitter-container",height:{elem:"input",type:"number",label:"Height","default":"200",optional:true},width:{elem:"input",type:"number",label:"Width",
100
+"default":"250",optional:true}}},_setup:function(n){if(!window.TWTR&&!f){f=true;r.getScript("//widgets.twimg.com/j/2/widget.js")}var c=document.getElementById(n.target);n.container=document.createElement("div");n.container.setAttribute("id",r.guid());n.container.style.display="none";c&&c.appendChild(n.container);var b=n.src||"";c=n.width||250;var e=n.height||200,h=/^@/.test(b),i={version:2,id:n.container.getAttribute("id"),rpp:30,width:c,height:e,interval:6E3,theme:{shell:{background:"#ffffff",color:"#000000"},
101
+tweets:{background:"#ffffff",color:"#444444",links:"#1985b5"}},features:{loop:true,timestamp:true,avatars:true,hashtags:true,toptweets:true,live:true,scrollbar:false,behavior:"default"}},j=function(p){if(window.TWTR)if(h){i.type="profile";(new TWTR.Widget(i)).render().setUser(b).start()}else{i.type="search";i.search=b;i.subject=b;(new TWTR.Widget(i)).render().start()}else setTimeout(function(){j(p)},1)};j(this)},start:function(n,c){c.container.style.display="inline"},end:function(n,c){c.container.style.display=
102
+"none"},_teardown:function(n){document.getElementById(n.target)&&document.getElementById(n.target).removeChild(n.container)}})})(Popcorn);(function(r){r.plugin("webpage",{manifest:{about:{name:"Popcorn Webpage Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{id:{elem:"input",type:"text",label:"Id",optional:true},start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},src:{elem:"input",type:"url",label:"Webpage URL","default":"http://mozillapopcorn.org"},target:"iframe-container"}},_setup:function(f){var n=document.getElementById(f.target);f.src=f.src.replace(/^(https?:)?(\/\/)?/,
103
+"//");f._iframe=document.createElement("iframe");f._iframe.setAttribute("width","100%");f._iframe.setAttribute("height","100%");f._iframe.id=f.id;f._iframe.src=f.src;f._iframe.style.display="none";n&&n.appendChild(f._iframe)},start:function(f,n){n._iframe.src=n.src;n._iframe.style.display="inline"},end:function(f,n){n._iframe.style.display="none"},_teardown:function(f){document.getElementById(f.target)&&document.getElementById(f.target).removeChild(f._iframe)}})})(Popcorn);var wikiCallback;
104
+(function(r){r.plugin("wikipedia",{manifest:{about:{name:"Popcorn Wikipedia Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},lang:{elem:"input",type:"text",label:"Language","default":"english",optional:true},src:{elem:"input",type:"url",label:"Wikipedia URL","default":"http://en.wikipedia.org/wiki/Cat"},title:{elem:"input",type:"text",label:"Title","default":"Cats",optional:true},
105
+numberofwords:{elem:"input",type:"number",label:"Number of Words","default":"200",optional:true},target:"wikipedia-container"}},_setup:function(f){var n,c=r.guid();if(!f.lang)f.lang="en";f.numberofwords=f.numberofwords||200;window["wikiCallback"+c]=function(b){f._link=document.createElement("a");f._link.setAttribute("href",f.src);f._link.setAttribute("target","_blank");f._link.innerHTML=f.title||b.parse.displaytitle;f._desc=document.createElement("p");n=b.parse.text["*"].substr(b.parse.text["*"].indexOf("<p>"));
106
+n=n.replace(/((<(.|\n)+?>)|(\((.*?)\) )|(\[(.*?)\]))/g,"");n=n.split(" ");f._desc.innerHTML=n.slice(0,n.length>=f.numberofwords?f.numberofwords:n.length).join(" ")+" ...";f._fired=true};f.src&&r.getScript("//"+f.lang+".wikipedia.org/w/api.php?action=parse&props=text&redirects&page="+f.src.slice(f.src.lastIndexOf("/")+1)+"&format=json&callback=wikiCallback"+c)},start:function(f,n){var c=function(){if(n._fired){if(n._link&&n._desc)if(document.getElementById(n.target)){document.getElementById(n.target).appendChild(n._link);
107
+document.getElementById(n.target).appendChild(n._desc);n._added=true}}else setTimeout(function(){c()},13)};c()},end:function(f,n){if(n._added){document.getElementById(n.target).removeChild(n._link);document.getElementById(n.target).removeChild(n._desc)}},_teardown:function(f){if(f._added){f._link.parentNode&&document.getElementById(f.target).removeChild(f._link);f._desc.parentNode&&document.getElementById(f.target).removeChild(f._desc);delete f.target}}})})(Popcorn);(function(r){r.plugin("mustache",function(f){var n,c,b,e;r.getScript("http://mustache.github.com/extras/mustache.js");var h=!!f.dynamic,i=typeof f.template,j=typeof f.data,p=document.getElementById(f.target);f.container=p||document.createElement("div");if(i==="function")if(h)b=f.template;else e=f.template(f);else e=i==="string"?f.template:"";if(j==="function")if(h)n=f.data;else c=f.data(f);else c=j==="string"?JSON.parse(f.data):j==="object"?f.data:"";return{start:function(m,o){var q=function(){if(window.Mustache){if(n)c=
108
+n(o);if(b)e=b(o);var s=Mustache.to_html(e,c).replace(/^\s*/mg,"");o.container.innerHTML=s}else setTimeout(function(){q()},10)};q()},end:function(m,o){o.container.innerHTML=""},_teardown:function(){n=c=b=e=null}}},{about:{name:"Popcorn Mustache Plugin",version:"0.1",author:"David Humphrey (@humphd)",website:"http://vocamus.net/dave"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"mustache-container",template:{elem:"input",type:"text",
109
+label:"Template"},data:{elem:"input",type:"text",label:"Data"},dynamic:{elem:"input",type:"checkbox",label:"Dynamic","default":true}}})})(Popcorn);(function(r){function f(c,b){if(c.map)c.map.div.style.display=b;else setTimeout(function(){f(c,b)},10)}var n=1;r.plugin("openmap",function(c){var b,e,h,i,j,p,m,o,q=document.getElementById(c.target);b=document.createElement("div");b.id="openmapdiv"+n;b.style.width="100%";b.style.height="100%";n++;q&&q.appendChild(b);o=function(){if(window.OpenLayers&&window.OpenLayers.Layer.Stamen){if(c.location){location=new OpenLayers.LonLat(0,0);r.getJSONP("//tinygeocoder.com/create-api.php?q="+c.location+"&callback=jsonp",
110
+function(d){e=new OpenLayers.LonLat(d[1],d[0])})}else e=new OpenLayers.LonLat(c.lng,c.lat);c.type=c.type||"ROADMAP";switch(c.type){case "SATELLITE":c.map=new OpenLayers.Map({div:b,maxResolution:0.28125,tileSize:new OpenLayers.Size(512,512)});var s=new OpenLayers.Layer.WorldWind("LANDSAT","//worldwind25.arc.nasa.gov/tile/tile.aspx",2.25,4,{T:"105"});c.map.addLayer(s);i=new OpenLayers.Projection("EPSG:4326");h=new OpenLayers.Projection("EPSG:4326");break;case "TERRAIN":i=new OpenLayers.Projection("EPSG:4326");
111
+h=new OpenLayers.Projection("EPSG:4326");c.map=new OpenLayers.Map({div:b,projection:h});s=new OpenLayers.Layer.WMS("USGS Terraserver","//terraserver-usa.org/ogcmap.ashx?",{layers:"DRG"});c.map.addLayer(s);break;case "STAMEN-TONER":case "STAMEN-WATERCOLOR":case "STAMEN-TERRAIN":s=c.type.replace("STAMEN-","").toLowerCase();s=new OpenLayers.Layer.Stamen(s);i=new OpenLayers.Projection("EPSG:4326");h=new OpenLayers.Projection("EPSG:900913");e=e.transform(i,h);c.map=new OpenLayers.Map({div:b,projection:h,
112
+displayProjection:i,controls:[new OpenLayers.Control.Navigation,new OpenLayers.Control.PanPanel,new OpenLayers.Control.ZoomPanel]});c.map.addLayer(s);break;default:h=new OpenLayers.Projection("EPSG:900913");i=new OpenLayers.Projection("EPSG:4326");e=e.transform(i,h);c.map=new OpenLayers.Map({div:b,projection:h,displayProjection:i});s=new OpenLayers.Layer.OSM;c.map.addLayer(s)}if(c.map){c.map.setCenter(e,c.zoom||10);c.map.div.style.display="none"}}else setTimeout(function(){o()},50)};o();return{_setup:function(s){window.OpenLayers||
113
+r.getScript("//openlayers.org/api/OpenLayers.js",function(){r.getScript("//maps.stamen.com/js/tile.stamen.js")});var d=function(){if(s.map){s.zoom=s.zoom||2;if(s.zoom&&typeof s.zoom!=="number")s.zoom=+s.zoom;s.map.setCenter(e,s.zoom);if(s.markers){var A=OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style["default"]),y=function(v){clickedFeature=v.feature;if(clickedFeature.attributes.text){m=new OpenLayers.Popup.FramedCloud("featurePopup",clickedFeature.geometry.getBounds().getCenterLonLat(),
114
+new OpenLayers.Size(120,250),clickedFeature.attributes.text,null,true,function(){p.unselect(this.feature)});clickedFeature.popup=m;m.feature=clickedFeature;s.map.addPopup(m)}},x=function(v){feature=v.feature;if(feature.popup){m.feature=null;s.map.removePopup(feature.popup);feature.popup.destroy();feature.popup=null}},a=function(v){r.getJSONP("//tinygeocoder.com/create-api.php?q="+v.location+"&callback=jsonp",function(z){z=(new OpenLayers.Geometry.Point(z[1],z[0])).transform(i,h);var C=OpenLayers.Util.extend({},
115
+A);if(!v.size||isNaN(v.size))v.size=14;C.pointRadius=v.size;C.graphicOpacity=1;C.externalGraphic=v.icon;z=new OpenLayers.Feature.Vector(z,null,C);if(v.text)z.attributes={text:v.text};j.addFeatures([z])})};j=new OpenLayers.Layer.Vector("Point Layer",{style:A});s.map.addLayer(j);for(var g=0,l=s.markers.length;g<l;g++){var k=s.markers[g];if(k.text)if(!p){p=new OpenLayers.Control.SelectFeature(j);s.map.addControl(p);p.activate();j.events.on({featureselected:y,featureunselected:x})}if(k.location)a(k);
116
+else{var t=(new OpenLayers.Geometry.Point(k.lng,k.lat)).transform(i,h),u=OpenLayers.Util.extend({},A);if(!k.size||isNaN(k.size))k.size=14;u.pointRadius=k.size;u.graphicOpacity=1;u.externalGraphic=k.icon;t=new OpenLayers.Feature.Vector(t,null,u);if(k.text)t.attributes={text:k.text};j.addFeatures([t])}}}}else setTimeout(function(){d()},13)};d()},start:function(s,d){f(d,"block")},end:function(s,d){f(d,"none")},_teardown:function(){q&&q.removeChild(b);b=map=e=h=i=j=p=m=null}}},{about:{name:"Popcorn OpenMap Plugin",
117
+version:"0.3",author:"@mapmeld",website:"mapadelsur.blogspot.com"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"map-container",type:{elem:"select",options:["ROADMAP","SATELLITE","TERRAIN"],label:"Map Type",optional:true},zoom:{elem:"input",type:"number",label:"Zoom","default":2},lat:{elem:"input",type:"text",label:"Lat",optional:true},lng:{elem:"input",type:"text",label:"Lng",optional:true},location:{elem:"input",type:"text",label:"Location",
118
+"default":"Toronto, Ontario, Canada"},markers:{elem:"input",type:"text",label:"List Markers",optional:true}}})})(Popcorn);document.addEventListener("click",function(r){r=r.target;if(r.nodeName==="A"||r.parentNode&&r.parentNode.nodeName==="A")Popcorn.instances.forEach(function(f){f.options.pauseOnLinkClicked&&f.pause()})},false);(function(r){var f={},n=0,c=document.createElement("span"),b=["webkit","Moz","ms","O",""],e=["Transform","TransitionDuration","TransitionTimingFunction"],h={},i;document.getElementsByTagName("head")[0].appendChild(c);for(var j=0,p=e.length;j<p;j++)for(var m=0,o=b.length;m<o;m++){i=b[m]+e[j];if(i in c.style){h[e[j].toLowerCase()]=i;break}}document.getElementsByTagName("head")[0].appendChild(c);r.plugin("wordriver",{manifest:{about:{name:"Popcorn WordRiver Plugin"},options:{start:{elem:"input",type:"number",
119
+label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"wordriver-container",text:{elem:"input",type:"text",label:"Text","default":"Popcorn.js"},color:{elem:"input",type:"text",label:"Color","default":"Green",optional:true}}},_setup:function(q){q._duration=q.end-q.start;var s;if(!(s=f[q.target])){s=q.target;f[s]=document.createElement("div");var d=document.getElementById(s);d&&d.appendChild(f[s]);f[s].style.height="100%";f[s].style.position="relative";s=f[s]}q._container=s;q.word=document.createElement("span");
120
+q.word.style.position="absolute";q.word.style.whiteSpace="nowrap";q.word.style.opacity=0;q.word.style.MozTransitionProperty="opacity, -moz-transform";q.word.style.webkitTransitionProperty="opacity, -webkit-transform";q.word.style.OTransitionProperty="opacity, -o-transform";q.word.style.transitionProperty="opacity, transform";q.word.style[h.transitionduration]="1s, "+q._duration+"s";q.word.style[h.transitiontimingfunction]="linear";q.word.innerHTML=q.text;q.word.style.color=q.color||"black"},start:function(q,
121
+s){s._container.appendChild(s.word);s.word.style[h.transform]="";s.word.style.fontSize=~~(30+20*Math.random())+"px";n%=s._container.offsetWidth-s.word.offsetWidth;s.word.style.left=n+"px";n+=s.word.offsetWidth+10;s.word.style[h.transform]="translateY("+(s._container.offsetHeight-s.word.offsetHeight)+"px)";s.word.style.opacity=1;setTimeout(function(){s.word.style.opacity=0},(s.end-s.start-1||1)*1E3)},end:function(q,s){s.word.style.opacity=0},_teardown:function(q){var s=document.getElementById(q.target);
122
+q.word.parentNode&&q._container.removeChild(q.word);f[q.target]&&!f[q.target].childElementCount&&s&&s.removeChild(f[q.target])&&delete f[q.target]}})})(Popcorn);(function(r){var f=1;r.plugin("timeline",function(n){var c=document.getElementById(n.target),b=document.createElement("div"),e,h=true;if(c&&!c.firstChild){c.appendChild(e=document.createElement("div"));e.style.width="inherit";e.style.height="inherit";e.style.overflow="auto"}else e=c.firstChild;b.style.display="none";b.id="timelineDiv"+f;n.direction=n.direction||"up";if(n.direction.toLowerCase()==="down")h=false;if(c&&e)h?e.insertBefore(b,e.firstChild):e.appendChild(b);f++;b.innerHTML="<p><span id='big' style='font-size:24px; line-height: 130%;' >"+
123
+n.title+"</span><br /><span id='mid' style='font-size: 16px;'>"+n.text+"</span><br />"+n.innerHTML;return{start:function(i,j){b.style.display="block";if(j.direction==="down")e.scrollTop=e.scrollHeight},end:function(){b.style.display="none"},_teardown:function(){e&&b&&e.removeChild(b)&&!e.firstChild&&c.removeChild(e)}}},{about:{name:"Popcorn Timeline Plugin",version:"0.1",author:"David Seifried @dcseifried",website:"dseifried.wordpress.com"},options:{start:{elem:"input",type:"number",label:"Start"},
124
+end:{elem:"input",type:"number",label:"End"},target:"feed-container",title:{elem:"input",type:"text",label:"Title"},text:{elem:"input",type:"text",label:"Text"},innerHTML:{elem:"input",type:"text",label:"HTML Code",optional:true},direction:{elem:"select",options:["DOWN","UP"],label:"Direction",optional:true}}})})(Popcorn);(function(r,f){var n={};r.plugin("documentcloud",{manifest:{about:{name:"Popcorn Document Cloud Plugin",version:"0.1",author:"@humphd, @ChrisDeCairos",website:"http://vocamus.net/dave"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"documentcloud-container",width:{elem:"input",type:"text",label:"Width",optional:true},height:{elem:"input",type:"text",label:"Height",optional:true},src:{elem:"input",type:"url",label:"PDF URL","default":"http://www.documentcloud.org/documents/70050-urbina-day-1-in-progress.html"},
125
+preload:{elem:"input",type:"checkbox",label:"Preload","default":true},page:{elem:"input",type:"number",label:"Page Number",optional:true},aid:{elem:"input",type:"number",label:"Annotation Id",optional:true}}},_setup:function(c){function b(){function m(v){c._key=v.api.getId();c._changeView=function(z){c.aid?z.pageSet.showAnnotation(z.api.getAnnotation(c.aid)):z.api.setCurrentPage(c.page)}}function o(){n[c._key]={num:1,id:c._containerId};h.loaded=true}h.loaded=false;var q=c.url.replace(/\.html$/,".js"),
126
+s=c.target,d=f.getElementById(s),A=f.createElement("div"),y=r.position(d),x=c.width||y.width;y=c.height||y.height;var a=c.sidebar||true,g=c.text||true,l=c.pdf||true,k=c.showAnnotations||true,t=c.zoom||700,u=c.search||true;if(!function(v){var z=false;r.forEach(h.viewers,function(C){if(C.api.getSchema().canonicalURL===v){m(C);C=n[c._key];c._containerId=C.id;C.num+=1;z=true;h.loaded=true}});return z}(c.url)){A.id=c._containerId=r.guid(s);s="#"+A.id;d.appendChild(A);i.trigger("documentready");h.load(q,
127
+{width:x,height:y,sidebar:a,text:g,pdf:l,showAnnotations:k,zoom:t,search:u,container:s,afterLoad:c.page||c.aid?function(v){m(v);c._changeView(v);A.style.visibility="hidden";v.elements.pages.hide();o()}:function(v){m(v);o();A.style.visibility="hidden";v.elements.pages.hide()}})}}function e(){window.DV.loaded?b():setTimeout(e,25)}var h=window.DV=window.DV||{},i=this;if(h.loading)e();else{h.loading=true;h.recordHit="//www.documentcloud.org/pixel.gif";var j=f.createElement("link"),p=f.getElementsByTagName("head")[0];
128
+j.rel="stylesheet";j.type="text/css";j.media="screen";j.href="//s3.documentcloud.org/viewer/viewer-datauri.css";p.appendChild(j);h.loaded=false;r.getScript("http://s3.documentcloud.org/viewer/viewer.js",function(){h.loading=false;b()})}},start:function(c,b){var e=f.getElementById(b._containerId),h=DV.viewers[b._key];(b.page||b.aid)&&h&&b._changeView(h);if(e&&h){e.style.visibility="visible";h.elements.pages.show()}},end:function(c,b){var e=f.getElementById(b._containerId);if(e&&DV.viewers[b._key]){e.style.visibility=
129
+"hidden";DV.viewers[b._key].elements.pages.hide()}},_teardown:function(c){var b=f.getElementById(c._containerId);if((c=c._key)&&DV.viewers[c]&&--n[c].num===0){for(DV.viewers[c].api.unload();b.hasChildNodes();)b.removeChild(b.lastChild);b.parentNode.removeChild(b)}}})})(Popcorn,window.document);(function(r){r.parser("parseJSON","JSON",function(f){var n={title:"",remote:"",data:[]};r.forEach(f.data,function(c){n.data.push(c)});return n})})(Popcorn);(function(r){r.parser("parseSBV",function(f){var n={title:"",remote:"",data:[]},c=[],b=0,e=0,h=function(q){q=q.split(":");var s=q.length-1,d;try{d=parseInt(q[s-1],10)*60+parseFloat(q[s],10);if(s===2)d+=parseInt(q[0],10)*3600}catch(A){throw"Bad cue";}return d},i=function(q,s){var d={};d[q]=s;return d};f=f.text.split(/(?:\r\n|\r|\n)/gm);for(e=f.length;b<e;){var j={},p=[],m=f[b++].split(",");try{j.start=h(m[0]);for(j.end=h(m[1]);b<e&&f[b];)p.push(f[b++]);j.text=p.join("<br />");c.push(i("subtitle",j))}catch(o){for(;b<
130
+e&&f[b];)b++}for(;b<e&&!f[b];)b++}n.data=c;return n})})(Popcorn);(function(r){function f(c,b){var e={};e[c]=b;return e}function n(c){c=c.split(":");try{var b=c[2].split(",");if(b.length===1)b=c[2].split(".");return parseFloat(c[0],10)*3600+parseFloat(c[1],10)*60+parseFloat(b[0],10)+parseFloat(b[1],10)/1E3}catch(e){return 0}}r.parser("parseSRT",function(c){var b={title:"",remote:"",data:[]},e=[],h=0,i=0,j,p,m,o;c=c.text.split(/(?:\r\n|\r|\n)/gm);for(h=c.length-1;h>=0&&!c[h];)h--;m=h+1;for(h=0;h<m;h++){o={};p=[];o.id=parseInt(c[h++],10);j=c[h++].split(/[\t ]*--\>[\t ]*/);
131
+o.start=n(j[0]);i=j[1].indexOf(" ");if(i!==-1)j[1]=j[1].substr(0,i);for(o.end=n(j[1]);h<m&&c[h];)p.push(c[h++]);o.text=p.join("\\N").replace(/\{(\\[\w]+\(?([\w\d]+,?)+\)?)+\}/gi,"");o.text=o.text.replace(/</g,"&lt;").replace(/>/g,"&gt;");o.text=o.text.replace(/&lt;(\/?(font|b|u|i|s))((\s+(\w|\w[\w\-]*\w)(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)(\/?)&gt;/gi,"<$1$3$7>");o.text=o.text.replace(/\\N/gi,"<br />");e.push(f("subtitle",o))}b.data=e;return b})})(Popcorn);(function(r){function f(b,e){var h=b.substr(10).split(","),i;i={start:n(h[e.start]),end:n(h[e.end])};if(i.start===-1||i.end===-1)throw"Invalid time";var j=q.call(m,/\{(\\[\w]+\(?([\w\d]+,?)+\)?)+\}/gi,""),p=j.replace,m;m=h.length;q=[];for(var o=e.text;o<m;o++)q.push(h[o]);m=q.join(",");var q=m.replace;i.text=p.call(j,/\\N/gi,"<br />");return i}function n(b){var e=b.split(":");if(b.length!==10||e.length<3)return-1;return parseInt(e[0],10)*3600+parseInt(e[1],10)*60+parseFloat(e[2],10)}function c(b,
132
+e){var h={};h[b]=e;return h}r.parser("parseSSA",function(b){var e={title:"",remote:"",data:[]},h=[],i=0,j;b=b.text.split(/(?:\r\n|\r|\n)/gm);for(j=b.length;i<j&&b[i]!=="[Events]";)i++;var p=b[++i].substr(8).split(", "),m={},o,q;q=0;for(o=p.length;q<o;q++)if(p[q]==="Start")m.start=q;else if(p[q]==="End")m.end=q;else if(p[q]==="Text")m.text=q;for(;++i<j&&b[i]&&b[i][0]!=="[";)try{h.push(c("subtitle",f(b[i],m)))}catch(s){}e.data=h;return e})})(Popcorn);(function(r){function f(i,j,p){var m=i.firstChild;i=n(i,p);p=[];for(var o;m;){if(m.nodeType===1)if(m.nodeName==="p")p.push(c(m,j,i));else if(m.nodeName==="div"){o=b(m.getAttribute("begin"));if(o<0)o=j;p.push.apply(p,f(m,o,i))}m=m.nextSibling}return p}function n(i,j){var p=i.getAttribute("region");return p!==null?p:j||""}function c(i,j,p){var m={};m.text=(i.textContent||i.text).replace(e,"").replace(h,"<br />");m.id=i.getAttribute("xml:id")||i.getAttribute("id");m.start=b(i.getAttribute("begin"),j);
133
+m.end=b(i.getAttribute("end"),j);m.target=n(i,p);if(m.end<0){m.end=b(i.getAttribute("duration"),0);if(m.end>=0)m.end+=m.start;else m.end=Number.MAX_VALUE}return{subtitle:m}}function b(i,j){var p;if(!i)return-1;try{return r.util.toSeconds(i)}catch(m){for(var o=i.length-1;o>=0&&i[o]<="9"&&i[o]>="0";)o--;p=o;o=parseFloat(i.substring(0,p));p=i.substring(p);return o*({h:3600,m:60,s:1,ms:0.0010}[p]||-1)+(j||0)}}var e=/^[\s]+|[\s]+$/gm,h=/(?:\r\n|\r|\n)/gm;r.parser("parseTTML",function(i){var j={title:"",
134
+remote:"",data:[]};if(!i.xml||!i.xml.documentElement)return j;i=i.xml.documentElement.firstChild;if(!i)return j;for(;i.nodeName!=="body";)i=i.nextSibling;if(i)j.data=f(i,0);return j})})(Popcorn);(function(r){r.parser("parseTTXT",function(f){var n={title:"",remote:"",data:[]},c=function(j){j=j.split(":");var p=0;try{return parseFloat(j[0],10)*60*60+parseFloat(j[1],10)*60+parseFloat(j[2],10)}catch(m){p=0}return p},b=function(j,p){var m={};m[j]=p;return m};f=f.xml.lastChild.lastChild;for(var e=Number.MAX_VALUE,h=[];f;){if(f.nodeType===1&&f.nodeName==="TextSample"){var i={};i.start=c(f.getAttribute("sampleTime"));i.text=f.getAttribute("text");if(i.text){i.end=e-0.0010;h.push(b("subtitle",i))}e=
135
+i.start}f=f.previousSibling}n.data=h.reverse();return n})})(Popcorn);(function(r){function f(c){var b=c.split(":");c=c.length;var e;if(c!==12&&c!==9)throw"Bad cue";c=b.length-1;try{e=parseInt(b[c-1],10)*60+parseFloat(b[c],10);if(c===2)e+=parseInt(b[0],10)*3600}catch(h){throw"Bad cue";}return e}function n(c,b){var e={};e[c]=b;return e}r.parser("parseVTT",function(c){var b={title:"",remote:"",data:[]},e=[],h=0,i=0,j,p;c=c.text.split(/(?:\r\n|\r|\n)/gm);i=c.length;if(i===0||c[0]!=="WEBVTT")return b;for(h++;h<i;){j=[];try{for(var m=h;m<i&&!c[m];)m++;h=m;var o=c[h++];m=
136
+void 0;var q={};if(!o||o.indexOf("--\>")===-1)throw"Bad cue";m=o.replace(/--\>/," --\> ").split(/[\t ]+/);if(m.length<2)throw"Bad cue";q.id=o;q.start=f(m[0]);q.end=f(m[2]);for(p=q;h<i&&c[h];)j.push(c[h++]);p.text=j.join("<br />");e.push(n("subtitle",p))}catch(s){for(h=h;h<i&&c[h];)h++;h=h}}b.data=e;return b})})(Popcorn);(function(r){r.parser("parseXML","XML",function(f){var n={title:"",remote:"",data:[]},c={},b=function(m){m=m.split(":");if(m.length===1)return parseFloat(m[0],10);else if(m.length===2)return parseFloat(m[0],10)+parseFloat(m[1]/12,10);else if(m.length===3)return parseInt(m[0]*60,10)+parseFloat(m[1],10)+parseFloat(m[2]/12,10);else if(m.length===4)return parseInt(m[0]*3600,10)+parseInt(m[1]*60,10)+parseFloat(m[2],10)+parseFloat(m[3]/12,10)},e=function(m){for(var o={},q=0,s=m.length;q<s;q++){var d=m.item(q).nodeName,
137
+A=m.item(q).nodeValue,y=c[A];if(d==="in")o.start=b(A);else if(d==="out")o.end=b(A);else if(d==="resourceid")for(var x in y){if(y.hasOwnProperty(x))if(!o[x]&&x!=="id")o[x]=y[x]}else o[d]=A}return o},h=function(m,o){var q={};q[m]=o;return q},i=function(m,o,q){var s={};r.extend(s,o,e(m.attributes),{text:m.textContent||m.text});o=m.childNodes;if(o.length<1||o.length===1&&o[0].nodeType===3)if(q)c[s.id]=s;else n.data.push(h(m.nodeName,s));else for(m=0;m<o.length;m++)o[m].nodeType===1&&i(o[m],s,q)};f=f.documentElement.childNodes;
138
+for(var j=0,p=f.length;j<p;j++)if(f[j].nodeType===1)f[j].nodeName==="manifest"?i(f[j],{},true):i(f[j],{},false);return n})})(Popcorn);(function(){var r=false,f=false;Popcorn.player("soundcloud",{_canPlayType:function(n,c){return/(?:http:\/\/www\.|http:\/\/|www\.|\.|^)(soundcloud)/.test(c)&&n.toLowerCase()!=="video"},_setup:function(n){function c(){r=true;SC.initialize({client_id:"PRaNFlda6Bhf5utPjUsptg"});SC.get("/resolve",{url:e.src},function(A){e.width=e.style.width?""+e.offsetWidth:"560";e.height=e.style.height?""+e.offsetHeight:"315";h.scrolling="no";h.frameborder="no";h.id="soundcloud-"+Popcorn.guid();h.src="http://w.soundcloud.com/player/?url="+
139
+A.uri+"&show_artwork=false&buying=false&liking=false&sharing=false";h.width="100%";h.height="100%";n.loadListener=function(){n.widget=o=SC.Widget(h.id);o.bind(SC.Widget.Events.FINISH,function(){e.pause();e.dispatchEvent("ended")});o.bind(SC.Widget.Events.PLAY_PROGRESS,function(y){j=y.currentPosition/1E3;e.dispatchEvent("timeupdate")});o.bind(SC.Widget.Events.PLAY,function(){p=m=false;e.dispatchEvent("play");e.dispatchEvent("playing");e.currentTime=j;d.next()});o.bind(SC.Widget.Events.PAUSE,function(){p=
140
+m=true;e.dispatchEvent("pause");d.next()});o.bind(SC.Widget.Events.READY,function(){o.getDuration(function(y){q=y/1E3;e.style.visibility="visible";e.dispatchEvent("durationchange");e.readyState=4;e.dispatchEvent("readystatechange");e.dispatchEvent("loadedmetadata");e.dispatchEvent("loadeddata");e.dispatchEvent("canplaythrough");e.dispatchEvent("load");!e.paused&&e.play()});o.getVolume(function(y){i=y/100})})};h.addEventListener("load",n.loadListener,false);e.appendChild(h)})}function b(){if(f)(function A(){setTimeout(function(){r?
141
+c():A()},100)})();else{f=true;Popcorn.getScript("http://w.soundcloud.com/player/api.js",function(){Popcorn.getScript("http://connect.soundcloud.com/sdk.js",function(){c()})})}}var e=this,h=document.createElement("iframe"),i=1,j=0,p=true,m=true,o,q=0,s=false,d=Popcorn.player.playerQueue();n._container=h;e.style.visibility="hidden";e.play=function(){p=false;d.add(function(){if(m)o&&o.play();else d.next()})};e.pause=function(){p=true;d.add(function(){if(m)d.next();else o&&o.pause()})};Object.defineProperties(e,
142
+{muted:{set:function(A){if(A){o&&o.getVolume(function(y){i=y/100});o&&o.setVolume(0);s=true}else{o&&o.setVolume(i*100);s=false}e.dispatchEvent("volumechange")},get:function(){return s}},volume:{set:function(A){o&&o.setVolume(A*100);i=A;e.dispatchEvent("volumechange")},get:function(){return s?0:i}},currentTime:{set:function(A){j=A;o&&o.seekTo(A*1E3);e.dispatchEvent("seeked");e.dispatchEvent("timeupdate")},get:function(){return j}},duration:{get:function(){return q}},paused:{get:function(){return p}}});
143
+r?c():b()},_teardown:function(n){var c=n.widget,b=SC.Widget.Events,e=n._container;n.destroyed=true;if(c)for(var h in b)c&&c.unbind(b[h]);else e.removeEventListener("load",n.loadEventListener,false)}})})();(function(){function r(n){var c=r.options;n=c.parser[c.strictMode?"strict":"loose"].exec(n);for(var b={},e=14;e--;)b[c.key[e]]=n[e]||"";b[c.q.name]={};b[c.key[12]].replace(c.q.parser,function(h,i,j){if(i)b[c.q.name][i]=j});return b}function f(n,c){return/player.vimeo.com\/video\/\d+/.test(c)||/vimeo.com\/\d+/.test(c)}r.options={strictMode:false,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",
144
+parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};Popcorn.player("vimeo",{_canPlayType:f,_setup:function(n){function c(l,k){var t=y.src.split("?")[0],u=JSON.stringify({method:l,
145
+value:k});if(t.substr(0,2)==="//")t=window.location.protocol+t;y.contentWindow?y.contentWindow.postMessage(u,t):o.unload()}function b(l){if(l.origin==="http://player.vimeo.com"){var k;try{k=JSON.parse(l.data)}catch(t){console.warn(t)}if(k.player_id==m){k.method&&a[k.method]&&a[k.method](k);k.event&&g[k.event]&&g[k.event](k)}}}function e(){d||(d=setInterval(function(){o.dispatchEvent("timeupdate")},i));s||(s=setInterval(function(){c("getCurrentTime")},j))}function h(){if(d){clearInterval(d);d=0}if(s){clearInterval(s);
146
+s=0}}var i=250,j=16,p={MEDIA_ERR_ABORTED:1,MEDIA_ERR_NETWORK:2,MEDIA_ERR_DECODE:3,MEDIA_ERR_SRC_NOT_SUPPORTED:4},m,o=this,q={q:[],queue:function(l){this.q.push(l);this.process()},process:function(){if(A)for(;this.q.length;)this.q.shift()()}},s,d,A,y=document.createElement("iframe"),x={error:null,src:o.src,NETWORK_EMPTY:0,NETWORK_IDLE:1,NETWORK_LOADING:2,NETWORK_NO_SOURCE:3,networkState:0,HAVE_NOTHING:0,HAVE_METADATA:1,HAVE_CURRENT_DATA:2,HAVE_FUTURE_DATA:3,HAVE_ENOUGH_DATA:4,readyState:0,seeking:false,
147
+currentTime:0,duration:NaN,paused:true,ended:false,autoplay:false,loop:false,volume:1,muted:false,width:0,height:0};Popcorn.forEach("error networkState readyState seeking duration paused ended".split(" "),function(l){Object.defineProperty(o,l,{get:function(){return x[l]}})});Object.defineProperties(o,{src:{get:function(){return x.src},set:function(l){x.src=l;o.load()}},currentTime:{get:function(){return x.currentTime},set:function(l){q.queue(function(){c("seekTo",l)});x.seeking=true;o.dispatchEvent("seeking")}},
148
+autoplay:{get:function(){return x.autoplay},set:function(l){x.autoplay=!!l}},loop:{get:function(){return x.loop},set:function(l){x.loop=!!l;q.queue(function(){c("setLoop",loop)})}},volume:{get:function(){return x.volume},set:function(l){x.volume=l;q.queue(function(){c("setVolume",x.muted?0:x.volume)});o.dispatchEvent("volumechange")}},muted:{get:function(){return x.muted},set:function(l){x.muted=!!l;q.queue(function(){c("setVolume",x.muted?0:x.volume)});o.dispatchEvent("volumechange")}},width:{get:function(){return y.width},
149
+set:function(l){y.width=l}},height:{get:function(){return y.height},set:function(l){y.height=l}}});var a={getCurrentTime:function(l){x.currentTime=parseFloat(l.value)},getDuration:function(l){x.duration=parseFloat(l.value);if(!isNaN(x.duration)){x.readyState=4;o.dispatchEvent("durationchange");o.dispatchEvent("loadedmetadata");o.dispatchEvent("loadeddata");o.dispatchEvent("canplay");o.dispatchEvent("canplaythrough")}},getVolume:function(l){x.volume=parseFloat(l.value)}},g={ready:function(){c("addEventListener",
150
+"loadProgress");c("addEventListener","playProgress");c("addEventListener","play");c("addEventListener","pause");c("addEventListener","finish");c("addEventListener","seek");c("getDuration");A=true;q.process();o.dispatchEvent("loadstart")},loadProgress:function(l){o.dispatchEvent("progress");x.duration=parseFloat(l.data.duration)},playProgress:function(l){x.currentTime=parseFloat(l.data.seconds)},play:function(){if(x.seeking){x.seeking=false;o.dispatchEvent("seeked")}x.paused=false;x.ended=false;e();
151
+o.dispatchEvent("play")},pause:function(){x.paused=true;h();o.dispatchEvent("pause")},finish:function(){x.ended=true;h();o.dispatchEvent("ended")},seek:function(l){x.currentTime=parseFloat(l.data.seconds);x.seeking=false;x.ended=false;o.dispatchEvent("timeupdate");o.dispatchEvent("seeked")}};o.load=function(){A=false;m=Popcorn.guid();var l=r(x.src),k={},t=[],u={api:1,player_id:m};if(f(o.nodeName,l.source)){Popcorn.extend(k,n);Popcorn.extend(k,l.queryKey);Popcorn.extend(k,u);l="http://player.vimeo.com/video/"+
152
+/\d+$/.exec(l.path)+"?";for(var v in k)k.hasOwnProperty(v)&&t.push(encodeURIComponent(v)+"="+encodeURIComponent(k[v]));l+=t.join("&");x.loop=!!l.match(/loop=1/);x.autoplay=!!l.match(/autoplay=1/);y.width=o.style.width?o.style.width:500;y.height=o.style.height?o.style.height:281;y.frameBorder=0;y.webkitAllowFullScreen=true;y.mozAllowFullScreen=true;y.allowFullScreen=true;y.src=l;o.appendChild(y)}else{l=x.MEDIA_ERR_SRC_NOT_SUPPORTED;x.error={};Popcorn.extend(x.error,p);x.error.code=l;o.dispatchEvent("error")}};
153
+o.unload=function(){h();window.removeEventListener("message",b,false)};o.play=function(){q.queue(function(){c("play")})};o.pause=function(){q.queue(function(){c("pause")})};setTimeout(function(){window.addEventListener("message",b,false);o.load()},0)},_teardown:function(){this.unload&&this.unload()}})})();(function(r,f){r.onYouTubePlayerAPIReady=function(){onYouTubePlayerAPIReady.ready=true;for(var c=0;c<onYouTubePlayerAPIReady.waiting.length;c++)onYouTubePlayerAPIReady.waiting[c]()};if(r.YT){r.quarantineYT=r.YT;r.YT=null}onYouTubePlayerAPIReady.waiting=[];var n=false;f.player("youtube",{_canPlayType:function(c,b){return typeof b==="string"&&/(?:http:\/\/www\.|http:\/\/|www\.|\.|^)(youtu)/.test(b)&&c.toLowerCase()!=="video"},_setup:function(c){if(!r.YT&&!n){n=true;f.getScript("//youtube.com/player_api")}var b=
154
+this,e=false,h=document.createElement("div"),i=0,j=true,p=false,m=0,o=false,q=100,s=f.player.playerQueue(),d=function(){f.player.defineProperty(b,"currentTime",{set:function(y){if(!c.destroyed){p=true;i=Math.round(+y*100)/100}},get:function(){return i}});f.player.defineProperty(b,"paused",{get:function(){return j}});f.player.defineProperty(b,"muted",{set:function(y){if(c.destroyed)return y;if(c.youtubeObject.isMuted()!==y){y?c.youtubeObject.mute():c.youtubeObject.unMute();o=c.youtubeObject.isMuted();
155
+b.dispatchEvent("volumechange")}return c.youtubeObject.isMuted()},get:function(){if(c.destroyed)return 0;return c.youtubeObject.isMuted()}});f.player.defineProperty(b,"volume",{set:function(y){if(c.destroyed)return y;if(c.youtubeObject.getVolume()/100!==y){c.youtubeObject.setVolume(y*100);q=c.youtubeObject.getVolume();b.dispatchEvent("volumechange")}return c.youtubeObject.getVolume()/100},get:function(){if(c.destroyed)return 0;return c.youtubeObject.getVolume()/100}});b.play=function(){if(!c.destroyed){j=
156
+false;s.add(function(){if(c.youtubeObject.getPlayerState()!==1){p=false;c.youtubeObject.playVideo()}else s.next()})}};b.pause=function(){if(!c.destroyed){j=true;s.add(function(){c.youtubeObject.getPlayerState()!==2?c.youtubeObject.pauseVideo():s.next()})}}};h.id=b.id+f.guid();c._container=h;b.appendChild(h);var A=function(){var y,x,a,g,l=true,k=function(){if(!c.destroyed){if(p)if(i===c.youtubeObject.getCurrentTime()){p=false;b.dispatchEvent("seeked");b.dispatchEvent("timeupdate")}else c.youtubeObject.seekTo(i);
157
+else{i=c.youtubeObject.getCurrentTime();b.dispatchEvent("timeupdate")}setTimeout(k,250)}},t=function(z){var C=c.youtubeObject.getDuration();if(isNaN(C)||C===0)setTimeout(function(){t(z*2)},z*1E3);else{b.duration=C;b.dispatchEvent("durationchange");b.dispatchEvent("loadedmetadata");b.dispatchEvent("loadeddata");b.readyState=4;k();b.dispatchEvent("canplaythrough")}};c.controls=+c.controls===0||+c.controls===1?c.controls:1;c.annotations=+c.annotations===1||+c.annotations===3?c.annotations:1;y=/^.*(?:\/|v=)(.{11})/.exec(b.src)[1];
158
+x=(b.src.split("?")[1]||"").replace(/v=.{11}/,"");x=x.replace(/&t=(?:(\d+)m)?(?:(\d+)s)?/,function(z,C,E){C|=0;E|=0;m=+E+C*60;return""});x=x.replace(/&start=(\d+)?/,function(z,C){C|=0;m=C;return""});e=/autoplay=1/.test(x);x=x.split(/[\&\?]/g);a={wmode:"transparent"};for(var u=0;u<x.length;u++){g=x[u].split("=");a[g[0]]=g[1]}c.youtubeObject=new YT.Player(h.id,{height:"100%",width:"100%",wmode:"transparent",playerVars:a,videoId:y,events:{onReady:function(){q=b.volume;o=b.muted;v();j=b.paused;d();c.youtubeObject.playVideo();
159
+b.currentTime=m},onStateChange:function(z){if(!(c.destroyed||z.data===-1))if(z.data===2){j=true;b.dispatchEvent("pause");s.next()}else if(z.data===1&&!l){j=false;b.dispatchEvent("play");b.dispatchEvent("playing");s.next()}else if(z.data===0)b.dispatchEvent("ended");else if(z.data===1&&l){l=false;if(e||!b.paused)j=false;j&&c.youtubeObject.pauseVideo();t(0.025)}},onError:function(z){if([2,100,101,150].indexOf(z.data)!==-1){b.error={customCode:z.data};b.dispatchEvent("error")}}}});var v=function(){if(!c.destroyed){if(o!==
160
+c.youtubeObject.isMuted()){o=c.youtubeObject.isMuted();b.dispatchEvent("volumechange")}if(q!==c.youtubeObject.getVolume()){q=c.youtubeObject.getVolume();b.dispatchEvent("volumechange")}setTimeout(v,250)}}};onYouTubePlayerAPIReady.ready?A():onYouTubePlayerAPIReady.waiting.push(A)},_teardown:function(c){c.destroyed=true;var b=c.youtubeObject;if(b){b.stopVideo();b.clearVideo&&b.clearVideo()}this.removeChild(document.getElementById(c._container.id))}})})(window,Popcorn);

+ 125
- 0
data/presentation/0.81/lib/popcorn.chattimeline.js Vedi File

@@ -0,0 +1,125 @@
1
+// PLUGIN: Timeline
2
+(function ( Popcorn ) {
3
+
4
+  /**
5
+     * chat-timeline popcorn plug-in
6
+     * Adds data associated with a certain time in the video, which creates a scrolling view of each item as the video progresses
7
+     * Options parameter will need a start, target, title, and text
8
+     * -Start is the time that you want this plug-in to execute
9
+     * -End is the time that you want this plug-in to stop executing, tho for this plugin an end time may not be needed ( optional )
10
+     * -Target is the id of the DOM element that you want the timeline to appear in. This element must be in the DOM
11
+     * -Name is the name of the current chat message sender
12
+     * -Text is text is simply related text that will be displayed
13
+     * -direction specifies whether the timeline will grow from the top or the bottom, receives input as "UP" or "DOWN"
14
+     * @param {Object} options
15
+     *
16
+     * Example:
17
+      var p = Popcorn("#video")
18
+        .timeline( {
19
+         start: 5, // seconds
20
+         target: "timeline",
21
+         name: "Seneca",
22
+         text: "Welcome to seneca",
23
+      } )
24
+    *
25
+  */
26
+
27
+  var i = 1;
28
+
29
+  Popcorn.plugin( "chattimeline" , function( options ) {
30
+
31
+    var target = document.getElementById( options.target ),
32
+        contentDiv = document.createElement( "div" ),
33
+        goingUp = true;
34
+
35
+    contentDiv.style.display = "none";
36
+    contentDiv.setAttribute('aria-hidden', true);
37
+    contentDiv.id = "timelineDiv" + i;
38
+
39
+    //  Default to up if options.direction is non-existant or not up or down
40
+    options.direction = options.direction || "up";
41
+    if ( options.direction.toLowerCase() === "down" ) {
42
+
43
+      goingUp = false;
44
+    }
45
+
46
+    if ( target ) {
47
+      // if this isnt the first div added to the target div
48
+      if( goingUp ){
49
+        // insert the current div before the previous div inserted
50
+        target.insertBefore( contentDiv, target.firstChild );
51
+      }
52
+      else {
53
+
54
+        target.appendChild( contentDiv );
55
+      }
56
+
57
+    }
58
+
59
+    i++;
60
+
61
+    //  Default to empty if not used
62
+    //options.innerHTML = options.innerHTML || "";
63
+
64
+    contentDiv.innerHTML = "<strong>" + options.name + ":</strong>" + options.message;
65
+
66
+    return {
67
+
68
+      start: function( event, options ) {
69
+        contentDiv.style.display = "block";
70
+        if ($("#exposechat").is(':checked')) {
71
+          contentDiv.setAttribute('aria-hidden', false);
72
+        }
73
+        if( options.direction === "down" ) {
74
+          target.scrollTop = target.scrollHeight;
75
+        }
76
+	
77
+        if ($("#accEnabled").is(':checked'))
78
+          addTime(7);
79
+      },
80
+
81
+      end: function( event, options ) {
82
+        contentDiv.style.display = "none";
83
+        contentDiv.setAttribute('aria-hidden', true);
84
+      },
85
+
86
+      _teardown: function( options ) {
87
+
88
+        ( target && contentDiv ) && target.removeChild( contentDiv ) && !target.firstChild
89
+      }
90
+    };
91
+  },
92
+  {
93
+
94
+    options: {
95
+      start: {
96
+        elem: "input",
97
+        type: "number",
98
+        label: "Start"
99
+      },
100
+      end: {
101
+        elem: "input",
102
+        type: "number",
103
+        label: "End"
104
+      },
105
+      target: "feed-container",
106
+      name: {
107
+        elem: "input",
108
+        type: "text",
109
+        label: "Name"
110
+      },
111
+      message: {
112
+        elem: "input",
113
+        type: "text",
114
+        label: "Message"
115
+      },
116
+      direction: {
117
+        elem: "select",
118
+        options: [ "DOWN", "UP" ],
119
+        label: "Direction",
120
+        optional: true
121
+      }
122
+    }
123
+  });
124
+
125
+})( Popcorn );

+ 452
- 0
data/presentation/0.81/lib/writing.js Vedi File

@@ -0,0 +1,452 @@
1
+/**
2
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
3
+*
4
+* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
5
+*
6
+* This program is free software; you can redistribute it and/or modify it under the
7
+* terms of the GNU Lesser General Public License as published by the Free Software
8
+* Foundation; either version 3.0 of the License, or (at your option) any later
9
+* version.
10
+*
11
+* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
12
+* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13
+* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14
+*
15
+* You should have received a copy of the GNU Lesser General Public License along
16
+* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
17
+*
18
+*/
19
+
20
+
21
+// - - - START OF GLOBAL VARIABLES - - - //
22
+"use strict";
23
+
24
+function getUrlParameters() {
25
+    var map = {};
26
+    window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) { map[key] = value; });
27
+    return map;
28
+}
29
+
30
+// - - - END OF GLOBAL VARIABLES - - - //
31
+
32
+// - - - START OF JAVASCRIPT FUNCTIONS - - - //
33
+
34
+// Draw the cursor at a specific point
35
+function draw(x, y) {
36
+    cursorStyle = document.getElementById("cursor").style;
37
+    var slide = document.getElementById("slide");
38
+    var obj = $("#slide > object");
39
+    var scaledX = parseInt(x, 10) * (parseInt(obj.attr("width"), 10) / 800);
40
+    var scaledY = parseInt(y, 10) * (parseInt(obj.attr("height"), 10) / 600); 
41
+    
42
+    //move to the next place
43
+    var leftValue = parseInt(slide.offsetLeft, 10) + parseInt(scaledX, 10)
44
+    var topValue = parseInt(slide.offsetTop, 10) + parseInt(scaledY, 10)
45
+    if (leftValue < 0){
46
+        leftValue = 0
47
+    }
48
+    if (topValue < 0){
49
+        topValue = 0
50
+    }
51
+    cursorStyle.left = leftValue + "px";
52
+    cursorStyle.top = topValue + "px";
53
+
54
+}
55
+
56
+
57
+// Shows or hides the cursor object depending on true/false parameter passed.
58
+function showCursor(boolVal) {
59
+	cursorStyle = document.getElementById("cursor").style;
60
+    if(boolVal === false) {
61
+        cursorStyle.height = "0px";
62
+        cursorStyle.width = "0px";
63
+    }
64
+    else {
65
+        cursorStyle.height = "10px";
66
+        cursorStyle.width = "10px";
67
+    }
68
+}
69
+
70
+function setViewBox(val) {
71
+  if(svgobj.contentDocument) svgfile = svgobj.contentDocument.getElementById("svgfile");
72
+  else svgfile = svgobj.getSVGDocument('svgfile').getElementById("svgfile");
73
+	svgfile.setAttribute('viewBox', val);
74
+}
75
+
76
+function setCursor(val) {
77
+	draw(val[0], val[1]);
78
+}
79
+
80
+function getImageAtTime(time) {
81
+	var curr_t = parseFloat(time);
82
+	var key;
83
+	for (key in imageAtTime) {
84
+		if(imageAtTime.hasOwnProperty(key)) {
85
+			var arry = key.split(",");
86
+			if ((parseFloat(arry[0]) <= curr_t) && (parseFloat(arry[1]) >= curr_t)) {
87
+				return imageAtTime[key];
88
+			}
89
+		}
90
+	}
91
+}
92
+
93
+function getViewboxAtTime(time) {
94
+	var curr_t = parseFloat(time);
95
+	var key;
96
+	for (key in vboxValues) {
97
+		if(vboxValues.hasOwnProperty(key)) {
98
+			var arry = key.split(",");
99
+			if(arry[1] == "end") {
100
+				return vboxValues[key];
101
+			}
102
+			else if ((parseFloat(arry[0]) <= curr_t) && (parseFloat(arry[1]) >= curr_t)) {
103
+				return vboxValues[key];
104
+			}
105
+		}
106
+	}
107
+}
108
+
109
+function getCursorAtTime(time) {
110
+	var coords = cursorValues[time];
111
+	if(coords) return coords.split(' ');
112
+}
113
+
114
+function removeSlideChangeAttribute() {
115
+	$('#video').removeAttr('slide-change');
116
+	Popcorn('#video').unlisten(Popcorn.play, 'removeSlideChangeAttribute');
117
+}
118
+
119
+// - - - END OF JAVASCRIPT FUNCTIONS - - - //
120
+
121
+function runPopcorn() {
122
+  if(svgobj.contentDocument) svgfile = svgobj.contentDocument.getElementById("svgfile");
123
+  else svgfile = svgobj.getSVGDocument('svgfile');
124
+
125
+  //making the object for requesting the read of the XML files.
126
+  if (window.XMLHttpRequest) {
127
+  	// code for IE7+, Firefox, Chrome, Opera, Safari
128
+  	var	xmlhttp = new XMLHttpRequest();
129
+  } else {
130
+  	// code for IE6, IE5
131
+  	var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
132
+  }
133
+
134
+  // PROCESS SHAPES.SVG (in XML format).
135
+  xmlhttp.open("GET", shapes_svg, false);
136
+  xmlhttp.send();
137
+  var xmlDoc = xmlhttp.responseXML;
138
+  //getting all the event tags
139
+  var shapeelements = xmlDoc.getElementsByTagName("svg");
140
+
141
+  //get the array of values for the first shape (getDataPoints(0) is the first shape).
142
+  var array = $(shapeelements[0]).find("g").filter(function(){ //get all the lines from the svg file   
143
+    return $(this).attr('class') == 'shape';
144
+  });
145
+  var images = shapeelements[0].getElementsByTagName("image");
146
+
147
+  //fill the times array with the times of the svg images.
148
+  for (var j = 0; j < array.length; j++) {
149
+  	times[j] = array[j].getAttribute("id").substr(4);
150
+  }
151
+
152
+  var times_length = times.length; //get the length of the times array.
153
+
154
+  for(var m = 0; m < images.length; m++) {
155
+  	len = images[m].getAttribute("in").split(" ").length;
156
+  	for(var n = 0; n < len; n++) {
157
+  		imageAtTime[[images[m].getAttribute("in").split(" ")[n], images[m].getAttribute("out").split(" ")[n]]] = images[m].getAttribute("id");
158
+  	}
159
+        
160
+        // the logo at the start has no text attribute
161
+        if (images[m].getAttribute("text")) {
162
+          var txtFile = false;
163
+          if (window.XMLHttpRequest) {
164
+  	    // code for IE7+, Firefox, Chrome, Opera, Safari
165
+  	    txtFile = new XMLHttpRequest();
166
+          } else {
167
+  	    // code for IE6, IE5
168
+  	    txtFile = new ActiveXObject("Microsoft.XMLHTTP");
169
+          }
170
+          var imgid = images[m].getAttribute("id"); //have to save the value because images array might go out of scope
171
+          txtFile.open("GET", url + "/" + images[m].getAttribute("text"), false);
172
+          txtFile.onreadystatechange = function() {
173
+              if (txtFile.readyState === 4) {
174
+                if (txtFile.status === 200) {
175
+                  slidePlainText[imgid] = $('<div/>').text(txtFile.responseText).html();
176
+                  console.log("Text file read " + imgid);
177
+                }
178
+              }
179
+          };
180
+          txtFile.send(null);
181
+        }
182
+  }
183
+
184
+  // PROCESS PANZOOMS.XML
185
+  xmlhttp.open("GET", events_xml, false);
186
+  xmlhttp.send();
187
+  xmlDoc = xmlhttp.responseXML;
188
+  //getting all the event tags
189
+  var panelements = xmlDoc.getElementsByTagName("recording");
190
+  var panZoomArray = panelements[0].getElementsByTagName("event");
191
+  viewBoxes = xmlDoc.getElementsByTagName("viewBox");
192
+
193
+  var pzlen = panZoomArray.length;
194
+  var second_val;
195
+  //fill the times array with the times of the svg images.
196
+  for (var k = 0;k < pzlen; k++) {
197
+  	if(panZoomArray[k+1] == undefined) {
198
+  		second_val = "end";
199
+  	}
200
+  	else second_val = panZoomArray[k+1].getAttribute("timestamp");
201
+  	vboxValues[[panZoomArray[k].getAttribute("timestamp"), second_val]] = viewBoxes[k].childNodes[0].data;
202
+  }
203
+
204
+
205
+  // PROCESS CURSOR.XML
206
+  xmlhttp.open("GET", cursor_xml, false);
207
+  xmlhttp.send();
208
+  xmlDoc = xmlhttp.responseXML;
209
+  //getting all the event tags
210
+  var curelements = xmlDoc.getElementsByTagName("recording");
211
+  var cursorArray = curelements[0].getElementsByTagName("event");
212
+  coords = xmlDoc.getElementsByTagName("cursor");
213
+
214
+  var clen = cursorArray.length;
215
+  //fill the times array with the times of the svg images.
216
+  if(cursorArray.length != 0) cursorValues["0"] = "0 0";
217
+  for (var m = 0; m < clen; m++) {
218
+  	cursorValues[cursorArray[m].getAttribute("timestamp")] = coords[m].childNodes[0].data;
219
+  }
220
+  
221
+  svgobj.style.left = document.getElementById("slide").offsetLeft + "px";
222
+  svgobj.style.top = "8px";
223
+  var next_shape;
224
+  var shape;
225
+  for (var i = 0, len = times_length; i < len-1; i++) { //iterate through all the shapes and pick out the main ones
226
+  	var time = times[i];
227
+  	  shape = svgobj.contentDocument.getElementById("draw" + time).getAttribute("shape");
228
+  	  next_shape = svgobj.contentDocument.getElementById("draw" + times[i+1]).getAttribute("shape");
229
+
230
+  	if(shape !== next_shape) {
231
+  		main_shapes_times[main_shapes_times.length] = time;
232
+  	}
233
+  }
234
+  if(times.length !== 0) {
235
+  	main_shapes_times[main_shapes_times.length] = times[times.length-1]; //put last value into this array always!
236
+  }
237
+  
238
+  var p = new Popcorn("#video");
239
+  //update 60x / second the position of the next value.
240
+  p.code({
241
+      start: 1, // start time
242
+      end: p.duration(),
243
+      onFrame: function(options) {
244
+        if(!((p.paused() === true) && (p.seeking() === false))) {
245
+          var t = p.currentTime().toFixed(1); //get the time and round to 1 decimal place
246
+          
247
+          if(svgobj.contentDocument) current_shape = svgobj.contentDocument.getElementById("draw" + t);
248
+          else current_shape = svgobj.getSVGDocument('svgfile').getElementById("draw" + t);
249
+
250
+          if(current_shape !== null) { //if there is actually a new shape to be displayed
251
+            current_shape = current_shape.getAttribute("shape"); //get actual shape tag for this specific time of playback
252
+          }
253
+          //redraw everything (only way to make everything elegant)
254
+          for (var i = 0, len = times_length; i < len; i++) {
255
+            var time_s = times[i];
256
+            var time_f = parseFloat(time_s);
257
+            
258
+            if(svgobj.contentDocument) shape = svgobj.contentDocument.getElementById("draw" + time_s);
259
+            else shape = svgobj.getSVGDocument('svgfile').getElementById("draw" + time_s);
260
+            
261
+            var shape_i = shape.getAttribute("shape");
262
+            if (time_f < t) {
263
+              if(shape_i === current_shape) { //currently drawing the same shape so don't draw the older steps
264
+                shape.style.visibility = "hidden"; //hide older steps to shape
265
+  	      }
266
+              else if(main_shapes_times.indexOf(time_s) !== -1) { //as long as it is a main shape, it can be drawn... no intermediate steps.
267
+                if(parseFloat(shape.getAttribute("undo")) === -1) { //As long as the undo event hasn't happened yet...
268
+                  shape.style.visibility = "visible";
269
+                }
270
+                else if (parseFloat(shape.getAttribute("undo")) > t) {
271
+                  shape.style.visibility = "visible";
272
+                }
273
+                else {
274
+                  shape.style.visibility = "hidden";
275
+                }
276
+              }
277
+            }
278
+            else if(time_s === t) { //for the shape with the time specific to the current time
279
+              shape.style.visibility = "visible";
280
+            }
281
+            else { //for shapes that shouldn't be drawn yet (larger time than current time), don't draw them.
282
+              shape.style.visibility = "hidden";
283
+            }
284
+          }
285
+          
286
+          var next_image = getImageAtTime(t); //fetch the name of the image at this time.
287
+          var imageXOffset = 0;
288
+          var imageYOffset = 0;
289
+          if((current_image !== next_image) && (next_image !== undefined)){	//changing slide image
290
+            if(svgobj.contentDocument) {
291
+              svgobj.contentDocument.getElementById(current_image).style.visibility = "hidden";
292
+              var ni = svgobj.contentDocument.getElementById(next_image);
293
+            }
294
+            else {
295
+              svgobj.getSVGDocument('svgfile').getElementById(current_image).style.visibility = "hidden";
296
+              var ni = svgobj.getSVGDocument('svgfile').getElementById(next_image);
297
+            }
298
+            document.getElementById("slideText").innerHTML = ""; //destroy old plain text
299
+            
300
+            ni.style.visibility = "visible";
301
+            document.getElementById("slideText").innerHTML = slidePlainText[next_image] + next_image; //set new plain text
302
+            
303
+            if ($("#accEnabled").is(':checked')) {
304
+              //pause the playback on slide change
305
+              p.pause();
306
+              $('#video').attr('slide-change', 'slide-change');
307
+              p.listen(Popcorn.play, removeSlideChangeAttribute);
308
+            }
309
+
310
+            var num_current = current_image.substr(5);
311
+            var num_next = next_image.substr(5);
312
+            
313
+            if(svgobj.contentDocument) currentcanvas = svgobj.contentDocument.getElementById("canvas" + num_current);
314
+            else currentcanvas = svgobj.getSVGDocument('svgfile').getElementById("canvas" + num_current);
315
+            
316
+            if(currentcanvas !== null) {
317
+              currentcanvas.setAttribute("display", "none");
318
+            }
319
+            
320
+            if(svgobj.contentDocument) nextcanvas = svgobj.contentDocument.getElementById("canvas" + num_next);
321
+            else nextcanvas = svgobj.getSVGDocument('svgfile').getElementById("canvas" + num_next);
322
+            
323
+            if((nextcanvas !== undefined) && (nextcanvas != null)) {
324
+              nextcanvas.setAttribute("display", "");
325
+            }
326
+            current_image = next_image;
327
+          }
328
+          
329
+          if(svgobj.contentDocument) var thisimg = svgobj.contentDocument.getElementById(current_image);
330
+          else var thisimg = svgobj.getSVGDocument('svgfile').getElementById(current_image);
331
+  
332
+          var offsets = thisimg.getBoundingClientRect();
333
+          // Offsets divided by 4. By 2 because of the padding and by 2 again because 800x600 is half  1600x1200
334
+          imageXOffset = (1600 - parseInt(thisimg.getAttribute("width"), 10))/4;
335
+          imageYOffset = (1200 - parseInt(thisimg.getAttribute("height"), 10))/4;
336
+
337
+          
338
+          var vboxVal = getViewboxAtTime(t);
339
+          if(vboxVal !== undefined) {
340
+            setViewBox(vboxVal);
341
+          }
342
+          
343
+          var cursorVal = getCursorAtTime(t);
344
+          var cursor_on = false;
345
+          if(cursorVal != null) {
346
+            if(!cursor_on) {
347
+              document.getElementById("cursor").style.visibility = 'visible'; //make visible
348
+              cursor_on = true;
349
+            }
350
+            setCursor([parseFloat(cursorVal[0]) + imageXOffset - 6, parseFloat(cursorVal[1]) + imageYOffset - 6]); //-6 is for radius of cursor offset
351
+          }
352
+       }
353
+    }
354
+  });
355
+};
356
+
357
+function defineStartTime() {
358
+  if (params.t === undefined)
359
+    return 1;
360
+
361
+  var extractNumber = /\d+/g;
362
+  var extractUnit = /\D+/g;
363
+  var temp_start_time = 0;
364
+
365
+  while (true) {
366
+    var param1 = extractUnit.exec(params.t);
367
+    var param2 = extractNumber.exec(params.t);
368
+    if (param1 == null || param2 == null)
369
+      break;
370
+
371
+    var unit = String(param1).toLowerCase();
372
+    var value = parseInt(String(param2));
373
+
374
+    if (unit == "h")
375
+      value *= 3600;
376
+    else if (unit == "m")
377
+      value *= 60;
378
+
379
+    temp_start_time += value;
380
+  }
381
+
382
+  console.log("Start time: " + temp_start_time);
383
+  return temp_start_time;
384
+}
385
+
386
+var current_canvas = "canvas0";
387
+var current_image = "image0";
388
+var currentcanvas;
389
+var shape;
390
+var nextcanvas;
391
+var next_image;
392
+var next_pgid;
393
+var curr_pgid;
394
+var svgfile;
395
+//current time
396
+var t;
397
+var len;
398
+var current_shape;
399
+//coordinates for x and y for each second
400
+var panAndZoomTimes = [];
401
+var viewBoxes = [];
402
+var coords = [];
403
+var times = [];
404
+var clearTimes = [];
405
+var main_shapes_times = [];
406
+var vboxValues = {};
407
+var cursorValues = {};
408
+var imageAtTime = {};
409
+var slidePlainText = {}; //holds slide plain text for retrieval
410
+var cursorStyle;
411
+
412
+var params = getUrlParameters();
413
+var MEETINGID = params.meetingId;
414
+var url = "/presentation/" + MEETINGID;
415
+var shapes_svg = url + '/shapes.svg';
416
+var events_xml = url + '/panzooms.xml';
417
+var cursor_xml = url + '/cursor.xml';
418
+
419
+var svgobj = document.createElement('object');
420
+svgobj.setAttribute('data', shapes_svg);
421
+svgobj.setAttribute('height', '600px');
422
+svgobj.setAttribute('width', '800px');
423
+svgobj.addEventListener('load', runPopcorn, false);
424
+
425
+/**
426
+ * we need an urgently refactor here
427
+ * first the writing.js must be loaded, and then runPopcorn loads, but it loads 
428
+ * only after the svg file gets loaded, and the generation of thumbnails must
429
+ * came after that because it needs the popcorn element to be created properly
430
+ */
431
+svgobj.addEventListener('load', function() {
432
+  generateThumbnails();
433
+  var p = Popcorn("#video");
434
+  p.on('loadeddata', function() {
435
+    p.currentTime(defineStartTime());
436
+  });
437
+
438
+  // Sometimes media has already loaded before our loadeddata listener is 
439
+  // attached. If the media is already past the loadeddata stage then we 
440
+  // trigger the event manually ourselves
441
+  if ($('#video')[0].readyState > 0) {
442
+    p.emit('loadeddata');
443
+  }
444
+}, false);
445
+
446
+
447
+document.getElementById('slide').appendChild(svgobj);
448
+
449
+window.onresize = function(event) {
450
+	svgobj.style.left = document.getElementById("slide").offsetLeft + "px";
451
+  svgobj.style.top = "8px";
452
+};

BIN
data/presentation/0.81/logo.png Vedi File


+ 100
- 0
data/presentation/0.81/playback.html Vedi File

@@ -0,0 +1,100 @@
1
+<!DOCTYPE html>
2
+<!--
3
+BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
4
+
5
+Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
6
+
7
+This program is free software; you can redistribute it and/or modify it under the
8
+terms of the GNU Lesser General Public License as published by the Free Software
9
+Foundation; either version 3.0 of the License, or (at your option) any later
10
+version.
11
+*
12
+BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
13
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14
+PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
15
+
16
+You should have received a copy of the GNU Lesser General Public License along
17
+with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
18
+-->
19
+<html>
20
+<head>
21
+  <title>BigBlueButton Playback</title>
22
+  <link rel="stylesheet" href="css/bbb.playback.css">
23
+  <script type="text/javascript" src="lib/jquery.min.js"></script>
24
+  <script type="text/javascript" src="lib/jquery-ui.min.js"></script>
25
+
26
+  <link rel="stylesheet" type="text/css" href="acornmediaplayer/acornmediaplayer.base.css" />
27
+  <script type="text/javascript" src="acornmediaplayer/jquery.acornmediaplayer.js"></script>
28
+  <link rel="stylesheet" type="text/css" href="acornmediaplayer/themes/access/acorn.access.css" />
29
+  <link rel="stylesheet" type="text/css" href="acornmediaplayer/themes/darkglass/acorn.darkglass.css" />
30
+
31
+
32
+  <script type="text/javascript" src="playback.js"></script>
33
+  <script type="text/javascript" src="lib/popcorn-complete.min.js"></script>
34
+  <script type="text/javascript" src="lib/popcorn.chattimeline.js"></script>
35
+
36
+  <!--script type="text/javascript">
37
+    jQuery(function() {
38
+      
39
+    });
40
+  </script-->
41
+
42
+  <style>
43
+  .acorn-player.darkglass {
44
+    overflow: visible;
45
+  }
46
+  </style>
47
+</head>
48
+<body>
49
+	<h1 class="visually-hidden">BigBlueButton Playback</h1>
50
+	<div id="playbackArea" class="clearfix" role="main">
51
+		<h2 class="visually-hidden">Slide Thumbnails</h2>
52
+		<div id="thumbnails" role="region" aria-label="Slide thumbnails"></div>
53
+		<h2 class="visually-hidden">Presentation Slides</h2>
54
+		<div id="presentation">
55
+			<div class="circle" id="cursor" style="visibility:hidden;"></div>
56
+			<div id="slide" role="img" aria-labelledby="slideText"></div>
57
+			<div id="slideText" class="visually-hidden" aria-live="polite"></div>
58
+		</div>
59
+		<div id="chatAndMediaArea">
60
+			<h2 class="visually-hidden">Chat Messages</h2>
61
+			<input type="checkbox" name="exposechat" id="exposechat" value="exposechat" class="visually-hidden" checked="checked" />
62
+			<label for="exposechat" class="visually-hidden">Read chat messages</label>
63
+			<div id="chat" aria-live="polite" role="region" aria-label="Chat messages"></div>
64
+			<div id="videoRecordingWrapper" role="region" aria-label="Video">
65
+<!--
66
+			  <video id="webcam" >You must use an HTML5 capable browser to view this page.
67
+			  This playback requires modern browser, please use FF, Safari, Chrome</video>
68
+-->			  
69
+		  	</div>
70
+	  		<div id="audioRecordingWrapper" role="region" aria-label="Audio">
71
+<!--
72
+		  	  <audio id="video">You must use an HTML5 capable browser to view this page.
73
+			  This playback requires modern browser, please use FF, Safari, Chrome</audio>	
74
+-->
75
+			</div>
76
+	  	</div>
77
+	</div>
78
+	<!--div id="playbackControls">
79
+		<div id="autoscrollWrapper">
80
+			<input id="autoscrollEnabled" type="checkbox" name="autoscrollEnabled" checked="true" aria-label="Toggle autoscroll"/>
81
+			<label for="autoscrollEnabled">Auto scroll</label>
82
+		</div>
83
+	</div-->
84
+
85
+	<!--
86
+	<div id="accInfo">
87
+		<input id="accEnabled" type="checkbox" value="accEnabled" />
88
+		<label for="accEnabled">Enable accessibility pauses</label><br/>
89
+		<div id="countdown" />
90
+	</div>
91
+	-->
92
+	<div id="footer">
93
+                <p>Recorded with <a target="_blank" href="http://bigbluebutton.org/">BigBlueButton</a>. </p>
94
+                <p>Use <a target="_blank" href="http://mozilla.org/firefox">Mozilla Firefox</a> or
95
+                   <a target="_blank" href="http://google.com/chrome/">Google Chrome</a> to play this recording.
96
+                </p>
97
+        </div>
98
+<!--	<script src='lib/writing.js'></script> -->
99
+</body>
100
+</html>

+ 427
- 0
data/presentation/0.81/playback.js Vedi File

@@ -0,0 +1,427 @@
1
+/*
2
+
3
+BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
4
+
5
+Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
6
+
7
+This program is free software; you can redistribute it and/or modify it under the
8
+terms of the GNU Lesser General Public License as published by the Free Software
9
+Foundation; either version 3.0 of the License, or (at your option) any later
10
+version.
11
+
12
+BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
13
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14
+PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
15
+
16
+You should have received a copy of the GNU Lesser General Public License along
17
+with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
18
+
19
+*/
20
+
21
+goToSlide = function(time) {
22
+  var pop = Popcorn("#video");
23
+  pop.currentTime(time);
24
+}
25
+
26
+getUrlParameters = function() {
27
+  var map = {};
28
+  var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
29
+    map[key] = value;
30
+  });
31
+  return map;
32
+}
33
+
34
+/*
35
+ * From: http://stackoverflow.com/questions/1634748/how-can-i-delete-a-query-string-parameter-in-javascript/4827730#4827730
36
+ */
37
+removeUrlParameter = function(url, param) {
38
+  var urlparts= url.split('?');
39
+  if (urlparts.length>=2) {
40
+    var prefix= encodeURIComponent(param)+'=';
41
+    var pars= urlparts[1].split(/[&;]/g);
42
+    for (var i=pars.length; i-- > 0;) {
43
+      if (pars[i].indexOf(prefix, 0)==0)
44
+        pars.splice(i, 1);
45
+    }
46
+    if (pars.length > 0) {
47
+      return urlparts[0]+'?'+pars.join('&');
48
+    } else {
49
+      return urlparts[0];
50
+    }
51
+  } else {
52
+    return url;
53
+  }
54
+}
55
+
56
+/*
57
+ * Converts seconds to HH:MM:SS
58
+ * From: http://stackoverflow.com/questions/6312993/javascript-seconds-to-time-with-format-hhmmss#6313008
59
+ */
60
+secondsToHHMMSS = function(secs) {
61
+  var hours   = Math.floor(secs / 3600);
62
+  var minutes = Math.floor((secs - (hours * 3600)) / 60);
63
+  var seconds = secs - (hours * 3600) - (minutes * 60);
64
+
65
+  if (hours   < 10) {hours   = "0"+hours;}
66
+  if (minutes < 10) {minutes = "0"+minutes;}
67
+  if (seconds < 10) {seconds = "0"+seconds;}
68
+  var time    = hours+':'+minutes+':'+seconds;
69
+  return time;
70
+}
71
+
72
+secondsToYouTubeFormat = function(secs) {
73
+  var hours   = Math.floor(secs / 3600);
74
+  var minutes = Math.floor((secs - (hours * 3600)) / 60);
75
+  var seconds = secs - (hours * 3600) - (minutes * 60);
76
+
77
+  var time = "";
78
+  if (hours > 0)   {time += hours+"h";}
79
+  if (minutes > 0) {time += minutes+"m";}
80
+  if (seconds > 0) {time += seconds+"s";}
81
+
82
+  return time;
83
+}
84
+
85
+/*
86
+ * Full word version of the above function for screen readers
87
+ */
88
+secondsToHHMMSSText = function(secs) {
89
+  var hours   = Math.floor(secs / 3600);
90
+  var minutes = Math.floor((secs - (hours * 3600)) / 60);
91
+  var seconds = secs - (hours * 3600) - (minutes * 60);
92
+
93
+  var time = "";
94
+  if (hours   > 1) {time += hours   + " hours ";}
95
+  else if (hours   == 1) {time += hours   + " hour ";}
96
+  if (minutes > 1) {time += minutes + " minutes ";}
97
+  else if (minutes == 1) {time += minutes + " minute ";}
98
+  if (seconds > 1) {time += seconds + " seconds ";}
99
+  else if (seconds == 1) {time += seconds + " second ";}
100
+
101
+  return time;
102
+}
103
+
104
+replaceTimeOnUrl = function(secs) {
105
+  var newUrl = removeUrlParameter(document.URL, "t") + "&t=" + secondsToYouTubeFormat(secs);
106
+  window.history.replaceState({}, "", newUrl);
107
+}
108
+
109
+var params = getUrlParameters();
110
+var MEETINGID = params['meetingId'];
111
+var RECORDINGS = "/presentation/" + MEETINGID;
112
+var SLIDES_XML = RECORDINGS + '/slides_new.xml';
113
+var SHAPES_SVG = RECORDINGS + '/shapes.svg';
114
+
115
+/*
116
+ * Sets the title attribute in a thumbnail.
117
+ */
118
+setTitleOnThumbnail = function($thumb) {
119
+  var src = $thumb.attr("src")
120
+  if (src !== undefined) {
121
+    var num = "?";
122
+    var name = "undefined";
123
+    var match = src.match(/slide-(.*).png/)
124
+    if (match) { num = match[1]; }
125
+    match = src.match(/([^/]*)\/slide-.*\.png/)
126
+    if (match) { name = match[1]; }
127
+    $thumb.attr("title", name + " (" + num + ")")
128
+  }
129
+}
130
+
131
+/*
132
+ * Associates several events on a thumbnail, e.g. click to change slide,
133
+ * mouse over/out functions, etc.
134
+ */
135
+setEventsOnThumbnail = function($thumb) {
136
+  // Popcorn event to mark a thumbnail when its slide is being shown
137
+  var timeIn = $thumb.attr("data-in");
138
+  var timeOut = $thumb.attr("data-out");
139
+  var pop = Popcorn("#video");
140
+  pop.code({
141
+    start: timeIn,
142
+    end: timeOut,
143
+    onStart: function( options ) {
144
+      $parent = $("#thumbnail-" + options.start).parent();
145
+      $parent.addClass("active");
146
+      $(".thumbnail-label", $parent).show();
147
+
148
+      animateToCurrentSlide();
149
+    },
150
+    onEnd: function( options ) {
151
+      $parent = $("#thumbnail-" + options.start).parent();
152
+      $parent.removeClass("active");
153
+      $(".thumbnail-label", $parent).hide();
154
+    }
155
+  });
156
+
157
+  // Click on thumbnail changes the slide in popcorn
158
+  $thumb.parent().on("click", function() {
159
+    goToSlide($thumb.attr("data-in"));
160
+    replaceTimeOnUrl($thumb.attr("data-in"));
161
+  });
162
+
163
+  // Mouse over/out to show/hide the label over the thumbnail
164
+  $wrapper = $thumb.parent();
165
+  $wrapper.on("mouseover", function() {
166
+    $(".thumbnail-label", $(this)).show();
167
+  });
168
+  $wrapper.on("mouseout", function() {
169
+    if (!$(this).hasClass("active")) {
170
+      $(".thumbnail-label", $(this)).hide();
171
+    }
172
+  });
173
+}
174
+
175
+$("input[name='autoscrollEnabled']").live('change', function() {
176
+  animateToCurrentSlide();
177
+});
178
+
179
+animateToCurrentSlide = function(force) {
180
+  force = typeof force !== 'undefined' ? force : false;
181
+
182
+  if (force || isAutoscrollEnabled()) {
183
+    var currentSlide = getCurrentSlide();
184
+    // animate the scroll of thumbnails to center the current slide
185
+    var thumbnailOffset = currentSlide.prop('offsetTop') - $("#thumbnails").prop('offsetTop') + (currentSlide.prop('offsetHeight') - $("#thumbnails").prop('offsetHeight')) / 2;
186
+    $("#thumbnails").animate({ scrollTop: thumbnailOffset }, 'slow');
187
+  }
188
+}
189
+
190
+isAutoscrollEnabled = function() {
191
+  return $("input[name='autoscrollEnabled']").is(':checked');
192
+}
193
+
194
+setAutoscrollEnabled = function(value) {
195
+  $('input[name=autoscrollEnabled]').attr('checked', value);
196
+}
197
+
198
+getCurrentSlide = function() {
199
+  return $(".thumbnail-wrapper.active");
200
+}
201
+
202
+/*
203
+ * Generates the list of thumbnails using shapes.svg
204
+ */
205
+generateThumbnails = function() {
206
+  var xmlhttp;
207
+  if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
208
+    xmlhttp = new XMLHttpRequest();
209
+  } else {// code for IE6, IE5
210
+    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
211
+  }
212
+  xmlhttp.open("GET", SHAPES_SVG, false);
213
+  xmlhttp.send(null);
214
+  
215
+  if (xmlhttp.responseXML)
216
+    var xmlDoc = xmlhttp.responseXML;
217
+  else {
218
+    var parser = new DOMParser();
219
+    var xmlDoc = parser.parseFromString(xmlhttp.responseText, "image/svg+xml");
220
+  }
221
+
222
+  var elementsMap = {};
223
+  var imagesList = new Array();
224
+  
225
+  xmlList = xmlDoc.getElementsByTagName("image");
226
+  var slideCount = 0;
227
+  
228
+  for (var i = 0; i < xmlList.length; i++) {
229
+    var element = xmlList[i];
230
+    
231
+    if (!$(element).attr("xlink:href"))
232
+      continue;
233
+    var src = RECORDINGS + "/" + element.getAttribute("xlink:href");
234
+    if (src.match(/\/presentation\/.*slide-.*\.png/)) {
235
+      var timeInList = xmlList[i].getAttribute("in").split(" ");
236
+      var timeOutList = xmlList[i].getAttribute("out").split(" ");
237
+
238
+      for (var j = 0; j < timeInList.length; j++) {
239
+        var timeIn = Math.floor(timeInList[j]);
240
+        var timeOut = Math.floor(timeOutList[j]);
241
+        
242
+        var img = $(document.createElement('img'));
243
+        img.attr("src", src);
244
+        img.attr("id", "thumbnail-" + timeIn);
245
+        img.attr("data-in", timeIn);
246
+        img.attr("data-out", timeOut);
247
+        img.addClass("thumbnail");
248
+        img.attr("alt", " ");
249
+        img.attr("aria-hidden", "true"); //doesn't need to be focusable for blind users
250
+
251
+        // a label with the time the slide starts
252
+        var label = $(document.createElement('span'));
253
+        label.addClass("thumbnail-label");
254
+        label.attr("aria-hidden", "true"); //doesn't need to be focusable for blind users
255
+        label.html(secondsToHHMMSS(timeIn));
256
+
257
+        var hiddenDesc = $(document.createElement('span'));
258
+        hiddenDesc.attr("id", img.attr("id") + "description");
259
+        hiddenDesc.attr("class", "visually-hidden");
260
+        hiddenDesc.html("Slide " + ++slideCount + " " + secondsToHHMMSSText(timeIn));
261
+        
262
+
263
+        // a wrapper around the img and label
264
+        var div = $(document.createElement('div'));
265
+        div.addClass("thumbnail-wrapper");
266
+        div.attr("role", "link"); //tells accessibility software it can be clicked
267
+	      div.attr("aria-describedby", img.attr("id") + "description");
268
+        div.append(img);
269
+        div.append(label);
270
+        div.append(hiddenDesc);
271
+
272
+        imagesList.push(timeIn);
273
+        elementsMap[timeIn] = div;
274
+	
275
+        setEventsOnThumbnail(img);
276
+        setTitleOnThumbnail(img);
277
+      }
278
+    }
279
+  }
280
+
281
+  imagesList.sort(function(a,b){return a - b});
282
+  for (var i in imagesList) {
283
+    $("#thumbnails").append(elementsMap[imagesList[i]]);
284
+  }
285
+}
286
+
287
+google_frame_warning = function(){
288
+  var message = "To support this playback please install 'Google Chrome Frame', or use other browser: Firefox, Safari, Chrome, Opera";
289
+  var line = document.createElement("p");
290
+  var link = document.createElement("a");
291
+  line.appendChild(document.createTextNode(message));
292
+  link.setAttribute("href", "http://www.google.com/chromeframe")
293
+  link.setAttribute("target", "_blank")
294
+  link.appendChild(document.createTextNode("Install Google Chrome Frame"));
295
+  document.getElementById("chat").appendChild(line);
296
+  document.getElementById("chat").appendChild(link);
297
+}
298
+  
299
+function checkUrl(url)
300
+{
301
+    console.log("Checking Url")
302
+    var http = new XMLHttpRequest();
303
+    http.open('HEAD', url, false);
304
+    http.send();
305
+    return http.status==200;
306
+}
307
+
308
+load_video = function(){
309
+   console.log("Loading video")
310
+   //document.getElementById("video").style.visibility = "hidden"  
311
+   var video = document.createElement("video")   
312
+   video.setAttribute('id','video');  
313
+   video.setAttribute('class','webcam');  
314
+
315
+   var webmsource = document.createElement("source");
316
+   webmsource.setAttribute('src', RECORDINGS + '/video/webcams.webm');
317
+   webmsource.setAttribute('type','video/webm; codecs="vp8.0, vorbis"');
318
+   video.appendChild(webmsource);
319
+
320
+   /*var time_manager = Popcorn("#video");
321
+   var pc_webcam = Popcorn("#webcam");
322
+   time_manager.on( "timeupdate", function() {
323
+    pc_webcam.currentTime( this.currentTime() );
324
+   });*/
325
+
326
+   video.setAttribute('data-timeline-sources', SLIDES_XML);    
327
+   //video.setAttribute('controls','');
328
+   //leave auto play turned off for accessiblity support
329
+   //video.setAttribute('autoplay','autoplay');
330
+
331
+   document.getElementById("videoRecordingWrapper").appendChild(video);
332
+}  
333
+
334
+load_audio = function() {
335
+   console.log("Loading audio")
336
+   var audio = document.createElement("audio") ;
337
+   audio.setAttribute('id', 'video');
338
+
339
+   // The webm file will work in IE with WebM components installed,
340
+   // and should load faster in Chrome too
341
+   var webmsource = document.createElement("source");
342
+   webmsource.setAttribute('src', RECORDINGS + '/audio/audio.webm');
343
+   webmsource.setAttribute('type', 'audio/webm; codecs="vorbis"');
344
+
345
+   // Need to keep the ogg source around for compat with old recordings
346
+   var oggsource = document.createElement("source");
347
+   oggsource.setAttribute('src', RECORDINGS + '/audio/audio.ogg');
348
+   oggsource.setAttribute('type', 'audio/ogg; codecs="vorbis"');
349
+
350
+   // Browser Bug Workaround: The ogg file should be preferred in Firefox,
351
+   // since it can't seek in audio-only webm files.
352
+   if (navigator.userAgent.indexOf("Firefox") != -1) {
353
+      audio.appendChild(oggsource);
354
+      audio.appendChild(webmsource);
355
+   } else {
356
+      audio.appendChild(webmsource);
357
+      audio.appendChild(oggsource);
358
+   }
359
+
360
+   audio.setAttribute('data-timeline-sources', SLIDES_XML);
361
+   //audio.setAttribute('controls','');
362
+   //leave auto play turned off for accessiblity support
363
+   //audio.setAttribute('autoplay','autoplay');
364
+   document.getElementById("audioRecordingWrapper").appendChild(audio);
365
+}
366
+
367
+load_script = function(file){
368
+  console.log("Loading script "+ file)
369
+  script = document.createElement('script');
370
+  script.src = file;
371
+  script.type = 'text/javascript';
372
+  document.getElementsByTagName('body').item(0).appendChild(script);
373
+}
374
+
375
+document.addEventListener( "DOMContentLoaded", function() {
376
+  var appName = navigator.appName;
377
+  var appVersion = navigator.appVersion;
378
+  //var video = document.getElementById("webcam");
379
+
380
+  if (appName == "Microsoft Internet Explorer" && navigator.userAgent.match("chromeframe") == false ) {
381
+    google_frame_warning
382
+  }
383
+
384
+  if (checkUrl(RECORDINGS + '/video/webcams.webm') == true){
385
+      videoContainer = document.getElementById("audioRecordingWrapper").style.display = "none";
386
+      load_video();
387
+  }else{
388
+      videoContainer = document.getElementById("videoRecordingWrapper").style.display = "none";       
389
+      chat = document.getElementById("chat");
390
+      chat.style.height = "600px";
391
+      chat.style.backgroundColor = "white";      
392
+      load_audio();
393
+  }
394
+  
395
+  //load_audio();
396
+  load_script("lib/writing.js");
397
+  //generateThumbnails();
398
+
399
+  //load up the acorn controls
400
+  jQuery('#video').acornMediaPlayer({
401
+    theme: 'darkglass',
402
+    volumeSlider: 'vertical'
403
+  });
404
+}, false);
405
+
406
+var secondsToWait = 0;
407
+
408
+function addTime(time){
409
+  if (secondsToWait === 0) {
410
+    Popcorn('#video').pause();
411
+    window.setTimeout("Tick()", 1000);
412
+  }
413
+  secondsToWait += time;
414
+}
415
+
416
+function Tick() {
417
+  if (secondsToWait <= 0 || !($("#accEnabled").is(':checked'))) {
418
+    secondsToWait = 0;
419
+    Popcorn('#video').play();
420
+    $('#countdown').html(""); // remove the timer
421
+    return;
422
+  }
423
+  
424
+  secondsToWait -= 1;
425
+  $('#countdown').html(secondsToWait);
426
+  window.setTimeout("Tick()", 1000);
427
+}

+ 222
- 0
data/presentation/0.9.0/acornmediaplayer/acornmediaplayer.base.css Vedi File

@@ -0,0 +1,222 @@
1
+/*
2
+ * Acorn Media Player - jQuery plugin 1.0
3
+ *
4
+ * Copyright (C) 2010 Cristian I. Colceriu
5
+ *
6
+ * Dual licensed under the MIT and GPL licenses:
7
+ *   http://www.opensource.org/licenses/mit-license.php
8
+ *   http://www.gnu.org/licenses/gpl.html
9
+ *
10
+ * www.ghinda.net
11
+ * contact@ghinda.net
12
+ *
13
+ * Base stylesheet
14
+ *
15
+ */
16
+
17
+/* Main elements */
18
+.acorn-player, .acorn-controls {
19
+	position: relative;
20
+}
21
+.acorn-timer {
22
+	cursor: default;
23
+}
24
+.acorn-buffer {
25
+	width: 0px;
26
+}
27
+/* <video> */
28
+.acorn-player video {
29
+	background-color: #000;
30
+}
31
+/* <audio> */
32
+.acorn-player.audio-player {
33
+	width: 500px;
34
+}
35
+.acorn-player.audio-player audio {
36
+	display: none;
37
+}
38
+/* Captions and Transcript */
39
+.acorn-transcript {	
40
+	clear: both;
41
+	display: none;
42
+	
43
+	overflow: auto;
44
+	height: 15em;
45
+}
46
+.acorn-transcript-button {
47
+	display: none;
48
+}
49
+/* 
50
+ * Show the timings in square brackets before each "subtitle" in the transcript.
51
+ * Borrowed and adapted from Bruce Lawson's “Accessible HTML5 Video with JavaScripted captions”
52
+ * http://dev.opera.com/articles/view/accessible-html5-video-with-javascripted-captions/
53
+ */
54
+.acorn-transcript span {
55
+	display: block;
56
+	float: left;
57
+	width: 100%;
58
+	line-height: 1.5em;
59
+	
60
+	-moz-border-radius: 5px;
61
+	-webkit-border-radius: 5px;
62
+	border-radius: 5px;
63
+}
64
+.acorn-transcript span:hover {
65
+	background-color: #cadde7 !important;
66
+	
67
+	font-weight: bold;
68
+}
69
+.acorn-transcript span:nth-of-type(even) {
70
+	background-color: #efefef;
71
+}
72
+.acorn-transcript [data-begin]:before {
73
+	display: block;
74
+	float: left;
75
+	content: " [" attr(data-begin) "s-" attr(data-end)"s]   ";
76
+	width: 15%;
77
+	padding: 0.2em 1.5em 0.2em 0.2em;	
78
+}
79
+.acorn-caption {
80
+	display: none;
81
+	position: absolute;
82
+	bottom: 75px;
83
+	width: 100%;
84
+	
85
+	text-align: center;
86
+}
87
+.acorn-caption-button {
88
+	display: none;
89
+}
90
+.acorn-caption-selector {
91
+	position: absolute;
92
+	display: none;
93
+	width: 170px;
94
+	padding: 5px;
95
+	height: 75px;
96
+	margin-bottom: 10px;
97
+	overflow: auto;
98
+	
99
+	background-color: #000;
100
+	border: 3px solid #fff;
101
+
102
+	z-index: 3;
103
+	
104
+	-moz-border-radius: 5px;
105
+	-webkit-border-radius: 5px;
106
+	border-radius: 5px;
107
+	
108
+	-moz-box-shadow: 0px 1px 5px #000;
109
+	-webkit-box-shadow: 0px 1px 5px #000;
110
+	box-shadow: 0px 1px 5px #000;
111
+}
112
+.acorn-caption-selector label {
113
+	display: block;
114
+	
115
+	font-weight: bold;
116
+	color: #fff;
117
+}
118
+.acorn-caption-selector ul, .acorn-caption-selector li {
119
+	list-style-type: none;
120
+	margin: 0px;
121
+	padding: 0px;
122
+}
123
+/* Fullscreen Mode */
124
+.fullscreen-video {
125
+	position: fixed !important;
126
+	top: 0px;
127
+	left: 0px;
128
+	z-index: 99999 !important;
129
+	
130
+	background-color: #000;
131
+}
132
+.acorn-controls.fullscreen-controls {
133
+	position: fixed !important;
134
+	z-index: 100000 !important;
135
+}
136
+/* Loading */
137
+.show-loading .loading-media {
138
+	visibility: visible;
139
+}
140
+
141
+.loading-media {
142
+	visibility: hidden;
143
+	position: absolute;
144
+	left: 25%;
145
+	top: 50%;
146
+	width: 20px;
147
+	height: 20px;
148
+	margin-top: -10px;
149
+	margin-lefT: -10px;
150
+	
151
+	background-color: #000;
152
+	border: 5px solid #fff;
153
+	border-top: 5px solid rgba(0,0,0,0);
154
+	border-left: 5px solid rgba(0,0,0,0);
155
+	border-radius: 20px;
156
+	
157
+	animation: spin 1s infinite linear;
158
+	-o-animation: spin 1s infinite linear;
159
+	-moz-animation: spin 1s infinite linear;
160
+	-webkit-animation: spin 1s infinite linear;
161
+}
162
+
163
+@-o-keyframes spin {
164
+	0% { -o-transform:rotate(0deg); }
165
+	100% { -o-transform:rotate(360deg); }
166
+}
167
+@-ms-keyframes spin {
168
+	0% { -ms-transform:rotate(0deg); }
169
+	100% { -ms-transform:rotate(360deg); }
170
+}
171
+@-moz-keyframes spin {
172
+	0% { -moz-transform:rotate(0deg); }
173
+	100% { -moz-transform:rotate(360deg); }
174
+}
175
+@-webkit-keyframes spin {
176
+	0% { -webkit-transform:rotate(0deg); }
177
+	100% { -webkit-transform:rotate(360deg); }
178
+}
179
+@keyframes spin {
180
+	0% { transform:rotate(0deg); }
181
+	100% { transform:rotate(360deg); }
182
+}
183
+
184
+/* Controls overlay while loading */
185
+.show-loading .acorn-controls:after {
186
+	content: '';
187
+	position: absolute;
188
+	top: -2px; /* Slider handle goes above */
189
+	padding-bottom: 2px;
190
+	left: 0;
191
+	z-index: 10;
192
+	width: 100%;
193
+	height: 100%;
194
+	
195
+	background: #000;
196
+	opacity: 0.9;
197
+}
198
+
199
+/* Styles needed for the jQuery UI slider
200
+ * We're declaring these so we don't have to use jQuery UI's stylesheet
201
+ */
202
+a.ui-slider-handle {
203
+	position: absolute;
204
+	display: block;
205
+	margin-left: -0.6em;
206
+	z-index: 2;
207
+	cursor: default;
208
+	outline: none;
209
+}
210
+.ui-slider {
211
+	position: relative;
212
+}
213
+.ui-slider-range {
214
+	position: absolute;
215
+	display: block;
216
+	width: 100%;
217
+	height: 100%;
218
+	left: 0;
219
+	bottom: 0;
220
+	border: none;
221
+	z-index: 1;
222
+}

+ 962
- 0
data/presentation/0.9.0/acornmediaplayer/jquery.acornmediaplayer.js Vedi File

@@ -0,0 +1,962 @@
1
+/*
2
+ * Acorn Media Player - jQuery plugin 1.6
3
+ *
4
+ * Copyright (C) 2012 Ionut Cristian Colceriu
5
+ *
6
+ * Dual licensed under the MIT and GPL licenses:
7
+ *   http://www.opensource.org/licenses/mit-license.php
8
+ *   http://www.gnu.org/licenses/gpl.html
9
+ *
10
+ * www.ghinda.net
11
+ * contact@ghinda.net
12
+ *
13
+ */
14
+ 
15
+(function($) {
16
+	$.fn.acornMediaPlayer = function(options) {
17
+		/*
18
+		 * Define default plugin options
19
+		 */
20
+		var defaults = {
21
+			theme: 'access',
22
+			nativeSliders: false,
23
+			volumeSlider: 'horizontal',
24
+			captionsOn: false
25
+		};
26
+		options = $.extend(defaults, options);
27
+		
28
+		/* 
29
+		 * Function for generating a unique identifier using the current date and time
30
+		 * Used for generating an ID for the media elmenet when none is available
31
+		 */
32
+		var uniqueID = function() {
33
+			var currentDate = new Date();
34
+			return currentDate.getTime();
35
+		};
36
+		
37
+		/* 
38
+		 * Detect support for localStorage
39
+		 */
40
+		function supports_local_storage() {
41
+			try {
42
+				return 'localStorage' in window && window.localStorage !== null;
43
+			} catch(e){
44
+				return false;
45
+			}
46
+		}
47
+		
48
+		/*
49
+		 * Get the volume value from localStorage
50
+		 * If no value is present, define as maximum
51
+		 */
52
+		var volume = (supports_local_storage) ? localStorage.getItem('acornvolume') : 1;
53
+		if(!volume) {
54
+			volume = 1;
55
+		}
56
+		
57
+		/* 
58
+		 * Main plugin function
59
+		 * It will be called on each element in the matched set
60
+		 */
61
+		var acornPlayer = function() {
62
+			// set the acorn object, will contain the needed DOM nodes and others
63
+			var acorn = {
64
+				$self: $(this)
65
+			};
66
+			
67
+			var loadedMetadata; // Is the metadata loaded
68
+			var seeking; // The user is seeking the media
69
+			var wasPlaying; // Media was playing when the seeking started
70
+			var fullscreenMode; // The media is in fullscreen mode
71
+			var captionsActive; // Captions are active
72
+			
73
+			/* Define all the texts used
74
+			 * This makes it easier to maintain, make translations, etc.
75
+			*/
76
+			var text = {
77
+				play: 'Play',
78
+				playTitle: 'Start the playback',
79
+				pause: 'Pause',
80
+				pauseTitle: 'Pause the playback',
81
+				mute: 'Mute',
82
+				unmute: 'Unmute',
83
+				fullscreen: 'Fullscreen',
84
+				fullscreenTitle: 'Toggle fullscreen mode',
85
+				swap: 'Swap',
86
+				swapTitle: 'Toggle video and presention swap',
87
+				volumeTitle: 'Volume control',
88
+				seekTitle: 'Video seek control',
89
+				captions: 'Captions',
90
+				captionsTitle: 'Show captions',
91
+				captionsChoose: 'Choose caption',
92
+				transcript: 'Transcript',
93
+				transcriptTitle: 'Show transcript'
94
+			};
95
+			
96
+			// main wrapper element
97
+			var $wrapper = $('<div class="acorn-player" role="application"></div>').addClass(options.theme);
98
+
99
+			/*
100
+			 * Define attribute tabindex on the main element to make it readchable by keyboard
101
+			 * Useful when "aria-describedby" is present
102
+			 *
103
+			 * It makes more sense for screen reader users to first reach the actual <video> or <audio> elment and read of description of it,
104
+			 * than directly reach the Media Player controls, without knowing what they control.
105
+			 */
106
+			acorn.$self.attr('tabindex', '0');		
107
+			
108
+			/*
109
+			 * Check if the main element has an ID attribute
110
+			 * If not present, generate one
111
+			 */
112
+			acorn.id = acorn.$self.attr('id');
113
+			if(!acorn.id) {
114
+				acorn.id = 'acorn' + uniqueID();
115
+				acorn.$self.attr('id', acorn.id);
116
+			}
117
+			
118
+			/* 
119
+			 * Markup for the fullscreen button
120
+			 * If the element is not <video> we leave if blank, as the button if useless on <audio> elements
121
+			 */
122
+			var fullscreenBtnMarkup = (acorn.$self.is('video')) ? '<button class="acorn-fullscreen-button" title="' + text.fullscreenTitle + '" aria-controls="' + acorn.id + '" tabindex="3">' + text.fullscreen + '</button>' : '';
123
+			
124
+			/* 
125
+			 * Markup for the swap button
126
+			 * If the element is not <video> we leave if blank, as the button if useless on <audio> elements
127
+			 */
128
+			var swapBtnMarkup = (acorn.$self.is('video')) ? '<button class="acorn-swap-button" title="' + text.swapTitle + '" aria-controls="' + acorn.id + '" tabindex="4" >' + text.swap + '</button>' : '';
129
+			
130
+
131
+			/*
132
+			 * Complete markup
133
+			 */
134
+			var template = '<div class="acorn-controls">' +
135
+								'<button class="acorn-play-button" title="' + text.playTitle + '" aria-controls="' + acorn.id + '" tabindex="1">' + text.play + '</button>' +
136
+								'<input type="range" class="acorn-seek-slider" title="' + text.seekTitle + '" value="0" min="0" max="150" step="0.1" aria-controls="' + acorn.id + '" tabindex="2" />' +
137
+								'<span class="acorn-timer">00:00</span>' +
138
+								'<div class="acorn-volume-box">' +
139
+									'<button class="acorn-volume-button" title="' + text.mute + '" aria-controls="' + acorn.id + '" tabindex="5" >' + text.mute + '</button>' +
140
+									'<input type="range" class="acorn-volume-slider" title="' + text.volumeTitle + '" value="1" min="0" max="1" step="0.05" aria-controls="' + acorn.id + '" tabindex="6" />' +
141
+								'</div>' +
142
+								swapBtnMarkup +
143
+								fullscreenBtnMarkup +
144
+								'<button class="acorn-caption-button" title="' + text.captionsTitle + '"  aria-controls="' + acorn.id + '">' + text.captions + '</button>' +
145
+								'<div class="acorn-caption-selector"></div>' +
146
+								'<button class="acorn-transcript-button" title="' + text.transcriptTitle + '">' + text.transcript + '</button>' +
147
+							'</div>';
148
+
149
+			var captionMarkup = '<div class="acorn-caption"></div>';
150
+			var transcriptMarkup = '<div class="acorn-transcript" role="region" aria-live="assertive"></div>';				
151
+			
152
+			/*
153
+			 * Append the HTML markup
154
+			 */
155
+			
156
+			// append the wrapper
157
+			acorn.$self.after($wrapper);
158
+			
159
+			// For iOS support, I have to clone the node, remove the original, and get a reference to the new one.
160
+			// This is because iOS doesn't want to play videos that have just been `moved around`.
161
+			// More details on the issue: http://bugs.jquery.com/ticket/8015
162
+			$wrapper[0].appendChild( acorn.$self[0].cloneNode(true) );
163
+			
164
+			acorn.$self.trigger('pause');
165
+			acorn.$self.remove();
166
+			acorn.$self = $wrapper.find('video, audio');
167
+			
168
+			// append the controls and loading mask
169
+			acorn.$self.after(template).after('<div class="loading-media"></div>');
170
+			
171
+			/*
172
+			 * Define the newly created DOM nodes
173
+			 */
174
+			acorn.$container = acorn.$self.parent('.acorn-player');
175
+			
176
+			acorn.$controls = $('.acorn-controls', acorn.$container);
177
+			acorn.$playBtn = $('.acorn-play-button', acorn.$container);
178
+			acorn.$seek = $('.acorn-seek-slider', acorn.$container);
179
+			acorn.$timer = $('.acorn-timer', acorn.$container);
180
+			acorn.$volume = $('.acorn-volume-slider', acorn.$container);
181
+			acorn.$volumeBtn = $('.acorn-volume-button', acorn.$container);
182
+			acorn.$fullscreenBtn = $('.acorn-fullscreen-button', acorn.$container);				
183
+			acorn.$swapBtn = $('.acorn-swap-button', acorn.$container);	
184
+			/*
185
+			 * Append the markup for the Captions and Transcript
186
+			 * and define newly created DOM nodes for these
187
+			 */
188
+			acorn.$controls.after(captionMarkup);
189
+			acorn.$container.after(transcriptMarkup);
190
+			
191
+			acorn.$transcript = acorn.$container.next('.acorn-transcript');
192
+			acorn.$transcriptBtn = $('.acorn-transcript-button', acorn.$container);
193
+		
194
+			acorn.$caption = $('.acorn-caption', acorn.$container);
195
+			acorn.$captionBtn = $('.acorn-caption-button', acorn.$container);
196
+			acorn.$captionSelector = $('.acorn-caption-selector', acorn.$container);
197
+			
198
+			/*
199
+			 * Use HTML5 "data-" attributes to set the original Width&Height for the <video>
200
+			 * These are used when returning from Fullscreen Mode
201
+			 */
202
+			acorn.$self.attr('data-width', acorn.$self.width());
203
+			acorn.$self.attr('data-height', acorn.$self.height());
204
+			
205
+			/*
206
+			 * Time formatting function
207
+			 * Takes the number of seconds as a parameter and return a readable format "minutes:seconds"
208
+			 * Used with the number of seconds returned by "currentTime"
209
+			 */
210
+			var timeFormat = function(sec) {
211
+				var m = Math.floor(sec/60)<10?"0" + Math.floor(sec/60):Math.floor(sec/60);
212
+				var s = Math.floor(sec-(m*60))<10?"0" + Math.floor(sec-(m*60)):Math.floor(sec-(m*60));
213
+				return m + ":" + s;
214
+			};
215
+			
216
+			/*
217
+			 * PLAY/PAUSE Behaviour			 
218
+			 *
219
+			 * Function for the Play button
220
+			 * It triggers the native Play or Pause events
221
+			 */
222
+			var playMedia = function() {
223
+				if(!acorn.$self.prop('paused')) {
224
+					acorn.$self.trigger('pause');
225
+				} else {
226
+					//acorn.$self.trigger('play');
227
+					acorn.$self[0].play();
228
+				}
229
+				
230
+				// We return false to stop the followup click event on tablets
231
+				return false; 
232
+			};
233
+			
234
+			/* 
235
+			 * Functions for native playback events (Play, Pause, Ended)
236
+			 * These are attached to the native media events.
237
+			 *
238
+			 * Even if the user is still using some form of native playback control (such as using the Context Menu)
239
+			 * it will not break the behviour of our player.
240
+			 */
241
+			var startPlayback = function() {
242
+				acorn.$playBtn.text(text.pause).attr('title', text.pauseTitle);
243
+				acorn.$playBtn.addClass('acorn-paused-button');
244
+
245
+				// if the metadata is not loaded yet, add the loading class
246
+				if (!loadedMetadata) $wrapper.addClass('show-loading');
247
+			};
248
+			
249
+			var stopPlayback = function() {
250
+				acorn.$playBtn.text(text.play).attr('title', text.playTitle);
251
+				acorn.$playBtn.removeClass('acorn-paused-button');
252
+			};
253
+			
254
+			/*
255
+			 * SEEK SLIDER Behaviour
256
+			 * 
257
+			 * Updates the Timer and Seek Slider values
258
+			 * Is called on each "timeupdate"
259
+			 */
260
+			var seekUpdate = function() {
261
+				var currenttime = acorn.$self.prop('currentTime');
262
+				acorn.$timer.text(timeFormat(currenttime));	
263
+				
264
+				// If the user is not manualy seeking
265
+				if(!seeking) {
266
+					// Check type of sliders (Range <input> or jQuery UI)
267
+					if(options.nativeSliders) {
268
+						acorn.$seek.attr('value', currenttime);
269
+					} else {
270
+						acorn.$seek.slider('value', currenttime);
271
+					}
272
+				}
273
+			};
274
+			
275
+			/*
276
+			 * Time formatting function
277
+			 * Takes the number of seconds as a paramenter
278
+			 * 
279
+			 * Used with "aria-valuetext" on the Seek Slider to provide a human readable time format to AT
280
+			 * Returns "X minutes Y seconds"
281
+			 */
282
+			var ariaTimeFormat = function(sec) {
283
+				var m = Math.floor(sec/60)<10?"" + Math.floor(sec/60):Math.floor(sec/60);
284
+				var s = Math.floor(sec-(m*60))<10?"" + Math.floor(sec-(m*60)):Math.floor(sec-(m*60));
285
+				var formatedTime;
286
+									
287
+				var mins = 'minutes';
288
+				var secs = 'seconds';
289
+				
290
+				if(m == 1) {
291
+					min = 'minute';
292
+				}
293
+				if(s == 1) {
294
+					sec = 'second';
295
+				}
296
+				
297
+				if(m === 0) {
298
+					formatedTime = s + ' ' + secs;
299
+				} else {						
300
+					formatedTime = m + ' ' + mins + ' ' + s + ' ' + secs;
301
+				}				
302
+				
303
+				return formatedTime;
304
+			};
305
+			
306
+			/* 
307
+			 * jQuery UI slider uses preventDefault when clicking any element
308
+			 * so it stops the Blur event from being fired.
309
+			 * This causes problems with the Caption Selector.
310
+			 * We trigger the Blur event manually.
311
+			 */
312
+			var blurCaptionBtn = function() {
313
+				acorn.$captionBtn.trigger('blur');				
314
+			};
315
+			
316
+			/*
317
+			 * Triggered when the user starts to seek manually
318
+			 * Pauses the media during seek and changes the "currentTime" to the slider's value
319
+			 */
320
+			var startSeek = function(e, ui) {					
321
+				if(!acorn.$self.attr('paused')) {
322
+					wasPlaying = true;
323
+				}
324
+				acorn.$self.trigger('pause');
325
+				seeking = true;
326
+				
327
+				var seekLocation;
328
+				if(options.nativeSliders) {
329
+					seekLocation = acorn.$seek.val();
330
+				} else {
331
+					seekLocation = ui.value;
332
+				}
333
+				
334
+				acorn.$self[0].currentTime = seekLocation;
335
+				
336
+				// manually blur the Caption Button
337
+				blurCaptionBtn();
338
+			};
339
+			
340
+			/*
341
+			 * Triggered when user stoped manual seek
342
+			 * If the media was playing when seek started, it triggeres the playback,
343
+			 * and updates ARIA attributes
344
+			 */
345
+			var endSeek = function(e, ui) {
346
+				if(wasPlaying) {
347
+					acorn.$self.trigger('play');
348
+					wasPlaying = false;
349
+				}
350
+				seeking = false;			
351
+				var sliderUI = $(ui.handle);
352
+				sliderUI.attr("aria-valuenow", parseInt(ui.value, 10));
353
+				sliderUI.attr("aria-valuetext", ariaTimeFormat(ui.value));
354
+			};
355
+			
356
+			/*
357
+			 * Transforms element into ARIA Slider adding attributes and "tabindex"
358
+			 * Used on jQuery UI sliders
359
+			 * 
360
+			 * Will not needed once the jQuery UI slider gets built-in ARIA 
361
+			 */ 
362
+			var initSliderAccess = function (elem, opts) {
363
+				var accessDefaults = {
364
+				 'role': 'slider',
365
+				 'aria-valuenow': parseInt(opts.value, 10),
366
+				 'aria-valuemin': parseInt(opts.min, 10),
367
+				 'aria-valuemax': parseInt(opts.max, 10),
368
+				 'aria-valuetext': opts.valuetext
369
+				};
370
+				elem.attr(accessDefaults);        
371
+			};
372
+			
373
+			/*
374
+			 * Init jQuery UI slider
375
+			 */
376
+			var initSeek = function() {
377
+				
378
+				// get existing classes
379
+				var seekClass = acorn.$seek.attr('class');
380
+				
381
+				// create the new markup
382
+				var	divSeek = '<div class="' + seekClass + '" title="' + text.seekTitle + '"></div>';
383
+				acorn.$seek.after(divSeek).remove();
384
+				
385
+				// get the newly created DOM node
386
+				acorn.$seek = $('.' + seekClass, acorn.$container);
387
+				
388
+				// create the buffer element
389
+				var bufferBar = '<div class="ui-slider-range acorn-buffer"></div>';
390
+				acorn.$seek.append(bufferBar);
391
+				
392
+				// get the buffer element DOM node
393
+				acorn.$buffer = $('.acorn-buffer', acorn.$container);					
394
+				
395
+				// set up the slider options for the jQuery UI slider
396
+				var sliderOptions = {
397
+					value: 0,
398
+					step: 1,
399
+					orientation: 'horizontal',
400
+					range: 'min',
401
+					min: 0,
402
+					max: 100
403
+				}; 
404
+				// init the jQuery UI slider
405
+				acorn.$seek.slider(sliderOptions);
406
+			
407
+			};
408
+			 
409
+			/*
410
+			 * Seek slider update, after metadata is loaded
411
+			 * Attach events, add the "duration" attribute and generate the jQuery UI Seek Slider
412
+			 */
413
+			var updateSeek = function() {
414
+				// Get the duration of the media
415
+				var duration = acorn.$self[0].duration;			
416
+				
417
+				// Check for the nativeSliders option
418
+				if(options.nativeSliders) {
419
+					acorn.$seek.attr('max', duration);
420
+					acorn.$seek.bind('change', startSeek);
421
+					
422
+					acorn.$seek.bind('mousedown', startSeek);						
423
+					acorn.$seek.bind('mouseup', endSeek);
424
+					
425
+				} else {
426
+					
427
+					// set up the slider options for the jQuery UI slider
428
+					var sliderOptions = {
429
+						value: 0,
430
+						step: 1,
431
+						orientation: 'horizontal',
432
+						range: 'min',
433
+						min: 0,
434
+						max: duration,
435
+						slide: startSeek,
436
+						stop: endSeek
437
+					}; 
438
+					// init the jQuery UI slider
439
+					acorn.$seek.slider('option', sliderOptions);
440
+					
441
+					// add valuetext value to the slider options for better ARIA values
442
+					sliderOptions.valuetext = ariaTimeFormat(sliderOptions.value);
443
+					// accessify the slider
444
+					initSliderAccess(acorn.$seek.find('.ui-slider-handle'), sliderOptions);
445
+					
446
+					// manully blur the Caption Button when clicking the handle
447
+					$('.ui-slider-handle', acorn.$seek).click(blurCaptionBtn);
448
+					
449
+					// set the tab index
450
+					$('.ui-slider-handle', acorn.$seek).attr("tabindex", "2");
451
+
452
+					// show buffering progress on progress
453
+					acorn.$self.bind('progress', showBuffer);
454
+				}
455
+				
456
+
457
+				$wrapper.removeClass('show-loading');
458
+				// remove the loading element
459
+				//acorn.$self.next('.loading-media').remove();
460
+				
461
+			};
462
+			
463
+			/*
464
+			 * Show buffering progress
465
+			 */
466
+			var showBuffer = function(e) {
467
+				var max = parseInt(acorn.$self.prop('duration'), 10);
468
+				var tr = this.buffered;
469
+				if(tr && tr.length) {
470
+					var buffer = parseInt(this.buffered.end(0)-this.buffered.start(0), 10);
471
+					var bufferWidth = (buffer*100)/max;
472
+					
473
+					acorn.$buffer.css('width', bufferWidth + '%');
474
+				}				
475
+			};
476
+			
477
+			/*
478
+			 * VOLUME BUTTON and SLIDER Behaviour
479
+			 *
480
+			 * Change volume using the Volume Slider
481
+			 * Also update ARIA attributes and set the volume value as a localStorage item
482
+			 */
483
+			var changeVolume = function(e, ui) {
484
+				// get the slider value
485
+				volume = ui.value;
486
+				// set the value as a localStorage item
487
+				localStorage.setItem('acornvolume', volume);
488
+				
489
+				// check if the volume was muted before
490
+				if(acorn.$self.prop('muted')) {
491
+					acorn.$self.prop('muted', false);
492
+					acorn.$volumeBtn.removeClass('acorn-volume-mute');
493
+					acorn.$volumeBtn.text(text.mute).attr('title', text.mute);
494
+				}
495
+				
496
+				// set the new volume on the media
497
+				acorn.$self.prop('volume', volume);
498
+				
499
+				// set the ARIA attributes
500
+				acorn.$volume.$handle.attr("aria-valuenow", Math.round(volume*100));
501
+				acorn.$volume.$handle.attr("aria-valuetext", Math.round(volume*100) + ' percent');
502
+				// manually trigger the Blur event on the Caption Button
503
+				blurCaptionBtn();
504
+			};
505
+			
506
+			/*
507
+			 * Mute and Unmute volume
508
+			 * Also add classes and change label on the Volume Button
509
+			 */
510
+			var muteVolume = function() {					
511
+				if(acorn.$self.prop('muted') === true) {						
512
+					acorn.$self.prop('muted', false);
513
+					if(options.nativeSliders) {
514
+						acorn.$volume.val(volume);
515
+					} else {
516
+						acorn.$volume.slider('value', volume);
517
+					}
518
+					
519
+					acorn.$volumeBtn.removeClass('acorn-volume-mute');
520
+					acorn.$volumeBtn.text(text.mute).attr('title', text.mute);
521
+				} else {
522
+					acorn.$self.prop('muted', true);
523
+					
524
+					if(options.nativeSliders) {
525
+						acorn.$volume.val('0');
526
+					} else {
527
+						acorn.$volume.slider('value', '0');
528
+					}
529
+					
530
+					acorn.$volumeBtn.addClass('acorn-volume-mute');
531
+					acorn.$volumeBtn.text(text.unmute).attr('title', text.unmute);
532
+				}
533
+			};
534
+			
535
+			/*
536
+			 * Init the Volume Button and Slider
537
+			 *
538
+			 * Attach events, create the jQuery UI Slider for the Volume Slider and add ARIA support
539
+			 */
540
+			var initVolume = function() {
541
+				if(options.nativeSliders) {
542
+					acorn.$volume.bind('change', function() {
543
+						acorn.$self.prop('muted',false);
544
+						volume = acorn.$volume.val();
545
+						acorn.$self.prop('volume', volume);
546
+					});
547
+				} else {
548
+					var volumeClass = acorn.$volume.attr('class');
549
+				
550
+					var	divVolume = '<div class="' + volumeClass + '" title="' + text.volumeTitle + '"></div>';
551
+					acorn.$volume.after(divVolume).remove();
552
+					
553
+					acorn.$volume = $('.' + volumeClass, acorn.$container);
554
+					
555
+					var volumeSliderOptions = {
556
+						value: volume,
557
+						orientation: options.volumeSlider,
558
+						range: "min",
559
+						max: 1,
560
+						min: 0,
561
+						step: 0.1,
562
+						animate: false,
563
+						slide: changeVolume
564
+					};
565
+					
566
+					acorn.$volume.slider(volumeSliderOptions);
567
+					
568
+					acorn.$volume.$handle = acorn.$volume.find('.ui-slider-handle');
569
+					
570
+					// change and add values to volumeSliderOptions for better values in the ARIA attributes
571
+					volumeSliderOptions.max = 100;
572
+					volumeSliderOptions.value = volumeSliderOptions.value * 100;
573
+					volumeSliderOptions.valuetext = volumeSliderOptions.value + ' percent';
574
+					initSliderAccess(acorn.$volume.$handle, volumeSliderOptions);
575
+					acorn.$volume.$handle.attr("tabindex", "6");
576
+					
577
+					// show the volume slider when it is tabbed into
578
+					acorn.$volume.$handle.focus(function(){
579
+						if (!acorn.$volume.parent().is(":hover")) {
580
+							acorn.$volume.addClass("handle-focused");
581
+						}
582
+					});
583
+					acorn.$volume.$handle.blur(function(){
584
+						acorn.$volume.removeClass("handle-focused");
585
+					});
586
+					// manully blur the Caption Button when clicking the handle
587
+					$('.ui-slider-handle', acorn.$volume).click(blurCaptionBtn);
588
+				}
589
+				
590
+				acorn.$volumeBtn.click(muteVolume);
591
+			};
592
+			
593
+			/*
594
+			 * FULLSCREEN Behviour
595
+			 * 
596
+			 * Resize the video while in Fullscreen Mode
597
+			 * Attached to window.resize 
598
+			 */
599
+			var resizeFullscreenVideo = function() {
600
+				acorn.$self.attr({
601
+					'width': $(window).width(),
602
+					'height': $(window).height()
603
+				});
604
+			};
605
+			
606
+			/* 
607
+			 * Enter and exit Fullscreen Mode
608
+			 * 
609
+			 * Resizes the Width & Height of the <video> element
610
+			 * and add classes to the controls and wrapper
611
+			 */
612
+			var goFullscreen = function() {
613
+				if(fullscreenMode) {
614
+					if(acorn.$self[0].webkitSupportsFullscreen) {
615
+						acorn.$self[0].webkitExitFullScreen();
616
+					} else {
617
+						$('body').css('overflow', 'auto');
618
+					
619
+						var w = acorn.$self.attr('data-width');
620
+						var h = acorn.$self.attr('data-height');
621
+					
622
+						acorn.$self.removeClass('fullscreen-video').attr({
623
+							'width': w,
624
+							'height': h
625
+						});
626
+						
627
+						$(window).unbind('resize');
628
+						
629
+						acorn.$controls.removeClass('fullscreen-controls');
630
+					}
631
+					
632
+					fullscreenMode = false;
633
+					
634
+				} else {						
635
+					if(acorn.$self[0].webkitSupportsFullscreen) {
636
+						acorn.$self[0].webkitEnterFullScreen();
637
+					} else if (acorn.$self[0].mozRequestFullScreen) {
638
+						acorn.$self[0].mozRequestFullScreen();
639
+						acorn.$self.attr('controls', 'controls');
640
+						document.addEventListener('mozfullscreenchange', function() {
641
+							console.log('screenchange event found');
642
+							if (!document.mozFullScreenElement) {
643
+								acorn.$self.removeAttr('controls');
644
+								//document.removeEventListener('mozfullscreenchange');
645
+							}
646
+						});
647
+					} else {
648
+						$('body').css('overflow', 'hidden');
649
+					
650
+						acorn.$self.addClass('fullscreen-video').attr({
651
+							width: $(window).width(),
652
+							height: $(window).height()
653
+						});
654
+						
655
+						$(window).resize(resizeFullscreenVideo);
656
+						
657
+						acorn.$controls.addClass('fullscreen-controls');
658
+					}
659
+					
660
+					fullscreenMode = true;
661
+					
662
+				}
663
+			};	
664
+			
665
+			/* 
666
+			 * Swap the video and presentation areas
667
+			 * 
668
+			 * Resizes and moves based on hard coded numbers
669
+			 * Uses css to move it 
670
+			 */
671
+
672
+			var goSwap = function() {
673
+                                acorn.$self.trigger('swap');
674
+			}
675
+
676
+			/* 
677
+			 * CAPTIONS Behaviour
678
+			 *		
679
+			 * Turning off the captions
680
+			 * When selecting "None" from the Caption Selector or when the caption fails to load
681
+			 */			
682
+			var captionBtnActiveClass = 'acorn-caption-active';
683
+			var captionBtnLoadingClass = 'acorn-caption-loading';
684
+			var transcriptBtnActiveClass = 'acorn-transcript-active';
685
+			
686
+			var captionRadioName = 'acornCaptions' + uniqueID();
687
+			 
688
+			var captionOff = function() {
689
+				for (var i = 0; i < acorn.$track.length; i++) {
690
+					var track = acorn.$track[i];
691
+					track.track.mode = "disabled";
692
+				}
693
+				
694
+				acorn.$captionBtn.removeClass(captionBtnActiveClass);
695
+			};
696
+			
697
+			/*
698
+			 * Initialize the Caption Selector
699
+			 * Used when multiple <track>s are present
700
+			 */
701
+			var initCaptionSelector = function() {
702
+				// calculate the position relative to the parent controls element
703
+				var setUpCaptionSelector = function() {
704
+					var pos = acorn.$captionBtn.offset();
705
+					var top = pos.top - acorn.$captionSelector.outerHeight(true);
706
+					var left = pos.left - ((acorn.$captionSelector.outerWidth(true) - acorn.$captionBtn.outerWidth(true))/2);
707
+					
708
+					var parentPos = acorn.$controls.offset();
709
+					
710
+					left = left - parentPos.left;
711
+					top = top - parentPos.top;
712
+					
713
+					acorn.$captionSelector.css({
714
+							'top': top,
715
+							'left': left
716
+						});
717
+				};
718
+				
719
+				acorn.$fullscreenBtn.click(setUpCaptionSelector);
720
+				$(window).resize(function() {
721
+					setUpCaptionSelector();		
722
+				});
723
+				
724
+				setUpCaptionSelector();
725
+				
726
+				/*
727
+				 * Show and hide the caption selector based on focus rather than hover.
728
+				 * This benefits both touchscreen and AT users.
729
+				 */
730
+				var hideSelector; // timeout for hiding the Caption Selector				
731
+				var showCaptionSelector = function() {
732
+					if(hideSelector) {
733
+						clearTimeout(hideSelector);
734
+					}
735
+					acorn.$captionSelector.show();
736
+				};
737
+				var hideCaptionSelector = function() {
738
+					hideSelector = setTimeout(function() {
739
+						acorn.$captionSelector.hide();						
740
+					}, 200);
741
+				};
742
+				
743
+				/* Little TEMPORARY hack to focus the caption button on click
744
+				   This is because Webkit does not focus the button on click */
745
+				acorn.$captionBtn.click(function() {
746
+					$(this).focus();
747
+				});
748
+				
749
+				acorn.$captionBtn.bind('focus', showCaptionSelector);
750
+				acorn.$captionBtn.bind('blur', hideCaptionSelector);
751
+				
752
+				$('input[name=' + captionRadioName + ']', acorn.$container).bind('focus', showCaptionSelector);
753
+				$('input[name=' + captionRadioName + ']', acorn.$container).bind('blur', hideCaptionSelector);
754
+				
755
+				/*
756
+				 * Make the Caption Selector focusable and attach events to it
757
+				 * If we wouldn't do this, when we'd use the scroll on the Caption Selector, it would dissapear
758
+				 */
759
+				acorn.$captionSelector.attr('tabindex', '-1');
760
+				acorn.$captionSelector.bind('focus', showCaptionSelector);
761
+				acorn.$captionSelector.bind('blur', hideCaptionSelector);
762
+			};
763
+			
764
+			/*
765
+			 * Current caption loader
766
+			 * Loads a SRT file and uses it as captions
767
+			 * Takes the url as a parameter
768
+			 */
769
+			var loadCaption = function(url) {
770
+				// Iterate through the available captions, and disable all but the selected one
771
+				for (var i = 0; i < acorn.$track.length; i++) {
772
+					var track = acorn.$track[i];
773
+					if (track.getAttribute('src') == url) {
774
+						track.track.mode = "showing";
775
+
776
+						// TODO transcript markup?
777
+						// show the Transcript Button						
778
+						//acorn.$transcriptBtn.show();
779
+						
780
+						/* 
781
+						 * Generate the markup for the transcript
782
+						 * Markup based on Bruce Lawson's “Accessible HTML5 Video with JavaScripted captions”
783
+						 * http://dev.opera.com/articles/view/accessible-html5-video-with-javascripted-captions/
784
+						 */
785
+						//var transcriptText = '';
786
+						//$(captions).each(function() {
787
+						//	transcriptText += '<span data-begin="' + parseInt(this.start, 10) + '" data-end=' + parseInt(this.end, 10) + '>' + this.content.replace("'","") + '</span>';
788
+						//});
789
+						// append the generated markup
790
+						//acorn.$transcript.html(transcriptText);
791
+					} else {
792
+						track.track.mode = "disabled";
793
+					}
794
+				}
795
+				captionsActive = true;
796
+				acorn.$captionBtn.addClass(captionBtnActiveClass);
797
+			};
798
+			
799
+			/*			 
800
+			 * Show or hide the Transcript based on the presence of the active class
801
+			 */
802
+			var showTranscript = function() {
803
+				if($(this).hasClass(transcriptBtnActiveClass)) {
804
+					acorn.$transcript.hide();						
805
+				} else {
806
+					acorn.$transcript.show();
807
+				}
808
+				$(this).toggleClass(transcriptBtnActiveClass);
809
+			};
810
+
811
+			/*
812
+			 * Caption loading and initialization
813
+			 */
814
+			var initCaption = function() {
815
+				// Check if we have browser support for captions
816
+				if (typeof(TextTrack) === "undefined") {
817
+					return;
818
+				}
819
+
820
+				// get all <track> elements
821
+				acorn.$track = $('track', acorn.$self);
822
+				
823
+				// if there is at least one <track> element, show the Caption Button
824
+				if(acorn.$track.length) {
825
+					acorn.$captionBtn.show();
826
+				}
827
+				
828
+				// check if there is more than one <track> element
829
+				// if there is more than one track element we'll create the Caption Selector
830
+				if(acorn.$track.length>1) {
831
+					// set a different "title" attribute
832
+					acorn.$captionBtn.attr('title', text.captionsChoose);
833
+					
834
+					// markup for the Caption Selector
835
+					var captionList = '<ul><li><label><input type="radio" name="' + captionRadioName + '" checked="true" />None</label></li>';					
836
+					acorn.$track.each(function() {
837
+						var tracksrc = $(this).attr('src');
838
+						captionList += '<li><label><input type="radio" name="' + captionRadioName + '" data-url="' + $(this).attr('src') + '" />' + $(this).attr('label') + '</label></li>';
839
+					});
840
+					captionList += '</ul>';
841
+					
842
+					// append the generated markup
843
+					acorn.$captionSelector.html(captionList);
844
+					
845
+					// change selected caption
846
+					var changeCaption = function() {
847
+						// get the original <track> "src" attribute from the custom "data-url" attribute of the radio input
848
+						var tracksrc = $(this).attr('data-url');
849
+						if(tracksrc) {
850
+							loadCaption(tracksrc);						
851
+						} else {
852
+							// if there's not "data-url" attribute, turn off the caption
853
+							captionOff();
854
+						}
855
+					};
856
+					
857
+					// attach event handler
858
+					$('input[name=' + captionRadioName + ']', acorn.$container).change(changeCaption);
859
+				
860
+					// initialize Caption Selector
861
+					initCaptionSelector();
862
+					
863
+					// load first caption if captionsOn is true
864
+					var firstCaption = acorn.$track.first().attr('src');
865
+					if(options.captionsOn) {
866
+						loadCaption(firstCaption);
867
+						$('input[name=' + captionRadioName + ']', acorn.$container).removeAttr('checked');
868
+						$('input[name=' + captionRadioName + ']:eq(1)', acorn.$container).attr('checked', 'true');
869
+					};
870
+				} else if(acorn.$track.length) {
871
+					// if there's only one <track> element
872
+					// load the specific caption when activating the Caption Button
873
+					var tracksrc = acorn.$track.attr('src');
874
+					
875
+					acorn.$captionBtn.bind('click', function() {		
876
+						if($(this).hasClass(captionBtnActiveClass)) {
877
+							captionOff();
878
+						} else {
879
+							loadCaption(tracksrc);
880
+						}
881
+					});
882
+
883
+					// load default caption if captionsOn is true
884
+					if(options.captionsOn) loadCaption(tracksrc);					
885
+				}
886
+				
887
+				// attach event to Transcript Button
888
+				acorn.$transcriptBtn.bind('click', showTranscript);
889
+			};
890
+			
891
+			/*
892
+			 * Initialization self-invoking function
893
+			 * Runs other initialization functions, attaches events, removes native controls
894
+			 */
895
+			var init = function() {
896
+				// attach playback handlers
897
+				acorn.$playBtn.bind( 'touchstart click', playMedia);
898
+				acorn.$self.bind( 'touchstart click' , playMedia);
899
+
900
+				acorn.$self.bind('play', startPlayback);
901
+				acorn.$self.bind('pause', stopPlayback);
902
+				acorn.$self.bind('ended', stopPlayback);
903
+				
904
+				// update the Seek Slider when timeupdate is triggered
905
+				acorn.$self.bind('timeupdate', seekUpdate);
906
+				
907
+				// bind Fullscreen Button
908
+				acorn.$fullscreenBtn.click(goFullscreen);
909
+				
910
+				// bind Swap Button
911
+				acorn.$swapBtn.click(goSwap);
912
+
913
+				// initialize volume controls
914
+				initVolume();				
915
+				
916
+				// add the loading class
917
+				$wrapper.addClass('');
918
+				
919
+				if(!options.nativeSliders) initSeek();
920
+				
921
+				// once the metadata has loaded
922
+				acorn.$self.bind('loadedmetadata', function() {
923
+					/* I use an interval to make sure the video has the right readyState
924
+					 * to bypass a known webkit bug that causes loadedmetadata to be triggered
925
+					 * before the duration is available
926
+					 */
927
+
928
+					var t = window.setInterval(function() {
929
+								if (acorn.$self[0].readyState > 0) {
930
+									loadedMetadata = true;
931
+									updateSeek();
932
+									
933
+									clearInterval(t);
934
+								}
935
+							}, 500);
936
+					
937
+					initCaption();					
938
+				});
939
+			
940
+				// trigger update seek manualy for the first time, for iOS support
941
+				updateSeek();
942
+				
943
+				// remove the native controls
944
+				acorn.$self.removeAttr('controls');
945
+				
946
+				if(acorn.$self.is('audio')) {
947
+					/*
948
+					 * If the media is <audio>, we're adding the 'audio-player' class to the element.
949
+					 * This is because Opera 10.62 does not allow the <audio> element to be targeted by CSS
950
+					 * and this can cause problems with themeing.
951
+					 */
952
+					acorn.$container.addClass('audio-player');
953
+				}
954
+			}();
955
+		
956
+		};
957
+		
958
+		// iterate and reformat each matched element
959
+		return this.each(acornPlayer);
960
+	};
961
+
962
+})(jQuery);

BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-captions-dark.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-captions.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-exit-fullscreen-dark.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-exit-fullscreen.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-fullscreen-dark.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-fullscreen.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-pause-dark.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-pause.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-play-dark.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-play.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-transcript-dark.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-transcript.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-volume-dark.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-volume-full-dark.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-volume-full.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/access-volume.png Vedi File


+ 314
- 0
data/presentation/0.9.0/acornmediaplayer/themes/access/acorn.access.css Vedi File

@@ -0,0 +1,314 @@
1
+/*
2
+ * acccess - Accessible Theme for Acorn Media Player
3
+ * accesslight - Child theme of access
4
+ *
5
+ * To be used with the horizontal volume slider.
6
+ *
7
+ * Copyright (C) 2010 Cristian I. Colceriu
8
+ *
9
+ * Dual licensed under the MIT and GPL licenses:
10
+ *   http://www.opensource.org/licenses/mit-license.php
11
+ *   http://www.gnu.org/licenses/gpl.html
12
+ *
13
+ * www.ghinda.net
14
+ * contact@ghinda.net
15
+ *
16
+ */
17
+ 
18
+/* Start of access theme */
19
+.acorn-player.access {
20
+	float: left;
21
+	position: relative;
22
+	overflow: hidden;
23
+	
24
+	font-family: Arial, Helvetica, sans-serif;
25
+}
26
+/* <video> element */
27
+.acorn-player.access video {
28
+	float: left;
29
+	clear: both;
30
+	background-color: #000;
31
+}
32
+/* Player Controls */
33
+.acorn-player.access .acorn-controls {
34
+	position: relative;	
35
+	float: left;
36
+	clear: both;
37
+	width: 100%;
38
+	padding-top: 15px;
39
+		
40
+	background-image: url(controls-background-dark.png);
41
+	background-position: bottom left;
42
+}
43
+/* <button>s */
44
+.acorn-player.access button {
45
+	position: relative;	
46
+	margin: 0;
47
+	padding-left: 25px;
48
+	height: 35px;
49
+	border: 1px solid #333;
50
+	background-color: #3F3F3F;
51
+	background-position: 5px center, top left;
52
+	background-repeat: no-repeat, repeat-x;	
53
+	
54
+	font-weight: bold;
55
+	color: #fff;
56
+	text-shadow: 0px -1px 1px #000;
57
+	
58
+	cursor: pointer;
59
+}
60
+.acorn-player.access button:hover, .acorn-player.access button:focus {
61
+	background-color: #044293;
62
+	background-position: 5px center, left -33px;
63
+}
64
+.acorn-player.access button:active {
65
+	top: 1px;	
66
+	box-shadow: inset 1px 1px 10px #000;
67
+}
68
+/* Playback Controls(Play, Pause) */
69
+.acorn-player.access .acorn-play-button {
70
+	float: left;
71
+	display: block;
72
+	width: 75px;
73
+	background-image: url(access-play.png), url(button-background-dark.png);
74
+}
75
+.acorn-player.access .acorn-paused-button {
76
+	background-image: url(access-pause.png), url(button-background-dark.png);
77
+}
78
+/* Seek Slider */
79
+.acorn-player.access .acorn-seek-slider {
80
+	position:absolute;
81
+	top: 0px;
82
+	display: block;
83
+	width: 100%;
84
+	height: 15px;
85
+		
86
+	background: #7289A8;
87
+	z-index: 2;
88
+}
89
+.acorn-player.access .acorn-seek-slider .ui-slider-handle {
90
+	display: block;
91
+	position: absolute;
92
+	width: 13px;
93
+	height: 13px;
94
+	border: 3px solid #fff;
95
+	top: -2px;
96
+
97
+	-moz-border-radius: 10px;
98
+	-webkit-border-radius: 10px;
99
+	border-radius: 10px;
100
+	
101
+	-moz-box-shadow: 0px 2px 8px #000;
102
+	-webkit-box-shadow: 0px 2px 8px #000;
103
+	box-shadow: 0px 2px 8px #000;
104
+	
105
+	background: #888;
106
+}
107
+.acorn-player.access .acorn-seek-slider .ui-slider-range {	
108
+	background: #0750B2;	
109
+}
110
+.acorn-player.access .acorn-buffer {	
111
+	background: #8E9DAF !important;	
112
+}
113
+.acorn-player.access .acorn-seek-slider .ui-state-focus, .acorn-player.access .acorn-seek-slider .ui-slider-handle.ui-state-hover {
114
+	background: #0750B2 !important;
115
+	
116
+	-moz-box-shadow: 0px 2px 15px #000;
117
+	-webkit-box-shadow: 0px 2px 15px #000;
118
+	box-shadow: 0px 2px 15px #000;
119
+}
120
+/* Timer */
121
+.acorn-player.access .acorn-timer {
122
+	position: absolute;
123
+	top: 25px;
124
+	left: 260px;
125
+	
126
+	color: #efefef;
127
+	font-size: 14px;
128
+	font-weight: bold;
129
+	text-shadow: 0px -1px 2px #000;
130
+}
131
+/* Volume Container */
132
+.acorn-player.access .acorn-volume-box {
133
+	float: left;
134
+	overflow: hidden;
135
+	padding-right: 10px;
136
+	
137
+	-moz-box-shadow: 2px 0px 5px #111;
138
+	-webkit-box-shadow: 2px 0px 5px #111;
139
+	box-shadow: 2px 0px 5px #111;
140
+}
141
+/* Volume Button */
142
+.acorn-player.access .acorn-volume-button {
143
+	float: left;
144
+	width: 85px;
145
+	border-left: none;
146
+	background-image: url(access-volume-full.png), url(button-background-dark.png);
147
+	
148
+	-moz-box-shadow: 2px 0px 5px #111;
149
+	-webkit-box-shadow: 2px 0px 5px #111;
150
+	box-shadow: 2px 0px 5px #111;
151
+}
152
+.acorn-player.access .acorn-volume-mute {
153
+	background-image: url(access-volume.png), url(button-background-dark.png);
154
+}
155
+/* Volume Slider */
156
+.acorn-player.access .acorn-volume-slider {
157
+	float: left;
158
+	height: 5px;
159
+	width: 70px;
160
+	margin-left: 10px;
161
+	margin-top: 15px;		
162
+	border: 1px solid #333;	
163
+	
164
+	background: #111;
165
+	
166
+	-moz-box-shadow: 0px 1px 1px #777;
167
+	-webkit-box-shadow: 0px 1px 1px #777;
168
+	box-shadow: 0px 1px 1px #777;
169
+}
170
+.acorn-player.access .acorn-volume-slider .ui-slider-handle {
171
+	width: 5px;
172
+	height: 15px;	
173
+	margin-top: -5px;
174
+	margin-left: -5px;
175
+	
176
+	border: 1px solid #333;
177
+	background: #BCBCBC;
178
+		
179
+	-moz-box-shadow: 0px 0px 5px #000;
180
+	-webkit-box-shadow: 0px 0px 5px #000;
181
+	box-shadow: 0px 0px 5px #000;
182
+}
183
+.acorn-player.access .acorn-volume-slider .ui-slider-handle.ui-state-hover, .acorn-player.access .acorn-volume-slider .ui-slider-handle.ui-state-focus {
184
+	background: #fff !important;
185
+}
186
+.acorn-player.access .acorn-volume-slider .ui-slider-range {	
187
+	background: #636F7C;
188
+}
189
+/* Fullscreen Button */
190
+.acorn-player.access .acorn-fullscreen-button {
191
+	float: right;
192
+	background-image: url(access-fullscreen.png), url(button-background-dark.png);
193
+	
194
+	-moz-box-shadow: -2px 0px 5px #111;
195
+	-webkit-box-shadow: -2px 0px 5px #111;
196
+	box-shadow: -2px 0px 5px #111;
197
+}
198
+/* Fullscreen Mode */
199
+.acorn-player.access .fullscreen-controls {	
200
+	left: 0px;
201
+	bottom: 0px;
202
+}
203
+.acorn-player.access .fullscreen-controls .acorn-fullscreen-button {
204
+	background-image: url(access-exit-fullscreen.png), url(button-background-dark.png);
205
+}
206
+/* Caption Button */
207
+.acorn-player.access .acorn-caption-button {
208
+	float: right;
209
+	border-right: none;
210
+	background-image: url(access-captions.png), url(button-background-dark.png);
211
+	
212
+	-moz-box-shadow: -2px 0px 5px #111;
213
+	-webkit-box-shadow: -2px 0px 5px #111;
214
+	box-shadow: -2px 0px 5px #111;
215
+}
216
+.acorn-player.access .acorn-caption {
217
+	font-size: 14px;
218
+	font-weight: bold;
219
+	color: #fff;
220
+	
221
+	text-shadow: 0px 1px 5px #000;
222
+}
223
+/* Transcript */
224
+.acorn-player.access .acorn-transcript-button {
225
+	float: right;
226
+	border-right: none;
227
+	background-image: url(access-transcript.png), url(button-background-dark.png);
228
+	
229
+	-moz-box-shadow: -2px 0px 5px #111;
230
+	-webkit-box-shadow: -2px 0px 5px #111;
231
+	box-shadow: -2px 0px 5px #111;
232
+}
233
+.acorn-player.access .acorn-caption-active, .acorn-player.access .acorn-transcript-active {
234
+	background-position: 5px center, left bottom;
235
+}
236
+/* 
237
+ * acesslight Child Theme
238
+ */
239
+.acorn-player.access.accesslight .acorn-controls {
240
+	background-image: url(controls-background-light.png);
241
+}
242
+/* <button>s */
243
+.acorn-player.access.accesslight button {
244
+	border: 1px solid #bdbdbd;
245
+		
246
+	color: #333;
247
+	text-shadow: 0px 1px 0px #fff;
248
+}
249
+/* Playback Controls(Play, Pause) */
250
+.acorn-player.access.accesslight .acorn-play-button {
251
+	background-image: url(access-play-dark.png), url(button-background-light.png);
252
+}
253
+.acorn-player.access.accesslight .acorn-paused-button {
254
+	background-image: url(access-pause-dark.png), url(button-background-light.png);
255
+}
256
+/* Volume Button */
257
+.acorn-player.access.accesslight .acorn-volume-button {
258
+	background-image: url(access-volume-full-dark.png), url(button-background-light.png);
259
+	
260
+	-moz-box-shadow: 2px 0px 5px #8c8c8c;
261
+	-webkit-box-shadow: 2px 0px 5px #8c8c8c;
262
+	box-shadow: 2px 0px 5px #8c8c8c;
263
+}
264
+.acorn-player.access.accesslight .acorn-volume-mute {
265
+	background-image: url(access-volume-dark.png), url(button-background-light.png);
266
+}
267
+/* Caption Buttton */
268
+.acorn-player.access.accesslight .acorn-caption-button {
269
+	background-image: url(access-captions-dark.png), url(button-background-light.png);
270
+	
271
+	-moz-box-shadow: -2px 0px 5px #8c8c8c;
272
+	-webkit-box-shadow: -2px 0px 5px #8c8c8c;
273
+	box-shadow: -2px 0px 5px #8c8c8c;
274
+}
275
+/* Transcript */
276
+.acorn-player.access.accesslight .acorn-transcript-button {
277
+	background-image: url(access-transcript-dark.png), url(button-background-light.png);
278
+	
279
+	-moz-box-shadow: -2px 0px 5px #8c8c8c;
280
+	-webkit-box-shadow: -2px 0px 5px #8c8c8c;
281
+	box-shadow: -2px 0px 5px #8c8c8c;
282
+}
283
+.acorn-player.access.accesslight .acorn-caption-active, .acorn-player.access.accesslight .acorn-transcript-active {
284
+	color: #000;
285
+	text-shadow: none;
286
+}
287
+/* Fullscreen Button */
288
+.acorn-player.access.accesslight .acorn-fullscreen-button {	
289
+	background-image: url(access-fullscreen-dark.png), url(button-background-light.png);
290
+	
291
+	-moz-box-shadow: -2px 0px 5px #8c8c8c;
292
+	-webkit-box-shadow: -2px 0px 5px #8c8c8c;
293
+	box-shadow: -2px 0px 5px #8c8c8c;
294
+}
295
+/* Volume Container */
296
+.acorn-player.access.accesslight .acorn-volume-box {
297
+	-moz-box-shadow: 2px 0px 5px #8c8c8c;
298
+	-webkit-box-shadow: 2px 0px 5px #8c8c8c;
299
+	box-shadow: 2px 0px 5px #8c8c8c;
300
+}
301
+/* Timer */
302
+.acorn-player.access.accesslight .acorn-timer {	
303
+	color: #333;
304
+	text-shadow: 0px 1px 2px #fff;
305
+}
306
+/* Volume Slider */
307
+.acorn-player.access.accesslight .acorn-volume-slider {
308
+	border: 1px solid #333;	
309
+	background: #c1c1c1;
310
+	
311
+	-moz-box-shadow: 0px 1px 1px #fff;
312
+	-webkit-box-shadow: 0px 1px 1px #fff;
313
+	box-shadow: 0px 1px 1px #fff;
314
+}

BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/button-background-dark.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/button-background-light.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/controls-background-dark.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/access/controls-background-light.png Vedi File


+ 143
- 0
data/presentation/0.9.0/acornmediaplayer/themes/barebones/acorn.barebones.css Vedi File

@@ -0,0 +1,143 @@
1
+/*
2
+ * barebones - Theme for Acorn Media Player 
3
+ * 
4
+ * To be used with the horizontal volume slider.
5
+ *
6
+ * Copyright (C) 2010 Cristian I. Colceriu
7
+ *
8
+ * Dual licensed under the MIT and GPL licenses:
9
+ *   http://www.opensource.org/licenses/mit-license.php
10
+ *   http://www.gnu.org/licenses/gpl.html
11
+ *
12
+ * www.ghinda.net
13
+ * contact@ghinda.net
14
+ *
15
+ */
16
+ 
17
+/* Start of barebones theme */
18
+.acorn-player.barebones {
19
+	float: left;
20
+	position: relative;
21
+	
22
+	font-family: Arial, Helvetica, sans-serif;
23
+}
24
+/* <video> element */
25
+.acorn-player.barebones video {
26
+	float: left;
27
+	clear: both;
28
+	
29
+	margin-bottom: 5px;
30
+}
31
+/* Player Controls */
32
+.acorn-player.barebones .acorn-controls {
33
+	position: relative;
34
+	float: left;
35
+	clear: both;
36
+	
37
+	width: 100%;	
38
+}
39
+/* <button>s */
40
+.acorn-player.barebones button {	
41
+}
42
+/* Playback controls(Play, Pause) */
43
+.acorn-player.barebones .acorn-play-button {
44
+	float: left;
45
+}
46
+.acorn-player.barebones .acorn-paused-button {	
47
+}
48
+/* Seek Slider */
49
+.acorn-player.barebones .acorn-seek-slider {
50
+	position: relative;
51
+	display: block;
52
+	float: left;
53
+	width: 40%;
54
+	height: 10px;
55
+	margin: 6px 0px 0px 10px;
56
+	background: #ADADAD;
57
+}
58
+.acorn-player.barebones .acorn-seek-slider .ui-slider-handle {
59
+	display: block;
60
+	position: absolute;	
61
+	width: 15px;
62
+	height: 15px;	
63
+	top: -3px;
64
+	background: #e6e6e6;
65
+	border: 1px solid #000;
66
+}
67
+.acorn-player.barebones .acorn-seek-slider .ui-slider-range {		
68
+	background: #4cbae8;
69
+}
70
+.acorn-player.barebones .acorn-buffer {
71
+	background: #939393 !important;
72
+}
73
+.acorn-player.barebones .acorn-seek-slider .ui-state-focus, .acorn-player.barebones .acorn-seek-slider .ui-slider-handle.ui-state-hover {
74
+	background: #fff !important;
75
+}
76
+/* Timer */
77
+.acorn-player.barebones .acorn-timer {
78
+	float: left;
79
+	margin: 2px 0px 0px 5px;
80
+}
81
+/* Volume Box */
82
+.acorn-player.barebones .acorn-volume-box {	
83
+	float: left;
84
+	margin-left: 10px;
85
+}
86
+/* Volume Slider */
87
+.acorn-player.barebones .acorn-volume-slider {
88
+	float: left;
89
+	height: 10px;
90
+	width: 50px;
91
+	left: 4px;
92
+	margin: 6px 0px 0px 10px;
93
+	
94
+	background: #535353;
95
+}
96
+.acorn-player.barebones .acorn-volume-slider .ui-slider-handle {
97
+	width: 12px;
98
+	height: 12px;
99
+	left: -4px;
100
+	top: -2px;	
101
+	border: 1px solid #000;
102
+	background: #e6e6e6;
103
+}
104
+.acorn-player.barebones .acorn-volume-slider .ui-slider-handle.ui-state-hover {
105
+	background: #fff;
106
+}
107
+.acorn-player.barebones .acorn-volume-slider .ui-slider-range {	
108
+	background: #e6e6e6;
109
+}
110
+/* Volume Button */
111
+.acorn-player.barebones .acorn-volume-button {
112
+	float: left;
113
+}
114
+.acorn-player.barebones .acorn-volume-mute {
115
+}
116
+/* Fullscreen Button */
117
+.acorn-player.barebones .acorn-fullscreen-button {
118
+	float: right;
119
+}
120
+/* Fullscreen Mode */
121
+.acorn-player.barebones .fullscreen-controls {	
122
+	left: 0px;
123
+	bottom: 0px;
124
+}
125
+/* Caption Button */
126
+.acorn-player.barebones .acorn-caption-button {
127
+	float: right;
128
+}
129
+.acorn-player.barebones .acorn-caption {
130
+	font-size: 14px;
131
+	font-weight: bold;
132
+	color: #fff;
133
+}
134
+.acorn-player.barebones .acorn-caption-active {
135
+	border: 2px solid #8F0000 !important;
136
+}
137
+.acorn-player.barebones .acorn-transcript-active {
138
+	border: 2px solid #8F0000 !important;
139
+}
140
+/* Transcript Button */
141
+.acorn-player.barebones .acorn-transcript-button {
142
+	float: right;
143
+}

+ 337
- 0
data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/acorn.bigbluebutton.css Vedi File

@@ -0,0 +1,337 @@
1
+/*
2
+ * bigbluebutton - Theme for Acorn Media Player
3
+ * bigbluebuttonsmall - Child theme of bigbluebutton
4
+ *
5
+ * To be used with the vertical volume slider.
6
+ *
7
+ * Copyright (C) 2010 Cristian I. Colceriu
8
+ *
9
+ * Dual licensed under the MIT and GPL licenses:
10
+ *   http://www.opensource.org/licenses/mit-license.php
11
+ *   http://www.gnu.org/licenses/gpl.html
12
+ *
13
+ * www.ghinda.net
14
+ * contact@ghinda.net
15
+ *
16
+ */
17
+
18
+/* Start of bigbluebutton theme */
19
+.acorn-player.bigbluebutton {
20
+  float: left;
21
+  position: relative;
22
+  padding: 0;
23
+  margin: 0;
24
+  font-family: Arial, Helvetica, sans-serif;
25
+}
26
+/* <video> element */
27
+.acorn-player.bigbluebutton video {
28
+  float: left;
29
+  clear: both;
30
+  margin: 0;
31
+  cursor: pointer;
32
+}
33
+/* Player Controls */
34
+.acorn-player.bigbluebutton .acorn-controls {
35
+  position: relative;
36
+  float: left;
37
+  clear: both;
38
+  width: 95%;
39
+  padding: 5px 40px 5px 5px;
40
+  border: 0;
41
+  background: #2a2d34; /* #314b5d; */
42
+}
43
+/* <button>s */
44
+.acorn-player.bigbluebutton button {
45
+  position: relative;
46
+  width: 35px;
47
+  margin: 0 6px;
48
+  padding: 0px;
49
+  border: none;
50
+  background-color: transparent;
51
+  background-repeat: no-repeat;
52
+  background-position: center center;
53
+  background-size: auto 100%;
54
+
55
+  opacity: 0.6;
56
+  -moz-transition: all 0.2s ease-in-out;
57
+  -webkit-transition: all 0.2s ease-in-out;
58
+  -o-transition: all 0.2s ease-in-out;
59
+  transition: all 0.2s ease-in-out;
60
+
61
+  -moz-border-radius: 2px;
62
+  -webkit-border-radius: 2px;
63
+  border-radius: 2px;
64
+
65
+  cursor: pointer;
66
+  text-indent: -9999px;
67
+}
68
+.acorn-player.bigbluebutton button:hover, .acorn-player.bigbluebutton button:focus {
69
+  opacity: 1;
70
+}
71
+.acorn-player.bigbluebutton button:active {
72
+  top: 1px;
73
+}
74
+/* Playback controls(Play, Pause) */
75
+.acorn-player.bigbluebutton .acorn-play-button {
76
+  float: left;
77
+  display: block;
78
+  background-image: url(bigbluebutton-play.png);
79
+}
80
+.acorn-player.bigbluebutton .acorn-paused-button {
81
+  background-image: url(bigbluebutton-pause.png);
82
+}
83
+/* Seek Slider */
84
+.acorn-player.bigbluebutton .acorn-seek-slider {
85
+  position: relative;
86
+  display: block;
87
+  float: left;
88
+  width: 70%;
89
+  height: 12px;
90
+  margin: 5px 10px 5px 10px;
91
+  background: #8E9DAF;
92
+}
93
+.acorn-player.bigbluebutton .acorn-seek-slider .ui-slider-handle {
94
+  display: block;
95
+  position: absolute;
96
+  width: 12px;
97
+  height: 16px;
98
+  border-left: 1px solid #333;
99
+  border-right: 1px solid #333;
100
+  top: -2px;
101
+  background: #e6e6e6;
102
+  cursor: pointer;
103
+  border-radius: 3px;
104
+}
105
+.acorn-player.bigbluebutton .acorn-seek-slider .ui-slider-handle:hover {
106
+  /* height: 18px; */
107
+  /* top: -4px; */
108
+}
109
+.acorn-player.bigbluebutton .acorn-seek-slider .ui-slider-range {
110
+  background: #289ad6;
111
+}
112
+.acorn-player.bigbluebutton .acorn-buffer {
113
+  background: #8E9DAF !important;
114
+}
115
+.acorn-player.bigbluebutton .acorn-seek-slider .ui-state-focus, .acorn-player.bigbluebutton .acorn-seek-slider .ui-slider-handle.ui-state-hover {
116
+  background: #fff !important;
117
+
118
+  -moz-box-shadow: 0px 2px 15px #289ad6;
119
+  -webkit-box-shadow: 0px 2px 15px #289ad6;
120
+  box-shadow: 0px 2px 15px #289ad6;
121
+}
122
+/* Timer */
123
+.acorn-player.bigbluebutton .acorn-timer {
124
+  float: left;
125
+  width: 6%;
126
+  overflow: hidden;
127
+  margin-top: 1px;
128
+  color: #eee;
129
+  font-size: 0.9em;
130
+  font-weight: bold;
131
+  min-width: 40px;
132
+}
133
+/* Volume Box */
134
+.acorn-player.bigbluebutton .acorn-volume-box {
135
+  position: absolute;
136
+  float: left;
137
+  bottom: 6px;
138
+  right: 0;
139
+  overflow: visible;
140
+  color: #fff;
141
+  transition: all 0.1s ease-in-out 0s;
142
+  margin: 0 6px;
143
+  width: 35px;/* 5%; */
144
+}
145
+.acorn-player.bigbluebutton .acorn-volume-box:hover {
146
+  height: 135px;
147
+}
148
+.acorn-player.bigbluebutton .acorn-volume-slider.handle-focused {
149
+  position: relative;
150
+  visibility: visible;
151
+  height: 100px;
152
+  opacity: 1;
153
+  top: -100px;
154
+}
155
+.acorn-player.bigbluebutton .acorn-volume-box:hover .acorn-volume-slider {
156
+  position: relative;
157
+  visibility: visible;
158
+  height: 100px;
159
+  opacity: 1;
160
+  top: 0px;
161
+}
162
+/* Volume Slider */
163
+.acorn-player.bigbluebutton .acorn-volume-slider {
164
+  position: relative;
165
+  height: 1px;
166
+  width: 12px;
167
+  margin: 0 auto;
168
+  visibility: visible;
169
+  opacity: 0;
170
+  border: 1px solid #666;
171
+  background: #ddd; /* #8E9DAF; */
172
+}
173
+.acorn-player.bigbluebutton .acorn-volume-slider .ui-slider-handle {
174
+  width: 18px;
175
+  height: 8px;
176
+  left: -4px;
177
+  margin-bottom:-0.6em;
178
+  margin-left:0;
179
+  border: 1px solid #666;
180
+  border-radius: 3px;
181
+  background: #e6e6e6;
182
+
183
+  -moz-transition: all 0.1s ease-in-out;
184
+  -webkit-transition: all 0.1s ease-in-out;
185
+  -o-transition: all 0.1s ease-in-out;
186
+  transition: all 0.1s ease-in-out;
187
+}
188
+.acorn-player.bigbluebutton .acorn-volume-slider .ui-slider-handle:hover, .acorn-player.bigbluebutton .acorn-volume-slider.handle-focused .ui-slider-handle {
189
+  background: #fff;
190
+
191
+  -moz-box-shadow: 0px 2px 15px #289ad6;
192
+  -webkit-box-shadow: 0px 2px 15px #289ad6;
193
+  box-shadow: 0px 2px 15px #289ad6;
194
+}
195
+.acorn-player.bigbluebutton .acorn-volume-slider .ui-slider-range {
196
+  background: #289ad6;
197
+  box-shadow: inset 0 3px 3px #d5d5d5;
198
+  margin-top: 15px;
199
+}
200
+/* Volume Button */
201
+.acorn-player.bigbluebutton .acorn-volume-button {
202
+  position: absolute;
203
+  bottom: 0px;
204
+  width: 100%;
205
+  display: block;
206
+  background: url(bigbluebutton-volume-full.png) no-repeat;
207
+  background-size: contain;
208
+  text-indent: -9999px;
209
+  margin: 0;
210
+  opacity: 0.6;
211
+}
212
+.acorn-player.bigbluebutton .acorn-volume-button:active {
213
+  top: auto;
214
+}
215
+.acorn-player.bigbluebutton .acorn-volume-mute {
216
+  background-image: url(bigbluebutton-volume.png);
217
+}
218
+/* Swap Button */
219
+.acorn-player.bigbluebutton .acorn-swap-button {
220
+  float: right;
221
+  background-image: url(bigbluebutton-swap.png);
222
+}
223
+/* Fullscreen Button */
224
+.acorn-player.bigbluebutton .acorn-fullscreen-button {
225
+  float: right;
226
+  background-image: url(bigbluebutton-fullscreen.png);
227
+}
228
+/* Fullscreen Mode */
229
+.acorn-player.bigbluebutton .fullscreen-controls {
230
+  left: 0px;
231
+  bottom: 0px;
232
+}
233
+.acorn-player.bigbluebutton .fullscreen-controls button {
234
+  height: 35px;
235
+}
236
+.acorn-player.bigbluebutton .fullscreen-controls .acorn-fullscreen-button {
237
+  background-image: url(bigbluebutton-exit-fullscreen.png);
238
+}
239
+.acorn-player.bigbluebutton .fullscreen-controls .acorn-seek-slider {
240
+  margin-top: 10px;
241
+}
242
+/* Caption Button */
243
+.acorn-player.bigbluebutton .acorn-caption-button {
244
+  float: right;
245
+  background-image: url(bigbluebutton-caption.png);
246
+}
247
+.acorn-player.bigbluebutton .acorn-caption {
248
+  font-size: 14px;
249
+  font-weight: bold;
250
+  color: #fff;
251
+
252
+  text-shadow: 0px 1px 5px #000;
253
+}
254
+.acorn-player.bigbluebutton .acorn-caption-active {
255
+  background-color: #8F0000 !important;
256
+}
257
+.acorn-player.bigbluebutton .acorn-transcript-active {
258
+  background-color: #8F0000 !important;
259
+}
260
+/* Transcript Button */
261
+.acorn-player.bigbluebutton .acorn-transcript-button {
262
+  float: right;
263
+  background-image: url(bigbluebutton-transcript.png);
264
+}
265
+
266
+.acorn-player .loading-media {
267
+  left: auto;
268
+  right: auto;
269
+  top: auto;
270
+  bottom: auto;
271
+  margin: 0 auto;
272
+  background: none;
273
+  z-index: 999;
274
+  position: relative;
275
+  margin-top: 6px;
276
+}
277
+/* Controls overlay while loading */
278
+.show-loading .acorn-controls:after {
279
+  content: '';
280
+  position: absolute;
281
+  top: -2px; /* Slider handle goes above */
282
+  left: 0;
283
+  z-index: 10;
284
+  width: 100%;
285
+  height: 100%;
286
+  background: #2a2d34;
287
+  opacity: 0.85;
288
+}
289
+
290
+/* Very small screens only */
291
+@media only screen and (max-width: 21em) {
292
+  .acorn-player.bigbluebutton .acorn-seek-slider {
293
+    width: 20%;
294
+  }
295
+  .acorn-player.bigbluebutton .acorn-controls {
296
+    padding-right: 35px;
297
+  }
298
+  .acorn-player.bigbluebutton button {
299
+    width: 25px;
300
+  }
301
+  .acorn-player.bigbluebutton .acorn-volume-box {
302
+    width: 25px;
303
+  }
304
+}
305
+
306
+/* Small screens only */
307
+@media only screen and (min-width: 21.063em) {
308
+/* @media only screen and (max-width: 40em) { -- this is used by foundation */
309
+  .acorn-player.bigbluebutton .acorn-seek-slider {
310
+    width: 40%;
311
+  }
312
+  .acorn-player.bigbluebutton .acorn-controls {
313
+    padding-right: 35px;
314
+  }
315
+  .acorn-player.bigbluebutton button {
316
+    position: relative;
317
+    width: 25px;
318
+  }
319
+  .acorn-player.bigbluebutton .acorn-volume-box {
320
+    width: 25px;
321
+    right: 0px;
322
+  }
323
+}
324
+
325
+/* Medium screens up */
326
+@media only screen and (min-width: 40.063em) {
327
+  .acorn-player.bigbluebutton .acorn-seek-slider {
328
+    width: 65%;
329
+  }
330
+}
331
+
332
+/* Large screens up */
333
+@media only screen and (min-width: 64.063em) {
334
+  .acorn-player.bigbluebutton .acorn-seek-slider {
335
+    width: 70%;
336
+  }
337
+}

BIN
data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-caption.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-exit-fullscreen.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-fullscreen.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-pause.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-play.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-swap.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-transcript.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-volume-full.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/bigbluebutton/bigbluebutton-volume.png Vedi File


+ 363
- 0
data/presentation/0.9.0/acornmediaplayer/themes/darkglass/acorn.darkglass.css Vedi File

@@ -0,0 +1,363 @@
1
+/*
2
+ * darkglass - Theme for Acorn Media Player
3
+ * darkglasssmall - Child theme of darkglass
4
+ *
5
+ * To be used with the vertical volume slider.
6
+ *
7
+ * Copyright (C) 2010 Cristian I. Colceriu
8
+ *
9
+ * Dual licensed under the MIT and GPL licenses:
10
+ *   http://www.opensource.org/licenses/mit-license.php
11
+ *   http://www.gnu.org/licenses/gpl.html
12
+ *
13
+ * www.ghinda.net
14
+ * contact@ghinda.net
15
+ *
16
+ */
17
+ 
18
+/* Start of darkglass theme */
19
+.acorn-player.darkglass {
20
+	float: left;
21
+	position: relative;	
22
+	padding: 2px;
23
+	font-family: Arial, Helvetica, sans-serif;
24
+}
25
+/* <video> element */
26
+.acorn-player.darkglass video {
27
+	float: left;
28
+	clear: both;
29
+	margin-bottom: 5px;	
30
+}
31
+/* Audio player */
32
+/* 
33
+ * If you're playing <audio>, we're assigning a Width larger by 10%, because we're missing two buttons(Captions and Transcript)
34
+ * each with a 5% Width
35
+ */
36
+.acorn-player.darkglass.audio-player .acorn-seek-slider {
37
+	width: 82%;
38
+}
39
+/* Player Controls */
40
+.acorn-player.darkglass .acorn-controls {
41
+	position: relative;
42
+	float: left;
43
+	clear: both;
44
+	width: 95%;
45
+	padding-right: 5%;
46
+	padding-left: 1%;
47
+	border: 2px solid #61625d;	
48
+	-moz-border-radius: 5px;
49
+	-webkit-border-radius: 5px;
50
+	border-radius: 5px;
51
+	background: #000000;
52
+	background-image: -moz-linear-gradient(top, #313131, #000000);
53
+	background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #313131),color-stop(1, #000000));		
54
+}
55
+/* <button>s */
56
+.acorn-player.darkglass button {
57
+	position: relative;
58
+	height: 22px;	
59
+	width: 4%;
60
+	margin-right: 1%;
61
+	padding: 0px;
62
+	border: none;
63
+	background-color: transparent;
64
+	background-repeat: no-repeat;
65
+	background-position: center center;
66
+	background-size: auto 100%;
67
+	
68
+	opacity: 0.7;
69
+	-moz-transition: all 0.2s ease-in-out;
70
+	-webkit-transition: all 0.2s ease-in-out;
71
+	-o-transition: all 0.2s ease-in-out;
72
+	transition: all 0.2s ease-in-out;
73
+	
74
+	-moz-border-radius: 2px;
75
+	-webkit-border-radius: 2px;
76
+	border-radius: 2px;
77
+	
78
+	cursor: pointer;
79
+	text-indent: -9999px;
80
+}
81
+.acorn-player.darkglass button:hover, .acorn-player.darkglass button:focus {
82
+	opacity: 1;
83
+}
84
+.acorn-player.darkglass button:active {
85
+	top: 1px;	
86
+}
87
+/* Playback controls(Play, Pause) */
88
+.acorn-player.darkglass .acorn-play-button {
89
+	float: left;
90
+	display: block;
91
+	background-image: url(darkglass-play.png);
92
+}
93
+.acorn-player.darkglass .acorn-paused-button {
94
+	background-image: url(darkglass-pause.png);
95
+}
96
+/* Seek Slider */
97
+.acorn-player.darkglass .acorn-seek-slider {
98
+	position: relative;
99
+	display: block;
100
+	float: left;
101
+	width: 72%;
102
+	height: 10px;
103
+	margin: 5px 1% 0px 1%;
104
+	background: #7289A8;
105
+	-moz-border-radius: 15px;
106
+	-webkit-border-radius: 15px;
107
+	border-radius: 15px;	
108
+}
109
+.acorn-player.darkglass .acorn-seek-slider .ui-slider-handle {
110
+	display: block;
111
+	position: absolute;	
112
+	width: 15px;
113
+	height: 15px;
114
+	border: 1px solid #333;
115
+	top: -4px;
116
+	background: #e6e6e6;	
117
+
118
+	-moz-border-radius: 10px;
119
+	-webkit-border-radius: 10px;
120
+	border-radius: 10px;
121
+}
122
+.acorn-player.darkglass .acorn-seek-slider .ui-slider-range {		
123
+	background: #0750B2;
124
+	
125
+	-moz-border-radius:10px;
126
+	-webkit-border-radius:10px;
127
+	border-radius:10px;
128
+}
129
+.acorn-player.darkglass .acorn-buffer {
130
+	background: #8E9DAF !important;
131
+}
132
+.acorn-player.darkglass .acorn-seek-slider .ui-state-focus, .acorn-player.darkglass .acorn-seek-slider .ui-slider-handle.ui-state-hover {
133
+	background: #fff !important;
134
+	
135
+	-moz-box-shadow: 0px 2px 15px #ff0000;
136
+	-webkit-box-shadow: 0px 2px 15px #ff0000;
137
+	box-shadow: 0px 2px 15px #ff0000;
138
+}
139
+/* Timer */
140
+.acorn-player.darkglass .acorn-timer {
141
+	float: left;
142
+	width: 6%;
143
+	overflow: hidden;
144
+	margin-top: 5px;	
145
+	
146
+	color: #999;
147
+	font-size: 0.7em;
148
+	font-weight: bold;
149
+}
150
+/* Volume Box */
151
+.acorn-player.darkglass .acorn-volume-box {
152
+	position: absolute;
153
+	float: left;
154
+	bottom: 0px;
155
+	right: 0px;
156
+	overflow: visible;
157
+	width: 5%;
158
+	height: 35px;
159
+	color: #fff;	
160
+	
161
+	-moz-transition: all 0.1s ease-in-out;
162
+	-webkit-transition: all 0.1s ease-in-out;
163
+	-o-transition: all 0.2s ease-in-out;
164
+	transition: all 0.1s ease-in-out;
165
+}
166
+.acorn-player.darkglass .acorn-volume-box:hover {
167
+	height: 135px;
168
+}
169
+.acorn-player.darkglass .acorn-volume-slider.handle-focused {
170
+	position: relative;
171
+	visibility: visible;
172
+	height: 100px;
173
+	opacity: 1;
174
+	top: -100px;
175
+}
176
+.acorn-player.darkglass .acorn-volume-box:hover .acorn-volume-slider {
177
+	position: relative;
178
+	visibility: visible;
179
+	height: 100px;
180
+	opacity: 1;
181
+	top: 0px;
182
+}
183
+/* Volume Slider */
184
+.acorn-player.darkglass .acorn-volume-slider {
185
+	position: relative;
186
+	height: 1px;
187
+	width: 7px;
188
+	left: 4px;
189
+	
190
+	visibility: visible;
191
+	opacity: 0;
192
+	
193
+	border: 1px solid #444;
194
+
195
+	-moz-border-radius: 15px;
196
+	-webkit-border-radius: 15px;
197
+	border-radius: 15px;
198
+	
199
+	background: #535353;
200
+	background-image: -moz-linear-gradient(top, #535353, #333333);
201
+	background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #535353),color-stop(1, #333333));
202
+	
203
+	box-shadow: inset 0 3px 3px #333333;
204
+	
205
+	-moz-transition: all 0.1s ease-in-out;
206
+	-webkit-transition: all 0.1s ease-in-out;
207
+	-o-transition: all 0.1s ease-in-out;
208
+	transition: all 0.1s ease-in-out; 
209
+}
210
+.acorn-player.darkglass .acorn-volume-slider .ui-slider-handle {
211
+	width: 12px;
212
+	height: 12px;
213
+	left: -4px;
214
+	margin-bottom:-0.6em;
215
+	margin-left:0;
216
+	border: 1px solid #333;	
217
+
218
+	-moz-border-radius:10px;
219
+	-webkit-border-radius:10px;
220
+	border-radius:10px;	
221
+	
222
+	background: #e6e6e6;
223
+	background-image: -moz-linear-gradient(top, #e6e6e6, #d5d5d5);
224
+	background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e6e6e6),color-stop(1, #d5d5d5));
225
+	
226
+	box-shadow: inset 0 3px 3px #d5d5d5;	
227
+}
228
+.acorn-player.darkglass .acorn-volume-slider .ui-slider-handle:hover, .acorn-player.darkglass .acorn-volume-slider.handle-focused .ui-slider-handle {
229
+	background: #fff;
230
+
231
+	-moz-box-shadow: 0px 2px 15px #ff0000;
232
+	-webkit-box-shadow: 0px 2px 15px #ff0000;
233
+	box-shadow: 0px 2px 15px #ff0000;
234
+}
235
+.acorn-player.darkglass .acorn-volume-slider .ui-slider-range {
236
+	-moz-border-radius: 15px;
237
+	-webkit-border-radius: 15px;
238
+	border-radius: 15px;
239
+	
240
+	background: #e6e6e6;
241
+	background-image: -moz-linear-gradient(top, #e6e6e6, #d5d5d5);
242
+	background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e6e6e6),color-stop(1, #d5d5d5));
243
+	
244
+	box-shadow: inset 0 3px 3px #d5d5d5;
245
+}
246
+/* Volume Button */
247
+.acorn-player.darkglass .acorn-volume-button {
248
+	position: absolute;	
249
+	bottom: 0px;
250
+	width: 100%;
251
+	display: block;	
252
+	background: url(darkglass-volume-full.png) no-repeat;
253
+	text-indent: -9999px;
254
+	
255
+	opacity: 0.8;
256
+}
257
+.acorn-player.darkglass .acorn-volume-button:active {
258
+	top: auto;
259
+}
260
+.acorn-player.darkglass .acorn-volume-mute {
261
+	background-image: url(darkglass-volume.png);
262
+}
263
+/* Swap Button */
264
+.acorn-player.darkglass .acorn-swap-button {
265
+	float: right;
266
+	background-image: url(darkglass-swap.png);
267
+}
268
+/* Fullscreen Button */
269
+.acorn-player.darkglass .acorn-fullscreen-button {
270
+	float: right;
271
+	background-image: url(darkglass-fullscreen.png);
272
+}
273
+/* Fullscreen Mode */
274
+.acorn-player.darkglass .fullscreen-controls {	
275
+	left: 0px;
276
+	bottom: 0px;
277
+}
278
+.acorn-player.darkglass .fullscreen-controls button {
279
+	height: 35px;
280
+}
281
+.acorn-player.darkglass .fullscreen-controls .acorn-fullscreen-button {
282
+	background-image: url(darkglass-exit-fullscreen.png);
283
+}
284
+.acorn-player.darkglass .fullscreen-controls .acorn-seek-slider {
285
+	margin-top: 10px;
286
+}
287
+/* Caption Button */
288
+.acorn-player.darkglass .acorn-caption-button {
289
+	float: right;
290
+	background-image: url(darkglass-caption.png);
291
+}
292
+.acorn-player.darkglass .acorn-caption {
293
+	font-size: 14px;
294
+	font-weight: bold;
295
+	color: #fff;
296
+	
297
+	text-shadow: 0px 1px 5px #000;
298
+}
299
+.acorn-player.darkglass .acorn-caption-active {
300
+	background-color: #8F0000 !important;
301
+}
302
+.acorn-player.darkglass .acorn-transcript-active {
303
+	background-color: #8F0000 !important;
304
+}
305
+/* Transcript Button */
306
+.acorn-player.darkglass .acorn-transcript-button {
307
+	float: right;
308
+	background-image: url(darkglass-transcript.png);
309
+}
310
+/* 
311
+ * darkglasssmall Child Theme
312
+ */
313
+.acorn-player.darkglasssmall {
314
+	padding: 0px;
315
+}
316
+.acorn-player.darkglasssmall video:hover + .acorn-controls {
317
+	visibility: visible;
318
+	opacity: 0.7;
319
+}
320
+.acorn-player.darkglasssmall .acorn-controls:hover {
321
+	visibility: visible;
322
+	opacity: 0.7;
323
+}
324
+.acorn-player.darkglasssmall .acorn-controls {
325
+	position: absolute;	
326
+	bottom: 5%;
327
+	width: 87%;
328
+	margin-left: 2%;
329
+	padding: 2% 7% 2% 2%;
330
+	
331
+	border: 1px solid #2E2E2E;
332
+	
333
+	-moz-border-radius: 5px;
334
+	-webkit-border-radius: 5px;
335
+	border-radius: 5px;
336
+	
337
+	background: #000000;
338
+	background-image: -moz-linear-gradient(top, #313131, #000000);
339
+	background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #313131),color-stop(1, #000000));
340
+	
341
+	opacity: 0;
342
+	visibility: hidden;	
343
+	
344
+	-moz-transition: all 0.1s ease-in-out;
345
+	-webkit-transition: all 0.1s ease-in-out;
346
+	-o-transition: all 0.1s ease-in-out;
347
+	transition: all 0.1s ease-in-out;
348
+}
349
+.acorn-player.darkglasssmall .acorn-volume-box {
350
+	margin-right: 2%;
351
+	margin-bottom: 2%;
352
+}
353
+/* Audio player */
354
+.acorn-player.darkglasssmall.audio-player .acorn-controls {
355
+	display: block;
356
+	position: relative;
357
+	visibility: visible;
358
+	opacity: 1;
359
+	margin-left: 0px;
360
+	width: 91%;
361
+	
362
+	border: none;
363
+}

BIN
data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-caption.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-exit-fullscreen.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-fullscreen.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-pause.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-play.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-swap.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-transcript.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-volume-full.png Vedi File


BIN
data/presentation/0.9.0/acornmediaplayer/themes/darkglass/darkglass-volume.png Vedi File


+ 256
- 0
data/presentation/0.9.0/css/bbb.playback.css Vedi File

@@ -0,0 +1,256 @@
1
+/*
2
+
3
+BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
4
+
5
+Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
6
+
7
+This program is free software; you can redistribute it and/or modify it under the
8
+terms of the GNU Lesser General Public License as published by the Free Software
9
+Foundation; either version 3.0 of the License, or (at your option) any later
10
+version.
11
+
12
+BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
13
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14
+PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
15
+
16
+You should have received a copy of the GNU Lesser General Public License along
17
+with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
18
+
19
+*/
20
+
21
+html{
22
+}
23
+body {
24
+	font-family: Verdana;
25
+	background: #fff;
26
+	padding-top: 30px;
27
+}
28
+h1 {
29
+	text-align:center
30
+}
31
+br{
32
+	display:none
33
+}
34
+
35
+/*
36
+ * clearfix
37
+ * see: http://css-tricks.com/snippets/css/clear-fix/
38
+ */
39
+.clearfix:after {
40
+	visibility: hidden;
41
+	display: block;
42
+	font-size: 0;
43
+	content: " ";
44
+	clear: both;
45
+	height: 0;
46
+}
47
+* html .clearfix             { zoom: 1; } /* IE6 */
48
+*:first-child+html .clearfix { zoom: 1; } /* IE7 */
49
+
50
+#playbackArea {
51
+	width: 1360px; /* #slide.width + #chat.width + #audioRecording.width */
52
+	height: 650px;
53
+	margin: 0 auto;
54
+	overflow: hidden;
55
+}
56
+
57
+#audioRecordingWrapper{
58
+	float: left;
59
+	width: 800px;
60
+}
61
+
62
+#audioRecording{
63
+	display: block;
64
+	margin-left: auto;
65
+	margin-right: auto;
66
+	width: 100%;
67
+}
68
+
69
+#audioRecordingWrapper .acorn-controls, #videoRecordingWrapper .acorn-controls{
70
+	position: relative;
71
+	top: 0;
72
+	left: -810px;
73
+	width: 730px;
74
+}
75
+
76
+#playbackControls{
77
+	width: 1360px;
78
+	margin: 0 auto;
79
+	margin-top: -50px;
80
+}
81
+
82
+#autoscrollWrapper{
83
+	float: left;
84
+	margin-left: 10px;
85
+	margin-top: 8px;
86
+	font-size: 14px;
87
+}
88
+
89
+.webcam{
90
+  width: 402px;
91
+  height: 300px;
92
+}
93
+
94
+#video{
95
+  width: 402px;
96
+  background: white;
97
+}
98
+
99
+/* To remove the white space on top of the audio tag in Firefox
100
+ * See: http://stackoverflow.com/questions/9527453/firefox-and-html5-audio-element-dont-play-well-together
101
+ */
102
+@-moz-document url-prefix() {
103
+	#audioRecordingWrapper{
104
+		position: relative;
105
+		height: 28px;
106
+	}
107
+	#audioRecording {
108
+		position: absolute;
109
+		bottom: 0;
110
+	}
111
+}
112
+
113
+#presentation {
114
+	float: left;
115
+	position: relative;
116
+	height: 600px;
117
+}
118
+
119
+#slide {
120
+	background-image: url('../logo.png');
121
+	text-align: center;
122
+	border: 0px solid #ccc;
123
+	width: 800px;
124
+	height: 600px; /* same as slide images */
125
+	position: relative;
126
+	top: -12px;
127
+}
128
+
129
+/* Visually hides text
130
+ * see: yaccessibilityblog.com/library/css-clip-hidden-content.html
131
+ */
132
+.visually-hidden {
133
+	position: absolute !important;
134
+	clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
135
+	clip: rect(1px, 1px, 1px, 1px);
136
+	padding: 0 !important;
137
+	border: 0 !important;
138
+	height: 1px !important;
139
+	width: 1px !important;
140
+	overflow: hidden;
141
+}
142
+
143
+#mediaArea {
144
+	float: right;
145
+	background: white;
146
+	width: 402px;
147
+}
148
+
149
+#chatAndMediaArea{
150
+	float: right;
151
+	background: white;
152
+	height: 600px;
153
+	width: 402px;
154
+}
155
+#chat{
156
+	margin: 0 auto;
157
+	padding: 0 10px;
158
+	border: 0px solid #ccc;
159
+	height: 300px;
160
+	overflow: auto;
161
+}
162
+#chat div{
163
+	padding:0px;
164
+	font-size:13px;
165
+}
166
+#big {display:none}
167
+#mid {display:none}
168
+
169
+#thumbnails {
170
+	float: left;
171
+	width: 130px;
172
+	height: 600px; /* same as #slide */
173
+	background: #fff;
174
+	border: 0px solid #bbb;
175
+	margin-right: 10px;
176
+	overflow-y: scroll;
177
+	overflow-x: hidden;
178
+}
179
+
180
+#thumbnails img.thumbnail {
181
+	width: 100px;
182
+	height: auto;
183
+	border: 0px solid #eee;
184
+	margin: 5px;
185
+	cursor: pointer;
186
+	vertical-align: bottom;
187
+}
188
+
189
+#thumbnails .thumbnail-wrapper {
190
+	position: relative;
191
+	margin: 0;
192
+	padding: 0;
193
+}
194
+
195
+#thumbnails .thumbnail-wrapper.active {
196
+	background-color: #D9EDF7;
197
+}
198
+
199
+#thumbnails .thumbnail-wrapper.active img.thumbnail {
200
+	border-color: #3A87AD;
201
+}
202
+
203
+#thumbnails .thumbnail-label {
204
+	color: #fff;
205
+	background: #3A87AD;
206
+	font-weight: bold;
207
+	font-size: 12px;
208
+	position: absolute;
209
+	bottom: 5px;
210
+	left: 5px;
211
+	max-width: 90px;
212
+	text-align: center;
213
+	display: none;
214
+	padding: 2px 5px;
215
+	cursor: pointer;
216
+}
217
+
218
+#accInfo{
219
+        margin: 20px auto;
220
+        font-size:0.75em;
221
+        text-align: center;
222
+        clear: both;
223
+	padding-top: 75px;
224
+}
225
+
226
+#footer{
227
+        margin: 20px auto;
228
+        font-size:0.75em;
229
+        color: #666;
230
+        text-align: center;
231
+        clear: both;
232
+	padding-top: 35px;
233
+}
234
+
235
+.circle {
236
+	height: 12px;
237
+	width: 12px;
238
+	border-radius: 50%;
239
+}
240
+
241
+
242
+#cursor {
243
+	position: relative;
244
+	background: red;
245
+	z-index: 10;
246
+}
247
+
248
+#load-recording-msg {
249
+	text-align: center;
250
+	height: 50px;
251
+	width: 200px;
252
+	position: absolute;
253
+	left: 50%;
254
+	margin-left: -100px;
255
+	top:60%;
256
+}

+ 594
- 0
data/presentation/0.9.0/css/foundation-icons.css Vedi File

@@ -0,0 +1,594 @@
1
+/* 
2
+ * Foundation Icons v 3.0
3
+ * Made by ZURB 2013 http://zurb.com/playground/foundation-icon-fonts-3
4
+ * MIT License
5
+ */
6
+
7
+@font-face {
8
+  font-family: "foundation-icons";
9
+  src: url("foundation-icons.eot");
10
+  src: url("foundation-icons.eot?#iefix") format("embedded-opentype"),
11
+       url("foundation-icons.woff") format("woff"),
12
+       url("foundation-icons.ttf") format("truetype"),
13
+       url("foundation-icons.svg#fontcustom") format("svg");
14
+  font-weight: normal;
15
+  font-style: normal;
16
+}
17
+
18
+.fi-address-book:before,
19
+.fi-alert:before,
20
+.fi-align-center:before,
21
+.fi-align-justify:before,
22
+.fi-align-left:before,
23
+.fi-align-right:before,
24
+.fi-anchor:before,
25
+.fi-annotate:before,
26
+.fi-archive:before,
27
+.fi-arrow-down:before,
28
+.fi-arrow-left:before,
29
+.fi-arrow-right:before,
30
+.fi-arrow-up:before,
31
+.fi-arrows-compress:before,
32
+.fi-arrows-expand:before,
33
+.fi-arrows-in:before,
34
+.fi-arrows-out:before,
35
+.fi-asl:before,
36
+.fi-asterisk:before,
37
+.fi-at-sign:before,
38
+.fi-background-color:before,
39
+.fi-battery-empty:before,
40
+.fi-battery-full:before,
41
+.fi-battery-half:before,
42
+.fi-bitcoin-circle:before,
43
+.fi-bitcoin:before,
44
+.fi-blind:before,
45
+.fi-bluetooth:before,
46
+.fi-bold:before,
47
+.fi-book-bookmark:before,
48
+.fi-book:before,
49
+.fi-bookmark:before,
50
+.fi-braille:before,
51
+.fi-burst-new:before,
52
+.fi-burst-sale:before,
53
+.fi-burst:before,
54
+.fi-calendar:before,
55
+.fi-camera:before,
56
+.fi-check:before,
57
+.fi-checkbox:before,
58
+.fi-clipboard-notes:before,
59
+.fi-clipboard-pencil:before,
60
+.fi-clipboard:before,
61
+.fi-clock:before,
62
+.fi-closed-caption:before,
63
+.fi-cloud:before,
64
+.fi-comment-minus:before,
65
+.fi-comment-quotes:before,
66
+.fi-comment-video:before,
67
+.fi-comment:before,
68
+.fi-comments:before,
69
+.fi-compass:before,
70
+.fi-contrast:before,
71
+.fi-credit-card:before,
72
+.fi-crop:before,
73
+.fi-crown:before,
74
+.fi-css3:before,
75
+.fi-database:before,
76
+.fi-die-five:before,
77
+.fi-die-four:before,
78
+.fi-die-one:before,
79
+.fi-die-six:before,
80
+.fi-die-three:before,
81
+.fi-die-two:before,
82
+.fi-dislike:before,
83
+.fi-dollar-bill:before,
84
+.fi-dollar:before,
85
+.fi-download:before,
86
+.fi-eject:before,
87
+.fi-elevator:before,
88
+.fi-euro:before,
89
+.fi-eye:before,
90
+.fi-fast-forward:before,
91
+.fi-female-symbol:before,
92
+.fi-female:before,
93
+.fi-filter:before,
94
+.fi-first-aid:before,
95
+.fi-flag:before,
96
+.fi-folder-add:before,
97
+.fi-folder-lock:before,
98
+.fi-folder:before,
99
+.fi-foot:before,
100
+.fi-foundation:before,
101
+.fi-graph-bar:before,
102
+.fi-graph-horizontal:before,
103
+.fi-graph-pie:before,
104
+.fi-graph-trend:before,
105
+.fi-guide-dog:before,
106
+.fi-hearing-aid:before,
107
+.fi-heart:before,
108
+.fi-home:before,
109
+.fi-html5:before,
110
+.fi-indent-less:before,
111
+.fi-indent-more:before,
112
+.fi-info:before,
113
+.fi-italic:before,
114
+.fi-key:before,
115
+.fi-laptop:before,
116
+.fi-layout:before,
117
+.fi-lightbulb:before,
118
+.fi-like:before,
119
+.fi-link:before,
120
+.fi-list-bullet:before,
121
+.fi-list-number:before,
122
+.fi-list-thumbnails:before,
123
+.fi-list:before,
124
+.fi-lock:before,
125
+.fi-loop:before,
126
+.fi-magnifying-glass:before,
127
+.fi-mail:before,
128
+.fi-male-female:before,
129
+.fi-male-symbol:before,
130
+.fi-male:before,
131
+.fi-map:before,
132
+.fi-marker:before,
133
+.fi-megaphone:before,
134
+.fi-microphone:before,
135
+.fi-minus-circle:before,
136
+.fi-minus:before,
137
+.fi-mobile-signal:before,
138
+.fi-mobile:before,
139
+.fi-monitor:before,
140
+.fi-mountains:before,
141
+.fi-music:before,
142
+.fi-next:before,
143
+.fi-no-dogs:before,
144
+.fi-no-smoking:before,
145
+.fi-page-add:before,
146
+.fi-page-copy:before,
147
+.fi-page-csv:before,
148
+.fi-page-delete:before,
149
+.fi-page-doc:before,
150
+.fi-page-edit:before,
151
+.fi-page-export-csv:before,
152
+.fi-page-export-doc:before,
153
+.fi-page-export-pdf:before,
154
+.fi-page-export:before,
155
+.fi-page-filled:before,
156
+.fi-page-multiple:before,
157
+.fi-page-pdf:before,
158
+.fi-page-remove:before,
159
+.fi-page-search:before,
160
+.fi-page:before,
161
+.fi-paint-bucket:before,
162
+.fi-paperclip:before,
163
+.fi-pause:before,
164
+.fi-paw:before,
165
+.fi-paypal:before,
166
+.fi-pencil:before,
167
+.fi-photo:before,
168
+.fi-play-circle:before,
169
+.fi-play-video:before,
170
+.fi-play:before,
171
+.fi-plus:before,
172
+.fi-pound:before,
173
+.fi-power:before,
174
+.fi-previous:before,
175
+.fi-price-tag:before,
176
+.fi-pricetag-multiple:before,
177
+.fi-print:before,
178
+.fi-prohibited:before,
179
+.fi-projection-screen:before,
180
+.fi-puzzle:before,
181
+.fi-quote:before,
182
+.fi-record:before,
183
+.fi-refresh:before,
184
+.fi-results-demographics:before,
185
+.fi-results:before,
186
+.fi-rewind-ten:before,
187
+.fi-rewind:before,
188
+.fi-rss:before,
189
+.fi-safety-cone:before,
190
+.fi-save:before,
191
+.fi-share:before,
192
+.fi-sheriff-badge:before,
193
+.fi-shield:before,
194
+.fi-shopping-bag:before,
195
+.fi-shopping-cart:before,
196
+.fi-shuffle:before,
197
+.fi-skull:before,
198
+.fi-social-500px:before,
199
+.fi-social-adobe:before,
200
+.fi-social-amazon:before,
201
+.fi-social-android:before,
202
+.fi-social-apple:before,
203
+.fi-social-behance:before,
204
+.fi-social-bing:before,
205
+.fi-social-blogger:before,
206
+.fi-social-delicious:before,
207
+.fi-social-designer-news:before,
208
+.fi-social-deviant-art:before,
209
+.fi-social-digg:before,
210
+.fi-social-dribbble:before,
211
+.fi-social-drive:before,
212
+.fi-social-dropbox:before,
213
+.fi-social-evernote:before,
214
+.fi-social-facebook:before,
215
+.fi-social-flickr:before,
216
+.fi-social-forrst:before,
217
+.fi-social-foursquare:before,
218
+.fi-social-game-center:before,
219
+.fi-social-github:before,
220
+.fi-social-google-plus:before,
221
+.fi-social-hacker-news:before,
222
+.fi-social-hi5:before,
223
+.fi-social-instagram:before,
224
+.fi-social-joomla:before,
225
+.fi-social-lastfm:before,
226
+.fi-social-linkedin:before,
227
+.fi-social-medium:before,
228
+.fi-social-myspace:before,
229
+.fi-social-orkut:before,
230
+.fi-social-path:before,
231
+.fi-social-picasa:before,
232
+.fi-social-pinterest:before,
233
+.fi-social-rdio:before,
234
+.fi-social-reddit:before,
235
+.fi-social-skillshare:before,
236
+.fi-social-skype:before,
237
+.fi-social-smashing-mag:before,
238
+.fi-social-snapchat:before,
239
+.fi-social-spotify:before,
240
+.fi-social-squidoo:before,
241
+.fi-social-stack-overflow:before,
242
+.fi-social-steam:before,
243
+.fi-social-stumbleupon:before,
244
+.fi-social-treehouse:before,
245
+.fi-social-tumblr:before,
246
+.fi-social-twitter:before,
247
+.fi-social-vimeo:before,
248
+.fi-social-windows:before,
249
+.fi-social-xbox:before,
250
+.fi-social-yahoo:before,
251
+.fi-social-yelp:before,
252
+.fi-social-youtube:before,
253
+.fi-social-zerply:before,
254
+.fi-social-zurb:before,
255
+.fi-sound:before,
256
+.fi-star:before,
257
+.fi-stop:before,
258
+.fi-strikethrough:before,
259
+.fi-subscript:before,
260
+.fi-superscript:before,
261
+.fi-tablet-landscape:before,
262
+.fi-tablet-portrait:before,
263
+.fi-target-two:before,
264
+.fi-target:before,
265
+.fi-telephone-accessible:before,
266
+.fi-telephone:before,
267
+.fi-text-color:before,
268
+.fi-thumbnails:before,
269
+.fi-ticket:before,
270
+.fi-torso-business:before,
271
+.fi-torso-female:before,
272
+.fi-torso:before,
273
+.fi-torsos-all-female:before,
274
+.fi-torsos-all:before,
275
+.fi-torsos-female-male:before,
276
+.fi-torsos-male-female:before,
277
+.fi-torsos:before,
278
+.fi-trash:before,
279
+.fi-trees:before,
280
+.fi-trophy:before,
281
+.fi-underline:before,
282
+.fi-universal-access:before,
283
+.fi-unlink:before,
284
+.fi-unlock:before,
285
+.fi-upload-cloud:before,
286
+.fi-upload:before,
287
+.fi-usb:before,
288
+.fi-video:before,
289
+.fi-volume-none:before,
290
+.fi-volume-strike:before,
291
+.fi-volume:before,
292
+.fi-web:before,
293
+.fi-wheelchair:before,
294
+.fi-widget:before,
295
+.fi-wrench:before,
296
+.fi-x-circle:before,
297
+.fi-x:before,
298
+.fi-yen:before,
299
+.fi-zoom-in:before,
300
+.fi-zoom-out:before {
301
+  font-family: "foundation-icons";
302
+  font-style: normal;
303
+  font-weight: normal;
304
+  font-variant: normal;
305
+  text-transform: none;
306
+  line-height: 1;
307
+  -webkit-font-smoothing: antialiased;
308
+  display: inline-block;
309
+  text-decoration: inherit;
310
+}
311
+
312
+.fi-address-book:before { content: "\f100"; }
313
+.fi-alert:before { content: "\f101"; }
314
+.fi-align-center:before { content: "\f102"; }
315
+.fi-align-justify:before { content: "\f103"; }
316
+.fi-align-left:before { content: "\f104"; }
317
+.fi-align-right:before { content: "\f105"; }
318
+.fi-anchor:before { content: "\f106"; }
319
+.fi-annotate:before { content: "\f107"; }
320
+.fi-archive:before { content: "\f108"; }
321
+.fi-arrow-down:before { content: "\f109"; }
322
+.fi-arrow-left:before { content: "\f10a"; }
323
+.fi-arrow-right:before { content: "\f10b"; }
324
+.fi-arrow-up:before { content: "\f10c"; }
325
+.fi-arrows-compress:before { content: "\f10d"; }
326
+.fi-arrows-expand:before { content: "\f10e"; }
327
+.fi-arrows-in:before { content: "\f10f"; }
328
+.fi-arrows-out:before { content: "\f110"; }
329
+.fi-asl:before { content: "\f111"; }
330
+.fi-asterisk:before { content: "\f112"; }
331
+.fi-at-sign:before { content: "\f113"; }
332
+.fi-background-color:before { content: "\f114"; }
333
+.fi-battery-empty:before { content: "\f115"; }
334
+.fi-battery-full:before { content: "\f116"; }
335
+.fi-battery-half:before { content: "\f117"; }
336
+.fi-bitcoin-circle:before { content: "\f118"; }
337
+.fi-bitcoin:before { content: "\f119"; }
338
+.fi-blind:before { content: "\f11a"; }
339
+.fi-bluetooth:before { content: "\f11b"; }
340
+.fi-bold:before { content: "\f11c"; }
341
+.fi-book-bookmark:before { content: "\f11d"; }
342
+.fi-book:before { content: "\f11e"; }
343
+.fi-bookmark:before { content: "\f11f"; }
344
+.fi-braille:before { content: "\f120"; }
345
+.fi-burst-new:before { content: "\f121"; }
346
+.fi-burst-sale:before { content: "\f122"; }
347
+.fi-burst:before { content: "\f123"; }
348
+.fi-calendar:before { content: "\f124"; }
349
+.fi-camera:before { content: "\f125"; }
350
+.fi-check:before { content: "\f126"; }
351
+.fi-checkbox:before { content: "\f127"; }
352
+.fi-clipboard-notes:before { content: "\f128"; }
353
+.fi-clipboard-pencil:before { content: "\f129"; }
354
+.fi-clipboard:before { content: "\f12a"; }
355
+.fi-clock:before { content: "\f12b"; }
356
+.fi-closed-caption:before { content: "\f12c"; }
357
+.fi-cloud:before { content: "\f12d"; }
358
+.fi-comment-minus:before { content: "\f12e"; }
359
+.fi-comment-quotes:before { content: "\f12f"; }
360
+.fi-comment-video:before { content: "\f130"; }
361
+.fi-comment:before { content: "\f131"; }
362
+.fi-comments:before { content: "\f132"; }
363
+.fi-compass:before { content: "\f133"; }
364
+.fi-contrast:before { content: "\f134"; }
365
+.fi-credit-card:before { content: "\f135"; }
366
+.fi-crop:before { content: "\f136"; }
367
+.fi-crown:before { content: "\f137"; }
368
+.fi-css3:before { content: "\f138"; }
369
+.fi-database:before { content: "\f139"; }
370
+.fi-die-five:before { content: "\f13a"; }
371
+.fi-die-four:before { content: "\f13b"; }
372
+.fi-die-one:before { content: "\f13c"; }
373
+.fi-die-six:before { content: "\f13d"; }
374
+.fi-die-three:before { content: "\f13e"; }
375
+.fi-die-two:before { content: "\f13f"; }
376
+.fi-dislike:before { content: "\f140"; }
377
+.fi-dollar-bill:before { content: "\f141"; }
378
+.fi-dollar:before { content: "\f142"; }
379
+.fi-download:before { content: "\f143"; }
380
+.fi-eject:before { content: "\f144"; }
381
+.fi-elevator:before { content: "\f145"; }
382
+.fi-euro:before { content: "\f146"; }
383
+.fi-eye:before { content: "\f147"; }
384
+.fi-fast-forward:before { content: "\f148"; }
385
+.fi-female-symbol:before { content: "\f149"; }
386
+.fi-female:before { content: "\f14a"; }
387
+.fi-filter:before { content: "\f14b"; }
388
+.fi-first-aid:before { content: "\f14c"; }
389
+.fi-flag:before { content: "\f14d"; }
390
+.fi-folder-add:before { content: "\f14e"; }
391
+.fi-folder-lock:before { content: "\f14f"; }
392
+.fi-folder:before { content: "\f150"; }
393
+.fi-foot:before { content: "\f151"; }
394
+.fi-foundation:before { content: "\f152"; }
395
+.fi-graph-bar:before { content: "\f153"; }
396
+.fi-graph-horizontal:before { content: "\f154"; }
397
+.fi-graph-pie:before { content: "\f155"; }
398
+.fi-graph-trend:before { content: "\f156"; }
399
+.fi-guide-dog:before { content: "\f157"; }
400
+.fi-hearing-aid:before { content: "\f158"; }
401
+.fi-heart:before { content: "\f159"; }
402
+.fi-home:before { content: "\f15a"; }
403
+.fi-html5:before { content: "\f15b"; }
404
+.fi-indent-less:before { content: "\f15c"; }
405
+.fi-indent-more:before { content: "\f15d"; }
406
+.fi-info:before { content: "\f15e"; }
407
+.fi-italic:before { content: "\f15f"; }
408
+.fi-key:before { content: "\f160"; }
409
+.fi-laptop:before { content: "\f161"; }
410
+.fi-layout:before { content: "\f162"; }
411
+.fi-lightbulb:before { content: "\f163"; }
412
+.fi-like:before { content: "\f164"; }
413
+.fi-link:before { content: "\f165"; }
414
+.fi-list-bullet:before { content: "\f166"; }
415
+.fi-list-number:before { content: "\f167"; }
416
+.fi-list-thumbnails:before { content: "\f168"; }
417
+.fi-list:before { content: "\f169"; }
418
+.fi-lock:before { content: "\f16a"; }
419
+.fi-loop:before { content: "\f16b"; }
420
+.fi-magnifying-glass:before { content: "\f16c"; }
421
+.fi-mail:before { content: "\f16d"; }
422
+.fi-male-female:before { content: "\f16e"; }
423
+.fi-male-symbol:before { content: "\f16f"; }
424
+.fi-male:before { content: "\f170"; }
425
+.fi-map:before { content: "\f171"; }
426
+.fi-marker:before { content: "\f172"; }
427
+.fi-megaphone:before { content: "\f173"; }
428
+.fi-microphone:before { content: "\f174"; }
429
+.fi-minus-circle:before { content: "\f175"; }
430
+.fi-minus:before { content: "\f176"; }
431
+.fi-mobile-signal:before { content: "\f177"; }
432
+.fi-mobile:before { content: "\f178"; }
433
+.fi-monitor:before { content: "\f179"; }
434
+.fi-mountains:before { content: "\f17a"; }
435
+.fi-music:before { content: "\f17b"; }
436
+.fi-next:before { content: "\f17c"; }
437
+.fi-no-dogs:before { content: "\f17d"; }
438
+.fi-no-smoking:before { content: "\f17e"; }
439
+.fi-page-add:before { content: "\f17f"; }
440
+.fi-page-copy:before { content: "\f180"; }
441
+.fi-page-csv:before { content: "\f181"; }
442
+.fi-page-delete:before { content: "\f182"; }
443
+.fi-page-doc:before { content: "\f183"; }
444
+.fi-page-edit:before { content: "\f184"; }
445
+.fi-page-export-csv:before { content: "\f185"; }
446
+.fi-page-export-doc:before { content: "\f186"; }
447
+.fi-page-export-pdf:before { content: "\f187"; }
448
+.fi-page-export:before { content: "\f188"; }
449
+.fi-page-filled:before { content: "\f189"; }
450
+.fi-page-multiple:before { content: "\f18a"; }
451
+.fi-page-pdf:before { content: "\f18b"; }
452
+.fi-page-remove:before { content: "\f18c"; }
453
+.fi-page-search:before { content: "\f18d"; }
454
+.fi-page:before { content: "\f18e"; }
455
+.fi-paint-bucket:before { content: "\f18f"; }
456
+.fi-paperclip:before { content: "\f190"; }
457
+.fi-pause:before { content: "\f191"; }
458
+.fi-paw:before { content: "\f192"; }
459
+.fi-paypal:before { content: "\f193"; }
460
+.fi-pencil:before { content: "\f194"; }
461
+.fi-photo:before { content: "\f195"; }
462
+.fi-play-circle:before { content: "\f196"; }
463
+.fi-play-video:before { content: "\f197"; }
464
+.fi-play:before { content: "\f198"; }
465
+.fi-plus:before { content: "\f199"; }
466
+.fi-pound:before { content: "\f19a"; }
467
+.fi-power:before { content: "\f19b"; }
468
+.fi-previous:before { content: "\f19c"; }
469
+.fi-price-tag:before { content: "\f19d"; }
470
+.fi-pricetag-multiple:before { content: "\f19e"; }
471
+.fi-print:before { content: "\f19f"; }
472
+.fi-prohibited:before { content: "\f1a0"; }
473
+.fi-projection-screen:before { content: "\f1a1"; }
474
+.fi-puzzle:before { content: "\f1a2"; }
475
+.fi-quote:before { content: "\f1a3"; }
476
+.fi-record:before { content: "\f1a4"; }
477
+.fi-refresh:before { content: "\f1a5"; }
478
+.fi-results-demographics:before { content: "\f1a6"; }
479
+.fi-results:before { content: "\f1a7"; }
480
+.fi-rewind-ten:before { content: "\f1a8"; }
481
+.fi-rewind:before { content: "\f1a9"; }
482
+.fi-rss:before { content: "\f1aa"; }
483
+.fi-safety-cone:before { content: "\f1ab"; }
484
+.fi-save:before { content: "\f1ac"; }
485
+.fi-share:before { content: "\f1ad"; }
486
+.fi-sheriff-badge:before { content: "\f1ae"; }
487
+.fi-shield:before { content: "\f1af"; }
488
+.fi-shopping-bag:before { content: "\f1b0"; }
489
+.fi-shopping-cart:before { content: "\f1b1"; }
490
+.fi-shuffle:before { content: "\f1b2"; }
491
+.fi-skull:before { content: "\f1b3"; }
492
+.fi-social-500px:before { content: "\f1b4"; }
493
+.fi-social-adobe:before { content: "\f1b5"; }
494
+.fi-social-amazon:before { content: "\f1b6"; }
495
+.fi-social-android:before { content: "\f1b7"; }
496
+.fi-social-apple:before { content: "\f1b8"; }
497
+.fi-social-behance:before { content: "\f1b9"; }
498
+.fi-social-bing:before { content: "\f1ba"; }
499
+.fi-social-blogger:before { content: "\f1bb"; }
500
+.fi-social-delicious:before { content: "\f1bc"; }
501
+.fi-social-designer-news:before { content: "\f1bd"; }
502
+.fi-social-deviant-art:before { content: "\f1be"; }
503
+.fi-social-digg:before { content: "\f1bf"; }
504
+.fi-social-dribbble:before { content: "\f1c0"; }
505
+.fi-social-drive:before { content: "\f1c1"; }
506
+.fi-social-dropbox:before { content: "\f1c2"; }
507
+.fi-social-evernote:before { content: "\f1c3"; }
508
+.fi-social-facebook:before { content: "\f1c4"; }
509
+.fi-social-flickr:before { content: "\f1c5"; }
510
+.fi-social-forrst:before { content: "\f1c6"; }
511
+.fi-social-foursquare:before { content: "\f1c7"; }
512
+.fi-social-game-center:before { content: "\f1c8"; }
513
+.fi-social-github:before { content: "\f1c9"; }
514
+.fi-social-google-plus:before { content: "\f1ca"; }
515
+.fi-social-hacker-news:before { content: "\f1cb"; }
516
+.fi-social-hi5:before { content: "\f1cc"; }
517
+.fi-social-instagram:before { content: "\f1cd"; }
518
+.fi-social-joomla:before { content: "\f1ce"; }
519
+.fi-social-lastfm:before { content: "\f1cf"; }
520
+.fi-social-linkedin:before { content: "\f1d0"; }
521
+.fi-social-medium:before { content: "\f1d1"; }
522
+.fi-social-myspace:before { content: "\f1d2"; }
523
+.fi-social-orkut:before { content: "\f1d3"; }
524
+.fi-social-path:before { content: "\f1d4"; }
525
+.fi-social-picasa:before { content: "\f1d5"; }
526
+.fi-social-pinterest:before { content: "\f1d6"; }
527
+.fi-social-rdio:before { content: "\f1d7"; }
528
+.fi-social-reddit:before { content: "\f1d8"; }
529
+.fi-social-skillshare:before { content: "\f1d9"; }
530
+.fi-social-skype:before { content: "\f1da"; }
531
+.fi-social-smashing-mag:before { content: "\f1db"; }
532
+.fi-social-snapchat:before { content: "\f1dc"; }
533
+.fi-social-spotify:before { content: "\f1dd"; }
534
+.fi-social-squidoo:before { content: "\f1de"; }
535
+.fi-social-stack-overflow:before { content: "\f1df"; }
536
+.fi-social-steam:before { content: "\f1e0"; }
537
+.fi-social-stumbleupon:before { content: "\f1e1"; }
538
+.fi-social-treehouse:before { content: "\f1e2"; }
539
+.fi-social-tumblr:before { content: "\f1e3"; }
540
+.fi-social-twitter:before { content: "\f1e4"; }
541
+.fi-social-vimeo:before { content: "\f1e5"; }
542
+.fi-social-windows:before { content: "\f1e6"; }
543
+.fi-social-xbox:before { content: "\f1e7"; }
544
+.fi-social-yahoo:before { content: "\f1e8"; }
545
+.fi-social-yelp:before { content: "\f1e9"; }
546
+.fi-social-youtube:before { content: "\f1ea"; }
547
+.fi-social-zerply:before { content: "\f1eb"; }
548
+.fi-social-zurb:before { content: "\f1ec"; }
549
+.fi-sound:before { content: "\f1ed"; }
550
+.fi-star:before { content: "\f1ee"; }
551
+.fi-stop:before { content: "\f1ef"; }
552
+.fi-strikethrough:before { content: "\f1f0"; }
553
+.fi-subscript:before { content: "\f1f1"; }
554
+.fi-superscript:before { content: "\f1f2"; }
555
+.fi-tablet-landscape:before { content: "\f1f3"; }
556
+.fi-tablet-portrait:before { content: "\f1f4"; }
557
+.fi-target-two:before { content: "\f1f5"; }
558
+.fi-target:before { content: "\f1f6"; }
559
+.fi-telephone-accessible:before { content: "\f1f7"; }
560
+.fi-telephone:before { content: "\f1f8"; }
561
+.fi-text-color:before { content: "\f1f9"; }
562
+.fi-thumbnails:before { content: "\f1fa"; }
563
+.fi-ticket:before { content: "\f1fb"; }
564
+.fi-torso-business:before { content: "\f1fc"; }
565
+.fi-torso-female:before { content: "\f1fd"; }
566
+.fi-torso:before { content: "\f1fe"; }
567
+.fi-torsos-all-female:before { content: "\f1ff"; }
568
+.fi-torsos-all:before { content: "\f200"; }
569
+.fi-torsos-female-male:before { content: "\f201"; }
570
+.fi-torsos-male-female:before { content: "\f202"; }
571
+.fi-torsos:before { content: "\f203"; }
572
+.fi-trash:before { content: "\f204"; }
573
+.fi-trees:before { content: "\f205"; }
574
+.fi-trophy:before { content: "\f206"; }
575
+.fi-underline:before { content: "\f207"; }
576
+.fi-universal-access:before { content: "\f208"; }
577
+.fi-unlink:before { content: "\f209"; }
578
+.fi-unlock:before { content: "\f20a"; }
579
+.fi-upload-cloud:before { content: "\f20b"; }
580
+.fi-upload:before { content: "\f20c"; }
581
+.fi-usb:before { content: "\f20d"; }
582
+.fi-video:before { content: "\f20e"; }
583
+.fi-volume-none:before { content: "\f20f"; }
584
+.fi-volume-strike:before { content: "\f210"; }
585
+.fi-volume:before { content: "\f211"; }
586
+.fi-web:before { content: "\f212"; }
587
+.fi-wheelchair:before { content: "\f213"; }
588
+.fi-widget:before { content: "\f214"; }
589
+.fi-wrench:before { content: "\f215"; }
590
+.fi-x-circle:before { content: "\f216"; }
591
+.fi-x:before { content: "\f217"; }
592
+.fi-yen:before { content: "\f218"; }
593
+.fi-zoom-in:before { content: "\f219"; }
594
+.fi-zoom-out:before { content: "\f21a"; }

BIN
data/presentation/0.9.0/css/foundation-icons.eot Vedi File


BIN
data/presentation/0.9.0/css/foundation-icons.ttf Vedi File


BIN
data/presentation/0.9.0/css/foundation-icons.woff Vedi File


+ 6580
- 0
data/presentation/0.9.0/css/foundation.css
File diff soppresso perché troppo grande
Vedi File


+ 424
- 0
data/presentation/0.9.0/css/normalize.css Vedi File

@@ -0,0 +1,424 @@
1
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
2
+
3
+/**
4
+ * 1. Set default font family to sans-serif.
5
+ * 2. Prevent iOS and IE text size adjust after device orientation change,
6
+ *    without disabling user zoom.
7
+ */
8
+
9
+html {
10
+  font-family: sans-serif; /* 1 */
11
+  -ms-text-size-adjust: 100%; /* 2 */
12
+  -webkit-text-size-adjust: 100%; /* 2 */
13
+}
14
+
15
+/**
16
+ * Remove default margin.
17
+ */
18
+
19
+body {
20
+  margin: 0;
21
+}
22
+
23
+/* HTML5 display definitions
24
+   ========================================================================== */
25
+
26
+/**
27
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
28
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
29
+ * and Firefox.
30
+ * Correct `block` display not defined for `main` in IE 11.
31
+ */
32
+
33
+article,
34
+aside,
35
+details,
36
+figcaption,
37
+figure,
38
+footer,
39
+header,
40
+hgroup,
41
+main,
42
+menu,
43
+nav,
44
+section,
45
+summary {
46
+  display: block;
47
+}
48
+
49
+/**
50
+ * 1. Correct `inline-block` display not defined in IE 8/9.
51
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
52
+ */
53
+
54
+audio,
55
+canvas,
56
+progress,
57
+video {
58
+  display: inline-block; /* 1 */
59
+  vertical-align: baseline; /* 2 */
60
+}
61
+
62
+/**
63
+ * Prevent modern browsers from displaying `audio` without controls.
64
+ * Remove excess height in iOS 5 devices.
65
+ */
66
+
67
+audio:not([controls]) {
68
+  display: none;
69
+  height: 0;
70
+}
71
+
72
+/**
73
+ * Address `[hidden]` styling not present in IE 8/9/10.
74
+ * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
75
+ */
76
+
77
+[hidden],
78
+template {
79
+  display: none;
80
+}
81
+
82
+/* Links
83
+   ========================================================================== */
84
+
85
+/**
86
+ * Remove the gray background color from active links in IE 10.
87
+ */
88
+
89
+a {
90
+  background-color: transparent;
91
+}
92
+
93
+/**
94
+ * Improve readability of focused elements when they are also in an
95
+ * active/hover state.
96
+ */
97
+
98
+a:active,
99
+a:hover {
100
+  outline: 0;
101
+}
102
+
103
+/* Text-level semantics
104
+   ========================================================================== */
105
+
106
+/**
107
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
108
+ */
109
+
110
+abbr[title] {
111
+  border-bottom: 1px dotted;
112
+}
113
+
114
+/**
115
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
116
+ */
117
+
118
+b,
119
+strong {
120
+  font-weight: bold;
121
+}
122
+
123
+/**
124
+ * Address styling not present in Safari and Chrome.
125
+ */
126
+
127
+dfn {
128
+  font-style: italic;
129
+}
130
+
131
+/**
132
+ * Address variable `h1` font-size and margin within `section` and `article`
133
+ * contexts in Firefox 4+, Safari, and Chrome.
134
+ */
135
+
136
+h1 {
137
+  font-size: 2em;
138
+  margin: 0.67em 0;
139
+}
140
+
141
+/**
142
+ * Address styling not present in IE 8/9.
143
+ */
144
+
145
+mark {
146
+  background: #ff0;
147
+  color: #000;
148
+}
149
+
150
+/**
151
+ * Address inconsistent and variable font size in all browsers.
152
+ */
153
+
154
+small {
155
+  font-size: 80%;
156
+}
157
+
158
+/**
159
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
160
+ */
161
+
162
+sub,
163
+sup {
164
+  font-size: 75%;
165
+  line-height: 0;
166
+  position: relative;
167
+  vertical-align: baseline;
168
+}
169
+
170
+sup {
171
+  top: -0.5em;
172
+}
173
+
174
+sub {
175
+  bottom: -0.25em;
176
+}
177
+
178
+/* Embedded content
179
+   ========================================================================== */
180
+
181
+/**
182
+ * Remove border when inside `a` element in IE 8/9/10.
183
+ */
184
+
185
+img {
186
+  border: 0;
187
+}
188
+
189
+/**
190
+ * Correct overflow not hidden in IE 9/10/11.
191
+ */
192
+
193
+svg:not(:root) {
194
+  overflow: hidden;
195
+}
196
+
197
+/* Grouping content
198
+   ========================================================================== */
199
+
200
+/**
201
+ * Address margin not present in IE 8/9 and Safari.
202
+ */
203
+
204
+figure {
205
+  margin: 1em 40px;
206
+}
207
+
208
+/**
209
+ * Address differences between Firefox and other browsers.
210
+ */
211
+
212
+hr {
213
+  box-sizing: content-box;
214
+  height: 0;
215
+}
216
+
217
+/**
218
+ * Contain overflow in all browsers.
219
+ */
220
+
221
+pre {
222
+  overflow: auto;
223
+}
224
+
225
+/**
226
+ * Address odd `em`-unit font size rendering in all browsers.
227
+ */
228
+
229
+code,
230
+kbd,
231
+pre,
232
+samp {
233
+  font-family: monospace, monospace;
234
+  font-size: 1em;
235
+}
236
+
237
+/* Forms
238
+   ========================================================================== */
239
+
240
+/**
241
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
242
+ * styling of `select`, unless a `border` property is set.
243
+ */
244
+
245
+/**
246
+ * 1. Correct color not being inherited.
247
+ *    Known issue: affects color of disabled elements.
248
+ * 2. Correct font properties not being inherited.
249
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
250
+ */
251
+
252
+button,
253
+input,
254
+optgroup,
255
+select,
256
+textarea {
257
+  color: inherit; /* 1 */
258
+  font: inherit; /* 2 */
259
+  margin: 0; /* 3 */
260
+}
261
+
262
+/**
263
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
264
+ */
265
+
266
+button {
267
+  overflow: visible;
268
+}
269
+
270
+/**
271
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
272
+ * All other form control elements do not inherit `text-transform` values.
273
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
274
+ * Correct `select` style inheritance in Firefox.
275
+ */
276
+
277
+button,
278
+select {
279
+  text-transform: none;
280
+}
281
+
282
+/**
283
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
284
+ *    and `video` controls.
285
+ * 2. Correct inability to style clickable `input` types in iOS.
286
+ * 3. Improve usability and consistency of cursor style between image-type
287
+ *    `input` and others.
288
+ */
289
+
290
+button,
291
+html input[type="button"], /* 1 */
292
+input[type="reset"],
293
+input[type="submit"] {
294
+  -webkit-appearance: button; /* 2 */
295
+  cursor: pointer; /* 3 */
296
+}
297
+
298
+/**
299
+ * Re-set default cursor for disabled elements.
300
+ */
301
+
302
+button[disabled],
303
+html input[disabled] {
304
+  cursor: default;
305
+}
306
+
307
+/**
308
+ * Remove inner padding and border in Firefox 4+.
309
+ */
310
+
311
+button::-moz-focus-inner,
312
+input::-moz-focus-inner {
313
+  border: 0;
314
+  padding: 0;
315
+}
316
+
317
+/**
318
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
319
+ * the UA stylesheet.
320
+ */
321
+
322
+input {
323
+  line-height: normal;
324
+}
325
+
326
+/**
327
+ * It's recommended that you don't attempt to style these elements.
328
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
329
+ *
330
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
331
+ * 2. Remove excess padding in IE 8/9/10.
332
+ */
333
+
334
+input[type="checkbox"],
335
+input[type="radio"] {
336
+  box-sizing: border-box; /* 1 */
337
+  padding: 0; /* 2 */
338
+}
339
+
340
+/**
341
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
342
+ * `font-size` values of the `input`, it causes the cursor style of the
343
+ * decrement button to change from `default` to `text`.
344
+ */
345
+
346
+input[type="number"]::-webkit-inner-spin-button,
347
+input[type="number"]::-webkit-outer-spin-button {
348
+  height: auto;
349
+}
350
+
351
+/**
352
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
353
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
354
+ */
355
+
356
+input[type="search"] {
357
+  -webkit-appearance: textfield; /* 1 */
358
+  box-sizing: content-box; /* 2 */
359
+}
360
+
361
+/**
362
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
363
+ * Safari (but not Chrome) clips the cancel button when the search input has
364
+ * padding (and `textfield` appearance).
365
+ */
366
+
367
+input[type="search"]::-webkit-search-cancel-button,
368
+input[type="search"]::-webkit-search-decoration {
369
+  -webkit-appearance: none;
370
+}
371
+
372
+/**
373
+ * Define consistent border, margin, and padding.
374
+ */
375
+
376
+fieldset {
377
+  border: 1px solid #c0c0c0;
378
+  margin: 0 2px;
379
+  padding: 0.35em 0.625em 0.75em;
380
+}
381
+
382
+/**
383
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
384
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
385
+ */
386
+
387
+legend {
388
+  border: 0; /* 1 */
389
+  padding: 0; /* 2 */
390
+}
391
+
392
+/**
393
+ * Remove default vertical scrollbar in IE 8/9/10/11.
394
+ */
395
+
396
+textarea {
397
+  overflow: auto;
398
+}
399
+
400
+/**
401
+ * Don't inherit the `font-weight` (applied by a rule above).
402
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
403
+ */
404
+
405
+optgroup {
406
+  font-weight: bold;
407
+}
408
+
409
+/* Tables
410
+   ========================================================================== */
411
+
412
+/**
413
+ * Remove most spacing between table cells.
414
+ */
415
+
416
+table {
417
+  border-collapse: collapse;
418
+  border-spacing: 0;
419
+}
420
+
421
+td,
422
+th {
423
+  padding: 0;
424
+}

+ 20
- 0
data/presentation/0.9.0/lib/foundation.min.js
File diff soppresso perché troppo grande
Vedi File


+ 21
- 0
data/presentation/0.9.0/lib/jquery-ui-1.8.23.custom.min.js
File diff soppresso perché troppo grande
Vedi File


+ 5
- 0
data/presentation/0.9.0/lib/jquery-ui.min.js
File diff soppresso perché troppo grande
Vedi File


+ 0
- 0
data/presentation/0.9.0/lib/jquery.min.js Vedi File


Dato che sono stati cambiati molti file in questo diff, alcuni di essi non verranno mostrati

Loading…
Annulla
Salva