NAME

Quiq::JavaScript - Generierung von JavaScript-Code

BASE CLASS

Quiq::Object

METHODS

Klassenmethoden

Konstruktor

new() - Instantiiere Objekt

Synopsis

$p = $class->new;

Returns

JavaScript-Objekt

Description

Instantiiere ein Objekt der Klasse und liefere eine Referenz auf dieses Objekt zurück. Da die Klasse ausschließlich Klassenmethoden enthält, hat das Objekt ausschließlich die Funktion, eine abkürzende Aufrufschreibweise zu ermöglichen.

code() - Erstelle JavaScript-Code in Perl

Synopsis

$js = $this->code(@keyVal,$text);

Arguments

@keyVal

Liste von Platzhalter/Wert-Paaren. Die Platzhalter beginnen und enden mit zwei Unterstrichen.

$text

JavaScript-Code mit Platzhaltern (String)

Returns

JavaScript-Code (String)

Description

Setze die Platzhalter/Wert-Paare @keyVal in den JavaScript-Code $text ein und liefere den resultierenden JavaScript-Code zurück. Als Zeilenfortsetzungszeichen kann eine Tilde (~) verwendet werden (Achtung: dann darf $text nicht mit q~...~ gequotet werden).

Die Methode ist vor allem nützlich, wenn der JavaScript-Code jQuery-Aufrufe mit Dollar-Zeichen ($) enthält oder die Zeilen überlang sind.

Example

$js = $this->code(q°
    var __NAME__ = (function() {
        return {
            x: __VALUE__,
        };
    })();°,
    __NAME__ => 'dgr',
    __VALUE__ => 4711,
);

liefert

var dgr = (function() {
    return {
        x: 4711,
    };
})();

line() - Mache JavaScript-Code einzeilig

Synopsis

$line = $this->line($code);

Arguments

$code

Mehrzeiliger JavaScript-Code (String)

Returns

JavaScript-Code einzeilig (String)

Description

Wandele mehrzeiligen JavaScript-Code in einzeiligen JavaScript-Code und liefere diesen zurück. Die Methode ist nützlich, wenn formatierter, mehrzeiliger JavaScript-Code in ein HTML Tag-Attribut (JavaScript-Handler wie onclick="..." oder onchange="...") eingesetzt werden soll.

Example

Aus

var s = '';
for (var i = 0; i < 10; i++)
    s += 'x';

wird

var s = ''; for (var i = 0; i < 10; i++) s += 'x';

Details

Die Regeln der Umwandlung:

  • ist $code undef, wird undef geliefert

  • Kommentare (\s*//.*) werden entfernt

  • Leerzeilen und Zeilen nur aus Whitespace werden entfernt

  • Whitespace (einschl. Zeilenumbruch) am Anfang und am Ende jeder Zeile wird entfernt

  • alle Zeilen werden mit einem Leerzeichen als Trenner konkateniert

Damit dies sicher funktioniert, muss jede JavaScript-Anweisung mit einem Semikolon am Zeilenende beendet werden und darf nicht, wie JavaScipt es auch erlaubt, weggelassen werden.

script() - Generiere einen oder mehrere <script>-Tags

Synopsis

$html = Quiq::JavaScript->script($h,@specs);

Arguments

@specs

Liste von Script-Spezifikationen.

Description

Übersetze die Code-Spezifikationen @specs in einen oder mehrere Script-Tags.

Mögliche Code-Spezifikationen:

"inline:$file":

Datei $file wird geladen und ihr Inhalt wird in einen Script-Tag eingefasst.

$string (Zeichenkette mit runden Klammern oder Leerzeichen)

Zeichenkette $string wird in einen Script-Tag eingefasst.

$url (Zeichenkette ohne runde Klammern oder Leerzeichen):

Zeichenkette wird als URL interpretiert und in einen Script-Tag mit src-Attribut übersetzt.

\@specs (Arrayreferenz):

Wird zu @specs expandiert.

Examples

Code zum Laden einer JavaScript-Datei über URL:

$html = Quiq::JavaScript->script($h,'https://host.dom/scr.js');
=>
<script src="https://host.dom/scr.js" type="text/javascript"></script>

Code aus Datei einfügen:

$html = Quiq::JavaScript->script($h,'inline:js/script.css');
=>
<script type="text/javascript">
  ...
</script>

Code direkt einfügen:

$html = Quiq::JavaScript->script($h,q|
    ...
|);
=>
<script type="text/javascript">
  ...
</script>

Mehrere Code-Spezifikationen:

$html = Quiq::JavaScript->script(
    '...'
    '...'
);

Mehrere Code-Spezifikationen via Arrayreferenz:

$html = Quiq::JavaScript->script(
    ['...','...']
);

Dies ist nützlich, wenn die Spezifikation von einem Parameter einer umgebenden Methode kommt.

VERSION

1.206

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2022 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.