Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4130626
getUsersBlockForm.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
getUsersBlockForm.js
View Options
/**
* Implements the Special:CheckUser's 'Get users' block form which links to
* Special:InvestigateBlock to do the actual blocking.
*
* This also adds links to Special:MultiLock if CentralAuth is installed and the user has
* the rights to use that special page.
*
* @param {string} documentRoot The root element to append hidden forms to. Defaults to 'body'.
* @return {boolean} Returns false if the function returned early, otherwise true.
*/
module
.
exports
=
function
(
documentRoot
)
{
const
$userCheckboxes
=
$
(
'#checkuserresults li [type=checkbox]'
),
$checkUserBlockFieldset
=
$
(
'.mw-checkuser-massblock fieldset'
),
$blockAccountsButton
=
$
(
'.mw-checkuser-massblock-accounts-button'
,
$checkUserBlockFieldset
),
$blockIPsButton
=
$
(
'.mw-checkuser-massblock-ips-button'
,
$checkUserBlockFieldset
),
centralURL
=
mw
.
config
.
get
(
'wgCUCAMultiLockCentral'
);
let
selectedAccounts
=
[],
selectedIPs
=
[];
if
(
!
centralURL
&&
(
!
$blockAccountsButton
.
length
||
!
$blockIPsButton
.
length
)
)
{
// If no central URL is set and the block buttons are missing, then return early as we are likely not
// on the Special:CheckUser 'Get users' page or the user does not have the rights to lock or block.
return
false
;
}
if
(
centralURL
)
{
// Initialize the link to Special:MultiLock.
$checkUserBlockFieldset
.
append
(
$
(
'<a>'
).
attr
(
{
class
:
'mw-checkuser-multilock-link'
,
href
:
centralURL
}
).
text
(
mw
.
msg
(
'checkuser-centralauth-multilock'
)
)
);
}
/**
* Handle a change in the state of the checkboxes. This regenerates the link(s) to
* Special:MultiLock as well as updates the list of selected accounts and IPs.
*/
function
handleCheckboxesChange
()
{
// Clear the list of selected IPs and accounts, and then fill these lists from the state of the checkboxes.
selectedAccounts
=
[];
selectedIPs
=
[];
$userCheckboxes
.
serializeArray
().
forEach
(
(
obj
)
=>
{
if
(
obj
.
name
&&
obj
.
name
===
'users[]'
)
{
// Only registered accounts (not IPs) can be locked
if
(
!
mw
.
util
.
isIPAddress
(
obj
.
value
,
true
)
)
{
selectedAccounts
.
push
(
obj
.
value
);
}
else
{
selectedIPs
.
push
(
obj
.
value
);
}
}
}
);
if
(
!
centralURL
)
{
return
;
}
const
urls
=
[];
$
(
'.mw-checkuser-multilock-link, .mw-checkuser-multilock-link-header, .mw-checkuser-multilock-link-list'
).
remove
();
// Split the names up into batches of username length of a
// maximum of 2,000 including the centralURL + other parts
// of the GET parameters
let
i
=
0
;
while
(
i
<
selectedAccounts
.
length
)
{
let
url
=
centralURL
+
'?wpTarget='
;
let
firstUsername
=
true
;
while
(
i
<
selectedAccounts
.
length
)
{
let
urlComponent
=
selectedAccounts
[
i
];
if
(
!
firstUsername
)
{
urlComponent
=
'\n'
+
urlComponent
;
}
else
{
firstUsername
=
false
;
}
urlComponent
=
encodeURIComponent
(
urlComponent
);
if
(
urlComponent
.
length
+
url
.
length
>=
2000
)
{
break
;
}
url
+=
urlComponent
;
i
=
i
+
1
;
}
urls
.
push
(
url
);
}
// Update the href of the link with the latest change
if
(
urls
.
length
>
1
)
{
$checkUserBlockFieldset
.
append
(
$
(
'<span>'
).
attr
(
{
class
:
'mw-checkuser-multilock-link-header'
}
).
text
(
mw
.
msg
(
'checkuser-centralauth-multilock-list'
)
)
);
let
links
=
''
;
urls
.
forEach
(
(
urlToAdd
,
index
)
=>
{
const
$li
=
$
(
'<li>'
);
const
$a
=
$
(
'<a>'
).
attr
(
'class'
,
'mw-checkuser-multilock-link'
);
$a
.
attr
(
'href'
,
urlToAdd
)
.
text
(
mw
.
msg
(
'checkuser-centralauth-multilock-list-item'
,
index
+
1
)
);
$li
.
append
(
$a
);
links
+=
$li
[
0
].
outerHTML
;
}
);
$checkUserBlockFieldset
.
append
(
$
(
'<ul>'
).
attr
(
{
class
:
'mw-checkuser-multilock-link-list'
}
).
append
(
links
)
);
}
else
{
$checkUserBlockFieldset
.
append
(
$
(
'<a>'
).
attr
(
{
class
:
'mw-checkuser-multilock-link'
,
href
:
urls
[
0
]
}
).
text
(
mw
.
msg
(
'checkuser-centralauth-multilock'
)
)
);
}
}
// Change the URL of the link when a checkbox's state is changed
$userCheckboxes
.
on
(
'change'
,
()
=>
{
handleCheckboxesChange
();
}
);
// Initialize the selected accounts and IPs, as the checkboxes may have been pre-selected.
handleCheckboxesChange
();
/**
* Open the Special:InvestigateBlock page in a new tab with the given targets.
*
* @param {string[]} targets
*/
function
openSpecialInvestigateBlockPage
(
targets
)
{
const
$form
=
$
(
'<form>'
).
attr
(
{
action
:
new
mw
.
Title
(
'Special:InvestigateBlock'
).
getUrl
(),
method
:
'post'
,
target
:
'_blank'
}
).
addClass
(
[
'oo-ui-element-hidden'
,
'ext-checkuser-hidden-block-form'
]
);
$form
.
append
(
$
(
'<input>'
).
attr
(
{
type
:
'hidden'
,
name
:
'wpTargets'
,
value
:
targets
.
join
(
'\n'
)
}
)
);
if
(
!
documentRoot
)
{
documentRoot
=
'body'
;
}
$form
.
appendTo
(
documentRoot
).
trigger
(
'submit'
);
}
if
(
!
$blockAccountsButton
.
length
||
!
$blockIPsButton
.
length
)
{
// If the block buttons are not present, then the user does not have the rights to block but does have the
// rights to lock. As such, don't try to interact with the non-existing block buttons and return early.
return
false
;
}
// If the 'Block accounts' or 'Block IPs' button is pressed, then open the block form in
// a new tab for the user.
$blockAccountsButton
.
find
(
'button'
)[
0
].
addEventListener
(
'click'
,
()
=>
{
openSpecialInvestigateBlockPage
(
selectedAccounts
);
}
);
$blockIPsButton
.
find
(
'button'
)[
0
].
addEventListener
(
'click'
,
()
=>
{
openSpecialInvestigateBlockPage
(
selectedIPs
);
}
);
return
true
;
};
File Metadata
Details
Attached
Mime Type
text/x-asm
Expires
Wed, Aug 19, 10:29 (2 w, 6 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
3e/b2/0a683653cccc2e2602f43f8d3bc0
Default Alt Text
getUsersBlockForm.js (5 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment