Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

NotationExplanation
{properties.expediton}Accessed the property expedition from the clicked feature
{properties["general.name"]}Accesses the property event.name from the clicked feature. Dot notation cannot be used here, because the property name contains a dot.
{layer.name}Acccesses the name of the layer itself
{formatDate(properties.date_time_end)}Calls a custom function to format a date string using the property date_time_end as a parameter
{addFilterButton("device", properties.device)}Calls a custom function with two parameters to display a filter button in the table column that filters by device

Available Functions

NameDescription
formatLatLng(latitude, longitude)Format lat/lng to a readable string with decimal degrees
Example: {formatLatLng(properties.begin_latitude, properties.begin_longitude)}
formatGeometry(geometry)Format the geojson geometry and display it as human readable coordinates. Only works for type=point
Example: {formatGeometry(geometry)}
addFilterButton(name, value)Add a button to request filtering by an attribute
Example: {addFilterButton("platform", properties.platform)}
formatDate(isoDateString)Make ISO Timestring more readable
Example: {formatDate(properties.date_time_start)}
isDefined(valueToCheck, then, else)

Only returns the given string if the first value is not null or undefined. Used as a way to implement conditions. Uses optional else-value if not defined.
Example: {isDefined(properties.date_time_end, "Date Time Start", "Date Time")}

concatIfDefined(concat1, concat2, ...)

Concats values if every value is defined (not null or undefined)
Example: {concatIfDefined(properties.elevation, " m")}



Recommendations

  • The content should be structured vertically, because the popups and sidebars have a limited width
  • Ideally the metadata is structured in a two-column table like the example below
  • The popup template should not contain more than 

HTML Post-Processing

The resulting HTML markup gets altered by the viewer for optimized visualization of metadata after the templates got evaluated.

  • Headlines will be grouped in collapsible sections.
  • A copy button will be added to table rows to copy a property

Example Template

Code Block
languagetext
titleTemplate for Expedition Tracklines
{isDefined(properties.attachment_url, "<h3>Cruise Overview</h3>")}
{displayImage(properties.attachment_url)}
{isDefined(properties.attachment_url, "<h3 class='collapsed'>Measurement Plot</h3>")}
{marehubOverviewPlot()}

### Space & Time
| | |
|--|--|
| {isDefined(properties.date_time_end, "Date Time Start", "Date Time")} | {formatDate(properties.date_time_start)} |
| Date Time End | {formatDate(properties.date_time_end)} |
| Coordinates | {formatGeometry(geometry)} |
| Elevation | {concatIfDefined(properties.elevation, " m")} |

### Event
| | |
|--|--|
| Expedition | [{properties.expedition}](https://marine-data.de/?site=expedition&expedition={encodeURLComponent(properties.expedition)}") {addFilterButton("expedition", properties.expedition)} |
| Expedition Alias | {properties.expedition_alias} |
| Event | [{properties.event}](https://marine-data.de/?site=data&qf=events.name/{encodeURLComponent(properties.event)}") {addFilterButton("event", properties.event)} |
| Event Alias | {properties.event_alias} |
| Platform | {properties.platform} {addFilterButton("platform", properties.platform)} |
| Device | {properties.device} {addFilterButton("device", properties.device)} |
| Sensor URI | [{properties.sensor_uri}]({properties.sensor_uri}) |

### Data
| | |
|--|--|
| Aggregation Type | {properties.ov_type} {addFilterButton("ov_type", properties.ov_type)} |
| Current Velocity | {getMarehubOverviewValue("values_mag")} |
| Current Direction |  {getMarehubOverviewValue("values_dir", "°")} |
| {isDefined(properties.parameter_name, properties.parameter_name, "Value")} | {getMarehubOverviewValue()} |
| Method | {properties.method} {addFilterButton("method", properties.method)}|
| {isDefined(properties.depth_type, properties.depth_type, "Depth")} | {getMarehubOverviewValue("depths", "m")} |

#### View Original Data
| | |
|--|--|
| Original Parameter Name | {properties.parameter_origin_name} |
| Original UC Name | {properties.uc_origin_name} |
| Original VC Name | {properties.vc_origin_name} |
| Original Unit | {properties.parameter_origin_unit} |
| Original Method | {properties.origin_method} |

### References
{properties.citation}
| | |
|--|--|
| License | {properties.license} |
| DOI | [{properties.doi}]({properties.doi}) |
| Data URL | [{properties.data_url}]({properties.data_url}) |
| Metadata URL |[{properties.metadata_url}]({properties.metadata_url}) |
| SOP |[{properties.sop_url}]({properties.sop_url}) |
| Provider | {properties.provider} {addFilterButton("provider", properties.provider)} |
| Dataset | {properties.dataset} |
| Curator | {properties.curator} |