Gyroscope / Tab Functions
Gyroscope uses keys to uniquely identify each tab, so that the same record
view is opened only once.
Tab keys are usually mapped to record IDs in the database. For example,
"tenant_17" is the tab key for the tenant record whose record ID is 17. The
tab for creating a new tenant is simply "tenant_new". This ensures that only
one new tenant tab is open at any time.
Four tab operations are defined in
tabs.js.
addtab (key, title, params, loadfunc)
reloadtab (key, title, params, loadfunc)
showtab (key)
closetab (key)
To display the record details of Tenant #23 in a tab, use the addtab function:
addtab ('tenant_23', 'John Smith', 'showtenant&tenantid=23');
In the above example, tenant_23 is the key, and the display title for the tab is
"John Smith". A server-side handler message "showtenant" is sent with the
parameter tenantid=23.
In practice, the ID value and title are dynamically generated:
addtab ('tenant_<?echo $tenantid;?>',
'<?echo $tenantname;?>',
'showtenant&tenanted=<?echo $tenantid;?>');
The loadfunc parameter is optional; it points to a JavaScript function that is
called when the tab content is successfully loaded.
addtab('tenant_new', 'tenant_new', 'newtenant',
function(){
gid('tenant_fname_new').focus();
}
);
If a tab is already displayed, addtab will exit without sending a server
request; if a tab is not yet loaded, reloadtab won't load the tab. We can
combine these properties to force reload a tab, present or not:
reloadtab ('tenant_23', 'John', 'showtenant&tenantid=23');
addtab ('tenant_23', 'John', 'showtenant&tenantid=23');
It's important to call reloadtab before addtab as their omission conditions
cancel each other out, and their active functions complement each other.
Starting Version 3.2, the add and reload tab functions support
extended features:
addtab (key, title, params, loadfunc, data, opts)
reloadtab (key, title, params, loadfunc, data, opts)
All XHR requests are sent via POST, and the data parameter carries the
POST data if supplied.
The opts argument is an optional array.
As of 3.2, the tab system supports
two special flags:
noclose: remove the close icon from the tab
newkey: assign a new tab key during tab reload
An example:
reloadtab('welcome','Welcome','wk',null,null,
{noclose:true, newkey:'welcome_1234'};
In previous versions of Gyroscope (<3.2), creating a new record involved
closing a tab and opening a new one, using a blocking XHR call. The rekey
function enables record creation with the reloadtab function, which supports
POST and asynchronous loading.
Starting 5.9.1, the rekey parameter is dropped in favor of server response header. Record adders should contain the following lines:
header('newrecid:'.$newid);
header('newkey:client_'.$newid);
Server header response can also override the tab title:
header('newtitle: Test');
In addition,
reloadtab detects the
apperror header. If the error is present, the tab reload will abort without losing its current content.