- Fix dualpath PC propagation direction (Equipment->PC) in api.asp and db_helpers.asp - Fix early exit in CreatePCMachineRelationship preventing propagation - Fix getShopfloorPCs to filter machinetypeid IN (33,34,35) instead of >= 33 - Fix getShopfloorPCs to show equipment numbers via GROUP_CONCAT subquery - Add detailed PropagateDP logging for dualpath debugging - Default "Show on Shopfloor Dashboard" checkbox to checked in addnotification.asp - Add USB label batch printing, single USB labels, and USB history pages - Add printer supplies tracking and toner report enhancements - Add uptime map visualization page - Add dashboard/lobby display SQL migration - Update CLAUDE.md with IIS 401 workaround documentation - Update TODO.md Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
551 lines
23 KiB
Plaintext
551 lines
23 KiB
Plaintext
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<!--#include file="./includes/header.asp"-->
|
|
<!--#include file="./includes/sql.asp"-->
|
|
<link rel="stylesheet" href="./leaflet/leaflet.css">
|
|
<script src="./leaflet/leaflet.js"></script>
|
|
</head>
|
|
|
|
<%
|
|
On Error Resume Next
|
|
theme = Request.Cookies("theme")
|
|
If theme = "" Then
|
|
theme = "bg-theme1"
|
|
End If
|
|
|
|
' Get device type and ID from query string
|
|
Dim deviceType, deviceId
|
|
deviceType = Trim(Request.Querystring("type"))
|
|
deviceId = Trim(Request.Querystring("id"))
|
|
|
|
' Validate inputs
|
|
If deviceType = "" Or deviceId = "" Or Not IsNumeric(deviceId) Or CLng(deviceId) < 1 Then
|
|
Response.Redirect("networkdevices.asp")
|
|
Response.End
|
|
End If
|
|
|
|
' Build query based on device type
|
|
' All network devices now use unified machines table with machinetypeid:
|
|
' 16 = Access Point, 17 = IDF, 18 = Camera, 19 = Switch, 20 = Server
|
|
Dim strSQL, rs, tableName, idField, editUrl, listUrl, machineTypeId
|
|
Select Case LCase(deviceType)
|
|
Case "idf"
|
|
machineTypeId = 17
|
|
editUrl = "deviceidf.asp?id=" & deviceId
|
|
listUrl = "networkdevices.asp?filter=IDF"
|
|
strSQL = "SELECT mac.machineid, COALESCE(mac.alias, mac.machinenumber) AS idfname, " & _
|
|
"mac.machinenotes AS description, mac.maptop, mac.mapleft, mac.isactive, " & _
|
|
"NULL AS vendor, NULL AS modelnumber, NULL AS image, NULL AS serialnumber, NULL AS ipaddress, NULL AS macaddress, " & _
|
|
"'IDF' AS devicetype " & _
|
|
"FROM machines mac " & _
|
|
"WHERE mac.machineid = " & CLng(deviceId) & " AND mac.machinetypeid = 17"
|
|
Case "server"
|
|
machineTypeId = 20
|
|
editUrl = "deviceserver.asp?id=" & deviceId
|
|
listUrl = "networkdevices.asp?filter=Server"
|
|
strSQL = "SELECT mac.machineid, mac.alias AS servername, mac.machinenotes AS description, " & _
|
|
"mac.maptop, mac.mapleft, mac.isactive, mac.serialnumber, mac.fqdn, mac.logicmonitorurl, " & _
|
|
"v.vendor, m.modelnumber, m.image, c.address AS ipaddress, c.macaddress, " & _
|
|
"NULL AS idfname, 'Server' AS devicetype, " & _
|
|
"mac.alias AS devicename " & _
|
|
"FROM machines mac " & _
|
|
"LEFT JOIN models m ON mac.modelnumberid = m.modelnumberid " & _
|
|
"LEFT JOIN vendors v ON m.vendorid = v.vendorid " & _
|
|
"LEFT JOIN communications c ON mac.machineid = c.machineid AND c.isprimary = 1 AND c.comstypeid = 1 " & _
|
|
"WHERE mac.machineid = " & CLng(deviceId) & " AND mac.machinetypeid = 20"
|
|
Case "switch"
|
|
machineTypeId = 19
|
|
editUrl = "deviceswitch.asp?id=" & deviceId
|
|
listUrl = "networkdevices.asp?filter=Switch"
|
|
strSQL = "SELECT mac.machineid, mac.alias AS switchname, mac.machinenotes AS description, " & _
|
|
"mac.maptop, mac.mapleft, mac.isactive, mac.serialnumber, mac.fqdn, mac.logicmonitorurl, " & _
|
|
"v.vendor, m.modelnumber, m.image, c.address AS ipaddress, c.macaddress, " & _
|
|
"NULL AS idfname, 'Switch' AS devicetype, " & _
|
|
"mac.alias AS devicename " & _
|
|
"FROM machines mac " & _
|
|
"LEFT JOIN models m ON mac.modelnumberid = m.modelnumberid " & _
|
|
"LEFT JOIN vendors v ON m.vendorid = v.vendorid " & _
|
|
"LEFT JOIN communications c ON mac.machineid = c.machineid AND c.isprimary = 1 AND c.comstypeid = 1 " & _
|
|
"WHERE mac.machineid = " & CLng(deviceId) & " AND mac.machinetypeid = 19"
|
|
Case "firewall"
|
|
machineTypeId = 46
|
|
editUrl = "devicefirewall.asp?id=" & deviceId
|
|
listUrl = "networkdevices.asp?filter=Firewall"
|
|
strSQL = "SELECT mac.machineid, mac.alias AS firewallname, mac.machinenotes AS description, " & _
|
|
"mac.maptop, mac.mapleft, mac.isactive, mac.serialnumber, mac.fqdn, mac.logicmonitorurl, " & _
|
|
"v.vendor, m.modelnumber, m.image, c.address AS ipaddress, c.macaddress, " & _
|
|
"NULL AS idfname, 'Firewall' AS devicetype, " & _
|
|
"mac.alias AS devicename " & _
|
|
"FROM machines mac " & _
|
|
"LEFT JOIN models m ON mac.modelnumberid = m.modelnumberid " & _
|
|
"LEFT JOIN vendors v ON m.vendorid = v.vendorid " & _
|
|
"LEFT JOIN communications c ON mac.machineid = c.machineid AND c.isprimary = 1 AND c.comstypeid = 1 " & _
|
|
"WHERE mac.machineid = " & CLng(deviceId) & " AND mac.machinetypeid = 46"
|
|
Case "camera"
|
|
machineTypeId = 18
|
|
editUrl = "devicecamera.asp?id=" & deviceId
|
|
listUrl = "networkdevices.asp?filter=Camera"
|
|
strSQL = "SELECT mac.machineid, mac.alias AS cameraname, mac.machinenotes AS description, " & _
|
|
"mac.maptop, mac.mapleft, mac.isactive, mac.serialnumber, mac.fqdn, " & _
|
|
"v.vendor, m.modelnumber, m.image, c.address AS ipaddress, c.macaddress, " & _
|
|
"idf.alias AS idfname, idf.machineid AS idfid, 'Camera' AS devicetype, " & _
|
|
"mac.alias AS devicename " & _
|
|
"FROM machines mac " & _
|
|
"LEFT JOIN models m ON mac.modelnumberid = m.modelnumberid " & _
|
|
"LEFT JOIN vendors v ON m.vendorid = v.vendorid " & _
|
|
"LEFT JOIN communications c ON mac.machineid = c.machineid AND c.isprimary = 1 AND c.comstypeid = 1 " & _
|
|
"LEFT JOIN machinerelationships mr ON mac.machineid = mr.machineid AND mr.isactive = 1 " & _
|
|
"LEFT JOIN machines idf ON mr.related_machineid = idf.machineid AND idf.machinetypeid = 17 " & _
|
|
"WHERE mac.machineid = " & CLng(deviceId) & " AND mac.machinetypeid = 18"
|
|
Case "accesspoint", "access point"
|
|
machineTypeId = 16
|
|
editUrl = "deviceaccesspoint.asp?id=" & deviceId
|
|
listUrl = "networkdevices.asp?filter=Access Point"
|
|
strSQL = "SELECT mac.machineid AS apid, mac.alias AS devicename, mac.modelnumberid AS modelid, " & _
|
|
"mac.serialnumber, mac.machinenotes AS description, mac.maptop, mac.mapleft, mac.isactive, mac.logicmonitorurl, " & _
|
|
"v.vendor, m.modelnumber, m.image, c.address AS ipaddress, c.macaddress, " & _
|
|
"NULL AS idfname, NULL AS idfid, 'Access Point' AS devicetype " & _
|
|
"FROM machines mac " & _
|
|
"LEFT JOIN models m ON mac.modelnumberid = m.modelnumberid " & _
|
|
"LEFT JOIN vendors v ON m.vendorid = v.vendorid " & _
|
|
"LEFT JOIN communications c ON mac.machineid = c.machineid AND c.isprimary = 1 AND c.comstypeid = 1 " & _
|
|
"WHERE mac.machineid = " & CLng(deviceId) & " AND mac.machinetypeid = 16"
|
|
Case Else
|
|
Response.Redirect("networkdevices.asp")
|
|
Response.End
|
|
End Select
|
|
|
|
Set rs = objConn.Execute(strSQL)
|
|
|
|
' Check if device exists
|
|
If rs.EOF Then
|
|
rs.Close
|
|
Set rs = Nothing
|
|
Response.Redirect("networkdevices.asp")
|
|
Response.End
|
|
End If
|
|
|
|
' Get device name based on type
|
|
Dim deviceName, deviceDescription
|
|
Select Case LCase(deviceType)
|
|
Case "idf"
|
|
deviceName = rs("idfname")
|
|
Case "server"
|
|
deviceName = rs("servername")
|
|
Case "switch"
|
|
deviceName = rs("switchname")
|
|
Case "firewall"
|
|
deviceName = rs("firewallname")
|
|
Case "camera"
|
|
deviceName = rs("cameraname")
|
|
Case "accesspoint", "access point"
|
|
deviceName = rs("devicename")
|
|
End Select
|
|
|
|
' Store description in variable (reading rs fields twice can cause issues with ADO cursors)
|
|
deviceDescription = rs("description") & ""
|
|
%>
|
|
|
|
<body class="bg-theme <%Response.Write(theme)%>">
|
|
|
|
<!-- start loader -->
|
|
<div id="pageloader-overlay" class="visible incoming"><div class="loader-wrapper-outer"><div class="loader-wrapper-inner" ><div class="loader"></div></div></div></div>
|
|
<!-- end loader -->
|
|
<!-- Start wrapper-->
|
|
<div id="wrapper">
|
|
<!--#include file="./includes/leftsidebar.asp"-->
|
|
<!--Start topbar header-->
|
|
<!--#include file="./includes/topbarheader.asp"-->
|
|
<!--End topbar header-->
|
|
<div class="clearfix"></div>
|
|
|
|
<div class="content-wrapper">
|
|
<div class="container-fluid">
|
|
|
|
<div class="row mt-3">
|
|
<div class="col-lg-4">
|
|
<div class="card profile-card-2">
|
|
<div class="card-img-block">
|
|
<img class="img-fluid" src="./images/machines/<%If Not IsNull(rs("image")) And rs("image") & "" <> "" Then Response.Write(Server.HTMLEncode(rs("image") & "")) Else Response.Write(LCase(deviceType) & ".png") End If%>" alt="Card image cap" onerror="this.onerror=null; this.src='./images/machines/default.png'">
|
|
</div>
|
|
<div class="card-body pt-5">
|
|
<img src="./images/machines/<%If Not IsNull(rs("image")) And rs("image") & "" <> "" Then Response.Write(Server.HTMLEncode(rs("image") & "")) Else Response.Write(LCase(deviceType) & ".png") End If%>" alt="profile-image" class="profile" onerror="this.onerror=null; this.src='./images/machines/default.png'">
|
|
<h5 class="card-title"><%=Server.HTMLEncode(deviceName)%></h5>
|
|
<h5 class="card-title"><%If Not IsNull(rs("vendor")) Then Response.Write(Server.HTMLEncode(rs("vendor"))) Else Response.Write(" ") End If%></h5>
|
|
<h5 class="card-text"><%=Server.HTMLEncode(rs("devicetype"))%></h5>
|
|
<p class="card-text"><%If deviceDescription <> "" Then Response.Write(Server.HTMLEncode(deviceDescription)) Else Response.Write(" ") End If%></p>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-lg-8">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<ul class="nav nav-tabs nav-tabs-primary top-icon nav-justified">
|
|
<li class="nav-item">
|
|
<a href="javascript:void();" data-target="#settings" data-toggle="pill" class="nav-link active"><i class="icon-wrench"></i> <span class="hidden-xs">Settings</span></a>
|
|
</li>
|
|
<%If LCase(deviceType) = "server" Then%>
|
|
<li class="nav-item">
|
|
<a href="javascript:void();" data-target="#applications" data-toggle="pill" class="nav-link"><i class="zmdi zmdi-apps"></i> <span class="hidden-xs">Applications</span></a>
|
|
</li>
|
|
<%End If%>
|
|
<li class="nav-item">
|
|
<a href="<%=editUrl%>" class="nav-link"><i class="zmdi zmdi-edit"></i> <span class="hidden-xs">Edit</span></a>
|
|
</li>
|
|
</ul>
|
|
<div class="tab-content p-3">
|
|
<div class="tab-pane active" id="settings">
|
|
<h5 class="mb-3">Configuration</h5>
|
|
<div class="row">
|
|
<div class="col-md-3">
|
|
<p class="mb-2"><strong>Type:</strong></p>
|
|
<p class="mb-2"><strong>Name:</strong></p>
|
|
<%If Not IsNull(rs("vendor")) Then%>
|
|
<p class="mb-2"><strong>Vendor:</strong></p>
|
|
<p class="mb-2"><strong>Model:</strong></p>
|
|
<%End If%>
|
|
<%If Not IsNull(rs("serialnumber")) And rs("serialnumber") <> "" Then%>
|
|
<p class="mb-2"><strong>Serial:</strong></p>
|
|
<%End If%>
|
|
<%If Not IsNull(rs("ipaddress")) And rs("ipaddress") <> "" Then%>
|
|
<p class="mb-2"><strong>IP Address:</strong></p>
|
|
<%End If%>
|
|
<%If Not IsNull(rs("macaddress")) And rs("macaddress") <> "" Then%>
|
|
<p class="mb-2"><strong>MAC Address:</strong></p>
|
|
<%End If%>
|
|
<%If Not IsNull(rs("idfname")) Then%>
|
|
<p class="mb-2"><strong>IDF:</strong></p>
|
|
<%End If%>
|
|
<%
|
|
Dim showLogicMonitor
|
|
showLogicMonitor = False
|
|
If LCase(deviceType) = "server" Or LCase(deviceType) = "switch" Or LCase(deviceType) = "firewall" Or LCase(deviceType) = "accesspoint" Or LCase(deviceType) = "access point" Then
|
|
If Not IsNull(rs("logicmonitorurl")) Then
|
|
If rs("logicmonitorurl") & "" <> "" Then showLogicMonitor = True
|
|
End If
|
|
End If
|
|
If showLogicMonitor Then%>
|
|
<p class="mb-2"><strong>Logic Monitor:</strong></p>
|
|
<%End If%>
|
|
<p class="mb-2"><strong>Location:</strong></p>
|
|
<%If deviceDescription <> "" Then%>
|
|
<p class="mb-2"><strong>Notes:</strong></p>
|
|
<%End If%>
|
|
</div>
|
|
<div class="col-md-5">
|
|
<p class="mb-2"><%=Server.HTMLEncode(rs("devicetype"))%></p>
|
|
<p class="mb-2"><%=Server.HTMLEncode(deviceName)%></p>
|
|
<%If Not IsNull(rs("vendor")) Then%>
|
|
<p class="mb-2"><%=Server.HTMLEncode(rs("vendor"))%></p>
|
|
<p class="mb-2"><%=Server.HTMLEncode(rs("modelnumber"))%></p>
|
|
<%End If%>
|
|
<%If Not IsNull(rs("serialnumber")) And rs("serialnumber") <> "" Then%>
|
|
<p class="mb-2"><%=Server.HTMLEncode(rs("serialnumber"))%></p>
|
|
<%End If%>
|
|
<%If Not IsNull(rs("ipaddress")) And rs("ipaddress") <> "" Then%>
|
|
<p class="mb-2"><a href="http://<%=Server.HTMLEncode(rs("ipaddress"))%>" target="_blank"><%=Server.HTMLEncode(rs("ipaddress"))%></a></p>
|
|
<%End If%>
|
|
<%If Not IsNull(rs("macaddress")) And rs("macaddress") <> "" Then%>
|
|
<p class="mb-2"><code><%=Server.HTMLEncode(rs("macaddress"))%></code></p>
|
|
<%End If%>
|
|
<%If Not IsNull(rs("idfname")) Then%>
|
|
<p class="mb-2"><a href="displaydevice.asp?type=idf&id=<%=rs("idfid")%>"><%=Server.HTMLEncode(rs("idfname"))%></a></p>
|
|
<%End If%>
|
|
<%If showLogicMonitor Then%>
|
|
<p class="mb-2"><a href="<%=Server.HTMLEncode(rs("logicmonitorurl") & "")%>" target="_blank"><i class="zmdi zmdi-open-in-new"></i> View in Logic Monitor</a></p>
|
|
<%End If%>
|
|
<p class="mb-2">
|
|
<%If Not IsNull(rs("maptop")) And Not IsNull(rs("mapleft")) Then%>
|
|
<span class="location-link" data-deviceid="<%=deviceId%>" data-devicetype="<%=LCase(deviceType)%>" style="cursor:pointer; color:#007bff;">
|
|
<i class="zmdi zmdi-pin" style="margin-right:4px;"></i>View on Map
|
|
</span>
|
|
<%Else%>
|
|
<em>Not set</em>
|
|
<%End If%>
|
|
</p>
|
|
<%If deviceDescription <> "" Then%>
|
|
<p class="mb-2"><%=Server.HTMLEncode(deviceDescription)%></p>
|
|
<%End If%>
|
|
</div>
|
|
</div>
|
|
<!--/row-->
|
|
</div>
|
|
|
|
<%If LCase(deviceType) = "server" Then
|
|
' Query installed applications for this server
|
|
Dim rsApps, strAppSQL, appCount
|
|
appCount = 0
|
|
strAppSQL = "SELECT ia.installedappid, a.appid, a.appname, a.appdescription, " & _
|
|
"av.version, ia.isactive " & _
|
|
"FROM installedapps ia " & _
|
|
"INNER JOIN applications a ON ia.appid = a.appid " & _
|
|
"LEFT JOIN appversions av ON ia.appversionid = av.appversionid " & _
|
|
"WHERE ia.machineid = " & CLng(deviceId) & " AND ia.isactive = 1 " & _
|
|
"ORDER BY a.appname"
|
|
Set rsApps = objConn.Execute(strAppSQL)
|
|
%>
|
|
<div class="tab-pane" id="applications">
|
|
<div class="table-responsive">
|
|
<table class="table table-hover table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th>Application</th>
|
|
<th>Version</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<% If rsApps.EOF Then %>
|
|
<tr><td colspan="3"><span class='text-muted'><em>No applications assigned to this server</em></span></td></tr>
|
|
<% Else
|
|
Do While Not rsApps.EOF
|
|
appCount = appCount + 1 %>
|
|
<tr>
|
|
<td><a href="displayapplication.asp?appid=<%=rsApps("appid")%>"><%=Server.HTMLEncode(rsApps("appname") & "")%></a></td>
|
|
<td><%If Not IsNull(rsApps("version")) Then Response.Write(Server.HTMLEncode(rsApps("version") & "")) Else Response.Write("<em class='text-muted'>-</em>")%></td>
|
|
<td><%If Not IsNull(rsApps("appdescription")) Then Response.Write(Server.HTMLEncode(rsApps("appdescription") & "")) Else Response.Write("<em class='text-muted'>-</em>")%></td>
|
|
</tr>
|
|
<% rsApps.MoveNext
|
|
Loop
|
|
End If
|
|
rsApps.Close
|
|
Set rsApps = Nothing %>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="mt-2">
|
|
<small class="text-muted"><%=appCount%> application(s) hosted on this server</small>
|
|
</div>
|
|
</div>
|
|
<%End If%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
<!-- End container-fluid-->
|
|
|
|
</div><!--End content-wrapper-->
|
|
<!--Start Back To Top Button-->
|
|
<a href="javaScript:void();" class="back-to-top"><i class="fa fa-angle-double-up"></i> </a>
|
|
<!--End Back To Top Button-->
|
|
|
|
<!--Start footer-->
|
|
<footer class="footer">
|
|
<div class="container">
|
|
<div class="text-center">
|
|
Copyright © 2018 DayTrader Template
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
<!--End footer-->
|
|
|
|
</div><!--End wrapper-->
|
|
|
|
<!-- Bootstrap core JavaScript-->
|
|
<script src="assets/js/jquery.min.js"></script>
|
|
<script src="assets/js/popper.min.js"></script>
|
|
<script src="assets/js/bootstrap.min.js"></script>
|
|
|
|
<!-- sidebar-menu js -->
|
|
<script src="assets/js/sidebar-menu.js"></script>
|
|
|
|
<!-- Custom scripts -->
|
|
<script src="assets/js/app-script.js"></script>
|
|
|
|
<style>
|
|
.location-popup-overlay {
|
|
display: none;
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: rgba(0, 0, 0, 0.5);
|
|
z-index: 9998;
|
|
}
|
|
.location-popup {
|
|
display: none;
|
|
position: fixed;
|
|
background: #2a2a2a;
|
|
border-radius: 6px;
|
|
box-shadow: 0 4px 20px rgba(0,0,0,0.3);
|
|
z-index: 9999;
|
|
overflow: hidden;
|
|
border: 1px solid #444;
|
|
}
|
|
.location-popup-header {
|
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
padding: 12px 16px;
|
|
color: white;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
}
|
|
.location-popup-close {
|
|
background: rgba(255,255,255,0.2);
|
|
border: none;
|
|
color: white;
|
|
font-size: 24px;
|
|
cursor: pointer;
|
|
width: 30px;
|
|
height: 30px;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
line-height: 1;
|
|
padding: 0;
|
|
transition: background 0.2s;
|
|
}
|
|
.location-popup-close:hover {
|
|
background: rgba(255,255,255,0.3);
|
|
}
|
|
.location-popup-body {
|
|
padding: 0;
|
|
background: #1a1a1a;
|
|
}
|
|
.location-popup-body iframe {
|
|
display: block;
|
|
border: none;
|
|
border-radius: 0 0 6px 6px;
|
|
}
|
|
.location-link:hover {
|
|
text-decoration: underline;
|
|
}
|
|
</style>
|
|
|
|
<script>
|
|
$(document).ready(function() {
|
|
var $overlay = $('<div class="location-popup-overlay"></div>').appendTo('body');
|
|
var $popup = $('<div class="location-popup"></div>').appendTo('body');
|
|
|
|
$popup.html(
|
|
'<div class="location-popup-header">' +
|
|
'<h6 style="margin:0; font-size:16px;"><i class="zmdi zmdi-pin"></i> <span class="location-title">Loading...</span></h6>' +
|
|
'<button class="location-popup-close" title="Close (Esc)">×</button>' +
|
|
'</div>' +
|
|
'<div class="location-popup-body">' +
|
|
'<iframe src="" width="440" height="340"></iframe>' +
|
|
'</div>'
|
|
);
|
|
|
|
var $iframe = $popup.find('iframe');
|
|
var $title = $popup.find('.location-title');
|
|
var currentDeviceId = null;
|
|
var currentDeviceType = null;
|
|
var hoverTimer = null;
|
|
|
|
function showLocationPopup(deviceId, deviceType, deviceName, mouseEvent) {
|
|
if (currentDeviceId === deviceId && currentDeviceType === deviceType && $popup.is(':visible')) {
|
|
return;
|
|
}
|
|
|
|
currentDeviceId = deviceId;
|
|
currentDeviceType = deviceType;
|
|
$title.text(deviceName);
|
|
$iframe.attr('src', './displaylocation.asp?type=' + deviceType + '&id=' + deviceId);
|
|
|
|
var popupWidth = 440;
|
|
var popupHeight = 400;
|
|
var mouseX = mouseEvent.clientX;
|
|
var mouseY = mouseEvent.clientY;
|
|
var windowWidth = window.innerWidth;
|
|
var windowHeight = window.innerHeight;
|
|
|
|
var left, top;
|
|
|
|
left = mouseX + 10;
|
|
if (left + popupWidth > windowWidth - 10) {
|
|
left = mouseX - popupWidth - 10;
|
|
}
|
|
if (left < 10) {
|
|
left = 10;
|
|
}
|
|
|
|
top = mouseY + 10;
|
|
if (top + popupHeight > windowHeight - 10) {
|
|
top = mouseY - popupHeight - 10;
|
|
}
|
|
if (top < 10) {
|
|
top = 10;
|
|
}
|
|
|
|
$popup.css({
|
|
left: left + 'px',
|
|
top: top + 'px'
|
|
});
|
|
|
|
$overlay.fadeIn(200);
|
|
$popup.fadeIn(200);
|
|
}
|
|
|
|
function hideLocationPopup() {
|
|
$overlay.fadeOut(200);
|
|
$popup.fadeOut(200, function() {
|
|
$iframe.attr('src', '');
|
|
});
|
|
currentDeviceId = null;
|
|
currentDeviceType = null;
|
|
}
|
|
|
|
$('.location-link').on('mouseenter', function(e) {
|
|
var $link = $(this);
|
|
var deviceId = $link.data('deviceid');
|
|
var deviceType = $link.data('devicetype');
|
|
var deviceName = $link.closest('.col-md-5').prev('.col-md-3').find('strong').first().parent().next().text().trim();
|
|
var mouseEvent = e;
|
|
|
|
if (hoverTimer) {
|
|
clearTimeout(hoverTimer);
|
|
}
|
|
|
|
hoverTimer = setTimeout(function() {
|
|
showLocationPopup(deviceId, deviceType, deviceName, mouseEvent);
|
|
}, 300);
|
|
});
|
|
|
|
$('.location-link').on('mouseleave', function() {
|
|
if (hoverTimer) {
|
|
clearTimeout(hoverTimer);
|
|
hoverTimer = null;
|
|
}
|
|
});
|
|
|
|
$('.location-link').on('click', function(e) {
|
|
e.preventDefault();
|
|
var deviceId = $(this).data('deviceid');
|
|
var deviceType = $(this).data('devicetype');
|
|
window.open('networkmap.asp', '_blank');
|
|
});
|
|
|
|
$popup.on('mouseenter', function() {});
|
|
$popup.on('mouseleave', function() {
|
|
hideLocationPopup();
|
|
});
|
|
|
|
$overlay.on('click', hideLocationPopup);
|
|
$popup.find('.location-popup-close').on('click', hideLocationPopup);
|
|
|
|
$(document).on('keydown', function(e) {
|
|
if (e.key === 'Escape' && $popup.is(':visible')) {
|
|
hideLocationPopup();
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|
|
<%
|
|
rs.Close
|
|
Set rs = Nothing
|
|
objConn.Close
|
|
%>
|