MediaWiki:Common.js: различия между версиями
Pok (обсуждение | вклад) м Отмена версии 83111, сделанной Pok (обсуждение) Метка: отмена |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 1275: | Строка 1275: | ||
// wiki import end | // wiki import end | ||
;(function($, mw){ | ;(function($, mw) { | ||
const COOKIE = 'ss14_wikiTheme'; | const COOKIE = 'ss14_wikiTheme'; | ||
| Строка 1311: | Строка 1311: | ||
const $form = $('<form>'); | const $form = $('<form>'); | ||
[ | const options = [ | ||
{ key: 'light', label: 'Светлая (beta)' }, | { key: 'light', label: 'Светлая (beta)' }, | ||
{ key: 'normal', label: 'Стандартная' }, | { key: 'normal', label: 'Стандартная' }, | ||
{ key: 'dark', label: 'Тёмная' }, | { key: 'dark', label: 'Тёмная' }, | ||
{ key: 'ss14', label: 'Space Station 14' } | { key: 'ss14', label: 'Space Station 14' } | ||
].forEach(opt => { | ]; | ||
options.forEach(opt => { | |||
const $wr = $('<div>', { class: 'theme-client-prefs-radio' }); | const $wr = $('<div>', { class: 'theme-client-prefs-radio' }); | ||
const $inp = $('<input>', { | const $inp = $('<input>', { | ||
type: | type: 'radio', | ||
name: | name: 'theme-selection', | ||
id: | id: `theme-value-${opt.key}`, | ||
value: | value: opt.key, | ||
checked: | checked: opt.key === currentTheme | ||
}); | }); | ||
const $lbl = $('<label>', { | const $lbl = $('<label>', { | ||
for: | for: `theme-value-${opt.key}`, | ||
text: | text: opt.label | ||
}); | }); | ||
$wr.append($inp, $lbl); | $wr.append($inp, $lbl); | ||
| Строка 1349: | Строка 1350: | ||
} | } | ||
mw.themeUtils = { loadTheme, applyTheme, initThemeMenu } | mw.themeUtils = { loadTheme, saveTheme, applyTheme, initThemeMenu }; | ||
$(function() { | |||
const theme = loadTheme(); | |||
applyTheme(theme); | |||
const $dropdown = $('<div>', { class: 'theme-dropdown' }); | |||
const $details = $('<details>', { id: 'theme-preferences-details', class: 'theme-dropdown-details' }); | |||
const $summary = $('<summary>', { class: 'theme-dropdown-summary', 'data-tooltip-initialized': 'true' }) | |||
.append($('<span>', { class: 'theme-icon theme-icon-settings' })); | |||
$details.append($summary); | |||
const $window = $('<div>', { id: 'theme-preferences', class: 'theme-window' }).hide(); | |||
const $header = $('<div>', { id: 'theme-preferences__header', class: 'theme-window__header', text: 'Параметры' }); | |||
const $content = $('<div>', { id: 'theme-preferences__content', class: 'theme-window__content' }); | |||
$window.append($header, $content); | |||
initThemeMenu($content, theme); | |||
$dropdown.append($details, $window); | |||
$('#user-tools').append($dropdown); | |||
const $cover = $('#menus-cover'); | |||
$details.on('toggle', function() { | |||
const isOpen = $(this).prop('open'); | |||
$window.toggle(isOpen); | |||
if ($cover.length) { | |||
$cover.css('display', isOpen ? 'block' : 'none'); | |||
} | |||
}); | |||
$(document).on('click', function(e) { | |||
const isClickInside = $(e.target).closest('.theme-window, .theme-dropdown-summary').length > 0; | |||
if (!isClickInside && $details.prop('open')) { | |||
$details.removeAttr('open'); | |||
if ($cover.length) { | if ($cover.length) { | ||
$cover.css('display', | $cover.css('display', 'none'); | ||
} | } | ||
}); | } | ||
}); | |||
}); | |||
})(jQuery, mediaWiki); | |||