미디어위키:Gadget-Vector.js: 두 판 사이의 차이

식물 vs 좀비 위키
편집 요약 없음
편집 요약 없음
태그: 수동 되돌리기
 
(같은 사용자의 중간 판 8개는 보이지 않습니다)
343번째 줄: 343번째 줄:
} else {
} else {
initV27Interface();
initV27Interface();
}
}());
(function () {
'use strict';
function installGrassDividers(root) {
var scope = root || document;
var wrappers;
var legacyHeadings;
wrappers = scope.querySelectorAll(
'.skin-vector-legacy .mw-parser-output .mw-heading2'
);
Array.prototype.forEach.call(wrappers, function (wrapper) {
var divider;
wrapper.classList.add('pvz-grass-heading');
divider = wrapper.querySelector(
':scope > .pvz-grass-divider'
);
if (!divider) {
divider = document.createElement('span');
divider.className = 'pvz-grass-divider';
divider.setAttribute('aria-hidden', 'true');
wrapper.appendChild(divider);
}
});
legacyHeadings = scope.querySelectorAll(
'.skin-vector-legacy .mw-parser-output > h2'
);
Array.prototype.forEach.call(legacyHeadings, function (heading) {
var divider;
if (heading.closest('.mw-heading2')) {
return;
}
heading.classList.add('pvz-grass-heading');
divider = heading.querySelector(
':scope > .pvz-grass-divider'
);
if (!divider) {
divider = document.createElement('span');
divider.className = 'pvz-grass-divider';
divider.setAttribute('aria-hidden', 'true');
heading.appendChild(divider);
}
});
}
function initGrassDividers() {
var observer;
installGrassDividers(document);
observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
Array.prototype.forEach.call(
mutation.addedNodes,
function (node) {
if (node.nodeType !== Node.ELEMENT_NODE) {
return;
}
if (
node.matches(
'.mw-heading2, .mw-parser-output > h2'
)
) {
installGrassDividers(node.parentNode);
return;
}
installGrassDividers(node);
}
);
});
});
observer.observe(document.body, {
childList: true,
subtree: true
});
}
if (document.readyState === 'loading') {
document.addEventListener(
'DOMContentLoaded',
initGrassDividers,
{ once: true }
);
} else {
initGrassDividers();
}
}
}());
}());
351번째 줄: 453번째 줄:


var ACTION_OFFSET = 230;
var ACTION_OFFSET = 230;
var SEARCH_WIDTH = 195;
var SEARCH_WIDTH = 205;
var SEARCH_DOWN_OFFSET = 5;
var SEARCH_DOWN_OFFSET = 5;
var CONTENT_TOP = 24;
var CONTENT_TOP = 24;


function installSpecialPageClass() {
function getCactionsParts() {
var canonicalName =
var menu = document.getElementById('p-cactions');
window.mw && mw.config
 
? mw.config.get('wgCanonicalSpecialPageName')
if (!menu) {
: null;
return null;
var root = document.documentElement;
}
 
return {
menu: menu,
label:
document.getElementById('p-cactions-label') ||
menu.querySelector('.vector-menu-heading'),
checkbox: menu.querySelector(
'input.vector-menu-checkbox, input[type="checkbox"]'
),
content: menu.querySelector('.vector-menu-content')
};
}
 
function isCactionsOpen(parts) {
if (!parts) {
return false;
}
 
if (parts.checkbox && parts.checkbox.checked) {
return true;
}
 
if (
parts.menu.classList.contains('vector-menu-dropdown-active') ||
parts.menu.classList.contains('pvz-cactions-open')
) {
return true;
}
 
if (parts.label) {
return parts.label.getAttribute('aria-expanded') === 'true';
}
 
return false;
}
 
function closeCactions(parts) {
if (!parts) {
return;
}
 
if (parts.checkbox) {
parts.checkbox.checked = false;
parts.checkbox.dispatchEvent(
new Event('change', { bubbles: true })
);
}


root.classList.remove(
parts.menu.classList.remove(
'pvz-special-preferences',
'pvz-cactions-open',
'pvz-special-login',
'vector-menu-dropdown-active'
'pvz-special-createaccount'
);
);


if (canonicalName === 'Preferences') {
if (parts.label) {
root.classList.add('pvz-special-preferences');
parts.label.setAttribute('aria-expanded', 'false');
}
}


if (canonicalName === 'Userlogin') {
if (parts.content) {
root.classList.add('pvz-special-login');
parts.content.setAttribute('aria-hidden', 'true');
}
}
}


if (canonicalName === 'CreateAccount') {
function handleCactionsClick(event) {
root.classList.add('pvz-special-createaccount');
var parts = getCactionsParts();
var label;
 
if (!parts) {
return;
}
 
label = event.target.closest(
'#p-cactions-label, #p-cactions > .vector-menu-heading'
);
 
if (label && isCactionsOpen(parts)) {
event.preventDefault();
event.stopImmediatePropagation();
closeCactions(parts);
return;
}
 
if (
isCactionsOpen(parts) &&
!event.target.closest('#p-cactions')
) {
closeCactions(parts);
}
}
}
}


function syncV34Layout() {
function syncV35Layout() {
var content = document.querySelector('#content');
var content = document.querySelector('#content');
var leftNavigation = document.getElementById('left-navigation');
var leftNavigation = document.getElementById('left-navigation');
503번째 줄: 674번째 줄:
}
}


function initV34Layout() {
function initV35Layout() {
var observer;
var observer;


installSpecialPageClass();
syncV35Layout();
syncV34Layout();
 
document.addEventListener(
'click',
handleCactionsClick,
true
);


window.addEventListener(
window.addEventListener(
'resize',
'resize',
syncV34Layout,
syncV35Layout,
{ passive: true }
{ passive: true }
);
);
517번째 줄: 693번째 줄:
window.addEventListener(
window.addEventListener(
'orientationchange',
'orientationchange',
syncV34Layout,
syncV35Layout,
{ passive: true }
{ passive: true }
);
);


observer = new MutationObserver(function () {
observer = new MutationObserver(function () {
window.requestAnimationFrame(function () {
window.requestAnimationFrame(syncV35Layout);
installSpecialPageClass();
syncV34Layout();
});
});
});


537번째 줄: 710번째 줄:
document.addEventListener(
document.addEventListener(
'DOMContentLoaded',
'DOMContentLoaded',
initV34Layout,
initV35Layout,
{ once: true }
{ once: true }
);
);
} else {
} else {
initV34Layout();
initV35Layout();
}
}
}());
}());