Hallihallo - hätte da wieder eine nervige Kleinigkeit, die man vielleicht verbessern kann!
Nach dem Schreiben eines Beitrags möchte ich oft ein Zitat ergänzen.
Es wär schnieke, wenn vorgemerkte Zitate auch beim Bearbeiten angezeigt würden, am besten sogar auch die vorigen Beiträge!
Bisher muss ich dazu das Bearbeiten abbrechen, das Zitat in eine neue Antwort einfügen, das Ergebnis ausschneiden, Bearbeiten wieder anklicken, das Ergebnis einfügen.
Ich hab da mal eine Idee und Inspiration ausgearbeitet.
Das folgende Script ist ausdrücklich nur als Beispiel und Theorie gedacht – ich bin kein Profi-Programmierer und kann es selbst technisch nicht perfekt umsetzen oder testen.
Es dient also eher als ‚Bauplan‘ oder Vorlage für jemanden, der sich besser damit auskennt.
Die Idee ist, die Zitat-Leiste einfach per Gewalt in den Edit-Modus ‚zurückzuholen‘ und ein kleines ‚X‘ zum Wegklicken einzubauen:
[Inspiration & Experiment] Der „Zitate-beim-Bearbeiten“-Bauplan
Hallo zusammen,
ich habe mal wieder eine kleine Idee ausgearbeitet. Es geht um den Wunsch, vorgemerkte Zitate auch beim Bearbeiten eines Beitrags direkt einfügen zu können, ohne den Editor verlassen zu müssen.
WICHTIG VORAB:
Das hier ist ausdrücklich nur ein Test und eine Inspiration. Da jedes Xobor-Forum (auch wenn das Design gleich aussieht) durch Plugins, Versionen und Einstellungen völlig anders wirken kann, ist dies keine „Plug-and-Play“-Garantie. Es kann sein, dass es bei dem einen super funktioniert und beim Anderen gar nicht reagiert.
Die Idee dahinter:
Bernd hat einen tollen Hinweis gegeben:
Beim Bearbeiten fehlen oft die nötigen Skript-Dateien (quote.js). Mein Entwurf versucht nun, die Zitat-Box „mit Gewalt“ einzublenden und die fehlende Logik im Hintergrund nachzuladen.
<script type="text/javascript"> /** * DAISHI EDIT-QUOTE-FIX (Experimentell) * Nur als Inspiration gedacht! * Kann funktionieren, muss aber nicht, da jedes Forum anders reagiert. */ $(document).ready(function() { // Nur aktiv beim Bearbeiten if (window.location.href.indexOf('editpost') > -1 || window.location.href.indexOf('action=edit') > -1) {
// TEST: Versuchen, die Zitat-Logik nachzuladen (Danke an Bernd für den Tipp!) if (typeof xgetQuotes !== "function") { $.getScript("/jscripts/quote.js"); }
setTimeout(function() { // Die ID der Zitat-Box (muss evtl. individuell angepasst werden) var $zitatBox = $('#xQuotesInsertDiv');
if ($zitatBox.length > 0) { // Box in den Editor-Bereich verschieben $zitatBox.prependTo("#edit_form, .nx_edit_form");
// Das "X" zum Schließen if ($('#close-quote-fix').length === 0) { var closeBtn = $('<span id="close-quote-fix" style="position:absolute; top:5px; right:12px; cursor:pointer; font-size:22px; font-weight:bold;">×</span>'); $zitatBox.append(closeBtn); closeBtn.on("click", function() { $zitatBox.attr('style', 'display: none !important;'); }); } } }, 1200); } }); </script>
Hier ein Bild, wo ich ein neues Thema schreiben möchte und mir Zitate angezeigt wird :
Zitate anzeigen
Wie gesagt:
Testet es einfach mal aus! Es ist ein Bauplan von mir (Daishi) unter Einbeziehung von Bernds technischem Input. Wenn es bei euch klappt – super! Wenn nicht, ist es eine Basis, auf der man weiterbasteln kann.
Klasse, dass du da weiterhin dran bist, Daishi, danke dir!! Als Plugin, oder wohin würdest du es am ehesten probieren? Aber ich warte vlt. besser noch ab...
aber oft braucht man nur ein Teilzitat, diese Möglichkeit vermisse ich derzeit. Wenn man in den angezeigten Beiträgen nur selektieren und kopieren könnte
nach einigen Versuchen habe ich mich noch nicht wieder mit quote??.js beschäftigt. Man muss wohl noch einige Parameter zusätzlich definieren., um auf den Zitatspeicher zugreifen zu können.
Zitat von L2otbart im Beitrag #7k.A., ob es bekannt ist, dass man einen ganzen Beitrag nur anhand der msgnr zitieren kann, der Text ist gar nicht nötig?
Das hätte glaub ich den gleichen Effekt wie der "Zitat vormerken" Button, oder gibts ein Vorteil dabei?
Also für mich ist allein schon der helle
Wahnsinn,
dass wir die vorigen Beiträge jetzt sehen und auch noch mehrfach direkt einfügen lassen können. Daraus dann alles außer die Zitate zu löschen ist natürlich nicht gleich fix wie Teilzitate zu selektieren. Aber dies war für mich bisher ein wichtiger Notnagel, der jetzt schon sehr komfortabel geworden ist. Ich kann mir vorstellen selbst wenn ein einzelnes Teilzitat ginge, dass die Multi-Zitier-und-Selektier-Funktion dann die riesige Hürde wäre. Wiederum den Zusammenhang nur eines einzelnes Zitats einmal vorn und einmal hinten wegzulöschen ist dann recht einfach... Ob sich der Aufwand wirklich lohnt, das auszubaldowern?
Also ich bin schon mal sehr glücklich mit dieser Lösung, vielen herzlichen Dank Wolfgang, klappt bei mir super!
Klickt man das Raute-Symbol (z.B.: #8) in der Titelleiste ganz links im Beitrag an, erscheint oben in der Adresszeile am Ende die MSG-Nummer!
Öffnet man "Beitrag bearbeiten ", steht die MSG-Nummer auch am Ende der Adresszeile nach "replyid=".
Befindet man sich in "Beitrag bearbeiten " und klickt auf die Vorschau ist die MSG-Nummer nicht am Ende, sondern etwas eingerückt, ist aber deutlich durch "msg=****" zu erkennen.
Der große Vorteil liegt darin, dass man nicht den ganzen Text eines zu zitierenden Beitrages abbilden muss!
Das Zitat wird originalgetreu abgebildet! Man kann allerdings nichts nachbearbeiten, verfälschen oder Platzhalter setzen!
Bilder aus dem Upload werden nur als Quelltext angezeigt.
Es kann vorkommen, dass bestimmte oder eigene BB-Codes nicht umgesetzt werden.
Wenn man das Zitat-Kürzel mit einem Leerzeichen füllt, wird nur der verlinke Username und die verlinkte Betrags-Nummer angezeigt, der Text bleibt aus und das so erstellte Tastenkürzel kann dann gut als Hinweis genutzt werden.
Wenn man das Zitat-Kürzel mit Text füllt, wird der Username und die Betragsnummer mit dem eingetragenen Text angezeigt.
MSG-Nummer: 7686
Eintrag:[quote=|p7686]Ich möchte mich auf den Beitrag von User XYZ beziehen.[/quote]
Ergebnis:
Zitat von Wolfgang im Beitrag #6Ich möchte mich auf den Beitrag von User XYZ beziehen.
Gibt man ein falsche MSG-Nummer an, wird folgender Hinweis angezeigt.
MSG-Nummer: 76866
Eintrag:[quote=|p76866][/quote]
Ergebnis:
ZitatZitat entfernt, Keine Rechte
Man kann auch MSG-Nummern aus dem ganzen Forum einsetzen, die nichts mit dem aktuellen Thema zu tun haben (aber ohne eigenen Text). Hier wird anstatt der Beitragsnummer das Thema des Beitrages angezeigt! Der folgende Beitrag war einer der ersten im Forum aus 2007!
Installation fürs Business (v4), Xobor (v6) & Mobil
Für die Installation werden 2 Plugins benötigt. Das erste JS kommt ins Plugin-Element "Thread-Flat ", liest die Daten der bereits geschriebenen Beiträge aus und speichert sie dann im Session-Speicher des Browsers! Das zweite JS kommt ins Plugin-Element "Beitrag bearbeiten ", hier werden die geschriebenen Beiträge unter dem Editor aufgelistet und mit dem Button "Zitat einfügen " in den Beitrag eingefügt. Die Zitate werden originalgetreu angezeigt, ein Nachbearbeiten oder Anpassen des Originals ist nicht möglich!
Plugin 1 - "topic_footer"
Plugin 2 - "edit_message_footer"
Das komplette Skript wird als Plugin unter "Thread - Flat / Footer" angelegt.
Wichtig! Im Plugin muss rechts oben das "Unterstützte Template " markiert werden, z.B. Business - Template (144) & Mobil - Template (177), Auswahl mit Mausklick oder Strg + Mausklick !
Das Thread-JS ist für beide Template V4, V6 & Mobil!
Durch "fetch " in Zeile 6 werden die vorhandenen Beiträge ausgelesen und somit keine unzähligen Serveranfragen gestartet!
Über Zeilen 19 werden die Beiträge im "SessionStorage" zwischengespeichert
Zeile 21 wird benötigt um die doppelte HR-Zeile bei "0 Text + Leerzeichen " auszublenden.
<script> // THREAD-LOADER - Liest Beiträge aus und speichert sie im Session-Cache des Browsers (async () => { const clean = location.href.replace(/#msg\d+$/, "");const base = clean.replace(/-\d+\.html$/, ".html"); let max = 1;const m = clean.match(/-(\d+)\.html$/);if (m) max = +m[1] + 1; document.querySelectorAll(".fpages a, .fpages b").forEach(el => {const n = +el.textContent.trim();if (n > max) max = n;}); const pages = await Promise.all(Array.from({length: max}, (_, i) => fetch(i ? base.replace(".html", `-${i}.html`) : base).then(r => r.text()).catch(_ => ""))); const all = []; pages.forEach(html => { const dom = new DOMParser().parseFromString(html, "text/html"); [...dom.querySelectorAll("[id^='post']")].filter(p => /^post_?\d+$/.test(p.id)).forEach(p => { const box = p.cloneNode(true); const user = (box.querySelector(".messageUser strong,.muser .userlink")?.textContent.trim()) || "Unbekannt"; const userLink = box.querySelector(".messageUser a,.muser .userlink")?.href || null;let local = null; const a = box.querySelector("a[href*='msg.php']");if (a) {const ml = a.href.match(/msg=(\d+)/);if (ml) local = +ml[1];}if (!local) {const e = box.querySelector(".edit_action[onclick*='msg=']");const ml = e?.getAttribute("onclick")?.match(/msg=(\d+)/);if (ml) local = +ml[1];} let global = null; const g = box.querySelector("a[name^='msg'], a[href*='#msg']");if (g) {const mg = (g.name || g.href).match(/msg(\d+)/);if (mg) global = +mg[1];} if (!global) return;let nr = null; const nrEl = box.querySelector(".card-header a[href^='#msg'] strong") || box.querySelector(".card-header a[href^='#msg']"); if (nrEl) nr = +nrEl.textContent.replace("#", "").trim();if (!nr) {const idm = p.id.match(/^post_?(\d+)$/);if (idm) nr = +idm[1];} all.push({msgIdGlobal: global,msgIdLocal: local,postNr: nr,user,userLink,html: box.outerHTML}); }); }); if (!all.length) return; all.sort((a, b) => a.msgIdGlobal - b.msgIdGlobal); sessionStorage.setItem("threadPostsMap", JSON.stringify(all)); })(); document.querySelectorAll("hr + hr").forEach(hr=>{hr.style.display = "none"; if (hr.previousElementSibling) {hr.previousElementSibling.style.display = "none";}}); </script>
Schließen
Das komplette Skript wird als Plugin unter "Betrag bearbeiten / Footer" angelegt.
Wichtig! Im Plugin muss rechts oben das "Unterstützte Template " markiert werden, z.B. Business - Template (144) & Mobil - Template (177), Auswahl mit Mausklick oder Strg + Mausklick !
In Zeile 2-20 kann das Aussehen der Boxen und Button angepasst werden!
Die Zeilen 47-61 sind fürs Business (v4) und Zeile 63-86 fürs Xobor (v6) & Mobil. Wird eins von beiden Templates nicht genutzt, können die zugehörigen Zeilen gelöscht werden!
In Zeile 38 kann die Anzahl der Beiträge die angezeigt werden sollen, über ".slice(-10)" bestimmt werden (hier 10 Beiträge)
Zeile 42+43 wird benötigt um ungültige [code]-Blöcke durch Platzhalter ([...]) zu ersetzen. Zeile 44 löscht doppelte HR-TAGs.
RE: Neue Zitatfunktion in "Beitrag bearbeiten" Teil 1-3
Hallo Wolfgang, ich dachte ich hätte schon komplett durchgetestet, aber bei jetzigen Versuchen hier kommen zwar die Zitate rein, jedoch quote wird nicht umgesetzt, egal ob ich es lasse oder nachbearbeite: