Browse Source

0926

master
ming.hong 1 year ago
parent
commit
8d4bb82ecb
  1. BIN
      Aida/Icon/CarWithRim_Yellow_64x64px.png
  2. BIN
      Aida/Icon/Car_Green_64x64px.png
  3. BIN
      Aida/Icon/Counter_Green_64x64px.png
  4. BIN
      Aida/Icon/EUR.png
  5. BIN
      Aida/Icon/FlowIn02_Green_64x64px.png
  6. BIN
      Aida/Icon/FlowIn_Green_64x64px.png
  7. BIN
      Aida/Icon/FlowOut02_Green_64x64px.png
  8. BIN
      Aida/Icon/FlowOut_Green_64x64px.png
  9. BIN
      Aida/Icon/GoStraight_Green_64x64px.png
  10. BIN
      Aida/Icon/HardHat_Green_64x64px.png
  11. BIN
      Aida/Icon/LoiteringDetection_Green_64x64px.png
  12. BIN
      Aida/Icon/Mask_Green_64x64px.png
  13. BIN
      Aida/Icon/MotorbikeWithRim_Yellow_64x64px.png
  14. BIN
      Aida/Icon/NoCar_Red_64x64px.png
  15. BIN
      Aida/Icon/NoCar_Red_64x64px_1.png
  16. BIN
      Aida/Icon/NoCar_Red_64x64px_2.png
  17. BIN
      Aida/Icon/NoCar_Red_64x64px_3.png
  18. BIN
      Aida/Icon/NoGoingStraight_Red_64x64px.png
  19. BIN
      Aida/Icon/NoHardHat_Red_64x64px.png
  20. BIN
      Aida/Icon/NoLeftTurn_Red_64x64px.png
  21. BIN
      Aida/Icon/NoMask_Red_64x64px.png
  22. BIN
      Aida/Icon/NoMotorbike_Red_64x64px.png
  23. BIN
      Aida/Icon/NoParking_Red_64x64px.png
  24. BIN
      Aida/Icon/NoPeople_Red_64x64px.png
  25. BIN
      Aida/Icon/NoRightTurn_Red_64x64px.png
  26. BIN
      Aida/Icon/NoTruck_Red_64x64px.png
  27. BIN
      Aida/Icon/NoUTurn_Red_64x64px.png
  28. BIN
      Aida/Icon/NoWay_Red_64x64px.png
  29. BIN
      Aida/Icon/ParkingSpot_Green_64x64px.png
  30. BIN
      Aida/Icon/Queue_Green_64x64px.png
  31. BIN
      Aida/Icon/SpeedWithRim_Red_64x64px.png
  32. BIN
      Aida/Icon/SpeedWithRim_Yellow_64x64px.png
  33. BIN
      Aida/Icon/TWN.png
  34. BIN
      Aida/Icon/TruckWithRim_Yellow_64x64px.png
  35. BIN
      Aida/Icon/TurnLeft_Green_64x64px.png
  36. BIN
      Aida/Icon/TurnRight_Green_64x64px.png
  37. BIN
      Aida/Icon/USA.png
  38. BIN
      Aida/Icon/WalkingManWithRim_Yellow_64x64px.png
  39. BIN
      Aida/Icon/WalkingMan_Green_64x64px.png
  40. BIN
      Aida/Icon/ZoneViolation_Red_64x64px.png
  41. BIN
      Aida/Icon/counter_icon/car_1_300X300_blue.png
  42. BIN
      Aida/Icon/counter_icon/car_1_300X300_red.png
  43. BIN
      Aida/Icon/counter_icon/car_300X300_white.png
  44. BIN
      Aida/Icon/counter_icon/car_distance_1_300X300_blue.png
  45. BIN
      Aida/Icon/counter_icon/car_distance_1_300X300_red.png
  46. BIN
      Aida/Icon/counter_icon/car_distance_300X300_white.png
  47. BIN
      Aida/Icon/counter_icon/container_1_300X300_blue.png
  48. BIN
      Aida/Icon/counter_icon/container_1_300X300_red.png
  49. BIN
      Aida/Icon/counter_icon/container_300X300_white.png
  50. BIN
      Aida/Icon/counter_icon/cruise_ship_1_300X300_blue.png
  51. BIN
      Aida/Icon/counter_icon/cruise_ship_1_300X300_red.png
  52. BIN
      Aida/Icon/counter_icon/cruise_ship_300X300_white.png
  53. BIN
      Aida/Icon/counter_icon/dog_1_300X300_blue.png
  54. BIN
      Aida/Icon/counter_icon/dog_1_300X300_red.png
  55. BIN
      Aida/Icon/counter_icon/dog_300X300_white.png
  56. BIN
      Aida/Icon/counter_icon/facial_recognition_1_300X300_blue.png
  57. BIN
      Aida/Icon/counter_icon/facial_recognition_1_300X300_red.png
  58. BIN
      Aida/Icon/counter_icon/facial_recognition_300X300_white.png
  59. BIN
      Aida/Icon/counter_icon/fire_1_300X300_blue.png
  60. BIN
      Aida/Icon/counter_icon/fire_1_300X300_red.png
  61. BIN
      Aida/Icon/counter_icon/fire_300X300_white.png
  62. BIN
      Aida/Icon/counter_icon/helmet_1_300X300_blue.png
  63. BIN
      Aida/Icon/counter_icon/helmet_1_300X300_red.png
  64. BIN
      Aida/Icon/counter_icon/helmet_300X300_white.png
  65. BIN
      Aida/Icon/counter_icon/mask_1_300X300_blue.png
  66. BIN
      Aida/Icon/counter_icon/mask_1_300X300_red.png
  67. BIN
      Aida/Icon/counter_icon/mask_300X300_white.png
  68. BIN
      Aida/Icon/counter_icon/motorbike_1_300X300_blue.png
  69. BIN
      Aida/Icon/counter_icon/motorbike_1_300X300_red.png
  70. BIN
      Aida/Icon/counter_icon/motorbike_300X300_white.png
  71. BIN
      Aida/Icon/counter_icon/queue_1_300X300_blue.png
  72. BIN
      Aida/Icon/counter_icon/queue_1_300X300_red.png
  73. BIN
      Aida/Icon/counter_icon/queue_300X300_white.png
  74. BIN
      Aida/Icon/counter_icon/social_distance_1_300X300_blue.png
  75. BIN
      Aida/Icon/counter_icon/social_distance_1_300X300_red.png
  76. BIN
      Aida/Icon/counter_icon/social_distance_300X300_white.png
  77. BIN
      Aida/Icon/counter_icon/truck_1_300X300_blue.png
  78. BIN
      Aida/Icon/counter_icon/truck_1_300X300_red.png
  79. BIN
      Aida/Icon/counter_icon/truck_300X300_white.png
  80. BIN
      Aida/Icon/counter_icon/vest_1_300X300_blue.png
  81. BIN
      Aida/Icon/counter_icon/vest_1_300X300_red.png
  82. BIN
      Aida/Icon/counter_icon/vest_300X300_white.png
  83. BIN
      Aida/Icon/counter_icon/walking_man_1_300X300_blue.png
  84. BIN
      Aida/Icon/counter_icon/walking_man_1_300X300_red.png
  85. BIN
      Aida/Icon/counter_icon/walking_man_300X300_white.png
  86. 1
      Aida/aes.js
  87. 8770
      Aida/ai_meta.html
  88. 649
      Aida/airelay_init.html
  89. 7708
      Aida/alarm.html
  90. 5322
      Aida/alarm.js
  91. 8621
      Aida/alarm_on_airelay.html
  92. 6076
      Aida/alarm_on_airelay.js
  93. 7810
      Aida/alarm_on_nvr.html
  94. 1258
      Aida/anpr_index.html
  95. 30
      Aida/bootstrap.min.css
  96. 275
      Aida/cgi.js
  97. 347
      Aida/chirun_min.js
  98. 121
      Aida/config.js
  99. 84
      Aida/cookie.min.js
  100. 1408
      Aida/cool_counter.html
  101. Some files were not shown because too many files have changed in this diff Show More

BIN
Aida/Icon/CarWithRim_Yellow_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
Aida/Icon/Car_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
Aida/Icon/Counter_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
Aida/Icon/EUR.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 B

BIN
Aida/Icon/FlowIn02_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
Aida/Icon/FlowIn_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
Aida/Icon/FlowOut02_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
Aida/Icon/FlowOut_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
Aida/Icon/GoStraight_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

BIN
Aida/Icon/HardHat_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
Aida/Icon/LoiteringDetection_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
Aida/Icon/Mask_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
Aida/Icon/MotorbikeWithRim_Yellow_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
Aida/Icon/NoCar_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
Aida/Icon/NoCar_Red_64x64px_1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
Aida/Icon/NoCar_Red_64x64px_2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
Aida/Icon/NoCar_Red_64x64px_3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
Aida/Icon/NoGoingStraight_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
Aida/Icon/NoHardHat_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
Aida/Icon/NoLeftTurn_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
Aida/Icon/NoMask_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
Aida/Icon/NoMotorbike_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
Aida/Icon/NoParking_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
Aida/Icon/NoPeople_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
Aida/Icon/NoRightTurn_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
Aida/Icon/NoTruck_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
Aida/Icon/NoUTurn_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
Aida/Icon/NoWay_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
Aida/Icon/ParkingSpot_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
Aida/Icon/Queue_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
Aida/Icon/SpeedWithRim_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
Aida/Icon/SpeedWithRim_Yellow_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
Aida/Icon/TWN.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

BIN
Aida/Icon/TruckWithRim_Yellow_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
Aida/Icon/TurnLeft_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
Aida/Icon/TurnRight_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 B

BIN
Aida/Icon/USA.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

BIN
Aida/Icon/WalkingManWithRim_Yellow_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
Aida/Icon/WalkingMan_Green_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
Aida/Icon/ZoneViolation_Red_64x64px.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
Aida/Icon/counter_icon/car_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
Aida/Icon/counter_icon/car_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
Aida/Icon/counter_icon/car_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

BIN
Aida/Icon/counter_icon/car_distance_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
Aida/Icon/counter_icon/car_distance_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
Aida/Icon/counter_icon/car_distance_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
Aida/Icon/counter_icon/container_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
Aida/Icon/counter_icon/container_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

BIN
Aida/Icon/counter_icon/container_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
Aida/Icon/counter_icon/cruise_ship_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
Aida/Icon/counter_icon/cruise_ship_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
Aida/Icon/counter_icon/cruise_ship_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
Aida/Icon/counter_icon/dog_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

BIN
Aida/Icon/counter_icon/dog_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
Aida/Icon/counter_icon/dog_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

BIN
Aida/Icon/counter_icon/facial_recognition_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
Aida/Icon/counter_icon/facial_recognition_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
Aida/Icon/counter_icon/facial_recognition_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
Aida/Icon/counter_icon/fire_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
Aida/Icon/counter_icon/fire_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
Aida/Icon/counter_icon/fire_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
Aida/Icon/counter_icon/helmet_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
Aida/Icon/counter_icon/helmet_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

BIN
Aida/Icon/counter_icon/helmet_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
Aida/Icon/counter_icon/mask_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
Aida/Icon/counter_icon/mask_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
Aida/Icon/counter_icon/mask_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
Aida/Icon/counter_icon/motorbike_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
Aida/Icon/counter_icon/motorbike_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

BIN
Aida/Icon/counter_icon/motorbike_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
Aida/Icon/counter_icon/queue_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
Aida/Icon/counter_icon/queue_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

BIN
Aida/Icon/counter_icon/queue_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
Aida/Icon/counter_icon/social_distance_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
Aida/Icon/counter_icon/social_distance_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
Aida/Icon/counter_icon/social_distance_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
Aida/Icon/counter_icon/truck_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
Aida/Icon/counter_icon/truck_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
Aida/Icon/counter_icon/truck_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
Aida/Icon/counter_icon/vest_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
Aida/Icon/counter_icon/vest_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

BIN
Aida/Icon/counter_icon/vest_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

BIN
Aida/Icon/counter_icon/walking_man_1_300X300_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
Aida/Icon/counter_icon/walking_man_1_300X300_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

BIN
Aida/Icon/counter_icon/walking_man_300X300_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

1
Aida/aes.js

File diff suppressed because one or more lines are too long

8770
Aida/ai_meta.html

File diff suppressed because one or more lines are too long

649
Aida/airelay_init.html

@ -0,0 +1,649 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="cache-control"
content="max-age=0" />
<meta http-equiv="cache-control"
content="no-cache, no-store, must-revalidate" />
<meta http-equiv="expires"
content="-1" />
<meta http-equiv="expires"
content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma"
content="no-cache" />
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta charset="utf-8" />
<!-- <link rel="preload" href="./Icon/Counter_Green_64x64px.png" as="image" /> -->
<!-- <link rel="preload" href="images/icon_alarm.png" as="image" />
<link rel="preload" href="images/icon_output.png" as="image" />
<link rel="preload" href="images/icon_setting.png" as="image" />
<link rel="preload" href="images/icon_license.png" as="image" /> -->
<style>
body, html {
font-family: "Arial";
}
* {
box-sizing: border-box;
}
/* Create two equal columns that floats next to each other */
.column {
float: left;
overflow: hidden;
/*width: 33%;*/
padding-left: 10px;
/*height: 300px;*/
/*margin: auto;*/
/* Should be removed. Only for demonstration */
}
/* Clear floats after the columns */
.row:after {
content: "";
display: table;
clear: both;
}
/* Responsive layout - makes the two columns stack on top of each other instead of next to each other */
@media screen and (max-width: 400px) {
.column {
width: 100%;
}
}
/* hide the up and down arrows which are built in number type input */
/* Chrome, Safari, Edge, Opera */
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
/* Firefox */
input[type=number] {
-moz-appearance: textfield;
}
/* 80 port tab inside OK button style */
.Content_stybtn_ln {
/* display: inline-block; */
background-color: #2a2a2a;
border-radius: 10px;
border: 0px;
padding-left: 20px;
padding-right: 20px;
height: 25px;
color: white;
font-family: "Arial","Helvetica","sans-serif";
font-size: 14px;
}
.Content_stybtn_ln:hover {
background-color: #678cd4;
}
.Content_stybtn_ln:disabled {
background-color: grey;
color: #DCDCDC;
}
</style>
<!-- 原 plugin 是用 "jquery_3_2_1.min.js",初始化直接載入,避免載入時間點太慢導致高度設定問題 -->
<script src="/airelay/jquery_3_2_1.min.js"></script>
<!-- 避免在單一檔案卡太久,以非同步處理 -->
<script src="/airelay/fabric_jquery.easyui.min_compressed_on_nvr.js" async></script>
<script>
function GetUrlPort() {
var url_href = window.location.href;
// console.log(`[GetUrlPort] url_href: ${url_href}`);
var arr_url = url_href.split(":");
var port = 80;
if (arr_url.length > 2) { // plugin 開分頁會有 <ip>:<port_number> 格式
port = arr_url[2].split("/")[0];
}
// console.log(`[GetUrlPort] return: ${port}`);
return port;
}
localStorage.setItem('landing_page_port', GetUrlPort());
// console.log("[airelay_init.html] localStorage landing_page_port: ", localStorage.getItem('landing_page_port'));
var g_tcp_tunnel_token = "airelay";
// 逐步加載腳本列表
var resourcesToLoad = [
"/js/common.js",
`/${g_tcp_tunnel_token}/cookie.min.js`,
`/${g_tcp_tunnel_token}/alarm_on_airelay.js`,
`/${g_tcp_tunnel_token}/lang.js`,
`/${g_tcp_tunnel_token}/lang_cookie.js`,
`/${g_tcp_tunnel_token}/config.js`,
`/${g_tcp_tunnel_token}/unit1.js`,
`/${g_tcp_tunnel_token}/label_names.js`,
`/${g_tcp_tunnel_token}/third_party_label_names.js`,
`/${g_tcp_tunnel_token}/lib/owl.carousel.min.js`
];
var loadCount = 0;
function loadScriptsWithDelay() {
var index = 0;
var interval = 20; // 每次迭代之間的延遲時間,單位是毫秒
var errorReconnectInterval = 100;
function loadNextScript() {
if (index < resourcesToLoad.length) {
(function (currentIndex) {
var src = resourcesToLoad[index];
var script = document.createElement('script');
script.type = "text/javascript";
script.src = src;
script.async = false;
script.onload = function () {
// console.log('[script ' + currentIndex + '] ' + src + ' has been successfully loaded');
index++;
setTimeout(loadNextScript, interval); // 加載下一個腳本之前等待一段時間
loadCount++;
};
script.onerror = function () {
console.error('[Error] Failed to load script: ' + src + ' at index: ' + currentIndex);
setTimeout(() => {
window.location.reload();
}, errorReconnectInterval);
};
document.getElementsByTagName("head")[0].appendChild(script);
})(index);
} else {
// console.log("All scripts loaded successfully!");
}
}
// 開始加載第一個腳本
loadNextScript();
}
// 開始使用延遲加載的方式加載腳本
loadScriptsWithDelay();
// --------------------------------------------------------------------------------
var imagesToPreload = [
`/${g_tcp_tunnel_token}/images/rotate.png`,
`/${g_tcp_tunnel_token}/images/slider_handle.png`
];
function preloadImagesWithDelay() {
var imgIndex = 0;
var interval = 150; // 每次迭代之間的延遲時間,單位是毫秒
function loadNextImage() {
if (imgIndex < imagesToPreload.length) {
var src = imagesToPreload[imgIndex];
// console.log("[img " + imgIndex + "] start to preload: "+src);
var link = document.createElement('link');
link.rel = 'preload';
link.href = src;
link.as = 'image';
link.onload = function () {
// console.log('[img ' + imgIndex + '] ' + src + ' has been successfully preloaded');
imgIndex++;
setTimeout(loadNextImage, interval); // 加載下一個影像之前等待一段時間
};
link.onerror = function () {
// console.error('Failed to preload image: ' + src + ' at index: ' + imgIndex);
// 處理影像加載失敗的情況,可以進行重整頁面或其他操作
window.location.reload();
};
document.head.appendChild(link);
} else {
// console.log("All images preloaded successfully!");
}
}
// 開始預加載第一個影像
loadNextImage();
}
// 開始使用延遲加載的方式預加載影像
// preloadImagesWithDelay();
// --------------------------------------------------------------------------------
var tabsButtonId = [
{ tabId: 'TAB_ALARM', textId: 'HTTP_TITLE05', icon: 'icon_alarm.png', pageId: 'alarm' },
{ tabId: 'TAB_OUTPUT', textId: 'HTTP_TITLE08', icon: 'icon_output.png', pageId: 'output' },
{ tabId: 'TAB_SETTING', textId: 'HTTP_TITLE06', icon: 'icon_setting.png', pageId: 'setting' },
{ tabId: 'TAB_LICENSE', textId: 'HTTP_TITLE07', icon: 'icon_license.png', pageId: 'license' }
];
var iconSize = '60px';
var innerIframeId = "innerIframe";
var loadingElementId = 'percentage';
var preloadImgElementId = 'preloadImg';
// 透過 jQuery 拿到外層 iframe 尺寸
var iframeWidth = window.innerWidth - 80;
function addIframeToBody(src) {
// var iframe = document.createElement('iframe');
var iframe = document.getElementById(innerIframeId);
// iframe.id = innerIframeId;
// 避免預設邊框樣式
iframe.style.border = 'none';
iframe.width = iframeWidth;
iframe.style.border = '0';
iframe.frameBorder = '0'; // 設置 frameborder 屬性
// 設置載入檔案來源
iframe.src = src;
}
function addTmpSnapImageToDiv(imgWidth, imgHeight) {
// console.log("create preload img element");
var img = document.createElement('img');
// 設置 img 屬性
img.width = imgWidth;
img.height = imgHeight;
// 載入影像
var port = localStorage.getItem('landing_page_port');
img.src = 'http://' + window.location.hostname + ':' + port + '/snap';
// 將 img 附加到預設位置
var div = document.getElementById(preloadImgElementId);
if (div) {
div.appendChild(img);
}
}
// --------------------------------------------------------------------------------
// 08-08
function func_getWanPort() {
$.ajax({
url: '/network?get=all',
method: "GET",
async: true,
beforeSend: function (xmlHttp) {
xmlHttp.setRequestHeader("If-Modified-Since", "0");
xmlHttp.setRequestHeader("Cache-Control", "no-cache");
// xmlHttp.setRequestHeader("Referer", window.location.origin);
//xmlHttp.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
},
success: function (retdata) {
// console.log(retdata);
func_filterWanInfo(retdata);
},
error: function () {
setTimeout(func_getWanPort(), 3000);
console.warn();
}
});
return false;
}
function func_filterWanInfo(data) {
var targetNumber = '8592';
// 將回傳的資料以換行符號分割為一個陣列
var lines = data.split('\r\n');
// 過濾出以 'lpkg.wan' 開頭且包含 'info=1' 的行
var filteredLines = lines.filter(line => line.startsWith('lpkg.wan') && line.includes('info=1'));
// 輸出過濾後的結果
// console.log("[filterWanInfo] filtered lines:", filteredLines);
// 沒設定 WAN 的情況,預設 8592
localStorage.setItem("plugin_wan_port", targetNumber);
// 使用迴圈掃掠 filteredLines
for (var line of filteredLines) {
if (line.includes(targetNumber)) { // 有設定 WAN 才會從 info 撈到對應關係
var parts = line.split(','); // 以 ',' 裁切
extractedNumber = parts[parts.length - 1]; // 取出最後一個部分
localStorage.setItem("plugin_wan_port", extractedNumber);
break;
}
}
// console.log("plugin wan port: ", localStorage.getItem("plugin_wan_port"));
return filteredLines;
}
function func_setPluginLang(ipcam_lang_index) {
var lang = 'en_gb'; // 預設 English
if (ipcam_lang_index == 1 || ipcam_lang_index == 2) {
lang = 'zh_tw'; // 繁中 簡中 歸納成 Chinese
} else if (ipcam_lang_index == 4) {
lang = 'it_it'; // Italian
} else if (ipcam_lang_index == 11) {
lang = 'ja_jp'; // Japanese
} // 其他語系,歸納到預設
// console.log(`[SetPluginLang] ipcam_lang_index : ${ipcam_lang_index} , set plugin cookie : ${lang}`);
cookie("LANG", lang, "9999/12/31 12:00:00");
var json_data = '{';
json_data += '"system_setting": {';
json_data += '"language": "' + lang + '"';
json_data += '}}';
func_setconfigfile(json_data);
}
// --------------------------------------------------------------------------------
var checkIntervalTime = 500;
var hideLoadPageDeferTime = 1500;
var preloadImgDisplayTime = 500;
var intervalID = null;
var checkPercentageStuckCounter = 0;
var percentage = 0;
var landingPage = "/airelay/alarm_on_airelay.html";
var progressBarHeight = 8;
var snapImgWidth = 720; // 同 G_VIEW_CANVAS_X 設定
var snapImgHeight = 480; // 同 G_VIEW_CANVAS_Y 設定
clearInterval(intervalID);
// 持續檢核是否加載完成
intervalID = setInterval(function () {
var loadingElement = document.getElementById(loadingElementId);
var prevPercentage = percentage;
var percentageStuckThreshold = 30; // 08-16 原設定 2,網速慢時,容易載一半就當成錯誤,才拉長等待時間
percentage = Math.round(((loadCount / resourcesToLoad.length) * 100), 2);
// console.log("[setInterval] check percentage: " + percentage + " , prev percentage: " + prevPercentage);
if ((percentage == prevPercentage) && (percentage < 100)) {
checkPercentageStuckCounter++;
// console.log("checkPercentageStuckCounter: ", checkPercentageStuckCounter);
if (checkPercentageStuckCounter >= percentageStuckThreshold) {
// console.log("reload init page");
window.location.reload();
}
} else {
// 頻寬差時,不能讓 Counter 在不同 script 載入過程持續累積,容易觸發 reload
checkPercentageStuckCounter = 0;
// console.log("reset checkPercentageStuckCounter: ", checkPercentageStuckCounter);
}
loadingElement.innerText = "Loading scripts ... " + percentage.toString() + " %";
if (loadCount == resourcesToLoad.length) {
localStorage.setItem("loadScriptIndex", 0);
// console.log("prepare to load landing page ...");
// window.parent.document
var outterIframeElement = window.parent.document.querySelector("#content-show iframe");
// console.log(outterIframeElement);
if (outterIframeElement) {
outterIframeElement.height = "1000"; // 調整外框高度
}
func_getWanPort(); // 08-08
// 08-09
//var ipcam_lang_setting = GetCookie('ipcam_lang');
// console.log("[airelay_init.html] get ipcam_lang_setting:", ipcam_lang_setting);
//func_setPluginLang(ipcam_lang_setting);
clearInterval(intervalID);
// 這邊沿用 G_VIEW_CANVAS_X & G_VIEW_CANVAS_Y 仍會是 480 x 320,改設變數同步解析度
addTmpSnapImageToDiv(snapImgWidth, snapImgHeight);
// 08-29 暫時不載第二層,先把 script load 好
addIframeToBody(landingPage);
setTimeout(() => {
// console.log("defer load landing page");
loadingElement.style.top = (progressBarHeight + snapImgHeight) + 'px';
loadingElement.style.position = "absolute";
loadingElement.innerText = "Streaming and Page initialization ...";
var preloadElement = document.getElementById(preloadImgElementId);
if (preloadElement) {
preloadElement.style.top = progressBarHeight + 'px'; // progress bar height
preloadElement.style.display = 'inline';
}
checkH264Streaming();
}, hideLoadPageDeferTime);
}
}, checkIntervalTime)
func_getaboutinfo();
localStorage.setItem("receivedH264", false);
localStorage.setItem('iframeHeight', null);
// console.log("[airelay_init.html] Init localStorage receivedH264: ", localStorage.getItem("receivedH264"));
var defaultBtnOffset = 30; // 預設按鈕往下偏移距離
function checkH264Streaming() {
// console.log("start checkH264Streaming");
var checkH264IntervalID = null;
checkH264IntervalID = setInterval(function () {
var receivedH264 = localStorage.getItem("receivedH264");
// console.log("[airelay_init.html] receivedH264: ", receivedH264);
if (receivedH264 == "true") {
var loadingElement = document.getElementById(loadingElementId);
if (loadingElement) {
loadingElement.style.display = 'none';
}
// console.log("[airelay_init.html] hide preloadElement");
var preloadElement = document.getElementById(preloadImgElementId);
if (preloadElement) {
preloadElement.style.display = 'none';
}
// 顯示預設按鈕
var defaultButtonElement = document.getElementById('defaultBtn');
if (defaultButtonElement) {
defaultButtonElement.style.display = 'block';
defaultButtonElement.style.width = iframeWidth + 'px';
}
// 顯示內層 iframe
var innerIframeElement = document.getElementById(innerIframeId);
if (innerIframeElement) {
innerIframeElement.style.display = 'block'; // 先顯示才能知道高度
// 08-29
var iframeDocument = innerIframeElement.contentDocument || innerIframeElement.contentWindow.document;
var iframeHeight = iframeDocument.body.offsetHeight;
localStorage.setItem('iframeHeight', iframeHeight);
innerIframeElement.height = iframeHeight + defaultBtnOffset;
}
// console.log("[airelay_init.html] set innerIframeElement.height:", iframeHeight + defaultBtnOffset);
clearInterval(checkH264IntervalID);
}
}, checkIntervalTime)
}
// --------------------------------------------------------------------------------
function func_setTcptunnelPage(page) {
$.ajax({
url: "/airelay/settcptunnel?page=" + page,
type: "GET",
async: true,
beforeSend: function (xmlHttp) {
xmlHttp.setRequestHeader("If-Modified-Since", "0");
xmlHttp.setRequestHeader("Cache-Control", "no-cache");
//xmlHttp.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
},
success: function (retdata) {
// console.log(retdata);
},
error: function (retdata) {
console.warn(retdata);
}
});
}
function func_setDefault() {
if (confirm('Do you want to apply default settings?')) {
cookie("enable_only_show_metadata1", "on", "9999/12/31 12:00:00");
$.ajax({
url: '/' + g_tcp_tunnel_token + "/system?default=3",
type: "GET",
async: true,
beforeSend: function (xmlHttp) {
xmlHttp.setRequestHeader("If-Modified-Since", "0");
xmlHttp.setRequestHeader("Cache-Control", "no-cache");
//xmlHttp.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
},
success: function (retdata) {
// console.log("[func_setDefault] retdata: ", retdata);
//var jsonbuf = JSON.parse(retdata);
//$('#CPU_USAGE').val(jsonbuf["CPU_USAGE"] + " %");
//$('#GPU_USAGE').val(jsonbuf["GPU_USAGE"] + " %");
//$('#FPS').val(jsonbuf["FPS"]);
//document.getElementById('CPU_USAGE').innerHTML=jsonbuf["CPU_USAGE"]+" %";
//document.getElementById('GPU_USAGE').innerHTML=jsonbuf["GPU_USAGE"]+" %";
//document.getElementById('FPS').innerHTML=jsonbuf["FPS"];
//func_getreload();
//alert("Close or refresh the browser to reboot the camera.");
/*
var replaceUrl = 'http://' + window.location.hostname + ':' + myport + '/setup.htm';
//alert(replaceUrl);
parent.window.location.replace(replaceUrl);*/
//parent.open(parent.location, '_parent').close();
//console.info(retdata);
},
error: function (retdata) {
console.warn(retdata);
//alert("Close or refresh the browser to reboot the camera.");
//parent.open(parent.location, '_parent').close();
}
});
var port = localStorage.getItem('landing_page_port');
// console.log("[func_setDefault] port:", port);
var innerIframe = document.getElementById(innerIframeId);
if (innerIframe) {
innerIframe.width = iframeWidth;
innerIframe.height = '600px';
innerIframe.style.border = '0';
innerIframe.style.position = "absolute";
innerIframe.frameBorder = '0'; // 設置 frameborder 屬性
innerIframe.src = 'http://' + window.location.hostname + ':' + port + '/' + g_tcp_tunnel_token + '/countdown.html';
}
var defaultButtonElement = document.getElementById('defaultBtn');
if (defaultButtonElement) {
defaultButtonElement.style.display = 'none';
}
window.onload = function () {
window.scrollTo(0, 0);
};
//console.log('Apply default settings!');
return false;
}
}
function func_getaboutinfo() {
$.ajax({
url: '/airelay' + "/getAidaInfo",
type: "GET",
async: true,
beforeSend: function (xmlHttp) {
xmlHttp.setRequestHeader("If-Modified-Since", "0");
xmlHttp.setRequestHeader("Cache-Control", "no-cache");
//xmlHttp.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
},
success: function (retdata) {
//var jsonbuf = JSON.parse('{ "name":"John", "age":30, "city":"New York"}');
var jsonbuf = JSON.parse(retdata);
localStorage.setItem("events_default_version", jsonbuf["events_default_version"]);
//console.info(retdata);
},
error: function (retdata) {
console.warn(retdata);
setTimeout(func_getPostEventName(), 3000);
}
});
}
</script>
<!-- 08-29 -->
<link rel="stylesheet" type="text/css" href="/airelay/bootstrap.min.css">
</head>
<body onContextMenu="window.event.returnValue=false" style="margin: 0px;">
<div id="tabs" style="display: none;">
<label id="TAB_ALARM">
<a>
<nobr id="HTTP_TITLE05"></nobr>
</a>
</label>
<label id="TAB_OUTPUT">
<a>
<nobr id="HTTP_TITLE08"></nobr>
</a>
</label>
<label id="TAB_SETTING">
<a>
<nobr id="HTTP_TITLE06"></nobr>
</a>
</label>
<label id="TAB_LICENSE">
<a>
<nobr id="HTTP_TITLE07"></nobr>
</a>
</label>
</div>
<div id="preloadImg" style="position: absolute; display: none;"></div>
<p id="percentage" height="650">
Loading ... 0%
</p>
<iframe id="innerIframe" frameborder="0" style="display: none;"></iframe>
<div id="defaultBtn" align="center" style="display:none;">
<button class="Content_stybtn_ln" onclick="func_setDefault()">Default</button>
</div>
</body>
</html>

