MediaWiki:Common.js: Porovnání verzí
MediaWiki interface page
More actions
Bez shrnutí editace |
Bez shrnutí editace |
||
| Řádek 6: | Řádek 6: | ||
}); | }); | ||
(function () { function wrapSelection(input, before, after) { const s = input.selectionStart, e = input.selectionEnd; const val = input.value, sel = val.slice(s, e); input.value = val.slice(0, s) + before + sel + after + val.slice(e); const pos = s + before.length + sel.length + after.length; input.focus(); input.setSelectionRange(pos, pos); } function wrapEachLine(input, prefix) { const s = input.selectionStart, e = input.selectionEnd; const val = input.value, sel = val.slice(s, e); const wrapped = sel.split('\n').map(l => (l ? prefix + l : l)).join('\n'); input.value = val.slice(0, s) + wrapped + val.slice(e); const pos = s + wrapped.length; input.focus(); input.setSelectionRange(pos, pos); } function addToolbarForPage(pageEl) { const $page = $(pageEl); if ($page.data('privateToolbar')) return; const $textarea = $page.find('textarea.oo-ui-inputWidget-input').first(); if (!$textarea.length) return; const input = $textarea.get(0); const $bar = $('<div class="private-mini-toolbar" />'); function btn(label, title, handler) { $('<button type="button" class="pmt-btn" />') .text(label).attr('title', title).on('click', () => handler(input)) .appendTo($bar); } btn('B', "Tučné ('''...''')", el => wrapSelection(el, "'''", "'''")); btn('I', "Kurzíva (''...'' )", el => wrapSelection(el, "''", "''")); btn('H2', 'Nadpis úrovně 2', el => wrapSelection(el, '== ', ' ==')); btn('•', 'Seznam (odrážky)', el => wrapEachLine(el, '* ')); btn('[]', 'Odkaz [[...]]', el => { const s = el.selectionStart, e = el.selectionEnd; const val = el.value, sel = val.slice(s, e) || 'Cíl'; wrapSelection(el, '[[' + sel + '|', ']]'); }); // vlož lištu před textarea (nad popisek pole) $textarea.closest('.oo-ui-widget').before($bar); $page.data('privateToolbar', true); } function scan(root) { // Stránka parametru v dialogu šablony s datovým atributem parametru $(root).find('.ve-ui-mwTemplateDialog .ve-ui-mwParameterPage[data-param-name="text"]') .each((_, el) => addToolbarForPage(el)); } // Když se aktivuje VisualEditor, připoj pozorovatele function init() { const mo = new MutationObserver(muts => muts.forEach(m => scan(m.target))); mo.observe(document.body, { childList: true, subtree: true }); scan(document); // pro případ, že dialog už je otevřený } // Počkej, až je VE načtený (ale funguje i kdyby už byl) if (mw.loader.getState('ext.visualEditor.desktopArticleTarget.init')) { init(); } else { mw.loader.using('ext.visualEditor.desktopArticleTarget.init').then(init); } })(); | |||
})(); | |||
Verze z 9. 10. 2025, 23:19
mw.hook('wikipage.content').add(function ($c) {
var $ph = $c.find('.private-placeholder');
if ($ph.length > 1) {
$ph.slice(1).remove();
}
});
(function () { function wrapSelection(input, before, after) { const s = input.selectionStart, e = input.selectionEnd; const val = input.value, sel = val.slice(s, e); input.value = val.slice(0, s) + before + sel + after + val.slice(e); const pos = s + before.length + sel.length + after.length; input.focus(); input.setSelectionRange(pos, pos); } function wrapEachLine(input, prefix) { const s = input.selectionStart, e = input.selectionEnd; const val = input.value, sel = val.slice(s, e); const wrapped = sel.split('\n').map(l => (l ? prefix + l : l)).join('\n'); input.value = val.slice(0, s) + wrapped + val.slice(e); const pos = s + wrapped.length; input.focus(); input.setSelectionRange(pos, pos); } function addToolbarForPage(pageEl) { const $page = $(pageEl); if ($page.data('privateToolbar')) return; const $textarea = $page.find('textarea.oo-ui-inputWidget-input').first(); if (!$textarea.length) return; const input = $textarea.get(0); const $bar = $('<div class="private-mini-toolbar" />'); function btn(label, title, handler) { $('<button type="button" class="pmt-btn" />') .text(label).attr('title', title).on('click', () => handler(input)) .appendTo($bar); } btn('B', "Tučné ('''...''')", el => wrapSelection(el, "'''", "'''")); btn('I', "Kurzíva (''...'' )", el => wrapSelection(el, "''", "''")); btn('H2', 'Nadpis úrovně 2', el => wrapSelection(el, '== ', ' ==')); btn('•', 'Seznam (odrážky)', el => wrapEachLine(el, '* ')); btn('[]', 'Odkaz [[...]]', el => { const s = el.selectionStart, e = el.selectionEnd; const val = el.value, sel = val.slice(s, e) || 'Cíl'; wrapSelection(el, '[[' + sel + '|', ']]'); }); // vlož lištu před textarea (nad popisek pole) $textarea.closest('.oo-ui-widget').before($bar); $page.data('privateToolbar', true); } function scan(root) { // Stránka parametru v dialogu šablony s datovým atributem parametru $(root).find('.ve-ui-mwTemplateDialog .ve-ui-mwParameterPage[data-param-name="text"]') .each((_, el) => addToolbarForPage(el)); } // Když se aktivuje VisualEditor, připoj pozorovatele function init() { const mo = new MutationObserver(muts => muts.forEach(m => scan(m.target))); mo.observe(document.body, { childList: true, subtree: true }); scan(document); // pro případ, že dialog už je otevřený } // Počkej, až je VE načtený (ale funguje i kdyby už byl) if (mw.loader.getState('ext.visualEditor.desktopArticleTarget.init')) { init(); } else { mw.loader.using('ext.visualEditor.desktopArticleTarget.init').then(init); } })();