141 |
143 |
5.5t |
04.05.2014 |
Bugfix: tabDefCreateTableTemplate |
04. Mai 2014: NEU: HTML5 script: navigator.vibrate(300): // Vibration des Clients mit der Dauer von 300 Millisekunden. Bugfix: tabDefCreateTableTemplate: das berechnete Template wurde nicht zurückgegeben |
142 |
144 |
5.5u |
11.05.2014 |
colDef_pattern /doctype=xhtml5v / u_noservercaching / authConditions (clientEvents) / Javascript Event-Handler |
11. Mai 2014: NEU: colDef_pattern: Der Spaltendefinition unterstützt nun die Angabe eines Patterns (Regulärer Ausdruck) welcher zur Validation von Eingabefeldern verwendet werden kann. Beispiel: Ein Wert bestehend aus drei Grossbuchstaben, gefolgt von drei Ziffern wird beispielsweise wie folgt definiert: pattern =" [A-Z]{3}[0-9]{3} " . In der vorliegendenen Version 5.5u ist die Clientseitige HTML5 Validierung im Client vorbereitet (Es wird in allen Textfeldern das pattern-Attribut gerendert, falls dieses angegeben wurde. Wenn der doctype auf xhtml5 gesetzt ist wird die html5 Validierung über das form-Attribut novalidate ausgeschaltet. Durch setzten des doctypes auf den Wert xhtmlv wird die Clientseitige html5 validierung aktiviert. Diese prüft neben den neuen html5 Standardtypen nun auch die Gültigkeit gegen das Pattern. Bei Validierungsfehlern zeigt somit schon der Browser ggf. eine Fehlermeldung an. Unabhängig vom doctype wird auf dem Server immer gegen definierte pattern validiert. doctype xhtmlv : wie xhtml jedoch ohne form-Attribut novalidate u_noservercaching: ausschalten des serverseitigen Caches. Server authConditions unterstützen nun auch clientEvents : Hiermit können beispielsweise per Ajax auf dem Server Bereiche gerendert werden wenn ein Clientevent ausgelöst wird. Konkret kann z.B. bei onMouseDown auf einem Textbereich ein anderer Text eingeblendet werden oder auch Felder als Pflichtfeld markiert werden. Javascript Event-Handler : Wenn einer Seite ein Element vom Typ HTML-JavaScriptContent hinzugefügt wird, dann können darin Javascript Funktionen definiert werden, welche dann als Event-Handler Auswahl bei der Definition der familyGroups zur Verfügung stehen. Die Client-Javascript Funktion hat folgende Signatur (zwei optionale Parameter: function myClientScriptFunc (oThis, keyCode) Beispiel: Es wird eine function mit dem Namen zeichneRahmen definiert. Dann wird auf einem beliebigen Seitenelement das onMouseOver Event definiert, als Gruppe kann dann neben den Buchstaben A-Z auch die definierte Funktion ausgewählt werden. Wenn nun der Anwender die Maus über ein so definiertes Element plaziert, dann wird die Javascript-Funktion zeichneRahmen aufgerufen. Diese kann z.b. via addBodyClass eine Klasse setzen, welche mit Hife von css dann einen Rahmen zeichnet. Anwendungsbeispiel: siehe http://tools.ullia.de/de/testseiten/client-to-server-events.html CHANGE: doctype xhtml : beim doctype xhtml wird ab der Version 5.5u das form-Attribut novalidate gesetzt. |
143 |
145 |
5.5v |
18.05.2014 |
MouseEvents /RenderConditions / Get-Parameter Security, rel / Security=FrameOptions_ALLOW / u_disable_security_headers / shopCatchwordList / siteSearch / ulliaClientUpdate / hashArray Unterstützung im dataProvider |
18. Mai 2014: NEU: MouseEvents: neben onMouseDown und onMouseUp wird nun auch die rechte und mittlere Maustaste unterstützt: onRMouseDown , onRMouseUp , onMMouseDown , onMMouseUp . RenderConditions : Activator Controls umfasst nun auch alle Elemente bei denen die colDef- Option eventHandling definiert ist. Somit können beispielsweise auch richttext-Controls als Activator-Bedingung beim Rendering verwendet werden. Get-Parameter Security : erlaubt das einmalige Setzen von Security-Header Werte Security=FrameOptions_ALLOW (erlaubt das Anzeigen des Inhalts in einem IFRAME) Get-Parameter rel : lädt ein alternatives mainTemplate rel=IFrameWnd (nur messages, content, css-link und headTitle, keine Navi und keine anderen elemente) u_disable_security_headers : bodyClass zum Ausschalten der security header shopCatchwordList : neuer Typ zur Erzeugung von Stichwortlisten für Shop-Systeme, dieser kann alternativ zu dsnTabCatchwordList verwendet werden. function siteSearch (queryWord, dsnTabList='', idxStart=1, hitCount=20, markHits=true) siteSearch bietet eine vereinfachte Schnittstelle zur Seitensuche aus der codeBehind Programmierung. dsnTabList ist eine optionale semikolonseparierte Liste von dsnTab definitionswerten welche wiederum eine kommaseparierte Liste von dsn_*,tab_* Paaren ist. dataProvider HashArray / HashMap : Der dataProvider unterstützt über codeBehind auch Array HashMaps via key => value Paaren. Die Renderer stehen für die Typen select, radioList, checkboxList sowie buttonSelector zur Verfügung. CHANGE: dsnTabCatchwordList : dsnTabCatchwordList verwendet ab dieser Version immer die Definition von dsn_* und tab_*. Shop-Systeme können auch weiterhin über diesen Typ laufen, wenn dsn_shop,tab_articleList gesetzt wird. Alternativ kann in bestehenden Shop-Systemen der neue Typ shopCatchwordList verwendet werden. Bugfix: ulliaClientUpdate : Javascipt funcition ulliaClientUpdate verwendet nun den DOMParser zum erzeugen eines neuen node-elements. Mit diesen funktioniert nun auch die replace-option, welchen einen Knoten durch ein html-fragment austauscht. |
144 |
146 |
5.5w |
22.05.2014 |
autoFocusDefault / fc_only / datetime-local getDateTimeNow / securityGetAcceptedCsvValues / ullia_node_fromString / PushEcho |
25. Mai 2014: NEU: autoFocusDefault: Der Algorithmus zum Bestimmen eines sinnvollen Feldes in dem beim Seitenaufbau der Eingabecursor steht wurde erweitert. Wenn nach dem Rendern aller Felder kein autofocus-Feld bestimmt wurde, wird der Cursor in das ermittelte autoFocusDefault-Feld gesetzt (falls vorhanden) CSS-Class fc_only für das ulliLayout: eine verbindung von fc_break und fc_last. hiermit wird sichergestell dass eine Element alleine in einer Zeile steht. html5 datetime-local Hilfsfunktion getDateTimeNow (offsetInMinutes='', format='') ullia_node_fromString (markup): Neue Hilfsfunktion zum generieren eines document-nodes aus einm HTML-Fragment. Der neu erzeugte Node kann dann anschliessend via obj.appendChild(newNode, obj), obj.parentNode.replaceChild(newNode, obj) usw. in das DOM übernommen werden. PushEcho : neue Hilfsfunkton für Debug-Traces -> wird direkt in den HTML-Stream geschieben CHANGE: Validator :Der Validator prüft nun alle Felder mit nicht leeren Werten. Zuvor wurden nur Pflichtfelder geprüft Bugfix: securityGetAcceptedCsvValues : FunKtion securityGetAcceptedCsvValues angepasst: der Schlüssel befindet sich im ersten Element einer csvListe k1:n1,k2,n2,.. |
145 |
147 |
5.5x |
01.06.2014 |
select-box optgroup / colDef-Type stateKeyCondition / hasReadOnlyClientValue & readOnlyClientValue / authDisquised / authDisabled / footer-as-window |
01. Juni 2014: NEU: colDef-Type stateKeyCondition: Setzen eines Status-Wertes (Server-Variable). Set system stateKeyValue (authValidate, authRequired, authHidden, authDisabled, authDisguised). Wenn dieser Typ mit Render-Conditions verknüpft wird (z.B. authRender) dann wird der Status nur gesezt wenn dieses Control gerendert wird. readOnlyClientValue hasReadOnlyClientValue bodyClass footer-as-window : Neue CSS-Option welche den Footer per stylesheet als Fenster darstellt. restoreDisabledDisguisedPagePathPostValues: Neu Restauration von disabled und disguised-Werten auch für Button-Aktionen die keine Validierung auslösen CHANGE: optgroup : Der Typ select rendert ab der ullia-Version 5.5x den optgroup-Tag nur wenn dieser unter colDef DataOptions angegeben wird. -Tag nur, wenn in der csv-colDef-Option "_dataOptions" colgroup definiert wird. (_dataOptions=colgroup) Bugfix: authDisabled : Wenn auf dem Server vormals "disablete" Werte vorhanden sind, dann werden diese bei einem POST-Request restauriert, ggf. vom Client gesendete Werte immer verworfen. authDisquised: Der Originalwert des am Client ausgesternten Wertes wird beim Post-Request restauriert. Falls vom Client ein anderer Wert gesendet wird dann wird dieser übernommen. |
146 |
148 |
5.5y |
09.06.2014 |
button codeBehind: Spezialbehandlung / Default-Value und persistent / updateData / GetEmptyHashByTabDef / IsTypeForPersistState / getCsvQueryInCsvListCount / IsCsvQueryInCsvList / create_guid / u_show_custom_renderkeys / u_show_state_key_values / setTranslation / .hidden / placeholder / optgroup |
09. Juni 2014: NEU: function IsTypeForPersistState(type) -> TRUE wenn 'nicht (button OR buttonList) Modul csvQueryListUtils: function getCsvQueryInCsvListCount (csvQuery, csvList, delimiter=',') gibt die Anzahl der in csvQuery aufgeführten Werte bezüglich der Liste cscList zurück function IsCsvQueryInCsvList (csvQuery, csvList, minMatchCount=1, delimiter=',') prüft ob mindestens minMatchCount -Elemente aus Liste csvQuery in der Liste csvList vorkommen. function create_guid (ns): neues Modul omGuid zum Erzeugen von GUID 's u_show_custom_renderkeys : neue Settings-Option zum Anzeigen der aktuell wirksamen Custom-Render-Keys u_show_state_key_values : neue Settings-Option zum Anzeigen der aktuell wirksamen stateKeys mit den zughörigen Werten function setTranslation (org, new, section='') Funktion zum dynamischen Setzen von Beschriftungen. Verwendung: Wenn z.B. der Button "delete" im deutschen via i18n zu "Löschen" genannt wird, dieser jedoch neben dem Namen auch noch die Anzahl der zu löschenden Datensätze in Klammern dahinter anzeigen soll, dann kann dies mit der Funktion setTranslation('delete', '[[[[::]]]]btn:delete (5)', 'btn'); erreicht werden. CSS-Vendor-Präfix Unterstüztung von [[[[::]]]]input-placeholder und [[[[::]]]]placeholder : Hiermit ist das Styling des html5-Placehoder-Attributs möglich. CHANGE: Tabellenspalte speichern: Nur bei updateData werden beim Speichern fehlende Datenbankspalten nachgelesen. Bei insertData werden fehlenden Spalten aus mit den Default-Wert gefüllt. GetEmptyHashByTabDef: Die Funktion besetzt den tabDef-Hash nun mit den definierten default-Werten, statt diese immer leer zu setzen. css-Definition von .hidden geändert: die ursprüngliche Definition mit display:none sorgt dafür dass z.B. versteckte Buttons input type=submit class=hidden nicht mit der Enter-Taste aus Eingabefeldern gefeuert wurden. Neue Implementation: der Button wird weit oberhalb und links neben dem Fenster positioniert, ist somit ausserhalb des sichbaren Bereiches und damit für den Anwender unsichtbar. optgroup via placeholder : die optgroup in selectboxen wird nun über die colDefOption placeholder gesteuert. -Tag nur, wenn in der csv-colDef-Option "_dataOptions" colgroup definiert wird. (_dataOptions=colgroup) Bugfix: Spezialbehandlung codeBehind buttons : performCodeBehindData wird für Buttons nur aufgerufen wenn diese ausgelöst werden (check via IsTypeForPersistState) Default-Wert: Der Default wird bei get-Aufrufen auch gesetzt wenn persistent aktiviert ist, jedoch kein persist-Wert vorhanden ist. |
147 |
149 |
5.5z |
15.06.2014 |
inplaceEdit / IsDirty |
15. Juni 2014: NEU: inplaceEdit ( Textkorrektur ): Wenn inplaceEdit beendet wird erfolgt ein Aaufruf an die neue Methode inplaceEditFinish. Diese aktualiert die Language-Engine und stößt im Hintergrund eine Recompile an. Hiermit konnte der Folgeaufruf nach dem Beenden von Textkorrekturen knapp eine Sekunde beschleunigt werden. (CSS, Script, Navi und Maintemplates werden asynchron neu gerendert) Neue Client-Funktion IsDirty CHANGE: Script- & Stylecompiler kommentieren die Buildzeit und duration in den Ressourcen. Zusätzlich wird noch die Duration zum ausliefern von ggf. \\\"gecached-ten\\\" Ressourcen ausgegeben. Bugfix: Clickopen in der Navi: wird nur ausgeführt wenn nicht der Client-Status IsDirty gesetzt ist |
148 |
150 |
5.6a |
22.06.2014 |
colDef-Type linkList / codeBehind: inplace-Preview |
22. Juni 2014: NEU: linkList : neuer colDef-Type analog zu checkboxList, radioList wird mit Hilfe des dataProviders ein Liste von href-Links gerendert. inplace-Preview codeBehind: Wenn die Option Berechtigunsbedingugen anzeigen gesetzt ist, dann wird auch codeBehind für Controls angezeigt. CHANGE: codeBehind-Edit : Die zu editierende Funktion wird als erste Funktion des zugehörenden Moduls im Editor Fenster angezeigt. Bugfix: buttonSelector: setState wird wieder unterstützt. (Ist beim vorherigen Bugfix bzgl. codeBehind-Ausführung "abhanden" gekommen) Comment: immediateChildMenuItems : In richtext / CMS unterstützt das ullia-keyword immediateChildMenuItems zum Anzeigen aller Untermenue-Punkte der jeweils aktuellen Seite |
149 |
151 |
5.6b |
29.06.2014 |
filterMenu |
29. Juni 2014: NEU: filterMenu : radioList und checkboxList können mit der colDef-class filterMenu als Menü mit Filterfeld dargestellt werden CHANGE: Bugfix: Comment: |
150 |
152 |
5.6c |
23.07.2014 |
Serverumzug / Lesbos release |
23. Juli 2014: In der Nacht vom 22. auf den 23. Juli wurden sämltliche Domains und Subdomains auf einen neuen Server umgzogen. Dieser Unterstützt die 5.5er Version von php. " Lesbos"-Release NEU: data-pageid im body ergänzt supportsBCrypt mit Verwendung von version_compare (PHP_VERSION, '5.3.7', '>='); function colDef_data_parse ($aColDefHash, $data) hiermit unterstützt getTemplateEditLinks auch codeBehind SQL-Parser: Erweitert um Schlüsselwort [EMPTY] ( muss in der condition am Anfang stehen) familyGroups: neuer "Event-Type" storageGroup storageActivatorGroup Konfiguration Git: Versionsverwaltung Git mit zentralem Repository auf privaten Server eingerichtet CHANGE: Modul umbenannt: omAuthInfo -> omAuthAppInfo OFFENE Implementierungspunke: Wenn via sessionStorage json-elemente ausgetauscht werden, müssen die entsprechenden Teile aktuell eine feste clientId haben -> ToDo: patchen der id-liste ----- open BUGS ---- SQL-PARSER kann aktuell [EMPTY] nur über '' nicht über "" (wird zu \&qote;\&qote;) WHERE Kontaktart=privat AND '' [NE] StrasseHausnummer SELECT
TOP 8 id_,Vorname,StrasseHausnummer FROM appPages:privatAdressen WHERE
Kontaktart=privat AND '' [NE] StrasseHausnummer ORDERBY
StrasseHausnummer ASC SQL-QUERY: BUG wenn TOP n angegeben ist
dann wird eine ORDERBY nur auf die ersten TOP n gefundenen Elemente
ausgeführt, nicht über die Gesamtmenge |
151 |
153 |
5.6c2 |
26.07.2014 |
Erneuter Serverumzug aufgrund von |
26. Juli 2014: In der Nacht vom 25. auf den 26. Juli wurde aufgrund von beobachteten extrem starken Schwankungen bezüglich der Serverrenderzeit ein erneuter Serverumzug durchgeführt. Aktuell scheinen die Renderzeiten nun insgesamt sehr performant, insbesondere dauerhaft stabil performant zu sein. |
152 |
154 |
5.6d |
29.07.2014 |
Anzeige von Servervariablen für berechtigte Anwender / Bugfix codeBehind (emptyControl) |
29. Juli 2014: Berechtigte Anwender können sich die Werte für post_max_size, upload_max_filesize und max_execution_time sowie die Weitere Werte über authInfo_ServerVariables anzeigen lassen Bugfix: Bei Buttons welche aufgrund von authConditions nicht gerendert werden, wird ggf. ein leeres Platzghalter-Element (li) gerendert um dieses ggf. per Ajax einzublenden. Hierbei wird intern der Typ von Button auf emptyControl umgestellt. Bugfix-Change: Für Elemente vom Typ emptyControl wird codeBehind nicht mehr durchgeführt. |
153 |
155 |
5.6e |
03.08.2014 |
Anzeige von Servervariablen für berechtigte Anwender / Bugfix codeBehind (emptyControl) / subFormControls / appId / getCachedAppContent |
03. August 2014: Berechtigte Anwender können sich die Werte für post_max_size, upload_max_filesize und max_execution_time sowie die Weitere Werte über authInfo_ServerVariables anzeigen lassen NEU: Neuer colDef-Type subFormControls : Dieser fasst die bisherigen Typen dsnTabControlsFieldset und dsnTabInputFormular zusammen. Die Unterscheidung der Ursprünglichen Typen geschieht durch Setzen des noLabel colDef-Atrributs (dsnTabInputFormular), mit Label wird dsnTabControlsFieldset gerendert. Subforms können nun auch via codeBehind definiert werden, Beispiel siehe singlePageApp function appId : gibt eine anwendungsspezifische eindeutige Kennung von appName zurück. function getCachedAppContent : erweitert den Key (name) von getCachedContent um die appId Bugfix: findDefinitionRow: Fehlerhaften Abbruch in Rekursion behoben |
154 |
156 |
5.7. |
10.08.2014 |
Introducing ullia git |
10. August 2014: ullia with Git NEU: ullia und Git Einführung der Sourcecodeverwaltung Git für Ullia mit der Version 5.7 und Umstellung des lokalen Workspace auf das neue zentrale ullia-repository (Privat via "Own Cloud"). |
155 |
157 |
5.7a |
17.08.2014 |
delSysState / IsPreFormated / textarea & codeBehind / position:sticky |
17. August 2014: NEU: function delSysState : entfernt den sysState-Key mit zugehörenden Value textarea unterstüzt nun auch codeBehind und kann somit hierüber auch als output -Bereich verwendet werden condition
colDef: Die Control-Definition von Seitenelementen können sich
berechtigte Anwender per Ajax-Dragwindow angezeigen lassen (Notwendige
Settings-Option: u_inplace_authconditions). position:sticky : Der Stylecompiler unterstützt nun den browserspezifischen Vendor-Prefix für Chrome. Firefox unterstüzt diese CSS3 Eigenschaft ab Version 29 via Aktivierung über about:config und ab Version 32 standardmäßig. Im Chrome werden hiermit auch feststehende Tabellen-Köpfe und -Footer unterstützt. In Chromium-Browsern ist Sticky-Freischaltung über chrome://flags/#enable-experimental-web-platform-features zuvor freizuschalten, hierzu den URL chrome://flags/#enable-experimental-web-platform-features aufrufen und dann „Experimentelle Webplattformfunktionen” aktivieren Bugfix: minify wird abgeschaltet, falls "Pre-Formated content" gerendert wird. Dieses kann intern mit der Methode setSysState (' IsPreFormated ', '1'); gesetzt werden. option
useSSL: Endlos-Redirect behoben. Wenn unter einer bestehenden
HTTPS-Verbindung useSSL=false gesetzt wurde, dann wird auf die
entsprechende http-Seite umgeleitet. Falls diese eine Seite vom Type
forcePageSSL ist, dann lenkte diese wiederum auf die entsprechende
https-Seite um usw....) Lösung: ein explizit gesetzer useSSL-Wert
wird auf dem Server zwischengespeichert und falls vorhanden beim
redirect zwischen http & https mit als url-Parameter ergänzt. Somit
kann die Zielseite entsprechend reagieren und weitere redirects korrekt
terminieren. CHANGE: Die Ausführung von codeBehind wird im Konfigurationsmode (u_configuration_mode gesetzt) immer unterdrückt . |
156 |
158 |
5.7b |
24.08.2014 |
data-placeholder / colDef-Name ohne Underscore |
24. August 2014: NEU: data-placeholder : beim Type subFormControls bewirkt die Option placeholder das rendern des Attributs data-placeholder im umschließenden Container (Default: im LI-Tag). Hierdurch kann per CSS z.B. via content-before oder -after eine Beschriftung für das Sub-Control vorgenommen werden. CHANGE: colDef-Name : colDef-Namen werden nun zusätzlich auf das Zeichen Underscore (_) geprüft. Diese wird ggf. in ein Minuszeichen (-) ersetzt. Insgesamt in Minuszeichen ersetzte Zeichen sind: #, :, _ und das Komma (,) |
157 |
159 |
5.7c |
31.08.2014 |
default create Button-Action: selfPerform / distributeTo, collectFrom |
31. August 2014: NEU: collectFrom und distributeTo: zunächst als Event GRP innerhalb von familyGroups angelegt. collectFrom : Definiert für ein Element das zusätzliche Einsammeln von referenzierten Elementen. Anwendungsbeispiel: Gruppierung von mehreren Buttons innerhalb eines gemeinsamen Parent-Elements. distributeTo : Verteilt die erzeugten Einzel-Controls auf die angegebenn Elemente. Anwendungsbeispiel: Accordion-Effekt: Die Bestandteiler einer radioList werden auf die angegebenen Elemente aufgeteilt ( distributiert ). CHANGE: colDef- Type button : beim Anlegen eines Button-Controls wird die Default-Action bei leerem data Attribut auf selfPerform gesetzt. |
158 |
160 |
5.7d |
07.09.2014 |
eventFamGrp / dsn:tab@otherDbDomain |
7. September 2014: NEU: eventFamGrp : Neuer sysState-Wert welcher beim ajaxPartialUpdate das famGrp-Ziel des auslösenden client-Events beinhaltet. Verwendung : subFormControls können via SQL aus Datentabellen-Definitionen erzeugt werden. Wenn das hierzu formulierte SQL eine WHERE-Klausel enthält, dann werden die erzeugten Controls mit den Werten der durch die WHERE-Bedingung selektierten Datenspalte belegt. Bei einem POST-Request (z.B. bei einem Klick auf einen Speichern-Button) sollen jedoch die POST-Daten verwendet werden. Die Unterscheidung von POST und GET reicht hier leider nicht aus, da auch ajax-Request in der Regel per POST mit dem Server kommunizieren. Die aktuelle Lösung hierzu: Wenn ein subFormControl durch ein SQL mit WHERE-Bedingung definiert ist, dann werden die Werte nur verwendet, wenn ein GET-Request erfolgte oder die familyGroup des subFormControls das Ziel von eventFamGrp ist, oder kein Ziel angegeben ist (eventFamGrp= leer ) NEU: dbDomain Unterstützung im SQL-SELECT via aSql['dbDomain'] oder mit @ als FROM-Suffix. Beispiel : SELECT id_,ID,de FROM translation:webAppTranslation @otherDbDomain Anwendung: subFormControls konnen hiermit auch domainübergreifend verwendet werden. Aktuelle Einschränkung: zunächst nur für den WebMaster erlaubt. Bugfix: Page-Type cmsContent setzt nun den notwendigen pageDefTable sowie das rendertemplate. Beim Ändern des Page-Types werden nun alle Typen der zugehörigen Child-Pages geprüft und falls notwendig werden diese auf den vorherigen Page-Type gesetzt. Notwendig ist dies, da sich die Page-Typen auf die Childs vererben und in den Childs nur der Pagetype gesetzt wird, wenn sich dieser vom Parent-Pagetype unterscheidet. IsValid: Aufgrund der bisherigen Syntax wurde nur ein einziger IsValid-Wert unterstützt. Durch die Einbeziehung des Kontrol-Namens (ControlName) werden nun mehrere IsValid Ausdrücke unterstützt. Syntax: sysStateKeyVal_IsValid_ ControlName -ulliaSys_TRUE |
159 |
161 |
5.8. |
18.02.2015 |
u_show_section_outline / u_showdublicatemessages / webtools lorem-ipsum / pageLevel = GetPageLevel() / PathSequence-n / Accept-Header |
18. Februar 2015: NEU: u_show_section_outline : Neue Admin-Edit Option. Verwendung : Um die Zuordnung von Custom-Rendering Elementen besser beurteilen zu können, werden hiermit die li-Abschnitte mit einer umrahmt (aktuell mit einem gepunkteten roten Linie). u_showdublicatemessages : Standardmäßig werden doppelt vokommende Fehler, Warnungen und Infos nur jeweils einmal pro Request dargestellt. Wenn diese Option gesetzt ist, dann werden auch mehrfach auftretende Meldungen angezeigt. webtools loremIpsum : neue Datenbank webtools unter all_applications angelegt und dort die Tabelle loremIpsum bestehend aus (id,head,content) angelegt: Verwendung: aus dieser kann lorem-ipsum Blindtext für Mokups ausgelesen werden. Beispiel : ein dataTableList-Control mit dataBind="SELECT CACHED TOP 7 * FROM loremIpsum" und ein passend hierzu definiertes Template (z.B. template_loremIpsum) anlegen und schon werden sieben Abschnitte mit Blindtext gerendert. pageLevel_n: Die Funktion GetPageLevel() liefert die aktuelle Tiefe des Brotkrumenpfades zurück (0 = root, 1=pageLevel_1 (erste Unterseite, usw.) Ullia setzt zu Beginn der Request-Verarbeitung den internen System-Status pageLevel. Dieser kann somit beim bedingten Rendering als Bedingung verwendet werden (ulliaPageLevel). Beispiel : In der dritten Ebene (pageLevel_2) ist die Zustandsvariable sysStateKeyVal_pageLevel-ulliaSys_2 gesetzt. PathSequence - n : Die n-te Anfangssequenz der jeweils aktuellen Seite bis einschließlich dem n-ten Abschnitt (n = 1, 2, 3, ...). Zum Bilden von URL's zur n-ten Sequenz muss noch HttpPerform vorangestellt werden. HttpPerform/PathSequence-1: mit PathSequence-1 wird der Anfang des aktuellen Brotkrumenpfades bestimmt, HttpPerform/PathSequence-2 entspricht dem Brotkrumenpfad bis zum zweiten Level Http-Header : AppInfo erweitert um die Ausgabe von Accept und acceptEncoding |
160 |
162 |
5.8a |
28.02.2015 |
E_UNEXPECTED_DISABLED_BUTTON / image-button / executePagePathList / alwaysExecuteNavPath |
28. Februar 2015: NEU: E_UNEXPECTED_DISABLED_BUTTON : Vor dem Ausführen von Buttons wird nun geprüft ob diese disabeled waren. Falls ja wird der Fehlercode E_UNEXPECTED_DISABLED_BUTTON ausgegeben und die zugehörige Button-Aktion nicht ausgeführt . executePagePathList : Jeder Navigationspunkt kann nun bei jedem Request ausgeführt wrerden. Hierzu wird der navType auf alwaysExecuteNavPath gestellt. Beim compilieren der WebApp bildet Ullia eine Liste aller Navi-Punkte vom navType alwaysExecuteNavPath und führt diese bei jedem Request mit aus. Bugfix: image-button ( input type=image ): bugfix, der entstehende Suffix _x wurde nicht korrekt behandelt html-minify : Leerzeichen werden nun weniger aggressiv entfernt. Hierduch bleiben Worte die durch inline-tags wie z.B. strong getrennt sind auch nach dem minify optisch durch ein Leerzeichen getrennt. |