1 /* ***************************************************************************
2 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 * DEALINGS IN THE SOFTWARE.
21 * ***************************************************************************
23 * Authors: Yonghwi Park <yonghwi0324.park@samsung.com>
24 * Wonseop Kim <wonseop.kim@samsung.com>
29 * MultiMediaView is a widget that lets the user view and handle multimedia contents.
30 * Video and audio elements are coded as standard HTML elements and enhanced by the
31 * MultiMediaview to make them attractive and usable on a mobile device.
34 * data-theme : Set a theme of widget.
35 * If this value is not defined, widget will use parent`s theme. (optional)
36 * data-controls : If this value is 'true', widget will use belonging controller.
37 * If this value is 'false', widget will use browser`s controller.
38 * Default value is 'true'.
39 * data-fullscreen : Set a status that fullscreen when inital start.
40 * Default value is 'false'.
44 * : Get or set the width of widget.
45 * The first argument is the width of widget.
46 * If no first argument is specified, will act as a getter.
48 * : Get or set the height of widget.
49 * The first argument is the height of widget.
50 * If no first argument is specified, will act as a getter.
51 * size( number, number )
52 * : Set a size of widget and resize a widget.
53 * The first argument is width and second argument is height.
54 * fullscreen( [boolean] )
55 * : Get or Set the status of fullscreen.
56 * If no first argument is specified, will act as a getter.
60 * create : triggered when a multimediaview is created.
65 * <video data-controls="true" style="width:100%;">
66 * <source src="media/oceans-clip.mp4" type="video/mp4" />
67 * Your browser does not support the video tag.
71 * <audio data-controls="true" style="width:100%;">
72 * <source src="media/Over the horizon.mp3" type="audio/mp3" />
73 * Your browser does not support the audio tag.
79 The multimedia view widget shows a player control that you can use to view and handle multimedia content. This widget uses the standard HTML video and audio elements, which have been enhanced for use on a mobile device.
81 To add a multimedia view widget to the application, use the following code:
83 // Video player control
84 <video data-controls="true" style="width:100%;" data-theme="c">
85 <source src="<VIDEO_FILE_URL>" type="video/mp4" /> Your browser does not support the video tag. </video>
86 // Audio player control
87 <audio data-controls="true" style="width:100%;"> <source src="<AUDIO_FILE_URL>" type="audio/mp3" /> Your browser does not support the audio tag.
90 The multimedia view can define a callback for the create event, which is fired when the widget is created.
91 $('.selector').multimediaview({
92 create:function(event, u){...}
94 $(".selector").bind("create", function(event, ui)
96 // Respond to the multimedia view widget creation
100 @property {Boolean} data-control
101 Sets the controls for the widget.
102 The default value is true. If the value is set to true, the widget uses its own player controls. If the value is set to false, the widget uses the browser's player controls.
105 @property {Boolean} data-fullscreen
106 Defines whether the widget opens in the fullscreen view mode.
107 The default value is false.
110 @property {String} data-theme
111 Sets the widget theme.
112 If the value is not set, the parent control's theme is used
116 The width method is used to get (if no value is defined) or set the multimedia view widget width:
117 <video data-fullscreen="true">
118 <source src="test.mp4" type="video/mp4" />
120 $(".selector").multimediaview("width", [value]);
124 The height method is used to get (if no value is defined) or set the multimedia view widget height:
125 <video data-fullscreen="true">
126 <source src="test.mp4" type="video/mp4" />
128 $(".selector").multimediaview("height", [value]);
132 The size method is used to set the size of the multimedia view widget using the width and height parameters:
133 <video data-fullscreen="true">
134 <source src="test.mp4" type="video/mp4" />
136 $(".selector").multimediaview("size", width, height);
140 The fullscreen method is used to get (if no value is defined) or set the fullscreen mode of the multimedia view widget. If the value is true, the fullscreen mode is used; otherwise the multimedia view widget runs in the normal mode.
142 <video data-fullscreen="true">
143 <source src="test.mp4" type="video/mp4" />
145 $(".selector").multimediaview("fullscreen", [value]);
147 ( function ( $, document, window, undefined ) {
148 $.widget( "tizen.multimediaview", $.mobile.widget, {
153 initSelector : "video, audio"
155 _create : function () {
158 viewElement = view[0],
159 option = self.options,
160 role = "multimediaview",
165 isControlHide : false,
173 view.addClass( "ui-multimediaview" );
174 control = self._createControl();
176 if ( view[0].nodeName === "VIDEO" ) {
177 control.addClass( "ui-multimediaview-video" );
181 view.wrap( "<div class='ui-multimediaview-wrap'>" ).after( control );
182 if ( option.controls ) {
183 if ( view.attr("controls") ) {
184 view.removeAttr( "controls" );
190 $( document ).bind( "pagechange.multimediaview", function ( e ) {
191 var $page = $( e.target );
192 if ( $page.find( view ).length > 0 && viewElement.autoplay ) {
196 if ( option.controls ) {
200 }).bind( "pagebeforechange.multimediaview", function ( e ) {
201 if ( viewElement.played.length !== 0 ) {
206 $( window ).bind( "resize.multimediaview orientationchange.multimediaview", function ( e ) {
207 if ( !option.controls ) {
210 var $page = $( e.target ),
211 $scrollview = view.parents( ".ui-scrollview-clip" );
213 $scrollview.each( function ( i ) {
214 if ( $.data( this, "scrollview" ) ) {
215 $( this ).scrollview( "scrollTo", 0, 0 );
219 // for maintaining page layout
220 if ( !option.fullscreen ) {
221 $( ".ui-footer:visible" ).show();
223 $( ".ui-footer" ).hide();
224 self._fitContentArea( $page );
230 _resize : function () {
231 var view = this.element,
232 parent = view.parent(),
233 control = parent.find( ".ui-multimediaview-control" ),
238 this._resizeFullscreen( this.options.fullscreen );
239 viewWidth = ( ( view[0].nodeName === "VIDEO" ) ? view.width() : parent.width() );
240 viewHeight = ( ( view[0].nodeName === "VIDEO" ) ? view.height() : control.height() );
241 viewOffset = view.offset();
243 this._resizeControl( viewOffset, viewWidth, viewHeight );
245 this._updateSeekBar();
246 this._updateVolumeState();
248 _resizeControl : function ( offset, width, height ) {
251 viewElement = view[0],
252 control = view.parent().find( ".ui-multimediaview-control" ),
253 buttons = control.find( ".ui-button" ),
254 playpauseButton = control.find( ".ui-playpausebutton" ),
255 seekBar = control.find( ".ui-seekbar" ),
256 durationLabel = control.find( ".ui-durationlabel" ),
257 timestampLabel = control.find( ".ui-timestamplabel" ),
258 volumeControl = control.find( ".ui-volumecontrol" ),
259 volumeBar = volumeControl.find( ".ui-volumebar" ),
260 controlWidth = width,
261 controlHeight = control.outerHeight( true ),
263 controlOffset = null;
266 if ( view[0].nodeName === "VIDEO" ) {
267 controlOffset = control.offset();
268 controlOffset.left = offset.left;
269 controlOffset.top = offset.top + height - controlHeight;
270 control.offset( controlOffset );
273 control.width( controlWidth );
277 availableWidth = control.width() - ( buttons.outerWidth( true ) * buttons.length );
278 availableWidth -= ( parseInt( buttons.eq( 0 ).css( "margin-left" ), 10 ) + parseInt( buttons.eq( 0 ).css( "margin-right" ), 10 ) ) * buttons.length;
279 if ( !self.isVolumeHide ) {
280 availableWidth -= volumeControl.outerWidth( true );
282 seekBar.width( availableWidth );
285 if ( durationLabel && !isNaN( viewElement.duration ) ) {
286 durationLabel.find( "p" ).text( self._convertTimeFormat( viewElement.duration ) );
289 if ( viewElement.autoplay && viewElement.paused === false ) {
290 playpauseButton.removeClass( "ui-play-icon" ).addClass( "ui-pause-icon" );
293 if ( seekBar.width() < ( volumeBar.width() + timestampLabel.width() + durationLabel.width() ) ) {
294 durationLabel.hide();
296 durationLabel.show();
299 _resizeFullscreen : function ( isFullscreen ) {
302 parent = view.parent(),
303 control = view.parent().find( ".ui-multimediaview-control" ),
304 playpauseButton = control.find( ".ui-playpausebutton" ),
305 timestampLabel = control.find( ".ui-timestamplabel" ),
306 seekBar = control.find( ".ui-seekbar" ),
307 durationBar = seekBar.find( ".ui-duration" ),
308 currenttimeBar = seekBar.find( ".ui-currenttime" ),
312 if ( isFullscreen ) {
313 if ( !self.backupView ) {
315 width : view[0].style.getPropertyValue( "width" ) || "",
316 height : view[0].style.getPropertyValue( "height" ) || "",
317 position : view.css( "position" ),
318 zindex : view.css( "z-index" )
321 docWidth = $( "body" )[0].clientWidth;
322 docHeight = $( "body" )[0].clientHeight;
324 view.width( docWidth ).height( docHeight - 1 );
325 view.addClass( "ui-" + self.role + "-fullscreen" );
331 if ( !self.backupView ) {
335 view.removeClass( "ui-" + self.role + "-fullscreen" );
337 "width" : self.backupView.width,
338 "height" : self.backupView.height,
339 "position": self.backupView.position,
340 "z-index": self.backupView.zindex
342 self.backupView = null;
346 _addEvent : function () {
349 viewElement = view[0],
350 control = view.parent().find( ".ui-multimediaview-control" ),
351 playpauseButton = control.find( ".ui-playpausebutton" ),
352 timestampLabel = control.find( ".ui-timestamplabel" ),
353 durationLabel = control.find( ".ui-durationlabel" ),
354 volumeButton = control.find( ".ui-volumebutton" ),
355 volumeControl = control.find( ".ui-volumecontrol" ),
356 volumeBar = volumeControl.find( ".ui-volumebar" ),
357 volumeGuide = volumeControl.find( ".ui-guide" ),
358 volumeHandle = volumeControl.find( ".ui-handler" ),
359 fullscreenButton = control.find( ".ui-fullscreenbutton" ),
360 seekBar = control.find( ".ui-seekbar" ),
361 durationBar = seekBar.find( ".ui-duration" ),
362 currenttimeBar = seekBar.find( ".ui-currenttime" );
364 view.bind( "loadedmetadata.multimediaview", function ( e ) {
365 if ( !isNaN( viewElement.duration ) ) {
366 durationLabel.find( "p" ).text( self._convertTimeFormat( viewElement.duration ) );
369 }).bind( "timeupdate.multimediaview", function ( e ) {
370 self._updateSeekBar();
371 }).bind( "play.multimediaview", function ( e ) {
372 playpauseButton.removeClass( "ui-play-icon" ).addClass( "ui-pause-icon" );
373 }).bind( "pause.multimediaview", function ( e ) {
374 playpauseButton.removeClass( "ui-pause-icon" ).addClass( "ui-play-icon" );
375 }).bind( "ended.multimediaview", function ( e ) {
376 if ( typeof viewElement.loop == "undefined" || viewElement.loop === "" ) {
379 }).bind( "volumechange.multimediaview", function ( e ) {
380 if ( viewElement.volume < 0.1 ) {
381 viewElement.muted = true;
382 volumeButton.removeClass( "ui-volume-icon" ).addClass( "ui-mute-icon" );
384 viewElement.muted = false;
385 volumeButton.removeClass( "ui-mute-icon" ).addClass( "ui-volume-icon" );
388 if ( !self.isVolumeHide ) {
389 self._updateVolumeState();
391 }).bind( "durationchange.multimediaview", function ( e ) {
392 if ( !isNaN( viewElement.duration ) ) {
393 durationLabel.find( "p" ).text( self._convertTimeFormat( viewElement.duration ) );
396 }).bind( "error.multimediaview", function ( e ) {
397 switch ( e.target.error.code ) {
398 case e.target.error.MEDIA_ERR_ABORTED :
399 window.alert( 'You aborted the video playback.' );
401 case e.target.error.MEDIA_ERR_NETWORK :
402 window.alert( 'A network error caused the video download to fail part-way.' );
404 case e.target.error.MEDIA_ERR_DECODE :
405 window.alert( 'The video playback was aborted due to a corruption problem or because the video used features your browser did not support.' );
407 case e.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED :
408 window.alert( 'The video could not be loaded, either because the server or network failed or because the format is not supported.' );
411 window.alert( 'An unknown error occurred.' );
414 }).bind( "vclick.multimediaview", function ( e ) {
415 if ( !self.options.controls ) {
419 control.fadeToggle( "fast", function () {
420 var offset = control.offset();
421 self.isControlHide = !self.isControlHide;
422 if ( self.options.mediatype == "video" ) {
429 playpauseButton.bind( "vclick.multimediaview", function () {
432 if ( viewElement.paused ) {
438 if ( self.options.mediatype == "video" ) {
443 fullscreenButton.bind( "vclick.multimediaview", function ( e ) {
444 self.fullscreen( !self.options.fullscreen );
445 control.fadeIn( "fast" );
451 seekBar.bind( "vmousedown.multimediaview", function ( e ) {
453 duration = viewElement.duration,
454 durationOffset = durationBar.offset(),
455 durationWidth = durationBar.width(),
456 timerate = ( x - durationOffset.left ) / durationWidth,
457 time = duration * timerate;
459 viewElement.currentTime = time;
466 $( document ).bind( "vmousemove.multimediaview", function ( e ) {
468 timerate = ( x - durationOffset.left ) / durationWidth;
470 viewElement.currentTime = duration * timerate;
474 }).bind( "vmouseup.multimediaview", function () {
475 $( document ).unbind( "vmousemove.multimediaview vmouseup.multimediaview" );
476 if ( viewElement.paused ) {
484 volumeButton.bind( "vclick.multimediaview", function () {
485 if ( self.isVolumeHide ) {
486 var view = self.element,
487 volume = viewElement.volume;
489 self.isVolumeHide = false;
491 volumeControl.fadeIn( "fast" );
492 self._updateVolumeState();
493 self._updateSeekBar();
495 self.isVolumeHide = true;
496 volumeControl.fadeOut( "fast", function () {
499 self._updateSeekBar();
503 volumeBar.bind( "vmousedown.multimediaview", function ( e ) {
504 var baseX = e.clientX,
505 volumeGuideLeft = volumeGuide.offset().left,
506 volumeGuideWidth = volumeGuide.width(),
507 volumeBase = volumeGuideLeft + volumeGuideWidth,
508 handlerOffset = volumeHandle.offset(),
509 volumerate = ( baseX - volumeGuideLeft ) / volumeGuideWidth,
510 currentVolume = ( baseX - volumeGuideLeft ) / volumeGuideWidth;
513 self._setVolume( currentVolume.toFixed( 2 ) );
518 $( document ).bind( "vmousemove.multimediaview", function ( e ) {
519 var currentX = e.clientX,
520 currentVolume = ( currentX - volumeGuideLeft ) / volumeGuideWidth;
522 self._setVolume( currentVolume.toFixed( 2 ) );
526 }).bind( "vmouseup.multimediaview", function () {
527 $( document ).unbind( "vmousemove.multimediaview vmouseup.multimediaview" );
529 if ( self.options.mediatype == "video" ) {
535 _removeEvent : function () {
538 control = view.parent().find( ".ui-multimediaview-control" ),
539 playpauseButton = control.find( ".ui-playpausebutton" ),
540 fullscreenButton = control.find( ".ui-fullscreenbutton" ),
541 seekBar = control.find( ".ui-seekbar" ),
542 volumeControl = control.find( ".ui-volumecontrol" ),
543 volumeBar = volumeControl.find( ".ui-volumebar" ),
544 volumeHandle = volumeControl.find( ".ui-handler" );
546 view.unbind( ".multimediaview" );
547 playpauseButton.unbind( ".multimediaview" );
548 fullscreenButton.unbind( ".multimediaview" );
549 seekBar.unbind( ".multimediaview" );
550 volumeBar.unbind( ".multimediaview" );
551 volumeHandle.unbind( ".multimediaview" );
553 _createControl : function () {
556 control = $( "<span></span>" ),
557 playpauseButton = $( "<span></span>" ),
558 seekBar = $( "<span></span>" ),
559 timestampLabel = $( "<span><p>00:00:00</p></span>" ),
560 durationLabel = $( "<span><p>00:00:00</p></span>" ),
561 volumeButton = $( "<span></span>" ),
562 volumeControl = $( "<span></span>" ),
563 volumeBar = $( "<div></div>" ),
564 volumeGuide = $( "<span></span>" ),
565 volumeValue = $( "<span></span>" ),
566 volumeHandle = $( "<span></span>" ),
567 fullscreenButton = $( "<span></span>" ),
568 durationBar = $( "<span></span>" ),
569 currenttimeBar = $( "<span></span>" );
571 control.addClass( "ui-" + self.role + "-control" );
572 playpauseButton.addClass( "ui-playpausebutton ui-button" );
573 seekBar.addClass( "ui-seekbar" );
574 timestampLabel.addClass( "ui-timestamplabel" );
575 durationLabel.addClass( "ui-durationlabel" );
576 volumeButton.addClass( "ui-volumebutton ui-button" );
577 fullscreenButton.addClass( "ui-fullscreenbutton ui-button" );
578 durationBar.addClass( "ui-duration" );
579 currenttimeBar.addClass( "ui-currenttime" );
580 volumeControl.addClass( "ui-volumecontrol" );
581 volumeBar.addClass( "ui-volumebar" );
582 volumeGuide.addClass( "ui-guide" );
583 volumeValue.addClass( "ui-value" );
584 volumeHandle.addClass( "ui-handler" );
586 seekBar.append( durationBar ).append( currenttimeBar ).append( durationLabel ).append( timestampLabel );
588 playpauseButton.addClass( "ui-play-icon" );
589 if ( view[0].muted ) {
590 $( volumeButton ).addClass( "ui-mute-icon" );
592 $( volumeButton ).addClass( "ui-volume-icon" );
595 volumeBar.append( volumeGuide ).append( volumeValue ).append( volumeHandle );
596 volumeControl.append( volumeBar );
598 control.append( playpauseButton ).append( seekBar ).append( volumeControl ).append( volumeButton );
600 if ( self.element[0].nodeName === "VIDEO" ) {
601 $( fullscreenButton ).addClass( "ui-fullscreen-on" );
602 control.append( fullscreenButton );
604 volumeControl.hide();
608 _startTimer : function ( duration ) {
617 control = view.parent().find( ".ui-multimediaview-control" ),
618 volumeControl = control.find( ".ui-volumecontrol" );
620 self.controlTimer = setTimeout( function () {
621 self.isVolumeHide = true;
622 self.isControlHide = true;
623 self.controlTimer = null;
624 volumeControl.hide();
625 control.fadeOut( "fast" );
628 _endTimer : function () {
629 if ( this.controlTimer ) {
630 clearTimeout( this.controlTimer );
631 this.controlTimer = null;
634 _convertTimeFormat : function ( systime ) {
635 var ss = parseInt( systime % 60, 10 ).toString(),
636 mm = parseInt( ( systime / 60 ) % 60, 10 ).toString(),
637 hh = parseInt( systime / 3600, 10 ).toString(),
638 time = ( ( hh.length < 2 ) ? "0" + hh : hh ) + ":" +
639 ( ( mm.length < 2 ) ? "0" + mm : mm ) + ":" +
640 ( ( ss.length < 2 ) ? "0" + ss : ss );
644 _updateSeekBar : function ( currenttime ) {
647 duration = view[0].duration,
648 control = view.parent().find( ".ui-multimediaview-control" ),
649 seekBar = control.find( ".ui-seekbar" ),
650 durationBar = seekBar.find( ".ui-duration" ),
651 currenttimeBar = seekBar.find( ".ui-currenttime" ),
652 timestampLabel = control.find( ".ui-timestamplabel" ),
653 durationOffset = durationBar.offset(),
654 durationWidth = durationBar.width(),
655 durationHeight = durationBar.height(),
658 if ( typeof currenttime == "undefined" ) {
659 currenttime = view[0].currentTime;
661 timebarWidth = parseInt( currenttime / duration * durationWidth, 10 );
662 durationBar.offset( durationOffset );
663 currenttimeBar.offset( durationOffset ).width( timebarWidth );
664 timestampLabel.find( "p" ).text( self._convertTimeFormat( currenttime ) );
666 _updateVolumeState : function () {
669 control = view.parent().find( ".ui-multimediaview-control" ),
670 volumeControl = control.find( ".ui-volumecontrol" ),
671 volumeButton = control.find( ".ui-volumebutton" ),
672 volumeBar = volumeControl.find( ".ui-volumebar" ),
673 volumeGuide = volumeControl.find( ".ui-guide" ),
674 volumeValue = volumeControl.find( ".ui-value" ),
675 volumeHandle = volumeControl.find( ".ui-handler" ),
676 handlerWidth = volumeHandle.width(),
677 handlerHeight = volumeHandle.height(),
678 volumeGuideHeight = volumeGuide.height(),
679 volumeGuideWidth = volumeGuide.width(),
683 handlerOffset = null,
684 volume = view[0].volume;
686 volumeGuideTop = parseInt( volumeGuide.offset().top, 10 );
687 volumeGuideLeft = parseInt( volumeGuide.offset().left, 10 );
688 volumeBase = volumeGuideLeft;
689 handlerOffset = volumeHandle.offset();
690 handlerOffset.top = volumeGuideTop - parseInt( ( handlerHeight - volumeGuideHeight ) / 2, 10 );
691 handlerOffset.left = volumeBase + parseInt( volumeGuideWidth * volume, 10 ) - parseInt( handlerWidth / 2, 10 );
692 volumeHandle.offset( handlerOffset );
693 volumeValue.width( parseInt( volumeGuideWidth * ( volume ), 10 ) );
695 _setVolume : function ( value ) {
696 var viewElement = this.element[0];
698 if ( value < 0.0 || value > 1.0 ) {
702 viewElement.volume = value;
704 _fitContentArea: function ( page, parent ) {
705 if ( typeof parent == "undefined" ) {
709 var $page = $( page ),
710 $content = $( ".ui-content:visible:first" ),
711 hh = $( ".ui-header:visible" ).outerHeight() || 0,
712 fh = $( ".ui-footer:visible" ).outerHeight() || 0,
713 pt = parseFloat( $content.css( "padding-top" ) ),
714 pb = parseFloat( $content.css( "padding-bottom" ) ),
715 wh = ( ( parent === window ) ? window.innerHeight : $( parent ).height() ),
716 height = wh - ( hh + fh ) - ( pt + pb );
722 width : function ( value ) {
727 if ( args.length === 0 ) {
730 if ( args.length === 1 ) {
735 height : function ( value ) {
740 if ( args.length === 0 ) {
741 return view.height();
743 if ( args.length === 1 ) {
744 view.height( value );
748 size : function ( width, height ) {
752 view.width( width ).height( height );
755 fullscreen : function ( value ) {
758 control = view.parent().find( ".ui-multimediaview-control" ),
759 fullscreenButton = control.find( ".ui-fullscreenbutton" ),
761 option = self.options,
762 currentPage = $( ".ui-page-active" );
764 if ( args.length === 0 ) {
765 return option.fullscreen;
767 if ( args.length === 1 ) {
768 view.parents( ".ui-content" ).scrollview( "scrollTo", 0, 0 );
770 this.options.fullscreen = value;
772 currentPage.children( ".ui-header" ).hide();
773 currentPage.children( ".ui-footer" ).hide();
774 this._fitContentArea( currentPage );
775 fullscreenButton.removeClass( "ui-fullscreen-on" ).addClass( "ui-fullscreen-off" );
777 currentPage.children( ".ui-header" ).show();
778 currentPage.children( ".ui-footer" ).show();
779 this._fitContentArea( currentPage );
780 fullscreenButton.removeClass( "ui-fullscreen-off" ).addClass( "ui-fullscreen-on" );
785 refresh : function () {
790 $( document ).bind( "pagecreate create", function ( e ) {
791 $.tizen.multimediaview.prototype.enhanceWithin( e.target );
793 } ( jQuery, document, window ) );