User:Jvoshua/global.js

/** * Name:        AutoCreateUserPages * Version:    v1.8 * Author:     KockaAdmiralac  * Description: Automatically creates a user's userpage, talkpage and *             message wall greeting with a specified template on  *              wikis where they have at least one contribution. */ (function {    if (localStorage.getItem('AutoCreateUserPagesLoaded')) {         return;     }     var AutoCreateUserPages = {         config: $.extend({ content: '', summary: 'Auto creating user page' }, window.AutoCreateUserPagesConfig),        mwconfig: mw.config.get([ 'wgCityId', 'wgUserName' ]),        toCreate: 0,         preload: function {             if ( // You most likely don't want the script to be            // automaking your Community Central user page, // especially since you're probably inserting a            // global template in the configuration // This also prevents a 404 error since Community // Central doesn't have WikiFeatures enabled. this.mwconfig.wgCityId === '177' || // When you try creating your userpage/talkpage // on VSTF Wiki the abuse filter prevents you // so the script shouldn't run there this.mwconfig.wgCityId === '65099' ) {                return;             }             this.namespaces = ['User'];             $.nirvana.getJson('WikiFeaturesSpecialController', 'index').done($.proxy(function(d) {                 this.namespaces.push(d.features.filter(function(t) {                     return t.name === 'wgEnableWallExt' && t.enabled;                 }).length === 0 ? 'User talk' : 'Message Wall Greeting');                mw.loader.using('mediawiki.api.edit').then($.proxy(this.init, this));             }, this));         },         init: function {             this.api = new mw.Api;             this.api.get({ action: 'query', list: 'usercontribs', ucuser: this.mwconfig.wgUserName }).done($.proxy(this.cbContribs, this));        },         cbContribs: function(d) {             if (d.error) {                 // new BannerNotification('An error occurred while fetching user contributions: ' + d.error.code).show;             } else if (d.query.usercontribs.length !== 0) {                 this.api.get({ action: 'query', prop: 'revisions', titles: this.namespaces.map(function(el) { return el + ':' + this.mwconfig.wgUserName }, this).join('|') }).done($.proxy(this.cbFetch, this));            } else {                 console.log('[AutoCreateUserPage] Zero edit count, returning...');             }         },         cbFetch: function(d) {             if (d.error) {                 new BannerNotification('An error occurred while fetching user page information: ' + d.error.code).show;             } else {                 $.each(d.query.pages, $.proxy(this.processPage, this));             }         },         processPage: function(k, v) {             var content = this.config.content;             if (typeof content === 'object') {                 content = content[v.ns];             }             // I was too tired of writing this all in one condition             // If somebody can optimize this please do             if (content === false) {                 return;             }             if (k === -1) {                 return; } else if (v.ns === 1202) { if (v.missing !== '') { return; }            } else if (v.missing !== '' && v.revisions[0].user !== 'FANDOM' && v.revisions[0].user !== 'Wikia') { return; }            console.log('[AutoCreateUserPage] Creating', v.title, '...'); ++this.toCreate; this.api.postWithEditToken({                action: 'edit',                 title: v.title,                 text: content.replace(/\$1/g, this.mwconfig.wgUserName),                 summary: this.config.summary,                 minor: true,                 bot: true             }).done($.proxy(this.cbCreate, this)); },        cbCreate: function(d) { if (d.error) { new BannerNotification('An error occurred while creating a user page: ' + d.error.code).show; } else if (--this.toCreate === 0) { localStorage.setItem('AutoCreateUserPagesLoaded', true); }        }     };     AutoCreateUserPages.preload; });