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.06';
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 }