User:John Vandenberg/welcome.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
Documentation for this user script can be added at User:John Vandenberg/welcome. |
// 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 [[WP:TWINKLE|TWINKLE]]
*/
if( typeof( TwinkleConfig.summaryAd ) == 'undefined' ) {
TwinkleConfig.summaryAd = " using [[WP:TWINKLE|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 [[Wikipedia:vandalism|unconstructive]] edits, consider [[Wikipedia:Why create an account?|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 [[Wikipedia:Why create an account?|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;
}
}