Localisation updates for core and extension messages from translatewiki.net (2009...
[lhc/web/wiklou.git] / js2 / remoteMwEmbed.js
1 /*
2 * This file exposes some of the functionality of mwEmbed to wikis
3 * that do not yet have js2 enabled
4 */
5
6 var urlparts = getRemoteEmbedPath();
7 var mwEmbedHostPath = urlparts[0];
8 var mwRemoteVersion = '1.08';
9 var mwUseScriptLoader = true;
10
11 // setup up request Params:
12 var reqParts = urlparts[1].substring( 1 ).split( '&' );
13 var mwReqParam = { };
14 for ( var i = 0; i < reqParts.length; i++ ) {
15 var p = reqParts[i].split( '=' );
16 if ( p.length == 2 )
17 mwReqParam[ p[0] ] = p[1];
18 }
19
20 addOnloadHook( function() {
21 // Only do rewrites if MV_EMBED / js2 is "off"
22 if ( typeof MV_EMBED_VERSION == 'undefined' ) {
23 doPageSpecificRewrite();
24 }
25 } );
26
27 function doPageSpecificRewrite() {
28 // Add media wizard
29 if ( wgAction == 'edit' || wgAction == 'submit' ) {
30 load_mv_embed( function() {
31 loadExternalJs( mwEmbedHostPath + '/editPage.js?' + mwGetReqArgs() );
32 } );
33 }
34
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)
41 } );
42 } );
43 }
44
45 // Firefogg integration
46 if ( wgPageName == "Special:Upload" ) {
47 load_mv_embed( function() {
48 loadExternalJs( mwEmbedHostPath + '/uploadPage.js?' + mwGetReqArgs() );
49 } );
50 }
51
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() );
58 } );
59 }
60
61 // OggHandler rewrite for view pages:
62 var vidIdList = [];
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" ) );
67 }
68 }
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 );
74 } );
75 } );
76 }
77 }
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
82 if ( !vidId )
83 return ;
84 js_log( 'vidIdList on: ' + vidId + ' length: ' + vidIdList.length + ' left in the set: ' + vidIdList );
85
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';
92
93 // Check for audio
94 if ( pheight == '22' || pheight == '52' ) {
95 // set width to parent width:
96 tag_type = 'audio';
97 poster_attr = '';
98 }
99
100 // Parsed values:
101 var src = '';
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(&quot;:?\s*)*([^&]*)/ );
106 src = re.exec( $j( '#' + vidId ).html() )[2];
107
108 var re = new RegExp( /length(&quot;:?\s*)*([^,]*)/ );
109 var dv = re.exec( $j( '#' + vidId ).html() )[2];
110 if ( dv ) {
111 duration_attr = 'durationHint="' + dv + '" ';
112 }
113
114 var re = new RegExp( /offset(&quot;:?\s*)*([^&]*)/ );
115 offset = re.exec( $j( '#' + vidId ).html() )[2];
116 var offset_attr = offset ? 'startOffset="' + offset + '"' : '';
117
118 if ( src ) {
119 var html_out = '';
120
121 var common_attr = ' id="mwe_' + vidId + '" ' +
122 'wikiTitleKey="' + wikiTitleKey + '" ' +
123 'src="' + src + '" ' +
124 duration_attr +
125 offset_attr + ' ';
126
127 if ( tag_type == 'audio' ) {
128 html_out = '<audio' + common_attr + ' style="width:' + pwidth + 'px;"></audio>';
129 } else {
130 html_out = '<video' + common_attr +
131 poster_attr + ' ' +
132 'style="width:' + pwidth + 'px;height:' + pheight + 'px;">' +
133 '</video>';
134 }
135 // set the video tag inner html and update the height
136 $j( '#' + vidId ).html( html_out )
137 .css( 'height', pheight + 30 );
138
139 }
140 rewrite_by_id( 'mwe_' + vidId, function() {
141 if ( vidIdList.length != 0 ) {
142 setTimeout( function() {
143 procVidId( vidIdList.pop() )
144 }, 10 );
145 }
146 } );
147 };
148 // process each item in the vidIdList (with setTimeout to avoid locking)
149 procVidId( vidIdList.pop() );
150 }
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 ) {
155 var reqStr = '';
156 var scriptPath = '';
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', '' );
160 } else {
161 scriptPath = s.src.replace( '/remoteMwEmbed.js', '' )
162 }
163 // Use the external_media_wizard path:
164 return [scriptPath, reqStr];
165 }
166 }
167 }
168 function mwGetReqArgs() {
169 var rurl = '';
170 if ( mwReqParam['debug'] )
171 rurl += 'debug=true&';
172
173 if ( mwReqParam['uselang'] )
174 rurl += 'uselang=' + mwReqParam['uselang'] + '&';
175
176 if ( mwReqParam['urid'] ) {
177 rurl += 'urid=' + mwReqParam['urid'];
178 } else {
179 // Make sure to use an urid
180 // This way remoteMwEmbed can control version of code being requested
181 rurl += 'urid=' + mwRemoteVersion;
182 }
183 return rurl;
184 }
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';
193 }
194 rurl += '&' + mwGetReqArgs();
195
196 importScriptURI( rurl );
197 } else {
198 importScriptURI( mwEmbedHostPath + '/mwEmbed/mv_embed.js?' + mwGetReqArgs() );
199 }
200 }
201 check_for_mv_embed( callback );
202 }
203
204 function check_for_mv_embed( callback ) {
205 if ( typeof mw == 'undefined' ) {
206 setTimeout( function() {
207 check_for_mv_embed( callback );
208 }, 25 );
209 } else {
210 callback();
211 }
212 }