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 += "{{subst:" + tag + ( article && !isWelcomeTag ? '|' + article + '|subst=subst:' : '' ) + "}}"; // 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;

}

}