r62940 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r62939‎ | r62940 | r62941 >
Date:00:52, 25 February 2010
Author:dale
Status:deferred
Tags:
Comment:
* improved fullscreen support
* moved direct reference to player height width to getters
* fixed testLang page
Modified paths:
  • /branches/js2-work/phase3/js/mwEmbed/modules/AddMedia/mw.RemoteSearchDriver.js (modified) (history)
  • /branches/js2-work/phase3/js/mwEmbed/modules/EmbedPlayer/genericEmbed.js (modified) (history)
  • /branches/js2-work/phase3/js/mwEmbed/modules/EmbedPlayer/javaEmbed.js (modified) (history)
  • /branches/js2-work/phase3/js/mwEmbed/modules/EmbedPlayer/kplayerEmbed.js (modified) (history)
  • /branches/js2-work/phase3/js/mwEmbed/modules/EmbedPlayer/loader.js (modified) (history)
  • /branches/js2-work/phase3/js/mwEmbed/modules/EmbedPlayer/mw.EmbedPlayer.js (modified) (history)
  • /branches/js2-work/phase3/js/mwEmbed/modules/EmbedPlayer/vlcEmbed.js (modified) (history)
  • /branches/js2-work/phase3/js/mwEmbed/modules/TimedText/jquery.menu/jquery.menu.js (modified) (history)
  • /branches/js2-work/phase3/js/mwEmbed/modules/TimedText/mw.TimedText.js (modified) (history)
  • /branches/js2-work/phase3/js/mwEmbed/skins/ctrlBuilder.js (modified) (history)
  • /branches/js2-work/phase3/js/mwEmbed/skins/kskin/EmbedPlayer.css (modified) (history)
  • /branches/js2-work/phase3/js/mwEmbed/skins/kskin/kskinConfig.js (modified) (history)
  • /branches/js2-work/phase3/js/mwEmbed/tests/Player_Themable.html (modified) (history)
  • /branches/js2-work/phase3/js/mwEmbed/tests/testLang.html (modified) (history)

Diff [purge]

