Modules Service

A module is a new window inside the Symphony client workspace, such as a chatroom or an instant message. Use the modules service to create application-specific modules.

// To use the modules service, you must subscribe to it from your application
var modulesService = SYMPHONY.services.subscribe("modules");

The following methods are available on the modules service:

show()

Show a new application module:

function show(id, title, serviceName, iframe, options)

Parameter

Type

Description

id

String

A unique id for this module (must be unique across all modules of a given application)

Either title or {title, icon}

String or Object

Either the title of the module as a string or an object with the keys title and icon where the value of title is a string and the value of icon is the url of a 32x16 pixel sprite sheet (The first 16x16 pixels will be used in a dark theme, and second will be used in the light theme.)

serviceName

String

The name of a local service implemented by your application that will be invoked when a user action is performed relating to this module

iframe

String

The URL for the content of the module (must be an HTTPS URL)

options

Object

An object, which can contain:

  • canFloat: if set to true, a menu item will be added to the More menu (found under the (…) on the module frame) that, when clicked, will pop the module out into its own browser window

  • parentModuleId: if set to the ID of a module opened by an application, the specified module will not be closed when this module is shown

modulesService.show(
"hello",
{title: "Hello World App"},
"hello:controller",
"https://localhost:4000/app.html",
{
"canFloat": true
}
);

hide()

Hide an existing application module:

function hide(id)

Parameter

Type

Description

id

String

The id of the module that should be hidden.

modulesService.hide("hello");

setTitle()

Change the title of an existing application module:

Note that this only changes the title of a specific module, not all titles of all modules created by the application.

function setTitle(id, title)

Parameters

Type

Description

id

String

The id of the module for which the title should be changed

Either title or {title, icon}

String or Object

Either the title of the module as a string or an object with the keys title and icon where the value of title is a string and the value of icon is the url of a 32x16 pixel sprite sheet (The first 16x16 pixels will be used in a dark theme, and second will be used in the light theme.)

modulesService.setTitle("hello", "New Module Title");

focus()

Focus an existing application module:

function focus(id)

Parameter

Type

Description

id

String

The id of the module to focus

modulesService.focus("hello");

addMenuItem()

Add a menu item to the module's More (...) menu:

function addMenuItem(moduleId, title, itemId)

Parameter

Type

Description

moduleId

String

The id of the module to which a menu item should be added

title

String

The title of the item being added

itemId

String

The id of the item being added to the menu

setHandler()

You must specify your own application service for handling clicks on the menu item using setHandler.

You must implement the menuSelect method on your application service in order to handle clicks on the created menu item:

function setHandler(moduleId, serviceName)

Parameter

Type

Description

moduleId

String

The id of the module for which menu selection is being handled

title

String

The name of your application service that will be called when a module menu item has been selected (This service must previously have been registered remotely.)

// The application service that will be used to handle menu item clicks
var helloAppService = SYMPHONY.services.register("hello:app");
modulesService.addMenuItem("hello", "About Hello World App", "hello-menu-item");
modulesService.setHandler("hello", "hello:app");
// Implement the menuSelect method on your application service
helloAppService.implement({
menuSelect: function(itemId) {
if (itemId == "hello-menu-item") {
console.log("hello-menu-item was selected");
}
}
});

openLink()

Opens a link from your application in a new tab in the user's default browser. This method should be used to open links, rather than <a href="..." target="_blank">...</a>.

function openLink(url)

Parameter

Type

Description

url

String

The URL to be opened

// This code will live in your application view.
// Assume there is a button element with id "link" on the application module
// If that button is clicked, open a Google link.
var linkButton = document.getElementById("link");
linkButton.addEventListener("click", function(){
modulesService.openLink("https://www.google.com");
});

redirect()

Reloads the content of the module at the new URL.

The Client Extensions API is designed for single-page applications. Use this method with multi-page applications to load new content when users navigate to another page:

function redirect(id, url)

Parameter

Type

Description

id

String

The unique identifier for the module. A module with this id must already exist.

url

String

The URL of the new iframe to load in the module.

onSelect : function(symbol) {
this.modulesService.redirect(this.moduleId, MODULE.baseUrl + 'details?symbol=' + encodeURIComponent(symbol));
},