mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-08-27 20:40:13 +03:00
120 lines
12 KiB
HTML
120 lines
12 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en" data-beasties-container>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>GNS3 Web UI</title>
|
|
<!-- It's important to have base here because of the script below //-->
|
|
<base href="/static/web-ui/">
|
|
|
|
<script>
|
|
var userAgent = navigator.userAgent.toLowerCase();
|
|
|
|
//in case we're running in electron because we need it for resources
|
|
if (userAgent.indexOf(' electron/') > -1) {
|
|
var base = document.getElementsByTagName('base');
|
|
if (base.length > 0) {
|
|
base[0].href = './';
|
|
} else {
|
|
document.write('<base href="./" />');
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<link rel="icon" type="image/x-icon" href="assets/favicon.ico">
|
|
|
|
<script type="application/javascript">
|
|
// Github Pages redirection
|
|
(function () {
|
|
var redirect = sessionStorage.redirect;
|
|
delete sessionStorage.redirect;
|
|
if (redirect && redirect != location.href) {
|
|
history.replaceState(null, null, redirect);
|
|
}
|
|
})();
|
|
</script>
|
|
<style>:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, .15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, .75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, .5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, .175);--bs-border-radius:.375rem;--bs-border-radius-sm:.25rem;--bs-border-radius-lg:.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 .5rem 1rem rgba(0, 0, 0, .15);--bs-box-shadow-sm:0 .125rem .25rem rgba(0, 0, 0, .075);--bs-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, .175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0, 0, 0, .075);--bs-focus-ring-width:.25rem;--bs-focus-ring-opacity:.25;--bs-focus-ring-color:rgba(13, 110, 253, .25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}*,:after,:before{box-sizing:border-box}@media(prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}:root{--bs-btn-close-filter: }:root{--bs-carousel-indicator-active-bg:#fff;--bs-carousel-caption-color:#fff;--bs-carousel-control-icon-filter: }@font-face{font-family:Noto Sans;src:url("./media/NotoSans-Regular-CVVXLBAZ.eot");src:local("Noto Sans Regular"),local("NotoSans-Regular"),url("./media/NotoSans-Regular-CVVXLBAZ.eot?#iefix") format("embedded-opentype"),url("./media/NotoSans-Regular-G5GRGKTI.woff2") format("woff2"),url("./media/NotoSans-Regular-LFPD6WDW.woff") format("woff"),url("./media/NotoSans-Regular-4YJZZMLG.ttf") format("truetype"),url("./media/NotoSans-Regular-XM4E3356.svg#NotoSans-Regular") format("svg");font-weight:400;font-style:normal}@font-face{font-family:Noto Sans;src:url("./media/NotoSans-Italic-QUMULBNO.eot");src:local("Noto Sans Italic"),local("NotoSans-Italic"),url("./media/NotoSans-Italic-QUMULBNO.eot?#iefix") format("embedded-opentype"),url("./media/NotoSans-Italic-53QCKAHI.woff2") format("woff2"),url("./media/NotoSans-Italic-O7GTQGFV.woff") format("woff"),url("./media/NotoSans-Italic-EGPORDS3.ttf") format("truetype"),url("./media/NotoSans-Italic-HVXXZ53S.svg#NotoSans-Italic") format("svg");font-weight:400;font-style:italic}@font-face{font-family:Noto Sans;src:url("./media/NotoSans-Bold-U6VRRGSF.eot");src:local("Noto Sans Bold"),local("NotoSans-Bold"),url("./media/NotoSans-Bold-U6VRRGSF.eot?#iefix") format("embedded-opentype"),url("./media/NotoSans-Bold-MNPJFEO7.woff2") format("woff2"),url("./media/NotoSans-Bold-RBKCPTHN.woff") format("woff"),url("./media/NotoSans-Bold-5GE4CF2E.ttf") format("truetype"),url("./media/NotoSans-Bold-SMQDUQ54.svg#NotoSans-Bold") format("svg");font-weight:700;font-style:normal}@font-face{font-family:Noto Sans;src:url("./media/NotoSans-BoldItalic-P7PPOO2H.eot");src:local("Noto Sans BoldItalic"),local("NotoSans-BoldItalic"),url("./media/NotoSans-BoldItalic-P7PPOO2H.eot?#iefix") format("embedded-opentype"),url("./media/NotoSans-BoldItalic-YYXXB4JB.woff2") format("woff2"),url("./media/NotoSans-BoldItalic-FOXTHNRZ.woff") format("woff"),url("./media/NotoSans-BoldItalic-F3VJXIBO.ttf") format("truetype"),url("./media/NotoSans-BoldItalic-I2S65SI5.svg#NotoSans-BoldItalic") format("svg");font-weight:700;font-style:italic}:root{--gns3-map-bg-auto:#fafafa;--gns3-map-bg-light:#fafafa;--gns3-map-bg-dark:#424242;--gns3-map-bg-light-1:radial-gradient(ellipse at 20% 20%, #b2ebf2 0%, #e0f7fa 70%);--gns3-map-bg-light-2:radial-gradient(ellipse at 20% 20%, #bbdefb 0%, #e3f2fd 70%);--gns3-map-bg-light-3:radial-gradient(ellipse at 20% 20%, #f5f5f5 0%, #fafafa 70%);--gns3-map-bg-light-4:radial-gradient(ellipse at 20% 20%, #e1bee7 0%, #f3e5f5 70%);--gns3-map-bg-dark-1:linear-gradient(135deg, #006064 0%, #00838f 50%, #006064 100%);--gns3-map-bg-dark-2:linear-gradient(135deg, #1565c0 0%, #1976d2 50%, #1565c0 100%);--gns3-map-bg-dark-3:linear-gradient(135deg, #424242 0%, #616161 50%, #424242 100%);--gns3-map-bg-dark-4:linear-gradient(135deg, #4a148c 0%, #6a1b9a 50%, #4a148c 100%)}:root{--gns3-shadow-opacity-subtle:10%;--gns3-shadow-opacity-light:15%;--gns3-shadow-opacity-normal:20%;--gns3-shadow-opacity-medium:25%;--gns3-shadow-opacity-strong:30%;--gns3-shadow-opacity-heavy:40%;--gns3-border-opacity-subtle:8%;--gns3-border-opacity-light:12%;--gns3-border-opacity-normal:15%;--gns3-border-opacity-medium:20%;--gns3-border-opacity-strong:25%;--gns3-selection-opacity-light:10%;--gns3-selection-opacity-normal:15%;--gns3-selection-opacity-medium:20%}app-root{width:100%;height:100%}html,body{height:100%;margin:0;padding:0}</style><link rel="stylesheet" href="styles-J2IVGYP4.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-J2IVGYP4.css"></noscript></head>
|
|
<!-- <body class="mat-app-background" oncontextmenu="return false;"> -->
|
|
<body oncontextmenu="return false;">
|
|
<app-root></app-root>
|
|
<!-- Global site tag (gtag.js) - Google Analytics -->
|
|
<script>
|
|
(function () {
|
|
'use strict';
|
|
|
|
/**
|
|
* Check if user has enabled statistics
|
|
* @returns {boolean} true if statistics are enabled
|
|
*/
|
|
function isStatisticsEnabled() {
|
|
try {
|
|
const setting = localStorage.getItem('statistics_command');
|
|
|
|
// First visit: enabled by default
|
|
if (setting === null) {
|
|
console.info('[Analytics] First visit, statistics enabled by default');
|
|
return true;
|
|
}
|
|
|
|
const enabled = setting === 'true';
|
|
console.info('[Analytics] Statistics ' + (enabled ? 'enabled' : 'disabled') + ' by user preference');
|
|
return enabled;
|
|
} catch (e) {
|
|
console.warn('[Analytics] Error reading statistics setting:', e);
|
|
return false; // Default to disabled on error
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Initialize Google Analytics
|
|
*/
|
|
function initGoogleAnalytics() {
|
|
// Check user setting
|
|
if (!isStatisticsEnabled()) {
|
|
console.info('[Analytics] Not loading per user settings');
|
|
return;
|
|
}
|
|
|
|
// Initialize dataLayer
|
|
window.dataLayer = window.dataLayer || [];
|
|
|
|
// Define gtag function
|
|
window.gtag = function () {
|
|
window.dataLayer.push(arguments);
|
|
};
|
|
|
|
// Configure Google Analytics
|
|
window.gtag('js', new Date());
|
|
window.gtag('config', 'G-0BT7QQV1W1', {
|
|
send_page_view: false, // Manual page view control
|
|
anonymize_ip: true, // Anonymize IP addresses
|
|
});
|
|
|
|
// Dynamically load script
|
|
var script = document.createElement('script');
|
|
script.async = true;
|
|
script.src = 'https://www.googletagmanager.com/gtag/js?id=G-0BT7QQV1W1';
|
|
|
|
script.onload = function () {
|
|
console.info('[Analytics] Google Analytics loaded successfully');
|
|
};
|
|
|
|
script.onerror = function () {
|
|
console.warn('[Analytics] Failed to load Google Analytics');
|
|
};
|
|
|
|
// Add to head
|
|
document.head.appendChild(script);
|
|
}
|
|
|
|
// Initialize on page load
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', initGoogleAnalytics);
|
|
} else {
|
|
initGoogleAnalytics();
|
|
}
|
|
})();
|
|
</script>
|
|
<link rel="modulepreload" href="chunk-7KO7VTTK.js"><script src="main-IF563FB2.js" type="module"></script></body>
|
|
</html>
|