OneUI v xPages

OneUI je standardní html/css layout, který je součástí serveru Lotus Notes/Domino od verze 8.5.1 a je docela povedený. Mít pro své aplikace standardní a snadno implementovalný layout je velmi výhodné. Člověk se může věnovat podstatným věcem a nemusí řešit design, rozvržení, nebo typografii. To vše má již hotové, už mu jen zbývá do této škatulky umístit svou aplikaci.

Já používám standardní design i pro své aplikace v klientovi Lotus Notes. Je to součástí mého frameworku už řadu let a když vytvářím novou aplikaci, použiji k tomu svou vlastní šablonu. OneUI to samé řeší pro aplikace v xPages.

První věc je orientace v použitých verzích. Domino 8.5.1 přišlo se třemi základními motivy – notes, webstandard a oneui. Oneuiv2 bylo přiloženo jako experimentální. Tyto verze najdete na serveru v podadresáři domino/java/xsp/theme. Aby to nebylo tak jednoduché, s Dominem 8.5.2 přišla plně podporovaná verze oneuiv2, která se však nachází v podadresáři domino/html/oneuiv2. IBM si nikdy nedělala příliš hlavu s koncepcí, což je vidět na tomto modelu.

Pokud si otevřete adresář s oneuiv2, uvidíte, že tato verze přišla, kromě standardu, s několika dalšími motivy. Konkrétně gold, green, metal, red. V Domino 8.5.3 je již oneuiv2.1, které má další motivy.

Implementace OneUI v 1

Implementace OneUI layoutu je poměrně jednoduchá. Základním skinem je webstandard. Pokud chcete aplikovat oneui, musíte jej rozšířit. To uděláte ve své aplikaci tak, že si v designeru v otevřené aplikaci otevřete kategorii Resources a pak podkategorii Themes. Vytvoříte nový motiv, který si můžete pojmenovat jak chcete – třeba Pepa. V tomto novém motivu pak musíte jen určit, který původní motiv konkrétně rozšiřujete. Implementovat OneUI verze 1 je veskrze primitivní. Najdete ve vytvořeném motivu následující řádek…

XHTML
1
<theme extends="webstandard">

… a hodnotu webstandard přepíšete na oneui. Uložíte motiv, pak otevřete Application Properties, přepnete na záložku xPages a úplně nahoře pak máte políčko Application theme. Tam vyberete ten svůj motiv, uložíte, spustíte Build a pak už se můžete kochat novou grafikou. Komponenty jsou hezky oskinované, na pozadí je modrý gradient… prostě paráda. Druhá možnost je rychlejší, ale nevím, zda funguje stoprocentně spolehlivě. Spočívá v tom, že přeskočíte ten krok s vytvářením a úpravou vlastního motivu, rovnou otevřete Application Properties a na záložce xPages zapíšete do toho pole Application theme natvrdo hodnotu oneui.

Implementace OneUI v 2

Jak jsem řekl, OneUIv2 přišlo s několika motivy. Ideální tedy je, vytvořit si vlastní motivy se stejnými názvy. Řekněme, že chci implementovat zelený motiv a přidat k němu i vlastní css s názvem mujstyl.css, který jsem si vytvořil předtím. V Resources/Themes si vytvořím nový motiv, nazvu ho green a postarám se, aby tam bylo toto:

OneUIv2
XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<theme extends="oneuiv2">
    <resource>
        <content-type>text/css</content-type>
        <href>/.ibmxspres/domino/oneuiv2/greenTheme/greenTheme.css</href>
    </resource>
    <resource>
        <content-type>text/css</content-type>
        <href>/.ibmxspres/domino/oneuiv2/greenTheme/dojoTheme.css</href>
    </resource>
    <resource>
        <content-type>text/css</content-type>
        <href>mujstyl.css</href>
    </resource>
</theme>

Uložit, přejít do Application Properties/xPages a v poli Application theme vybrat položku green. Stejným způsobem pak můžu aplikovat i ostatní motivy, třeba gold – jen všude tam, kde je greenTheme zapsat goldTheme.

Jistě jste si všimli, že jeden z uvedených zdrojů je dojoTheme.css. To má své opodstatnění a oceníte to především když použijete javascriptovou extlib z OpenNTF, která také pro skinování svých komponent podporuje OneUI.

Jak na layout?

Takže máme naimplementovaný motiv, ale co dál? Potřebujeme nějaké rozvržení aplikace. OneUI na to pamatuje a přináší vývojářům standardní layout ve verzích jedno- dvou- a třísloupcového rozvržení.

