Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4091809
mw.echo.ui.MenuItemWidget.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
mw.echo.ui.MenuItemWidget.js
View Options
/**
* Secondary menu item
*
* @class
* @extends OO.ui.ButtonOptionWidget
* @mixes OO.ui.mixin.PendingElement
*
* @constructor
* @param {Object} [config={}]
* @param {string} [config.type] Optional action type. Used to note a dynamic action, by setting it to 'dynamic-action'
* @param {string} [config.url] Item URL for links
* @param {string} [config.tooltip] Tooltip for links
* @param {string} [config.description] An optional description for the item
* @param {Object} [config.actionData] Action data
* @param {boolean} [config.prioritized] The item is prioritized outside the
* popup menu.
*/
mw
.
echo
.
ui
.
MenuItemWidget
=
function
MwEchoUiMenuItemWidget
(
config
)
{
config
=
config
||
{};
this
.
dynamic
=
config
.
type
===
'dynamic-action'
;
// Needs to be set before parent constructor is called
// as it changes the value of getTagName.
this
.
isLink
=
config
.
url
&&
!
this
.
isDynamicAction
();
// Parent constructor
mw
.
echo
.
ui
.
MenuItemWidget
.
super
.
call
(
this
,
Object
.
assign
(
{
framed
:
false
},
config
)
);
// Mixin constructors
OO
.
ui
.
mixin
.
PendingElement
.
call
(
this
,
config
);
this
.
prioritized
=
!!
config
.
prioritized
;
this
.
messages
=
this
.
isDynamicAction
()
?
config
.
actionData
.
messages
:
{};
this
.
actionData
=
config
.
actionData
||
{};
// Optional description
this
.
descriptionLabel
=
new
OO
.
ui
.
LabelWidget
(
{
classes
:
[
'mw-echo-ui-menuItemWidget-description'
],
label
:
config
.
description
||
''
}
);
this
.
descriptionLabel
.
toggle
(
!
this
.
prioritized
&&
config
.
description
);
this
.
$label
.
append
(
this
.
descriptionLabel
.
$element
);
// Build the option
this
.
$element
.
addClass
(
'mw-echo-ui-menuItemWidget'
)
.
toggleClass
(
'mw-echo-ui-menuItemWidget-prioritized'
,
this
.
prioritized
)
.
toggleClass
(
'mw-echo-ui-menuItemWidget-dynamic-action'
,
this
.
isDynamicAction
()
);
if
(
this
.
isLink
)
{
this
.
$element
.
attr
(
{
href
:
config
.
url
,
title
:
config
.
tooltip
}
);
}
};
/* Initialization */
OO
.
inheritClass
(
mw
.
echo
.
ui
.
MenuItemWidget
,
OO
.
ui
.
ButtonOptionWidget
);
OO
.
mixinClass
(
mw
.
echo
.
ui
.
MenuItemWidget
,
OO
.
ui
.
mixin
.
PendingElement
);
/* Static Properties */
mw
.
echo
.
ui
.
MenuItemWidget
.
static
.
highlightable
=
false
;
mw
.
echo
.
ui
.
MenuItemWidget
.
static
.
pressable
=
false
;
/* Methods */
mw
.
echo
.
ui
.
MenuItemWidget
.
prototype
.
getTagName
=
function
()
{
return
this
.
isLink
?
'a'
:
'div'
;
};
mw
.
echo
.
ui
.
MenuItemWidget
.
prototype
.
onClick
=
function
(
e
)
{
// Stop propagation, so that the default dynamic action of the notification isn't triggered
// (e.g. expanding a bundled notification).
e
.
stopPropagation
();
// If this is a dynamic action, also prevent default to disable the native browser behavior,
// the default link of the notification won't be followed.
// (If this is a link, default link of the notification is ignored as native browser behavior.)
if
(
!
this
.
isLink
)
{
e
.
preventDefault
();
}
return
mw
.
echo
.
ui
.
MenuItemWidget
.
super
.
prototype
.
onClick
.
apply
(
this
,
arguments
);
};
mw
.
echo
.
ui
.
MenuItemWidget
.
prototype
.
isSelectable
=
function
()
{
// If we have a link force selectability to false, otherwise defer to parent method
// Without a link (for dynamic actions or specific internal actions) we need this widget
// to be selectable so it emits the 'choose' event
return
!
this
.
isLink
&&
mw
.
echo
.
ui
.
MenuItemWidget
.
super
.
prototype
.
isSelectable
.
apply
(
this
,
arguments
);
};
/**
* Check whether this item is prioritized
*
* @return {boolean} Item is prioritized
*/
mw
.
echo
.
ui
.
MenuItemWidget
.
prototype
.
isPrioritized
=
function
()
{
return
this
.
prioritized
;
};
/**
* @typedef {Object} ConfirmationMessages
* @memberof mw.echo.ui.MenuItemWidget
* @property {string} title Title for the confirmation dialog
* @property {string} description Description for the confirmation dialog
*/
/**
* Get the messages for the confirmation dialog
* We expect optionally two messages - title and description.
*
* NOTE: The messages are parsed as HTML. If user-input is expected
* please make sure to properly escape it.
*
* @return {mw.echo.ui.MenuItemWidget.ConfirmationMessages} Messages for the confirmation dialog
*/
mw
.
echo
.
ui
.
MenuItemWidget
.
prototype
.
getConfirmationMessages
=
function
()
{
return
this
.
messages
.
confirmation
;
};
/**
* Get the action data associated with this item
*
* @return {Object} Action data
*/
mw
.
echo
.
ui
.
MenuItemWidget
.
prototype
.
getActionData
=
function
()
{
return
this
.
actionData
;
};
/**
* This item is a dynamic action
*
* @return {boolean} Item is a dynamic action
*/
mw
.
echo
.
ui
.
MenuItemWidget
.
prototype
.
isDynamicAction
=
function
()
{
return
this
.
dynamic
;
};
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Aug 18 2026, 11:55 (5 w, 4 h ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
12/e8/0de778c687e002fd29b9aefbd524
Default Alt Text
mw.echo.ui.MenuItemWidget.js (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment