Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F6040972
nav-mobile.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
nav-mobile.js
View Options
/*!
* JavaScript for Special:Preferences: mobileLayout.
*/
const
nav
=
require
(
'./nav.js'
);
nav
.
insertHints
(
mw
.
msg
(
'prefs-sections-navigation-hint'
)
);
// Define a window manager to control the dialogs
const
dialogFactory
=
new
OO
.
Factory
();
const
windowManager
=
new
OO
.
ui
.
WindowManager
(
{
factory
:
dialogFactory
}
);
windowManager
.
on
(
'opening'
,
(
win
)
=>
{
if
(
!
win
.
$body
.
data
(
'mw-section-infused'
)
)
{
win
.
$body
.
removeClass
(
'mw-htmlform-autoinfuse-lazy'
);
mw
.
hook
(
'htmlform.enhance'
).
fire
(
win
.
$body
);
win
.
$body
.
data
(
'mw-section-infused'
,
true
);
}
}
);
// Navigation callback
const
setSection
=
function
(
sectionName
,
fieldset
)
{
// strip possible prefixes from the section to normalize it
const
section
=
sectionName
.
replace
(
'mw-prefsection-'
,
''
).
replace
(
'mw-mobile-prefs-'
,
''
);
const
win
=
windowManager
.
getCurrentWindow
();
if
(
win
&&
win
.
constructor
.
static
.
name
!==
'mw-mobile-prefs-'
+
section
)
{
windowManager
.
closeWindow
(
win
);
}
// Work in the window isn't necessarily done when 'then` fires
windowManager
.
openWindow
(
'mw-mobile-prefs-'
+
section
).
opened
.
then
(
()
=>
{
// Scroll to a fieldset if provided.
if
(
fieldset
)
{
// setTimout is ie11-compatible and queues up tasks for async exec
setTimeout
(
()
=>
{
fieldset
.
scrollIntoView
(
{
behavior
:
'smooth'
}
);
}
);
}
}
);
if
(
nav
.
switchingNoHash
)
{
return
;
}
location
.
hash
=
'#mw-prefsection-'
+
section
;
};
/*
* Configure and register a dialog for a pref section
*/
function
createSectionDialog
(
sectionId
,
sectionTitle
,
sectionBody
)
{
function
PrefDialog
()
{
const
conf
=
{
classes
:
[
'overlay-content'
,
'mw-mobile-pref-window'
]
};
PrefDialog
.
super
.
call
(
this
,
conf
);
}
OO
.
inheritClass
(
PrefDialog
,
OO
.
ui
.
ProcessDialog
);
PrefDialog
.
static
.
name
=
sectionId
;
PrefDialog
.
static
.
size
=
'larger'
;
PrefDialog
.
static
.
title
=
sectionTitle
;
PrefDialog
.
static
.
actions
=
[
{
action
:
'cancel'
,
label
:
mw
.
msg
(
'prefs-back-title'
),
flags
:
[
'safe'
,
'close'
]
}
];
PrefDialog
.
prototype
.
initialize
=
function
()
{
this
.
name
=
sectionId
;
PrefDialog
.
super
.
prototype
.
initialize
.
call
(
this
);
this
.
$body
.
append
(
sectionBody
);
this
.
content
=
new
OO
.
ui
.
PanelLayout
(
{
padded
:
true
,
expanded
:
true
}
);
this
.
$body
.
addClass
(
'mw-mobile-pref-dialog-body'
);
};
PrefDialog
.
prototype
.
getActionProcess
=
function
(
action
)
{
if
(
action
)
{
return
new
OO
.
ui
.
Process
(
()
=>
{
this
.
close
(
{
action
:
action
}
);
}
);
}
return
PrefDialog
.
super
.
prototype
.
getActionProcess
.
call
(
this
,
action
);
};
dialogFactory
.
register
(
PrefDialog
);
}
/*
* Initialize Dialogs for all pref sections
*/
function
initDialogs
()
{
// Query the document once, then query that returned element afterwards.
const
preferencesForm
=
document
.
getElementById
(
'mw-prefs-form'
);
const
prefButtons
=
preferencesForm
.
querySelector
(
'.mw-htmlform-submit-buttons'
);
const
sections
=
preferencesForm
.
querySelectorAll
(
'.mw-mobile-prefsection'
);
// Move the form buttons (such as save) into the dialog after opening.
windowManager
.
on
(
'opening'
,
(
win
,
opened
)
=>
{
if
(
opened
)
{
win
.
$foot
[
0
].
appendChild
(
prefButtons
);
}
}
);
// Move the form buttons (such as save) back to the main form while closing.
windowManager
.
on
(
'closing'
,
(
_win
,
closed
)
=>
{
document
.
getElementById
(
'preferences'
).
appendChild
(
prefButtons
);
if
(
closed
)
{
location
.
hash
=
''
;
}
}
);
// Add the window manager to the form
$
(
preferencesForm
).
append
(
windowManager
.
$element
);
// Add event listeners and register a dialog for each section
Array
.
prototype
.
forEach
.
call
(
sections
,
(
section
)
=>
{
const
sectionContent
=
document
.
getElementById
(
section
.
id
+
'-content'
);
const
sectionBody
=
sectionContent
.
querySelector
(
'div > div.oo-ui-widget'
);
const
sectionText
=
sectionContent
.
querySelector
(
'.mw-prefs-title'
).
textContent
;
createSectionDialog
(
section
.
id
,
sectionText
,
sectionBody
);
}
);
const
prefSelect
=
OO
.
ui
.
infuse
(
$
(
'.mw-mobile-prefs-sections'
)
);
prefSelect
.
aggregate
(
{
click
:
'itemClick'
}
);
prefSelect
.
on
(
'itemClick'
,
(
button
)
=>
{
setSection
(
button
.
getData
()
);
}
);
}
// DOM-dependant code
$
(
()
=>
{
initDialogs
();
nav
.
onLoad
(
setSection
);
}
);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Oct 4 2026, 20:36 (5 w, 5 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
dc/7c/e24081fbec2b3af1cdb45957ebb6
Default Alt Text
nav-mobile.js (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment