MediaWiki:Common.js: Difference between revisions
Remove failed Tools runtime override v2H Tag: Manual revert |
Relocate Vector Tools into the Main Page views group v2N |
||
| Line 337: | Line 337: | ||
}()); | }()); | ||
/* RV_DATA_MAIN_PAGE_VIEWPORT_CENTER_V2D_END */ | /* RV_DATA_MAIN_PAGE_VIEWPORT_CENTER_V2D_END */ | ||
/* RV_DATA_TOOLS_INLINE_V2N_START */ | |||
(function () { | |||
"use strict"; | |||
if ( | |||
!document.body || | |||
!document.body.classList.contains( | |||
"page-Main_Page" | |||
) | |||
) { | |||
return; | |||
} | |||
function findTools() { | |||
return ( | |||
document.getElementById( | |||
"vector-page-tools-dropdown" | |||
) | |||
|| | |||
document.querySelector( | |||
".vector-page-tools-landmark" | |||
) | |||
); | |||
} | |||
function moveToolsBesideViews() { | |||
var views = | |||
document.getElementById("p-views"); | |||
var tools = | |||
findTools(); | |||
if ( | |||
!views || | |||
!tools || | |||
!views.parentNode | |||
) { | |||
return false; | |||
} | |||
var host = | |||
views.parentNode; | |||
/* | |||
* Physically place Tools immediately after the | |||
* Read/Edit/Edit source/View history menu. | |||
*/ | |||
if ( | |||
tools.parentNode !== host || | |||
tools.previousElementSibling !== views | |||
) { | |||
host.insertBefore( | |||
tools, | |||
views.nextSibling | |||
); | |||
} | |||
tools.classList.add( | |||
"rv-tools-inline" | |||
); | |||
tools.setAttribute( | |||
"data-rv-tools-inline", | |||
"2n" | |||
); | |||
host.setAttribute( | |||
"data-rv-tools-host", | |||
"2n" | |||
); | |||
return true; | |||
} | |||
function scheduleMove() { | |||
window.requestAnimationFrame( | |||
function () { | |||
window.requestAnimationFrame( | |||
moveToolsBesideViews | |||
); | |||
} | |||
); | |||
} | |||
if ( | |||
document.readyState === "loading" | |||
) { | |||
document.addEventListener( | |||
"DOMContentLoaded", | |||
scheduleMove, | |||
{ | |||
once: true | |||
} | |||
); | |||
} else { | |||
scheduleMove(); | |||
} | |||
window.addEventListener( | |||
"load", | |||
scheduleMove | |||
); | |||
/* | |||
* Vector may finish building toolbar controls | |||
* after Common.js first executes. | |||
*/ | |||
window.setTimeout( | |||
scheduleMove, | |||
100 | |||
); | |||
window.setTimeout( | |||
scheduleMove, | |||
400 | |||
); | |||
window.setTimeout( | |||
scheduleMove, | |||
1000 | |||
); | |||
var observer = | |||
new MutationObserver( | |||
function () { | |||
var tools = | |||
findTools(); | |||
var views = | |||
document.getElementById( | |||
"p-views" | |||
); | |||
if ( | |||
tools && | |||
views && | |||
( | |||
tools.parentNode !== | |||
views.parentNode | |||
|| | |||
tools.previousElementSibling !== | |||
views | |||
) | |||
) { | |||
scheduleMove(); | |||
} | |||
} | |||
); | |||
observer.observe( | |||
document.body, | |||
{ | |||
childList: true, | |||
subtree: true | |||
} | |||
); | |||
}()); | |||
/* RV_DATA_TOOLS_INLINE_V2N_END */ | |||
Revision as of 18:01, 20 July 2026
/* RV_DATA_MAIN_PAGE_VIEWPORT_CENTER_V2D_START */
(function () {
"use strict";
if (
!document.body ||
!document.body.classList.contains(
"page-Main_Page"
)
) {
return;
}
var animationFrame = 0;
var resizeTimer = 0;
function setImportant(element, property, value) {
if (!element) {
return;
}
element.style.setProperty(
property,
value,
"important"
);
}
function releaseAncestorClipping(home) {
var current = home.parentElement;
while (
current &&
current !== document.body
) {
setImportant(
current,
"overflow-x",
"visible"
);
current = current.parentElement;
}
setImportant(
document.body,
"overflow-x",
"hidden"
);
setImportant(
document.documentElement,
"overflow-x",
"hidden"
);
}
function centerHomepage() {
var home = document.querySelector(
".rdx-home"
);
if (!home) {
return;
}
releaseAncestorClipping(home);
var viewportWidth =
document.documentElement.clientWidth ||
window.innerWidth ||
0;
if (!viewportWidth) {
return;
}
var gutter;
if (viewportWidth <= 700) {
gutter = 0;
} else if (viewportWidth <= 1100) {
gutter = 16;
} else {
gutter = 32;
}
var availableWidth =
viewportWidth - (gutter * 2);
var targetWidth = Math.min(
1180,
availableWidth
);
targetWidth = Math.max(
320,
targetWidth
);
/*
* Reset all earlier CSS positioning before
* measuring the element's natural browser
* location.
*/
setImportant(
home,
"position",
"relative"
);
setImportant(
home,
"left",
"0"
);
setImportant(
home,
"right",
"auto"
);
setImportant(
home,
"width",
targetWidth + "px"
);
setImportant(
home,
"max-width",
"none"
);
setImportant(
home,
"margin-left",
"0"
);
setImportant(
home,
"margin-right",
"0"
);
setImportant(
home,
"transform",
"none"
);
/*
* Force layout calculation after removing
* all previous transforms.
*/
void home.offsetWidth;
var rectangle =
home.getBoundingClientRect();
var desiredLeft = Math.round(
(viewportWidth - targetWidth) / 2
);
var correction = Math.round(
desiredLeft - rectangle.left
);
setImportant(
home,
"transform",
"translate3d(" +
correction +
"px, 0, 0)"
);
home.setAttribute(
"data-rdx-viewport-centered",
"true"
);
home.setAttribute(
"data-rdx-viewport-width",
String(viewportWidth)
);
home.setAttribute(
"data-rdx-target-width",
String(targetWidth)
);
home.setAttribute(
"data-rdx-original-left",
String(
Math.round(rectangle.left)
)
);
home.setAttribute(
"data-rdx-correction",
String(correction)
);
/*
* Verify the rendered result and perform one
* final adjustment for sub-pixel browser
* rounding or delayed Vector layout changes.
*/
window.requestAnimationFrame(
function () {
var finalRectangle =
home.getBoundingClientRect();
var remainingDifference =
Math.round(
desiredLeft -
finalRectangle.left
);
if (
Math.abs(
remainingDifference
) > 1
) {
correction +=
remainingDifference;
setImportant(
home,
"transform",
"translate3d(" +
correction +
"px, 0, 0)"
);
home.setAttribute(
"data-rdx-correction",
String(correction)
);
}
home.setAttribute(
"data-rdx-final-left",
String(
Math.round(
home
.getBoundingClientRect()
.left
)
)
);
}
);
}
function queueCentering() {
if (animationFrame) {
window.cancelAnimationFrame(
animationFrame
);
}
animationFrame =
window.requestAnimationFrame(
function () {
animationFrame =
window.requestAnimationFrame(
centerHomepage
);
}
);
}
function delayedCentering() {
window.clearTimeout(
resizeTimer
);
resizeTimer = window.setTimeout(
queueCentering,
80
);
}
if (
document.readyState === "loading"
) {
document.addEventListener(
"DOMContentLoaded",
queueCentering,
{
once: true
}
);
} else {
queueCentering();
}
window.addEventListener(
"load",
queueCentering
);
window.addEventListener(
"resize",
delayedCentering
);
if (window.visualViewport) {
window.visualViewport.addEventListener(
"resize",
delayedCentering
);
}
/*
* Vector and ResourceLoader can finish portions
* of their layout after DOM ready. Recheck after
* those delayed changes.
*/
window.setTimeout(
queueCentering,
250
);
window.setTimeout(
queueCentering,
750
);
window.setTimeout(
queueCentering,
1500
);
}());
/* RV_DATA_MAIN_PAGE_VIEWPORT_CENTER_V2D_END */
/* RV_DATA_TOOLS_INLINE_V2N_START */
(function () {
"use strict";
if (
!document.body ||
!document.body.classList.contains(
"page-Main_Page"
)
) {
return;
}
function findTools() {
return (
document.getElementById(
"vector-page-tools-dropdown"
)
||
document.querySelector(
".vector-page-tools-landmark"
)
);
}
function moveToolsBesideViews() {
var views =
document.getElementById("p-views");
var tools =
findTools();
if (
!views ||
!tools ||
!views.parentNode
) {
return false;
}
var host =
views.parentNode;
/*
* Physically place Tools immediately after the
* Read/Edit/Edit source/View history menu.
*/
if (
tools.parentNode !== host ||
tools.previousElementSibling !== views
) {
host.insertBefore(
tools,
views.nextSibling
);
}
tools.classList.add(
"rv-tools-inline"
);
tools.setAttribute(
"data-rv-tools-inline",
"2n"
);
host.setAttribute(
"data-rv-tools-host",
"2n"
);
return true;
}
function scheduleMove() {
window.requestAnimationFrame(
function () {
window.requestAnimationFrame(
moveToolsBesideViews
);
}
);
}
if (
document.readyState === "loading"
) {
document.addEventListener(
"DOMContentLoaded",
scheduleMove,
{
once: true
}
);
} else {
scheduleMove();
}
window.addEventListener(
"load",
scheduleMove
);
/*
* Vector may finish building toolbar controls
* after Common.js first executes.
*/
window.setTimeout(
scheduleMove,
100
);
window.setTimeout(
scheduleMove,
400
);
window.setTimeout(
scheduleMove,
1000
);
var observer =
new MutationObserver(
function () {
var tools =
findTools();
var views =
document.getElementById(
"p-views"
);
if (
tools &&
views &&
(
tools.parentNode !==
views.parentNode
||
tools.previousElementSibling !==
views
)
) {
scheduleMove();
}
}
);
observer.observe(
document.body,
{
childList: true,
subtree: true
}
);
}());
/* RV_DATA_TOOLS_INLINE_V2N_END */