http://www.mediawiki.org/wiki/Special:Code/MediaWiki/72188

Revision: 72188
Author:   dale
Date:     2010-09-02 05:01:23 +0000 (Thu, 02 Sep 2010)

Log Message:
-----------
* stubs for dynamic template title screen smil clips

Modified Paths:
--------------
    branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerAddByUrl.js
    branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerAddMedia.js
    branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerPlayer.js
    branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerRender.js
    branches/MwEmbedStandAlone/modules/SmilPlayer/mw.Smil.js
    branches/MwEmbedStandAlone/modules/SmilPlayer/mw.SmilLayout.js

Modified: branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerAddByUrl.js
===================================================================
--- branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerAddByUrl.js        
2010-09-02 02:50:21 UTC (rev 72187)
+++ branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerAddByUrl.js        
2010-09-02 05:01:23 UTC (rev 72188)
@@ -74,8 +74,35 @@
                                                                        
mw.closeLoaderDialog();
                                                                });             
                                                        
                                                        });     
-                                               } else {
-                                                       // xxx special Template 
resource import goes here
+                                               } else if( 
titleKey.indexOf('Template:') == 0 ) {
+                                                       // get parsed page text
+                                                       var request ={
+                                                               
'action':'parse',
+                                                               'page' : 
titleKey
+                                                       }
+                                                       // should maybe
+                                                       mw.getJSON( 
provider.apiUrl, request, function( data ){
+                                                               if( !data || 
!data.parse || !data.parse.text || !data.parse.text['*'] ){
+                                                                       
$dialog.html( 'Error loading asset');
+                                                                       return 
; 
+                                                               }
+                                                               var apiProvider 
= '';
+                                                               if( 
mw.parseUri( _this.getApiUrl() ).host == 'commons.wikimedia.org' ){
+                                                                       
apiProvider = 'commons'
+                                                               } else {
+                                                                       // xxx 
we need to abstract the remoteSearch driver provider logic
+                                                                       // into 
a provider class
+                                                                       
apiProvider = 'local';
+                                                               }
+                                                               // Get the 
rendered page text: 
+                                                               _this
+                                                               .sequencer
+                                                               .getAddMedia()
+                                                               
.getSmilClipFromWikiTemplate( titleKey, apiProvider, function( smilClip ){
+                                                                       
_this.sequencer.getTimeline().insertSmilClipEdit( smilClip );
+                                                                       
mw.closeLoaderDialog();
+                                                               });
+                                                       })                      
                                
                                                }
                                                                                
                                        });

Modified: branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerAddMedia.js
===================================================================
--- branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerAddMedia.js        
2010-09-02 02:50:21 UTC (rev 72187)
+++ branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerAddMedia.js        
2010-09-02 05:01:23 UTC (rev 72188)
@@ -176,6 +176,17 @@
                var resource = this.getResourceFromAsset( assetElement )
                this.getSmilClipFromResource ( resource, callback );
        },
