freeboard-leaflet-realtime
Version:
Freeboard plugin for real time Leaflet web maps
96 lines (71 loc) • 2.64 kB
JavaScript
DeveloperConsole = function(theFreeboardModel)
{
function showDeveloperConsole()
{
var pluginScriptsInputs = [];
var container = $('<div></div>');
var addScript = $('<div class="table-operation text-button">ADD</div>');
var table = $('<table class="table table-condensed sub-table"></table>');
table.append($('<thead style=""><tr><th>Plugin Script URL</th></tr></thead>'));
var tableBody = $("<tbody></tbody>");
table.append(tableBody);
container.append($("<p>Here you can add references to other scripts to load datasource or widget plugins.</p>"))
.append(table)
.append(addScript)
.append('<p>To learn how to build plugins for freeboard, please visit <a target="_blank" href="http://freeboard.github.io/freeboard/docs/plugin_example.html">http://freeboard.github.io/freeboard/docs/plugin_example.html</a></p>');
function refreshScript(scriptURL)
{
$('script[src="' + scriptURL + '"]').remove();
}
function addNewScriptRow(scriptURL)
{
var tableRow = $('<tr></tr>');
var tableOperations = $('<ul class="board-toolbar"></ul>');
var scriptInput = $('<input class="table-row-value" style="width:100%;" type="text">');
var deleteOperation = $('<li><i class="icon-trash icon-white"></i></li>').click(function(e){
pluginScriptsInputs = _.without(pluginScriptsInputs, scriptInput);
tableRow.remove();
});
pluginScriptsInputs.push(scriptInput);
if(scriptURL)
{
scriptInput.val(scriptURL);
}
tableOperations.append(deleteOperation);
tableBody
.append(tableRow
.append($('<td></td>').append(scriptInput))
.append($('<td class="table-row-operation">').append(tableOperations)));
}
_.each(theFreeboardModel.plugins(), function(pluginSource){
addNewScriptRow(pluginSource);
});
addScript.click(function(e)
{
addNewScriptRow();
});
new DialogBox(container, "Developer Console", "OK", null, function(){
// Unload our previous scripts
_.each(theFreeboardModel.plugins(), function(pluginSource){
$('script[src^="' + pluginSource + '"]').remove();
});
theFreeboardModel.plugins.removeAll();
_.each(pluginScriptsInputs, function(scriptInput){
var scriptURL = scriptInput.val();
if(scriptURL && scriptURL.length > 0)
{
theFreeboardModel.addPluginSource(scriptURL);
// Load the script with a cache buster
head.js(scriptURL + "?" + Date.now());
}
});
});
}
// Public API
return {
showDeveloperConsole : function()
{
showDeveloperConsole();
}
}
}