Skip to content

Commit 760dca3

Browse files
authored
refactor(MarkRights*): ; optimize logic (qiuwenbaike#1651)
* refactor(MarkRights): ; optimize logic * avoid querying user groups for IP users * refactor(MarkRights-Userpage): ; optimize logic * avoid querying user groups for IP users
1 parent 51ddcb5 commit 760dca3

File tree

9 files changed

+69
-35
lines changed

9 files changed

+69
-35
lines changed

dist/MarkRights-Userpage/MarkRights-Userpage.js

Lines changed: 4 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/MarkRights/MarkRights.js

Lines changed: 27 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/MarkRights-Userpage/MarkRights-Userpage.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import {getPermissions} from './modules/core';
77
return;
88
}
99

10+
if (mw.util.isIPv4Address(wgRelevantUserName) || mw.util.isIPv6Address(wgRelevantUserName)) {
11+
return;
12+
}
13+
1014
const relevantUserPageName: string = new mw.Title(wgRelevantUserName, OPTIONS.userNameSpaceNumber).toText();
1115
const pageName: string = new mw.Title(wgPageName).toText();
1216
if (pageName !== relevantUserPageName) {

src/MarkRights/MarkRights.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ mw.hook('wikipage.content').add(function markRights($content): void {
99
}
1010
});
1111

12-
export {queryGlobalUserGroups, queryUserGroups} from './modules/query';
12+
export {queryGlobalUserGroups, queryUserGroups} from './modules/util/query';

src/MarkRights/modules/core.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,29 @@
1-
import {queryGlobalUserGroups, queryUserGroups} from './query';
1+
import {queryGlobalUserGroups, queryUserGroups} from './util/query';
22
import {appendUserRightsMark} from './util/appendUserRightsMark';
33
import {generateUserLinks} from './util/generateUserLinks';
44

55
const markUserRights = ($content: JQuery): void => {
6-
const {users, $userLinks} = generateUserLinks($content);
6+
const userLinks = generateUserLinks($content);
7+
8+
// Convert users into array
9+
const users: string[] = Object.keys(userLinks);
10+
if (!users.length) {
11+
return;
12+
}
13+
14+
const $userLinks = Object.values(userLinks).reduce((previousValue, currentValue) => {
15+
return [...previousValue, ...currentValue];
16+
});
17+
if (!$userLinks.length) {
18+
return;
19+
}
720

821
const promises: (() => Promise<void>)[] = [];
922

1023
for (let i = 0; i < users.length; i++) {
11-
const ususers = users.splice(0, 25);
24+
const ususers = users.splice(0, 25).filter((element) => {
25+
return !(mw.util.isIPv4Address(element) || mw.util.isIPv6Address(element));
26+
});
1227
if (!ususers.length) {
1328
continue;
1429
}

src/MarkRights/modules/global.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
type QueryUserGroups = typeof import('./query').queryUserGroups;
2-
type QueryGlobalUserGroups = typeof import('./query').queryGlobalUserGroups;
1+
type QueryUserGroups = typeof import('./util/query').queryUserGroups;
2+
type QueryGlobalUserGroups = typeof import('./util/query').queryGlobalUserGroups;
33

44
declare module 'ext.gadget.MarkRights' {
55
export const queryUserGroups: QueryUserGroups;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as OPTIONS from '../options.json';
1+
import * as OPTIONS from '../../options.json';
22
import {initMwApi} from 'ext.gadget.Util';
33

44
const api: mw.Api = initMwApi(`MarkRights/${OPTIONS.version}`);
Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
const generateUserLinks = ($content: JQuery): {users: string[]; $userLinks: JQuery<HTMLAnchorElement>[]} => {
2-
const users: string[] = [];
3-
const $userLinks: JQuery<HTMLAnchorElement>[] = [];
1+
const generateUserLinks = ($content: JQuery): Record<string, JQuery<HTMLAnchorElement>[]> => {
2+
const userLinks: Record<string, JQuery<HTMLAnchorElement>[]> = generateUserLinks($content);
43
const $elements = $content.find<HTMLAnchorElement>('a.mw-userlink:not(.mw-anonuserlink)');
54

65
for (const element of $elements) {
@@ -12,19 +11,23 @@ const generateUserLinks = ($content: JQuery): {users: string[]; $userLinks: JQue
1211
continue;
1312
}
1413

15-
$userLinks[$userLinks.length] = $element;
16-
1714
const {textContent} = element;
1815
const user: string | undefined = textContent?.toString();
1916

2017
if (!user) {
2118
continue;
2219
}
2320

24-
users[users.length] = user;
21+
if (mw.util.isIPv4Address(user) || mw.util.isIPv6Address(user)) {
22+
continue;
23+
}
24+
25+
userLinks[user] ??= [];
26+
27+
userLinks[user][userLinks[user].length] = $element; // Replace `[].push()` to avoid polyfilling core-js
2528
}
2629

27-
return {users, $userLinks};
30+
return userLinks;
2831
};
2932

3033
export {generateUserLinks};
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ const queryUserGroups = async (ususers: string | string[]) => {
1616
return response;
1717
};
1818

19-
const queryGlobalUserGroups = async (user: string) => {
19+
const queryGlobalUserGroups = async (guiuser: string) => {
2020
const params = {
2121
action: 'query',
2222
format: 'json',
2323
formatversion: '2',
2424
meta: 'globaluserinfo',
25-
guiuser: user,
25+
guiuser,
2626
guiprop: 'groups',
2727
smaxage: 600,
2828
maxage: 600,

0 commit comments

Comments
 (0)