# VRH.Log4Pro.WebTools - Web-es hasznosságok és eszközök

## Fontos tudnivalók
### Bootstrap.v3.Datetimepicker.CSS
A modul ezt a datetimepicker csomagot használja. Viszont a nuget.org oldalon csak a bootstrap 3-as főverzióhoz alkalmas változat található, 
amely ráadásul a nem támogatott glyphicon betűkészletet használja. Módosítva lett az eredeti forrás:
- már a "Font Awesome"-ot használja, amit  a VRH is
- a bootstrap 4-es főverzióhoz alkalmas lett
- a magyarosítást a VrhDateTimePicker prototípus szállítja
Az eredeti forrás verziószáma 4.17.47. Ennek fáljait átneveztem (kapott egy "vrh." prefixet), hogy ha valaki netán még is letölti az eredetit,
akkor azzal ne legyen kavarodás.

## VrhPageHelp html helper kiterjesztés
A VrhPageHelp kiterjesztésnek az alábbi xml struktúrát kell átadni:
```xml 
    <Help Title="Help címe" ContentFormat="PreserveRow">
        Ez a help szövege. 
    </Help>
```
Attribútum|Leírás
:----|:------
Title|Értéke fog látszódni egy "?" ikon után. Ha nincs kitöltve, akkor csak a "?" ikon fog látszódni.
ContentFormat|A szöveg megjelenítésére vonatkozik. Lehetséges értékei a táblázat után.

A ContentFormat lehetséges értékei:
- **Original**: A szöveget minden beavatkozás nélkül illeszti be.
- **PreserveRow**: A szövegben megtartja a sorokat. A sorok végét \n vagy \r\n karakterek jelentik. 
- **PreserveRowAndIndent**: A szövegben nem csak a sorokat, hanem a behúzásokat is megtartja.

Mindhárom esetre igaz, hogy a Help elemek közti teljese tartalmat beolvassa, akkor is ha ott további elemek helyezkednek el. 
Ez lehetőséget ad arra, hogy akár HTML elemeket is beszúrjunk a szövegbe.
 
A cshtml-be a következő képpen illesszük be:
```javascript 
    @Html.VrhPageHelp("helpid", HelpXElement)
vagy
    @Html.VrhPageHelp(HelpXElement)
```
A HelpXElement a leírás elején említett xml szerkezet XElement objektuma.
A "helpid" az egész elem számára egy azonosító. Ha nincs megadva, akkor generálódik neki egy egyedi név.

A beillesztett eredmény a következő lesz:
```html 
<div id="helpid" name="helpid" class="vrhHelpPanel">
    <span class="vrhHelpTitle" data-toggle="collapse" data-target="#helpid-helptext" aria-expanded="false" aria-controls="helpid-helptext">
        <i class="fas fa-question-circle vrhHelpIcon mr-1"></i>Help címe
    </span>
    <div class="collapse vrhHelpContent" id="helpid-helptext">
        Ez a help szövege. 
    </div>
</div>
```
Az egészet egybefogó div rész a "vrhHelpPanel", a címet tartalmazó rész a "vrhHelpTitle", a szöveg rész a "vrhHelpContent" oszály nevet kapja meg, 
melyra hivatkozva a vrh.commontools.css-ben vannak alapértelmezett stílusok, amelyek természetesen feldefiniálhatóak közvetlenül a cshtml-ben is.

