Introduction
Client-side API is used in WebMail plugins when it's necessary to have some interface changes, e.g. add another user setting screen, modify menu layout, etc.
Plugin architecture
To invoke client-side API, it's necessary to create 2 directories under data/plugins/plugin-name-here dir, called js and templates. They'll hold JavaScript files and HTML templates, respectively.
Let's assume the plugin is called my-custom-plugin, and the plugin class name is CMyCustomPlugin. We'll create data/plugins/my-custom-plugin/index.php file with the following content:
class_exists('CApi') or die();
class CMyCustomPlugin extends AApiPlugin
{
/**
* @param CApiPluginManager $oPluginManager
*/
public function __construct(CApiPluginManager $oPluginManager)
{
parent::__construct('1.0', $oPluginManager);
}
public function Init()
{
parent::Init();
/* This is where JS files and HTML templates are included */
$this->AddJsFile('js/include.js');
}
}
return new CMyCustomPlugin($this);
Including files
Under Init function, the following functions can be used to include JS files and HTML templates:
AddJsFile Includes JavaScript file. Parameters: $sJsFileName (string) — relative file path
AddTemplate Includes HTML template. Parameters: $sTemplateName (string) — template name for referencing in JS files. Will be prefixed with 'Plugin_'; so if the name is set to MyCustomTemplate, it's referenced as 'Plugin_MyCustomTemplate' in JS files.
$sTemplateFileName (string) — relative file path.
$sLayoutName (string, optional) — layout name this template will be used in. By default, mail template is used.
$sLayoutPosition (string, optional) — layout position this template will be used at. Available positions are are 'Layout-Top', 'Layout-Screens-Top', 'Layout-Screens-Middle' (default), 'Layout-Screens-Bottom', 'Layout-Bottom', Login-Footer.
IncludeTemplate Include template into existing view model. Parameters: $sParsedTemplateID (string) — template name we're including this template into. Currently, 'Login_LoginViewModel' is available.
$sParsedPlace (string) — template location this template is placed to.
$sTemplateFileName (string) — relative file path.
Screen | Location |
Login_LoginViewModel | Login-Before-Submit-Button Login-Before-Description Login-After-Description. |
Mail_ComposeViewModel | Compose-Attach-Buttons |
Settings_AccountFoldersViewModel | Account-Folders-After-Buttons |
Mail_LayoutSidePane_MessagePaneViewModel | Message-Pane-More-Actions-Menu |
Common_HeaderViewModel | Header-Middle |
Common_HtmlEditorViewModel | Html-Editor-Buttons |
Including images and fonts
You might need to have images or fonts included in your plugin. However, standard security measures disallow accessing files found under the data directory. To work around that restriction, special methods were introduced.
AddFontFile Includes font file for using it within a plugin. Parameters: $sFontName (string) — font name.
:$sFontPath (string) — relative filesystem path from plugin directory to font file.
Once you have a font included that way, you can reference it in CSS as follows:
url("?plugins/fonts/plugin_name/font_name")
AddFontFile Includes font file for using it within a plugin. Parameters: $sImageName (string) — image name.
$sImagePath (string) — relative filesystem path from plugin directory to image file.
Once you have an image included that way, you can reference it in CSS as follows:
url("?plugins/images/plugin_name/image_name")
Client-side API reference
The following functions may be used in JS files:
AfterLogicApi.addScreenToHeader Creates a link in top pane, with a specified screen opened on clicking it. Parameters: sName (string) — screen name. Will be displayed in URL hash when screen is opened.
sHeaderTitle (string) — link text.
sDocumentTitle (string) — document title displayed for custom screen.
sTemplateName (string) — HTML template name used for this screen
oViewModelClass (Object) — JS view model constructor name used for this screen
AfterLogicApi.addSettingsTab Creates an additional tab in settings screen, with custom setting screen opened on clicking it. Parameters: oViewModelClass (Object) - JS view model constructor name
Constructor prototype must contain the following properties:
TemplateName (string) — HTML template name
TabName (string) — screen name. Will be displayed in URL hash when screen is opened.
TabTitle (string) — link tex displayed as tab name.
AfterLogicApi.getSetting Obtain WebMail setting. Parameters: sSettingName (string) – setting name.
AfterLogicApi.addPluginHook Adds plugin hook handler. Parameters: sName (string) — hook name. List of available hooks is found in next section.
fCallback (string) — function run when hook is triggered.
AfterLogicApi.sendAjaxRequest Sends AJAX request to server. Parameters: oParameters (Object) — AJAX-request parameters. Action parameter is required, it stands for specific operation to be performed.
fResponseHandler (Function, optional) — function called once response from server is received.
oContext (Object, optional) — context of fResponseHandler function call.
AfterLogicApi.isMobile Returns boolean value, true if mobile version is currently used, false otherwise.
Works for Pro/Aurora only. Client-side API hooks
The following hooks are available for use in AfterLogicApi.addPluginHook function:
response-custom-messages Triggered upon fetching message list from server. Parameters: iAccountId - account ID
sFolderFullName - full name of folder
aMessages - full list of messages. Custom properties can be accessed there, assuming they're added on backend API level
move-messages-to-trash Triggered upon moving mails to Trash folder. Parameters: iAccountId - account ID
sFolderFullName - full name of folder
aUids - UIDs of messages which were moved
move-messages-to-spam Triggered upon moving mails to Spam folder. Parameters: iAccountId - account ID
sFolderFullName - full name of folder
aUids - UIDs of messages which were moved.
delete-messages Triggered upon deleting mails permanently. Parameters: iAccountId - account ID
sFolderFullName - full name of folder
aUids - UIDs of messages which were deleted
view-message Triggered upon viewing mail. Parameters: iAccountId - account ID
sFolderFullName - full name of folder
sUid - UIDs of selected email message
view-model-on-show Triggered upon rendering view model. Parameters: sViewModelName - view model name
oViewModel - view model object
view-model-defined Triggered after executing of constructor of view model. Parameters: sViewModelName - view model name
oViewModel - view model object
ajax-default-request Triggered prior to sending any AJAX request. Does not allow for aborting, but permits adding more request data. Parameters: sAction, oParameters ajax-default-response Triggered upon processing any AJAX request. Parameters: sAction, oData close-all-htmleditor-popups Triggered upon closing all popups in html editor. Without parameters.