81 |
81 |
4.7s |
30.06.2013 |
NEU: data-signature, HTML5: Unterstützung von sessionStorage, navDataOptions, js-Bugfix |
30.06.2013: Neu:
data-signature : neues data-Attribut im , zusammengesetzt aus authSignature sowie render-relevanten Einstellungen. Der Wert ist geeinget um Berechtigungsrelevante Caching-Key für den sessionStorage oder localStorage zu erzeugen. Anwendung: Footer-Submenu kann hierüber zwischengespeichert werden. navDataOptions : Neues Page-Attribut navDataOptions vom Typ csvList: Mit diesem kann z.B. das Attribut data-option="noClick" für Navigationselemente gesetzt werden. Mit Hilfe von geeigneten Javascript kann dann z.B. im Footer verhindert werden, daas ein Kick auf "Ansicht" zur Seite Ansicht verzweigt und nicht nur die Unterpunkte aufklappt. Weiterer Anwendungsfall: eine Seite soll als dragWindow überall eingebettet werden können, Erreicht wird das durch Setzen des Attributs navDataOptions=dragWindow. Mehrere Attribute werden durch Kommas getrennt. WICHTIG : In allen Apps die das neue Page-Attribut navDataOptions unterstützen sollen, muss dieses in der Definition für die Navigation (sysConfigSiteExpert) nachgetragen werden: typ=csvList, maxlen=256 ajaxCachedContent : javascript- / ajax-caching mit sessionStorage / localStorage Unterstützung Bugfix: js-Bugfix (Javascript / ajax): ajaxJsonUpdate removeClassName muss vor updateContainer, da ggf. der Container auch gelöscht werden kann. |
82 |
82 |
4.7t |
09.07.2013 |
securityEscapeValue |
30.06.2013: Neu:
securityEscapeValue : Security: Postback-Escape für input und textarea |
83 |
83 |
4.7u |
10.07.2013 |
u_clientstorage: optionale clientseitige Speicherung der Hauptnavi via sessionStorage |
10.07.2013: Neu: experimental (alpha-Status)
u_clientstorage : optionale Footer-Option für berechtigte Anwender: Wenn diese Option zur Verfügung steht und ausgewählt ist dann wird in Browsern die sessionStorage unterstützten die Navigation auf dem Client abgelegt und in folgenden Responses nicht mehr vom Server mitgeschickt. (Der Hinweis hierzu wird vom Client via Cookie an den Server kommuniziert). Implementierungsdetails : ist die Option u_clientstorage gesetzt, dann wird die Haupt-Navi mit absoluten Links als Sitemap gerendert, d.h. alle Links werden ausgeliefert. Wenn die Navi dann in Folgeresponses aus dem sessionStorage restauriert wird, dann erfolgt die Auszeichnung des aktuellen Pfades nachträglich auf dem Client per Javascript. Eine zukünfige Version könnte das Nachladen der zu speichernden Gesamtnavi auch per ajax Request vom Server anfordern. |
84 |
84 |
4.7v |
21.07.2013 |
renderConditions |
21.07.2013: Neu: renderConditions (alpha-Status)
renderConditions: Anfang einer erleichterten Pflege von statusabhängigem Rendern von Controls. |
85 |
85 |
4.7w |
23.07.2013 |
authRequired, clientId und typ label, UX - user Experience: IsSubmitButton |
23.07.2013: Neu:
authRequired : Status und Berechtigungsabhängige Pflichtfelder (analog zu allowed). Pflichtfleder können wie bisher fest mit dem Attribut _req gesetzt werden. Ist diese Option nicht gesetzt, und ist ein Wert im Attributs authRequired eingetragen, dann wird hieraus abgeleitet ob das Feld ein Pflichtfeld ist. label: dsnTabCombo_Types : neuer Type label mit optionalem for-Attribut (definiert über dataOptions for_ ID). dsnTabColumn_Definitions : neues Attribut colDef_clientId zum Setzen von festen ID's im client (=Browser-HTML) User Experience : OnEnter-Event markiert beim OnFocus im Feld den verknüpften Button mit der CSS Klasse IsSubmitButton . Hiermit kann über geeignete Stylesheets deutlich visualisiert werden, welcher Button bei Enter ausgeführt wird. |
86 |
86 |
4.7x |
24.07.2013 |
partial ajax replacement, stellvertreter li für nicht gerenderte elemente |
24.07.2013: Change:
partial ajax replacement : Bei Ajax-Updates, welche nur Teilkomponenten austauschen wird nun immer das umschließende li-tag inklusiv des zugehörigen Inhalts ausgetauscht. Hierdurch wird zwar die Datenmenge erhöht, in vielen Fällen ist das jedoch nicht vermeidbar, da auch im li-Tag renderspezifische Attribute enthalten sind. Wenn aufgrund von Berechtigungsbedingungen ein Element nicht gerendert wird, dieses jedoch einer famGrp angehört, dann wird nun als Stellvertreter ein leeres li-Tag gerendert, welches die famGrp_, den dataName_ sowie die hidden css-class enthält. Hiermit sind nun auch partial-ajax updates möglich bei denen aktuell nicht angezeigte Elemente refreshed werden können. |
87 |
87 |
4.7y |
25.07.2013 |
NEU: GetCacheVersion / sessionVersion |
25.07.2013: Client-Cache Bugfix:
NEU sessionVersion : Bei client-cache relevanten Änderungen auf dem Server muss der client-Cache im Browser invalidiert werden. Hierzu wird eine sessionVersion als Suffix an das data-version Attribut angehängt. Initial ist der Wert leer, bei jeder relevanten Änderung wird nun die neue Funktion invalidateClientStorage() auf dem Server aufgerufen, welche dann den Wert der sessionVersion inkrementiert. |
88 |
88 |
4.7z |
30.07.2013 |
Partial Update: ohne autofocus - Berücksichtigung von codeBehindProcess, submitBtnOnEvent entfernt, eventHandling für csvGroupRadio |
30.07.2013: Bugfix ajax-Partial:
autofocus ajax-Partial Update : Beim ajax-Partial Update muss das HTML5-Attribut autofocus beim Rendern abgeschaltet werden, da ansonsten in Autosuggest-Feldern, welche inital das Attribut autofocus haben, dann durch die Usereingaben syntaktisch den Status valid erhalten und somit das autofocus Attribut ggf. auf ein anderes Element gesetzt wird. Das bewirkt dann beim ajax-Update dass der Focus auf eine anderes Element gesetzt wird und der Benutzer den Focus im autosuggest-Feld verliert. colDef_submitBtnOnEvent entfernt : Option gelöscht, da dieses im wesentlich mächtigeren Konzept der famGrp aufgeht. ajax-Partial Update : Wenn die famGrp für Elemente des Types codeBehindProcess gesetzt ist dann führt Patial Ajax-Update den Prozess aus. eventHandling für csvGroupRadio Partial Update für richtext , und damit generalisiert |
89 |
91 |
4.8. |
04.08.2013 |
renderConditions: inplaceConditionEdit |
04.08.2013: Neu:
inplaceConditionEdit : der Edit-TabReiter "renderConditions" wurde mit hilfe von Ajax um die Funktion inplaceConditionEdit erweitert. |
90 |
92 |
4.8a |
06.08.2013 |
datalist: Erweiterung um codeBehind / get_option_list |
06.08.2013: Erweiterung:
datalist : Der Type datalist unterstützt nun auch direkt codeBehind. Gerendert wird ein optionales label, das Eingabefeld mit dem Attribut list sowie die zugehörige datalist mit der entsprechenden id. Inhaltlich muss codeBehind dann eine html option-list zurückliefern. Die Komponente component_datalist_codeBehind verwendet hier als type für das Eingabefeld type="seach". get_option_list : neue Funkion aus databaseEditUtils (baut auf get_csv_column_list auf) Anwendungsbeispiel in Verwendung mit der datalist: using('databaseEditUtils'); $optionCityList = get_option_list ('misc', 'cities', 'name', BASE_LANGUAGE); |
91 |
93 |
4.8b |
07.08.2013 |
ajax Handling für datalist: Part one |
07.08.2013: Ajax-Datalist
datalist : datalist in Verbindung mit ajax kann auch für autosuggest-Felder eingesetzt werden. Da die datalist des Eingabefeldes hier dynamisch neu via ajax nachgeladen wird muss aktuell auch das Eingabefeld per famGrp Definition neu gerendert werden. Das hat aber den entscheidenen Nachteil dass hierbei der Focus im Eingabefeld verloren geht. Hier muss nachgebessert werden: Felder des types datalist sollen zukünftig im ajax-partial Betrieb nur die Datalist-Options nachladen das Eingabefeld also nicht. datalist-partial-ajax-update : (08.08.2013) Das datalist-control (li-label-input-datalist) tauscht im ajax-partial update Betrieb nur noch die option's innerhalb der datalist aus. Hiermit bleibt der Focus im Eingabefeld, allerdings gibt es noch je nach Browser diverse Refresh-Probleme bei sich dynamisch ändernden datalist's. (Das ist wahrscheinlich bisher nicht vorgesehen) NEU: omDatabaseAutosuggestUtils : neues Modul zur Autosuggest Unterstützung function matchedTableRows (dsn, tab, col, query, ref aTableRows, ref tabDef, language='', dbDomain='') liefert alle Zeilen die auf query matchen. Erweiterung: component_csvRenderControl : neue Funktion csv_to_option hinzugefügt: rendert eine kommaseparierte Liste als option-tags die dann als Auswahlelemente einer Datalist oder select-box verwendet werden können |
92 |
94 |
4.8c |
11.08.2013 |
partial updates: Reihenfolge beim Rendering angepasst, u_inplace_authconditions, codeBehind function definition |
11.08.2013: Ajax-Partial Update
Renderreihenfolge: Die Reihenfolge beim Rendern kann nun unabhändig von der Reihenfolge der Definition der Controls vorgegeben werden. Zur Anwendung kommt das beim Partial-Ajax Update. Hier kann per famGrp Checkbox eingestellt werden, ob das Element welches ein Client-Event auslöst (Der Activator) auch selbst neu gerendert werden soll. Der Activator wird nun in jedem Fall als erstes Control auf dem Server ausgeführt. Hierdurch kann das Control beispielsweise Statusvariablen setzen welche den Render-Prozess aller nachfolgenden Elemente beeinflussen könnte. u_inplace_authconditions: Neue Footer-Option für Admins: mit gesetzter Option u_inplace_authconditions werden alle Controls mit authorisierungsabhängigen Renderbedingungen markiert. Bei :hover werden diese Bedingungen angezeigt.Bugfix:richtext via ajax-Update: Das einfache Hochkomma (') muß beim AJAX-Update in der JSON Repräsentation durch zwei slashes "escaped" werden ('") codeBehind function definition : Änderung: die codeBehind funktionssignatur lautet nun function Name (&$pHash, $pInfo, $aColDef) Der namespace (ns) aus der alten Definition function Name (&$pHash, $pInfo, $ns='') wurde bisher nicht verwendet Mit Hilfe des aColDef Hashes können nun die Feldoptionen ausgelesen werden. NEU: Die ajaxVariablen activator, activatorValue, clientEvent werden nun auch übertragen, mit Hilfe des Wertes activatorValue kann nun sehr einfach ein autosuggest implementiert werden. Hierzu ist einfach ein Eingabfeld zu definieren und diese dann z.B. mit einem output-Element via familyGroups und dem Event onKeyUp zu verbinden. Das output-Element erzeugt dann über codeBehind eine select-list. |
93 |
95 |
4.8d |
12.08.2013 |
gzip / deflate für json calls, codeBehindCreateLocalVars, getServerValue |
12.08.2013: JSON Compress: json / ajax compress: ullia liefert nun bei ajax / json calls den content-type application/json zurück. Mit der Anpassung der htaccess Datei wird nun erreicht dass auch xhr-Responses komprimiert werden. AddOutputFilterByType DEFLATE text/html text/css application/javascript application/json NEU: codeBehindCreateLocalVars : User Experience bei autoCreate von codeBehind Funktionsrümpfen: Anhand er definierten colDef Namen werden für ausgewählte typen automatisch generierte variablen erzeugt, welche dann für die Benutzung nur noch einkommentiert werden müssen. function toCamelCase(txt) : Hilfsfunktion zur einheitlichen Schreibweise von Variablennamen in camelCase Notation. Wird von codeBehindCreateLocalVars verwendet. function getServerValue (key) : das Gegenstück zu setServerValue (ke, value); |
94 |
96 |
4.8e |
18.08.2013 |
refactoring: checkboxList, radioList, selectbox, datalist |
18.08.2013: Refactoring: refactoring: checkboxList, radioList, selectbox, datalist: vereinheitlicht mit Hilfe eines neuen generischen dataProviders |
95 |
97 |
4.8f |
24.08.2013 |
refactoring: checkboxList, radioList, selectbox, datalist |
24.08.2013: Warnhinweis: W_MISSING_OPTION_setState:Wenn renderConditions definiert sind, welche das Setzen von setState bedingen, dieser jedoch nicht gesetzt ist, dann wird ein entsprechender Warnhinweis als Fehlermeldung ausgegeben. |
96 |
98 |
5.0 |
15.09.2013 |
Toskana-Release: refactoring: button, buttonList; neu buttonSelector; neu sslProxy-Unterstütung |
15.09.2013: " Toskana-Release " Refactoring: Die Defition der Buttons werden nun nicht mehr auf den Client (=Browser) durchgereicht. Im Client werden nur noch die "Process-Names" verwendet. Bei POST wird hierüber der Submit-Button bestimmt und die definierte Aktion ausgeführt. NEU: HTTPS via ssl-Proxy Bei unterstützten Account kann nun auch mit einem Proxy-Zertifikat eine SSL-Kommunikation aufgebaut werden. Hier beispielsweise durch https://ssl-account.com/ullia.de/ |
97 |
99 |
5.1 |
22.09.2013 |
setState / persistent / Bugfix |
22.09.2013: " Optimierungen " Neu Option persistent: Mit Hilfe von der neuen Option persistent können nun Werte der Controls dauerhaft in der Session gespeichert werden. controlPersistent - Info: Anzeige der dauerhaft gespeicherten Werte unter "AppInfo" Change setState: setState persistiert nicht mehr automatisch die Werte der Controls. Das muss nun der neuen Option persistent separat gewählt werden. ajax-partialUpdate: Buttons können nun auch via Ajax refreshed werden, hierzu wurde doPerform_ als eventHandling -Option zur Kennzeichnung des action-Buttons eingeführt. Der Button selbst wird nun analog den anderen Controls via famGrp identifiziert. Bugfix: Falls Ullia mit PHP ab der Version 5.5 betrieben wird, mußte zunächst das encoding von htmlentities auf ISO-8859-1 statt dem neuen default UTF-8 gesetzt werden. Ansonsten gab es Probleme mit Umlauten. (htmlentities gibt nun einen leeren string zurück, falls irgendein umlaut im string vorhanden ist) |
98 |
100 |
5.2 |
24.09.2013 |
NEW: Touchevents / Eventgruppierung |
24.09.2013: Touchevents Neue Events zur Unterstützung von Smartphone und Tablet onTouchStart, onTouchEnd, onTouchLeave, onTouchMove, onTouchCancel Generelle Aufteilung der Events in Gruppen: KeyboardEvents = 'onKeyUp,onEnter,', MouseEvents = 'onClick,onDblClick,OnContextMenu,onMouseOver,onMouseOut,onMouseMove,onMouseDown,onMouseUp,' GenericEvents = 'onChange,onFocus,onBlur,onSubmit,' TouchEvents = 'onTouchStart,onTouchEnd,onTouchLeave,onTouchMove,onTouchCancel,' ulliaEvents = 'teamLeader,onValid,dataProvider,dataConsumer,onAutoSuggest,groupDef,minOf,maxOf'; |
99 |
101 |
5.3 |
25.09.2013 |
setState / setPersist: nur wenn Post-Action-Button auch die entsprechende Option hat |
25.09.2013: State und Persist: Button-Abhängig CHANGE: setState eines Controls bedingt nun bei Post-Requests, dass auch der auslösende Button diese Option hat setPersist eines Controls bedingt nun bei Post-Requests, dass auch der auslösende Button diese Option hat Unverändert: Bei Get-Requests ist das Restaurieren der Werte nur vom den Optionen des Control selber abhängig |
100 |
102 |
5.4. |
29.09.2013 |
Neu: colDef Option _crypt unterstützt nun auch sichere bcrypt Hashwerte |
29.09.2013: bcyrpt Erweiterung: Die Option crypt kann nun in dataOptions noch weiter spezifiziert werden: aktuell wird hier das "Wort bcrypt " unterstüzt. Der Type auth_password migriert beim Login automatisch die gespeichertern password-hashes zum neuen sicheren bcrypt-Hash. |