## VrhCommonActions html helper kiterjesztés
A kiterjesztésnek az alábbi xml struktúrát kell átadni:
```xml 
<CommonActions Title="Hasznos linkek" Collapsible="true">
    <Action Label="Teszt CurrentPage" Class="btn btn-info" Style="">
        <area></area><controller>Home</controller><action>About</action>
        <inputparameter name="par1">par1Value</inputparameter>
        <inputparameter name="par2">par2Value</inputparameter>
    </Action>
    <Action Label="Teszt NewPage" Style="" ResponseTarget="NewPage">
        <area></area><controller>Home</controller><action>About</action>
        <inputparameter name="par1">par1Value</inputparameter>
        <inputparameter name="par2">par2Value</inputparameter>
    </Action>
    <Action Label="Teszt Dialog" Class="btn btn-info" Style="" ResponseTarget="Dialog" DialogStyle="@STYLE_DIALOG_W80@">
        <area></area><controller>Home</controller><action>About</action>
        <inputparameter name="par1">par1Value</inputparameter>
        <inputparameter name="par2">par2Value</inputparameter>
    </Action>
    <Action Label="Teszt DialogIFrame" Class="btn btn-info" Style="" ResponseTarget="DialogIFrame" DialogStyle="@STYLE_DIALOG_W80@">
        <area></area><controller>Home</controller><action>About</action>
        <inputparameter name="par1">par1Value</inputparameter>
        <inputparameter name="par2">par2Value</inputparameter>
    </Action>
    <Action Label="Teszt WaitFor" Class="btn btn-info" Style="" ResponseTarget="WaitFor" DialogStyle="@STYLE_DIALOG_W80@">
        <area></area><controller>Home</controller><action>TestJSON</action>
        <inputparameter name="par1">par1Value</inputparameter>
        <inputparameter name="par2">par2Value</inputparameter>
    </Action>
</CommonActions>
```
Elem|Leírás
:----|:------
CommonActions|Ez az elem tartalmazza az összes akciót, amelyet majd meg kell jeleníteni.
Action|Egy akció leírását tartalmazó elem.
..összes többi..|Egy szabványos URL elem tartalma. Leírása a Vrh.Web.Common.Lib projektben.

Attribútum|Leírás
:----|:------
Title|Ha összecsukhatóan jelennek meg az akciók, akkor az akciók rész címe, előtte egy boríték ikonnal.
Collapsible|Egy logikai érték, mely engedélyezi vagy tiltja az összecsukhatóságot. Alapértelmezett értéke: igaz.
Label|Az akciót indító link szövege.
Class|Az akciót indító link "class" attribútumának értéke. Alapértelmezett értéke: "btn btn-success mr-1 mt-1"
Style|Az akciót indító link "style" attribútumának értéke.
ResponseTarget|Az akció eredményének a megjelenítési módja.
DialogStyle|Amennyiben az akció eredményét dialógus ablakban kell megjeleníteni, akkor az ablak stílusa. Egyébként figyelmen kívül marad.

A cshtml-be a következő képpen kell beillesszteni:
```javascript 
    @Html.VrhCommonActions("actionid", ActionXElement)
vagy
    @Html.VrhCommonActions(ActionXElement)
```
Az ActionXElement a leírás elején említett xml szerkezet XElement objektuma.
Az "actionid" az egész elem számára egy azonosító. Ha nincs megadva, akkor generálódik neki egy egyedi név.

A beillesztett eredmény a következő lesz:
```html 
<div id="actionid" name="actionid" class="vrhActionsPanel">
    <span class="vrhActionsTitle" data-toggle="collapse" data-target="#actionid-actions" aria-expanded="false" aria-controls="actionid-actions">
        <i class="fas fa-envelope vrhActionsIcon mr-1"></i>Hasznos linkek
    </span>
    <div class="collapse vrhActionsContent" id="actionid-actions">
    <a class="btn btn-info mr-1 mt-1" href="/Home/About?xml=config%3DConfigEditor&amp;group=GENERAL">Teszt CurrentPage</a>
    <a class="btn btn-success mr-1 mt-1" target="_blank" href="/Home/About?xml=config%3DConfigEditor&amp;group=GENERAL">Teszt NewPage</a>
    <a class="btn btn-info mr-1 mt-1" href="#" onclick="vrhct.bootbox.show('/Home/About?xml=config%3DConfigEditor&amp;group=GENERAL',{ isReturnInfoJSON:false, isIFrame:false, styles: [{name:'max-width',value:'80vmax'}]});">Teszt Dialog</a>
    <a class="btn btn-info mr-1 mt-1" href="#" onclick="vrhct.bootbox.show('/Home/About?xml=config%3DConfigEditor&amp;group=GENERAL',{ isReturnInfoJSON:false, isIFrame:true, styles: [{name:'max-width',value:'80vmax'}]});">Teszt DialogIFrame</a>
    <a class="btn btn-info mr-1 mt-1" href="#" onclick="vrhct.bootbox.show('/Home/TestJSON?par1=par1Value&amp;par2=par2Value',{ isReturnInfoJSON:true, isIFrame:false, styles: [{name:'max-width',value:'80vmax'}]});">Teszt WaitFor</a>
    </div>
</div>
```


## Datetimepicker megoldás
Az alábbi módon kell egy cshtml-be tenni.
```xml 
    <div class="form-group">
        @Html.LabelFor(x => x.WorkDate) 
        <div class="input-group date">
            @Html.TextBoxFor(x => x.WorkDate, "{0:o}", new { @class = "form-control" })
        </div>
        @Html.ValidationMessageFor(x => x.WorkDate)
    </div>
```
Majd a ready eseményben
```javascript
    $(document).ready(function () {
        var dtp = new VrhDateTimePicker('hu-HU');
        dtp.init('#WorkDate','L');
    });
```
További információk:
- GitHub link: https://github.com/Eonasdan/bootstrap-datetimepicker/
- A datetimepicker oldala: https://getdatepicker.com/4/
- A megoldásban ügyelni kell arra, hogy a cshtml-be feltett input mindig ISO alakúra legyen formázva ("{0:o}"). Ugyanis a helper automatikusan
a .NET futtatási környezetben érvényes formátumra akarja formázni, de nekünk meg majd olyan kell, amelyet a hívó szeretne. A Moment.js az ISO
formátumból alakítja az igényelt formára a dátumot, amelyet aztán a datetimepicker is átvesz.
- A dtp.Init() első paramétere annak az inputnak a selectora, amelyiken a datetimepicker alkalmazni szereznénk.
- A dtp.Init() második paramétere egy Moment.js szerinti formátum sztring, melyet el is lehet hagyni. Akkor az 'L' formátumot használja,
ami a magyar lokalizációban a "2021.04.15" alakot veszi fel.
- Moment.js dokumentáció: https://momentjs.com/docs/


****
### Version History:
#### 1.11.1 Patches (2023.04.11)
- VrhDataTable prototípus módosítása. Az alapértelmezett rendezés ("order") beállításának hozzáadása.
- Frissítés a jQuery 3.6.4 változatára (függőségként jelölve).
- Frissítés a Vrh.XmlProcessing 1.31.1 változatára.
- Frissítés a Vrh.Web.Common.Lib 2.19.2 változatára.

#### 1.11.0 Compatible changes (2023.03.16)
- VrhMasterData prototype bővítése a "renderDate" metódussal.jquery.dataTables számára dátum (idő nélkül) megjelenítéséhez.
- VrhMasterData prototype bővítése a "renderDateTime" metódussal.jquery.dataTables számára dátum+idő (másodpercek nélküli) megjelenítéséhez.
- VrhMasterData prototype bővítése a "renderDateTimeS" metódussal.jquery.dataTables számára dátum+idő (másodpercekkel) megjelenítéséhez.
- VrhMasterData prototype bővítése a "renderTime" metódussal.jquery.dataTables számára idő (másodpercek nélkül) megjelenítéséhez.
- VrhMasterData prototype bővítése a "renderTimeS" metódussal.jquery.dataTables számára idő (másodpercekkel) megjelenítéséhez.
- Frissítés a Vrh.Web.Common.Lib 2.19.1 változatára.
- Frissítés a Newtonsoft.Json 13.0.3 változatára.

#### 1.10.2 Patches (2023.03.03)
- VrhDataTable prototípus módosítása. A "select" szűrésnél a "required" attribútum hozzáadása.
- vrh.commontools.css módosítása a "select" szűrő mezőkre vontakozóan.
- Frissítés a Microsoft.Web.Infrastructure 2.0.1 változatára.
- Frissítés a Newtonsoft.Json 13.0.2 változatára.
- Frissítés a VRH.Log4Pro.MultiLanguageManager 3.21.3 változatára
 
#### 1.10.1 Patch (nuget 2023.02.23)
- áttérés a VRH.Common 3.0 változatára

#### 1.10.0 Compatible changes (2022.11.03)
- VrhMasterData prototype bővítése a "renderCheckbox" metódussal.
jquery.dataTables számára logikai mezők megjelenítése checkbox szerűen.
- VrhMasterData prototype bővítése a "renderOperations" metódussal.
jquery.dataTables számára a műveletek oszlop ikonjainak megjelenítése.
- VrhMasterData prototype bővítése a "getConfirmContent" metódussal.
Visszatér az adatok táblázatát és egy megerősítő kérdést tartalmazó html sztringgel.
- VrhBootbox prototype javítása. A "show" és "edit" metódusoknál ajax error esetén is
megjelenik egy modal ablak a hibaüzenettel.  
- Frissítés a Vrh.Web.Common.Lib 2.18.1 változatára.
- Frissítés a Vrh.Membership 4.11.0 változatára.

#### 1.9.0 Compatible changes (2022.10.24)
- VRH.Log4Pro.WebTools.Log4ProISAuthorization névtér hozzáadása
- WebToolsBaseController hozzáadása
- Log4ProISAuthorization osztály hozzáadása
- Log4ProISAuthorizeAttribute osztály hozzáadása - NINCS KÉSZ!!!!
#### 1.8.11 Patch (nuget 2022.08.27)
- Visszaállás a bootstrap 4.6.1 változatára. Az 5-össel például a Vrh.Web.Membership nem működik. 
  Ezzel a változattal van tesztelve a felület. Ha váltani szeretnénk, akkor azt előbb ki kell tesztelni.
- Frissítés a jQuery.UI.Combined 1.13.2 változatára.
- Frissítés a jQuery.Validation 1.19.5 változatára.
- Frissítés a Microsoft.AspNet.Mvc 5.2.9 változatára.
- Frissítés a Microsoft.jQuery.Unobtrusive.Validation 4.0.0 változatára.
- Frissítés a Microsoft.Web.Infrastructure 2.0.0 változatára.
- Frissítés a Moment.js 2.29.4 változatára.
- Frissítés a Vrh.Web.Common.Lib 2.10.1 változatára.
#### 1.8.10 Patch (nuget 2022.06.27)
#### 1.8.9 Patch (nuget 2022.06.27)
#### 1.8.8 Patch (nuget 2022.05.02)
#### 1.8.7 Patch (nuget 2022.05.02)
#### 1.8.6 Compatible changes (nuget 2021.12.21)
#### 1.8.5 Compatible changes (nuget 2021.12.21)
- A SelectList xml paraméterezésének és a használható változók nevének sztenderdizálása
- egy elírás javítása

#### 1.8.4 Patches (2021.09.16) 
- URL összeállításban lévő hiba javítása.
- A Help elem tartalmát teljes egészében beolvassa, amely így tartalmazhat újabb XML elemeket is, például HTML elemeket. 

#### 1.8.3 Patches (2021.09.16) 
- URL összeállításban lévő hiba javítása.

#### 1.8.2 Patches (2021.09.16) 
- Egy név tér elírás javítása történt.
- A VrhCommonActions végéről hiányzott egy div zárás. 

#### 1.8.1 Patches (2021.09.16) 
- A Target framework változott .NET Framework 4.5-re a korábbi 4.6.2-ről.

#### 1.8.0 Compatible changes (2021.09.10) 
- A HtmlHelper jellegű összetevők átkerültek ide a Vrh.Web.Common.Lib projektből.
- VrhPageHelp és a VrhCommonActions HtmlHelper kiterjesztések megvalósítása.

#### 1.7.2 Patches:

#### 1.7.1 Pathces:

#### 1.7.0 Compatible changes:
- bootbox kezeli az isIFrame paramétert, amely ha igaz, akkor a megadott url-t egy iframe tag-be helyezve hajtja végre

#### 1.6.0 Compatible changes and Patches (2021.06.17):
- VrhAutoComplete prototípusban bevezettük az ErrorSign tulajdonságot, melyből kiolvasható az az érték, 
amivel jelezni lehet a hiba előfordulást a szerveren készült lista 0. elemének kulcsában. Így az érték a javascript futásidejében jól lekérdezhető.
- VrhDateTimePicker prototípusban időzítve újra olvassa az input értékét, ha az nem megfelelő. Ha így sem lesz megfelelő, akkor az hiba.
- VrhDataTable prototípusban a "Paging" opciót nem vette figyelembe.
- bootstrap4-toggle hozzáadása, mert nincs a plugin-hoz nuget csomag. Így ez a csomag szállítja.

#### 1.5.2 Patches (2021.04.30) debug:
- Frissítés a Font.Awesome 5.15.3 változatára (függőségként jelölve). Figyelem! Új módon lehet elérni a korábban "fontawesome-all.css" néven szereplő fájlt.
- Frissítés a jQuery 3.6.0 változatára (függőségként jelölve).
- Frissítés a Vrh.XmlProcessing 1.27.0 változatára.
- VrhAutoComplete prototípusban az ikonok igazításának javítása.