+       
+       getSmilClipFromWikiTemplate: function( titleKey, provider, callback){   
        
+               return $j( '<ref />' )
+                       .attr({
+                               'type': "application/x-wikitemplate",
+                               'apiTitleKey' : titleKey,
+                               // xxx For now just force commons
+                               'apiProvider' : 'commons'
+                       })                      
+       },
+       
        /**
         * Take an addMedia 'resource' and convert to a smil 
         *  ref node that can be inserted into a smil xml tree

Modified: branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerPlayer.js
===================================================================
--- branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerPlayer.js  
2010-09-02 02:50:21 UTC (rev 72187)
+++ branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerPlayer.js  
2010-09-02 05:01:23 UTC (rev 72188)
@@ -25,8 +25,13 @@
                this.sequencer.getSmilSource( function( smilSource ){
                        mw.log("SequencePlayer::drawPlayer: Built player target 
url length:" + smilSource.length );
                        // Add the player
+                       var $video = $j('<video />');
+                       // Set the title key if we have it if we have a title 
key
+                       if( _this.sequencer.getServer().getTitleKey() ){
+                               $video.attr('apiTitleKey',  
_this.sequencer.getServer().getTitleKey() );
+                       }
                        $playerTarget.html(
-                               $j('<video />').css(
+                               $video.css(
                                        _this.getPlayerSize()
                                ).attr({
                                        'id' : _this.getSmilPlayerId()

Modified: branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerRender.js
===================================================================
--- branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerRender.js  
2010-09-02 02:50:21 UTC (rev 72187)
+++ branches/MwEmbedStandAlone/modules/Sequencer/mw.SequencerRender.js  
2010-09-02 05:01:23 UTC (rev 72188)
@@ -25,14 +25,19 @@
        
        getEmbedVideoRender: function(){
                var _this = this;
-               return $j('<video />').css({
+               var $video = $j('<video />').css({
                        'width': 400,
                        'height': 300
                }).attr({
                        'id' : 'firefoggRenderVideo',
                        'type' : 'application/smil',
                        'src' : _this.sequenceror.getSmilSource()
-               }).embedPlayer(function(){
+               })
+               // Set the title key if we have it
+               if( _this.sequencer.getServer().getTitleKey() ){
+                       $video.attr('apiTitleKey',  
_this.sequencer.getServer().getTitleKey() );
+               }
+               return $video.embedPlayer(function(){
                        // status area
                        $j('#firefoggRenderVideo').after( 
                                $j('<div />').attr('id', 'targetFoggStatus')    
        

Modified: branches/MwEmbedStandAlone/modules/SmilPlayer/mw.Smil.js
===================================================================
--- branches/MwEmbedStandAlone/modules/SmilPlayer/mw.Smil.js    2010-09-02 
02:50:21 UTC (rev 72187)
+++ branches/MwEmbedStandAlone/modules/SmilPlayer/mw.Smil.js    2010-09-02 
05:01:23 UTC (rev 72188)
@@ -406,6 +406,7 @@
                // If the smilType is ref, check for a content type
                if (smilType == 'ref') {
                        switch ($j(smilElement).attr('type')) {
+                       case 'application/x-wikitemplate':
                        case 'text/html':
                                smilType = 'cdata_html';
                                break;

Modified: branches/MwEmbedStandAlone/modules/SmilPlayer/mw.SmilLayout.js
===================================================================
--- branches/MwEmbedStandAlone/modules/SmilPlayer/mw.SmilLayout.js      
2010-09-02 02:50:21 UTC (rev 72187)
+++ branches/MwEmbedStandAlone/modules/SmilPlayer/mw.SmilLayout.js      
2010-09-02 05:01:23 UTC (rev 72188)
@@ -111,7 +111,7 @@
                                $j( '#' + this.smil.getPageDomId( smilElement ) 
).length );
        },
        
-       drawElementThumb: function( $target, $node, relativeTime, callback){
+       drawElementThumb: function( $target, $node, relativeTime, callback ){
                var _this = this;
                mw.log('SmilLayout::drawElementThumb: ' + $node.attr('id') + ' 
relative time:' + relativeTime );        
                if( $target.length == 0 ){
@@ -121,11 +121,12 @@
                // parse the time in case it came in as human input
                relativeTime = this.smil.parseTime( relativeTime );
                
-               if( this.smil.getRefType( $node ) == 'video' ){
-                       this.getVideoCanvasThumb($target,  $node, relativeTime, 
callback )              
-                       return ;
-               }
-               switch ( this.smil.getRefType( $node )  ){              
+               
+               switch ( this.smil.getRefType( $node )  ){
+                       case 'video':
+                               this.getVideoCanvasThumb($target,  $node, 
relativeTime, callback )              
+                               return ;
+                       break;
                        case 'img':
                                // XXX should refactor and to use same path as 
player embed
                                // xxx we should use canvas here but for now 
just hack it up:           
@@ -151,13 +152,14 @@
                                        if( $node.attr('panZoom') ){
                                                _this.panZoomLayout( 
$node.get(0), $target, img );
                                        }
+                                       if( callback )
+                                               callback();
                                }); 
+                               return 
                        break;
                        case 'cdata_html':
                                // Scale down the html into the target width
-                               $target.html( 
-                                       this.getSmilCDATAHtml( $node, 
$target.width() )
-                               )
+                               this.addSmilCDATAHtml( $node, $target, callback 
);
                        break;
                        case 'audio':                   
                                var titleStr = ( $node.attr('title') )?  
$node.attr('title') : gM( 'mwe-sequencer-untitled-audio' )
@@ -286,7 +288,7 @@
                        // Not part of strict smil, but saves time being able 
have an "html"
                        // display mode
                        case 'cdata_html': 
-                               $regionTarget.append( this.getSmilCDATAHtml( 
smilElement ) );
+                               this.addSmilCDATAHtml( smilElement, 
$regionTarget );
                                return ;
                        break;
                        case 'video': 
@@ -351,11 +353,62 @@
         * @@TODO check all sources are "local" only smil and enforce domain on 
all
         *        asset sources
         */
-       getSmilCDATAHtml: function( smilElement, targetWidth ){ 
-               // Default target width if unset:
-               if( ! targetWidth )
-                       targetWidth  = this.targetWidth;
-               
+       addSmilCDATAHtml: function( smilElement, $target, callback ){
+               if( $j( smilElement).attr('type') == 'text/html' ){
+                       $target.append( this.getSmilCDATAHtml(smilElement, 
$target.width() ));
+                       if( callback )
+                               callback();
+                       return ;
+               }
+               // Check if we need to load the content: 
+               if( $j( smilElement).attr('type') == 
'application/x-wikitemplate' ){
+                       // build a wikitext call
+                       var templateKey = $j( 
smilElement).attr('apiTitleKey').replace('Template:', '');
+                       if(!templateKey){
+                               mw.log("Error: wikitemplate without title key")
+                               return ;
+                       }
+                       var apiProviderUrl = mw.getApiProviderURL( $j( 
smilElement).attr('apiProvider') );
+                       if(!apiProviderUrl){
+                               mw.log("Error: wikitemplate without api 
provider url")
+                       }
+                       
+                       var wikiTextTemplateCall = '' +
+                       '{{' + templateKey + "\n";
+                       $j( smilElement).find('param').each(function( inx, 
paramNode ){
+                               wikiTextTemplateCall+= $j( paramNode 
).attr('name') + '= ' +  
+                                       unescape(  $j( paramNode 
).attr('value') )
+                       });
+                       
+                       // Close up the template call
+                       wikiTextTemplateCall+="\n}}";
+                       var request = {
+                               'action' : 'parse',
+                               'text': wikiTextTemplateCall,
+                       };
+                       // Check if we have the titleKey for the sequence and 
use that as context title
+                       var titleKey = this.smil.getEmbedPlayer().apiTitleKey;
+                       if( titleKey ){
+                               request['title'] = titleKey;
+                       }
+                       mw.getJSON( apiProviderUrl, request, function(data){
+                               if( data && data.parse && data.parse.text && 
data.parse.text['*'] ){
+                                       $target.html('<![CDATA[' +
+                                                        data.parse.text['*'] 
+                                       + "\n]]>")
+                                       $target.append( 
this.getSmilCDATAHtml(smilElement, $target.width() ));
+                                       if( callback ) 
+                                               callback();
+                               }
+                               mw.log("Error could not get template data")
+                               if( callback ) 
+                                       callback();
+                       });
+               } 
+       },
+       
+       getSmilCDATAHtml: function( smilElement, targetWidth){
+       
                mw.log("getSmilCDATAHtml:" + $j( smilElement ).attr('id') +' :' 
+ targetWidth );
                
                // Get "clean" smil data



_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to