跳转到内容

Wiki维护已结束,Wiki现在已升级到1.46.0。
如果您希望恢复使用旧版本的外观设置,请在Special:Preferences#mw-prefsection-rendering-skin处选择Timeless。

MediaWiki:Gadget-blueUser.js:修订间差异

来自ThunionWiki
Shio​(留言 | 贡献)
创建页面,内容为“mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] ).then( function () { const namespaceIds = mw.config.get('wgNamespaceIds'); const namespaces = Object.keys( namespaceIds ).filter( ns => namespaceIds[ns] === 2 ); const selector = namespaces.map( ns => mw.config.get('wgArticlePath').replace('$1', ns + ':').toLowerCase() ); // User cache to not check them multiple times. var blueUsers = []; var missingUsers = []; if ( mw.config.get('wgUserName') ) {…”
 
Shio​(留言 | 贡献)
小无编辑摘要
 
第1行: 第1行:
mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] ).then( function () {
mw.loader.using([
const namespaceIds = mw.config.get('wgNamespaceIds');
  'mediawiki.api',
const namespaces = Object.keys( namespaceIds ).filter( ns => namespaceIds[ns] === 2 );
  'mediawiki.util',
const selector = namespaces.map( ns => mw.config.get('wgArticlePath').replace('$1', ns + ':').toLowerCase() );
  'mediawiki.Title'
// User cache to not check them multiple times.
]).then(function () {
var blueUsers = [];
  var blueUsers = [];
var missingUsers = [];
  var missingUsers = [];
if ( mw.config.get('wgUserName') ) {
 
blueUsers.push( mw.util.wikiUrlencode( mw.config.get('wgUserName') ) );
  if (mw.config.get('wgUserName')) {
}
    blueUsers.push(mw.util.wikiUrlencode(mw.config.get('wgUserName')));
var api = new mw.Api( {
  }
parameters: {
 
action: 'query',
  var api = new mw.Api({
list: 'users',
    parameters: {
formatversion: 2
      action: 'query',
},
      list: 'users',
userAgent: 'Gadget-blueUsers'
      formatversion: 2
} );
    },
    userAgent: 'Gadget-blueUsers'
// Run every time content is added
  });
mw.hook( 'wikipage.content' ).add( makeUsersBlue );
 
// Catch links outside the content area
  function getLinkTitle(link) {
makeUsersBlue( $('a.new').not('#mw-content-text a.new').parent() );
    var title = mw.util.getParamValue('title', link.href);
    if (title) return title;
function makeUsersBlue( $content ) {
 
var users = [];
    var pathname = decodeURIComponent(link.pathname);
var userlinks = $content.find('a.new').filter( function () {
    var articlePath = mw.config.get('wgArticlePath');
var pathname = decodeURIComponent( this.pathname ).toLowerCase();
    var prefix = articlePath.split('$1')[0];
return selector.some( ns => pathname.startsWith( ns ) );
 
} ).each( function () {
    if (prefix && pathname.toLowerCase().startsWith(prefix.toLowerCase())) {
var encodedUsername = this.pathname.split(':')[1];
      return pathname.slice(prefix.length);
if ( missingUsers.includes( encodedUsername ) ) return;
    }
if ( blueUsers.includes( encodedUsername ) ) {
 
this.href = this.pathname;
    return '';
this.classList.remove( 'new' );
  }
this.classList.add( 'mw-newuserlink' );
 
return;
  function getUserTitle(link) {
}
    var rawTitle = getLinkTitle(link);
var username = decodeURIComponent( encodedUsername );
    if (!rawTitle) return null;
if ( users.includes( username ) || username.includes( '/' ) ) return;
 
users.push( username );
    var title = mw.Title.newFromText(rawTitle);
} );
    if (!title || title.getNamespaceId() !== 2) return null;
if ( !users.length ) return;
 
var apiRequests = [];
    return title;
while ( users.length ) {
  }
apiRequests.push( api.get( {
 
ususers: users.splice(0, 50)
  mw.hook('wikipage.content').add(makeUsersBlue);
} ).then( function ( data ) {
  makeUsersBlue($('a.new').not('#mw-content-text a.new').parent());
data.query.users.forEach( function ( user ) {
 
if ( user.missing || user.invalid ) {
  function makeUsersBlue($content) {
missingUsers.push( mw.util.wikiUrlencode( user.name ) );
    var users = [];
return;
 
}
    var userlinks = $content.find('a.new').filter(function () {
blueUsers.push( mw.util.wikiUrlencode( user.name ) );
      return getUserTitle(this) !== null;
} );
    }).each(function () {
} ) );
      var title = getUserTitle(this);
}
      if (!title) return;
Promise.all( apiRequests ).then( function () {
 
userlinks.each( function () {
      var username = title.getMainText();
if ( !blueUsers.includes( this.pathname.split(':')[1] ) ) return;
      var encodedUsername = mw.util.wikiUrlencode(username);
this.href = this.pathname;
 
this.classList.remove( 'new' );
      if (missingUsers.includes(encodedUsername)) return;
this.classList.add( 'mw-newuserlink' );
 
} );
      if (blueUsers.includes(encodedUsername)) {
} );
        this.classList.remove('new');
}
        this.classList.add('mw-newuserlink');
} );
        return;
      }
 
      if (users.includes(username) || username.includes('/')) return;
      users.push(username);
    });
 
    if (!users.length) return;
 
    var apiRequests = [];
 
    while (users.length) {
      apiRequests.push(
        api.get({
          ususers: users.splice(0, 50)
        }).then(function (data) {
          data.query.users.forEach(function (user) {
            if (user.missing || user.invalid) {
              missingUsers.push(mw.util.wikiUrlencode(user.name));
              return;
            }
            blueUsers.push(mw.util.wikiUrlencode(user.name));
          });
        })
      );
    }
 
    Promise.all(apiRequests).then(function () {
      userlinks.each(function () {
        var title = getUserTitle(this);
        if (!title) return;
 
        var username = title.getMainText();
        var encodedUsername = mw.util.wikiUrlencode(username);
 
        if (!blueUsers.includes(encodedUsername)) return;
 
        this.classList.remove('new');
        this.classList.add('mw-newuserlink');
      });
    });
  }
});