Prohlédnout si funkční OneUI můžete na libovolné wiki od IBM. Tady je třeba standardní OneUI ve verzi 1. Tady zase poslední verze OneUIv2.1 s moderním, černým motivem. Rozvržení je v podstatě vždy stejné. Nahoře nějaké záhlaví s logem a názvem aplikace vlevo a jménem uživatele vpravo. Pod tím jsou nějaké záložky ve formě odkazů na různé sekce webu, pod tím je content, tedy jedno- až třísloupcový layout, kde je vlevo navigace, vpravo můžou být nějaké odkazy či bláboly a uprostřed je obsah dané stránky. Pod tím vším je zápatí a nakonec klasický copyright. Viz náhledový obrázek, který jsem si zapůjčil z webu oficiální dokumentace.

OneUI Framework

OneUI Framework

Každá z těch sekcí je tvořena bloky. Ty se dají v xPages vyjádřit buď standardní komponentou xp:panel, anebo rovnou obyčejným HTML elementem div. Každý ten blok je definován css třídou. Až na hlavní blok, obsahuje každý z nich dva zanořené wrappery, vyjádřené css třídami lotusRightCorner a lotusInner.

Tak se pojďme na jednotlivé bloky podívat…

lotusBanner

Nejsvrchnější blok s logem a názvem aplikace vlevo, jménem uživatele vpravo, popřípadě s odkazy na další aplikace uprostřed. Logo s názvem aplikace tvoří obrázek o velikosti 126x18px a je to definováno vlastním zanořeným blokem s css třídou lotusLogo. V základu je jako podkladový obrázek použito standardní logo IBM a text Product Name. Je tedy jasné, že je potřeba zaměnit ho za své logo. Své logo uložte buď do Image Resources nebo Files ve své aplikaci a pak do ve svého CSS souboru zapište následující definici.

Logo aplikace
CSS
1
2
3
.lotusui .lotusLogo, .lotusLoginLogo {
    background-image: url(moje-logo-126x18.png);
}

Sekce se jménem uživatele má css třídu s názvem lotusUser a je uzavřená v sekci s názvem lotusUtility, která je umístěna vpravo. Sekce s odkazy má název lotusLinks a je umístěna veprostřed. Libovolnou z těchto sekcí lze vynechat.

lotusBanner
XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<div class="lotusBanner" role="banner">
    <div class="lotusRightCorner">
        <div class="lotusInner">
            <div class="lotusLogo">
                <span class="lotusAltText">Moje aplikace</span>
            </div>
            <ul class="lotusInlinelist lotusUtility">
                <li class="lotusFirst">
                    <span class="lotusUser">
                        <xp:text escape="true" id="userName">
                            <xp:this.value>
                                <![CDATA[#{javascript:@Name('[CN]',@UserName(0))}]]>
                            </xp:this.value>
                        </xp:text>
                    </span>
                </li>
                <li>
                    <a href="javascript:;">Nápověda</a>
                </li>
                <li>
                    <a href="./home.xsp?logout">Odhlásit</a>
                </li>
            </ul>
                <ul class="lotusInlinelist lotusLinks" role="navigation">
                <li class="lotusFirst lotusSelected">
                    <a href="javascript:;">
                        <strong>Domů</strong>
                    </a>
                </li>
                <li>
                    <a href="javascript:;">Applikace1</a>
                </li>
                <li>
                    <a href="javascript:;">Applikace2</a>
                </li>
                <li>
                    <a href="javascript:;">Applikace3</a>
                </li>
            </ul>
        </div>
    </div>
</div><!--end lotusBanner-->

lotusTitleBar

Toto je druhý blok pod bannerem, který zpravidla obsahuje navigační záložky vlevo (lotusTabs) a vyhledávání (lotusSearch) vpravo.

lotusTitleBar
XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<div class="lotusTitleBar">
    <div class="lotusRightCorner">
        <div class="lotusInner">
            <ul class="lotusTabs" role="navigation">
                <!--put class="lotusSelected" on the li element of the selected tab-->
                <li>
                    <div>
                        <a href="javascript:;">Tab1</a>
                    </div>
                </li>
                <li>
                    <div>
                        <a href="javascript:;">Tab2</a>
                    </div>
                </li>
                <li class="lotusSelected">
                    <div>
                        <a href="javascript:;">
                            <strong>Tab3</strong>
                        </a>
                    </div>
                </li>
            </ul>
            <xp:panel id="lotusSearch" styleClass="lotusSearch"
                rendered="#{javascript:database.isFTIndexed()}">
                <xp:inputText id="search" />
                <xp:link escape="true" text="" id="searchLink">
                    <xp:image id="searchButton" url="/search.png" />
                </xp:link>
            </xp:panel>
        </div>
    </div>
</div><!--end titleBar-->

lotusPlaceBar

Tento blok se tak často nevyužívá. Je umístěn pod titleBarem a zpravidla obsahuje nějaké akce, odkaz na konfiguraci apod.

lotusPlaceBar
XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div class="lotusPlaceBar">
    <div class="lotusRightCorner">
        <div class="lotusInner">
            <h2>Titulek</h2>
            <div class="lotusBtnContainer">
                <span class="lotusBtn">
                    <a href="javascript:;">Upravit</a>
                </span>
                <span class="lotusBtn">
                    <a href="javascript:;">
                        <img src="btnDropDown2.png" alt="" aria-label="show menu" />
                    </a>
                </span>
            </div><!--end bntContainer-->
        </div>
    </div>
</div><!--end placebar-->

lotusMain

Toto je hlavní obsah vaší aplikace a je možné použít jedno-, dvou-, či třísloupcový layout. Každá sekce, resp. sloupec má zase svou css třídu. Levý sloupec je lotusColLeft, pravý sloupec lotusColRight a obsahový, prostřední sloupec je lotusContent. Layout je fluidní, takže se roztáhne podle potřeby. lotusMain blok neobsahuje dva zanořené wrappery, jako ostatní bloky.

V levém sloupci se zpravidla umísťuje nějaké menu, tagcloud apod. Menu blok se jmenuje lotusMenu a obsahuje dva zanořené wrappery (lotusBottomCorner a lotusInner).

lotusMain
XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<div id="lotusMain" class="lotusMain">
    <div id="lotusColLeft" class="lotusColLeft">
        <h3>Menu</h3>
        <div class="lotusMenu" role="menu">
            <div class="lotusBottomCorner">
                <div class="lotusInner">
                    <ul>
                        <li role="menuitem">
                            <xp:link escape="true" text="Menu Item 1" id="link1"/>
                        </li>
                        <li role="menuitem">
                            <xp:link escape="true" text="Menu Item 2" id="link2"/>
                        </li>
                        <li role="menuitem">
                            <xp:link escape="true" text="Menu Item 3" id="link3"/>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
    </div>
    <div id="lotusColRight" class="lotusColRight">
        Pravý sloupec
    </div>
    <div id="lotusContent" class="lotusContent">
        <xp:callback facetName="facet_1" id="callback1"/>
    </div>
</div>

lotusFooter

Kasické zápatí. Může obsahovat odkaz na nápovědu, o aplikaci, legal notice apod.

lotusFooter
XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<div class="lotusFooter">
    <table cellspacing="0" role="presentation">
        <tr>
            <th class="lotusLast">Moje aplikace</th>
        </tr>
        <tr>
            <td>
                <ul>
                    <li>
                        <a href="./home.xsp">Domů</a>
                    </li>
                    <li>
                        <a href="./home.xsp">O aplikaci</a>
                    </li>
                </ul>
            </td>
        </tr>
    </table>
</div><!--end footer-->

lotusLegal

Toto je poslední blok úplně dole, ještě pod zápatím a zpravidla obsahuje copyright.

lotusLegal
XHTML
1
2
3
4
5
6
7
8
9
10
<div class="lotusLegal">
    <div class="lotusRightCorner">
        <div class="lotusInner">
            <div style="float:right">
                Něco napravo
                </div>
            © Copyright Moje firma 2011, 2012. All Rights Reserved.
        </div>
    </div>
</div>

Souhrn

OneUI je dobrý layout, který IBM používá ve všech svých wikinách a na spoustě dalších webů. Dá se snadno implementovat a v každé setinkové verzi Domino serveru zatím vždy přibyly nějaké nové motivy. Prozatím to navíc IBM udržuje zpětně kompatibilní. Uvidíme, zda jí to vydrží.

Pokud nemáte vlastní layout a nechcete se zbytečně trápit s grafikou, rozvržením a typografií, je OneUI pro vaše aplikace v xPages jednoznačnou volbou.

Zdroje

IBM Lotus User Interface Developer Documentation
Create the website layout
Work with themes
OpenNTF.org – OneUI Easy Starter Layout

Komentování je uzavřeno.