Files
Cloud-CMS/views/dataset-data-connector-test-page.twig

139 lines
5.0 KiB
Twig
Raw Permalink Normal View History

2025-12-02 10:32:59 -05:00
{#
/*
* Copyright (C) 2024 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/>.
*/
#}
<!DOCTYPE html>
<html>
<head>
<title>Data Connector Test</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="public-path" content="{{ theme.rootUri() }}"/>
<link rel="shortcut icon" href="{{ theme.uri("img/favicon.ico") }}" />
</head>
<body>
<script type="text/javascript" nonce="{{ cspNonce }}">
window.xiboDC = (function() {
'use strict';
const mainLib = {
/**
* Inject the data connector event parameters and dataSetId
* @param {string} dataSetId - The id of the dataset
* @param {string} dataSetParameters - A url string of parameters
*/
initialise: function(dataSetId, dataSetParameters) {
window.dataSetId = dataSetId;
new URLSearchParams(dataSetParameters).forEach(function (value, key) {
window[key] = value;
});
if (typeof (window.onInit) == 'function') {
window.onInit();
}
},
/**
* Set the realtime into the player. Called from Data Connector.
* @param {string} dataKey A dataKey to store this data
* @param {String} data The data as string
* @param {Object} options - Request options
* @param {callback} options.done Optional
* @param {callback} options.error Optional
*/
setData: function(dataKey, data, {done, error} = {}) {
// Persist the data we've been given
window.parent.receiveData('set', {
dataKey: dataKey,
data: data
});
if (typeof (done) == 'function') {
done(true);
}
},
/**
* Notify main application that we have new data. Called from data collector.
* @param {string} dataKey - The key of the data that has been changed.
*/
notifyHost: function(dataKey) {
// Update the table.
window.parent.receiveData('notify', dataKey);
},
/**
* Make a request to the configured server/player
* @param {string} path - Request path
* @param {Object} [options] - Optional params
* @param {string} [options.type]
* @param {Object[]} [options.headers]
* Request headers in the format {key: key, value: value}
* @param {Object} [options.data]
* @param {callback} [options.done]
* @param {callback} [options.error]
*/
makeRequest: function(path, {type, headers, data, done, error} = {}) {
window.parent.makeRequest(path, {type, headers, data, done, error});
},
/**
* Set Schedule Criteria
* @param {string} metric The Metric Name
* @param {string} value The Value
* @param {int} ttl A TTL in seconds
*/
setCriteria: function(metric, value, ttl) {
window.parent.receiveData('criteria', {
dataKey: metric,
data: {
metric: metric,
value: value || null,
ttl: ttl,
}
});
},
}
return mainLib;
})();
// Capture console logs and report out.
(function () {
const log = console.log;
console.log = function () {
log.apply(this, Array.prototype.slice.call(arguments));
window.parent.receiveData('log', Array.prototype.slice.call(arguments));
};
}());
// Say when we're loaded.
window.onload = function () {
window.parent.receiveData('loaded', null);
}
</script>
<script type="text/javascript" nonce="{{ cspNonce }}">
{{ script|raw }}
</script>
</body>
</html>