PageRenderTime 32ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/extensions/MetavidWiki/skins/mv_allpages.js

https://github.com/ChuguluGames/mediawiki-svn
JavaScript | 286 lines | 243 code | 4 blank | 39 comment | 36 complexity | fae2d9ed31345f0798acb988c5ee3c1f MD5 | raw file
  1. //javascript for all pages (adds auto_complete for search, and our linkback logo, and re-writes mvd links)
  2. _global = this;
  3. var mv_setup_allpage_flag=false;
  4. if( typeof wgServer!='undefined' && typeof wgScript != 'undefined'){
  5. var base_roe_url = wgServer + wgScript + '?title=Special:MvExportStream&feed_format=roe&stream_name=';
  6. }else{
  7. var base_roe_url = '';
  8. }
  9. //force wgScript path for blog support
  10. if(typeof wgScript=='undefined')
  11. var wgScript = "/w/index.php";
  12. if(typeof wgScriptPath=='undefined')
  13. var wgScriptPath = '/w';
  14. var gMvd={};
  15. mw.ready(function(){
  16. mw.log("mv embed done loading now setup 'all page'");
  17. //make sure we have jQuery and any base required libs:
  18. mw.log('allpage_ did jquery check');
  19. mw.load( [
  20. '$j.fn.autocomplete'
  21. ], function(){
  22. //mw.log('allpage_ auto and hover check'+mv_setup_allpage_flag);
  23. if( ! mv_setup_allpage_flag ){
  24. mv_setup_search_ac();
  25. mv_do_mvd_link_rewrite();
  26. mv_page_specific_rewrites();
  27. //set the flag:
  28. mv_setup_allpage_flag=true;
  29. }
  30. });
  31. });
  32. function mv_do_sequence_edit_swap(mode){
  33. if(mode=='text'){
  34. $j('#seq_edit_container,#swich_seq_text').hide();
  35. $j('#mv_text_edit_container,#switch_seq_wysiwyg').show();
  36. }else if(mode=='seq' || mode=='seq_update'){
  37. $j('#mv_text_edit_container,#switch_seq_wysiwyg').hide();
  38. $j('#seq_edit_container,#swich_seq_text').show();
  39. if( mode == 'seq_update' ){
  40. mw.log('do server side text parse');
  41. //$j('#seq_edit_container').html( gMsg('loading') );
  42. }
  43. //check if the seq is already ready:
  44. if( typeof _global['mvSeq'] == 'undefined' ){
  45. $j('#seq_edit_container').sequencer({
  46. 'mv_pl_src':mvSeqExportUrl
  47. });
  48. }
  49. }
  50. }
  51. function mv_page_specific_rewrites(){
  52. var mvAskTitle = 'Special:MvExportAsk';
  53. var rssImg = '<img border="0" src="'+wgScriptPath+'/extensions/MetavidWiki/skins/images/feed-icon-28x28.png"/>';
  54. var msg_video_rss = 'video rss';
  55. if($j('#NOTITLEHACK').length!=0)$j('.firstHeading').hide();
  56. //add in rss-media feed link if on Special:Ask page
  57. if(typeof wgPageName!='undefined'){
  58. if(wgPageName=='Special:Ask'){
  59. mw.log("url : " + document.location);
  60. var sURL = parseUri(document.location);
  61. var podLink=wgArticlePath.replace('$1', mvAskTitle);
  62. if(sURL.queryKey['title']){
  63. //pass along all url params (update the title)
  64. podLink+='?';
  65. for(i in sURL.queryKey){
  66. if(i !='title')podLink+=i+'='+sURL.queryKey[i]+'&';
  67. }
  68. }else{
  69. // /title/askparam format
  70. var pInx =sURL.relative.indexOf(wgPageName);
  71. if(pInx!==false){
  72. podLink+= sURL.relative.substring(pInx+wgPageName.length);
  73. }
  74. }
  75. //@@todo add to javascript msg system
  76. $j('#bodyContent').before('<span style="float: right;"><a title="'+
  77. msg_video_rss+'" href="'+podLink+'">'+ rssImg + '</a></span>');
  78. }
  79. }
  80. //move the search filter if #msms_form_search_row
  81. if($j('#msms_form_search_row').get(0)!=null){
  82. $j('#msms_form_search_row').appendTo("#searchHeader");
  83. }
  84. //if we have an inline query add a search link
  85. $j('.smwtable').each(function(){
  86. if($j('#'+this.id+' .smwfooter a').length!=0){
  87. var pLink = $j('#'+this.id+' .smwfooter a').attr('href').replace('Special:Ask',mvAskTitle );
  88. var colspan = $j('.smwfooter .sortbottom').attr('colspan');
  89. var pHTML = '<a title="'+msg_video_rss+'" href="'+pLink+'">'+rssImg+'</a>';
  90. mw.log("plink: "+pLink + ' colspan:'+ colspan + ' ph:'+pHTML);
  91. $j('#'+this.id+' tbody').prepend('<tr><td colspan="'+colspan+'">'+pHTML+'</td></tr>');
  92. }
  93. });
  94. }
  95. function mv_do_mvd_link_rewrite(){
  96. mw.log('mv_do_mvd_link_rewrite');
  97. var patt_mvd = new RegExp("MVD:([^:]*):([^\/]*)\/([0-9]+:[0-9]+:[^\/]+)\/([0-9]+:[0-9]+:[^\&]+)(&?.*)");
  98. var i =0;
  99. $j('a').each(function(){
  100. if(this.href.indexOf('Special:')==-1 && this.href.indexOf('action=')==-1){
  101. titleTest = this.title.match(patt_mvd);
  102. if(titleTest){
  103. res = this.href.match(patt_mvd);
  104. if(res){
  105. if(res[5]!='')return ;
  106. //skip if res[4] not at end:
  107. //mw.log(res);
  108. i++;
  109. if(!gMvd[i])gMvd[i]={};
  110. gMvd[i]['url']=res[0];
  111. gMvd[i]['sn']=res[2]; //stream name
  112. gMvd[i]['st']=res[3]; //start time
  113. gMvd[i]['et']=res[4]; //end time
  114. //mw.log(this.href);
  115. //mw.log(res);
  116. //replace with:
  117. //check if we are instance of smwb-title (if so reduce font size)
  118. var fsize = ( $j(this).parents().is(".smwb-title") )? '50%':'100%';
  119. //TEMP:
  120. $j(this).replaceWith('<div id="mvd_link_'+i+'" ' +
  121. 'style="display:inline-block;font-size:'+fsize+';vertical-align: middle;margin:.5em;border:solid thin black;width:300px;height:60px;">' +
  122. get_mvdrw_img(i) +
  123. '</div>');
  124. $j('#mv_mvd_ex_'+i).click(function(){
  125. inx = this.id.substr(10);
  126. mv_ext(inx);
  127. });
  128. $j('#mv_pglink_'+i).click(function(){
  129. inx = this.id.substr(10);
  130. mw.log('inx: '+ inx);
  131. window.location = wgArticlePath.replace('$1',gMvd[inx]['url']);
  132. })
  133. }
  134. }
  135. }
  136. });
  137. mw.log('got to I: '+i);
  138. $j('#mvd_link_'+i).after('<div style="clear:both"></div>')
  139. }
  140. function get_mvdrw_img(i, size){
  141. var size = (!size)?{'w':80,'h':60}:size;
  142. var stream_link = wgScript+'?title=Stream:'+gMvd[i]['sn']+'/'+gMvd[i]['st']+'/'+gMvd[i]['et'];
  143. var stream_desc = gMvd[i]['sn'].substr(0,1).toUpperCase() + gMvd[i]['sn'].substr(1).replace('_', ' ')+' '+ gMvd[i]['st'] + ' to '+ gMvd[i]['et'];
  144. //@@todo localize javascript msg
  145. var wiki_link = '<span title="Edited Wiki Page" id="mv_pglink_'+i+'" style="cursor:pointer;width:16px;height:16px;float:left;background:url(\''+wgScriptPath+'/extensions/MetavidWiki/skins/images/run_mediawiki.png\');"/>';
  146. var expand_link = '<span title="Play Inline" id="mv_mvd_ex_'+i+'" style="cursor:pointer;width:16px;height:16px;float:left;background:url(\''+wgScriptPath+'/extensions/MetavidWiki/skins/images/closed.png\');"/>';
  147. var img_url = wgScript+'?action=ajax&rs=mv_frame_server&stream_name='+gMvd[i]['sn']+'&t='+gMvd[i]['st']+'&size=icon';
  148. return '<img id="mvd_link_im_'+i+'" onclick="mv_ext('+i+')" ' +
  149. 'style="cursor:pointer;float:left;height:'+size['h']+'px;width:'+size['w']+'px;" src="'+img_url+'">'+expand_link+wiki_link+' '+
  150. '<a title="'+stream_desc+'" href="'+stream_link+'">'+stream_desc+'</a><br>';
  151. }
  152. function mv_ext(inx){
  153. mw.log('f:inx:'+inx);
  154. //grow the window to 300+240 540
  155. mw.log('i: is '+ inx);
  156. $j('#mvd_link_'+inx).animate({width:'400px','height':'370px'},1000);
  157. $j('#mvd_link_im_'+inx).animate({width:'400px','height':'300px'},1000,function(){
  158. //do mv_embed swap
  159. $j('#mvd_link_im_'+inx).replaceWith('<div style="height:300px;width:400px;">' +
  160. '<video roe="'+base_roe_url + gMvd[inx]['sn']+'&t='+gMvd[inx]['st']+'/'+gMvd[inx]['et']+'" ' +
  161. 'autoplay="true" id="mvd_vid_'+inx +'"></video>' +
  162. '</div><div style="height:10px;clear:both"/>');
  163. rewrite_by_id('mvd_vid_'+inx );
  164. });
  165. $j('#mv_mvd_ex_'+inx).css('background', 'url(\''+wgScriptPath+'/extensions/MetavidWiki/skins/images/opened.png\')');
  166. $j('#mv_mvd_ex_'+inx).unbind();
  167. $j('#mv_mvd_ex_'+inx).click(function(){
  168. inx = this.id.substr(10);
  169. mv_cxt(inx);
  170. });
  171. }
  172. function mv_cxt(inx){
  173. //stop the video:
  174. $j('#mvd_vid_'+inx).get(0).stop();
  175. //replace the html:
  176. $j('#mvd_link_'+inx).html(get_mvdrw_img(inx, {'w':320,'h':240}));
  177. $j('#mvd_link_'+inx).animate({width:'300px','height':'60px'},1000);
  178. $j('#mvd_link_im_'+inx).animate({width:'80px','height':'60px'},1000);
  179. $j('#mv_mvd_ex_'+inx).css('background', 'url(\''+wgScriptPath+'/extensions/MetavidWiki/skins/images/closed.png\')');
  180. $j('#mv_mvd_ex_'+inx).unbind();
  181. $j('#mv_mvd_ex_'+inx).click(function(){
  182. inx = this.id.substr(10);
  183. mv_ext(inx);
  184. });
  185. }
  186. /* toggles advanced search */
  187. function mv_toggle_advs(){
  188. mw.log('called mv_toggle_advs:' + $j('#advs').val());
  189. if($j('#advs').val()=='0'){
  190. $j('#advs').val('1');
  191. //sync values from basic -> avanced
  192. $j("input[@name$='f[0][v]']").val( $j('#searchInput').val() );
  193. var _fadecalled = false;
  194. $j('.advs_basic').fadeOut('fast',function(){
  195. if(!_fadecalled){
  196. if($j('#tmp_loading_txt').length==0){
  197. $j('.advanced_search_tag').before('<span id="tmp_loading_txt">'+gM('loading_txt')+'</span>');
  198. }
  199. if(typeof(mv_setup_search)=='undefined'){
  200. $j.getScript(mv_embed_path +'../mv_search.js', function(){
  201. mv_do_disp_adv_search();
  202. });
  203. }else{
  204. mv_do_disp_adv_search();
  205. }
  206. }
  207. _fadecalled=true;
  208. });
  209. }else{
  210. $j('#advs').val('0');
  211. //sync values from advanced -> basic
  212. $j('#searchInput').val( $j("input[@name$='f[0][v]']").val() );
  213. //do style display swap
  214. $j('.advs_adv').fadeOut('fast',function(){
  215. $j('.advs_basic').fadeIn('fast');
  216. $j('#frontPageTop').animate({'height':'233px'},'fast');
  217. });
  218. }
  219. }
  220. function mv_do_disp_adv_search(){
  221. $j('#tmp_loading_txt').remove();
  222. mw.log('should fade in: .advs_adv');
  223. $j('.advs_adv').fadeIn('fast', function(){
  224. $j(this).css('display', 'inline');
  225. });
  226. //give some extra room for advanced search:
  227. $j('#frontPageTop').animate({'height':'350px'},'fast');
  228. }
  229. function mv_setup_search_ac(){
  230. var uri = wgScript;
  231. //add the person choices div to searchInput
  232. //turn off browser baseed autocomplete:
  233. $j('#searchInput').attr('autocomplete',"off");
  234. // add the sugestions div (abolute positioned so it can be ontop of everything)
  235. $j('body').prepend('<div id="suggestions" style="position:absolute;display:none;z-index:50;">'+
  236. '<div id="suggestionsTop"></div>'+
  237. '<div id="suggestionsInner" class="suggestionsBox">'+
  238. '</div>'+
  239. '<div id="suggestionsBot"></div>'+
  240. '</div>');
  241. //position the sugestions below the search field:
  242. if( $j('#searchInput').get(0)!=null){
  243. sf_pos = $j('#searchInput').offset();
  244. sf_pos['top']=sf_pos['top']+40;
  245. sf_pos['left']=sf_pos['left']-220;
  246. //mw.log("moved sugest to: " + sf_pos['top'] + ' '+ sf_pos['left']);
  247. $j('#suggestions').css(sf_pos);
  248. }
  249. //add hook:
  250. $j('#searchInput').autocomplete(
  251. uri,
  252. {
  253. autoFill:false,
  254. onItemSelect:function(v){
  255. //alert('selected:' + v.innerHTML + ' page:'+$j('#searchInput').val());
  256. //jump to page:
  257. if($j('#searchInput').val()=='do_search'){
  258. qs = v.innerHTML.toLowerCase().indexOf('<b>')+3;
  259. qe = v.innerHTML.toLowerCase().indexOf('</b>');
  260. //update the search input (incase redirect fails)
  261. $j('#searchInput').val(v.innerHTML.substring(qs,qe));
  262. window.location = uri+'/'+'Special:MediaSearch?mv_search='+v.innerHTML.substring(qs,qe);
  263. }else{
  264. window.location = uri+'/'+$j('#searchInput').val();
  265. }
  266. },
  267. formatItem:function(row){
  268. if(row[0]=='do_search'){
  269. return '<span class="ac_txt">'+row[1].replace('$1',$j('#searchInput').val())+'</span>';
  270. }else if(row[2]=='no_image'){
  271. return '<span class="ac_txt">'+row[1]+'</span>';
  272. }else{
  273. return '<img width="44" src="'+ row[2] + '"><span class="ac_img_txt">'+row[1]+'</span>';
  274. }
  275. },
  276. matchSubset:0,
  277. extraParams:{action:'ajax',rs:'mv_auto_complete_all'},
  278. paramName:'rsargs[]',
  279. resultElem:'#suggestionsInner',
  280. resultContainer:'#suggestions'
  281. });
  282. }