Moved external JS scripts to lib folder, moved map JS to a seperate file
This commit is contained in:
parent
7a90189927
commit
628c89b1d1
33 changed files with 205 additions and 163 deletions
|
|
@ -14,7 +14,7 @@ allprojects {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
subprojects {
|
subprojects {
|
||||||
apply plugin: 'java-library'
|
apply plugin: 'java-library'
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
|
||||||
188
hal-core/resource/resource/web/js/map.js
vendored
Normal file
188
hal-core/resource/resource/web/js/map.js
vendored
Normal file
|
|
@ -0,0 +1,188 @@
|
||||||
|
var svg;
|
||||||
|
var editModeEnabled = false;
|
||||||
|
|
||||||
|
$(function(){
|
||||||
|
if (!SVG.supported) {
|
||||||
|
alert("Image format(SVG) not supported by your browser.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------
|
||||||
|
// Setup map
|
||||||
|
// ------------------------------------------
|
||||||
|
|
||||||
|
svg = SVG("map");
|
||||||
|
|
||||||
|
// Initialize events
|
||||||
|
|
||||||
|
$("#button-edit").click(function() {
|
||||||
|
editMode(true);
|
||||||
|
});
|
||||||
|
$("#button-save").click(function() {
|
||||||
|
saveMap();
|
||||||
|
editMode(false);
|
||||||
|
drawMap();
|
||||||
|
});
|
||||||
|
$("#button-cancel").click(function() {
|
||||||
|
editMode(false);
|
||||||
|
drawMap();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Initialize background image uploader
|
||||||
|
|
||||||
|
$("#button-bg-edit").click(function() {
|
||||||
|
// Reset modal
|
||||||
|
$('#bg-file-input').parent().show();
|
||||||
|
if ($("#file_input").prop("jFiler") != null)
|
||||||
|
$("#file_input").prop("jFiler").reset();
|
||||||
|
$('#bg-file-progress').parent().hide();
|
||||||
|
$('#bgUploadModal').modal('show');
|
||||||
|
});
|
||||||
|
$('#bg-file-input').filer({
|
||||||
|
limit: 1,
|
||||||
|
extensions: ['jpg','png','svg','gif'],
|
||||||
|
maxSize: 3, // in MB
|
||||||
|
uploadFile: {
|
||||||
|
url: "",
|
||||||
|
type: 'POST',
|
||||||
|
enctype: 'multipart/form-data',
|
||||||
|
beforeSend: function(){
|
||||||
|
$('#bg-file-input').parent().hide();
|
||||||
|
$('#bg-file-progress').parent().show();
|
||||||
|
},
|
||||||
|
success: function(data, el){
|
||||||
|
$('#bgUploadModal').modal('hide');
|
||||||
|
drawMap();
|
||||||
|
},
|
||||||
|
error: function(el){
|
||||||
|
$("#bg-file-progress").addClass("progress-bar-danger");
|
||||||
|
},
|
||||||
|
onProgress: function(t){
|
||||||
|
$("#bg-file-progress").css("width", t+"%");
|
||||||
|
},
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// ------------------------------------------
|
||||||
|
// Start draw loop
|
||||||
|
// ------------------------------------------
|
||||||
|
|
||||||
|
setInterval(function() {
|
||||||
|
if (editModeEnabled == false)
|
||||||
|
drawMap();
|
||||||
|
}, 3000); // 3 sec
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function editMode(enable){
|
||||||
|
if (editModeEnabled == enable)
|
||||||
|
return;
|
||||||
|
editModeEnabled = enable;
|
||||||
|
if (editModeEnabled){
|
||||||
|
$(".edit-mode").show();
|
||||||
|
$(".view-mode").hide();
|
||||||
|
$("#map").css("border-color", "#6eb16e");
|
||||||
|
svg.select(".draggable").draggable(true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$(".edit-mode").hide();
|
||||||
|
$(".view-mode").show();
|
||||||
|
$("#map").css("border-color", "");
|
||||||
|
svg.select(".draggable").draggable(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawMap(){
|
||||||
|
// Get map data
|
||||||
|
$.getJSON("/api/map?action=getdata", function(json){
|
||||||
|
// Reset map
|
||||||
|
svg.clear();
|
||||||
|
|
||||||
|
// --------------------------------------
|
||||||
|
// Draw
|
||||||
|
// --------------------------------------
|
||||||
|
|
||||||
|
// Background
|
||||||
|
|
||||||
|
svg.image("?bgimage", "100%", "100%").x(0).y(0).addClass("bg-image");
|
||||||
|
|
||||||
|
// Rooms
|
||||||
|
|
||||||
|
if (json.rooms != null) {
|
||||||
|
$.each(json.rooms, function(i, room) {
|
||||||
|
var group = svg.group();
|
||||||
|
|
||||||
|
group.rect(room.width, room.height);
|
||||||
|
group.text(room.name).move(10, 10).fill('#999');
|
||||||
|
|
||||||
|
group.addClass("draggable").addClass("room")
|
||||||
|
.x(room.x)
|
||||||
|
.y(room.y)
|
||||||
|
.attr("room-id", room.id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sensors
|
||||||
|
|
||||||
|
if (json.sensors != null) {
|
||||||
|
$.each(json.sensors, function(i, sensor) {
|
||||||
|
var group = svg.group();
|
||||||
|
|
||||||
|
group.image("/img/temperature.svg");
|
||||||
|
group.text(sensor.data).move(45, 15).fill('#999');
|
||||||
|
|
||||||
|
group.addClass("draggable").addClass("sensor")
|
||||||
|
.x(sensor.x)
|
||||||
|
.y(sensor.y)
|
||||||
|
.attr("sensor-id", sensor.id);
|
||||||
|
group.title(sensor.name);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Events
|
||||||
|
|
||||||
|
if (json.event != null) {
|
||||||
|
$.each(json.events, function(i, event) {
|
||||||
|
var group = svg.group();
|
||||||
|
|
||||||
|
var img = "/img/lightbulb_off.svg";
|
||||||
|
if (event.data == "ON")
|
||||||
|
img = "/img/lightbulb_on.svg";
|
||||||
|
group.image(img);
|
||||||
|
|
||||||
|
group.addClass("draggable").addClass("event")
|
||||||
|
.x(event.x)
|
||||||
|
.y(event.y)
|
||||||
|
.attr("event-id", event.id);
|
||||||
|
group.title(event.name);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveMap(){
|
||||||
|
svg.select(".room").each(function(){
|
||||||
|
saveDevice(this, "room", "room-id");
|
||||||
|
});
|
||||||
|
svg.select(".sensor").each(function(){
|
||||||
|
saveDevice(this, "sensor", "sensor-id");
|
||||||
|
});
|
||||||
|
svg.select(".event").each(function(){
|
||||||
|
saveDevice(this, "event", "event-id");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function saveDevice(element, type, id){
|
||||||
|
$.ajax({
|
||||||
|
async: false,
|
||||||
|
dataType: "json",
|
||||||
|
url: "/api/map?",
|
||||||
|
data: {
|
||||||
|
action: "save",
|
||||||
|
id: element.attr(id),
|
||||||
|
type: type,
|
||||||
|
x: element.x(),
|
||||||
|
y: element.y()
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
@ -14,15 +14,15 @@
|
||||||
<link href="css/c3.min.css" rel="stylesheet">
|
<link href="css/c3.min.css" rel="stylesheet">
|
||||||
<link href="css/hal.css" rel="stylesheet">
|
<link href="css/hal.css" rel="stylesheet">
|
||||||
|
|
||||||
<script src="js/jquery-1.11.3.min.js"></script>
|
<script src="js/lib/jquery-1.11.3.min.js"></script>
|
||||||
<script src="js/bootstrap.min.js"></script>
|
<script src="js/lib/bootstrap.min.js"></script>
|
||||||
<script src="js/bootstrap-switch.min.js"></script>
|
<script src="js/lib/bootstrap-switch.min.js"></script>
|
||||||
<script src="js/moment.js"></script>
|
<script src="js/lib/moment.js"></script>
|
||||||
<script src="js/hal.js"></script>
|
<script src="js/hal.js"></script>
|
||||||
|
|
||||||
<!-- charts -->
|
<!-- charts -->
|
||||||
<script src="js/d3.js"></script>
|
<script src="js/lib/d3.js"></script>
|
||||||
<script src="js/c3.js"></script>
|
<script src="js/lib/c3.js"></script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,158 +42,12 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<script src="js/svg.min.js"></script>
|
<script src="js/lib/svg.min.js"></script>
|
||||||
<script src="js/svg.title.js"></script>
|
<script src="js/lib/svg.title.js"></script>
|
||||||
<script src="js/svg.draggable.min.js"></script>
|
<script src="js/lib/svg.draggable.min.js"></script>
|
||||||
<script src="js/jquery.filer.min.js"></script>
|
<script src="js/lib/jquery.filer.min.js"></script>
|
||||||
<link href="css/jquery.filer.css" rel="stylesheet">
|
<link href="css/jquery.filer.css" rel="stylesheet">
|
||||||
<script>
|
<script src="js/map.js"></script>
|
||||||
var svg;
|
|
||||||
var editModeEnabled = false;
|
|
||||||
|
|
||||||
$(function(){
|
|
||||||
if (!SVG.supported) {
|
|
||||||
alert("SVG not supported");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
svg = SVG("map");
|
|
||||||
drawLoop();
|
|
||||||
|
|
||||||
// set events
|
|
||||||
$("#button-edit").click(function() {
|
|
||||||
editMode(true);
|
|
||||||
});
|
|
||||||
$("#button-save").click(function() {
|
|
||||||
saveMap();
|
|
||||||
editMode(false);
|
|
||||||
drawMap();
|
|
||||||
});
|
|
||||||
$("#button-cancel").click(function() {
|
|
||||||
editMode(false);
|
|
||||||
drawMap();
|
|
||||||
});
|
|
||||||
|
|
||||||
// BG Upload
|
|
||||||
$("#button-bg-edit").click(function() {
|
|
||||||
// Reset modal
|
|
||||||
$('#bg-file-input').parent().show();
|
|
||||||
if ($("#file_input").prop("jFiler") != null)
|
|
||||||
$("#file_input").prop("jFiler").reset();
|
|
||||||
$('#bg-file-progress').parent().hide();
|
|
||||||
$('#bgUploadModal').modal('show');
|
|
||||||
});
|
|
||||||
$('#bg-file-input').filer({
|
|
||||||
limit: 1,
|
|
||||||
extensions: ['jpg','png','svg','gif'],
|
|
||||||
maxSize: 3, // in MB
|
|
||||||
uploadFile: {
|
|
||||||
url: "",
|
|
||||||
type: 'POST',
|
|
||||||
enctype: 'multipart/form-data',
|
|
||||||
beforeSend: function(){
|
|
||||||
$('#bg-file-input').parent().hide();
|
|
||||||
$('#bg-file-progress').parent().show();
|
|
||||||
},
|
|
||||||
success: function(data, el){
|
|
||||||
$('#bgUploadModal').modal('hide');
|
|
||||||
drawMap();
|
|
||||||
},
|
|
||||||
error: function(el){
|
|
||||||
$("#bg-file-progress").addClass("progress-bar-danger");
|
|
||||||
},
|
|
||||||
onProgress: function(t){
|
|
||||||
$("#bg-file-progress").css("width", t+"%");
|
|
||||||
},
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
function editMode(enable){
|
|
||||||
if (editModeEnabled == enable)
|
|
||||||
return;
|
|
||||||
editModeEnabled = enable;
|
|
||||||
if (editModeEnabled){
|
|
||||||
$(".edit-mode").show();
|
|
||||||
$(".view-mode").hide();
|
|
||||||
$("#map").css("border-color", "#6eb16e");
|
|
||||||
svg.select(".draggable").draggable(true);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$(".edit-mode").hide();
|
|
||||||
$(".view-mode").show();
|
|
||||||
$("#map").css("border-color", "");
|
|
||||||
svg.select(".draggable").draggable(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function drawLoop(){
|
|
||||||
if (editModeEnabled == false)
|
|
||||||
drawMap();
|
|
||||||
setTimeout("drawLoop()", 10000);
|
|
||||||
}
|
|
||||||
|
|
||||||
function drawMap(){
|
|
||||||
// Get map data
|
|
||||||
$.getJSON("/api/map?action=getdata", function(json){
|
|
||||||
// reset map
|
|
||||||
svg.clear();
|
|
||||||
|
|
||||||
//////////////// Draw
|
|
||||||
// Background
|
|
||||||
svg.image("?bgimage", "100%", "100%").x(0).y(0).addClass("bg-image");
|
|
||||||
|
|
||||||
// Sensors
|
|
||||||
$.each(json.sensors, function(i, sensor) {
|
|
||||||
var group = svg.group();
|
|
||||||
group.image("/img/temperature.svg");
|
|
||||||
group.text(sensor.data).move(45,15).fill('#999');
|
|
||||||
|
|
||||||
group.addClass("draggable").addClass("sensor")
|
|
||||||
.x(sensor.x).y(sensor.y)
|
|
||||||
.attr("device-id", sensor.id);
|
|
||||||
group.title(sensor.name);
|
|
||||||
});
|
|
||||||
// Events
|
|
||||||
$.each(json.events, function(i, event) {
|
|
||||||
var group = svg.group();
|
|
||||||
var img = "/img/lightbulb_off.svg";
|
|
||||||
if (event.data == "ON")
|
|
||||||
img = "/img/lightbulb_on.svg";
|
|
||||||
group.image(img);
|
|
||||||
|
|
||||||
group.addClass("draggable").addClass("event")
|
|
||||||
.x(event.x).y(event.y)
|
|
||||||
.attr("device-id", event.id);
|
|
||||||
group.title(event.name);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function saveMap(){
|
|
||||||
svg.select(".sensor").each(function(){
|
|
||||||
saveDevice(this, "sensor");
|
|
||||||
});
|
|
||||||
svg.select(".event").each(function(){
|
|
||||||
saveDevice(this, "event");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function saveDevice(element, type){
|
|
||||||
$.ajax({
|
|
||||||
async: false,
|
|
||||||
dataType: "json",
|
|
||||||
url: "/api/map?",
|
|
||||||
data: {
|
|
||||||
action: "save",
|
|
||||||
id: element.attr("device-id"),
|
|
||||||
type: type,
|
|
||||||
x: element.x(),
|
|
||||||
y: element.y()
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
<!------------------ MODALS ---------------------->
|
<!------------------ MODALS ---------------------->
|
||||||
|
|
|
||||||
|
|
@ -52,5 +52,5 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<link href="css/video-js.min.css" rel="stylesheet">
|
<link href="css/video-js.min.css" rel="stylesheet">
|
||||||
<script src="js/video.min.js"></script>
|
<script src="js/lib/video.min.js"></script>
|
||||||
<script src="js/videojs-http-streaming.min.js"></script>
|
<script src="js/lib/videojs-http-streaming.min.js"></script>
|
||||||
|
|
@ -39,6 +39,6 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<link href="css/video-js.min.css" rel="stylesheet">
|
<link href="css/lib/video-js.min.css" rel="stylesheet">
|
||||||
<script src="js/video.min.js"></script>
|
<script src="js/lib/video.min.js"></script>
|
||||||
<script src="js/videojs-http-streaming.min.js"></script>
|
<script src="js/lib/videojs-http-streaming.min.js"></script>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue