121 |
123 |
5.5. |
06.01.2014 |
buttonSelector via SQL & ajax unterstützt listTemplate, sysDynamic-templates / layout:ul-border / button-Actions (updateData / insertData) |
06. Januar 2014: Refactoring _lang -> _i18nContent : Die ColDef-Option "_lang" zum Festlegen von ob ein Control sprachabhängigen Inhalt unterstützt hat den neuen Namen _i18nContent erhalten. Hiermit soll der Name dieser Option besser zum Verständnis des angedachten Verhaltens beitragen. Separate Funktion getCsvValue (ruft getClassValue mt dem delimiter=',' auf) NEU: function getColDefHashFromDsnTabCol (dsn, tab, col) ermittelt die column-Definition colDef-Hash (aColDefHash) aus Datenbank (dsn), Tabelle (tab) und Spalte (col) function i18nKeySuffix ($aColDefHash) ermittelt für i18n-Felder einen Suffix, welcher für als Anhang für Keys verwendet wird. Liefert '' (Leer) falls die aktuelle Spracheinstellung der Basissprache entspricht, oder wenn die Option _i18nContent nicht für das betreffende Feld gesetzt ist. listTemplate_sysDynamic : Wenn als template-Name sysDynamic gewählt wird, dann wird das Template dynamisch aus dem zugrundeliegenden SQL-Select - Tabellenspalten erzeugt. Drei selbstgenerierende Template-Typen stehen zur Verfügung: table, table-selector und ulli. Der table-selector eignet sich hervorragend in Verbindung mit radioList, checkboxList und buttonSelector -Elementen. Neue CSS-Klasse ul-border : verwendet im übergeordneten li wird das ul mit einem Rahmen versehen. Neue Button-Actions: updateData speichert die zugehörenden Daten aus dem in dataOptions hinterlegten name_ insertData fügt die zugehörenden Daten aus dem in dataOptions hinterlegten name_ hinzu |
122 |
124 |
5.5a |
07.01.2014 |
setSysState: systemStates (Button, IsAjax, Request-Method, usw.) |
07. Januar 2014: NEU: Neu: function setSysState : Diese setzt state-Variablen mit dem Prefix -ulliaSys , welche für bedingtes Rendering verwendet werden können. Es werden folgende States gesetzt: ActionButton, z.B. Refresh: sysStateKeyVal_ ActionButton-ulliaSys_ refresh IsAjax=TRUE sysStateKeyVal_IsAjax-ulliaSys_TRUE IsAjax=FALSE sysStateKeyVal_IsAjax-ulliaSys_FALSE RequestMethod=GET: sysStateKeyVal_RequestMethod-ulliaSys_GET RequestMethod=POST sysStateKeyVal_RequestMethod-ulliaSys_POST ActivatorName ActivatorValue ActivatorOption Neu: rowSelector CSS und JS: Die css- class " rowSelector " im table-tag bewirkt dass in Tabellen beim Klick auf ein tr im tbody das Selection-Contol angeklickt wird (diese hat die css-class "sysSelCtrl"), funktioniert nur wenn Javascript aktiviert ist, ansonsten muss auf da Control, bzw. das zugehörige Label geklickt werden. Änderung: Die Vererbung des Pflichtfeld -Flags sowie die Validation kann nun auch authRequired -Abhängig sein. Hiermit können in Abhängigkeit des betätigten Buttons nur spezielle Controls inklusive einzelner Unterformulare validiert und gerendert werden. Bugfixes sqlQuery: db_select_rows arbeitet nun auf getrimmten rows also mit trim ($line). Hiermit funktionieren nun auch conditions auf der letzten Spalte. inplaceEditSave: an zwei Stellen wurde die falsch vorgenommene Umstellung auf getCsvValue wieder auf den hier korrekten Aufruf von getClassValue zurückgebaut. dataTableView: Anzahl Parameter bei dsnTabTemplateBuilder auf fünf korrigiert. |
123 |
125 |
5.5b |
12.01.2014 |
CSV_DELIMITER_REPLACE |
12. Januar 2014: NEU: CSV_DELIMITER_REPLACE : Ersetzt Kommas in der CSV-Liste der State- und Persitenz-Liste SQL-Parser: Neues Schlüsselwort [REQUIRED] als select ermittelt alle Pflichtfeld-Spalten der Tabelle. BSP: SELECT [REQUIRED] FROM Table Dataprovider: sysStateKeyVal_ kann nun Bestandteil des data-Option Wertes sein. hiermit kann sehr einfach ein Formular für ein SQL-Query aufgebaut werden: Eingabeformular(text), button und Ergebnis(radioList) mit data=sysStateKeyVal_ NameDesEingabeformulars sqlStore Systems: System Query Keywords zum ermitteln der Applicatiion Databases ( sqlstore.appdatabases ), der Tabellen ( sqlstore.apptables ) je Database sowie der Spalten von Tabellen ( sqlstore.appcolumns ). Beispielhafte Verwendung inkl. caching: SELECT CACHED * FROM sqlstore.appdatabases SELECT CACHED * FROM sqlstore.apptables WHERE sqlstore.appdatabase = sysStateKeyVal_Database_ SELECT CACHED * FROM sqlstore.appcolumns WHERE sqlstore.apptable = sysStateKeyVal_Table_ |
124 |
126 |
5.5c |
13.01.2014 |
SQL als Button-Action / dataProvider - dataConsumer / selectbox via templateRenderer |
13. Januar 2014: NEU: selectbox : Wenn in dataOption ein template angegeben ist dann wird nur das umgebende HTML select-TAG gerendert. Die options inkl. der optionalen optgroup wird vom templateRenderer bezogen. Hiermit können sehr flexibel beliebig komplexe selectboxen erzeugt werden. Wenn ein button vom Typ " IsSqlDataProvider " ist dann wird als action die Methode actionButtonExcecuteSQL ausgeführt. Das
Ergebnis kann dann in einem Feld als Eingabe übergeben werden. Aktuell
ist hierzu die dataOption targetName_ zu definieren. Der Button
verwendet zum Rendern dann ebenfalls auf ein in der dataOption definiertes
Template. IDEE für eine spätere Version: Statt des targetName_ kann ist auch eine Konfigruation über den familyGroups Dialog denkbar: Dieser bietet bereits die Event GRP "dataConsumer" und dataProvider" |
125 |
127 |
5.5d |
14.01.2014 |
SQL-Syntax Usability |
14. Januar 2014: NEU: Benutzerfreundlichkeit sql_parser erhöht: Alle Datenbank-Namen auflisten: SELECT * -> SELECT * FROM sqlstore.appdatabases Alle Tabellen-Namen der Datenbank DB-Name auflisten SELECT * FROM DB-NAME : (WICHTIG: endet mit mit Doppelpunkt) -> SELECT * FROM sqlstore.apptables WHERE sqlstore.appdatabase = DB-NAME Alle Spalten-Namen einer Tablelle auflisten SELECT * FROM DB-NAME : TABLE-NAME : (WICHTIG: endet jeweils mit einem Doppelpunkt) -> SELECT * FROM sqlstore.appcolumns WHERE sqlstore.apptable = MIS_DEALERS |
126 |
128 |
5.5e |
18.01.2014 |
SQL-Syntax [COUNT] |
18. Januar 2014: NEU: SQL: SELECT [COUNT] : Anzahl der Tablenzeilen ermitteln SELECT [COUNT] FROM TableName WHERE Condition onAjaxResponse : Neue Javascript-Funktion: Überprüft ob die Signatur des Activator-Values mit der Signatur ajaxResponses übereinstimmt. Ist das nicht der Fall dann entspricht der Response nicht dem aktuellen Activator-Value. Es wird daher der letzte Ajax-Request mit dem aktuellen Activator-Value wiederholt (maximal jedoch 6 mal). Hiermit werden nun autosuggests auch beim sehr schnellen Tippen korrekt dargestellt. |
127 |
129 |
5.5f |
25.01.2014 |
authValidate / authHidden / textInputList / searchInputList / renderConditions |
25. Januar 2014: NEU: authValidate : Durchführung der Serverseitigen Validierung in Abhängigkeit des Authorisierungs-Status (authState) authHidden : authState-Abhängiges ausblenden von Elementen (Im Gegensatz zu authRender werden diese zwar gerendert, jedoch mittels CSS-Versteckt (statt der hierfür bereits vorhandenen CSS-Klasse hidden wird ggf. die css-Klasse authHidden hierzu neu eingeführt. dataRowConditionFilter : colDef_dataRowConditionFilter hat sich in der Praxis nicht bewährt und wird daher mit dieser Version entfernt. textInputList, searchInputList: Liste von Eingabefeldern vom type=text und type=search. Verwendet zur Generierung den dataProvider. renderConditions: Das ajax-dragWindow zur verknüpfung mit Conditios hat einen weiteren Abschnitt erhalten. In diesem können nun zusätzlich Button Actions / System Events / Authorization / Authentication / auth- Groups / epoch- Rights als renderCondition ausgewählt werden. |
128 |
130 |
5.5g |
26.01.2014 |
dataProvider: unterstützung von Ranges [beg..end] |
26. Januar 2014: NEU: Erweiterung dataProvider : die ColDef-Option _data wandert Bereichsangeban (Ranges) in eine csv-Liste. Ein Bereich (Range) wird durch Eckige Klammern umschlossen und beeinhaltet den Start und Endwert, welche durch zwei Punkte getrennt werden. Es können mehrere durch Komma-getrennte Bereiche angegeben werden. Beispiel : aus [5..1],[Z..X], [8..11] wird die Liste 5,4,3,2,1,Z,Y,X,8,9,10,11 Optional kann auch eine positive oder negative Schrittweite angegeben werden [0..40: 10 ] ergibt 0,10,20,30,40 [0..40:- 10 ] ergibt 40,30,20,10,0 (alternativ zu [40,0,10] Falls die Schrittweise 0 (Null) ist oder keine Schrittweite angegeben wurde dann wird die Liste mit der Schrittweite 1 (eins) berechnet. Anwendung: wenn eine grosse Anzahl von Datenfeldern benötigt wird oder die Datenfelder in der Anzahl variabel sind, dann können diese mit den Typen textInputList und searchInputList in Verbindung mit der Range-Definition dynamisch generiert werden. |
129 |
131 |
5.5h |
02.02.2014 |
SystemEvent Conditions, Bugfixes |
02. Februar 2014: NEU: Conditions: System-Events hinzugefügt: ValidationError ( sysStateKeyVal_Validation-ulliaSys_Error ) ValidationOK ( sysStateKeyVal_Validation-ulliaSys_OK ) IsPostRequest IsGetRequest IsAjaxRequest Bugfixes |
130 |
132 |
5.5i |
05.02.2014 |
System-Status IsValid für Controls |
05. Februar 2014: NEU: Conditions: System-Status IsValid hinzugefügt (noch nicht abgeschlossen, alpha-Status): IsValid( CtrlName ) ( sysStateKeyVal_IsValid-ulliaSys_ CtrlName ) Hiermit ist es möglich ein Control in Abhängigkeit einer positiven Validierung von anderen Feldern stateabhängig zu rendern. Beispiel : Der Button Suchen soll nur enabled sein wenn das Feld Kundennummer korrekt ausgefüllt ist. ToDo: Namespace (ctrlPrefix) berücksichten. Das ist bei Namensgleichheit in SubForms relevant. Optimierungsidee: Die Funktion parseIsValidState (tabDef, ctrlPrefix) kann das Parse-Ergebnis cachen und nur noch den State anhand der aktuellen Werte ermitteln. |
131 |
133 |
5.5j |
09.02.2014 |
priorPlainContainer unterstützt templateRendering / Security für disabled-Felder / CACHING / sql_parse: firstColName |
09. Februar 2014: NEU: Erweiterung vom priorPlainContainer : dieser unterstützt nun template-rendering und wertet optionale Parameter der ColDef-Options aus: template_ NAME , ctrlName_ NAME , ctrlType_ TYPE Beispiel : data=SELECT Kundendaten; options=template_custRenderTempl, ctrlName_selectName, ctrlType_checkbox Hiermit kann dann dann oberhalb der gerenderten Controls eine Liste von checkboxen gerneriert werden, welche exakt denjenigen entsprechen die über einen checkboxList-Typen vom Namen selectName erzeugt werden. Wird hier ebenfalls über ein Template gerendert, so können in dieser Liste die Controls weggelassen werden. Im Endeffekt kann hiermit also eine Verschiebung der Controls erreicht werden. Zweck dieser Aktion : in Verbindung mit label-for können die checkboxen (radio-buttons analog) geschaltet werden. Da diese beim Rendering im priorPlainContainer keinen umgebenen Container enthalten, können die Elemente ohne Javascript mit reinen CSS-Mitteln gestyled werden. Security : disabled -Felder speichern und restaurieren den Wert auf dem Server. Der zum Client übertragene Wert dient nur der Visualisierung. CACHING : chooseTemplateComponent und db_select_rows unterstützen die CACHED-Option von SQL-Statements. firstColName : Erweiterung in sql_parse: Der erste Wert wird beim Rendern als value (in der Regel der Key id_) verwendet. In einigen Fällen ist nützlicht nicht den Key als value zu verwenden, z.B. wenn einen Filter für Tabellenspalten aufgebaut werden soll. Beispiel: SELECT CACHED DISTINCT Anrede,* FROM UserNamen |
132 |
134 |
5.5k |
16.02.2014 |
onScroll: FamGrp Event (beta), cacheExpiry |
16. Februar 2014: PREVIEW: Neues FamGrp Event onScroll: Idee beim Laden von größeren Datenmengen wie z.B. Tabellen mit mehr als 400 Zeilen, werden zunächst erst ca. 100 geladen (etwas mehr als auf dem Bildschirm sichtbar sind). Beim Scrollen des Fensters (onScroll) wird dann diese Event ausgelöst und kann dann per ajax weitere Daten oder Tabellenzeilen nachladen. cacheExpiry: Idee: es wird nicht nur auf dem Server gecached, sondern auch auf dem Client im local Storage. Hierzu wird auf Grundlage der Serverzeit und des Expiry-Wertes ein Verfallsdatum für die Daten ermittelt. Falls innerhalb des Client-Haltbarkeitsdatums dennoch die Aktualität der Daten geprüft werden soll, dann kann ein ajax-Request mit dem If-Modified-Since-Header abgesetzt werden. (Details siehe HTTP Caching). Ggf. kann auch das ETAG hierzu verwendet werden. |
133 |
135 |
5.5l |
23.02.2014 |
cacheExpiry (clientstorage) / navType componentControls |
23. Februar 2014: NEU: cacheExpiry mit clientstorage Unterstützung: navType componentControls : Die möglichen Typen eines Navigationseintrags wurden um den neuen Typ componentControls erweitert. Mit diesem ist es nun möglich innerhalb der Navigation beliebig definierte Formularfelder einzubetten. Anwendungsfälle: Suchfeld mit Button innerhalb eines Navigationsbaumes Aufbau einer immer dargestellten Sitemap (z.B. für Tablett-Computer) |
134 |
136 |
5.5m |
02.03.2014 |
http_set_status / checkUniqueRows |
02. März 2014: NEU: http_set_status : Setzt den HTTP-Status auf 403-Forbidden, 404-Not Found, 410-Gone. Hiermit werden z.B. Soft-404 Seiten zu echten 404 Seiten. checkUniqueRows : Testet alle mit unique ausgezeichneten Spalten auf Eindeutigkeit. Falls die Eindeutigkeit verletzt ist, wird eine Warnung mit der Aufzählung der nichteindeutigen Elemente ausgegeben sowie eine Aktion zum korrigieren. |
135 |
137 |
5.5n |
09.03.2014 |
supportsBCrypt / cached minify |
09. März 2014: NEU: supportsBCrypt : Fallback falls die installierte Server-Software noch nicht bcrypt unterstützt. supportsBCrypt gibt true zurück wenn die Software bcrypt unterstützt. http_set_status : Wenn eine HTTP-Status > 400 geliefert wird, dann wird der Statuscode nun auch als Fehlermeldung ausgegeben: E_403_FORBIDDEN E_HTTP_404_NOT_FOUND E_410_GONE Bugfix: Wenn Komplettseiten aus dem Cache geliefert werden dann können diese nun auch minified werden. Renderoption minify: Es wird nun auch der html-Head minifiziert |
136 |
138 |
5.5o |
16.03.2014 |
responsive-layout / type progress / events: onCopy, onPaste, onCut / datalist: id-Präfix |
16. März 2014: NEU: Responsive-Layout: Implementation des neuen Styles responsive NEU: onCopy , onPaste , onCut Events NEU: Unterstützung des HTML5-Typs progress datalist auf weitere HTML5 Typen erweitert. Unterstützt nun neben type=text auch die Typen week month color time date range datetime-local number searcg tel telephone url email Change: datalist: id-Präfix von dlcsv_ auf dl_ geändertml-Head minifiziert |
137 |
139 |
5.5p |
23.03.2014 |
keygen |
23. März 2014: NEU: keygen: neuer colDef-Type keygen: Generieung eines kryütischen Schlüsselpaars via HTML-5. Erzeugt eine privaten und öffentlichen Schlüssel. Der öffentliche wird mit den Formulardaten übertragen, der private verbleibt auf dem Client. NEU: onCopy , onPaste , onCut Events NEU: Unterstützung des HTML5-Typs progress datalist auf weitere HTML5 Typen erweitert. Unterstützt nun neben type=text auch die Typen week month color time date range datetime-local number searcg tel telephone url email Change: datalist: id-Präfix von dlcsv_ auf dl_ geändertml-Head minifiziert |
138 |
140 |
5.5q |
06.04.2014 |
Security via http-header |
06. April 2014: NEU: Security-Header: Verringerung von Angriffen durch setzen der folgenden HTTTP-Header: Strict-Transport-Security X-Frame-Options X-Content-Type-Options X-XSS-Protection X-Content-Security-Policy |
139 |
141 |
5.5r |
21.04.2014 |
Oster-Release: addBodyClass, removeBodyClass / fullscreen-API (js5) |
21. April 2014: NEU: get-Parameter: neue get-Parameter inkl. Persistenz via u_ Präfix: addBodyClass: hinzufügen einer css-class zum html-body addBodyClass: entfernen einer css-class zum html-body HTML5 Fullscreen-API : Unterstützung der fullscreeen-Api nun auch für ullia-script js5. |
140 |
142 |
5.5s |
27.04.2014 |
Oster-Release: addBodyClass, removeBodyClass / fullscreen-API (js5) |
27. April 2014: NEU: ullia-script: html5-minimal script: OnEvent: ajax-updates CHANGE: Wenn clientStorage aktiviert ist (User-Settings u_clientstorage ) wird IsCacheable ausgeschaltet (Ansonsten können ggf. Seiten gecached werden welche nicht alle Bereiche enthalten, z.B. ohne Navigation) |