Files
Cloud-CMS/modules/googletraffic.xml

172 lines
6.0 KiB
XML
Raw Permalink Normal View History

2025-12-02 10:32:59 -05:00
<!--
~ Copyright (C) 2023 Xibo Signage Ltd
~
~ Xibo - Digital Signage - https://xibosignage.com
~
~ This file is part of Xibo.
~
~ Xibo is free software: you can redistribute it and/or modify
~ it under the terms of the GNU Affero General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ any later version.
~
~ Xibo is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU Affero General Public License for more details.
~
~ You should have received a copy of the GNU Affero General Public License
~ along with Xibo. If not, see <http://www.gnu.org/licenses/>.
-->
<module>
<id>core-googletraffic</id>
<name>Google Traffic</name>
<author>Core</author>
<description>A module for displaying traffic information using Google Maps</description>
<icon>fa fa-car</icon>
<class></class>
<type>googletraffic</type>
<dataType></dataType>
<schemaVersion>1</schemaVersion>
<assignable>1</assignable>
<regionSpecific>1</regionSpecific>
<renderAs>html</renderAs>
<defaultDuration>600</defaultDuration>
<startWidth>600</startWidth>
<startHeight>400</startHeight>
<settings>
<property id="apiKey" type="text">
<title>API Key</title>
<helpText>Enter your API Key from Google Maps.</helpText>
<default></default>
</property>
<property id="minDuration" type="number">
<title>Minimum recommended duration</title>
<helpText>Please enter a minimum recommended duration in seconds for this Module.</helpText>
<default>600</default>
</property>
<property type="message" variant="danger">
<title>This module uses the Google Traffic JavaScript API which is a paid-for API from Google. Charges will apply each time the map is loaded in the CMS preview and on each Player, therefore we recommend setting a high widget duration.</title>
<default></default>
</property>
</settings>
<properties>
<property id="useDisplayLocation" type="checkbox">
<title>Use the Display Location</title>
<helpText>Use the location configured on the display</helpText>
<default></default>
</property>
<property id="latitude" type="number">
<title>Latitude</title>
<helpText>The Latitude for this widget</helpText>
<default>#DEFAULT_LAT#</default>
<visibility>
<test>
<condition field="useDisplayLocation" type="eq">0</condition>
</test>
</visibility>
</property>
<property id="longitude" type="number">
<title>Longitude</title>
<helpText>The Longitude for this widget</helpText>
<default>#DEFAULT_LONG#</default>
<visibility>
<test>
<condition field="useDisplayLocation" type="eq">0</condition>
</test>
</visibility>
</property>
<property id="zoom" type="number">
<title>Zoom</title>
<helpText>How far should the map be zoomed in? The higher the number the closer, 1 represents the entire globe.</helpText>
<default>15</default>
</property>
<property type="message">
<title>This module is rendered on the Player which means the Player must have an internet connection.</title>
</property>
<property type="message">
<title>The Traffic Widget has not been configured yet, please ask your CMS Administrator to look at it for you.</title>
<visibility>
<test>
<condition type="ne">%apiKey%</condition>
</test>
</visibility>
</property>
<property type="message" variant="danger">
<title>You have entered a duration lower than the recommended minimum, this could cause significant API charges.</title>
<visibility>
<test>
<condition field="duration" type="lt">%minDuration%</condition>
</test>
</visibility>
</property>
</properties>
<preview></preview>
<stencil>
<hbs><![CDATA[
]]></hbs>
<twig><![CDATA[
<script async defer src="https://maps.googleapis.com/maps/api/js?key={{ settings.apiKey }}&callback=init"></script>
<script type="text/javascript">
function init() {
var lat = {{ latitude }};
var lng = {{ longitude }};
// Not preview and useDisplayLocation
if ({{useDisplayLocation}} === 1 && !xiboIC.checkIsPreview()) {
// Get the lat/lng from player info.
xiboIC.info({
done: function(xhr) {
info = JSON.parse(xhr.responseText);
if (info && info.latitude) {
lat = info.latitude;
}
if (info && info.longitude) {
lng = info.longitude;
}
initMap(lat, lng);
},
error: function() {
initMap(lat, lng);
}
});
} else {
initMap(lat, lng);
}
}
function initMap(lat, lng) {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: {{ zoom }},
center: {lat: lat, lng: lng},
disableDefaultUI: true
});
var trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
}
</script>
<div id="map"></div>
]]></twig>
<style><![CDATA[
body {
margin: 0;
overflow: hidden;
}
h1, h2, h3, h4, p {
margin-top: 0;
}
#iframe {
border: 0;
}
#map {
height: 100%;
}
]]></style>
</stencil>
<onRender><![CDATA[
$(target).find('#map').height($(window).height());
]]></onRender>
</module>