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