JS-Overrides für /media/vendor Dateien

  • Hallo Forum,

    ich hoffe ich bin für meine Verständnisfrage im richtigen Bereich gelandet.

    Unter: "media/vendor/awesomplete/js" gibt es eine Java-Script-Datei für das Suchindex-Modul.

    In dieser Datei wird folgender Code via Java-Script zusammengebaut:

    Code
    <span class="visually-hidden" role="status" aria-live="assertive" aria-atomic="true">Type 2 or more characters for results.</span>

    Dieser wird beim Thema Barrierefreiheit auch wunderbar von einem Screen-Reader vorgelesen.

    Nur leider ist der Code in Englisch, was ich für eine deutsche Webseite nicht so toll finde.

    Da der Code im Javascript steht kann ich wohl leider keine Sprachen-Override verwenden.

    Wenn ich den Code per Hand ändere, begehe ich einen Core-Hack, was nicht nur unschön ist sondern auch bei einem Update wieder überschrieben wird.

    Wenn ich im Netz richtig gelesen habe gibt es den Ordner "media/vendor" extra dafür dass diese Dateien nicht mittels Override überschrieben werden können.

    Verstehe ich das richtig???

    Oder gibt es eine Möglichkeit in meinem Template einen Override dafür zu erstellen?

    Wenn ja, wie müsste denn die Ordnerstruktur dafür aussehen.

    P.S.: awesomplete ist nur ein Beispiel. Ggf. Interessieren mich noch andere Änderungen.

    Bin für jeden Tipp dankbar ;)

  • Eventuell nützlich:

    joomla.stackexchange.com/questions/15992/is-it-possible-to-override-js-scripts

    Ist mir aber nicht bekannt ob das so noch funtioniert und ist schon sehr alt und Code sollte man daher wohl überarbeiten.


    Bezüglich awesomplete und Übersetzung in Deutsch gibt es übrigens wohl einen PR:

    github.com/LeaVerou/awesomplete/blob/2b578f260db88f4ee4993fc541de51b15c86d565/awesomplete.js#L370

    github.com/LeaVerou/awesomplete/pull/17243

    Wird aber derzeit wohl nicht mehr weiterentwickelt.

    Aber dort wohl eine deutsche Variante:

    preview-timetable.dsiag.ch/awesomplete.min.js


    Edit:

    Aber dort wird diese wohl verwendet:

    preview-timetable.dsiag.ch/pare/de

    https://preview-timetable.dsiag.ch/awesomplete.min.js

    und ist dort ebenfalls wohl unkomprimiert zugänglich:

    github.com/LeaVerou/awesomplete/blob/2b578f260db88f4ee4993fc541de51b15c86d565/awesomplete.js

    Gruß Sieger66. Fragen und Antworten zu Joomla in den Joomla-FAQ´s & How To´s :!:

    Die Suchfunktion im Forum ist dort: SUCHE und die Suche nach Tags dort: TAGS

    Einmal editiert, zuletzt von Indigo66 (8. März 2024 um 06:57) aus folgendem Grund: 2 Beiträge von Sieger66 mit diesem Beitrag zusammengefügt.

  • Kleiner Crashkurs zum Web Asset Manager.

    - DU findest im Core die Datei media\vendor\joomla.asset.json. (Hinweis: Es gibt weitere joomla.asset.json im Joomla-Core!)

    - In dieser mehrere Einträge mit "name": "awesomplete".

    - Darunter einer der ein Asset vom Typ "type": "script" definiert. Sieht derzeit so aus:

    Code
    {
        "name": "awesomplete",
        "type": "script",
        "uri": "vendor/awesomplete/awesomplete.min.js",
        "attributes": {
            "defer": true
        },
        "package": "awesomplete",
        "version": "1.1.5"
    },

    Um dieses Asset zu überschreiben, trägst du in deinem Template in der Datei joomla.asset.json ein ähnliches Asset an (beachte das "uri"):

    Code
    {
        "name": "awesomplete",
        "type": "script",
        "uri": "awesomplete.js",
        "attributes": {
            "defer": true
        },
        "package": "awesomplete",
        "version": "1.1.5"
    },

    und legst im js-Ordner deines Templates die Datei

    Code
    awesomplete.js

    an bzw. kopierst die unminifizierte js-Datei aus dem Core dorthin. Das sollte schon reichen, damit die dann verwendet wird und keine .min.js oder nerviger .min.js.gz gezogen wird. Natürlich kannst auch die im Override-Ordner anlegen, aber das wären dann die nächsten Schritte, weil du willst ja bearbeiten.

    Wo nun der "js-Ordner deines Templates" ist, hängt von deinem Template ab. Vielleicht in /media/templates/site/TEMPLATENAME/js oder noch old-fashioned in /templates/TEMPLATENAME/js

    Für Spielkinder: Du kannst aber auch eine "uri" definieren, die sonstwo ist.

    Natürlich kannst du auch old-fashioned überschreiben, also eine teilweise unsäglich verschachtelte Ordner-Struktur in deinem Template-js-Ordner anlegen. wie das noch unter Joomla-3 nötig war.

    Wenn ich im Netz richtig gelesen habe gibt es den Ordner "media/vendor" extra dafür dass diese Dateien nicht mittels Override überschrieben werden können.

    Verstehe ich das richtig???

    Das ist Unsinn. Nahezu alles im /media/-Ordner ist irgendwie im eigenen Template überschreibbar, aber siehe oben "unsäglich verschachtelte Ordner-Struktur" ;) falls man den WAM nicht verwendet, was aber ab Joomla 4 ein "selber doof" wäre. Aaaaber, natürlich gibt es abseits von Core-Erweiterungen noch fremde, wo man nicht drumrum kommt old-fashioned zu murksen, weil sie weder den WAM noch eine eigene joomla.asset.json nutzen.

    UUUnd es gibt auch WAM-Methoden mit denen man aus dem PHP-Code heraus ein WAM-Asset umleiten kann, ohne joomla.asset.json, aber das spare ich mir jetzt ;)

  • Ja, da ist Re:Later eben Joomla-Profi-Meister,

    das ganze hätte ich eigentlich auch wissen können, aber noch nie für Override gebraucht und siehe z.B. auch:

    manual.joomla.org/docs/general-concepts/web-asset-manager/#overriding-an-asset

    https://www.dionysopoulos.me/book/concepts-webassetmanager.html

    Alte Doku:

    docs.joomla.org/J4.x:Web_Assets/de

  • Noch kleiner Tipp nebenbei, der mich noch juckt. Wenn du beim schrittweise Bearbeiten deiner awesomplete.js den Browser-Cache austricksen willst, also jeweils Neuladen erzwingen willst, änderst nach der Änderung einfach den version-Eintrag deines Assets wie es beliebt. z.B. hochzählen

    Code
    "version": "1.1.5-1"
  • ...Da der Code im Javascript steht kann ich wohl leider keine Sprachen-Override verwenden...

    Falls du doch auch mal einen Sprachenstring(Sprach-Override) in deinem Javascript verwenden willst oder mußt,

    dann ist eventuell nützlich:

    Language String in Javascript mittels Joomla.Text._()