Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4130978
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
mobile.js
View Options
/*!
* JavaScript for Special:Preferences: mobileLayout.
*/
(
function
()
{
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
Wed, Aug 19, 10:39 (3 w, 1 h ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
0b/25/06ca10ab6e49139fbfebcf58cc43
Default Alt Text
mobile.js (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment