You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

142 lines
5.8 KiB

  1. <!DOCTYPE html>
  2. <html>
  3. <!--v=3-->
  4. <head>
  5. <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
  6. <meta http-equiv="Pragma" content="no-cache" />
  7. <meta http-equiv="Expires" content="0" />
  8. <meta charset="utf-8" />
  9. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
  10. <title>SensorFarm Admin</title>
  11. <base href="/" />
  12. <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" rel="stylesheet" />
  13. <link href="css/app.css" rel="stylesheet" />
  14. <link href="Panel.styles.css" rel="stylesheet" />
  15. <link href="manifest.json" rel="manifest" />
  16. <link rel="apple-touch-icon" sizes="512x512" href="icon-512.png" />
  17. <link rel="apple-touch-icon" sizes="192x192" href="icon-192.png" />
  18. <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
  19. <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.3/font/bootstrap-icons.css" rel="stylesheet" />
  20. </head>
  21. <body>
  22. <div id="spinnerDiv" style="display:none;">
  23. <div class="spinner spinner-border text-warning" role="status">
  24. <span class="visually-hidden">Loading...</span>
  25. </div>
  26. <style>
  27. #spinnerDiv {
  28. width: 100vw;
  29. height: 100vh;
  30. position: absolute;
  31. left: 0;
  32. top: 0;
  33. opacity: 0.2;
  34. background-color: black;
  35. z-index: 100000;
  36. }
  37. .spinner {
  38. position: absolute;
  39. left: calc(50% - 30px);
  40. top: calc(50% - 30px);
  41. width: 50px;
  42. height: 50px;
  43. margin: 0px auto;
  44. }
  45. </style>
  46. </div>
  47. <div id="app">
  48. <div class="splash">
  49. <div class="spinner-border text-warning"></div>
  50. </div>
  51. </div>
  52. <div id="blazor-error-ui">
  53. unhandled Error!
  54. <button class="btn btn-primary" onclick="return RefreshPage();" class="btn btn-bordered">Refresh</button>
  55. </div>
  56. <script src="_framework/blazor.webassembly.js?v=3"></script>
  57. <script>navigator.serviceWorker.register('service-worker.js?v=3');</script>
  58. <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
  59. <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.0.1/chart.umd.js" integrity="sha512-gQhCDsnnnUfaRzD8k1L5llCCV6O9HN09zClIzzeJ8OJ9MpGmIlCxm+pdCkqTwqJ4JcjbojFr79rl2F1mzcoLMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <!-- Add chart.js reference if Chart components are used in the application. -->
  60. <script src="_content/Blazor.Bootstrap/blazor.bootstrap.js"></script>
  61. <script src="_content/CurrieTechnologies.Razor.SweetAlert2/sweetAlert2.min.js"></script>
  62. <script src="/js/jquery-2.2.4.js" type="text/javascript"></script>
  63. <script src="/js/datepicker.min.js" type="text/javascript"></script>
  64. <script>
  65. function RefreshPage() {
  66. document.getElementById("blazor-error-ui").style.display = "none";
  67. if (window.history.length > 0)
  68. history.back();
  69. }
  70. window.AbrMethods = {
  71. getInputValue: function (id) {
  72. return document.getElementById(id).value;
  73. }
  74. }
  75. window.methods = {
  76. ShowLoading: function () {
  77. document.getElementById("spinnerDiv").style.display = "block";
  78. },
  79. HideLoading: function () {
  80. document.getElementById("spinnerDiv").style.display = "none";
  81. },
  82. getDimensions: function () {
  83. return {
  84. width: document.body.clientWidth,
  85. height: document.body.clientHeight
  86. };
  87. },
  88. CopyInputValue: function (inputId) {
  89. /* Get the text field */
  90. var copyText = document.getElementById(inputId);
  91. /* Select the text field */
  92. copyText.select();
  93. copyText.setSelectionRange(0, 99999); /* For mobile devices */
  94. /* Copy the text inside the text field */
  95. document.execCommand("copy");
  96. },
  97. blazorOpen: function (args) {
  98. window.open(args);
  99. },
  100. ScrollToEnd: function () {
  101. window.scrollTo(0, document.body.scrollHeight);
  102. },
  103. PrepareResponsiveTable: function (inputId) {
  104. jQuery('table').each(function () {
  105. var $table = jQuery(this);
  106. var tableCols = $table.find('th').length;
  107. $table.find('tbody > tr').each(function (index, tr) {
  108. if (!$(tr).hasClass('extra'))
  109. for (var i = 1; i <= tableCols; i++) {
  110. var header = $table.find("thead > tr th:nth-child(" + i + ")").html();
  111. if (header)
  112. header += ": ";
  113. $("td:nth-child(" + i + ")", tr).attr('data-content', header);
  114. }
  115. });
  116. });
  117. },
  118. triggerFileDownload: function (fileName, url) {
  119. const anchorElement = document.createElement('a');
  120. anchorElement.href = url;
  121. anchorElement.download = fileName ?? '';
  122. anchorElement.click();
  123. anchorElement.remove();
  124. }
  125. };
  126. </script>
  127. </body>
  128. </html>