* added fallback for load rule set call (loadRS)
[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 reqAguments = urlparts[1];
9
10 addOnloadHook( function(){
11 //only do rewrites if MV_EMBED / js2 is "off"
12 if( typeof MV_EMBED_VERSION == 'undefined' ) {
13 doPageSpecificRewrite();
14 }
15 });
16
17 function doPageSpecificRewrite() {
18 // Add media wizard
19 if( wgAction == 'edit' || wgAction == 'submit' ) {
20 load_mv_embed( function() {
21 importScriptURI( mwEmbedHostPath + '/editPage.js' + reqAguments );
22 } );
23 }
24
25 // Firefogg integration
26 if( wgPageName == "Special:Upload" ){
27 load_mv_embed( function() {
28 importScriptURI( mwEmbedHostPath + '/uploadPage.js' + reqAguments );
29 } );
30 }
31
32 // OggHandler rewrite for view pages:
33 var vidIdList = [];
34 var divs = document.getElementsByTagName( 'div' );
35 for( var i = 0; i < divs.length; i++ ) {
36 if( divs[i].id && divs[i].id.substring( 0, 11 ) == 'ogg_player_' ) {
37 vidIdList.push( divs[i].getAttribute( "id" ) );
38 }
39 }
40 if( vidIdList.length > 0 ) {
41 load_mv_embed( function() {
42 mvJsLoader.embedVideoCheck( function() {
43 // Do utility rewrite of OggHandler content:
44 rewrite_for_OggHandler( vidIdList );
45 } );
46 } );
47 }
48 }
49 // will be deprecated in favor of updates to OggHandler
50 function rewrite_for_OggHandler( vidIdList ){
51 for( var i = 0; i < vidIdList.length; i++ ) {
52 var vidId = vidIdList[i];
53 // Grab the thumbnail and src of the video
54 var pimg = $j( '#' + vidId + ' img' );
55 var poster_attr = 'poster = "' + pimg.attr( 'src' ) + '" ';
56 var pwidth = pimg.attr( 'width' );
57 var pheight = pimg.attr( 'height' );
58
59 var type_attr = '';
60 // Check for audio
61 if( pwidth == '22' && pheight == '22' ) {
62 //set width to parent width:
63 pwidth = $j( '#' + vidId ).width();
64 pheight = '100';
65 type_attr = 'type="audio/ogg"';
66 poster_attr = '';
67 }
68
69 // Parsed values:
70 var src = '';
71 var duration = '';
72
73 var re = new RegExp( /videoUrl(&quot;:?\s*)*([^&]*)/ );
74 src = re.exec( $j( '#'+vidId).html() )[2];
75
76 var re = new RegExp( /length(&quot;:?\s*)*([^&]*)/ );
77 duration = re.exec( $j( '#'+vidId).html() )[2];
78
79 var re = new RegExp( /offset(&quot;:?\s*)*([^&]*)/ );
80 offset = re.exec( $j( '#'+vidId).html() )[2];
81 var offset_attr = offset ? 'startOffset="' + offset + '"' : '';
82
83 // Rewrite that video id (do async calls to avoid locking)
84 if( src ) {
85 // Replace the top div with the mv_embed based player:
86 var vid_html = '<video id="vid_' + i +'" '+
87 'src="' + src + '" ' +
88 poster_attr + ' ' +
89 type_attr + ' ' +
90 offset_attr + ' ' +
91 'duration="' + duration + '" ' +
92 'style="width:' + pwidth + 'px;height:' +
93 pheight + 'px;"></video>';
94 //set the video tag inner html and update the height
95 $j( '#' + vidId ).html( vid_html )
96 .css('height', pheight + 20);
97
98 }
99
100 rewrite_by_id( 'vid_' + i );
101 }
102 }
103
104 function getRemoteEmbedPath() {
105 for( var i = 0; i < document.getElementsByTagName( 'script' ).length; i++ ) {
106 var s = document.getElementsByTagName( 'script' )[i];
107 if( s.src.indexOf( 'remoteMwEmbed.js' ) != -1 ) {
108 var reqStr = '';
109 var scriptPath = '';
110 if( s.src.indexOf( '?' ) != -1) {
111 reqStr = s.src.substr( s.src.indexOf( '?' ) );
112 scriptPath = s.src.substr( 0, s.src.indexOf( '?' ) ).replace( 'remoteMwEmbed.js', '' );
113 } else {
114 scriptPath = s.src.replace( 'remoteMwEmbed.js', '' )
115 }
116 // Use the external_media_wizard path:
117 return [scriptPath, reqStr];
118 }
119 }
120 }
121
122 function load_mv_embed( callback ) {
123 // Inject mv_embed if needed
124 if( typeof mvEmbed == 'undefined' ) {
125 importScriptURI( mwEmbedHostPath + '/mwEmbed/mv_embed.js' + reqAguments );
126 check_for_mv_embed( callback );
127 } else {
128 check_for_mv_embed( callback );
129 }
130 }
131
132 function check_for_mv_embed( callback ) {
133 if( typeof MV_EMBED_VERSION == 'undefined' ) {
134 setTimeout( function(){
135 check_for_mv_embed( callback );
136 }, 25 );
137 } else {
138 callback();
139 }
140 }