#### 1.5.1 Patches (2021.04.27) debug:
- A VrhAutoComplete prototípusban, ha "radio" típusú volt a filter-ben megadott input, akkor nem a kiválasztott opció értékét adta vissza, hanem mindig az első opció értékét. Ez lett javítva.

#### 1.5.0 Compatible changes (2021.04.16) debug:
- A csomag mostantól szállít egy datetimepicker megoldást.
- Módosult a VrhAutoComplete prototípusban az Init metódus egy fejlettebb hibaészleléssel.
- Hozzáadásra került egy WTConst nevű állandókat tartalmazó statikus osztály.

#### 1.4.1 Patches (2021.03.18) debug:
- Módosult a resizeCardBody metódus a VrhMasterData prototípusban.

#### 1.4.0 Compatible changes (2021.03.17) debug:
- Átkerült ebbe a csomagba a vrh.commontools.js
- Névtér változott! "VRH.Log4Pro.SeleclistHandler" névtér mostantól "VRH.Log4Pro.WebTools".  
- A SelectListController.Get akció elérése "WebTools/SelectList/Get".
- Frissítés a bootstrap 4.0.6 változatára (függőségként jelölve) 
- Frissítés a jQuery 3.5.1 változatára (függőségként jelölve)
- Frissítés a jQuery.Validation 1.19.3 változatára (függőségként jelölve)
- Frissítés a Microsoft.jQuery.Unobtrusive.Validation 3.2.12 változatára (függőségként jelölve)
- Frissítés a Microsoft.CodeDom.Providers.DotNetCompilerPlatform 3.6.0 változatára (függőségként jelölve)
- Bootbox.JS 5.5.2 hozzáadása (függőségként jelölve)
- popper.js 1.16.1 hozzáadása (függőségként jelölve)
- Font.Awesome 5.15.2 hozzáadása (függőségként jelölve)
- Frissítés a Vrh.Web.Common.Lib 2.7.1 változatára 
- Frissítés a VRH.Common 2.21.1 változatára 
- Frissítés a VRH.Log4Pro.MultiLanguageManager 3.18.0 változatára
- Frissítés a Vrh.XmlProcessing 1.26.1 változatára

#### 1.3.1 Patches (2020.11.12) debug:
- Újra: !!! A projectben a "Build Action" tulajdonságot "none"-ra kell állítani annál az összetevőnél, amit nem akarunk betenni a nuget csomagba.
- Frissítés a Vrh.Web.Common.Lib 2.6.1 változatára 

#### 1.3.0 Patches (2020.11.12) debug:
- .NET 4.6.2-re állás

#### 1.2.2 Patches (2020.11.12) debug:
- beépülők frissítése

#### 1.2.1 Patches:
- Projectben a "Build Action" tulajdonságot "none"-ra kell állítani annál az összetevőnél, amit nem akarunk betenni a nuget csomagba.
- NuGet csomagok frissítése.

#### 1.2.1 (2020.03.22) Patches
- Projectben a "Build Action" tulajdonságot "none"-ra kell állítani annál az összetevőnél, amit nem akarunk betenni a nuget csomagba.
- NuGet csomagok frissítése.

#### 1.2.0 (2020.02.14) Compatible changes
- ListElement számára új konstruktor

#### 1.1.1 (2020.02.14) Patches
- annyi változtatás, hogy ha van connectionstringes paraméterrel rendelkező metódus, akkor mindenképp azt hívja meg,
akkor is, ha a connectionstring paraméter értéke null

#### 1.1.0 (2020.02.14) Compatible changes
- kialakításra került egy olyan SelectList metódus interfész, amely egy újabb string paraméterrel egészült ki,
amelynek átadásra kerül a Plugin vagy a List elemben megadott ConnectionString értéke. Ha ez üres, akkor a
"régi" interfész szerint kerül meghívásra a SelectList metódus, ha van értéke, akkor meg eszerint az új szerint.

#### 1.0.1 (2020.02.14) Patches
- javítás

#### 1.0.0 (2020.02.13) Initial version
- Első stabil változat
