Changeset b406d25 in Klonkt for src/assets/js/mod/post-edit.js
- Timestamp:
- 08/09/2026 07:57:50 AM (4 weeks ago)
- Branches:
- main
- Children:
- b2adc20
- Parents:
- d7e72b8
- File:
-
- 1 edited
-
src/assets/js/mod/post-edit.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/mod/post-edit.js
rd7e72b8 rb406d25 6 6 7 7 import { pageData, esc, makeSweeper } from './lib.js'; 8 // Dezelfde regel die de server gebruikt -- zie shared/post-music-type.js voor 9 // waarom hij daar staat en niet twee keer. 10 import { afleidenUitInsluitingen } from '../shared/post-music-type.js'; 8 11 9 12 // De oude inline scripts draaiden bij ELKE render; een module draait zijn … … 791 794 } 792 795 updateCharCount(); 793 } 796 volgMuziek(); 797 } 798 799 // Wordt hieronder gevuld door het typeblok. Zolang dat er niet is (of de 800 // gebruiker het type zelf koos) gebeurt er niets -- insertChip mag daar niet 801 // op stuklopen. 802 let volgMuziek = () => {}; 794 803 795 804 // ── Embed insert: paste a platform URL -> [[embed:url]]-chip that becomes … … 972 981 const seg = card.querySelector('.pe-typeseg'); 973 982 const panels = card.querySelectorAll('.pe-type-panel'); 983 let handmatig = false; // heeft de gebruiker het type zelf aangeklikt? 974 984 975 985 function applyType(tt) { … … 989 999 seg.addEventListener('click', (e) => { 990 1000 const btn = e.target.closest('.pe-typeseg-btn'); 991 if (btn) applyType(btn.dataset.type); 1001 if (!btn) return; 1002 handmatig = true; // jouw klik wint vanaf nu van de afleiding 1003 applyType(btn.dataset.type); 992 1004 }); 993 1005 applyType(typeInput.value || 'post'); 1006 1007 // ── Het type volgt de muziek (shaer-cyg) ────────────────────── 1008 // 1009 // Robins regel: de post neemt de soort van zijn muziek over als hij precies 1010 // EEN muzikale eenheid bevat. Dus zodra je een playlist invoegt verspringt 1011 // de balk mee, en zie je wat je aan het maken bent in plaats van het zelf te 1012 // moeten bijhouden. 1013 // 1014 // TWEE DINGEN DIE HIJ MET RUST LAAT. Klik je zelf een type aan, dan wint die 1015 // keuze -- daarna wordt er niets meer voor je omgezet. En Foto en Video zijn 1016 // een bewuste andere keuze over dezelfde post, dus die overschrijft hij 1017 // nooit, ook niet als er muziek in staat. 1018 // 1019 // Bij het OPENEN van een post gebeurt er niets: de eerste afleiding wordt 1020 // alleen als ijkpunt onthouden. Anders zou een oude post van type veranderen 1021 // door hem te bekijken. 1022 const VOLGBAAR = new Set(['post', 'album', 'playlist', 'audio']); 1023 const kindVan = new Map(); 1024 let vorigeAfleiding = null; 1025 1026 const soortenGeladen = fetch('/admin/playlists/api/list', { credentials: 'same-origin' }) 1027 .then((r) => r.json()) 1028 .then((j) => { 1029 if (j && j.ok && Array.isArray(j.playlists)) { 1030 for (const p of j.playlists) kindVan.set(p.id, p.kind === 'playlist' ? 'playlist' : 'album'); 1031 } 1032 }) 1033 // Zonder de soorten leidt de regel niets af (elke playlist is dan 1034 // 'onbekend'), en dat is beter dan een gok die als keuze oogt. 1035 .catch(() => {}) 1036 .then(() => { vorigeAfleiding = afleidenNu(); }); 1037 1038 function afleidenNu() { 1039 // Precies de tekst die straks wordt opgeslagen: chips terug naar 1040 // shortcodes. Zo leidt de editor af uit wat de server ook zal zien. 1041 const clone = editor.cloneNode(true); 1042 serializeChips(clone); 1043 const r = afleidenUitInsluitingen(clone.innerHTML, (id) => kindVan.get(id) || null); 1044 return r ? r.type : null; 1045 } 1046 1047 volgMuziek = async () => { 1048 await soortenGeladen; 1049 const nu = afleidenNu(); 1050 if (nu === vorigeAfleiding) return; // de muziek is niet van soort veranderd 1051 vorigeAfleiding = nu; 1052 if (handmatig || !nu) return; 1053 if (!VOLGBAAR.has(typeInput.value)) return; 1054 applyType(nu); 1055 }; 1056 1057 // Ook getypte of geplakte shortcodes tellen, niet alleen de knoppen. 1058 let tik = null; 1059 editor.addEventListener('input', () => { 1060 clearTimeout(tik); 1061 tik = setTimeout(volgMuziek, 300); 1062 }); 994 1063 995 1064 // Video URL → [[embed:url]] chip
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)