Tobago Demo

Menu

Root Dummy Intro Search Getting Started Docker What's New Migration Compatibility FAQ API Download Server Info Logging Info In Suggest Textarea Date Range Group 5 Star Rating File Upload Out Label Badge Image Figure Progress Object Checkbox Toggle Dropdown Radio Listbox SelectOneList Multi Checkbox Multi Listbox Shuttle SelectManyList Button and Link Default Command Button Group Customizer Link Group Box Panel Separator Section Header and Footer Bar Popup Popover Toast Basic example Tab Client Tab Ajax Tab Server Basic example Sheet Sorting Paginator Sheet Column Selector Sheet Selectionchange Sheet Event Sheet Action Sheet Markup Sheet Style Empty Sheet Column Bar Sheet Filter Sheet Static Header Sheet Multi Header Sheet Tree Column Panel Sheet Editable Sheet Lazy Sheet Nested Basic example Tree Command Types Tree Select Tree Editor Tree Menu Tree Listbox Intro TinyMCE CKEditor Flow Layout Flex Layout Segment Layout Label Layout Grid Layout Split Layout Message-layout Overview Collapsible Box Collapsible Popup Collapsible Panel Collapsible Section Content Validation JSR 303 Severity Messages Content Security Policy Sanitize Roles Form AccessKey Focus Exception Handler Style Tag Bootstrap Theme Icons Partial Ajax Behavior WebSocket Transition Non Faces Request Conversion Error Handling For Each ConversationScoped Download Configuration Format Locale DataAttribute Meta
Root Dummy Intro Search Getting Started Docker What's New Migration Compatibility FAQ API Download Server Info Logging Info In Suggest Textarea Date Range Group 5 Star Rating File Upload Out Label Badge Image Figure Progress Object Checkbox Toggle Dropdown Radio Listbox SelectOneList Multi Checkbox Multi Listbox Shuttle SelectManyList Button and Link Default Command Button Group Customizer Link Group Box Panel Separator Section Header and Footer Bar Popup Popover Toast Basic example Tab Client Tab Ajax Tab Server Basic example Sheet Sorting Paginator Sheet Column Selector Sheet Selectionchange Sheet Event Sheet Action Sheet Markup Sheet Style Empty Sheet Column Bar Sheet Filter Sheet Static Header Sheet Multi Header Sheet Tree Column Panel Sheet Editable Sheet Lazy Sheet Nested Basic example Tree Command Types Tree Select Tree Editor Tree Menu Tree Listbox Intro TinyMCE CKEditor Flow Layout Flex Layout Segment Layout Label Layout Grid Layout Split Layout Message-layout Overview Collapsible Box Collapsible Popup Collapsible Panel Collapsible Section Content Validation JSR 303 Severity Messages Content Security Policy Sanitize Roles Form AccessKey Focus Exception Handler Style Tag Bootstrap Theme Icons Partial Ajax Behavior WebSocket Transition Non Faces Request Conversion Error Handling For Each ConversationScoped Download Configuration Format Locale DataAttribute Meta

Object

The <tc:object/> tag creates an <iframe>.

Tag Library Documentation

Basics

<tc:object src="https://www.openstreetmap.org/..."/>

Content Security Policy (CSP)

It's very usual to include content from external source. When Content Security Policy is activated, you need to allow the external source explicitly, for security reasons. You need to add a child-src policy to the 'tobago-config.xml' like <directive name="child-src">https://www.openstreetmap.org</directive>

Style

A <tc:object/> tag can contain a style tag. In this case it's <tc:style width="100%"/> to let grow the width to the full size of the container.

Tool Bar

There are two <tc:button/> within a <tc:buttons/> in this example. The first show the island Tobago, the second show the worldmap in <tc:object id="map">. The buttons send the parameter (maps-position, maps-zoom, maps-target) to an object.js, which is shown in the objects.js-box. The JavaScript build the URL for the iframe.

<tc:button label="Show Tobago" omit="true"> <tc:dataAttribute name="maps-position" value="11.249123,-60.687103"/> <tc:dataAttribute name="maps-zoom" value="12"/> <tc:dataAttribute name="maps-target" value="page:map"/> </tc:button>

object.js

class MapDemo {
static init() {
document.querySelectorAll("[data-maps-target]").forEach((element) => element.addEventListener("click",
function (event) {
const button = event.currentTarget;
const targetId = button.dataset.mapsTarget;
const position = JSON.parse(button.dataset.mapsPosition);
const zoom = JSON.parse(button.dataset.mapsZoom);
const url = 'https://www.openstreetmap.org/export/embed.html?bbox='
+ (position.x - zoom) + ','
+ (position.y - zoom) + ','
+ (position.x + zoom) + ','
+ (position.y + zoom);
document.getElementById(targetId).setAttribute("src", url);
event.preventDefault();
}));
}
}
document.addEventListener("DOMContentLoaded", MapDemo.init);
// todo: ajax
Listener.register(MapDemo.init, Phase.DOCUMENT_READY);
Listener.register(MapDemo.init, Phase.AFTER_UPDATE);
© 2005-2025 Apache Software Foundation, Licensed under the Apache License, Version 2.0.