7708
Aida/alarm.html

File diff suppressed because it is too large Load Diff

5322
Aida/alarm.js

File diff suppressed because it is too large Load Diff

8621
Aida/alarm_on_airelay.html

File diff suppressed because it is too large Load Diff

6076
Aida/alarm_on_airelay.js

File diff suppressed because it is too large Load Diff

7810
Aida/alarm_on_nvr.html

File diff suppressed because it is too large Load Diff

1258
Aida/anpr_index.html

File diff suppressed because it is too large Load Diff

30
Aida/bootstrap.min.css vendored

@ -0,0 +1,30 @@
.progress {
display: -ms-flexbox;
display: flex;
height: 8px;
width: 98%;
overflow: hidden;
line-height: 0;
font-size: 1px;
background-color: #e9ecef;
border-radius: 1px;
}
.progress-bar {
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
-ms-flex-pack: center;
justify-content: center;
overflow: hidden;
color: #fff;
text-align: center;
white-space: nowrap;
background-color: #fd9600;
transition: width.6s ease;
}
.progress-bar-striped {
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25% , transparent 25% , transparent 50% , rgba(255, 255, 255, .15) 50% , rgba(255, 255, 255, .15) 75% , transparent 75% , transparent);
background-size: 1rem 1rem;
}

275
Aida/cgi.js

