Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeilenumbruch im basic.symbol

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Zeilenumbruch im basic.symbol

    Moin zusammen,
    bin gerade dabei, die ganzen deprecated Objekte mal durch die neuen zu tauschen. Hierbei ist mir eins noch nicht gelungen. Ich möchte einen Zeilenumbruch mit machen. Aber eben nur, wenn das Item auch 1 ist.

    Früher hatte ich
    Code:
    {{ basic.text(gad~'value_mode_clean', gad~'.AKTOR.VENTIL_SPUELEN', '<br>Ventilspülung aktiv', '') }}
    Heute habe ich
    Code:
    {{ basic.symbol('', gad~'.AKTOR.VENTIL_SPUELEN', '<br>Ventilspülung aktiv', '', 1) }}
    Aber es wird mir dann im HTML einfach "<br>" mit als Text angezeigt.

    Habt ihr eine Idee oder Lösung für mich?

    Gruß
    loeserman

    #2
    Ich hatte das Thema schon mal im Forum hier mit smai diskutiert, da es aber eher die Ausnahme ist gibt es keinen Parameter. Ich habe mir damit geholfen ein modifiziertes Widget auf Basis des basic.smybol zu bauen und habe den linefeed dann in das Widget miteingebaut.
    Code:
    /** ***************************** */
    /**
    * A symbol based on basic.symbols V2.7 (05/2016), but with linefeed required for alarm messages.
    *
    * @param unique id for this widget
    * @param one or more item(s). More items in array form: [ item1 , item2 ]
    * @param the text, printed when item has value val (optional)
    * @param the pic, shown when item has value val
    * @param value (default 1)
    * @param the mode, 'or', 'and' (default 'or')
    */
    {% macro alarmsymbol(id, items, txt, pic, val, mode, color) %}
    <div>
        <span id="{{ uid(page, id) }}" data-widget="basic.symbol" data-item="{{ implode(items) }}" data-val="{{ val|default('1') }}"
            data-mode="{{ mode|default('or') }}" class="symbol hide">
            <img class="icon" src="{{ pic|default(icon1~'control_on_off.png') }}" />{{ txt }}</span>
    </div>
    {% endmacro %}

    Kommentar


      #3
      Ja das ist eine Idee. Danke schon mal für den Hinweis.Aber wo ist denn in Deinem Code nun der linefeed im Vergleich zu der aktuellen Implementierung der 2.9 dev?

      Code:
      {% macro symbol(id, items, text, icon, value, formula, color, href, rel) %}
          {% import _self as basic %}
          {% set value = (value|default([1]) is iterable ? value|default([1]) : [value]) %}
        {% set value = text|length > value|length or icon|length > value|length or color|length > value|length ? value|merge(['']) : value %} /** add an empty value if more icons/texts/colors as values are passed (used for threshold i.a.) */
          {% set color = color|default('') %}
      
          <{% if href is empty %}span{% else %}a href="{{ href }}"{% if rel is not empty %} data-rel="popup"{% endif %}{% endif %}{% if not id is empty %} id="{{ uid(page, id) }}"{% endif %} data-widget="basic.symbol"
              {% if not items is empty %}data-item="{{ implode(items) }}" style="display: none;" {% endif %}
              data-val="{{ implode(value) }}"
              data-mode="{{ formula|default('or') }}" class="symbol">
              {%- for val in value -%}
                  {%- set pic = icon is iterable ? icon[loop.index0] : icon -%}
                  {%- if text is empty %}{% set pic = pic|deficon('control_on_off.svg') %}{% endif -%}
                  {%- set col = (color is iterable ? color[loop.index0] : color)|default('') -%}
                  {%- set txt = (text is iterable ? text[loop.index0] : text)|default('') -%}
                  <span data-val="{{ val }}"
                      style="{% if not loop.first %}display:none;{% endif %}{% if pic is empty and not txt is empty and not col is empty and col != 'icon1' %}color: {{ col }};{% endif %}"
                      {% if pic is empty and not txt is empty and col == 'icon1' %} class="icon1"{% endif %}>
                      {%- if pic %}{{ basic.icon(pic, col) }}{% endif -%}
                      {{- txt -}}
                  </span>
            {%- endfor -%}
          </{% if href is empty %}span{% else %}a{% endif %}>
          
      {% endmacro %}

      Kommentar


        #4
        Sandman60 ich kann mich schwach erinnern. Allerdings finde ich nur meine Aussage, dass ich nicht ein extra Widget dafür einführen möchte.

        Am liebsten wäre mir, wenn man beim Aufruf explizit angeben muss, dass es html sein soll. Leider habe ich aber keine Möglichkeit gefunden, Twig dazu zu bringen. Etwa   {{ basic.symbol('', gad~'.AKTOR.VENTIL_SPUELEN', '<br>Ventilspülung aktiv'|raw, '', 1) }}  hilft nicht.

        Da dies ein Bedürfnis scheint, sehe ich zwei Möglichkeiten:

        1. Ein neuer Parameter "format", welcher auf "html" gesetzt werden kann (ähnlich dem bei basic.print).

        2. Ich verwerfe hier den Grundsatz, die Hürde möglichst tief zu halten und füge das   |raw  im Widget ein. Damit wird der String als HTML behandelt.
        Will man dann tatsächlich sowas wie   '<a'  schreiben, kann man dies beim Aufruf escapen   '<a'|escape 

        Ich tendiere eher zur zweiten Lösung, weil jeder Parameter die Widgets unübersichtlicher macht.
        Was meint ihr?

        Kommentar


          #5
          Ich wäre wohl auch eher für die Version 2.
          Obwohl ich die Version 1 auch nicht so schlecht finden würde.

          Version 1: kann man glaube ich gut Dokumentieren und beim "normalen Benutzen entstehen keine Fragen warum das jetzt so komisch angezeigt wird. Wenn es das schon in basic.print gibt, würde das ja schon bekannt sein.

          Version 2: Einfaches benutzen... Kommt aber bestimmt zu Fragen warum das nicht so dargestellt wird wie erwartet.

          Also knapp Version2 ;-)

          Kommentar


            #6
            Ich wäre da eher für die Variante 1 aus dem einfachen Grund, dass es das bei basic.print schon gibt und es die Nutzer aus meiner Sicht klarer ist. Ich denke, dass nicht jeder so firm ist in twig und diese speziellen Befehle nicht kennt. Kann mich aber natürlich mit beiden Lösungen anfreunden und freue mich, wenn hier eine Möglichkeit geschaffen wird. Echt klasse.

            Kommentar

            Lädt...
            X