środa, 16 lutego 2011

Wielowierszowe pole tekstowe

Zwykłe lotusowe pole tekstowe pod webem jest prezentowane jako pole jednowierszowe. Nie ma prostego sposobu, żeby było prezentowane jako wielowierszowe. Te są zarezerwowane dla pól richtextowych. Można jednak użyć pewnego patentu:
  1. Tworzymy pole tekstowe o nazwie Tresc i nadajemy mu id (np: tresc).
  2. Zamykamy to pole w elemencie div, który ukrywamy stosownym stylem (Zastosowanie formuł ukrywania zawodzi w tym przypadku - rozwiązanie nie działa):
    <div id="trescDiv" style="display: none;">[POLE TEKSTOWE Z PUNKTU 1]</div>
  3. Tworzymy pole tekstowe obliczane do wyświetlenia, o nazwie np. TextWeb i jako jego wartość wpisujemy:
    "[<TEXTAREA NAME='Tresc' ROWS=4 COLS=54 WRAP=VIRTUAL>" + Tresc + "</TEXTAREA>]"
  4. Po załadowaniu dokumentu, kawałkiem skryptu usuwamy pole z punktu 1.
    var n = document.getElementById("tresc");
    n.parentNode.removeChild(n);
W trybie edycji będzie w porządku, ale w trybie czytania nie bardzo. W związku z tym postępujemy następująco:
  1. Wszystko powyższe ukrywamy w trybie czytania
  2. Tworzymy computed text z formułą konwertującą nowe linie na "<br>":
    @ReplaceSubstring(Tresc; @NewLine; "<br>")
  3. Żeby powyższe zadziałało, a do tego w kliencie wyświetlało się poprawnie, musimy skonwertować znaki nowego wiersza przesyłane z przeglądarki na @NewLine. Przy zapisie dokumentu (w WebQuerySave) wykonujemy następujący skrypt:
    Doc.Tresc = Evaluate(|@ReplaceSubstring(Tresc; @Char(13); @NewLine)|, Doc)