10. díl - Wicket - JavaScript a CSS, pokračování

Java Enterprise Edition Wicket Wicket - JavaScript a CSS, pokračování

Z předchozí lekce nám zbývá vytvořit textový editor. Pro jeho tvorbu použijeme JavaScript.

editor.js

function TextEditor(textEditId, textViewId) {
    // Edit area (text area)
    var textEditElement = document.getElementById(textEditId);
    // Preview area (div)
    var textViewElement = document.getElementById(textViewId);

    console.log(textEditElement);
    console.log(textViewElement);

    var START_PREFIX = "<";
    var START_SUFFIX = ">";
    var END_PREFIX = "</";
    var END_SUFFIX = ">";

    // Inserts tag(s) into the edit area
    this.modifySelection = function (tag) {
        var startTag = START_PREFIX + tag.toUpperCase() + START_SUFFIX;
        var endTag = END_PREFIX + tag.toUpperCase() + END_SUFFIX;

        // Get the whole text inthe text area.
        var text = textEditElement.value;

        var begin = text.substring(0, textEditElement.selectionStart);
        var selection = text.substring(textEditElement.selectionStart, textEditElement.selectionEnd);
        console.log(selection);
        var end = text.substring(textEditElement.selectionEnd);
        textEditElement.value = begin + startTag + selection + endTag + end;
    };

    // Replaces tag in edit area for relevant html tags and shows the text in view area
    this.viewText = function () {
        console.log("viewText function");
        var text = textEditElement.value;

        textViewElement.innerHTML = text;
        console.log(text);
    };

    // Clears the edit area
    this.clearEditArea = function () {
        textEditElement.value = "";
    };
}

JavaScript umožňuje programovat objektově. Výše uvedený kód je vlastně jedna jediná funkce, která představuje konstruktor objektu TextEditor. Tato funkce (název je dle zvyklostí napsán velkým počátečním písmenem, protože je to konstruktor) přijímá dva parametry. V Javě bychom řekli, že je to parametrický konstruktor.

Deklarace a přiřazení hodnoty do proměnné (v rámci objektu je to privátní proměnná).

var textEditElement = document.getElementById(textEditId);

Nalezení elementu na stránce podle id.

document.getElementById(textEditId);

Výpis do konzole (z testovacích důvodů).

console.log("text");

Vytvoření soukromé (private) konstanty (dle zvyku se píše velkými písmeny).

var START_PREFIX = "<";

Vytvoření veřejné metody (v Javě by to byla public metoda) s jedním parametrem.

this.modifySelection = function (tag) { … }

Element <textarea> nabízí několik užitečných vlastností. Zde je jednoduchá html stránka s JavaScriptovou funkcí, která to ukazuje. Kód si okopírujte, vložte do souboru s příponou .html, otevřete v prohlížeči a stiskněte tlačítko F12. Tím se vám zpřístupní nástroje pro vývoj. Klikněte na záložku "Console". Zde se vám budou zobrazovat výpisy po stisknutí tlačítka "Show" v html stránce.

<html>
    <head>
        <title>Text area</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <textarea id="ta" cols="40" rows="10"></textarea><br/>
        <button type="button" onclick="show()">Show</button>

        <script>
            function show() {
                // získání elementu s id 'ta'
                var ta = document.getElementById("ta");

                // získání hodnoty z text area
                console.log("Hodnota: " + ta.value);

                // získání indexu počátku výběru.
                console.log("Začátek výběru: " + ta.selectionStart);

                // získání indexu konce výběru.
                console.log("Konec výběru: " + ta.selectionEnd);
            }

        </script>
    </body>
</html>

Tuto funkcionalitu využívá naše metoda modifySelection(). Zjistí si začátek a konec výběru v text area a na jejich místo dosadí počáteční a koncový html tag. Metoda viewText() pouze vezme text z elementu text area a vloží jej do elementu div s id textView. Díky tomu se text zobrazí.

Pro náš textový editor vytvoříme i styly. Ty umístíme do vlastního souboru a do stejného balíčku jako ostatní soubory vztahující se k editační stránce.

editor.css

input {
        font-family: Sans-Serif;
        font-size: smaller;
        border: 1px solid black;
        padding: 3px 5px;
        background-color: white;
        border-radius: 5px;
}

input:hover {
        border-color: #999;
        color: #999;
}

Poslední věcí, která nám zbývá, je načíst (vložit kód) editor.js (soubor s JavaScriptem představujícím náš textový editor), editor.css (soubor se styly pro textový editor) do editační stránky a vytvořit proměnnou, která bude představovat náš textový editor.

EditPage.java

Vytvoření ResourceReference na naše dva soubory.

private static final JavaScriptResourceReference EDITOR_JS = new JavaScriptResourceReference(EditPage.class, "editor.js");
private static final CssResourceReference EDITOR_CSS = new CssResourceReference(EditPage.class, "editor.css");

Vlastní přidání do <head> sekce.

@Override
public void renderHead(IHeaderResponse response) {
        response.render(JavaScriptReferenceHeaderItem.forReference(EDITOR_JS));
        response.render(CssReferenceHeaderItem.forReference(EDITOR_CSS));

        // Create global JavaScript variable textEditor that represents TextEditor object.
        response.render(OnDomReadyHeaderItem.forScript("window.textEditor = new TextEditor(\"textEdit\", \"textView\")"));
}

Pokud si zobrazíte zdrojový stránky, uvidíte, že do sekce <head> byly přidány naše dva soubory.

<script type="text/javascript" src="../resource/cz.mujweb.editpage.EditPage/editor-ver-1431603444443.js"></script>
<link rel="stylesheet" type="text/css" href="../resource/cz.mujweb.editpage.EditPage/editor-ver-1431603444443.css" />

Po načtení celé stránky (onDomReady) vytvoří novou globální proměnnou s názvem textEditor. Na tuto proměnnou (objekt) se pak odkazujeme v našem .html (např. onclick="textE­ditor.viewTex­t();")

response.render(OnDomReadyHeaderItem.forScript("window.textEditor = new TextEditor(\"textEdit\", \"textView\")"));

Tak.. Máme vytvořený jednoduchý textový editor.. Možná bychom ale chtěli omezit, kdo může nebo nemůže přidávat příspěvky. A přesně to bude tématem příštího článku.


 

  Aktivity (1)

Článek pro vás napsal vita
Avatar
vita

Jak se ti líbí článek?
Celkem (2 hlasů) :
55555


 


Miniatura
Předchozí článek
Wicket - JavaScript a CSS
Miniatura
Všechny články v sekci
Apache Wicket
Miniatura
Následující článek
Wicket - Přihlašování

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!