Features¶
Note
We are working on the new documentation website, based on markdown files (md) and generated using awesome MkDocs generator tool
Upcoming Release¶
Not released, yet
2024/03¶
NEWToggle Visibility of Children Tab Columns
AppGiniHelper.dv.getChildrenTabs().enableToggle();NEWScrollable Table with sticky header
AppGiniHelper.tv.addStickyButton();NEWTheming
AppGiniHelper.getNavbar().setColor(AppGiniNavbarColors.officeBlue());
2023/05/13¶
NewNew featurechildrentab.addPanel(VerticalPosition.Top)NewNew featurechildrentab.addPanel(VerticalPosition.Bottom)NEWNew featureDV.getChildrenTabs().waitForTab(...)executes a callback function after dynamically loaded childrentab exists.
2023/02/25¶
NEWNew featureDV.getFields(...).include(...)allows us to add fields to an existingAppGiniFieldscollection.NEWNew featureDV.getFields(...).exclude(...)allows us to remove fields from an existingAppGiniFields-collection.NEWNew featureDV.getField("fn").include(...)converts anAppGiniField-object (single field variable) into a multi-fieldAppGiniFields-object (multiple fields container)
2023/02/22¶
NEWAdded support forAppGiniHelper.DV.getField("textarea_field").toStatic()NEWAdded support forAppGiniHelper.DV.getField("date_field").toStatic()NEWAdded support forAppGiniHelper.DV.getField("richtext_field..").toStatic()
2023/02/14¶
-
NEWDisable/enable input- and lookup-controlsAppGiniHelper.DV.getField("name").disable()AppGiniHelper.DV.getField("name").enable() -
NEWAdd custom buttons to fields (field-toolbar)
AppGiniHelper.DV.getField("...").getToolbar().add(...)
2023/02/09¶
NEWControl debugging-/logging-level
AppGiniHelper.setDebug(DebugLevel.Debug);
2023/02/08¶
NEWAppGiniHelper. DV.showOverlay(text)NEWAppGiniHelper. DV.showOverlay(html, true)NEWAppGiniHelper. TV.showOverlay(text)NEWAppGiniHelper. TV.showOverlay(html, true)
2023/02/07¶
NEWDV.getField("...").autoDisableButtons()
Disable "eye"-buttons next to empty lookupsNEWDV.getField("...").autoHideButtons()
Hide "eye"-buttons next to empty lookupsNEWAppGiniHelper. DV.replaceViewIcons("icon")
Change icon of all "eye"-buttons in Detail ViewNEWAppGiniHelper. DV.replaceViewIcon("TABLENAME", "icon");
Change icon of "eye"-buttons per table in Detail ViewNEWAppGiniHelper. DV.replaceViewIcon("TABLENAME", "icon", "caption")
Change icon of "eye"-buttons and append button caption per table in Detail View
2023/02/01¶
UPDAppGiniHelper. DV.getField("email-fieldname").toStatic()
Automatically disables and hides the 'pencil'-button for editing Email-field valuesUPDAppGiniHelper.getCommon().autoReload()
3rd (boolean-) parameter controls automatic fade-out of nabvar after 5 seconds of inactivity.
2023/01/04¶
NEWDV.getFields([...]).toColumns()
Method got an additional parameter for adding a custom label.
Additionally, the appearance of lookups has been improved slightly.
See also: Bugfix for lookups
Release 2022/12¶
NEWLayout Fields in Columns
This allows you to accurately arrange fields and their labels in columnsNEWConditional Notifications in Detail View
allows you to toggle visibility of custom notifications, for example alerts, depending on custom conditions-
NEWCustom user settings Browser Settings, stored in Browser (localStorage) with autogenerated UI -
NEWFIX for Detail-View-Problem with required fields on Cancel-click and Delete-click
See here NEWDetail View / Insert-Mode or Edit-Mode
Detect Mode (insert/update)NEWDetail View / Get the primary key (id) of current record
Get Primary Key (ID)NEWTable View / Styling cellsNEWTable View / AutoSize columnsNEWTable View / toLookupButton()NEWTable View / toLookupButtonModal()NEWTable View / copy cell value buttonsNEWCustomization of Quicksearch-
NEWtv.autoFitRowHeader()changes width of first column.
Useful if you have added links or buttons usingtv.addLink()ortv.addButton() -
NEWRight-align numeric input / 3rd Parameter dv.getField("value").toNumber("de",2, true);dv.getField("value").toNumber("de",2, false);NEW.insertXXX()functions now also work on multiple fields for example if you want to add multipe horizonal lines<hr/>above multiple fieldsdv.getFields(["field1", "field2", "field2"]).insertAbove().hr();- In the past this was only possible for a single field using
dv.getField("field1").insertAbove().hr(); -
This applies to
insertAbove(),insertBefore(),insertAfter(),insertBelow() -
NEWAppGiniHelper.LV.redirectRegistration("url"); NEWAppGiniHelper.LV.redirectRegistration("url", "target");-
NEW(experimental)dv.autoCalcTabsHeight();- When using custom tabs, this function will automatically get the maximum height of all existing custom tabs and apply that height to all tabs. This may result in a better UI with less scolling when activating a different tab
-
NEW(experimental)tv.autoPanning()- Automatically scroll down long pages (visible) page by page
-
NEWdv.getActionButtons().getAdminButton().fix("icon", Variation);
1 2 3 4 | |
-
See origin https://forums.appgini.com/phpbb/viewtopic.php?p=17962#p17962
-
NEWauto-hiding AppGini's default submit button which sometimes appears at the top of the page
could be obsolete now since latest AppGini version
RELEASE 2021-07¶
-
NEWdv.getField("inputfield").lock(true);// true|false- adds a lock-button next to field
- applies to simple
<input/>fields, only
-
NEWdv.getChildrenTabs().hideTabs(); NEWdv.getChildrenTabs().showTabs();-
NEWdv.getChildrenTabs().compact(5);- decreases the padding inside children-tab-captions to get more space. Useful escpecially if you habe many children-tabs
-
NEWdv.getChildrenTabs().sort( ["tablename1", "tablename2", "..."], true, true );- parameters:
1 2 3 4
1. array of table names 2. boolean: auto activate first tab 3. boolean: auto hide tabs on load, then auto-show tabs after sorting * TODO: Validate and Test this function
- parameters:
-
NEWdv.getChildrenTabs().append( ["tablename98", "tablename99", "..."], true); -
NEWdv.getChildrenTabs().get("tn", "cn").removeButtons();- removes the default "open modal" button
-
UPDcommon.autoRedirect(true);- By passing true the auto redirect function will also work if we have a referrer, for example when navigating between aan unrestricted page and a restricted page, not only when opening up a new broser tab.
- For backward compatibility, the default value is "false".
-
NEWdv.getChildrenLinks().hide(); -
NEWdv.getChildrenLinks().removeHR(); -
NEWget dv action buttons and modify them:- dv.getActionButtons().getSaveButton() ...
- dv.getActionButtons().getDeleteButton() ...
- dv.getActionButtons().getBackButton() ...
- dv.getActionButtons().getInsertButton() ...
- ... .hide();
- ... .show();
-
NEWdv.getFields(["field1", "field2", "..."]).hideLabels(); UPDbetter dropdown button style fixNEWtab.addButtonNEWtab.addButtonOpenNEWtab.addButtonOpenModalNEWtab.addLinkNEWtab.addLinkModalNEWtab.addBadge(123); // numberNEWtab.addBadgeIf(condition, number); // condition: boolean, number: numeric-
NEW(experimental) Modification of children tabs (bottom area of DV) var tabs = dv.getChildrenTabs(); var tab = tabs.get("tablename"); var tab.label("New Tab Caption"); -
NEWTV.getCells("fieldname"); Example TV.getCells("name").addClass("danger"); -
NEWTV.addButton callback function now receives two parameters: 1st: pk / primary key of that row 2nd: data / all values of that row -
NEWTV.addButton new 5th parameter onBeforeRender for very flexible customizationExample: AppGiniHelper.TV.addButton( function (id, data) { } , "shopping-cart" , "Kaufoptionen" , Variation.default , function (id, data) { // your code here data.text = "text"; // custom text for this row data.icon = "cog"; // custom icon for this row data.variation = Variation.primary; // custom variation for this row data.skip = false; // when skip=true the button will NOT be rendered } )
-
NEWcommon.fix() now fixes and moves the new "Import CSV" button to the right
TODO JSE
NEWcommon.navbar.expand(); removed the gap between last button and right margin in navbar caused by a min-width styleNEWget and use translated labels from language.php (server) in javascript (client) var text = AppGiniCommon.T["key"]; Example: in language.php (serverside) there is a translation: 'save changes' => 'Save changes', you can use this translation in javascript (clientside) for example for custom buttons var text = AppGiniCommon.T['save changes']; Tip: You can make it even shorter const T = AppGiniCommon.T; var text = T['save changes'];
RELEASE 2020-10-26-1¶
NEWAppGiniHelperHideVersionInformationNEW(Experimental) email fieldsNEW(unsupported, experimental) AppGiniHelper. TV.linkParent("fk_col_name", "master_table")NEW(unsupported, experimental) AppGiniHelper. TV.linkSelf()-
NEW(experimental) replace default checkboxes in table view by custom characters AppGiniHelper.Defaults.tv_replaceCheckboxes = true; Find your own characters for example here: https://www.amp-what.com/unicode/search/check -
NEWAppGiniHelper.currentUserName NEWAppGiniHelper.currentTableNameNEWAppGiniHelper. DVNEWAppGiniHelper. TV-
NEW(Alpha) On submit/leaving a deail view: loading-effect see also: https://forums.appgini.com/phpbb/viewtopic.php?f=13&t=3476 AppGiniHelper.Defaults.onLeave = "blur"; AppGiniHelper.Defaults.onLeave = "hide"; AppGiniHelper.Defaults.onLeave = ""; // any other value -
NEWvar tv = AppGiniTableView.getInstance(); -
NEWvar dv = AppGiniDetailView.getInstance(); avoid duplicate initilization of AppGiniDetailView or AppGiniTableView If, for example, someone initializes new AppGiniDetailView() in header-extras.php AND tries to inizialize another new AppGiniDetailView() in TABLENAME-dv.js, there will be an exception. Correct usage: in header-extras: var dv = new AppGiniDetailView(); later on in TABLENAME-dv.js: var dv = AppGiniDetailView.getInstance(); Tip: If you are not sure, replace all new AppGiniDetailView() by AppGiniDetailView.getInstance() This is the same for AppGiniTableView.getInstance(); -
NEWadd one or more footer-panels below dv form var f1 = dv.addFooter(); f1.append("Hello bold world"); -
NEWIn children-tabs (below dv form) replace buttons: instead of opening up a modal edit dialog, open up the details in the same page Syntax: replaceButtons("icon", "size", "target") dv.getChildrenTabs() .replaceButtons("cog", "btn-block") .setMaxWidth(32); SetMaxWidth will size the first column for better UI Examples: dv.getChildrenTabs().replaceButtons("cog", "btn-block btn-primary", "_blank"); -
NEW(Experimental) Move children links below the detail view form var dv = new AppGiniDetailView(); dv.getChildrenLinks().moveToBottom() -
NEW(Experimental) panel left of table view and panel right of table view for custom links or buttons var tv = new AppGiniTableView(); var left = tv.getLeftPanel("Left Panel"); var right = tv.getRightPanel("Right Panel with formatted Header"); // configure widths of left panel, table (center) and right panel tv.setPanelWidths(0, 12, 0, BootstrapSize.xs); tv.setPanelWidths(0, 12, 12, BootstrapSize.sm); tv.setPanelWidths(0, 9, 3, BootstrapSize.md); tv.setPanelWidths(0, 7, 3, BootstrapSize.lg); right.addLink("Karte", "partners_map.php", "map-marker"); // add links to tv-panel // panel.addLink("text", "href", "icon") left.addLink("Kunden", "partners_view.php?tp=Kunde", "filter"); // add a button executing javascript left.addButton("My custom button", function () { }, "cog"); // add a text-only item to panel left.addDivider("Filter"); -
NEW(Experimental) Listen to checkbox-check in table view Note: does NOT support check all/uncheck all, yet var tv = new AppGiniTableView(); tv.onSelectionChanged(function (selection) { console.log(selection); }); -
NEW(Experimental) AppGiniHelper. Defaults.childrenTabsAutoExpand = true | false; true: (default) on load of detail view children tabs (at the bottom of dv page) will expand automaticaly -
NEW(Experimental) AppGiniHelper. Defaults.childrenTabsAutoBadges = true | false; true: (default) after load of detail view the number of records will be shown in tabs -
NEW(unsupported, experimental) Preparations for new AppGiniHelper-Inline-Editor (TV) (requires additional serverside product) -
NEW(unsuported, experimental) Preparations for new AppGiniHelper-LIVE functions (requires additional serverside product)AppGiniCommon().live() AppGiniTableView().live() AppGiniDetailView().live()
-
NEWAppGiniUrl.get("tablename"); // tablename_view.php NEWAppGiniUrl.get("tablename", 123); // tablename_view.php? SelectedID=123NEWnew AppGiniTableView().setTitle("text");NEWnew AppGiniTableView().setTitleHtml("html text");NEWnew AppGiniTableView().addTitle(" of " + variable);NEWnew AppGiniTableView().addTitleHtml(" of " + variable + "");-
NEW(Experimental) AppGiniHelper. Defaults.fixFieldMargins = true | false; true: vertical gaps between fields will be removed as good as possible after load false: no change -
NEWalign field labels above field-
dv.getField("fieldname").wrap(); -
Alternatives:
1 2
* `dv.getField("fieldname").wrap(true);` * `dv.getField("fieldname").unwrap(false);`NEWalign field labels left of fielddv.getField("fieldname").unwrap();
-
Alternatives:
1 2
* `dv.getField("fieldname").unwrap(true);` * `dv.getField("fieldname").wrap(false);`NEWhide/show tabs with all fields
-
1 2 3 4 5 6 | |
NEWfadeOut/fadeIn tabs with all fields
1 2 3 4 5 6 | |
-
NEW(Experimental)new AppGiniField("fieldname").size(2); -
NEW(Experimental)new AppGiniFields(["field1", "field2", "..."]).toNumber("de-DE", 2); -
NEW(Experimental)new AppGiniField("fieldname").toNumber("de-DE", 2);ordv.getField("fieldname").toNumber("de-DE", 2); -
NEWRemoves all links from table view cells. This may be useful in combination with addButtonOpen()
1 2 3 | |
RELEASE 2020-04-30-08¶
-
NEWnew AppGiniField("fieldname").insertBefore().div("inner", "classes"); -
NEWnew AppGiniField("fieldname").insertBefore().span("inner", "classes");- Same for:
1 2 3 4 5 6
* .insertAbove() * .insertBelow() * .insertBefore() * .insertAfter() * .insertPrepend() * .insertAppend()NEWvar tabs = dv.getTabs();-
NEWdv.getTabs().setPosition(TabPosition. Top);-
Position:
-
TabPosition.Top | TabPosition.top | "top"
- TabPosition.Bottom | TabPosition.bottom | "bottom"
NEWShortcut function for quickly getting field handlesvar id_field = new AppGiniDetailView().getField(fieldname);
-
- Same for:
-
NEWnew AppGiniDetailView().getChildrenLinks().removeIcons(); -
NEWnew AppGiniDetailView().getChildrenLinks().replaceIcons(); -
NEW(Experimental)new AppGiniDetailView().autoCompleteOff(); -
NEWchange login form:new AppGiniLoginView().fix();
1 2 3 | |
NEWfade in / fade out field
1 2 3 | |
-
NEWfade in / fade out multiple fields-
new AppGiniFields(["fieldname1", "fieldname2"]).fade(true); -
new AppGiniFields(["fieldname1", "fieldname2"]).fade(false);
-
-
NEW(unsupported, requires more testing and feedback) .addShortcut() function on AppGiniDetailView and AppGiniTableView allows to define keyvboard shortcuts for focusing inputs-
Syntax :
new AppGiniTableView().addShortcut("fieldname", keycode, CTRL) -
Example:
new AppGiniTableView().addShortcut("appginihelper-navbar-search-input", 70, true); // CTRL+F sets focus on jQuery ("#appginihelper-navbar-search-input")
-
-
NEWoptimize screen-usage by widening table view:new AppGiniTableView().compact(); -
NEW.ready callback now also available for AppGiniTableView:new AppGiniTableView().ready(function(){ ...your code here... }); -
NEWnewtv.addOpenButton()function as a shortcut for new AppGiniTableView().addButton- This will add a button in the first column of table view which opens the record in detail view.
-
NEWAdd icons to default lookup buttons
1 2 3 4 5 6 7 8 | |
-
NEWchange icon of lookup buttons (view parent / add new parent)new AppGiniField("partner_id").dropdown().fix("pencil", "plus");- parameters
1 2 3
1. glyphicon name for view button 2 - glyphicon name for add button 3 - (optional) remove variant from add (boolean true|false)
- parameters
-
NEW(unsupported) onChange-Handler for lookup now additionally sends the fieldname to the callback
1 2 3 4 5 6 7 8 | |
-
NEWchange design of buttons next to lookup dropdowns...-
for a single dropdpwn:
new AppGiniField(fieldname).dropdown().fix(); -
for all dropdowns of a dv:
new AppGiniDetailView().fixDropdowns(); -
for a group of dropdpwn fields:
new AppGiniFields(["fieldname1", "fieldname2"]).fixDropdowns();
-
-
NEWdesign fix for image fields: TABLENAME-dv.js /new AppGiniField("fieldname").fix();- applies to image fields only
-
NEW(BETA) When following a link (eg from email) and you are not logged in, AppGini will redirect you to login page after 2 seconds. After logging in you will be redirected to index-page, not to the entry-page. This behaviour can be changed now with the following command:
1 | |
1 | |
-
NEW(Experimental / BETA) TableView: Merge identical cells (in column)-
tv.merge(["field1", "field2"]); -
or
tv.merge("field"); -
Attention: cannot be combined with group-function because group adds additional rows which cannot be merged
-
-
NEW(BETA) Tableview: Group rows. TODO: test-
new tv.group("product_id", false, false); -
Parameters
1 2 3
* fields: string | string[] * accordion: boolean = true * autoHide: boolean = trueNEWaddLayout(...).add(..., [ "#Headline" ])- will add a class "appginihelper-layout-header" now for further css customization
-
-
NEWAutomatically select text in quicksearch field for easy overwriting.- This is extremely helpful for barcode-scanning for example
- Syntax: Globally enable it for all tables in
hooks/header-extras.phpwith: newAppGiniTableViewQuicksearch().autoselect(Autoselect.all);
Enable it for a single table in
hooks/TABLENAME-tv.json document ready with:new AppGiniTableView().quicksearch().autoselect(Autoselect.all);- Others:
1 2 3
* .autoselect(Autoselect.start) * .autoselect(Autoselect.end) * .autoselect(Autoselect.range, start, len) // start: 1-based index, len = length of selection, for example Searchstring = "+49 431 / 12345-67". .autoselect(Autoselect.range, 17, 2) will select the _type "67"NEW(UNSUPPORTED) AutoComplete off for quicksearch- This may not work in all browsers.
-
NEWnew AppGiniCommon().fix().navbar(); -
NEWnew AppGiniCommon().fix().dropdowns(); -
NEW(UNSUPPORTED): turn top navbar to the left hand side (sidebar):new AppGiniCommon().navbar.fix().toLeft(true);- parameter
1 2
* true = also on homepage * false (default) = not on homepageNEWTabs in detail view:new AppGiniDetailView().addTab("tab-name", "Title", "icon").add(["field1", "field2", "field3"]);
- parameter
-
NEWshortcut for (collapsible) layout-rows with variations:new AppGiniDevailView().addLayout(widths[], title, canCollapse, isCollapsed, variation)
-
NEWLink-Buttons in table view:new AppGiniTableView().addLink("http://...", "icon", "text", Variation.default, "Confirmation prompt - Are you sure?");
-
NEWButtons in table viewnew AppGiniTableVire().addButton(callback, "icon", "text", Variation.default); -
NEWGet custom title of detail view:-
dv.getTitle(); -
After (!) you have used
dv.setTitle("...")once, you can use.getTitle()to get the text-value (without html-formatting)
-
-
NEWget name of current table in table viewAppGiniTableView().getTableName();
-
NEWget name of current table in detail view:AppGiniDetailView().getTableName();
-
NEWfix some UI for image fields:-
new AppGiniField("imagefield").fix(); -
May be obsolete now
-
-
NEWlayout rows now expandable with title:-
dv.addLayout([widths], "title", true|false, true|false, Variation.default); -
parameter 3: expandable true|false
- parameter 4: expand by default = true
-
-
NEWnew AppGiniCommon().setHeight(48); -
NEWnew AppGiniCommon().setColor(bg, fc); -
NEW(UNSUPPORTED)common.navbar.toLeft();- Use it, if it meets your requirements.
- There will be no support for this function
-
NEW(UNSUPPORTED)common.navbar.removeProfile(); -
NEWtoDatepicker for 2-AppGiniFields as date-range-selector NEWcollapsible panels: doubleclick closes other open panelsNEWtoDropdown(["a", "b", "c"])NEWtoMembersDropdown()NEWtoGroupsDropdown()NEW.showTypes()for debugging purposesUPDinline()function now also working for smaller display sizesNEWcollapsible panels: new parameter expand by defaultNEWcollapsible panelsNEWdv.setTitle(text, classes)NEWdv.setVariation(Variation.default)NEWicons for ActionButton-groupsNEWcss-class for ActionButton-groupsNEWvar id = DV.getSelectedId();NEWActionButtons: move from top-right into tabsNEWplaceholdersNEWAppGiniFields([f1, f2, ...]).inline(label, [w1, w2, ...])functionsNEWshowBadgesNEWappendIcon/prependIcon append/prepend icons to input controls and static controlsNEWappend/prepend icons and/or text to input controls and static controls-
NEWdv.childrenTabs.showBadges();// attention: requires regexp- obsolete since AG 22.11
-
NEWAppGiniField:.toText()turns<input/>'s type to "text" -
NEWAppGiniField:.toPassword()turns<input/>'s type to "password".- ATTENTION
1 2 3
* THIS IS NOT SECURE * PASSWORD CAN STILL BE UNCOVERED * ONLY USE IT IN A SECURE ENVIRONMENT-
NEWonChangeevent for many datatypes-
missing
-
timestamp
- image
- upload
- google map
-
youtube video
- only event without data
-
tiny blob
- blob
- medium_blob long_blob
-
-
- ATTENTION
-
NEWbadges in tabs NEWcompact modeNEWwidth of tabsNEWbutton sizingNEWactionbutton container sizingNEWmulti-column-layout /resizeLabels();NEWmulti-column-layout /wrapLabels();