@ -0,0 +1,275 @@
var myport = "80";
var g_check_if_airelay = 1;
/*
var mymirror = "0";
var myflip = "0";
var myrotate = "0";
*/
/*
window.addEventListener("mousewheel", (e) => {
if (e.deltaY === 1) {
e.preventDefault();
}
})*/
getIPCamSettings();
// Restricts input for the given textbox to the given inputFilter.
function getIPCamSettings() {
var urlStr;
if (g_check_if_airelay == 1) {
urlStr = '/airelay/getipcamsettings';
}
else {
urlStr = '/getipcamsettings';
}
if (localStorage.getItem('IPCAM_PORT') == null) {
$.ajax({
//url: "/airelay/getipcamsettings",
url: urlStr,
type: "GET",
async: false,
// timeout: 0,
beforeSend: function (xmlHttp) {
xmlHttp.setRequestHeader("If-Modified-Since", "0");
xmlHttp.setRequestHeader("Cache-Control", "no-cache");
//xmlHttp.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
},
success: function (retdata) {
var jsonbuf = JSON.parse(retdata);
myport = jsonbuf["IPCAM_PORT"];
localStorage.setItem("IPCAM_PORT", myport);
/*mymirror = jsonbuf["IPCAM_MIRROR"];
myflip = jsonbuf["IPCAM_FLIP"];
myrotate = jsonbuf["IPCAM_ROTATE"];
*/
//console.info(retdata);
},
error: function (retdata) {
console.warn(retdata);
/*
if (localStorage.getItem('IPCAM_PORT') != null) {
myport = localStorage.getItem('IPCAM_PORT');
}*/
}
});
}
else {
myport = localStorage.getItem('IPCAM_PORT');
}
}
get_cgi = function ()
{
if (arguments.length == 0)
{
return;
}
var ajax = new Array;
var _timeout;
if(window.location.protocol == "http:")
{
ajax["port"] = myport;
if(arguments[0].port != null)
{
ajax["port"] = arguments[0].port;
if (ajax["port"] == myport)
ajax["url"] = "http://"+ (document.URL.split('//')[1]).split('/')[0].split(':')[0] + arguments[0].cmd;
else
ajax["url"] = "http://"+ (document.URL.split('//')[1]).split('/')[0].split(':')[0] + ":" + ajax["port"] + arguments[0].cmd;
}else{
ajax["url"] = "http://"+ (document.URL.split('//')[1]).split('/')[0] + arguments[0].cmd;
}
}
else
{
ajax["url"] = "https://"+ (document.URL.split('//')[1]).split('/')[0] + arguments[0].cmd;
}
//console.log(ajax["url"]);
ajax["async"] = true;
if (typeof arguments[0].async == "boolean")
{
ajax["async"] = arguments[0].async;
}
if(arguments[0].timeout != null)
{
_timeout = arguments[0].timeout;
}else{
_timeout = 30000;
}
ajax["get_parser"] = arguments[0].get_parser;
ajax["get_response"] = arguments[0].get_response;
if(arguments[0].parameter != null)
{
ajax["parameter"] = arguments[0].parameter;
}
$.ajax({
url: ajax["url"],
type: 'GET',
async: ajax["async"],
timeout: _timeout,
cache: false,
error: function (xhr)
{
if (typeof ajax["get_parser"] == "function")
{
ajax["get_parser"]("cgi_error");
}
else if (typeof ajax["get_response"] == "function")
{
ajax["get_response"]("cgi_error");
}
},
success: function (response)
{
//console.info(response);
if (typeof ajax["get_parser"] == "function")
{
if(ajax["parameter"] != null)
{
ajax["get_parser"](parse_key_array_content(response),ajax["parameter"]);
}
else
{
ajax["get_parser"](parse_key_array_content(response));
}
}
else if (typeof ajax["get_response"] == "function")
{
ajax["get_response"](response);
}
}
});
}
post_cgi = function()
{
if (arguments.length == 0)
{
return;
}
var ajax = new Array;
var _timeout;
if(window.location.protocol == "http:")
{
ajax["url"] = "http://"+ (document.URL.split('//')[1]).split('/')[0] + arguments[0].cmd;
}
else
{
ajax["url"] = "https://"+ (document.URL.split('//')[1]).split('/')[0] + arguments[0].cmd;
}
//console.log(ajax["url"]);
ajax["async"] = true;
if (typeof arguments[0].async == "boolean")
{
ajax["async"] = arguments[0].async;
}
if(arguments[0].timeout != null)
{
_timeout = arguments[0].timeout;
}else{
_timeout = 1900;
}
ajax["get_parser"] = arguments[0].get_parser;
ajax["post_data"] = arguments[0].post_data;
ajax["get_response"] = arguments[0].get_response;
$.ajax({
url: ajax["url"],
data: ajax["post_data"],
dataType: 'text',
type: 'POST',
async: ajax["async"],
timeout: _timeout,
cache: false,
error: function (xhr)
{
if (typeof ajax["get_parser"] == "function")
{
ajax["get_parser"]("cgi_error");
}
else if (typeof ajax["get_response"] == "function")
{
ajax["get_response"]("cgi_error");
}
},
success: function (response)
{
if (typeof ajax["get_parser"] == "function")
{
ajax["get_parser"](parse_key_array_content(response));
}
else if (typeof ajax["get_response"] == "function")
{
ajax["get_response"](response);
}
}
});
}
parse_key_array_content = function(content,options)
{
var options = $.extend({spliter1: '=', spliter2: '\n'},options);
var result = { all: content };
var place = content.split(options.spliter2);
var info=new Array;
for (var i=0;i<place.length;i++)
{
var sepSite = place[i].search(options.spliter1);
if (sepSite!=-1)
{
var endSite = place[i].search(options.spliter2);
info[2*i] = place[i].slice(0,sepSite);
info[2*i+1] = place[i].slice(sepSite+1,endSite);
}
}
var key, value, _i, _len;
for (var i = _i = 0, _len = info.length; _i < _len; i = _i += 2)
{
key = $.trim(info[i]);
value = info[i + 1];//$.trim(info[i + 1]);
if (key !== '')
{
result[key] = value;
}
}
return result;
}
//common
/*function my_sleep(delay)
{
var start = new Date().getTime();
while (new Date().getTime() < start + delay);
};*/
function TranTextQuoteGV(v)
{
var Sq_length=v.length;
var o='';
for(var i=0;i < Sq_length;i++)
{
if(v.charCodeAt(i)==0x2B)//+
o+='%2B';
else if(v.charCodeAt(i)==0x3B)//->;
o+='%3B';
else if(v.charCodeAt(i)==0x5C)//-> \
o+='%5C';
else if(v.charCodeAt(i)==0x2F)// ->/
o+='%2F';
else if(v.charCodeAt(i)==0x26)//->&
o+='%26';
else
o+=v.charAt(i);
}
return o;
};

347
Aida/chirun_min.js

@ -0,0 +1,347 @@
function GE(a) { return document.getElementById(a) }
function GES(a) { return document.getElementsByName(a) }
function GetValue(b) {
var a = "";
var c = GE(b);
if (c != null) {
if (c.type.indexOf("select") >= 0) {
a = c.options[c.selectedIndex].value
} else { a = c.value }
} else {
alert(b + " Error")
}
return a
}
function SetValue(a, c) {
var d = GE(a);
if (d != null) {
if (d.type.indexOf("select") >= 0) {
for (var b = 0; b < d.options.length; b++) {
if (d.options[b].value == c) { d.selectedIndex = b; break }
}
} else {
d.value = c
}
} else { alert(a + " Error") }
}
function Ctrl_Text(a, l, e, c, g, d, h, j, b, f, k, i) {
this.type = "text";
this.active = !(b == true);
this.id = a;
this.value = c;
this.setcmd = g;
this.checker = d;
this.html = CreateTextHtml(a, l, e, c, h, j, f, k, i);
this.GV = function () { return GetValue(this.id) };
this.SV = function (m) { SetValue(this.id, m) }
}
function CreateTextHtml(a, k, b, i, f, g, d, j, e) {
var h = "text";
if (f) { h = "password"; } else { if (k == "0") { h = "hidden"; } }
var c = "";
c += "<input name='" + a + "' id='" + a + "' type='" + h +
"' size='" + k + "' maxlength='" + b + "' value='" + i + "'";
if (g != null) { c += "onChange='" + g + "' ";}
if (d != null) {
c += "onKeyup='" + d + "' ";
//c += "onkeyup = \"this.value=this.value.replace(/[^\w_]/g,'');\"";
}
if (j != null) {
c += "onKeyPress='" + j + "' ";
}
if (e != null) { c += e;} c += ">";
return c;
}
function Ctrl_Check(f, e, d, c, a, b) {
this.type = "check";
this.active = !(b == true);
this.id = f;
this.value = e;
this.setcmd = d;
this.checker = a;
this.onClickFunc = c;
this.GetHtml = function () {
var g = "";
g += '<input type="checkbox" id="' + this.id + '" name="' +
this.id + '" ';
if (this.value == 1) {
g += "checked "
}
if (this.onClickFunc != null) {
g += "onClick='" + this.onClickFunc + "'"
}
g += " >";
return g
};
this.html = this.GetHtml();
this.GV = function () { return Bool2Int(IsChecked(this.id)) };
this.SV = function (g) { SetChecked(this.id, (g == 1)) }
}
function IsChecked(b) {
var c = GE(b);
var a = false;
if (c != null) {
a = c.checked
}
return a
}
function SetChecked(a, b) {
var c = GE(a);
if (c != null) {
c.checked = b
}
}
function Bool2Int(a) { return (a) ? 1 : 0 }
function Ctrl_Radio(f, e, d, c, a, b) {
this.type = "radio";
this.active = !(b == true);
this.id = f;
this.value = e;
this.setcmd = d;
this.checker = a;
this.onClickFunc = c;
this.GetHtml = function (h) {
var g = "<input type='radio' name='" + this.id + "' id='" +
this.id + "' value='" + h + "' ";
if (this.value == h) { g += "checked " }
if (this.onClickFunc != null) {
g += "onClick='" + this.onClickFunc + "'"
}
g += " >";
return g
};
this.GV = function () { return GetRadioValue(this.id) };
this.SV = function (g) { SetRadioValue(this.id, g) }
}
function GetRadioValue(a) {
var d = 0;
var c;
var b = GES(a);
if (b != null) {
for (c = 0; c < b.length; c++) {
if (b[c].checked == true) { d = b[c].value; break }
}
}
return d
}
function SetRadioValue(a, d) {
var c;
var b = GES(a);
if (b != null) {
for (c = 0; c < b.length; c++) {
if (b[c].value == d) {
b[c].checked = true;
break
}
}
}
}
function Ctrl_Select(g, d, f, e, c, a, b) {
this.type = "select";
this.active = !(b == true);
this.id = g;
this.list = d;
this.value = f;
this.setcmd = e;
this.checker = a;
this.html = SelectObjectNoWrite(g, d, this.value, c);
this.GV = function () { return GetValue(this.id) };
this.SV = function (h) { SetValue(this.id, h) }
}
function SelectObjectNoWrite(d, c, e, a) {
var f = "";
f += '<SELECT NAME="' + d + '" id="' + d + '" ';
if (a == null) {
f += ">"
} else { f += ' onChange="' + a + '" >' } aryOption = c.split(";");
for (var b = 0; b < aryOption.length; b++) {
if (b == e) {
f += "<OPTION selected value=" + b + ">" + aryOption[b]
} else {
f += "<OPTION value=" + b + ">" + aryOption[b]
}
}
f += "</SELECT>";
return f
}
function Ctrl_Select_Hidden(g, d, f, e, c, a, b) {
this.type = "select";
this.active = !(b == true);
this.id = g;
this.list = d;
this.value = f;
this.setcmd = e;
this.checker = a;
this.html = SelectObjectNoWrite_Hidden(g, d, this.value, c);
this.GV = function () { return GetValue(this.id) };
this.SV = function (h) { SetValue(this.id, h) }
}
function SelectObjectNoWrite_Hidden(d, c, e, a) {
var f = "";
f += '<SELECT style="visibility:hidden;" NAME="' + d + '" id="' + d + '" ';
if (a == null) {
f += ">"
} else { f += ' onChange="' + a + '" >' } aryOption = c.split(";");
for (var b = 0; b < aryOption.length; b++) {
if (b == e) {
f += "<OPTION selected value=" + b + ">" + aryOption[b]
} else {
f += "<OPTION value=" + b + ">" + aryOption[b]
}
}
f += "</SELECT>";
return f
}
function Ctrl_SelectNum(a, h, b, k, e, g, j, i, f, d, c) {
this.type = "selectNum";
this.active = !(c == true);
this.id = a;
this.value = e;
this.setcmd = g;
this.checker = d;
this.html = GetSelectNumberHtml(a, h, b, k, this.value, j, i, f);
this.rehtml = function (l, m) {
return GetSelectNumberHtml(a, l, m, k, this.value, j, i
, f)
};
this.GV = function () { return GetValue(this.id) };
this.SV = function (l) {
this.value = l;
SetValue(this.id, l)
}
}
function GetSelectNumberHtml(a, b, d, j, l, h, k, e) {
var c = "";
c += '<select id="' + a + '" name="' + a + '" ';
if (h != null) {
c += ' onchange="' + h + '"'
}
if (k != null) {
c += ' onfocus="' + k + '"'
}
c += ">";
var f = 0;
for (f = b; f <= d; f += j) {
var g = f;
if (e != null) { g = FixNum(f, e) }
if (f == l) { c += "<option selected value=" + f + ">" + g } else {
c += "<option value=" + f + ">" + g
}
}
c += "</select>";
return c
}
function Ctrl_SelectEx(g, d, f, e, c, a, b) {
this.type = "select";
this.active = !(b == true);
this.id = g;
this.list = d;
this.value = f;
this.setcmd = e;
this.onChangeFunc = c;
this.checker = a;
this.html = SelectObjectNoWriteEx(this.id, this.list, this.value
, this.onChangeFunc);
this.GV = function () { return GetValue(this.id) };
this.SV = function (h) { SetValue(this.id, h) };
this.rehtml = function (h, i) {
return SelectObjectNoWriteEx(this.id, h, (i != null) ? i :
this.value, this.onChangeFunc)
}
}
function SelectObjectNoWriteEx(d, c, e, a) {
var f = "";
f += '<SELECT NAME="' + d + '" id="' + d + '" ';
if (a == null) {
f += ">"
} else { f += ' onChange="' + a + '" >' } aryOption = c.split(";");
for (var b = 0; b < aryOption.length; b++) {
if (aryOption[b] == e) {
f += '<OPTION selected value="' + aryOption[b] + '">' +
aryOption[b]
} else {
f += '<OPTION value="' + aryOption[b] + '">' + aryOption[
b]
}
}
f += "</SELECT>";
return f
}
function Ctrl_Select2List(h, a, g, f, e, d, b, c) {
this.type = "select";
this.active = !(c == true);
this.id = h;
this.list1 = a;
this.list2 = g;
this.value = f;
this.setcmd = e;
this.onChangeFunc = d;
this.checker = b;
this.html = SelectObjectNoWrite2List(this.id, this.list1, this.list2
, this.value, this.onChangeFunc);
this.GV = function () { return GetValue(this.id) };
this.SV = function (i) { SetValue(this.id, i) }
}
function SelectObjectNoWrite2List(d, g, c, e, a) {
var f = "";
f += '<SELECT NAME="' + d + '" id="' + d + '" ';
if (a == null) {
f += ">"
} else { f += ' onChange="' + a + '" >' } aryOption = c.split(";");
aryValue = g.split(";");
for (var b = 0; b < aryOption.length; b++) {
if (aryValue[b] == e) {
f += '<OPTION selected value="' + aryValue[b] + '">' +
aryOption[b]
} else {
f += '<OPTION value="' + aryValue[b] + '">' + aryOption[b]
}
}
f += "</SELECT>";
return f
}
function DisableObjs(c, b) {
for (var a = 0; a < c.length; a++) {
DisableObject(c[a], b)
}
}
function DisableObject(a, c) {
var f = GE(a);
if (f != null) {
f.disabled = c
}
try { SetCIA(a, !c) } catch (d) {}
var g = GES(a);
if (g != null) {
for (var b = 0; b < g.length; b++) {
g[b].disabled = c
}
}
}
function SetCIA(b, a) { CTRLARY[b].active = (a == true) };
var abab1=[11,99,33];

121
Aida/config.js

@ -0,0 +1,121 @@
var MIN_RANGE_MIN_CHARACTERS = 0;
var MAX_RANGE_MIN_CHARACTERS = 100;
var MIN_RANGE_MAX_CHARACTERS = 0;
var MAX_RANGE_MAX_CHARACTERS = 100;
var MIN_RANGE_CONFIDENCE = 0;
var MAX_RANGE_CONFIDENCE = 100;
var MIN_RANGE_OBJ_MAX_PROPORTION = 0;
var MAX_RANGE_OBJ_MAX_PROPORTION = 100;
var MIN_RANGE_OBJ_MIN_PROPORTION = 0;
var MAX_RANGE_OBJ_MIN_PROPORTION = 100;
var MIN_RANGE_NO_PARKING_TIME = 0;
var MAX_RANGE_NO_PARKING_TIME = 100;
var G_CAM_SENSOR_RES_WIDTH = 3840;
var G_CAM_SENSOR_RES_HEIGHT = 2160;
var G_CAM_VIDEO_RES_WIDTH = 1920;
var G_CAM_VIDEO_RES_HEIGHT = 1080;
var G_VIEW_CANVAS_X = 480;
var G_VIEW_CANVAS_Y = 320;
//trigger events
var TRIGGER_ZONE_VIOLATION = 1;
var TRIGGER_PARKING_VIOLATION = 4;
var TRIGGER_GO_STRAIGHT = 8;
var TRIGGER_TURN_LEFT = 16;
var TRIGGER_TURN_RIGHT = 32;
var TRIGGER_SPEED_HIGH = 8192;
var TRIGGER_SPEED_LOW = 16384;
var TRIGGER_DISTANCE_VIOLATION = 262144;
var TRIGGER_ALLOW_LIST = 2097152;
var TRIGGER_BLOCK_LIST = 4194304;
var TRIGGER_GUEST_LIST = 8388608;
var TRIGGER_MISSING_UNATTENDED = 16777216;
var TRIGGER_BG_LEARNING = 33554432;
var TRIGGER_TAMPERING = 67108864;
var TRIGGER_HIGH_VIOLATION = 134217728;
var TRIGGER_GO_STRAIGHT_RED_LIGHT = 1024;
var TRIGGER_TURN_LEFT_RED_LIGHT = 2048;
var TRIGGER_TURN_RIGHT_RED_LIGHT = 4096;
var TRIGGER_QUEUING_VIOLATION = 268435456;
var TRIGGER_MISSING_OBJECT_DETECTION = 536870912;
var TRIGGER_ALL_OBJECTS = 1073741824;
var TRIGGER_LACK_OF_ANY_OBJECT = 2147483648;
var COLOR_ARRAY = ["#F0F0F0", "Red", "#F0F0F0", "Yellow", "Green", "Blue", "Cyan", "Purple", "Black", "#F0F0F0", "Silver", "Darkgray"];//index 0、2、6 沒有在使用,所以一律設定成#F0F0F0
var DETECT_EVENT_ID_ARRAY = ["0x00000001", "0x00000004", "0x00200000", "0x00400000", "0x00000008", "0x00000010", "0x00000020", "0x10000000", "0x20000000", "0x00800000", "0x01000000", "0x02000000", "0x04000000", "0x40000000", "0x80000000", "0x00002000", "0x00004000", "0x00000400", "0x00000800", "0x00001000", "0x00008000", "0x00040000","0x08000000"];
var myport = "80";
var g_check_if_airelay = 1;
/*
var mymirror = "0";
var myflip = "0";
var myrotate = "0";
*/
/*
window.addEventListener("mousewheel", (e) => {
if (e.deltaY === 1) {
e.preventDefault();
}
})*/
getIPCamSettings();
// Restricts input for the given textbox to the given inputFilter.
function getIPCamSettings() {
var urlStr;
if (g_check_if_airelay == 1) {
urlStr = '/airelay/getipcamsettings';
}
else {
urlStr = '/getipcamsettings';
}
if (localStorage.getItem('IPCAM_PORT') == null) {
$.ajax({
//url: "/airelay/getipcamsettings",
url: urlStr,
type: "GET",
async: false,
// timeout: 0,
beforeSend: function (xmlHttp) {
xmlHttp.setRequestHeader("If-Modified-Since", "0");
xmlHttp.setRequestHeader("Cache-Control", "no-cache");
//xmlHttp.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
},
success: function (retdata) {
var jsonbuf = JSON.parse(retdata);
myport = jsonbuf["IPCAM_PORT"];
localStorage.setItem("IPCAM_PORT", myport);
/*mymirror = jsonbuf["IPCAM_MIRROR"];
myflip = jsonbuf["IPCAM_FLIP"];
myrotate = jsonbuf["IPCAM_ROTATE"];
*/
//console.info(retdata);
},
error: function (retdata) {
console.warn(retdata);
/*
if (localStorage.getItem('IPCAM_PORT') != null) {
myport = localStorage.getItem('IPCAM_PORT');
}*/
}
});
}
else {
myport = localStorage.getItem('IPCAM_PORT');
}
}

84
Aida/cookie.min.js vendored

@ -0,0 +1,84 @@
!function (e, t) {
"function" == typeof define && define.amd ? define(t) : "object" == typeof exports && exports ? module.exports = t() : e.cookie = t();
}
("undefined" == typeof window ? this : window, function ()
{
function e(e) {
return !!e && "[object Object]" === Object.prototype.toString.call(e);
}
function t(e) {
return Array.prototype.slice.call(e);
}
function n(e) {
for (var t = e.split(":"), n = 0, r = t.length; n < r; n++)
0 == t[n].split("")[0] && (t[n] = t[n].split("")[1]);
var o = new Date,
i = parseInt(t[0]) - o.getHours(),
a = parseInt(t[1]) - o.getMinutes(),
s = parseInt(t[2]) - o.getSeconds();
return 1e3 * (60 * i * 60 + 60 * a + s);
}
function r() {
if (!(this instanceof r))
return new r;
}
var o = Object.keys || function (e) {
var t = [], n = "";
for (n in e)
e.hasOwnProperty(n) && t.push(n);
return t;
},
i = Array.isArray || function (e) {
return "[object Array]" === Object.prototype.toString.call(e);
};
r.prototype = {
get: function (e) {
return e && "string" == typeof e ? this.all()[e] || null : null;
},
set: function (t, r, o) {
var i = e(o) ? o : {
expires: o
},
a = void 0 !== i.expires ? i.expires : "",
s = typeof a;
if ("string" === s && "" !== a) {
var u = /^([01]\d|2[0-3]):[0-5]\d:([0-5]\d)$/;
a = u.test(a) ? new Date(+new Date + n(a)) : new Date(a);
} else
"number" === s && (a = new Date(+new Date + 864e5 * a));
"" !== a && "toGMTString" in a && (a = "; expires=" + a.toGMTString());
var c = "; path=" + (i.path ? i.path : "/"),
p = i.domain ? "; domain=" + i.domain : "",
f = i.secure ? "; secure" : "";
document.cookie = t + "=" + escape(r) + a + c + p + f;
},
remove: function (e) {
e = i(e) ? e : t(arguments);
for (var n = 0, r = e.length; n < r; n++)
this.set(e[n], "", -1);
return e;
},
clear: function () {
return this.remove(o(this.all()));
},
all: function () {
var e = {};
if (document.cookie)
for (var t = document.cookie.split("; "), n = 0, r = t.length; n < r; n++) {
var o = t[n].split("=");
e[unescape(o[0])] = unescape(o[1]);
}
return e;
}
};
var a = function (e, t, n) {
var o = r(),
i = arguments.length;
return 1 === i && "string" == typeof e ? o.get(e) : i > 1 && e && t ? o.set(e, t, n) : null === t ? o.remove(e) : o.all();
};
for (var s in r.prototype)
a[s] = r.prototype[s];
return a;
});

1408
Aida/cool_counter.html

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save