Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F2752284
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
Fri, Jul 3, 19:49 (1 d, 5 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
a4/a1/25a30610f59c0bc6cb6122dccf84
Default Alt Text
mobile.js (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment