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.08';
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
);