Index: branches/js2-work/phase3/js/mwEmbed/tests/testLang.html
@@ -8,11 +8,12 @@
99 }
1010 </style>
1111 <script type="text/javascript" >
12 -//for just setting one or two to test at a time for debug
13 -//var langKeyDebug = [ 'lt' ]; //pl
14 -var langKeyDebug = mw.getConfig( 'languageCodeList' );
1512
1613 mw.ready( function(){
 14+ //for just setting one or two to test at a time for debug
 15+ //var langTestSet = [ 'lt' ]; //pl
 16+ var langTestSet = mw.getConfig( 'languageCodeList' );
 17+
1718 //do mauall script loaders calls to test multiple languages:
1819 function doLangTable( langSet ){
1920 //build table output:
@@ -34,11 +35,12 @@
3536 * proccess a language key test set
3637 */
3738 function doProcLangKey( langKey ){
 39+ mw.log(" doProcLangKey: " + langKey );
3840 // Clear out the old digitTransformTable
3941 mw.lang.digitTransformTable = null;
4042 //Load the current language js file
4143 var langName = 'Language' + langKey.substr(0,1).toUpperCase() + langKey.substr( 1,langKey.length );
42 - $j.getScript( '../includes/languages/classes/' + langName + '.js' , function(){
 44+ $j.getScript( '../languages/classes/' + langName + '.js' , function(){
4345 // Get the current language mw.testLang js
4446 $j.getScript( '../../../mwScriptLoader.php?class=mw.testLang&debug=true&uselang='+langKey, function(){
4547 var o='';
@@ -133,10 +135,11 @@
134136 });
135137 });
136138 }//procc lang key:
 139+
137140 doProcLangKey( langSet.pop() );
138141 }
139142 //by default run the "debug" set:
140 - doLangTable( langKeyDebug );
 143+ doLangTable( langTestSet );
141144 });
142145
143146 </script>
Index: branches/js2-work/phase3/js/mwEmbed/tests/Player_Themable.html
@@ -12,8 +12,7 @@
1313 <script type="text/javascript" src="../mwEmbed.js?debug=true"></script>
1414
1515 -->
16 -
17 -<script type="text/javascript" src="../jsScriptLoader.php?debug=true&class=mwEmbed"></script>
 16+ <script type="text/javascript" src="../jsScriptLoader.php?debug=true&class=mwEmbed"></script>
1817
1918 </head>
2019 <script type="text/javascript">
@@ -32,7 +31,7 @@
3332 durationHint="60" >
3433 </video>
3534
36 -<!--
 35+
3736 <video
3837 style="width:208px;height:160px;float:left"
3938 src="http://upload.wikimedia.org/wikipedia/commons/2/29/Charles_Lindbergh_flight_to_Brussels.ogg"
@@ -70,8 +69,8 @@
7170 <textarea cols="50" rows="7"><video class="kskin" style="width:400px;height:288px" poster="http://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Charles_Lindbergh_flight_to_Brussels.ogg/mid-Charles_Lindbergh_flight_to_Brussels.ogg.jpg"
7271 src="http://upload.wikimedia.org/wikipedia/commons/2/29/Charles_Lindbergh_flight_to_Brussels.ogg"></video></textarea>
7372 </div>
74 - -->
7573
 74+
7675 </body>
7776 </html>
7877
Index: branches/js2-work/phase3/js/mwEmbed/skins/kskin/EmbedPlayer.css
@@ -164,7 +164,6 @@
165165 float: left;
166166 font-size: 11px;
167167 padding: 13px 10px 15px 15px;
168 - width: 320px;
169168 }
170169
171170 .k-player ul.k-menu-bar {
@@ -181,13 +180,11 @@
182181 .k-player .k-menu {
183182 background: none repeat scroll 0 0 #181818;
184183 border: medium none;
185 - display: none;
186 - height: 300px;
 184+ display: none;
187185 left: 0;
188186 opacity: 0.9;
189187 position: absolute;
190 - top: 0;
191 - width: 400px;
 188+ top: 0;
192189 z-index: 999;
193190 }
194191
@@ -396,7 +393,7 @@
397394 bottom:30px;
398395 left:15px;
399396 position:absolute;
400 - right:61px;
 397+ right:30px;
401398 top:48px;
402399 }
403400 .k-player .credits_box a{
@@ -411,7 +408,7 @@
412409 .k-player .k-attribution{
413410 position:absolute;
414411 bottom: 15px;
415 - right : 62px;
 412+ right : 30px;
416413 background: url("images/kaltura_open_source_video_platform.png");
417414 width : 51px;
418415 height : 12px;
Index: branches/js2-work/phase3/js/mwEmbed/skins/kskin/kskinConfig.js
@@ -1,5 +1,5 @@
22 /**
3 -* skin js allows you to override contrlBuilder html/class output
 3+* Skin js allows you to override contrlBuilder html/class output
44 */
55
66 mw.addMessages( {
@@ -14,8 +14,8 @@
1515 // Display time string length
1616 longTimeDisp: false,
1717
18 - // Options are handled internally
19 - external_options: false,
 18+ // Default control bar height
 19+ height: 20,
2020
2121 // Volume control layout is horizontal
2222 volume_layout: 'horizontal',
@@ -43,7 +43,7 @@
4444 )
4545 }
4646 },
47 - 'volumeControl':{
 47+ 'volumeControl': {
4848 'w':40
4949 },
5050 // No kalturaAttribution component for kSkin ( its integrated into the credits screen )
@@ -62,15 +62,23 @@
6363 $menuOverlay = $j( '<div />')
6464 .addClass( 'k-menu ui-widget-content' )
6565 .css( {
66 - 'width' : ctrlObj.getOverlayWidth(),
67 - 'height' : ctrlObj.getOverlayHeight()
 66+ 'width' : '100%',
 67+ 'position': 'absolute',
 68+ 'top' : '0px'
6869 } );
 70+
 71+ if( ctrlObj.checkOverlayControls() ){
 72+ // Set to overlayheight - ( control bar height + 2 for borders )
 73+ $menuOverlay.css( 'bottom', ctrlObj.getHeight() + 2 );
 74+ }else{
 75+ $menuOverlay.css( 'bottom', 0 );
 76+ }
6977
7078 // Setup menu offset ( if player height < getOverlayHeight )
7179 // This displays the menu outside of the player on small embeds
7280 if ( embedPlayer.getPlayerHeight() < ctrlObj.getOverlayHeight() ) {
7381
74 - $menuOverlay.css( 'top', parseInt( embedPlayer.getPlayerHeight() + ctrlObj.getControlBarHeight() ) + 'px' );
 82+ $menuOverlay.css( 'top', parseInt( embedPlayer.getPlayerHeight() + ctrlObj.getHeight() ) + 'px' );
7583
7684 // Special common overflow hack for thumbnail display of player
7785 $j( embedPlayer ).parents( '.thumbinner' ).css( 'overflow', 'visible' );
@@ -101,8 +109,11 @@
102110 var $menuScreens = $j( '<div />' )
103111 .addClass( 'k-menu-screens' )
104112 .css( {
105 - 'width' : ( ctrlObj.getOverlayWidth() - 75 ),
106 - 'height' : ( ctrlObj.getOverlayHeight() - ctrlObj.getControlBarHeight() )
 113+ 'position' : 'absolute',
 114+ 'top' : '0px',
 115+ 'left' : '0px',
 116+ 'bottom' : '0px',
 117+ 'right' : '45px',
107118 } )
108119 for ( var menuItem in ctrlObj.supportedMenuItems ) {
109120 $menuScreens.append(
@@ -150,10 +161,9 @@
151162 this.$playerTarget.find( '.k-options' )
152163 .unbind()
153164 .click( function() {
154 - if ( _this.$playerTarget.find( '.k-menu' ).length == 0 ) {
155 -
 165+ if ( _this.$playerTarget.find( '.k-menu' ).length == 0 ) {
156166 // Stop the player if it does not support overlays:
157 - if ( !embedPlayer.supports['overlays'] ){
 167+ if ( !embedPlayer.supports['overlays'] ) {
158168 embedPlayer.stop();
159169 }
160170
Index: branches/js2-work/phase3/js/mwEmbed/skins/ctrlBuilder.js
@@ -22,14 +22,11 @@
2323 // Long string display of time value
2424 longTimeDisp: true,
2525
26 - // If the options menu outside of player
27 - external_options : true,
28 -
2926 // Default volume layout is "vertical"
3027 volume_layout : 'vertical',
3128
32 - // Default control bar height is 33
33 - height: 33,
 29+ // Default control bar height
 30+ height: 31,
3431
3532 // Default supported components is merged with embedPlayer set of supported types
3633 supportedComponets: {
@@ -51,7 +48,7 @@
5249
5350 // Flag to store the current fullscreen mode
5451 fullscreenMode: false,
55 -
 52+
5653 /**
5754 * Initialization Object for the control builder
5855 *
@@ -74,6 +71,14 @@
7572 },
7673
7774 /**
 75+ * Get the control bar height
 76+ * @return {Number} control bar height
 77+ */
 78+ getHeight: function(){
 79+ return this.height;
 80+ },
 81+
 82+ /**
7883 * Get the controls html
7984 * @return {String} html output of controls
8085 */
@@ -86,18 +91,37 @@
8792
8893 // Remove any old controls:
8994 embedPlayer.$interface.find( '.control-bar' ).remove();
90 -
91 - // Add some space to control_wrap for the control bar:
92 - embedPlayer.$interface.css( {
93 - 'height' : parseInt( embedPlayer.height ) + parseInt( this.height)
94 - } );
95 - embedPlayer.$interface.append(
96 - $j('<div>')
 95+
 96+ // Setup the controlBar container
 97+ var $controlBar = $j('<div>')
9798 .addClass( 'ui-state-default ui-widget-header ui-helper-clearfix control-bar' )
98 - .css('display', 'block')
99 - );
 99+ .css( 'height', this.height )
 100+
 101+ // Check for overlay controls:
 102+ if( _this.checkOverlayControls() ){
 103+ $controlBar.css({
 104+ 'position': 'absolute',
 105+ 'bottom' : '0px',
 106+ 'left' : '0px',
 107+ 'right' : '0px'
 108+ })
 109+ .hide()
 110+ // Make sure the interface is correct height:
 111+ embedPlayer.$interface.css( {
 112+ 'height' : parseInt( embedPlayer.height )
 113+ } );
 114+ } else {
 115+ // Add some space to interface for the control bar ( if not overlaying controls )
 116+ embedPlayer.$interface.css( {
 117+ 'height' : parseInt( embedPlayer.height ) + parseInt( this.height )
 118+ } );
 119+ // update the control bar display to "block"
 120+ $controlBar.css('display', 'block')
 121+ }
 122+ // add the controls to the interface
 123+ embedPlayer.$interface.append( $controlBar );
100124
101 - //Add the Controls with their bindings
 125+ // Add the Controls with their bindings
102126 this.addControlComponents();
103127
104128 // Add hooks once Controls are in DOM
@@ -149,7 +173,7 @@
150174 continue;
151175 }
152176
153 - // For now skip "fullscreen" for "audio" assets or where height is 0px
 177+ // Skip "fullscreen" button for assets or where height is 0px ( audio )
154178 if( component_id == 'fullscreen' && this.embedPlayer.height == 0 ){
155179 continue;
156180 }
@@ -169,18 +193,70 @@
170194 }
171195 }
172196 },
 197+
173198 /**
 199+ * Get the fullscreen player css
 200+ */
 201+ getFullscreenPlayerCss: function(){
 202+ var embedPlayer = this.embedPlayer;
 203+ // Setup target height width based on max window size
 204+ var fullWidth = $j( window ).width() - 2 ;
 205+ var fullHeight = $j( window ).height() ;
 206+
 207+ // Set target width
 208+ targetWidth = fullWidth;
 209+ targetHeight = targetWidth * ( embedPlayer.getHeight() / embedPlayer.getWidth() )
 210+ // Check if it exceeds the height constraint:
 211+ if( targetHeight > fullHeight ){
 212+ targetHeight = fullHeight;
 213+ targetWidth = targetHeight * ( embedPlayer.getWidth() / embedPlayer.getHeight() );
 214+ }
 215+ var offsetTop = ( targetHeight < fullHeight )? ( fullHeight- targetHeight ) / 2 : 0;
 216+ var offsetLeft = ( targetWidth < fullWidth )? ( fullWidth- targetWidth ) / 2 : 0;
 217+ //mw.log(" targetWidth: " + targetWidth + ' fullwidth: ' + fullWidth + ' :: ' + ( fullWidth- targetWidth ) / 2 );
 218+ return {
 219+ 'height': targetHeight,
 220+ 'width' : targetWidth,
 221+ 'top' : offsetTop,
 222+ 'left' : offsetLeft
 223+ }
 224+ },
 225+
 226+ /**
 227+ * Get the fullscreen play button css
 228+ */
 229+ getFullscreenPlayButtonCss: function(){
 230+ var pos = this.getFullscreenPlayerCss();
 231+ return {
 232+ 'left' : ( ( pos.width - this.getComponentWidth( 'playButtonLarge' ) ) / 2 ),
 233+ 'top' : ( ( pos.height - this.getComponentHeight( 'playButtonLarge' ) ) / 2 )
 234+ }
 235+ },
 236+
 237+ /**
 238+ * Get the fullscreen text css
 239+ */
 240+ getFullscreenTextCss: function(){
 241+ // Some arbitrary scale relative to window size
 242+ var textSize = ( $j( window ).width() / 8 ) + 20;
 243+ if( textSize < 95 ) textSize = 95;
 244+ if( textSize > 250 ) textSize = 250;
 245+ mw.log(' win size is: ' + $j( window ).width() + ' ts: ' + textSize );
 246+ return {
 247+ 'font-size' : textSize + '%'
 248+ }
 249+ },
 250+
 251+ /**
174252 * Toggles full screen by calling
175253 * doFullScreenPlayer to enable fullscreen mode
176 - * restoreWindowPlayer to restor window mode
 254+ * restoreWindowPlayer to restore window mode
177255 */
178256 toggleFullscreen: function(){
179257 if( this.fullscreenMode ){
180 - this.restoreWindowPlayer();
181 - this.fullscreenMode = false;
 258+ this.restoreWindowPlayer();
182259 }else{
183260 this.doFullScreenPlayer();
184 - this.fullscreenMode = true;
185261 }
186262 },
187263
@@ -188,126 +264,175 @@
189265 * Do full-screen mode
190266 */
191267 doFullScreenPlayer: function(){
192 - mw.log(" ctrlBuilder :: toggle full-screen ");
193 -
 268+ mw.log(" ctrlBuilder :: toggle full-screen ");
194269 // Setup pointer to control builder :
195270 var _this = this;
196271
197 - // Setup loadl refrence to embed player:
 272+ // Setup local reference to embed player:
198273 var embedPlayer = this.embedPlayer;
199274
200 - // Setup a local refrence to the player interface:
 275+ // Setup a local reference to the player interface:
201276 var $interface = embedPlayer.$interface;
202277
203 - // Add the black overlay:
 278+
 279+ // Check fullscreen state ( if already true do nothing )
 280+ if( this.fullscreenMode == true ){
 281+ return ;
 282+ }
 283+ this.fullscreenMode = true;
 284+
 285+ // Add the fullscreen black overlay:
204286 $j( '<div />' )
205287 .addClass( 'mw-fullscreen-overlay' )
206288 // Set some arbitrary high z-index
207 - .css('z-index', mw.getConfig( 'fullScreenIndex' ) )
 289+ .css('z-index', mw.getConfig( 'fullScreenIndex' ) -1)
208290 .appendTo('body')
209291 .hide()
210292 .fadeIn("slow");
211293
212 - // Setup target height width based on max window size
213 - var fullWidth = $j(window).width() - 5 ;
214 - var fullHeight = $j(window).height() -5;
 294+ // Set the video player margins to "auto" for centered resize
 295+ /*$j( embedPlayer ).css( {
 296+ 'margin' : 'auto'
 297+ } );*/
215298
216 - // Set target width
217 - targetWidth = fullWidth;
218 - targetHeight = targetWidth * ( embedPlayer.height / embedPlayer.width )
219 - // Check if it exted the height constrait:
220 - if( targetHeight > fullHeight ){
221 - targetHeight = fullHeight;
222 - targetWidth = targetHeight * ( embedPlayer.width / embedPlayer.height );
223 - }
224 -
225299 // Change the interface to absolute positioned:
226300 this.windowPositionStyle = $interface.css( 'position' );
 301+ this.windowZindex = $interface.css( 'z-index' );
 302+
227303 $interface.css( {
228304 'position' : 'absolute',
229 - 'z-index' : mw.getConfig( 'fullScreenIndex' ) + 1
230 - } );
231 -
 305+ 'z-index' : mw.getConfig( 'fullScreenIndex' )
 306+ } );
 307+
232308 // Get the base offset:
233 - this.windowOffset = $interface.offset();
 309+ this.windowOffset = $interface.offset();
234310 var topOffset = '0px';
235311 var leftOffset = '0px';
 312+
236313 //Check if we have an offsetParent
237 - if( $interface.offsetParent().length ){
 314+ if( $interface.offsetParent().get(0).tagName.toLowerCase() != 'body' ) {
238315 topOffset = -this.windowOffset.top + 'px';
239316 leftOffset = -this.windowOffset.left + 'px';
240317 }
 318+ // Resize interface container
241319 $interface.animate( {
242320 'top' : topOffset,
243321 'left' : leftOffset,
244 - 'width' : '99%',
245 - 'height' : '99%',
246 - 'z-index' : '999999'
 322+ 'width' : '100%',
 323+ 'height' : '100%'
247324 } )
248325
249326 // Set the player height width:
250 - $j( this.embedPlayer ).css( {
251 - 'position' : 'relative',
252 - 'z-index' : '999999'
253 - } )
 327+ $j( embedPlayer ).css( {
 328+ 'position' : 'relative'
 329+ } )
254330 // Animate a zoom ( while keeping aspect )
255 - .animate( {
256 - 'top' : '0px',
257 - 'left' : '0px',
258 - 'width' : targetWidth,
259 - 'height' : targetHeight
260 - } )
 331+ .animate( _this.getFullscreenPlayerCss() );
261332
262 - /*
263 - -moz-transform:scale(1.97833) translate(-5px, 4px);
264 - -moz-transform-origin:50.0852% 45.6621%;
265 - left:0;
266 - position:relative;
267 - top:0;
268 - */
269 -
270 - // bind hide controls when mouse is not active
 333+ // Resize the timed text font size per window width
 334+ $interface.find( '.itext' ).animate( _this.getFullscreenTextCss() );
271335
272 - // bind resize reize window to resize window
 336+ // Reposition play-btn-large ( this is unfortunatly not easy to position with 'margin': 'auto'
 337+ $interface.find('.play-btn-large').animate( _this.getFullscreenPlayButtonCss() )
273338
274 - // bind escape to restore clip resolution
 339+ // Bind mouse move in interface to hide control bar
 340+ _this.mouseMovedFlag = false;
 341+ $interface.mousemove( function(e){
 342+ _this.mouseMovedFlag = true;
 343+ });
 344+ // Check every 2 seconds reset flag status:
 345+ function checkMovedMouse(){
 346+ mw.log("checkMovedMouse::" + _this.mouseMovedFlag );
 347+ if( _this.fullscreenMode ){
 348+ if( _this.mouseMovedFlag ){
 349+ _this.mouseMovedFlag = false;
 350+ _this.showControlBar();
 351+ // once we move the mouse keep displayed for 5 seconds
 352+ setTimeout(checkMovedMouse, 5000);
 353+ }else{
 354+ // Check for mouse movment every 250ms
 355+ _this.hideControlBar();
 356+ setTimeout(checkMovedMouse, 250 );
 357+ }
 358+ }
 359+ };
 360+ checkMovedMouse();
 361+
 362+
 363+
 364+ // Bind resize resize window to resize window
 365+ $j( window ).resize( function() {
 366+ // Update player size
 367+ $j( embedPlayer ).css( _this.getFullscreenPlayerCss() );
 368+
 369+ // Update play button pos
 370+ $interface.find('.play-btn-large').css( _this.getFullscreenPlayButtonCss() );
 371+
 372+ // Update the timed text size
 373+ $interface.find( '.itext' ).css( _this.getFullscreenTextCss() );
 374+ });
 375+
 376+ // Bind escape to restore clip resolution
275377 $j( window ).keyup( function(event) {
276378 // Escape check
277379 if( event.keyCode == 27 ){
278380 _this.restoreWindowPlayer();
279381 }
280 - } );
281 -
282 - },
283 - restoreWindowPlayer: function(){
 382+ } );
 383+ },
 384+
 385+ /**
 386+ * Restore the window player
 387+ */
 388+ restoreWindowPlayer: function() {
284389 var _this = this;
285390 var embedPlayer = this.embedPlayer;
 391+
 392+ // Check fullscreen state
286393 if( this.fullscreenMode == false ){
287394 return ;
288395 }
289396 // Set fullscreen mode to false
290397 this.fullscreenMode = false;
291398
292 - var $interface = embedPlayer.$interface;
 399+ var $interface = embedPlayer.$interface;
 400+ var interfaceHeight = ( _this.checkOverlayControls() )
 401+ ? embedPlayer.getHeight()
 402+ : embedPlayer.getHeight() + _this.getHeight();
 403+
293404 $j('.mw-fullscreen-overlay').fadeOut( 'slow' );
294405 $interface.animate( {
295406 'top' : this.windowOffset.top,
296407 'left' : this.windowOffset.left,
297408 // height is embedPlayer height + ctrlBuilder height:
298 - 'height': embedPlayer.height + _this.height,
299 - 'width' : embedPlayer.width
 409+ 'height': interfaceHeight,
 410+ 'width' : embedPlayer.getWidth()
300411 },function(){
 412+ // Restore non-absolute layout:
301413 $interface.css( {
302414 'position' : _this.windowPositionStyle,
 415+ 'z-index' : _this.windowZindex,
303416 'top' : null,
304417 'left' : null
305418 } );
306419 } );
307 - // resize the player:
 420+ // Restore the player:
308421 $j( embedPlayer ).animate( {
309 - 'width' : embedPlayer.width,
310 - 'height' : embedPlayer.height
 422+ 'top' : '0px',
 423+ 'left' : '0px',
 424+ 'width' : embedPlayer.getWidth(),
 425+ 'height' : embedPlayer.getHeight()
311426 })
 427+ // Restore the play button
 428+ $interface.find('.play-btn-large').animate( {
 429+ 'left' : ( ( embedPlayer.getPlayerWidth() - this.getComponentWidth( 'playButtonLarge' ) ) / 2 ),
 430+ 'top' : ( ( embedPlayer.getPlayerHeight() -this.getComponentHeight( 'playButtonLarge' ) ) / 2 )
 431+ } );
 432+
 433+ // Restore text size:
 434+ $interface.find('.itext').animate({
 435+ 'font-size' : '100%'
 436+ })
312437 },
313438
314439 /**
@@ -325,13 +450,6 @@
326451 },
327452
328453 /**
329 - * Get the control bar height:
330 - */
331 - getControlBarHeight: function( ) {
332 - return this.height;
333 - },
334 -
335 - /**
336454 * addControlHooks
337455 * Adds control hooks once controls are in the DOM
338456 */
@@ -341,12 +459,43 @@
342460 var _this = this;
343461
344462 // Setup target shortcut to control-bar
345 - $target = embedPlayer.$interface;
346 -
 463+ $target = embedPlayer.$interface;
 464+ var mouseIn = false;
 465+ // Add hide show bindings for control overlay (if overlay is enabled )
 466+ if( _this.checkOverlayControls() ) {
 467+ // Add a special absolute overlay for hover ( to keep menu displayed
 468+ $j( embedPlayer.$interface ).hover(
 469+ function(){
 470+ _this.showControlBar()
 471+ mouseIn = true;
 472+ },
 473+ function(){
 474+ mouseIn = false;
 475+ // Hide controls ( delay hide if menu is visible )
 476+ function hideCheck(){
 477+ if ( embedPlayer.$interface.find( '.overlay-win' ).length != 0
 478+ || $j('.menuPositionHelper').is(':visible' ) ) {
 479+ setTimeout( hideCheck, 250 );
 480+ return ;
 481+ }
 482+ if( _this.checkOverlayControls() && !mouseIn ) {
 483+ _this.hideControlBar();
 484+ }
 485+
 486+ }
 487+ // Don't remove until user is out of player for 1 second
 488+ setTimeout( hideCheck, 1000 );
 489+ }
 490+ );
 491+ } else {
 492+ $j( embedPlayer.$interface ).unbind().show();
 493+ }
 494+
347495 // Add recommend firefox if we have non-native playback:
348496 if ( _this.checkNativeWarning( ) ) {
349497 _this.doNativeWarning();
350498 }
 499+
351500 // Do png fix for ie6
352501 if ( $j.browser.msie && $j.browser.version <= 6 ) {
353502 $j('#' + embedPlayer.id + ' .play-btn-large' ).pngFix();
@@ -360,8 +509,52 @@
361510 }
362511 },
363512
 513+ /**
 514+ * Hide the control bar.
 515+ */
 516+ hideControlBar : function(){
 517+ // Else hide the control bar ( if checkOverlayControls is still true )
 518+ this.embedPlayer.$interface.find( '.control-bar').fadeOut( 'slow' );
 519+ // Move down itext if present
 520+ $j( '.itext' ).animate( {'bottom' : 10 } );
 521+ },
364522
365523 /**
 524+ * Show the control bar
 525+ */
 526+ showControlBar : function(){
 527+ // Show controls
 528+ this.embedPlayer.$interface.find( '.control-bar').fadeIn( 'slow' );
 529+ // Move up itext if present
 530+ $j( '.itext' ).animate( { 'bottom' : this.getHeight() + 10 } );
 531+ },
 532+
 533+ /**
 534+ * Checks if the browser supports overlays and the controlsOverlay is
 535+ * set to true for the player or via config
 536+ */
 537+ checkOverlayControls: function(){
 538+ //if the player "supports" overlays:
 539+ if( ! this.embedPlayer.supports['overlays'] ){
 540+ return false;
 541+ }
 542+ // If the config is false
 543+ if( ! mw.getConfig( 'overlayControls' ) ){
 544+ return false;
 545+ }
 546+ // If disabled via the player
 547+ if( ! this.embedPlayer.overlayControls ){
 548+ return false;
 549+ }
 550+ // don't hide controls when content "height" is 0 ( audio tags )
 551+ if( this.embedPlayer.height == 0 ){
 552+ return false;
 553+ }
 554+ // Past alll tests OverlayControls is true:
 555+ return true;
 556+ },
 557+
 558+ /**
366559 * Check if a warning should be issued to non-native playback systems
367560 *
368561 * dependent on mediaElement being setup
@@ -658,7 +851,8 @@
659852 $j('<div />')
660853 .addClass( 'ui-widget-overlay' )
661854 .css( {
662 - 'height' : this.getOverlayHeight() + 'px'
 855+ 'height' : '100%',
 856+ 'width' : '100%'
663857 } )
664858 );
665859
@@ -979,6 +1173,7 @@
9801174 * Get a component height
9811175 *
9821176 * @param {String} component_id Component key to grab height
 1177+ * @return height or false if not set
9831178 */
9841179 getComponentHeight: function( component_id ) {
9851180 if ( this.components[ component_id ]
@@ -990,6 +1185,20 @@
9911186 },
9921187
9931188 /**
 1189+ * Get a component width
 1190+ * @param {String} component_id Component key to grab width
 1191+ * @return width or false if not set
 1192+ */
 1193+ getComponentWidth: function( component_id ){
 1194+ if ( this.components[ component_id ]
 1195+ && this.components[ component_id ].w )
 1196+ {
 1197+ return this.components[ component_id ].w
 1198+ }
 1199+ return false;
 1200+ },
 1201+
 1202+ /**
9941203 * Components Object
9951204 * Take in the embedPlayer and return some html for the given component.
9961205 *
@@ -1069,7 +1278,8 @@
10701279 .buttonHover()
10711280 // Options binding:
10721281 .menu( {
1073 - 'content' : ctrlObj.getOptionsMenu(),
 1282+ 'content' : ctrlObj.getOptionsMenu(),
 1283+ 'zindex' : mw.getConfig( 'fullScreenIndex' ),
10741284 'positionOpts': {
10751285 'directionV' : 'up',
10761286 'offsetY' : 32,
@@ -1093,7 +1303,7 @@
10941304 $j( '<span />' )
10951305 .addClass( "ui-icon ui-icon-arrow-4-diag" )
10961306 )
1097 - // Fullscreen binding:
 1307+ // Fullscreen binding:
10981308 .buttonHover().click( function() {
10991309 ctrlObj.embedPlayer.fullscreen();
11001310 } );
Index: branches/js2-work/phase3/js/mwEmbed/modules/TimedText/jquery.menu/jquery.menu.js
@@ -96,11 +96,7 @@
9797 }else{
9898 var container = $('<div>').addClass( callerClassList ).html( options.content );
9999 }
100 - // some custom css:
101 - container.css( {
102 - 'left' : '0px',
103 - 'z-index': 2
104 - } );
 100+
105101
106102 this.menuOpen = false;
107103 this.menuExists = false;
@@ -111,6 +107,7 @@
112108 width: 180, // width of menu container, must be set or passed in to calculate widths of child menus
113109 maxHeight: 180, // max height of menu (if a drilldown: height does not include breadcrumb)
114110 targetMenuContainer: null,
 111+ zindex: 2,
115112 positionOpts: {
116113 posX: 'left',
117114 posY: 'bottom',
@@ -140,6 +137,13 @@
141138 nextCrumbLink: 'ui-icon-carat-1-e'
142139 }, options);
143140
 141+
 142+ // Apply some custom css to container
 143+ container.css( {
 144+ 'left' : '0px',
 145+ 'z-index': options.zindex
 146+ } );
 147+
144148 var killAllMenus = function() {
145149 $.each(allUIMenus, function(i) {
146150 if (allUIMenus[i].menuOpen) { allUIMenus[i].kill(); };
@@ -549,7 +553,8 @@
550554 var options = options;
551555 var xVal, yVal;
552556
553 - var helper = $( '<div class="positionHelper">' );
 557+ var helper = $( '<div class="menuPositionHelper">' );
 558+ helper.css( 'z-index', options.zindex );
554559 // Hard code width height of button if unset ( crazy IE )
555560 if( isNaN( dims.refW ) || isNaN( dims.refH ) ) {
556561 dims.refH = 16;
Index: branches/js2-work/phase3/js/mwEmbed/modules/TimedText/mw.TimedText.js
@@ -215,7 +215,7 @@
216216 if( this.embedPlayer.supports[ 'overlays' ] ){
217217 var positionOpts = {
218218 'directionV' : 'up',
219 - 'offsetY' : 32,
 219+ 'offsetY' : this.embedPlayer.ctrlBuilder.getHeight(),
220220 'directionH' : 'left',
221221 'offsetX' : -28
222222 };
@@ -228,7 +228,9 @@
229229 // NOTE: Button target should be an option or config
230230 $menuButton.unbind().menu( {
231231 'content' : _this.getMainMenu(),
 232+ 'zindex' : mw.getConfig( 'fullScreenIndex' ),
232233 'crumbDefaultText' : ' ',
 234+ 'targetMenuContainer' : _this.menuTarget,
233235 'autoShow' : autoShow,
234236 'positionOpts' : positionOpts,
235237 'backLinkText' : gM( 'mwe-back-btn' )
@@ -786,7 +788,7 @@
787789 $j('<div>').addClass( 'itext' + ' ' + 'itext_' + category )
788790 .css( {
789791 'position':'absolute',
790 - 'bottom': ( this.embedPlayer.ctrlBuilder.height + 10 ),
 792+ 'bottom': ( this.embedPlayer.ctrlBuilder.getHeight() + 10 ),
791793 'width': '100%',
792794 'display': 'block',
793795 'opacity': .8,
@@ -798,33 +800,47 @@
799801 })
800802 )
801803 );
802 - // Resize the interface for layoutMode == 'ontop'
803 - this.embedPlayer.$interface.animate({
804 - 'height': this.embedPlayer.height + this.embedPlayer.ctrlBuilder.height
805 - })
 804+
 805+ // Resize the interface for layoutMode == 'ontop' ( if not in fullscreen )
 806+ // NOTE this shoudl be a call to ctrlBuilder not handled here inline
 807+ if( ! this.embedPlayer.ctrlBuilder.fullscreenMode ){
 808+ if( this.embedPlayer.ctrlBuilder.checkOverlayControls() ){
 809+ var playerHeight = this.embedPlayer.getHeight();
 810+ } else {
 811+ var playerHeight = this.embedPlayer.getHeight() + this.embedPlayer.ctrlBuilder.getHeight();
 812+ }
 813+ // Restore the player height
 814+ this.embedPlayer.$interface.animate({
 815+ 'height': playerHeight
 816+ });
 817+ }
806818 }else if ( layoutMode == 'below') {
 819+ // Set the belowBar size to 60 pxiles:
 820+ var belowBarHeight = 60;
807821 // Append before controls:
808822 $playerTarget.find( '.control-bar' ).before(
809823 $j('<div>').addClass( 'itext' + ' ' + 'itext_' + category )
810824 .css({
811 - 'display': 'block',
812 - 'width': '100%',
813 - 'height': '60px',
814 - 'background-color':'#000',
815 - 'text-align':'center',
816 - 'padding-top':'5px'
 825+ 'display' : 'block',
 826+ 'width' : '100%',
 827+ 'height' : belowBarHeight + 'px',
 828+ 'background-color' : '#000',
 829+ 'text-align' : 'center',
 830+ 'padding-top' : '5px'
817831 } ).append(
818832 $j('<span>').css( {
819833 'color':'white'
820834 } )
821835 )
822836 );
823 - var height = 62 + this.embedPlayer.height + this.embedPlayer.ctrlBuilder.height;
824 - mw.log( 'set height:' + height );
825 - // Resize the interface for layoutMode == 'below'
826 - this.embedPlayer.$interface.animate({
827 - 'height': height
828 - })
 837+ //
 838+ var height = belowBarHeight + this.embedPlayer.getHeight() + this.embedPlayer.ctrlBuilder.getHeight();
 839+ // Resize the interface for layoutMode == 'below' ( if not in full screen)
 840+ if( ! this.embedPlayer.ctrlBuilder.fullscreenMode ){
 841+ this.embedPlayer.$interface.animate({
 842+ 'height': height
 843+ })
 844+ }
829845 mw.log( ' height of ' + this.embedPlayer.id + ' is now: ' + $j( '#' + this.embedPlayer.id ).height() );
830846 }
831847 mw.log( 'should have been appended: ' + $playerTarget.find('.itext').length );
@@ -895,7 +911,7 @@
896912 var handler = parseSrt;
897913 break;
898914 case 'text/cmml':
899 - var handler = parseCMML;
 915+ var handler = parseCMML;
900916 break;
901917 default:
902918 var hanlder = null;
Index: branches/js2-work/phase3/js/mwEmbed/modules/AddMedia/mw.RemoteSearchDriver.js
@@ -17,7 +17,7 @@
1818 "rsd_results_next" : "next",
1919 "rsd_results_prev" : "previous",
2020 "rsd_no_results" : "No search results for <b>$1<\/b>",
21 - "mwe-upload_tab" : "Upload",
 21+ "mwe-upload_tab" : "Upload file",
2222 "rsd_layout" : "Layout:",
2323 "rsd_resource_edit" : "Edit resource: $1",
2424 "mwe-resource_description_page" : "Resource description page",
Index: branches/js2-work/phase3/js/mwEmbed/modules/EmbedPlayer/kplayerEmbed.js
@@ -24,7 +24,7 @@
2525 var _this = this;
2626 var playerPath = mw.getMwEmbedPath() + 'modules/EmbedPlayer/binPlayers/kaltura-player';
2727 $j( this ).html(
28 - '<object width="' + this.width + '" height="' + this.height + '" '+
 28+ '<object width="' + this.getWidth() + '" height="' + this.getHeight() + '" '+
2929 'data="' + playerPath + '/wrapper.swf" allowfullscreen="true" '+
3030 'allownetworking="all" allowscriptaccess="always" '+
3131 'type="application/x-shockwave-flash" '+
Index: branches/js2-work/phase3/js/mwEmbed/modules/EmbedPlayer/loader.js
@@ -13,6 +13,10 @@
1414 // 'off' Does not display the timed text interface
1515 "textInterface" : "auto",
1616
 17+ // If the player controls should be overlayed on top of the video ( if supported by playback method)
 18+ // can be set to false per embed player via overlayControls attribute
 19+ 'overlayControls' : true,
 20+
1721 // Timed Text provider presently just "commons",
1822 // NOTE: Each player instance can also specify a provider
1923 "timedTextProvider" : "commons",
Index: branches/js2-work/phase3/js/mwEmbed/modules/EmbedPlayer/genericEmbed.js
@@ -24,7 +24,7 @@
2525 doEmbedHTML: function() {
2626 $j( this ).html(
2727 '<object type="application/ogg" ' +
28 - 'width="' + this.width + '" height="' + this.height + '" ' +
 28+ 'width="' + this.getWidth() + '" height="' + this.getHeight() + '" ' +
2929 'data="' + this.getSrc( this.seek_time_sec ) + '"></object>'
3030 );
3131 }
Index: branches/js2-work/phase3/js/mwEmbed/modules/EmbedPlayer/mw.EmbedPlayer.js
@@ -142,6 +142,10 @@
143143 // The apiProvider where to lookup the title key
144144 "apiProvider" : null,
145145
 146+ // If the player controls should be overlayed
 147+ //( Global default via config overlayControls in module loader.js)
 148+ "overlayControls" : mw.getConfig( 'overlayControls' ),
 149+
146150 // ROE url ( for xml based metadata )
147151 // also see: http://wiki.xiph.org/ROE
148152 "roe" : null,
@@ -223,7 +227,7 @@
224228 * Passes off request to the embedPlayer selector:
225229 *
226230 * @param {Object} attributes Attributes to apply to embed players
227 - * @param {Function} callback Function to call once embeding is done
 231+ * @param {Function} callback Function to call once embedding is done
228232 */
229233 $.embedPlayers = function( attributes, callback) {
230234 $j( mw.getConfig( 'rewritePlayerTags' ) ).embedPlayer( attributes, callback );
@@ -1494,7 +1498,7 @@
14951499 var missing_type = this.pc.type;
14961500
14971501 mw.log( 'No player found for given source type ' + missing_type );
1498 - $j(this).html( this.getPluginMissingHTML( missing_type ) );
 1502+ this.showPluginMissingHTML( missing_type );
14991503 }
15001504 },
15011505
@@ -1598,6 +1602,20 @@
15991603 },
16001604
16011605 /**
 1606+ * Get the player height
 1607+ */
 1608+ getHeight: function() {
 1609+ return this.height;
 1610+ },
 1611+
 1612+ /**
 1613+ * Get the player width
 1614+ */
 1615+ getWidth: function(){
 1616+ return this.width;
 1617+ },
 1618+
 1619+ /**
16021620 * Get the plugin embed html ( should be implemented by embed player interface )
16031621 */
16041622 doEmbedHTML : function() {
@@ -1653,8 +1671,10 @@
16541672 // mw.log('should embed:' + embed_code);
16551673 _this.doEmbedHTML()
16561674 },
 1675+
16571676 /**
16581677 * Searches for related clips from titleKey
 1678+ * also configuration specific ( should be in seperate file)
16591679 */
16601680 getRelatedFromTitleKey: function() {
16611681 var _this = this;
@@ -1751,7 +1771,7 @@
17521772
17531773 // Call the ctrlBuilder end event::
17541774
1755 - //if kalturaAttribution and k-skin show the "credits" screen:
 1775+ // If kalturaAttribution and k-skin show the "credits" screen:
17561776 if( mw.getConfig( 'kalturaAttribution' ) && this.ctrlBuilder.showCredits ) {
17571777 this.ctrlBuilder.showCredits();
17581778 return ;
@@ -2027,7 +2047,8 @@
20282048 */
20292049 showPlayer : function () {
20302050 mw.log( 'Show player: ' + this.id );
2031 - // set-up the local ctrlBuilder instance:
 2051+
 2052+ // Set-up the local ctrlBuilder instance:
20322053 this.ctrlBuilder = new ctrlBuilder( this );
20332054
20342055 var _this = this;
@@ -2039,23 +2060,25 @@
20402061 $j('<div>')
20412062 .addClass('interface_wrap ' + this.ctrlBuilder.playerClass)
20422063 .css({
2043 - 'width': parseInt( this.width ),
2044 - 'height': parseInt( this.height ),
2045 - 'position': 'relative'
 2064+ 'width' : parseInt( this.width ),
 2065+ 'height' : parseInt( this.height ),
 2066+ 'position' : 'relative',
 2067+ 'overflow' : 'hidden'
20462068 })
20472069 )
2048 - }
 2070+ }
 2071+
20492072 //Set up local jQuery object reference to "interface_wrap"
2050 - this.$interface = $j(this).parent( '.interface_wrap' );
 2073+ this.$interface = $j(this).parent( '.interface_wrap' );
20512074
20522075 // Update Thumbnail for the "player"
20532076 this.updateThumbnailHTML();
20542077
2055 - // Add controls if enabled:
 2078+ // Add controls if enabled:
20562079 if ( this.controls ) {
2057 - mw.log( "embedPlayer:showPlayer::AddControls" );
2058 - this.ctrlBuilder.addControls();
2059 - }
 2080+ mw.log( "embedPlayer:showPlayer::AddControls" );
 2081+ this.ctrlBuilder.addControls();
 2082+ }
20602083
20612084
20622085 if ( this.autoplay ) {
@@ -2066,19 +2089,29 @@
20672090
20682091 /**
20692092 * Get missing plugin html (check for user included code)
2070 - * @param {String} misssing_type missing type mime
 2093+ * @param {String} [misssingType] missing type mime
20712094 */
2072 - getPluginMissingHTML : function( missing_type ) {
2073 - // keep the box width hight:
2074 - var out = '<div style="width:' + this.width + 'px;height:' + this.height + 'px">';
 2095+ showPluginMissingHTML : function( misssingType ) {
 2096+ // Check if we have user defined missing html msg:
20752097 if ( this.user_missing_plugin_html ) {
2076 - out += this.user_missing_plugin_html;
 2098+ $j( this ).html( this.user_missing_plugin_html );
20772099 } else {
2078 - if ( !missing_type )
2079 - missing_type = '';
2080 - out += gM( 'mwe-generic_missing_plugin', missing_type ) + '<br><a title="' + gM( 'mwe-download_clip' ) + '" href="' + this.src + '">' + gM( 'mwe-download_clip' ) + '</a>';
 2100+ if ( !misssingType ){
 2101+ misssingType = '';
 2102+ }
 2103+ $j( this ).html(
 2104+ $j('<div />').append(
 2105+ gM( 'mwe-generic_missing_plugin', missing_type ),
 2106+ $j( '<br />' ),
 2107+ $j( '<a />' )
 2108+ .attr( {
 2109+ 'title' : gM( 'mwe-download_clip' ),
 2110+ 'href' : this.getSrc()
 2111+ })
 2112+ .text( gM( 'mwe-download_clip' ) )
 2113+ )
 2114+ )
20812115 }
2082 - return out + '</div>';
20832116 },
20842117
20852118 /**
@@ -2260,7 +2293,7 @@
22612294 $j( this ).html(
22622295 $j( '<img />' )
22632296 .css({
2264 - 'position' : 'relative',
 2297+ 'position' : 'relative',
22652298 'width' : '100%',
22662299 'height' : '100%'
22672300 })
@@ -2361,7 +2394,7 @@
23622395 }else{
23632396 var loc = this.$interface.position();
23642397 //Setup the menu:
2365 - var playerHeight = ( parseInt( this.height ) + this.ctrlBuilder.height );
 2398+ var playerHeight = ( parseInt( this.height ) + this.ctrlBuilder.getHeight() );
23662399 $j('body').append(
23672400 $j('<div>')
23682401 .addClass('ui-widget ui-widget-content ui-corner-all')
@@ -2413,9 +2446,8 @@
24142447 // check if thumbnail is being displayed and embed html
24152448 if ( this.thumbnail_disp ) {
24162449 if ( !this.selected_player ) {
2417 - mw.log( 'no selected_player' );
2418 - // this.innerHTML = this.getPluginMissingHTML();
2419 - $j( '#' + this.id ).html( this.getPluginMissingHTML() );
 2450+ mw.log( 'no selected_player' );
 2451+ this.showPluginMissingHTML();
24202452 } else {
24212453 this.doEmbedPlayer();
24222454 this.paused = false;
Index: branches/js2-work/phase3/js/mwEmbed/modules/EmbedPlayer/javaEmbed.js
@@ -39,7 +39,7 @@
4040 // load directly in the page..
4141 // (media must be on the same server or applet must be signed)
4242 var appletCode = '' +
43 - '<applet id="' + this.pid + '" code="com.fluendo.player.Cortado.class" archive="' + applet_loc + '" width="' + this.width + '" height="' + this.height + '"> ' + "\n" +
 43+ '<applet id="' + this.pid + '" code="com.fluendo.player.Cortado.class" archive="' + applet_loc + '" width="' + this.getWidth() + '" height="' + this.getHeight() + '"> ' + "\n" +
4444 '<param name="url" value="' + this.getSrc() + '" /> ' + "\n" +
4545 '<param name="local" value="false"/>' + "\n" +
4646 '<param name="keepaspect" value="true" />' + "\n" +
@@ -55,8 +55,8 @@
5656 // Doesn't work in MSIE or Safari/Mac or Opera 9.5
5757 if ( $j.browser.mozilla ) {
5858 var iframe = document.createElement( 'iframe' );
59 - iframe.setAttribute( 'width', this.width );
60 - iframe.setAttribute( 'height', this.height );
 59+ iframe.setAttribute( 'width', this.getWidth() );
 60+ iframe.setAttribute( 'height', this.getHeight() );
6161 iframe.setAttribute( 'scrolling', 'no' );
6262 iframe.setAttribute( 'frameborder', 0 );
6363 iframe.setAttribute( 'marginWidth', 0 );
Index: branches/js2-work/phase3/js/mwEmbed/modules/EmbedPlayer/vlcEmbed.js
@@ -35,7 +35,7 @@
3636 $j( this ).html(
3737 '<object classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921" ' +
3838 'codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab#Version=0,8,6,0" ' +
39 - 'id="' + this.pid + '" events="True" height="' + this.height + '" width="' + this.width + '"' +
 39+ 'id="' + this.pid + '" events="True" height="' + this.getHeight() + '" width="' + this.getWidth() + '"' +
4040 '>' +
4141 '<param name="MRL" value="">' +
4242 '<param name="ShowDisplay" value="True">' +
@@ -45,9 +45,9 @@
4646 '<param name="StartTime" value="0">' +
4747 '<embed pluginspage="http://www.videolan.org" type="application/x-vlc-plugin" ' +
4848 'progid="VideoLAN.VLCPlugin.2" name="' + this.pid + '" ' +
49 - 'height="' + this.height + '" width="' + this.width + '" ' +
 49+ 'height="' + this.getHeight() + '" width="' + this.getWidth() + '" ' +
5050 // set the style too 'just to be sure'
51 - 'style="width:' + this.width + 'px;height:' + this.height + 'px;" ' +
 51+ 'style="width:' + this.getWidth() + 'px;height:' + this.getHeight() + 'px;" ' +
5252 '>' +
5353 '</object>'
5454 )
@@ -78,8 +78,8 @@
7979 this.getPlayerElement();
8080 if ( this.playerElement && this.playerElement.playlist) {
8181 // manipulate the dom object to make sure vlc has the correct size:
82 - this.playerElement.style.width = this.width;
83 - this.playerElement.style.height = this.height;
 82+ this.playerElement.style.width = this.getWidth();
 83+ this.playerElement.style.height = this.getHeight();
8484 this.playerElement.playlist.items.clear();
8585
8686 // VLC likes absolute urls:

Status & tagging log