Ergebnis 1 bis 2 von 2

Thema: mQscripts

  1. #1
    Benutzer Avatar von zocka
    Registriert
    19.08.2010
    Alter
    25
    Beiträge
    63
    ManiaPlanet
    λx.x zocka
    Login: proni
    Nickname: λx.x zocka
    Zone: World » Europe » Germany » Baden-Württemberg » Karlsruhe
    ManiaLinks: mquery, mldrop, colorcombo, zockaml
    TrackMania
    aM » zocka
    Login: serverkennung United
    Nickname: aM » zocka
    Zone: World » Germany » Baden-Württemberg » Stuttgart
    ManiaLinks: zocka
    Links: TM-Ladder
    Blog-Einträge
    5

    mQscripts

    Ich habe in den letzten Tagen "weil mich akut Interesse überkam" jetzt doch mal ausprobiert, wie weit ich komme, so jQuery mäßig Elemente zu finden und damit dann auch einigermaßen sinnvoll zu arbeiten.
    Im Gegensatz zu mQuery, wo die Elemente (bislang noch grundlegend unzureichend strukturiert (weil es alles nicht so geplant war^^)) beim rendern des xml von php gefunden werden, ist mein Ansatz mit der mQ Funktion jetzt rein ManiaScript.

    Das betreffende Script ist hier zu finden. Nicht alles darin ist wirklich von Belang für das eigentliche Finden der Elemente; es gibt auch Funktionen wie Scale oder SetText, die als zweites Argument ein CMlControl Array verwenden und die angegebenen Werte auf alle Elemente anwenden.

    Verwendung:

    Herzstück ist die mQ() Funktion. Diese existiert mit einigen Überladungen, sodass sich folgende Verwendung ergibt:
    ManiaScript:
     
    declare CMlControl[] matches;
    matches = mQ(".myClass"); // liefert alle Elemente, die im [I]class[/I] Attribut "myClass" enthalten
    matches = mQ("frame"); // liefert alle Elemente vom Typ frame
    matches = mQ(".myClass", (mQ(mQ("frame")) as CMlFrame)); // liefert alle mit Klasse "myClass", die im ersten Frame auf der Seite liegen
    // hier neu:
    declare CMlControl control;
    control = mQ(matches); // liefert (wenn möglich) das erste Element des CMlControl[] Arrays
    control = mQ(matches, 3); // liefert das vierte Elemente
     

    Generell gilt
    CMlControl[] mQ(Text selector[, CMlFrame root])
    CMlControl mQ(CMlControl[] controls[, Integer offset])
    Spoiler: Selektoren


    Erweiternde Funktionen:

    Spoiler:


    Anwendungsideen:

    Wie einleitend gesagt, ging es mir primär ums Prinzip, aber es soll natürlich auch irgendwo sinnvoll sein.
    Vorstellbar wären Anwendungen wie
    ManiaScript:
     
    if (Event.Control in mQ(".myTrigger")) {...}
    if (Event.Control == mQ("#myButton")[0])
      Hide(mQ("label"), certainFrame);
     

    Da ManiaScript ja leider keine Klassen bietet, kann man die Funktionsaufrufe halt leider nur verschachteln, nicht verketten.
    ManiaScript:
    declare CMlControl[] blocks = PosnX(-5., mQFilter(":gt(2)", mQAdd("#testlbl2", SetText("Test", mQ("#testlbl1, .tlbl")))));

    Sowas sieht schon sehr fürchterlich aus (aber es geht![1])


    Etwas Offtopic dazu:
    Ich könnte es mir als sinnvoll vorstellen, ManiaScript "Bibliotheken" (sprich Ansammlungen von Funktionen) irgendwo zentral zum einbinden anzubieten. (<script url="..."> geht ja afaik nicht, aber halt ein <include>, dass etwas mit <script>-Tag einbindet) Das würde es einem ersparen, jeden Kram selber neu zu schreiben und bereits selbstgeschriebene Funktionen müssen nicht in jedes neue Projekt hineinkopiert werden.
    Im Repository mit der mQ Library habe ich auch nocheinmal die TextExt Library (auch in komprimiert) hochgeladen, wie sie auch im mQuery Repository liegt, eben zu diesem Zweck.
    Ich dachte an irgendein zentral gehostetes Script, dass dann nach hinterlegter Id zum Beispiel über die github raw Ausgabe das Maniascript zwischen Script Tags packt und man schließlich nur sowas wie <include url="http://mania-community.de/maniascript?TextExt"> verwendet.

    Abschließend:
    Zudem findet sich auf GitHub ein Python Script zur ManiaScript Komprimierung. (Gerade für "blind" eingebundene Bibliotheken sinnvoll, um die In-Game Codeanzeige übersichtlicher zu halten.) Anders als das Original von Marcel kann man es ohne sein php Framework verwenden:
    (Voraussetzung ist natürlich, dass Python installiert ist, sollte funktionieren mit 2.x und 3.x)
    Einfach eine Konsole im Ordner des Scripts öffnen und python msmin.py <inputfile> eingeben, wobei <inputfile> halt die zu komprimierende Datei (ggf. mit Pfad) ist. Optional lässt sich als weiteres Parameter noch eine Ausgabedatei angeben, sonst wird z.B. aus "mQ.txt" "mQ.min.txt" gebastelt oder aus "mQ" wird "mQ_min".



    Wie ist eure Meinung (gerade zu dem vorletzten Punkt)?

    Und falls jemand Hinweise zu [1] hat, wäre ich dankbar, ich habe keinerlei Ansätze

    _____________________
    [1] https://github.com/PRGfx/mQscripts/issues/1, http://pastie.org/private/hmfkwqfqk1t2scsscptnq
    Geändert von zocka (14.06.2014 um 11:34 Uhr) Grund: Script highlighting

  2. #2
    Moderator und Moderator Avatar von xxluke
    Registriert
    10.06.2010
    Ort
    Kiel
    Alter
    25
    Beiträge
    1.733
    ManiaPlanet
    xxluke
    Login: xxluke
    Nickname: xxluke
    Zone: World » Europe » Germany » Schleswig-Holstein » Kiel
    Multiplayer: 32.812 (25.126 LP)
    Soloplayer: 36.653 (849 SP)
    ManiaLinks: disney
    TrackMania
    xxluke
    Login: xxluke United
    Nickname: xxluke
    Zone: World » Germany » Schleswig-Holstein » Kiel
    Multiplayer: 64.013 (63.017 LP)
    Soloplayer: 22.709 (20.905 SP)
    ManiaLinks: xxluke, MMLPlugins, vorname, CMSs
    Links: TM-Ladder
    OT: Wir haben übrigens den BB-Code [script]. Mit dem kann man ManiaScript-Code syntaxhighlighten. Aus mysteriösen Gründen steht er allerdings weder als Button im Editor noch in der BB-Code-Hilfe.

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •