2 * this file exposes some of the functionality of mwEmbed to wikis
3 * that do not yet have js2 enabled
6 var urlparts
= getRemoteEmbedPath();
7 var mwEmbedHostPath
= urlparts
[0];
8 var mwRemoteVersion
= '1.06';
9 var mwUseScriptLoader
= true;
11 //setup up request Params:
12 var reqParts
= urlparts
[1].substring(1).split('&');
14 for(var i
=0;i
< reqParts
.length
; i
++){
15 var p
= reqParts
[i
].split('=');
17 mwReqParam
[ p
[0] ] = p
[1];
20 addOnloadHook( function(){
21 // Only do rewrites if MV_EMBED / js2 is "off"
22 if( typeof MV_EMBED_VERSION
== 'undefined' ) {
23 doPageSpecificRewrite();
27 function doPageSpecificRewrite() {
29 if( wgAction
== 'edit' || wgAction
== 'submit' ) {
30 load_mv_embed( function() {
31 loadExternalJs( mwEmbedHostPath
+ '/editPage.js?' + mwGetReqArgs() );
35 // Timed text display:
36 if(wgPageName
.indexOf("TimedText") === 0){
37 load_mv_embed(function(){
38 // Load with mw loader to get localized interface:
39 $mw
.load( ['mvTimeTextEdit'],function(){
40 //could run init here (but mvTimeTextEdit included onLoad actions)
45 // Firefogg integration
46 if( wgPageName
== "Special:Upload" ){
47 load_mv_embed( function() {
48 loadExternalJs( mwEmbedHostPath
+ '/uploadPage.js?' + mwGetReqArgs() );
52 // Special api proxy page
53 if( wgPageName
== 'MediaWiki:ApiProxy' ){
54 var wgEnableIframeApiProxy
= true;
55 load_mv_embed( function() {
56 js_log("Wiki:ApiProxy::");
57 loadExternalJs( mwEmbedHostPath
+ '/apiProxyPage.js?' + mwGetReqArgs() );
61 // OggHandler rewrite for view pages:
63 var divs
= document
.getElementsByTagName( 'div' );
64 for( var i
= 0; i
< divs
.length
; i
++ ) {
65 if( divs
[i
].id
&& divs
[i
].id
.substring( 0, 11 ) == 'ogg_player_' ) {
66 vidIdList
.push( divs
[i
].getAttribute( "id" ) );
69 if( vidIdList
.length
> 0 ) {
70 load_mv_embed( function() {
71 mvJsLoader
.embedVideoCheck( function() {
72 // Do utility rewrite of OggHandler content:
73 rewrite_for_OggHandler( vidIdList
);
78 // This will be depreciated in favour of updates to OggHandler
79 function rewrite_for_OggHandler( vidIdList
){
80 function procVidId( vidId
){
81 //don't process empty vids
84 js_log('vidIdList on: ' + vidId
+' length: ' + vidIdList
.length
+ ' left in the set: ' + vidIdList
);
86 // Grab the thumbnail and src of the video
87 var pimg
= $j( '#' + vidId
+ ' img' );
88 var poster_attr
= 'poster = "' + pimg
.attr( 'src' ) + '" ';
89 var pwidth
= $j( '#' + vidId
).width();
90 var pheight
= $j( '#' + vidId
+ ' img').height();
91 var tag_type
= 'video';
94 if( pheight
== '22' || pheight
== '52') {
95 //set width to parent width:
102 var duration_attr
= '';
103 var wikiTitleKey
= $j( '#'+vidId
+ ' img').filter(':first').attr('src').split('/');
104 wikiTitleKey
= unescape( wikiTitleKey
[ wikiTitleKey
.length
- 2 ] );
105 var re
= new RegExp( /videoUrl(":?\s*)*([^&]*)/ );
106 src
= re
.exec( $j( '#'+vidId
).html() )[2];
108 var re
= new RegExp( /length(":?\s*)*([^,]*)/ );
109 var dv
= re
.exec( $j( '#'+vidId
).html() )[2];
111 duration_attr
= 'durationHint="'+ dv
+'" ';
114 var re
= new RegExp( /offset(":?\s*)*([^&]*)/ );
115 offset
= re
.exec( $j( '#'+vidId
).html() )[2];
116 var offset_attr
= offset
? 'startOffset="' + offset
+ '"' : '';
121 var common_attr
= ' id="mwe_' + vidId
+'" '+
122 'wikiTitleKey="' + wikiTitleKey
+ '" ' +
123 'src="' + src
+ '" ' +
127 if( tag_type
== 'audio' ){
128 html_out
='<audio' + common_attr
+ ' style="width:' + pwidth
+ 'px;"></audio>';
130 html_out
='<video' + common_attr
+
132 'style="width:' + pwidth
+ 'px;height:' + pheight
+ 'px;">' +
135 //set the video tag inner html and update the height
136 $j( '#' + vidId
).html( html_out
)
137 .css('height', pheight
+ 30);
140 rewrite_by_id( 'mwe_' + vidId
, function(){
141 if( vidIdList
.length
!= 0 ){
142 setTimeout( function(){
143 procVidId( vidIdList
.pop() )
148 //process each item in the vidIdList (with setTimeout to avoid locking)
149 procVidId( vidIdList
.pop() );
151 function getRemoteEmbedPath() {
152 for( var i
= 0; i
< document
.getElementsByTagName( 'script' ).length
; i
++ ) {
153 var s
= document
.getElementsByTagName( 'script' )[i
];
154 if( s
.src
.indexOf( '/remoteMwEmbed.js' ) != -1 ) {
157 if( s
.src
.indexOf( '?' ) != -1) {
158 reqStr
= s
.src
.substr( s
.src
.indexOf( '?' ) );
159 scriptPath
= s
.src
.substr( 0, s
.src
.indexOf( '?' ) ).replace( '/remoteMwEmbed.js', '' );
161 scriptPath
= s
.src
.replace( '/remoteMwEmbed.js', '' )
163 // Use the external_media_wizard path:
164 return [scriptPath
, reqStr
];
168 function mwGetReqArgs(){
170 if(mwReqParam
['debug'])
171 rurl
+= 'debug=true&';
173 if(mwReqParam
['uselang'] )
174 rurl
+= 'uselang=' + mwReqParam
['uselang'] + '&';
176 if( mwReqParam
['urid'] ){
177 rurl
+= 'urid=' + mwReqParam
['urid'];
179 // Make sure to use an urid
180 // This way remoteMwEmbed can control version of code being requested
181 rurl
+= 'urid=' + mwRemoteVersion
;
185 function load_mv_embed( callback
) {
186 // Inject mv_embed if needed
187 if( typeof $mw
== 'undefined' ) {
188 if( ( mwReqParam
['uselang'] || mwReqParam
['useloader'] ) && mwUseScriptLoader
){
189 var rurl
= mwEmbedHostPath
+ '/mwEmbed/jsScriptLoader.php?class=mv_embed';
190 // Add jQuery too if we need it:
191 if(typeof window
.jQuery
== 'undefined'){
192 rurl
+= ',window.jQuery';
194 rurl
+= '&' + mwGetReqArgs();
196 importScriptURI( rurl
);
198 importScriptURI( mwEmbedHostPath
+ '/mwEmbed/mv_embed.js?' + mwGetReqArgs() );
201 check_for_mv_embed( callback
);
204 function check_for_mv_embed( callback
) {
205 if( typeof $mw
== 'undefined' ) {
206 setTimeout( function(){
207 check_for_mv_embed( callback
);