2026年10月1日 (四) 02:11的最新版本

mw.loader.using([
  'mediawiki.api',
  'mediawiki.util',
  'mediawiki.Title'
]).then(function () {
  var blueUsers = [];
  var missingUsers = [];

  if (mw.config.get('wgUserName')) {
    blueUsers.push(mw.util.wikiUrlencode(mw.config.get('wgUserName')));
  }

  var api = new mw.Api({
    parameters: {
      action: 'query',
      list: 'users',
      formatversion: 2
    },
    userAgent: 'Gadget-blueUsers'
  });
  
  function getLinkTitle(link) {
    var title = mw.util.getParamValue('title', link.href);
    if (title) return title;

    var pathname = decodeURIComponent(link.pathname);
    var articlePath = mw.config.get('wgArticlePath');
    var prefix = articlePath.split('$1')[0];

    if (prefix && pathname.toLowerCase().startsWith(prefix.toLowerCase())) {
      return pathname.slice(prefix.length);
    }

    return '';
  }

  function getUserTitle(link) {
    var rawTitle = getLinkTitle(link);
    if (!rawTitle) return null;

    var title = mw.Title.newFromText(rawTitle);
    if (!title || title.getNamespaceId() !== 2) return null;

    return title;
  }

  mw.hook('wikipage.content').add(makeUsersBlue);
  makeUsersBlue($('a.new').not('#mw-content-text a.new').parent());

  function makeUsersBlue($content) {
    var users = [];

    var userlinks = $content.find('a.new').filter(function () {
      return getUserTitle(this) !== null;
    }).each(function () {
      var title = getUserTitle(this);
      if (!title) return;

      var username = title.getMainText();
      var encodedUsername = mw.util.wikiUrlencode(username);

      if (missingUsers.includes(encodedUsername)) return;

      if (blueUsers.includes(encodedUsername)) {
        this.classList.remove('new');
        this.classList.add('mw-newuserlink');
        return;
      }

      if (users.includes(username) || username.includes('/')) return;
      users.push(username);
    });

    if (!users.length) return;

    var apiRequests = [];

    while (users.length) {
      apiRequests.push(
        api.get({
          ususers: users.splice(0, 50)
        }).then(function (data) {
          data.query.users.forEach(function (user) {
            if (user.missing || user.invalid) {
              missingUsers.push(mw.util.wikiUrlencode(user.name));
              return;
            }
            blueUsers.push(mw.util.wikiUrlencode(user.name));
          });
        })
      );
    }

    Promise.all(apiRequests).then(function () {
      userlinks.each(function () {
        var title = getUserTitle(this);
        if (!title) return;

        var username = title.getMainText();
        var encodedUsername = mw.util.wikiUrlencode(username);

        if (!blueUsers.includes(encodedUsername)) return;

        this.classList.remove('new');
        this.classList.add('mw-newuserlink');
      });
    });
  }
});