Less home code more F3
This commit is contained in:
@@ -47,45 +47,10 @@
|
||||
const editor = document.querySelector('[data-markdown-editor]');
|
||||
const picker = document.querySelector('[data-media-picker]');
|
||||
const editorLayout = document.querySelector('[data-editor-layout]');
|
||||
const pickerTitle = document.querySelector('[data-media-picker-title]');
|
||||
const pickerHelp = document.querySelector('[data-media-picker-help]');
|
||||
const pickerClose = document.querySelector('[data-media-picker-close]');
|
||||
const coverInput = document.querySelector('[data-cover-input]');
|
||||
const coverPreview = document.querySelector('[data-cover-preview]');
|
||||
const coverPlaceholder = document.querySelector('[data-cover-placeholder]');
|
||||
const coverClear = document.querySelector('[data-cover-clear]');
|
||||
let pickerMode = 'markdown';
|
||||
|
||||
const focusEditor = () => editor?.focus();
|
||||
|
||||
const updateCoverPreview = (item = null) => {
|
||||
if (!coverInput || !coverPreview || !coverPlaceholder) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (item && item.id && item.url) {
|
||||
coverInput.value = item.id;
|
||||
coverPreview.src = item.url;
|
||||
coverPreview.alt = 'Image de couverture';
|
||||
coverPreview.classList.remove('is-hidden');
|
||||
coverPlaceholder.classList.add('is-hidden');
|
||||
if (coverClear) {
|
||||
coverClear.disabled = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
coverInput.value = '';
|
||||
coverPreview.removeAttribute('src');
|
||||
coverPreview.classList.add('is-hidden');
|
||||
coverPlaceholder.classList.remove('is-hidden');
|
||||
if (coverClear) {
|
||||
coverClear.disabled = true;
|
||||
}
|
||||
};
|
||||
|
||||
coverClear?.addEventListener('click', () => updateCoverPreview());
|
||||
|
||||
if (editor) {
|
||||
const replaceSelection = (before, after = '', placeholder = '') => {
|
||||
const start = editor.selectionStart;
|
||||
@@ -152,12 +117,11 @@
|
||||
});
|
||||
}
|
||||
|
||||
const togglePicker = (open, mode = pickerMode) => {
|
||||
const togglePicker = (open) => {
|
||||
if (!picker) {
|
||||
return;
|
||||
}
|
||||
|
||||
pickerMode = mode;
|
||||
picker.classList.toggle('is-hidden', !open);
|
||||
editorLayout?.classList.toggle('is-picker-open', open);
|
||||
|
||||
@@ -166,42 +130,19 @@
|
||||
return;
|
||||
}
|
||||
|
||||
const isCover = pickerMode === 'cover';
|
||||
if (pickerTitle) {
|
||||
pickerTitle.textContent = isCover ? 'Choisir une couverture' : 'Insérer une image';
|
||||
}
|
||||
if (pickerHelp) {
|
||||
pickerHelp.textContent = isCover
|
||||
? 'Clique sur une image pour l’utiliser comme couverture.'
|
||||
: 'Clique sur une image pour l’insérer dans l’article.';
|
||||
}
|
||||
|
||||
picker.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
||||
};
|
||||
|
||||
on('[data-media-picker-open]', (button) => {
|
||||
button.addEventListener('click', () => {
|
||||
togglePicker(true, button.getAttribute('data-media-picker-open') || 'markdown');
|
||||
});
|
||||
button.addEventListener('click', () => togglePicker(true));
|
||||
});
|
||||
|
||||
pickerClose?.addEventListener('click', () => togglePicker(false));
|
||||
|
||||
on('[data-media-picker-select]', (button) => {
|
||||
button.addEventListener('click', () => {
|
||||
const item = {
|
||||
id: button.getAttribute('data-media-id') || '',
|
||||
url: button.getAttribute('data-media-url') || '',
|
||||
markdown: button.getAttribute('data-media-markdown') || '',
|
||||
};
|
||||
|
||||
if (pickerMode === 'cover') {
|
||||
updateCoverPreview(item);
|
||||
togglePicker(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!editor || !item.markdown) {
|
||||
const markdown = button.getAttribute('data-media-markdown') || '';
|
||||
if (!editor || !markdown) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -209,12 +150,11 @@
|
||||
const end = editor.selectionEnd;
|
||||
const prefix = start > 0 && !editor.value.slice(0, start).endsWith('\n\n') ? '\n\n' : '';
|
||||
const suffix = end < editor.value.length && !editor.value.slice(end).startsWith('\n\n') ? '\n\n' : '';
|
||||
editor.setRangeText(prefix + item.markdown + suffix, start, end, 'end');
|
||||
editor.setRangeText(prefix + markdown + suffix, start, end, 'end');
|
||||
togglePicker(false);
|
||||
});
|
||||
});
|
||||
|
||||
// Synchronise data-copy-text du bouton Markdown quand l'alt est modifié.
|
||||
on('[data-alt-input]', (input) => {
|
||||
const card = input.closest('.card');
|
||||
const button = card?.querySelector('[data-markdown-template]');
|
||||
|
||||
Reference in New Issue
Block a user