User:Lieutenant S. Reznov/common.js

function draft_tab{ var texts = { // tab id : [ label, hover-text, access-key (c if tab comes first, 3 if last) ] 'ca-nstab-main': ['Entry', 'View the dictionary entry', 'c'], 'ca-nstab-draft': ['Draft', 'View the draft page', '3'], 'ca-nstab-template': ['Template', 'View the template', 'c'], 'ca-nstab-documentation': ['Documentation', 'View the documentation', '3'] }

var lookup = new Object; // {page-title: tab-node} these are looked up and changed to red if missing. // Returns [id-of-portlet, node-to-insert-before or null] for inserting the tab. function get_insert_position(id) { var portlet = document.getElementById('p-namespaces') ? 'p-namespaces' : 'p-cactions'; var insbef = null; if (texts[id][2] == 'c') { // otherwise '3' insbef = document.getElementById(portlet).getElementsByTagName('ul')[0].firstChild; } else if (portlet == 'p-cactions' ) { // 'last' in Monobook means "before Edit" var insbef = document.getElementById('ca-edit'); if(! insbef) insbef = document.getElementById('ca-viewsource'); }   return [portlet, insbef]; } // Add a new namespace with addPortletLink using the lookup table above. function add_namespace_tab(page, id) { var insert = get_insert_position(id); mw.util.addPortletLink( insert[0], mw.util.wikiGetlink( page ), texts[id][0], id, texts[id][1], texts[id][2], insert[1] ); if (page == wgPageName) { // Can by-pass lookup var tab = document.getElementById(id); tab.className = 'selected'; if (wgArticleId == 0) { make_tab_red(tab); }   } else { // lookup the redness with the ajax below lookup[page]=document.getElementById(id); } }  // Replace the two current tabs with new ones, used when in the third namespace. function change_main_tabs(old_id, new_id, talk_page) { // Remove old tab. var ct = document.getElementById(old_id); ct.parentNode.removeChild(ct); // Add new tab. add_namespace_tab(wgPageName, new_id); // Change destination of talk tab. var dt = document.getElementById('ca-talk'); var a = dt.getElementsByTagName('a')[0] a.setAttribute('href', mw.util.wikiGetlink( talk_page )); lookup[talk_page] = dt; if(dt.className) dt.className = dt.className.replace('new',''); } // Change a blue-link to a red-link function make_tab_red(tab){ tab.className = tab.className+' new'; var a = tab.getElementsByTagName('a')[0]; var href = a.getAttribute('href'); a.setAttribute('href',href+(href.indexOf('?')>0?'&':'?')+'action=edit&redlink=1'); } if( wgCanonicalNamespace == 'Draft' ){ change_main_tabs('ca-nstab-draft', 'ca-nstab-draft', 'Talk:' + wgTitle); add_namespace_tab(wgTitle, 'ca-nstab-main'); }else if( wgCanonicalNamespace == '' || wgCanonicalNamespace == 'Talk' ){ add_namespace_tab('Draft:'+wgTitle, 'ca-nstab-draft'); }else if( wgCanonicalNamespace == 'Template' && /\/doc$/.test(wgTitle) ){ var baseTitle = wgTitle.replace(/\/doc$/, ""); change_main_tabs('ca-nstab-template', 'ca-nstab-documentation', 'Template talk:' + baseTitle); add_namespace_tab('Template:' + baseTitle, 'ca-nstab-template'); }else if( wgCanonicalNamespace == 'Template' || wgCanonicalNamespace == 'Template_talk' ){ add_namespace_tab('Template:'+wgTitle+'/doc', 'ca-nstab-documentation'); }else{ //Nothing to see here... return false; } //Now check for red pages - would be nicer to use MwJsApi from editor.js, but possible race-condition // RL/JD: sajax_init_object is deprecated. Use $.ajax, $.getJSON and/or $.get var ajaxer = sajax_init_object; if(! ajaxer) return false; var url = wgScriptPath+ '/api.php?format=json&action=query&prop=info&titles='; var spl = ''; for(var page in lookup){ url+=spl+encodeURIComponent(page); spl='|'; } ajaxer.onreadystatechange = function{ if( ajaxer.readyState == 4 ){ if( ajaxer.status == 200 ){ var resps = eval('(' + ajaxer.responseText + ')'); for (var x in resps.query.pages) { if (Number(x) < 0) { make_tab_red(lookup[resps.query.pages[x].title]); }       }      }    }  }  ajaxer.open("GET", url); ajaxer.send(''); } jQuery(document).ready( draft_tab );