NAME

Quiq::JavaScript - Generierung von JavaScript-Code

BASE CLASS

Quiq::Object

METHODS

Klassenmethoden

code() - Erstelle JavaScript-Code in Perl

Synopsis

  $js = $class->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 = Quiq::JavaScript->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 = $class->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.188

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2020 Frank Seitz

LICENSE

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