knuspermagier.de
Er bloggt noch? Krass!

Save & Publish-Button für Kirby

Eine klitzekleine Kleinigkeit, die ich mir bei Kirby 4 noch gewünscht hätte, wäre ein Hook um neue Buttons in die Buttonbar auf der Seite-Bearbeiten-Seite einfügen zu können. Ich hab mir nämlich schon vor Jahren mal ein Plugin geschrieben, dass einen "Save & Publish"-Knopf bereitstellt. Für alle, die Kirby als Blog benutzen ist das eine wichtige Sache, denn niemand klickt gerne "Save" um dann auch noch auf den Status-Chooser zu gehen um dort "Published" auszuwählen. Das sind mindestens drei oder vierhundert Klicks zu viel. Im Jahr.

Bisher war das Plugin allerdings ein Feld, das man im Blueprint irgendwo hingepackt hat, viel besser wäre es doch einfach wenn es sich neben dem normalen Speichern-Button befinden würde.

screenshot-2024-01-28-at-15.40.23.png
Mein alter Button, groß und hässlich.
screenshot-2024-01-28-at-15.35.22.png
Da soll er hin!

Leider ist das nicht möglich. Gestern hat der Kirby-Mastodon-Account dieses language-selector-Plugin erwähnt und ich hatte schon Hoffnung, etwas übersehen zu haben, doch das Plugin überschreibt einfach eine Komponente und injiziert damit seine Funktionalität. Smart, aber für meinen Button nicht zu gebrauchen, ich will ja nicht den language-selector durch meinen Button ersetzen.

Naja. Ich dachte also nochmal zehn Minuten darüber nach, wie man das kurz und schmerzlos reinklöppeln könnte und kam zu der folgenden, leicht schmutzigen, aber gut funktionierenden Lösung, indem ich meinen Button einfach ins DOM klöppel. Alle nötigen Funktionen zum Status ändern und Speichern sind durch window.panel zum Glück einfach global verfügbar. Vielen Dank!

window.onload = () => {
    const buttons = document.querySelector('.k-header-buttons .k-button-group');

    const template = `
        <button 
            data-has-icon="true" 
            data-has-text="true" 
            data-responsive="true" 
            data-size="sm" 
            data-theme="positive" 
            data-variant="filled" 
            type="button" 
            class="k-button k-page-view-status k-status-icon" 
            style="--icon-size: 15px;"
           >
            <span class="k-button-icon">
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="k-icon" style="fill: black !important;"><path d="M9 7.53861L15 21.5386L18.6594 13H23V11H17.3406L15 16.4614L9 2.46143L5.3406 11H1V13H6.6594L9 7.53861Z"></path></svg>
            </span>
            <span class="k-button-text"> Save & Publish </span>
          </button>
    `

    const button = document.createElement('button');
    button.innerHTML = template;

    button.addEventListener('click', async () => {
        await panel.$vue.$store.dispatch("content/save");
        panel.$vue.$events.emit("model.update");
        panel.notification.success();

        await panel.$api.pages.changeStatus(panel.$view.path.replace('pages/', ''), 'listed', 0)
        panel.$vue.$reload({ silent: true });
    });

    buttons.appendChild(button);
}

Das landet einfach in der index.js in einem Plugin, ganz ohne Build-Prozess und schwupps:

screenshot-2024-01-28-at-15.37.43.png
Da isser!

(Wär natürlich jetzt noch schön, wenn er nur angezeigt werden würde, wenn der State dirty ist, das geht sicher auch, wenn ich auf ein paar Events höre, aber meine 10 Minuten für Quatsch sind heute aufgebraucht)

Update: Ich hab es doch mal auf Github gepackt (und noch einen Bug gefixt)

Vor Jahren bestellte ich mal diverse Reinigungsmittel bei Everdrop, weil ich es mal ausprobieren wollte. Davon geblieben ist nur das Geschirrspültab-Abo, was ja das sinnloseste ist — der USP ist ja eigentlich „weniger Transportkosten wegen Kram in Pulverform“. Die Tabs bekommt man ja auch ganz normal im Supermarkt, keine Ahnung, warum ich die als Abo hab.

Naja, nachdem mal wieder das Paket kam, was… 10x so viel Volumen hat, wie der Inhalt, werde ich das Abo mal kündigen, das ist echt Quatsch.

Es ist auch immer hart, wenn man merkt, dass man in so eine dumme Abofalle läuft. Gekauft mit irgendeinem Gutschein, und weil man schöne Dosen dazu bekam und nun habe ich wahrscheinlich seit einem Jahr viel zu viel Geld für Geschirrtabs ausgegeben, während ich alle anderen Reinigungsmittel schon lange wieder lokal kaufe, weil ich keine Lust habe, auf einer Webseite herumzuklicken und den besten Lieferintervall für Toilettenreiniger herauszufinden.

Es sparkt auch gar nicht so viel Joy wie gedacht, wenn man das Geschirrspülsalz, was eh nur für zwei Anwendungen hält, in einer schicken Metalldose hat.

c3cd15e4e22aacd9.jpeg
Zuerst auf Mastodon → erschienen.