MediaWiki:Common.js: различия между версиями
Pok (обсуждение | вклад) Нет описания правки Метки: ручная отмена отменено |
Pok (обсуждение | вклад) Нет описания правки Метки: с мобильного устройства из мобильной версии через расширенный мобильный режим |
||
| (не показано 11 промежуточных версий этого же участника) | |||
| Строка 63: | Строка 63: | ||
name: "server-marines", | name: "server-marines", | ||
connect: "https://game1.station14.ru/marines-main/server/status", | connect: "https://game1.station14.ru/marines-main/server/status", | ||
serverconnect: "ss14s:// | serverconnect: "ss14s://corvaxforge.ru/server/cm" | ||
}, { | }, { | ||
name: "server-wega", | name: "server-wega", | ||
| Строка 676: | Строка 676: | ||
if (!jsonPath) return String(wikiText || ''); | if (!jsonPath) return String(wikiText || ''); | ||
return '{{#vardefine:JsonPath|' + jsonPath + '}} | return '{{#vardefine:JsonPath|' + jsonPath + '}}' + String(wikiText || ''); | ||
} | } | ||
function fetchParsedData(wikiText) { | function fetchParsedData(wikiText) { | ||
return $.ajax({ | return $.ajax({ | ||
url: | url: mw.util.wikiScript('api'), | ||
method: | method: 'POST', | ||
dataType: | dataType: 'json', | ||
data: { | |||
action: 'parse', | |||
format: 'json', | |||
prop: 'text', | |||
text: wikiText, | |||
origin: '*' | |||
} | |||
}); | }); | ||
} | } | ||
| Строка 717: | Строка 723: | ||
initAjaxLoader(root); | initAjaxLoader(root); | ||
initPage(); | |||
} | } | ||
| Строка 781: | Строка 788: | ||
var ajaxContainers = root.querySelectorAll('.ajax-load, .ajax-load-link'); | var ajaxContainers = root.querySelectorAll('.ajax-load, .ajax-load-link'); | ||
var BATCH_SIZE = | var BATCH_SIZE = 3; | ||
var queue = []; | var queue = []; | ||
var processing = false; | var processing = false; | ||
| Строка 1077: | Строка 1084: | ||
// Для "Шаблон:Переключатель_проекта" | // Для "Шаблон:Переключатель_проекта" | ||
function initProjectSelectionGenerator() { | function initProjectSelectionGenerator() { | ||
var COOKIE_PROJECT = 'ss14_preferredProject'; | |||
var containers = document.getElementsByClassName('js-project-selection-generator'); | var containers = document.getElementsByClassName('js-project-selection-generator'); | ||
| Строка 1084: | Строка 1092: | ||
.replace(/\s+/g, '-') | .replace(/\s+/g, '-') | ||
.replace(/[^A-Za-z0-9_\-\u0400-\u04FF]/g, ''); | .replace(/[^A-Za-z0-9_\-\u0400-\u04FF]/g, ''); | ||
} | |||
function normalizeProjectName(s) { | |||
return String(s === undefined || s === null ? '' : s) | |||
.trim() | |||
.toLowerCase(); | |||
} | } | ||
| Строка 1150: | Строка 1164: | ||
} | } | ||
function createProjectMenu(projects, activeProject) { | |||
var form = document.createElement('form'); | var form = document.createElement('form'); | ||
form.className = 'js-project-menu'; | form.className = 'js-project-menu'; | ||
| Строка 1187: | Строка 1180: | ||
input.id = projectId; | input.id = projectId; | ||
if ( | if (projectName === activeProject) { | ||
input.checked = true; | input.checked = true; | ||
} | } | ||
| Строка 1199: | Строка 1192: | ||
form.appendChild(div); | form.appendChild(div); | ||
} | } | ||
form.addEventListener('change', function (event) { | |||
var target = event.target; | |||
if (!target || target.tagName !== 'INPUT') return; | |||
if (target.type !== 'radio') return; | |||
if (target.name !== 'js-project-selection') return; | |||
if (!target.checked) return; | |||
refreshForProject(target.value); | |||
}); | |||
return form; | |||
} | |||
function ensureAssociatedPagesContainer() { | |||
var associatedPages = document.getElementById('p-associated-pages'); | |||
if (associatedPages) { | |||
return associatedPages; | |||
} | |||
var headingHolder = document.querySelector('.heading-holder'); | |||
var pageHeading = document.querySelector('.heading-holder .page-heading'); | |||
if (!headingHolder) { | |||
return null; | |||
} | |||
associatedPages = document.createElement('ul'); | |||
associatedPages.id = 'p-associated-pages'; | |||
associatedPages.className = 'minerva__tab-container'; | |||
if (pageHeading && pageHeading.parentNode === headingHolder) { | |||
if (pageHeading.nextSibling) { | |||
headingHolder.insertBefore(associatedPages, pageHeading.nextSibling); | |||
} else { | |||
headingHolder.appendChild(associatedPages); | |||
} | |||
} else { | |||
headingHolder.appendChild(associatedPages); | |||
} | |||
return associatedPages; | |||
} | |||
function getTargetContainers() { | |||
var targets = []; | |||
var portletList = document.querySelector('#mw-content .mw-portlet-body ul'); | var portletList = document.querySelector('#mw-content .mw-portlet-body ul'); | ||
if (portletList) { | if (portletList) { | ||
targets.push(portletList); | |||
} | } | ||
var associatedPages = ensureAssociatedPagesContainer(); | |||
if (associatedPages) { | |||
targets.push(associatedPages); | |||
} | |||
return targets; | |||
}); | } | ||
})( | |||
for (var ci = 0; ci < containers.length; ci++) { | |||
var container = containers[ci]; | |||
var rawText = container.textContent || ''; | |||
var items = rawText.split(','); | |||
var projects = []; | |||
for (var i = 0; i < items.length; i++) { | |||
var item = items[i].trim(); | |||
if (item) { | |||
projects.push(item); | |||
} | |||
} | |||
if (projects.length <= 1) { | |||
continue; | |||
} | |||
var preferredProject = $.cookie(COOKIE_PROJECT) || ''; | |||
var preferredNorm = normalizeProjectName(preferredProject); | |||
var activeProject = projects[0]; | |||
if (preferredProject && preferredNorm !== 'corvax') { | |||
for (var p = 0; p < projects.length; p++) { | |||
if (normalizeProjectName(projects[p]) === preferredNorm) { | |||
activeProject = projects[p]; | |||
break; | |||
} | |||
} | |||
} | |||
if (!getCurrentJsonPath()) { | |||
setCurrentJsonPath(activeProject); | |||
} | |||
var targets = getTargetContainers(); | |||
for (var t = 0; t < targets.length; t++) { | |||
targets[t].appendChild(createProjectMenu(projects, activeProject)); | |||
} | |||
if (preferredProject && preferredNorm !== 'corvax') { | |||
for (var k = 0; k < projects.length; k++) { | |||
if (normalizeProjectName(projects[k]) === preferredNorm) { | |||
refreshForProject(projects[k]); | |||
break; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
function initPage() { | |||
var checkboxExist = document.querySelectorAll('.js-checkbox-generator'); | |||
if (checkboxExist.length > 0) { | |||
initCheckboxCreator(); | |||
} | } | ||
registerCheckboxExpander('js-checkbox-mw-collapsible'); | |||
} | } | ||
const currentPageTitle = document.title; | const currentPageTitle = document.title; | ||
| Строка 1313: | Строка 1405: | ||
if (document.querySelectorAll('.ajax-load-content').length > 0) { | if (document.querySelectorAll('.ajax-load-content').length > 0) { | ||
initAjaxLoader(); | initAjaxLoader(); | ||
} | } | ||
var projectSelectionExist = document.querySelectorAll('.js-project-selection-generator'); | var projectSelectionExist = document.querySelectorAll('.js-project-selection-generator'); | ||
| Строка 1322: | Строка 1410: | ||
initProjectSelectionGenerator(); | initProjectSelectionGenerator(); | ||
} | } | ||
initPage(); | |||
}); | }); | ||
/*WikiEditor/Викификатор*/ | /*WikiEditor/Викификатор*/ | ||