User:John Vandenberg/welcome.js

// If TwinkleConfig aint exist. if( typeof( TwinkleConfig ) == 'undefined' ) { TwinkleConfig = {}; }

/** TwinkleConfig.showSharedIPNotice may take arguments: true: to show shared ip notice if an IP address false: to not print the notice if( typeof( TwinkleConfig.showSharedIPNotice ) == 'undefined' ) { TwinkleConfig.showSharedIPNotice = true; }

/** TwinkleConfig.markWarningsAsMinor (boolean) Defines if a warning should be marked as minor, if false, default is applied as per preference. if( typeof( TwinkleConfig.markWarningsAsMinor ) == 'undefined' ) { TwinkleConfig.markWarningsAsMinor = true; }

/** TwinkleConfig.summaryAd (string) If ad should be added or not to summary, default TWINKLE if( typeof( TwinkleConfig.summaryAd ) == 'undefined' ) { TwinkleConfig.summaryAd = " using TW"; }

/* sign = add signature after the tag default: true false when tag matches /(^w-|welcome)/ function welcometagadd( tag, summary, sign ) {

var article;

if( QueryString.exists( 'vanarticle' ) ) { article = decodeURI(QueryString.get( 'vanarticle' )).replace( /^(Image|Category):/i, ':$1:' ); } else { article = prompt('Which article?').replace( /^(Image|Category):/i, ':$1:' ); }

var welcomeTagRe = new RegExp( "(^w-|welcome)" ); var isWelcomeTag = welcomeTagRe.exec(tag);

if (typeof(sign) == 'undefined') sign = isWelcomeTag ? false : true;

var date = new Date; var notice = ""; var header = "";

var headerRe = new RegExp( "^===\\s*" + date.getUTCMonthName + "\\s+" + date.getUTCFullYear + "\\s*===", 'm' ); var textbox = document.getElementById( 'wpTextbox1' );

if ( textbox.value.length > 0 ) { textbox.value += '\n\n'; }	if( !isWelcomeTag && !headerRe.exec( textbox.value ) ) { header += "=== " + date.getUTCMonthName + " " + date.getUTCFullYear + " ===\n"; }

notice += header; // do not emit article name into first parameter of welcome templates // as it is usually expecting a different value. notice += "' + article + '"; // subst=subst: hack only on article given as per MW bug :(

// dont add signature for welcome messages. if ( sign ) notice += " " + "";

if ( TwinkleConfig.showSharedIPNotice && isIPAddress( wgTitle ) ) { switch( QueryString.get( 'type' ) ) { case 'vand': notice += "\n:If this is a shared IP address, and you didn't make any unconstructive edits, consider creating an account for yourself so you can avoid further irrelevant warnings. "; break; default: notice += "\n:If this is a shared IP address, and you didn't make the edit, consider creating an account for yourself so you can avoid further irrelevant notices. "; break; }	}

// BEGIN WikiEd -> wpTextbox1 if (typeof(wikEdUseWikEd) != 'undefined') { if (wikEdUseWikEd == true) { WikEdUpdateTextarea; }	}	// END

textbox.value += notice; // BEGIN wpTextbox1 -> WikiEd if (typeof(wikEdUseWikEd) != 'undefined') { if (wikEdUseWikEd == true) { WikEdUpdateFrame; }	}	// END

document.getElementById( 'wpSummary' ).value = summary + ( article ? ' on ' + article +  :  ) + '.' + TwinkleConfig.summaryAd; if( TwinkleConfig.markWarningsAsMinor ) { document.getElementById( 'wpMinoredit' ).checked = true; } }

//Quick welcome tabs function add_welcome_tabs {    if ( wgNamespaceNumber == 3 && ( QueryString.equals( 'action', 'edit' ) || QueryString.equals( 'action', 'submit' ) ) ) { var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0]; var editsummary = 'Welcome. Thanks for the contribution';

if ( isIPAddress( wgTitle ) ) { addPortletLink('p-cactions', 'javascript:welcometagadd("welcomeip", "'+editsummary+'", true)','Welcome IP', ''); }       else { addlimenu(tabs, '[0]', 'welcomenotefunc'); addPortletLink('welcomenotefunc', 'javascript:welcometagadd("w-basic", "'+editsummary+'")', 'Basic', ''); addPortletLink('welcomenotefunc', 'javascript:welcometagadd("w-link", "'+editsummary+'")', 'Link', ''); addPortletLink('welcomenotefunc', 'javascript:welcometagadd("w-short", "'+editsummary+'")', 'Short', ''); addPortletLink('welcomenotefunc', 'javascript:welcometagadd("welcome", "'+editsummary+'")', 'Welcome', ''); addPortletLink('welcomenotefunc', 'javascript:welcometagadd("welcomeg", "'+editsummary+'")', 'Welcome G', ''); }   } }

$(addWelcomeButtons); $(add_welcome_tabs);

function twCreateSpanTag ( color, content ) { var span = document.createElement( 'span' ); span.style.color = color; span.appendChild( document.createTextNode( content ) ); return span; }

function addWelcomeButtons {

var otitle = getElementsByClassName( document.getElementById('bodyContent'), 'td', 'diff-otitle' )[0]; var ntitle = getElementsByClassName( document.getElementById('bodyContent'), 'td', 'diff-ntitle' )[0];

if( !ntitle ) { // Nothing to see here, move along... return; }

if( !otitle.getElementsByTagName('a')[0] ) { // no previous revision available; new page return; }

var userAnchorOffset = 3; var twNewDiffAnchors = ntitle.getElementsByTagName('a');

if ( /revertPage/.test(twNewDiffAnchors[0].href) ) { userAnchorOffset += 3; }

var twDiffUserAnchor = twNewDiffAnchors[userAnchorOffset]; var twDiffUserTalkAnchor = twNewDiffAnchors[userAnchorOffset + 1]; var twDiffUserContribsAnchor = twDiffUserTalkAnchor.nextSibling.nextSibling;

twDiffUser = twDiffUserAnchor.firstChild.nodeValue.replace("'", "\\'");

if (twDiffUserTalkAnchor.className != 'new') { // not a new user return; }

var welcomeNode = document.createElement('strong'); var welcomeLink = document.createElement('a');

welcomeLink.href = "javascript:welcomeUser('" + twDiffUser + "')"; welcomeLink.appendChild( twCreateSpanTag( 'Black', '[' ) ); welcomeLink.appendChild( twCreateSpanTag( 'Green', 'Welcome' ) ); welcomeLink.appendChild( twCreateSpanTag( 'Black', ']' ) );

welcomeNode.appendChild(welcomeLink);

if ( isIPAddress( twDiffUser ) ) { ntitle.insertBefore(welcomeNode, twDiffUserTalkAnchor.nextSibling.nextSibling); }   else { ntitle.insertBefore(welcomeNode, twDiffUserContribsAnchor.nextSibling.nextSibling); } }

function welcomeUser( pUser ) { // TW scripts expect a query argument of "vanarticle" // so we set that with the article name of the good rev.   var query = { 'title': 'User talk:' + pUser, 'action': 'edit', 'vanarticle': wgPageName.replace(/_/g, ' ') };

Status.debug( 'query:' + query.toSource );

switch( TwinkleConfig.userTalkPageMode ) { case 'tab': window.open( mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( query ), '_tab' ); break; case 'blank': window.open( mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( query ), '_blank', 'location=no,toolbar=no,status=no,directories=no,scrollbars=yes,width=1200,height=800' ); break; case 'window': default : window.open( mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( query ), 'twinklewarnwindow', 'location=no,toolbar=no,status=no,directories=no,scrollbars=yes,width=1200,height=800' ); break; } }