From eecfc14c4649e847abc0b2c911e1284820fe9fe4 Mon Sep 17 00:00:00 2001 From: vincentberry Date: Wed, 13 Mar 2024 17:22:56 +0100 Subject: [PATCH 01/36] =?UTF-8?q?=F0=9F=94=A7=20build(gitignore):=20REMOVE?= =?UTF-8?q?=20CSS=20SQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -> Sup des css du github -> Sup de remotevmix.sql --- .gitignore | 9 +++++++- config/prod/database/remotevmix.sql | 35 ----------------------------- 2 files changed, 8 insertions(+), 36 deletions(-) delete mode 100644 config/prod/database/remotevmix.sql diff --git a/.gitignore b/.gitignore index 41f2ff3..c41e910 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,11 @@ /app/file/ /app/db/ .vscode/ -database.sqlite \ No newline at end of file +database.sqlite + +# Ignore les fichiers générés par SCSS +*.css +*.css.map + +# Ignore les fichiers générés par Sass/SCSS +.sass-cache/ \ No newline at end of file diff --git a/config/prod/database/remotevmix.sql b/config/prod/database/remotevmix.sql deleted file mode 100644 index 72d2f8a..0000000 --- a/config/prod/database/remotevmix.sql +++ /dev/null @@ -1,35 +0,0 @@ -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -START TRANSACTION; -SET time_zone = "+00:00"; - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; - -DROP DATABASE IF EXISTS `remotevmix`; -CREATE DATABASE IF NOT EXISTS `remotevmix` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -USE `remotevmix`; - -CREATE TABLE `command` ( - `id` int(11) NOT NULL, - `session_vmix` int(11) NOT NULL, - `date_time` datetime NOT NULL DEFAULT current_timestamp(), - `command` varchar(255) NOT NULL, - `input` varchar(255) DEFAULT '0', - `duration` varchar(255) DEFAULT '0', - `value` varchar(255) DEFAULT '0', - `push_vmix` tinyint(1) NOT NULL DEFAULT 0 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -ALTER TABLE `command` - ADD PRIMARY KEY (`id`); - -ALTER TABLE `command` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; -COMMIT; - -GRANT SELECT, INSERT, UPDATE, DELETE ON `remotevmix`.* TO 'user'@'%'; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; From e09615a93cfebbaf466dc60b3662b2f191c94df0 Mon Sep 17 00:00:00 2001 From: vincentberry Date: Wed, 13 Mar 2024 17:24:27 +0100 Subject: [PATCH 02/36] =?UTF-8?q?=F0=9F=94=A7=20build(remove=20*.css):?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/public/assets/style/index.css | 2251 ------------------------- app/public/assets/style/index.css.map | 1 - 2 files changed, 2252 deletions(-) delete mode 100644 app/public/assets/style/index.css delete mode 100644 app/public/assets/style/index.css.map diff --git a/app/public/assets/style/index.css b/app/public/assets/style/index.css deleted file mode 100644 index 9f9049e..0000000 --- a/app/public/assets/style/index.css +++ /dev/null @@ -1,2251 +0,0 @@ -@font-face { - font-family: "Oswald"; - src: url(../fonts/Roboto-Regular.ttf); -} -@font-face { - font-family: "Roboto"; - src: url("../fonts/Roboto-Thin.ttf") format("truetype"); - font-weight: 100; - font-style: normal; -} -@font-face { - font-family: "Roboto"; - src: url("../fonts/Roboto-Light.ttf") format("truetype"); - font-weight: 200; - font-style: normal; -} -@font-face { - font-family: "Roboto"; - src: url("../fonts/Roboto-Regular.ttf") format("truetype"); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: "Roboto"; - src: url("../fonts/Roboto-Medium.ttf") format("truetype"); - font-weight: 500; - font-style: normal; -} -@font-face { - font-family: "Roboto"; - src: url("../fonts/Roboto-Bold.ttf") format("truetype"); - font-weight: 700; - font-style: normal; -} -@font-face { - font-family: "Roboto"; - src: url("../fonts/Roboto-Black.ttf") format("truetype"); - font-weight: 900; /* Utilisation du poids 900 pour Black */ - font-style: normal; -} -@font-face { - font-family: "Roboto"; - src: url("../fonts/Roboto-LightItalic.ttf") format("truetype"); - font-weight: 200; - font-style: italic; -} -@font-face { - font-family: "Roboto"; - src: url("../fonts/Roboto-RegularItalic.ttf") format("truetype"); - font-weight: 400; - font-style: italic; -} -@font-face { - font-family: "Roboto"; - src: url("../fonts/Roboto-MediumItalic.ttf") format("truetype"); - font-weight: 500; - font-style: italic; -} -@font-face { - font-family: "Roboto"; - src: url("../fonts/Roboto-SemiBoldItalic.ttf") format("truetype"); - font-weight: 600; - font-style: italic; -} -@font-face { - font-family: "Roboto"; - src: url("../fonts/Roboto-BoldItalic.ttf") format("truetype"); - font-weight: 700; - font-style: italic; -} -@font-face { - font-family: "Roboto"; - src: url("../fonts/Roboto-BlackItalic.ttf") format("truetype"); - font-weight: 900; - font-style: italic; -} -.info { - background: #4bb1cf; -} - -.danger { - background: #ED4F32; -} - -.primary { - background: #288feb; -} - -.success { - background: #15CD72; -} - -.warning { - background: #edcd4d; -} - -.muted { - background: #ECECEC; -} - -* { - font-family: Roboto, sans-serif; - color: #ffffff; - margin: 0; - padding: 0; - list-style: none; - box-sizing: border-box; - outline: none; - resize: none; - border-style: none; - text-decoration: none; - font-weight: 600; -} - -body { - text-align: center; - background: #1e2328; - overflow-x: hidden; -} - -img[data-src] { - filter: blur(0.2em); -} - -img { - filter: blur(0em); - transition: filter 0.5s; -} - -button { - text-transform: uppercase; - background: #1e2328; - border: 2px solid #616161; - padding: 10px 25px; - cursor: pointer; - margin: 10px; - transition: 0.2s ease; -} -button:hover { - background: #797979; -} -button.btn-danger { - background: #BB0104; -} -button.btn-danger:hover { - background: #910002; -} -button.btn-warning { - background: #edcd4d; - color: #1e2328; -} -button.btn-warning:hover { - background: #a07c39; -} -button.btn-succer { - background: #edcd4d; - color: #1e2328; -} -button.btn-succer:hover { - background: #a07c39; -} - -select, input, textarea { - border-radius: 10px; - background: #616161; - padding: 10px; - font-family: Roboto, sans-serif; - font-size: 0.8rem; - border: 1px solid #0a0f14; -} - -.disabled { - display: none; -} - -.tooltip { - position: absolute; - background-color: #333; - color: #fff; - padding: 5px; - border-radius: 5px; - opacity: 0; - z-index: 100; - transition: opacity 0.3s ease; - pointer-events: none; - top: 50px; - left: 0px; -} -.tooltip.affiche { - opacity: 1; -} - -@font-face { - font-family: "Pe-icon-7-stroke"; - src: url("../fonts/icon.ttf"); - font-weight: normal; - font-style: normal; -} -[class^=pe-7s-], [class*=" pe-7s-"] { - display: inline-block; - font-family: "Pe-icon-7-stroke"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.pe-7s-album:before { - content: "\e6aa"; -} - -.pe-7s-arc:before { - content: "\e6ab"; -} - -.pe-7s-back-2:before { - content: "\e6ac"; -} - -.pe-7s-bandaid:before { - content: "\e6ad"; -} - -.pe-7s-car:before { - content: "\e6ae"; -} - -.pe-7s-diamond:before { - content: "\e6af"; -} - -.pe-7s-door-lock:before { - content: "\e6b0"; -} - -.pe-7s-eyedropper:before { - content: "\e6b1"; -} - -.pe-7s-female:before { - content: "\e6b2"; -} - -.pe-7s-gym:before { - content: "\e6b3"; -} - -.pe-7s-hammer:before { - content: "\e6b4"; -} - -.pe-7s-headphones:before { - content: "\e6b5"; -} - -.pe-7s-helm:before { - content: "\e6b6"; -} - -.pe-7s-hourglass:before { - content: "\e6b7"; -} - -.pe-7s-leaf:before { - content: "\e6b8"; -} - -.pe-7s-magic-wand:before { - content: "\e6b9"; -} - -.pe-7s-male:before { - content: "\e6ba"; -} - -.pe-7s-map-2:before { - content: "\e6bb"; -} - -.pe-7s-next-2:before { - content: "\e6bc"; -} - -.pe-7s-paint-bucket:before { - content: "\e6bd"; -} - -.pe-7s-pendrive:before { - content: "\e6be"; -} - -.pe-7s-photo:before { - content: "\e6bf"; -} - -.pe-7s-piggy:before { - content: "\e6c0"; -} - -.pe-7s-plugin:before { - content: "\e6c1"; -} - -.pe-7s-refresh-2:before { - content: "\e6c2"; -} - -.pe-7s-rocket:before { - content: "\e6c3"; -} - -.pe-7s-settings:before { - content: "\e6c4"; -} - -.pe-7s-shield:before { - content: "\e6c5"; -} - -.pe-7s-smile:before { - content: "\e6c6"; -} - -.pe-7s-usb:before { - content: "\e6c7"; -} - -.pe-7s-vector:before { - content: "\e6c8"; -} - -.pe-7s-wine:before { - content: "\e6c9"; -} - -.pe-7s-cloud-upload:before { - content: "\e68a"; -} - -.pe-7s-cash:before { - content: "\e68c"; -} - -.pe-7s-close:before { - content: "\e680"; -} - -.pe-7s-bluetooth:before { - content: "\e68d"; -} - -.pe-7s-cloud-download:before { - content: "\e68b"; -} - -.pe-7s-way:before { - content: "\e68e"; -} - -.pe-7s-close-circle:before { - content: "\e681"; -} - -.pe-7s-id:before { - content: "\e68f"; -} - -.pe-7s-angle-up:before { - content: "\e682"; -} - -.pe-7s-wristwatch:before { - content: "\e690"; -} - -.pe-7s-angle-up-circle:before { - content: "\e683"; -} - -.pe-7s-world:before { - content: "\e691"; -} - -.pe-7s-angle-right:before { - content: "\e684"; -} - -.pe-7s-volume:before { - content: "\e692"; -} - -.pe-7s-angle-right-circle:before { - content: "\e685"; -} - -.pe-7s-users:before { - content: "\e693"; -} - -.pe-7s-angle-left:before { - content: "\e686"; -} - -.pe-7s-user-female:before { - content: "\e694"; -} - -.pe-7s-angle-left-circle:before { - content: "\e687"; -} - -.pe-7s-up-arrow:before { - content: "\e695"; -} - -.pe-7s-angle-down:before { - content: "\e688"; -} - -.pe-7s-switch:before { - content: "\e696"; -} - -.pe-7s-angle-down-circle:before { - content: "\e689"; -} - -.pe-7s-scissors:before { - content: "\e697"; -} - -.pe-7s-wallet:before { - content: "\e600"; -} - -.pe-7s-safe:before { - content: "\e698"; -} - -.pe-7s-volume2:before { - content: "\e601"; -} - -.pe-7s-volume1:before { - content: "\e602"; -} - -.pe-7s-voicemail:before { - content: "\e603"; -} - -.pe-7s-video:before { - content: "\e604"; -} - -.pe-7s-user:before { - content: "\e605"; -} - -.pe-7s-upload:before { - content: "\e606"; -} - -.pe-7s-unlock:before { - content: "\e607"; -} - -.pe-7s-umbrella:before { - content: "\e608"; -} - -.pe-7s-trash:before { - content: "\e609"; -} - -.pe-7s-tools:before { - content: "\e60a"; -} - -.pe-7s-timer:before { - content: "\e60b"; -} - -.pe-7s-ticket:before { - content: "\e60c"; -} - -.pe-7s-target:before { - content: "\e60d"; -} - -.pe-7s-sun:before { - content: "\e60e"; -} - -.pe-7s-study:before { - content: "\e60f"; -} - -.pe-7s-stopwatch:before { - content: "\e610"; -} - -.pe-7s-star:before { - content: "\e611"; -} - -.pe-7s-speaker:before { - content: "\e612"; -} - -.pe-7s-signal:before { - content: "\e613"; -} - -.pe-7s-shuffle:before { - content: "\e614"; -} - -.pe-7s-shopbag:before { - content: "\e615"; -} - -.pe-7s-share:before { - content: "\e616"; -} - -.pe-7s-server:before { - content: "\e617"; -} - -.pe-7s-search:before { - content: "\e618"; -} - -.pe-7s-film:before { - content: "\e6a5"; -} - -.pe-7s-science:before { - content: "\e619"; -} - -.pe-7s-disk:before { - content: "\e6a6"; -} - -.pe-7s-ribbon:before { - content: "\e61a"; -} - -.pe-7s-repeat:before { - content: "\e61b"; -} - -.pe-7s-refresh:before { - content: "\e61c"; -} - -.pe-7s-add-user:before { - content: "\e6a9"; -} - -.pe-7s-refresh-cloud:before { - content: "\e61d"; -} - -.pe-7s-paperclip:before { - content: "\e69c"; -} - -.pe-7s-radio:before { - content: "\e61e"; -} - -.pe-7s-note2:before { - content: "\e69d"; -} - -.pe-7s-print:before { - content: "\e61f"; -} - -.pe-7s-network:before { - content: "\e69e"; -} - -.pe-7s-prev:before { - content: "\e620"; -} - -.pe-7s-mute:before { - content: "\e69f"; -} - -.pe-7s-power:before { - content: "\e621"; -} - -.pe-7s-medal:before { - content: "\e6a0"; -} - -.pe-7s-portfolio:before { - content: "\e622"; -} - -.pe-7s-like2:before { - content: "\e6a1"; -} - -.pe-7s-plus:before { - content: "\e623"; -} - -.pe-7s-left-arrow:before { - content: "\e6a2"; -} - -.pe-7s-play:before { - content: "\e624"; -} - -.pe-7s-key:before { - content: "\e6a3"; -} - -.pe-7s-plane:before { - content: "\e625"; -} - -.pe-7s-joy:before { - content: "\e6a4"; -} - -.pe-7s-photo-gallery:before { - content: "\e626"; -} - -.pe-7s-pin:before { - content: "\e69b"; -} - -.pe-7s-phone:before { - content: "\e627"; -} - -.pe-7s-plug:before { - content: "\e69a"; -} - -.pe-7s-pen:before { - content: "\e628"; -} - -.pe-7s-right-arrow:before { - content: "\e699"; -} - -.pe-7s-paper-plane:before { - content: "\e629"; -} - -.pe-7s-delete-user:before { - content: "\e6a7"; -} - -.pe-7s-paint:before { - content: "\e62a"; -} - -.pe-7s-bottom-arrow:before { - content: "\e6a8"; -} - -.pe-7s-notebook:before { - content: "\e62b"; -} - -.pe-7s-note:before { - content: "\e62c"; -} - -.pe-7s-next:before { - content: "\e62d"; -} - -.pe-7s-news-paper:before { - content: "\e62e"; -} - -.pe-7s-musiclist:before { - content: "\e62f"; -} - -.pe-7s-music:before { - content: "\e630"; -} - -.pe-7s-mouse:before { - content: "\e631"; -} - -.pe-7s-more:before { - content: "\e632"; -} - -.pe-7s-moon:before { - content: "\e633"; -} - -.pe-7s-monitor:before { - content: "\e634"; -} - -.pe-7s-micro:before { - content: "\e635"; -} - -.pe-7s-menu:before { - content: "\e636"; -} - -.pe-7s-map:before { - content: "\e637"; -} - -.pe-7s-map-marker:before { - content: "\e638"; -} - -.pe-7s-mail:before { - content: "\e639"; -} - -.pe-7s-mail-open:before { - content: "\e63a"; -} - -.pe-7s-mail-open-file:before { - content: "\e63b"; -} - -.pe-7s-magnet:before { - content: "\e63c"; -} - -.pe-7s-loop:before { - content: "\e63d"; -} - -.pe-7s-look:before { - content: "\e63e"; -} - -.pe-7s-lock:before { - content: "\e63f"; -} - -.pe-7s-lintern:before { - content: "\e640"; -} - -.pe-7s-link:before { - content: "\e641"; -} - -.pe-7s-like:before { - content: "\e642"; -} - -.pe-7s-light:before { - content: "\e643"; -} - -.pe-7s-less:before { - content: "\e644"; -} - -.pe-7s-keypad:before { - content: "\e645"; -} - -.pe-7s-junk:before { - content: "\e646"; -} - -.pe-7s-info:before { - content: "\e647"; -} - -.pe-7s-home:before { - content: "\e648"; -} - -.pe-7s-help2:before { - content: "\e649"; -} - -.pe-7s-help1:before { - content: "\e64a"; -} - -.pe-7s-graph3:before { - content: "\e64b"; -} - -.pe-7s-graph2:before { - content: "\e64c"; -} - -.pe-7s-graph1:before { - content: "\e64d"; -} - -.pe-7s-graph:before { - content: "\e64e"; -} - -.pe-7s-global:before { - content: "\e64f"; -} - -.pe-7s-gleam:before { - content: "\e650"; -} - -.pe-7s-glasses:before { - content: "\e651"; -} - -.pe-7s-gift:before { - content: "\e652"; -} - -.pe-7s-folder:before { - content: "\e653"; -} - -.pe-7s-flag:before { - content: "\e654"; -} - -.pe-7s-filter:before { - content: "\e655"; -} - -.pe-7s-file:before { - content: "\e656"; -} - -.pe-7s-expand1:before { - content: "\e657"; -} - -.pe-7s-exapnd2:before { - content: "\e658"; -} - -.pe-7s-edit:before { - content: "\e659"; -} - -.pe-7s-drop:before { - content: "\e65a"; -} - -.pe-7s-drawer:before { - content: "\e65b"; -} - -.pe-7s-download:before { - content: "\e65c"; -} - -.pe-7s-display2:before { - content: "\e65d"; -} - -.pe-7s-display1:before { - content: "\e65e"; -} - -.pe-7s-diskette:before { - content: "\e65f"; -} - -.pe-7s-date:before { - content: "\e660"; -} - -.pe-7s-cup:before { - content: "\e661"; -} - -.pe-7s-culture:before { - content: "\e662"; -} - -.pe-7s-crop:before { - content: "\e663"; -} - -.pe-7s-credit:before { - content: "\e664"; -} - -.pe-7s-copy-file:before { - content: "\e665"; -} - -.pe-7s-config:before { - content: "\e666"; -} - -.pe-7s-compass:before { - content: "\e667"; -} - -.pe-7s-comment:before { - content: "\e668"; -} - -.pe-7s-coffee:before { - content: "\e669"; -} - -.pe-7s-cloud:before { - content: "\e66a"; -} - -.pe-7s-clock:before { - content: "\e66b"; -} - -.pe-7s-check:before { - content: "\e66c"; -} - -.pe-7s-chat:before { - content: "\e66d"; -} - -.pe-7s-cart:before { - content: "\e66e"; -} - -.pe-7s-camera:before { - content: "\e66f"; -} - -.pe-7s-call:before { - content: "\e670"; -} - -.pe-7s-calculator:before { - content: "\e671"; -} - -.pe-7s-browser:before { - content: "\e672"; -} - -.pe-7s-box2:before { - content: "\e673"; -} - -.pe-7s-box1:before { - content: "\e674"; -} - -.pe-7s-bookmarks:before { - content: "\e675"; -} - -.pe-7s-bicycle:before { - content: "\e676"; -} - -.pe-7s-bell:before { - content: "\e677"; -} - -.pe-7s-battery:before { - content: "\e678"; -} - -.pe-7s-ball:before { - content: "\e679"; -} - -.pe-7s-back:before { - content: "\e67a"; -} - -.pe-7s-attention:before { - content: "\e67b"; -} - -.pe-7s-anchor:before { - content: "\e67c"; -} - -.pe-7s-albums:before { - content: "\e67d"; -} - -.pe-7s-alarm:before { - content: "\e67e"; -} - -.pe-7s-airplay:before { - content: "\e67f"; -} - -main { - margin: 0px 10px; - padding-top: 50px; -} -main .VmixContainer { - display: grid; - grid-template-columns: 70% 30%; -} -@media (max-width: 1200px) { - main .VmixContainer { - grid-template-columns: 60% 40%; - } -} -@media (max-width: 700px) { - main .VmixContainer { - grid-template-columns: 50% 50%; - } -} -@media (max-width: 500px) { - main .VmixContainer { - display: block; - } -} -main .center { - display: flex; - justify-content: center; - align-items: center; -} -main .ContainerCommandSelector { - display: flex; - justify-content: center; - align-items: center; - justify-content: space-between; - margin: 15px 0; - padding: 10px; - background: #0a0f14; - border: 1px solid #4bb1cf; - width: 1400px; -} -main .ContainerCommandSelector.center { - display: flex; - justify-content: center; - align-items: center; -} -main .ContainerCommandSelector p { - color: #1e2328; - font-size: 0.9rem; - padding-top: 5px; -} -main .ContainerCommandSelector select { - cursor: pointer; -} -main #videoSourcesContainer { - display: flex; - flex-wrap: wrap; - align-content: flex-start; - justify-content: center; -} -main #audioBusesContainer { - display: flex; - flex-wrap: wrap; - align-content: flex-start; -} -main #audioSourcesContainer { - display: flex; - flex-wrap: wrap; - align-content: flex-start; -} - -.new_session { - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; - height: 100vh; -} -.new_session h1 { - margin: 20px; -} -.new_session select { - cursor: pointer; -} -.new_session button { - background: #f19e1b; - transition: 0.5s ease-in; - margin-top: 50px; -} -.new_session button:hover { - color: #f19e1b; - background-color: white; -} -.new_session p { - color: #616161; -} -.new_session .github { - width: 50px; - height: 50px; - filter: invert(100%); - cursor: pointer; -} -.new_session .github:hover { - filter: invert(50%); -} - -.video-source { - margin: 5px; - border: 1px solid #616161; - height: 156px; - width: 208px; - overflow: hidden; - background-color: #002b6c; - display: grid; - flex-direction: column; - grid-template-rows: 80% 20%; - cursor: pointer; -} -.video-source .video { - position: relative; - overflow: hidden; - height: 100%; - transition: 0.5s ease; -} -.video-source .video .type { - height: 100%; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - pointer-events: none; - width: 100%; - z-index: 10; - display: grid; - grid-template-rows: 30% 70%; - padding: 10px; -} -.video-source .video .type img { - height: 100%; - filter: invert(100%); -} -.video-source .video .type h1 { - text-align: center; - font-size: 1.2rem; - align-self: flex-end; - overflow: hidden; - word-wrap: break-word; -} -.video-source .video h2 { - position: absolute; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - pointer-events: none; - left: 5px; - top: 0px; - z-index: 10; - font-weight: 900; - font-size: 2rem; - color: rgba(255, 255, 255, 0.537254902); -} -.video-source .video img { - width: 100%; - height: auto; -} -.video-source .video.program { - background-color: #c62828; -} -.video-source .video.preview { - background-color: #f19e1b; -} -.video-source .video:hover { - background-color: #003f9f; -} -.video-source .video:hover.program { - background-color: #da4747; -} -.video-source .video:hover.preview { - background-color: #f4b24b; -} -.video-source .overlay { - display: flex; - justify-content: center; - align-items: center; - height: 100%; - flex-direction: row; - transition: 0.5s ease; -} -.video-source .overlay button { - display: flex; - justify-content: center; - align-items: center; - padding: 0px; - width: 100%; - height: 100%; - background: #0a0f14; - margin: 0px; - border-radius: 0px; - border: 0px; - border-top: 1px solid #616161; - border-right: 1px solid #616161; -} -.video-source .overlay button.menu { - font-size: 1.2rem; - border-right: 0px solid #616161; -} -.video-source .overlay button.menu::before { - display: inline-block; - font-family: "Pe-icon-7-stroke"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\e636"; -} -.video-source .overlay button:hover { - background-color: #343d45; -} -.video-source .overlay button:hover.program { - background-color: #da4747; -} -.video-source .overlay button:hover.preview { - background-color: #f4b24b; -} -.video-source .overlay button.program { - background-color: #c62828; -} -.video-source .overlay button.preview { - background-color: #f19e1b; -} - -.audio-source, -.audio-bus { - background: #0a0f14; - border: 1px solid #616161; - margin: 5px; - max-width: 300px; - overflow: hidden; -} -.audio-source h2, -.audio-bus h2 { - display: flex; - justify-content: center; - align-items: center; - font-size: 1rem; - padding: 10px 0px; - border-bottom: 1px solid #ffffff; -} -.audio-source .button, -.audio-bus .button { - display: flex; - flex-wrap: wrap; - align-content: flex-end; - z-index: 10; -} -.audio-source .button p, -.audio-bus .button p { - width: 30px; - height: 30px; - display: flex; - justify-content: center; - align-items: center; - font-size: 2rem; - margin: 5px; - background: #1e2328; - border: 1px solid #616161; - cursor: pointer; - overflow: hidden; - color: #616161; -} -.audio-source .button p.master, -.audio-bus .button p.master { - visibility: hidden; -} -.audio-source .button p.true, -.audio-bus .button p.true { - color: #616161; -} -.audio-source .button p.false, -.audio-bus .button p.false { - color: #c62828; - border: 1px solid #c62828; -} -.audio-source .button p.muted.true::before, -.audio-bus .button p.muted.true::before { - display: inline-block; - font-family: "Pe-icon-7-stroke"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\e69f"; -} -.audio-source .button p.muted.false::before, -.audio-bus .button p.muted.false::before { - display: inline-block; - font-family: "Pe-icon-7-stroke"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\e692"; -} -.audio-source .button p.soloPFL, -.audio-bus .button p.soloPFL { - font-size: 1rem; -} -.audio-source .button p.solo, -.audio-bus .button p.solo { - font-size: 1.5rem; -} -.audio-source .button p.solo.false, -.audio-bus .button p.solo.false { - color: #616161; - border: 1px solid #616161; -} -.audio-source .button p.solo.true, -.audio-bus .button p.solo.true { - color: #41ae46; - border: 1px solid #41ae46; -} -.audio-source .button p.solo:hover, -.audio-bus .button p.solo:hover { - border: 1px solid #ffffff; - color: #ffffff; - transition: 0.5s ease; -} -.audio-source .button p.bus, -.audio-bus .button p.bus { - font-size: 1.5rem; -} -.audio-source .button p.bus.false, -.audio-bus .button p.bus.false { - color: #616161; - border: 1px solid #616161; -} -.audio-source .button p.bus.true, -.audio-bus .button p.bus.true { - color: #c62828; - border: 1px solid #c62828; -} -.audio-source .button p.bus:hover, -.audio-bus .button p.bus:hover { - border: 1px solid #ffffff; - color: #ffffff; - transition: 0.5s ease; -} -.audio-source .button p:hover, -.audio-bus .button p:hover { - border: 1px solid #ffffff; - color: #ffffff; - transition: 0.5s ease; -} -.audio-source .master, -.audio-bus .master { - display: grid; - grid-template-columns: 150px 70px 70px; -} -.audio-source .master .containerRange, -.audio-bus .master .containerRange { - width: 100%; - height: 100%; - overflow: hidden; -} -.audio-source .master .range, -.audio-bus .master .range { - display: flex; - justify-content: center; - align-items: center; - margin: 0px; - padding: 0px; - transform: translateX(0px) rotate(270deg); - width: 50px; - height: 150px; - position: relative; -} -.audio-source .master .range input[type=range], -.audio-bus .master .range input[type=range] { - -webkit-appearance: none; - width: 150px; - height: 5px; - background: #1e2328; - outline: none; - padding: 0px; -} -.audio-source .master .range .sliderticks, -.audio-bus .master .range .sliderticks { - position: absolute; - display: flex; - left: -44px; - transform: translateY(10px); - z-index: -10; - justify-content: space-between; -} -.audio-source .master .range .sliderticks span, -.audio-bus .master .range .sliderticks span { - margin-left: 10px; - display: flex; - justify-content: center; - width: 1px; - height: 10px; - background: #1e2328; -} -.audio-source .master .range input[type=range]::-webkit-slider-thumb, -.audio-bus .master .range input[type=range]::-webkit-slider-thumb { - -webkit-appearance: none; - background: #1e2328; - border: 1px solid #ECECEC; - height: 25px; - width: 10px; - cursor: pointer; - pointer-events: auto !important; -} -.audio-source .master .range input[type=range]::-webkit-slider-thumb:hover, -.audio-bus .master .range input[type=range]::-webkit-slider-thumb:hover { - background: #ffffff; - -webkit-transition: 0.5s ease; - transition: 0.5s ease; -} -.audio-source .master .range label, -.audio-bus .master .range label { - position: absolute; - color: #41ae46; - transform: translateY(-15px); - z-index: -10; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - pointer-events: none; - color: #1e2328; -} -.audio-source .master .range .number, -.audio-bus .master .range .number { - display: flex; - justify-content: center; - align-items: center; - background: #1e2328; - padding: 5px; - max-width: 50px; - overflow: hidden; -} - -.audio-bus .master { - grid-template-columns: 1fr 1fr; -} -.audio-bus .master .button { - display: flex; - flex-direction: column; - justify-content: flex-end; -} - -#audioBusesContainer { - display: flex; - width: auto; -} - -nav { - height: 50px; - position: fixed; - z-index: 110; - width: 100%; - transition: 0.5s ease; - background: #0a0f14; - padding: 0px 10px; -} -nav div { - display: flex; - justify-content: center; - align-items: center; - height: 100%; - justify-content: space-between; -} -nav div .left { - margin-left: 10px; -} -nav div .list { - display: flex; - margin-left: 10px; -} -nav div .list label { - padding: 10px; - font-size: 0.8rem; - font-family: Roboto, sans-serif; -} -nav div .list select { - border-radius: 10px; - background: #1e2328; - padding: 10px; - font-family: Roboto, sans-serif; - font-size: 0.8rem; - cursor: pointer; - width: 250px; -} -nav div .script_down { - cursor: pointer; - width: 40px; -} -nav div .script_down:hover { - filter: invert(30%); -} -nav div #fast { - margin-left: 10px; - cursor: pointer; - width: 50px; - height: 50px; - background-size: 100%; - background-repeat: no-repeat; - background-position: center; - background-image: url("../icon/fast-delivery-icon.svg"); - transition: 0.5s ease; -} -nav div #fast:hover { - filter: invert(50%); - transition: 0.5s ease; -} -nav div #fast.on { - background-image: url("../icon/fast-delivery-red-icon.svg"); - transition: 0.5s ease; -} -nav div #projetName { - font-weight: 900; - padding: 10px; - font-size: 1.2rem; - align-items: center; - color: #41ae46; -} -nav div .statut_vmix_contener .statut_vmix { - display: flex; - align-items: center; - margin-right: 10px; - display: flex; - justify-content: center; - align-items: center; - border: #ECECEC solid 1px; - background: #1e2328; - cursor: pointer; - transition: 0.5s ease; - position: relative; -} -nav div .statut_vmix_contener .statut_vmix h1 { - padding: 5px; - display: flex; - justify-content: center; - align-items: center; - text-transform: uppercase; - font-size: 1rem; -} -nav div .statut_vmix_contener .statut_vmix input[type=checkbox] { - display: none; -} -nav div .statut_vmix_contener .statut_vmix:hover { - background-color: #343d45; -} -nav div .statut_vmix_contener .statut_vmix.true { - background: #c62828; -} -nav div .statut_vmix_contener .statut_vmix.true:hover { - background-color: #da4747; -} -nav div .statut_vmix_contener .statut_vmix.true .activeContainer div { - border: 1px solid #f19e1b; -} -nav div .statut_vmix_contener .statut_vmix .activeContainer { - position: absolute; - bottom: 5px; - left: 5px; - display: flex; - align-items: flex-end; - justify-content: flex-start; -} -nav div .statut_vmix_contener .statut_vmix .activeContainer div { - width: 5px; - height: 5px; - background: transparent; - margin: 0 2px; - transition: 0.5s ease; - border: 1px solid transparent; -} -nav div .statut_vmix_contener .statut_vmix .activeContainer div.active { - background: #f19e1b; -} - -#notification-container { - position: fixed; - bottom: 10px; - right: 10px; - max-width: 300px; - z-index: 20000; -} -#notification-container .notification { - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); - border-radius: 5px; - padding: 15px; - overflow: hidden; - margin-bottom: 10px; - opacity: 0; - transform: translateY(100%); - transition: opacity 0.5s, transform 0.5s; -} -#notification-container .notification.success { - background-color: #15CD72; -} -#notification-container .notification.error { - background-color: #ED4F32; -} -#notification-container .notification.warning { - background-color: #edcd4d; -} -#notification-container .notification.in { - opacity: 1; - transform: translateY(0); -} - -.inputContainer { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: rgba(0, 0, 0, 0.5); - z-index: 1000; -} -.inputContainer .Container { - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 80%; - max-width: 1400px; - height: 500px; - background: #0a0f14; - margin-bottom: 10px; - border: 1px solid #ccc; - overflow: hidden; -} -.inputContainer .Container .header { - display: flex; - align-items: center; - justify-content: space-between; - background: #ECECEC; - height: 25px; - padding: 0px 10px; -} -.inputContainer .Container .header h1 { - font-size: 0.8rem; - color: #1e2328; - font-weight: 500; -} -.inputContainer .Container .header .closeButton { - color: #0a0f14; -} -.inputContainer .Container .body { - display: grid; - grid-template-columns: 150px 1fr; - height: 100%; -} -.inputContainer .Container .body .nav { - background: #0a0f14; -} -.inputContainer .Container .body .nav button { - background: transparent; - margin: 0; - width: 100%; - overflow: hidden; - border: 0px; - text-align: left; - font-size: 0.8em; - font-weight: 400; - padding: 10px 10px; - text-transform: none; -} -.inputContainer .Container .body .nav button:hover { - background: #1e2328; -} -.inputContainer .Container .body .nav button.active { - background: #41ae46; -} -.inputContainer .Container .body .content { - background: rgb(253, 253, 253); - height: 100%; - min-height: 300px; -} -@media (max-width: 1300px) { - .inputContainer .Container .body .content { - overflow-y: scroll; - } -} -.inputContainer .Container .body .content input, -.inputContainer .Container .body .content textarea { - background: #ece9e9; - border: 1px solid #1e2328; - border-radius: 0; - font-size: 0.8rem; - font-weight: 600; - padding: 5px; - color: #0a0f14; - width: 500px; -} -.inputContainer .Container .body .content input[type=checkbox] { - position: relative; - cursor: pointer; - -webkit-appearance: none; - border: 0; - background: transparent; - width: 15px; - height: 15px; - border: 1px solid #0a0f14; -} -.inputContainer .Container .body .content input[type=checkbox]:checked:before { - content: ""; - display: block; - position: absolute; - width: 80%; - height: 80%; - top: 10%; - left: 10%; - background-color: #41ae46; -} -.inputContainer .Container .body .content label { - color: #0a0f14; - font-size: 0.8rem; - font-weight: 600; - padding: 5px; -} -.inputContainer .Container .body .content .Buttonvalid { - display: flex; - justify-content: center; - align-items: center; - color: #0a0f14; - padding: 5px; - font-size: 1.5rem; - transition: 0.5s ease; - cursor: pointer; -} -.inputContainer .Container .body .content .Buttonvalid::before { - display: inline-block; - font-family: "Pe-icon-7-stroke"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\e66c"; -} -.inputContainer .Container .body .content .Buttonvalid:hover { - color: #41ae46; - transform: scale(1.2); -} -.inputContainer .Container .body .content .general .GeneralContainer { - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; -} -.inputContainer .Container .body .content .general .GeneralContainer div { - display: flex; - justify-content: center; - align-items: center; - margin: 5px; -} -.inputContainer .Container .body .content .general .head { - display: flex; - align-items: center; - justify-content: space-between; - height: 100%; - background: #0a0f14; -} -.inputContainer .Container .body .content .general .head h1 { - font-size: 0.8rem; - padding-left: 10px; -} -.inputContainer .Container .body .content .general .head button { - height: 100%; - margin: 0; - border: 0px; - margin-left: 2px; -} -.inputContainer .Container .body .content .list .GeneralContainer { - padding: 5px; - display: flex; - align-items: center; - justify-content: flex-start; - flex-direction: column; -} -.inputContainer .Container .body .content .list .GeneralContainer ul { - overflow-y: scroll; - width: 100%; - height: 400px; -} -.inputContainer .Container .body .content .list .GeneralContainer ul li { - display: flex; - align-items: center; - justify-content: flex-start; - border-bottom: 1px solid #1e2328; - padding: 5px; - height: 35px; -} -.inputContainer .Container .body .content .list .GeneralContainer ul li input[type=checkbox] { - width: 7px; - height: 7px; - cursor: default; -} -.inputContainer .Container .body .content .list .GeneralContainer ul li label { - font-size: 0.7rem; - margin-left: 5px; - font-weight: 500; - height: 100%; - cursor: pointer; -} -.inputContainer .Container .body .content .list .GeneralContainer ul li:hover { - background: #ECECEC; -} -.inputContainer .Container .body .content .list .GeneralContainer ul li.select { - background: #edcd4d; -} -.inputContainer .Container .body .content .list .GeneralContainer ul li.select:hover { - background: #edcd4d; - filter: brightness(90%); -} -.inputContainer .Container .body .content .list .GeneralContainer ul li .Button_remove { - display: flex; - justify-content: center; - align-items: center; - color: #0a0f14; - padding: 5px; - font-size: 1.5rem; - transition: 0.5s ease; - cursor: pointer; -} -.inputContainer .Container .body .content .list .GeneralContainer ul li .Button_remove::before { - display: inline-block; - font-family: "Pe-icon-7-stroke"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\e609"; -} -.inputContainer .Container .body .content .list .GeneralContainer ul li .Button_remove:hover { - color: #ED4F32; -} -.inputContainer .Container .body .content .list .GeneralContainer ul li .Button_edit { - display: flex; - justify-content: center; - align-items: center; - color: #0a0f14; - padding: 5px; - font-size: 1.5rem; - transition: 0.5s ease; - cursor: pointer; -} -.inputContainer .Container .body .content .list .GeneralContainer ul li .Button_edit::before { - display: inline-block; - font-family: "Pe-icon-7-stroke"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\e659"; -} -.inputContainer .Container .body .content .list .GeneralContainer ul li .Button_edit:hover { - color: #41ae46; -} -.inputContainer .Container .body .content .list .GeneralContainer ul div { - margin: 5px; -} -.inputContainer .Container .body .content .list .head { - display: flex; - align-items: center; - justify-content: space-between; - height: 100%; - background: #0a0f14; - justify-content: flex-end; -} -.inputContainer .Container .body .content .list .head h1 { - font-size: 0.8rem; - padding-left: 10px; -} -.inputContainer .Container .body .content .list .head button { - height: 100%; - margin: 0; - border: 0px; - margin-left: 2px; -} -.inputContainer .Container .body .content .layers { - display: grid; - grid-template-columns: 500px 1fr; -} -@media (max-width: 1300px) { - .inputContainer .Container .body .content .layers { - grid-template-columns: 1fr; - margin-bottom: 50px; - } -} -.inputContainer .Container .body .content .layers .left { - display: flex; - align-items: flex-start; - justify-content: flex-start; - flex-direction: column; - align-items: center; - padding: 10px; -} -.inputContainer .Container .body .content .layers .left .list { - display: flex; - align-items: flex-start; - padding: 0; - margin: 2px; - height: 26px; -} -.inputContainer .Container .body .content .layers .left .list .layer_number { - display: flex; - justify-content: center; - align-items: center; - width: 26px; - height: 100%; - background: #1e2328; -} -.inputContainer .Container .body .content .layers .left .list .layer_number label { - color: #ffffff; -} -.inputContainer .Container .body .content .layers .left .list select { - padding: 4px; - width: 200px; - border-radius: 0; - height: 100%; -} -.inputContainer .Container .body .content .layers .left .list button { - height: 100%; - padding: 5px 20px; - margin: 0px; - border: 0; - font-weight: 500; -} -.inputContainer .Container .body .content .layers .left .list button.on { - padding: 5px 10px; - background: #41ae46; -} -.inputContainer .Container .body .content .layers .left .list button.off { - padding: 5px 10px; - background: #ED4F32; -} -.inputContainer .Container .body .content .layers .rigth { - position: relative; -} -.inputContainer .Container .body .content .layers .rigth h1 { - font-size: 1rem; - padding: 10px; - color: #002b6c; -} -.inputContainer .Container .body .content .layers .rigth button { - position: absolute; - transform: translateY(-50%) translateX(50%); - top: 10px; - right: 25px; - font-size: 0.8rem; - padding: 5px; - border: 0; -} -.inputContainer .Container .body .content .layers .rigth .mode { - border: #1e2328 solid 1px; - padding: 10px; - margin-top: 5px; - background: #ECECEC; -} -.inputContainer .Container .body .content .layers .rigth .mode .mode_header { - display: flex; - justify-content: center; - align-items: center; - position: relative; -} -.inputContainer .Container .body .content .layers .rigth .mode .mode_header h3 { - color: #0a0f14; - text-transform: uppercase; - font-style: 1rem; - font-weight: 600; - padding-bottom: 15px; - text-decoration-line: underline; - transition: 0.5s ease; -} -.inputContainer .Container .body .content .layers .rigth .mode .mode_header button { - position: absolute; - transform: translateY(-50%) translateX(50%); - top: 0; - right: 10px; - font-size: 0.8rem; - padding: 5px; - border: 0; -} -.inputContainer .Container .body .content .layers .rigth .mode .mode_content { - display: flex; - flex-wrap: wrap; - align-content: flex-start; - justify-content: center; -} -.inputContainer .Container .body .content .layers .rigth .mode .mode_content div { - display: flex; - justify-content: center; - align-items: center; - display: flex; - height: 26px; - margin: 5px; -} -.inputContainer .Container .body .content .layers .rigth .mode .mode_content div .label_content { - display: flex; - justify-content: center; - align-items: center; - width: 50px; - height: 100%; - background: #1e2328; -} -.inputContainer .Container .body .content .layers .rigth .mode .mode_content div .label_content label { - color: #ffffff; -} -.inputContainer .Container .body .content .layers .rigth .mode .mode_content div input { - width: 100px; - background: #ffffff; -} -.inputContainer .Container .body .content .GT { - height: 100%; -} -.inputContainer .Container .body .content .GT .GeneralContainer { - display: grid; - grid-template-columns: 150px 1fr; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_nav { - overflow-y: scroll; - height: 475px; - background: #1e2328; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_nav li { - align-items: center; - cursor: pointer; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_nav li:hover { - background: #0a0f14; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_nav li.active { - background: #41ae46; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_nav li h3 { - word-break: break-all; - font-size: 0.8rem; - color: #ffffff; - padding: 10px; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text { - display: none; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text.active { - display: block; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text textarea { - height: 200px; - width: 100%; - padding: 10px; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum { - display: grid; - grid-template-columns: 1fr 1fr; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .countdown, -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .color { - display: flex; - justify-content: center; - align-items: center; - align-items: stretch; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .countdown h4, -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .color h4 { - display: flex; - justify-content: center; - align-items: center; - margin-right: 10px; - color: #0a0f14; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .countdown button, -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .color button { - display: flex; - justify-content: center; - align-items: center; - color: #0a0f14; - background: #ECECEC; - padding: 5px; - margin: 2px; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .countdown button:hover, -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .color button:hover { - background: #616161; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .countdown .play::before, -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .color .play::before { - display: inline-block; - font-family: "Pe-icon-7-stroke"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: url(/assets/icon/play3.svg); -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .countdown .pause::before, -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .color .pause::before { - display: inline-block; - font-family: "Pe-icon-7-stroke"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: url(/assets/icon/pause2.svg); -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .countdown .reset::before, -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .color .reset::before { - display: inline-block; - font-family: "Pe-icon-7-stroke"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: url(/assets/icon/stop2.svg); -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .countdown .input_color, -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .color .input_color { - width: 150px; - margin-right: 7px; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .countdown { - justify-content: flex-end; -} -.inputContainer .Container .body .content .GT .GeneralContainer #inputContainer_content_gt_value .gt_text .bottum .color { - justify-content: flex-start; -} - -.closeButton { - cursor: pointer; - transition: 0.5s ease; -} -.closeButton:hover { - color: #ED4F32; -} - -.EditContainer { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: rgba(0, 0, 0, 0.5); - z-index: 1010; -} -.EditContainer .Container { - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 70%; - padding: 50px; - background: #0a0f14; - margin-bottom: 10px; - border: 1px solid #ccc; - overflow: hidden; - position: relative; -} -.EditContainer .Container .closeButton { - position: absolute; - top: 0px; - right: 5px; -} -.EditContainer .Container .body { - width: 100%; -} -.EditContainer .Container .body h1 { - padding: 10px; - font-size: 1.2rem; - color: #ECECEC; -} -.EditContainer .Container .body div { - width: 100%; - margin: 5px; -} -.EditContainer .Container .body div label { - margin-right: 5px; -} -.EditContainer .Container .body div input { - width: 50%; -} -.EditContainer .Container .body .valid { - background: #41ae46; -} -.EditContainer .Container .body .cancel { - background: #ED4F32; -}/*# sourceMappingURL=index.css.map */ \ No newline at end of file diff --git a/app/public/assets/style/index.css.map b/app/public/assets/style/index.css.map deleted file mode 100644 index ac2b7bb..0000000 --- a/app/public/assets/style/index.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["_fonts.scss","index.css","_settings.scss","compoments/icon/_icon.scss","pages/_main.scss","pages/_new_session.scss","compoments/_input_video.scss","compoments/_input_audio.scss","compoments/_nav.scss","compoments/_statut_vmix_contener.scss","compoments/_notification.scss","compoments/_inputContainer.scss","compoments/_inputContainerContent.scss","compoments/_EditContainer.scss"],"names":[],"mappings":"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;;AEeA;EACA,gBAAA;AFZA;;AEcA;EACA,gBAAA;AFXA;;AEaA;EACA,gBAAA;AFVA;;AEYA;EACA,gBAAA;AFTA;;AEWA;EACA,gBAAA;AFRA;;AEUA;EACA,gBAAA;AFPA;;AESA;EACA,gBAAA;AFNA;;AEQA;EACA,gBAAA;AFLA;;AEOA;EACA,gBAAA;AFJA;;AEMA;EACA,gBAAA;AFHA;;AEKA;EACA,gBAAA;AFFA;;AEIA;EACA,gBAAA;AFDA;;AEGA;EACA,gBAAA;AFAA;;AEEA;EACA,gBAAA;AFCA;;AECA;EACA,gBAAA;AFEA;;AEAA;EACA,gBAAA;AFGA;;AEDA;EACA,gBAAA;AFIA;;AEFA;EACA,gBAAA;AFKA;;AEHA;EACA,gBAAA;AFMA;;AEJA;EACA,gBAAA;AFOA;;AELA;EACA,gBAAA;AFQA;;AENA;EACA,gBAAA;AFSA;;AEPA;EACA,gBAAA;AFUA;;AERA;EACA,gBAAA;AFWA;;AETA;EACA,gBAAA;AFYA;;AEVA;EACA,gBAAA;AFaA;;AEXA;EACA,gBAAA;AFcA;;AEZA;EACA,gBAAA;AFeA;;AEbA;EACA,gBAAA;AFgBA;;AEdA;EACA,gBAAA;AFiBA;;AEfA;EACA,gBAAA;AFkBA;;AEhBA;EACA,gBAAA;AFmBA;;AEjBA;EACA,gBAAA;AFoBA;;AElBA;EACA,gBAAA;AFqBA;;AEnBA;EACA,gBAAA;AFsBA;;AEpBA;EACA,gBAAA;AFuBA;;AErBA;EACA,gBAAA;AFwBA;;AEtBA;EACA,gBAAA;AFyBA;;AEvBA;EACA,gBAAA;AF0BA;;AExBA;EACA,gBAAA;AF2BA;;AEzBA;EACA,gBAAA;AF4BA;;AE1BA;EACA,gBAAA;AF6BA;;AE3BA;EACA,gBAAA;AF8BA;;AE5BA;EACA,gBAAA;AF+BA;;AE7BA;EACA,gBAAA;AFgCA;;AE9BA;EACA,gBAAA;AFiCA;;AE/BA;EACA,gBAAA;AFkCA;;AEhCA;EACA,gBAAA;AFmCA;;AEjCA;EACA,gBAAA;AFoCA;;AElCA;EACA,gBAAA;AFqCA;;AEnCA;EACA,gBAAA;AFsCA;;AEpCA;EACA,gBAAA;AFuCA;;AErCA;EACA,gBAAA;AFwCA;;AEtCA;EACA,gBAAA;AFyCA;;AEvCA;EACA,gBAAA;AF0CA;;AExCA;EACA,gBAAA;AF2CA;;AEzCA;EACA,gBAAA;AF4CA;;AE1CA;EACA,gBAAA;AF6CA;;AE3CA;EACA,gBAAA;AF8CA;;AE5CA;EACA,gBAAA;AF+CA;;AE7CA;EACA,gBAAA;AFgDA;;AE9CA;EACA,gBAAA;AFiDA;;AE/CA;EACA,gBAAA;AFkDA;;AEhDA;EACA,gBAAA;AFmDA;;AEjDA;EACA,gBAAA;AFoDA;;AElDA;EACA,gBAAA;AFqDA;;AEnDA;EACA,gBAAA;AFsDA;;AEpDA;EACA,gBAAA;AFuDA;;AErDA;EACA,gBAAA;AFwDA;;AEtDA;EACA,gBAAA;AFyDA;;AEvDA;EACA,gBAAA;AF0DA;;AExDA;EACA,gBAAA;AF2DA;;AEzDA;EACA,gBAAA;AF4DA;;AE1DA;EACA,gBAAA;AF6DA;;AE3DA;EACA,gBAAA;AF8DA;;AE5DA;EACA,gBAAA;AF+DA;;AE7DA;EACA,gBAAA;AFgEA;;AE9DA;EACA,gBAAA;AFiEA;;AE/DA;EACA,gBAAA;AFkEA;;AEhEA;EACA,gBAAA;AFmEA;;AEjEA;EACA,gBAAA;AFoEA;;AElEA;EACA,gBAAA;AFqEA;;AEnEA;EACA,gBAAA;AFsEA;;AEpEA;EACA,gBAAA;AFuEA;;AErEA;EACA,gBAAA;AFwEA;;AEtEA;EACA,gBAAA;AFyEA;;AEvEA;EACA,gBAAA;AF0EA;;AExEA;EACA,gBAAA;AF2EA;;AEzEA;EACA,gBAAA;AF4EA;;AE1EA;EACA,gBAAA;AF6EA;;AE3EA;EACA,gBAAA;AF8EA;;AE5EA;EACA,gBAAA;AF+EA;;AE7EA;EACA,gBAAA;AFgFA;;AE9EA;EACA,gBAAA;AFiFA;;AE/EA;EACA,gBAAA;AFkFA;;AEhFA;EACA,gBAAA;AFmFA;;AEjFA;EACA,gBAAA;AFoFA;;AElFA;EACA,gBAAA;AFqFA;;AEnFA;EACA,gBAAA;AFsFA;;AEpFA;EACA,gBAAA;AFuFA;;AErFA;EACA,gBAAA;AFwFA;;AEtFA;EACA,gBAAA;AFyFA;;AEvFA;EACA,gBAAA;AF0FA;;AExFA;EACA,gBAAA;AF2FA;;AEzFA;EACA,gBAAA;AF4FA;;AE1FA;EACA,gBAAA;AF6FA;;AE3FA;EACA,gBAAA;AF8FA;;AE5FA;EACA,gBAAA;AF+FA;;AE7FA;EACA,gBAAA;AFgGA;;AE9FA;EACA,gBAAA;AFiGA;;AE/FA;EACA,gBAAA;AFkGA;;AEhGA;EACA,gBAAA;AFmGA;;AEjGA;EACA,gBAAA;AFoGA;;AElGA;EACA,gBAAA;AFqGA;;AEnGA;EACA,gBAAA;AFsGA;;AEpGA;EACA,gBAAA;AFuGA;;AErGA;EACA,gBAAA;AFwGA;;AEtGA;EACA,gBAAA;AFyGA;;AEvGA;EACA,gBAAA;AF0GA;;AExGA;EACA,gBAAA;AF2GA;;AEzGA;EACA,gBAAA;AF4GA;;AE1GA;EACA,gBAAA;AF6GA;;AE3GA;EACA,gBAAA;AF8GA;;AE5GA;EACA,gBAAA;AF+GA;;AE7GA;EACA,gBAAA;AFgHA;;AE9GA;EACA,gBAAA;AFiHA;;AE/GA;EACA,gBAAA;AFkHA;;AEhHA;EACA,gBAAA;AFmHA;;AEjHA;EACA,gBAAA;AFoHA;;AElHA;EACA,gBAAA;AFqHA;;AEnHA;EACA,gBAAA;AFsHA;;AEpHA;EACA,gBAAA;AFuHA;;AErHA;EACA,gBAAA;AFwHA;;AEtHA;EACA,gBAAA;AFyHA;;AEvHA;EACA,gBAAA;AF0HA;;AExHA;EACA,gBAAA;AF2HA;;AEzHA;EACA,gBAAA;AF4HA;;AE1HA;EACA,gBAAA;AF6HA;;AE3HA;EACA,gBAAA;AF8HA;;AE5HA;EACA,gBAAA;AF+HA;;AE7HA;EACA,gBAAA;AFgIA;;AE9HA;EACA,gBAAA;AFiIA;;AE/HA;EACA,gBAAA;AFkIA;;AEhIA;EACA,gBAAA;AFmIA;;AEjIA;EACA,gBAAA;AFoIA;;AElIA;EACA,gBAAA;AFqIA;;AEnIA;EACA,gBAAA;AFsIA;;AEpIA;EACA,gBAAA;AFuIA;;AErIA;EACA,gBAAA;AFwIA;;AEtIA;EACA,gBAAA;AFyIA;;AEvIA;EACA,gBAAA;AF0IA;;AExIA;EACA,gBAAA;AF2IA;;AEzIA;EAC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","file":"index.css"} \ No newline at end of file From 57105514dab4874227a4835521ff8514dbce2513 Mon Sep 17 00:00:00 2001 From: vincentberry Date: Wed, 13 Mar 2024 18:32:09 +0100 Subject: [PATCH 03/36] =?UTF-8?q?=F0=9F=94=A7=20build:=20Compole=20scss?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit test --- .github/workflows/docker-image_dev.yml | 8 +++++++- package.json | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 package.json diff --git a/.github/workflows/docker-image_dev.yml b/.github/workflows/docker-image_dev.yml index deb7343..d98da9e 100644 --- a/.github/workflows/docker-image_dev.yml +++ b/.github/workflows/docker-image_dev.yml @@ -14,6 +14,12 @@ jobs: steps: - uses: actions/checkout@v2 + + - name: Compile SCSS + run: | + npm install sass + sass /app/public/assets/style/index.scss /app/public/assets/style/index.css + - name: docker login env: DOCKER_USER: ${{secrets.DOCKER_USER}} @@ -22,7 +28,7 @@ jobs: docker login -u $DOCKER_USER -p $DOCKER_PASSWORD - name: Build the Docker image - run: docker build . --file Dockerfile --tag vincentberry/vmix-remote:dev + run: docker build . --file Dockerfile --build-arg NODE_ENV=dev --tag vincentberry/vmix-remote:dev - name: Docker Push run: docker push --all-tags vincentberry/vmix-remote diff --git a/package.json b/package.json new file mode 100644 index 0000000..1a00ee4 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "sass": "^1.71.1" + } +} \ No newline at end of file From 6ee459818dd2c98429bc72cf2daec3f6a86cc495 Mon Sep 17 00:00:00 2001 From: vincentberry Date: Wed, 13 Mar 2024 18:39:39 +0100 Subject: [PATCH 04/36] =?UTF-8?q?=F0=9F=90=9E=20fix(workflow):?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/docker-image_dev.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker-image_dev.yml b/.github/workflows/docker-image_dev.yml index d98da9e..3467f15 100644 --- a/.github/workflows/docker-image_dev.yml +++ b/.github/workflows/docker-image_dev.yml @@ -15,9 +15,16 @@ jobs: - uses: actions/checkout@v2 + - name: Install Node.js and npm + uses: actions/setup-node@v5 + with: + node-version: '14' + + - name: Install Sass + run: npm install -g sass + - name: Compile SCSS run: | - npm install sass sass /app/public/assets/style/index.scss /app/public/assets/style/index.css - name: docker login From f0c8b40c0cf7e5c2de881f3c2963fd3cde51111f Mon Sep 17 00:00:00 2001 From: vincentberry Date: Wed, 13 Mar 2024 18:42:05 +0100 Subject: [PATCH 05/36] actions changemnt de version --- .github/workflows/docker-image_dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-image_dev.yml b/.github/workflows/docker-image_dev.yml index 3467f15..954434a 100644 --- a/.github/workflows/docker-image_dev.yml +++ b/.github/workflows/docker-image_dev.yml @@ -16,7 +16,7 @@ jobs: - uses: actions/checkout@v2 - name: Install Node.js and npm - uses: actions/setup-node@v5 + uses: actions/setup-node@v4 with: node-version: '14' From d60b20c2b55e5babeac5da47727672fcc60adce7 Mon Sep 17 00:00:00 2001 From: vincentberry Date: Wed, 13 Mar 2024 19:02:53 +0100 Subject: [PATCH 06/36] =?UTF-8?q?=F0=9F=90=9E=20fix(workflow):?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change le chemin de index.scss --- .github/workflows/docker-image_dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-image_dev.yml b/.github/workflows/docker-image_dev.yml index 954434a..7d95187 100644 --- a/.github/workflows/docker-image_dev.yml +++ b/.github/workflows/docker-image_dev.yml @@ -25,7 +25,7 @@ jobs: - name: Compile SCSS run: | - sass /app/public/assets/style/index.scss /app/public/assets/style/index.css + sass app/public/assets/style/index.scss app/public/assets/style/index.css - name: docker login env: From 0ec4bf6c68ddc05c91266d9b863e587fc4778e2f Mon Sep 17 00:00:00 2001 From: vincentberry Date: Wed, 13 Mar 2024 19:21:31 +0100 Subject: [PATCH 07/36] =?UTF-8?q?=F0=9F=94=A7=20build(workflow):=20Update?= =?UTF-8?q?=20le=20workflow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ajout du compilateur scss --- .github/workflows/docker-image_demo.yml | 38 ++++++++++++++-------- .github/workflows/docker-image_main.yml | 43 ++++++++++++++++--------- 2 files changed, 53 insertions(+), 28 deletions(-) diff --git a/.github/workflows/docker-image_demo.yml b/.github/workflows/docker-image_demo.yml index 6f699c7..942bb80 100644 --- a/.github/workflows/docker-image_demo.yml +++ b/.github/workflows/docker-image_demo.yml @@ -13,17 +13,29 @@ jobs: steps: - - uses: actions/checkout@v2 - - - name: docker login - env: - DOCKER_USER: ${{secrets.DOCKER_USER}} - DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}} - run: | - docker login -u $DOCKER_USER -p $DOCKER_PASSWORD - - - name: Build the Docker image - run: docker build . --file Dockerfile --tag vincentberry/vmix-remote:demo + - uses: actions/checkout@v2 - - name: Docker Push - run: docker push --all-tags vincentberry/vmix-remote + - name: Install Node.js and npm + uses: actions/setup-node@v4 + with: + node-version: '14' + + - name: Install Sass + run: npm install -g sass + + - name: Compile SCSS + run: | + sass app/public/assets/style/index.scss app/public/assets/style/index.css + + - name: docker login + env: + DOCKER_USER: ${{secrets.DOCKER_USER}} + DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}} + run: | + docker login -u $DOCKER_USER -p $DOCKER_PASSWORD + + - name: Build the Docker image + run: docker build . --file Dockerfile --build-arg NODE_ENV=demo --tag vincentberry/vmix-remote:demo + + - name: Docker Push + run: docker push --all-tags vincentberry/vmix-remote \ No newline at end of file diff --git a/.github/workflows/docker-image_main.yml b/.github/workflows/docker-image_main.yml index 4f2138e..8bf56ac 100644 --- a/.github/workflows/docker-image_main.yml +++ b/.github/workflows/docker-image_main.yml @@ -13,19 +13,32 @@ jobs: steps: - - uses: actions/checkout@v2 - - name: docker login - env: - DOCKER_USER: ${{secrets.DOCKER_USER}} - DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}} - run: | - docker login -u $DOCKER_USER -p $DOCKER_PASSWORD + - uses: actions/checkout@v2 + + - name: Install Node.js and npm + uses: actions/setup-node@v4 + with: + node-version: '14' + + - name: Install Sass + run: npm install -g sass + + - name: Compile SCSS + run: | + sass app/public/assets/style/index.scss app/public/assets/style/index.css + + - name: docker login + env: + DOCKER_USER: ${{secrets.DOCKER_USER}} + DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}} + run: | + docker login -u $DOCKER_USER -p $DOCKER_PASSWORD + + - name: Build the Docker image + run: docker build . --file Dockerfile --build-arg NODE_ENV=prod --tag vincentberry/vmix-remote:latest - - name: Build the Docker image - run: docker build . --file Dockerfile --tag vincentberry/vmix-remote:latest - - - name: Build the Docker image - run: docker build . --file Dockerfile --tag vincentberry/vmix-remote:$(date +%s) - - - name: Docker Push - run: docker push --all-tags vincentberry/vmix-remote + - name: Build the Docker image + run: docker build . --file Dockerfile --build-arg NODE_ENV=prod --tag vincentberry/vmix-remote:$(date +%s) + + - name: Docker Push + run: docker push --all-tags vincentberry/vmix-remote \ No newline at end of file From 1368bd72fad174841c4245ff9e1780f92345f8c5 Mon Sep 17 00:00:00 2001 From: vincentberry Date: Sat, 16 Mar 2024 15:10:34 +0100 Subject: [PATCH 08/36] =?UTF-8?q?=F0=9F=94=A7=20build(npm):=20delete=20ele?= =?UTF-8?q?ments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Suppression de tout les assets /js et /style avant compilation Deplacement des element dans src/assets --- app/{public/assets/js => src/assets/TypeScript}/api_vmix.js | 0 app/{public/assets/js => src/assets/TypeScript}/app.js | 0 app/{public/assets/js => src/assets/TypeScript}/copy.js | 0 app/{public/assets/js => src/assets/TypeScript}/lobby.js | 0 app/{public/assets/js => src/assets/TypeScript}/notification.js | 0 .../assets/js => src/assets/TypeScript}/processAudioBus.js | 0 .../assets/js => src/assets/TypeScript}/processAudioSources.js | 0 app/{public/assets/js => src/assets/TypeScript}/processEdit.js | 0 .../assets/js => src/assets/TypeScript}/processPageSources.js | 0 .../assets/js => src/assets/TypeScript}/processSettings.js | 0 .../assets/js => src/assets/TypeScript}/processVideoSources.js | 0 app/{public/assets/js => src/assets/TypeScript}/submit_vmix.js | 0 app/{public/assets/style => src/assets/scss}/_fonts.scss | 0 app/{public/assets/style => src/assets/scss}/_settings.scss | 0 .../style => src/assets/scss}/compoments/_EditContainer.scss | 0 .../style => src/assets/scss}/compoments/_inputContainer.scss | 0 .../assets/scss}/compoments/_inputContainerContent.scss | 0 .../assets/style => src/assets/scss}/compoments/_input_audio.scss | 0 .../assets/style => src/assets/scss}/compoments/_input_video.scss | 0 app/{public/assets/style => src/assets/scss}/compoments/_nav.scss | 0 .../style => src/assets/scss}/compoments/_notification.scss | 0 .../assets/scss}/compoments/_statut_vmix_contener.scss | 0 .../assets/style => src/assets/scss}/compoments/icon/_icon.scss | 0 app/{public/assets/style => src/assets/scss}/index.scss | 0 app/{public/assets/style => src/assets/scss}/pages/_main.scss | 0 .../assets/style => src/assets/scss}/pages/_new_session.scss | 0 26 files changed, 0 insertions(+), 0 deletions(-) rename app/{public/assets/js => src/assets/TypeScript}/api_vmix.js (100%) rename app/{public/assets/js => src/assets/TypeScript}/app.js (100%) rename app/{public/assets/js => src/assets/TypeScript}/copy.js (100%) rename app/{public/assets/js => src/assets/TypeScript}/lobby.js (100%) rename app/{public/assets/js => src/assets/TypeScript}/notification.js (100%) rename app/{public/assets/js => src/assets/TypeScript}/processAudioBus.js (100%) rename app/{public/assets/js => src/assets/TypeScript}/processAudioSources.js (100%) rename app/{public/assets/js => src/assets/TypeScript}/processEdit.js (100%) rename app/{public/assets/js => src/assets/TypeScript}/processPageSources.js (100%) rename app/{public/assets/js => src/assets/TypeScript}/processSettings.js (100%) rename app/{public/assets/js => src/assets/TypeScript}/processVideoSources.js (100%) rename app/{public/assets/js => src/assets/TypeScript}/submit_vmix.js (100%) rename app/{public/assets/style => src/assets/scss}/_fonts.scss (100%) rename app/{public/assets/style => src/assets/scss}/_settings.scss (100%) rename app/{public/assets/style => src/assets/scss}/compoments/_EditContainer.scss (100%) rename app/{public/assets/style => src/assets/scss}/compoments/_inputContainer.scss (100%) rename app/{public/assets/style => src/assets/scss}/compoments/_inputContainerContent.scss (100%) rename app/{public/assets/style => src/assets/scss}/compoments/_input_audio.scss (100%) rename app/{public/assets/style => src/assets/scss}/compoments/_input_video.scss (100%) rename app/{public/assets/style => src/assets/scss}/compoments/_nav.scss (100%) rename app/{public/assets/style => src/assets/scss}/compoments/_notification.scss (100%) rename app/{public/assets/style => src/assets/scss}/compoments/_statut_vmix_contener.scss (100%) rename app/{public/assets/style => src/assets/scss}/compoments/icon/_icon.scss (100%) rename app/{public/assets/style => src/assets/scss}/index.scss (100%) rename app/{public/assets/style => src/assets/scss}/pages/_main.scss (100%) rename app/{public/assets/style => src/assets/scss}/pages/_new_session.scss (100%) diff --git a/app/public/assets/js/api_vmix.js b/app/src/assets/TypeScript/api_vmix.js similarity index 100% rename from app/public/assets/js/api_vmix.js rename to app/src/assets/TypeScript/api_vmix.js diff --git a/app/public/assets/js/app.js b/app/src/assets/TypeScript/app.js similarity index 100% rename from app/public/assets/js/app.js rename to app/src/assets/TypeScript/app.js diff --git a/app/public/assets/js/copy.js b/app/src/assets/TypeScript/copy.js similarity index 100% rename from app/public/assets/js/copy.js rename to app/src/assets/TypeScript/copy.js diff --git a/app/public/assets/js/lobby.js b/app/src/assets/TypeScript/lobby.js similarity index 100% rename from app/public/assets/js/lobby.js rename to app/src/assets/TypeScript/lobby.js diff --git a/app/public/assets/js/notification.js b/app/src/assets/TypeScript/notification.js similarity index 100% rename from app/public/assets/js/notification.js rename to app/src/assets/TypeScript/notification.js diff --git a/app/public/assets/js/processAudioBus.js b/app/src/assets/TypeScript/processAudioBus.js similarity index 100% rename from app/public/assets/js/processAudioBus.js rename to app/src/assets/TypeScript/processAudioBus.js diff --git a/app/public/assets/js/processAudioSources.js b/app/src/assets/TypeScript/processAudioSources.js similarity index 100% rename from app/public/assets/js/processAudioSources.js rename to app/src/assets/TypeScript/processAudioSources.js diff --git a/app/public/assets/js/processEdit.js b/app/src/assets/TypeScript/processEdit.js similarity index 100% rename from app/public/assets/js/processEdit.js rename to app/src/assets/TypeScript/processEdit.js diff --git a/app/public/assets/js/processPageSources.js b/app/src/assets/TypeScript/processPageSources.js similarity index 100% rename from app/public/assets/js/processPageSources.js rename to app/src/assets/TypeScript/processPageSources.js diff --git a/app/public/assets/js/processSettings.js b/app/src/assets/TypeScript/processSettings.js similarity index 100% rename from app/public/assets/js/processSettings.js rename to app/src/assets/TypeScript/processSettings.js diff --git a/app/public/assets/js/processVideoSources.js b/app/src/assets/TypeScript/processVideoSources.js similarity index 100% rename from app/public/assets/js/processVideoSources.js rename to app/src/assets/TypeScript/processVideoSources.js diff --git a/app/public/assets/js/submit_vmix.js b/app/src/assets/TypeScript/submit_vmix.js similarity index 100% rename from app/public/assets/js/submit_vmix.js rename to app/src/assets/TypeScript/submit_vmix.js diff --git a/app/public/assets/style/_fonts.scss b/app/src/assets/scss/_fonts.scss similarity index 100% rename from app/public/assets/style/_fonts.scss rename to app/src/assets/scss/_fonts.scss diff --git a/app/public/assets/style/_settings.scss b/app/src/assets/scss/_settings.scss similarity index 100% rename from app/public/assets/style/_settings.scss rename to app/src/assets/scss/_settings.scss diff --git a/app/public/assets/style/compoments/_EditContainer.scss b/app/src/assets/scss/compoments/_EditContainer.scss similarity index 100% rename from app/public/assets/style/compoments/_EditContainer.scss rename to app/src/assets/scss/compoments/_EditContainer.scss diff --git a/app/public/assets/style/compoments/_inputContainer.scss b/app/src/assets/scss/compoments/_inputContainer.scss similarity index 100% rename from app/public/assets/style/compoments/_inputContainer.scss rename to app/src/assets/scss/compoments/_inputContainer.scss diff --git a/app/public/assets/style/compoments/_inputContainerContent.scss b/app/src/assets/scss/compoments/_inputContainerContent.scss similarity index 100% rename from app/public/assets/style/compoments/_inputContainerContent.scss rename to app/src/assets/scss/compoments/_inputContainerContent.scss diff --git a/app/public/assets/style/compoments/_input_audio.scss b/app/src/assets/scss/compoments/_input_audio.scss similarity index 100% rename from app/public/assets/style/compoments/_input_audio.scss rename to app/src/assets/scss/compoments/_input_audio.scss diff --git a/app/public/assets/style/compoments/_input_video.scss b/app/src/assets/scss/compoments/_input_video.scss similarity index 100% rename from app/public/assets/style/compoments/_input_video.scss rename to app/src/assets/scss/compoments/_input_video.scss diff --git a/app/public/assets/style/compoments/_nav.scss b/app/src/assets/scss/compoments/_nav.scss similarity index 100% rename from app/public/assets/style/compoments/_nav.scss rename to app/src/assets/scss/compoments/_nav.scss diff --git a/app/public/assets/style/compoments/_notification.scss b/app/src/assets/scss/compoments/_notification.scss similarity index 100% rename from app/public/assets/style/compoments/_notification.scss rename to app/src/assets/scss/compoments/_notification.scss diff --git a/app/public/assets/style/compoments/_statut_vmix_contener.scss b/app/src/assets/scss/compoments/_statut_vmix_contener.scss similarity index 100% rename from app/public/assets/style/compoments/_statut_vmix_contener.scss rename to app/src/assets/scss/compoments/_statut_vmix_contener.scss diff --git a/app/public/assets/style/compoments/icon/_icon.scss b/app/src/assets/scss/compoments/icon/_icon.scss similarity index 100% rename from app/public/assets/style/compoments/icon/_icon.scss rename to app/src/assets/scss/compoments/icon/_icon.scss diff --git a/app/public/assets/style/index.scss b/app/src/assets/scss/index.scss similarity index 100% rename from app/public/assets/style/index.scss rename to app/src/assets/scss/index.scss diff --git a/app/public/assets/style/pages/_main.scss b/app/src/assets/scss/pages/_main.scss similarity index 100% rename from app/public/assets/style/pages/_main.scss rename to app/src/assets/scss/pages/_main.scss diff --git a/app/public/assets/style/pages/_new_session.scss b/app/src/assets/scss/pages/_new_session.scss similarity index 100% rename from app/public/assets/style/pages/_new_session.scss rename to app/src/assets/scss/pages/_new_session.scss From 9addea86011a4e5b3a310bd89faff961ec2cfc84 Mon Sep 17 00:00:00 2001 From: vincentberry Date: Sat, 16 Mar 2024 15:12:28 +0100 Subject: [PATCH 09/36] =?UTF-8?q?=F0=9F=94=A7=20build(Worflow):?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Creation de Tsconfig.json et creation de package.json pour compilation en npm --- .gitignore | 9 ++++++++- package.json | 29 +++++++++++++++++++++++++---- tsconfig.json | 13 +++++++++++++ 3 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore index c41e910..a9884f7 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,11 @@ database.sqlite *.css.map # Ignore les fichiers générés par Sass/SCSS -.sass-cache/ \ No newline at end of file +.sass-cache/ +/app/public/assets/style +/app/public/assets/js + + +#npm ignore +/node_modules +package-lock.json \ No newline at end of file diff --git a/package.json b/package.json index 1a00ee4..8430749 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,26 @@ { - "devDependencies": { - "sass": "^1.71.1" - } -} \ No newline at end of file + "devDependencies": { + "sass": "^1.72.0" + }, + "dependencies": { + "typescript": "^5.4.2" + }, + "name": "vmix-remote", + "description": "Take full control of the vMix software remotely without the need to open ports on your network using our web application. Our solution is built on a dedicated Docker server, for which a Docker image is available.\r ([DEMO](http://vmixremotedemo.servehttp.com/))\r ## Key Features", + "version": "1.0.0", + "main": "index.php", + "scripts": { + "compile-scss": "sass app/src/assets/scss/index.scss app/public/assets/style/index.css", + "compile-ts": "tsc" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/vincentberry/vmix-remote.git" + }, + "author": "Vincent Berry", + "license": "ISC", + "bugs": { + "url": "https://github.com/vincentberry/vmix-remote/issues" + }, + "homepage": "https://github.com/vincentberry/vmix-remote#readme" +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..40a3116 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es5", + "outDir": "./app/public/assets/js", + "strict": true, + }, + "include": [ + "./app/src/assets/typescript/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file From 5652a6e1ce32a96ef4480cd5b391828eb073ffa3 Mon Sep 17 00:00:00 2001 From: vincentberry Date: Sat, 16 Mar 2024 15:28:15 +0100 Subject: [PATCH 10/36] copie ok --- app/src/assets/TypeScript/copy.js | 7 ------- app/src/assets/TypeScript/copy.ts | 10 ++++++++++ 2 files changed, 10 insertions(+), 7 deletions(-) delete mode 100644 app/src/assets/TypeScript/copy.js create mode 100644 app/src/assets/TypeScript/copy.ts diff --git a/app/src/assets/TypeScript/copy.js b/app/src/assets/TypeScript/copy.js deleted file mode 100644 index 9b1d0de..0000000 --- a/app/src/assets/TypeScript/copy.js +++ /dev/null @@ -1,7 +0,0 @@ -function copyToClipboard(name = 'file', type = 'text/plain') { - var inputField = document.getElementById("VmixScript").textContent; - const anchor = document.createElement('a') - anchor.href = window.URL.createObjectURL(new Blob([inputField], { type })) - anchor.download = name - anchor.click() -} \ No newline at end of file diff --git a/app/src/assets/TypeScript/copy.ts b/app/src/assets/TypeScript/copy.ts new file mode 100644 index 0000000..025240d --- /dev/null +++ b/app/src/assets/TypeScript/copy.ts @@ -0,0 +1,10 @@ +function copyToClipboard(name: string = 'file', type: string = 'text/plain') { + const inputFieldElement = document.getElementById("VmixScript"); + if (!inputFieldElement) return; + + const inputField: string = inputFieldElement.textContent || ''; + const anchor = document.createElement('a'); + anchor.href = window.URL.createObjectURL(new Blob([inputField], { type })); + anchor.download = name; + anchor.click(); +} From 68bfc60d1836bb4cc4c1020e77bb3922258e0e87 Mon Sep 17 00:00:00 2001 From: vincentberry Date: Sat, 16 Mar 2024 15:29:09 +0100 Subject: [PATCH 11/36] notification ok --- .../TypeScript/{notification.js => notification.ts} | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) rename app/src/assets/TypeScript/{notification.js => notification.ts} (84%) diff --git a/app/src/assets/TypeScript/notification.js b/app/src/assets/TypeScript/notification.ts similarity index 84% rename from app/src/assets/TypeScript/notification.js rename to app/src/assets/TypeScript/notification.ts index c961e67..bdbecc1 100644 --- a/app/src/assets/TypeScript/notification.js +++ b/app/src/assets/TypeScript/notification.ts @@ -1,6 +1,7 @@ - -function createNotification(type, title, description) { +function createNotification(type: string, title: string, description: string) { const notificationContainer = document.getElementById('notification-container'); + if (!notificationContainer) return; + const notification = document.createElement('div'); notification.className = `notification ${type} in`; @@ -24,5 +25,5 @@ function createNotification(type, title, description) { setTimeout(() => { notification.remove(); }, 500); - }, 3000); // 5 seconds timeout -} \ No newline at end of file + }, 3000); // 3 seconds timeout +} From eef8e3ac8cb92e7c4c43cd63efad9c09759b3aab Mon Sep 17 00:00:00 2001 From: vincentberry Date: Sat, 16 Mar 2024 15:41:17 +0100 Subject: [PATCH 12/36] submit_vmix ok --- app/src/assets/TypeScript/submit_vmix.js | 49 ---------------- app/src/assets/TypeScript/submit_vmix.ts | 74 ++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 49 deletions(-) delete mode 100644 app/src/assets/TypeScript/submit_vmix.js create mode 100644 app/src/assets/TypeScript/submit_vmix.ts diff --git a/app/src/assets/TypeScript/submit_vmix.js b/app/src/assets/TypeScript/submit_vmix.js deleted file mode 100644 index e513520..0000000 --- a/app/src/assets/TypeScript/submit_vmix.js +++ /dev/null @@ -1,49 +0,0 @@ -function ConfirmApiVmixSend(message, command, input = 0, value = 0, duration = 0, selectedName = 0, selectedIndex = 0) { - let result = confirm(message); - if (result == true) { - ApiVmixSend(command, input, value, duration, selectedName, selectedIndex) - } -} - -function ApiVmixSend(command, input = 0, value = 0, duration = 0, selectedName = 0, selectedIndex = 0) { - - // Construire la requête à envoyer à vMix - let queryString = `session_vmix=${document.getElementById('vmix_connect').value}&command=${encodeURIComponent(command)}`; - - // Ajouter les paramètres d'entrée, valeur et durée s'ils sont fournis - if (input !== undefined) { - queryString += `&input=${encodeURIComponent(input)}`; - } - - if (value !== undefined) { - queryString += `&value=${encodeURIComponent(value)}`; - } - - if (duration !== undefined) { - queryString += `&duration=${encodeURIComponent(duration)}`; - } - - if (selectedName !== undefined) { - queryString += `&selectedName=${encodeURIComponent(selectedName)}`; - } - - if (selectedIndex !== undefined) { - queryString += `&selectedIndex=${encodeURIComponent(selectedIndex)}`; - } - - var xhr = getHttpRequest() - - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - createNotification('success', 'Validation réussie', JSON.parse(xhr.responseText)['Valid'] + queryString); - } else { - createNotification('error', 'Erreur', JSON.parse(xhr.responseText)['error']); - } - } - } - - xhr.open('GET', "/api/send_command?" + queryString, true) - xhr.setRequestHeader('X-Requested-With', 'xmlhttprequest') - xhr.send() -} diff --git a/app/src/assets/TypeScript/submit_vmix.ts b/app/src/assets/TypeScript/submit_vmix.ts new file mode 100644 index 0000000..727561f --- /dev/null +++ b/app/src/assets/TypeScript/submit_vmix.ts @@ -0,0 +1,74 @@ +function ConfirmApiVmixSend( + message: string, + command: string, + input: number = 0, + value: number = 0, + duration: number = 0, + selectedName: string | number = 0, + selectedIndex: number = 0 +) { + let result: boolean = confirm(message); + if (result == true) { + ApiVmixSend(command, input, value, duration, selectedName, selectedIndex); + } +} + +function ApiVmixSend( + command: string, + input: number = 0, + value: number = 0, + duration: number = 0, + selectedName: string | number = 0, + selectedIndex: number = 0 +) { + // Construire la requête à envoyer à vMix + let vmixConnectElement = document.getElementById('vmix_connect') as HTMLInputElement; + if (vmixConnectElement) { + let vmixConnectValue = vmixConnectElement.value; + let queryString: string = `session_vmix=${vmixConnectValue}&command=${encodeURIComponent(command)}`; + // Utilisez queryString comme vous le souhaitez + + + + + // Ajouter les paramètres d'entrée, valeur et durée s'ils sont fournis + if (input !== undefined) { + queryString += `&input=${encodeURIComponent(input.toString())}`; + } + + if (value !== undefined) { + queryString += `&value=${encodeURIComponent(value.toString())}`; + } + + if (duration !== undefined) { + queryString += `&duration=${encodeURIComponent(duration.toString())}`; + } + + if (selectedName !== undefined) { + queryString += `&selectedName=${encodeURIComponent(selectedName.toString())}`; + } + + if (selectedIndex !== undefined) { + queryString += `&selectedIndex=${encodeURIComponent(selectedIndex.toString())}`; + } + + let xhr: XMLHttpRequest | null = getHttpRequest(); + if (!xhr) return; + + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + createNotification('success', 'Validation réussie', JSON.parse(xhr.responseText)['Valid'] + queryString); + } else { + createNotification('error', 'Erreur', JSON.parse(xhr.responseText)['error']); + } + } + }; + + xhr.open('GET', "/api/send_command?" + queryString, true); + xhr.setRequestHeader('X-Requested-With', 'xmlhttprequest'); + xhr.send(); + } else { + console.log("Null vmixConnectElement") + } +} \ No newline at end of file From 4e2311b2828ec506f5e2d6d19af6e4efe1d81360 Mon Sep 17 00:00:00 2001 From: vincentberry Date: Sun, 17 Mar 2024 17:01:18 +0100 Subject: [PATCH 13/36] =?UTF-8?q?=F0=9F=90=8E=20ci(TS):=20TARGET=20STRICT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Strick desactivé car pas completment implementé? Utilisation de es2016 car log non implementé avant --- tsconfig.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 40a3116..4746344 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,8 @@ { "compilerOptions": { - "target": "es5", + "target": "ES2016", "outDir": "./app/public/assets/js", - "strict": true, + "strict": false, }, "include": [ "./app/src/assets/typescript/**/*.ts" From f9db5542f5ce366f38226682bfe72b0325ef47f0 Mon Sep 17 00:00:00 2001 From: vincentberry Date: Sun, 17 Mar 2024 17:01:45 +0100 Subject: [PATCH 14/36] =?UTF-8?q?=E2=9C=A8=20feat(TS):?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add file ts --- .../TypeScript/{api_vmix.js => api_vmix.ts} | 27 +- app/src/assets/TypeScript/app.js | 226 --------------- app/src/assets/TypeScript/app.ts | 260 ++++++++++++++++++ app/src/assets/TypeScript/copy.ts | 7 +- app/src/assets/TypeScript/lobby.js | 110 -------- app/src/assets/TypeScript/lobby.ts | 111 ++++++++ app/src/assets/TypeScript/notification.ts | 6 +- ...{processAudioBus.js => processAudioBus.ts} | 49 ++-- ...AudioSources.js => processAudioSources.ts} | 22 +- app/src/assets/TypeScript/processEdit.js | 72 ----- app/src/assets/TypeScript/processEdit.ts | 71 +++++ ...ssPageSources.js => processPageSources.ts} | 228 ++++++++------- app/src/assets/TypeScript/processSettings.js | 72 ----- app/src/assets/TypeScript/processSettings.ts | 79 ++++++ ...VideoSources.js => processVideoSources.ts} | 74 ++--- app/src/assets/TypeScript/submit_vmix.ts | 74 ++--- 16 files changed, 753 insertions(+), 735 deletions(-) rename app/src/assets/TypeScript/{api_vmix.js => api_vmix.ts} (75%) delete mode 100644 app/src/assets/TypeScript/app.js create mode 100644 app/src/assets/TypeScript/app.ts delete mode 100644 app/src/assets/TypeScript/lobby.js create mode 100644 app/src/assets/TypeScript/lobby.ts rename app/src/assets/TypeScript/{processAudioBus.js => processAudioBus.ts} (81%) rename app/src/assets/TypeScript/{processAudioSources.js => processAudioSources.ts} (90%) delete mode 100644 app/src/assets/TypeScript/processEdit.js create mode 100644 app/src/assets/TypeScript/processEdit.ts rename app/src/assets/TypeScript/{processPageSources.js => processPageSources.ts} (51%) delete mode 100644 app/src/assets/TypeScript/processSettings.js create mode 100644 app/src/assets/TypeScript/processSettings.ts rename app/src/assets/TypeScript/{processVideoSources.js => processVideoSources.ts} (55%) diff --git a/app/src/assets/TypeScript/api_vmix.js b/app/src/assets/TypeScript/api_vmix.ts similarity index 75% rename from app/src/assets/TypeScript/api_vmix.js rename to app/src/assets/TypeScript/api_vmix.ts index 43c875a..44dd66a 100644 --- a/app/src/assets/TypeScript/api_vmix.js +++ b/app/src/assets/TypeScript/api_vmix.ts @@ -1,15 +1,17 @@ +let commands: any[]; // Type any utilisé temporairement, vous devriez définir un type spécifique pour vos données + // Charger le fichier JSON fetch('api_vmix.json') .then(response => response.json()) - .then(data => { + .then((data: any[]) => { commands = data; // Assigner les données à la variable commands // Générer les options du menu déroulant - const commandSelector = document.getElementById('commandSelector'); + const commandSelector = document.getElementById('commandSelector') as HTMLSelectElement; commands.forEach(command => { const option = document.createElement('option'); option.value = command.name; option.text = command.name; - if (option.hasSelectedName !== 1) { + if (!option.selected) { commandSelector.appendChild(option); } }); @@ -21,9 +23,9 @@ fetch('api_vmix.json') // Mettre à jour les détails de la commande lorsqu'une nouvelle commande est sélectionnée function updateCommandDetails() { - const commandSelector = document.getElementById('commandSelector'); + const commandSelector = document.getElementById('commandSelector') as HTMLSelectElement; const selectedCommandName = commandSelector.value; - const commandDetailsContainer = document.getElementById('commandDetails'); + const commandDetailsContainer = document.getElementById('commandDetails') as HTMLElement; commandDetailsContainer.innerHTML = ""; // Trouver la commande sélectionnée dans le JSON const selectedCommand = commands.find(command => command.name === selectedCommandName); @@ -77,10 +79,11 @@ function updateCommandDetails() { // Fonction pour envoyer la commande function sendCommand() { - const commandSelector = document.getElementById('commandSelector').value; - const inputSelector = document.getElementById('inputSelector').value; - const valueInput = document.getElementById('valueInput').value; - const durationInput = document.getElementById('durationInput').value; - const valueSelectedName = document.getElementById('valueSelectedName').value; - ApiVmixSend(commandSelector,inputSelector,valueInput,durationInput, valueSelectedName) -} + const commandSelector = (document.getElementById('commandSelector') as HTMLSelectElement).value; + const inputSelector = (document.getElementById('inputSelector') as HTMLInputElement).value; + const valueInput = (document.getElementById('valueInput') as HTMLInputElement).value; + const durationInput = (document.getElementById('durationInput') as HTMLInputElement).value; + const valueSelectedName = (document.getElementById('valueSelectedName') as HTMLInputElement).value; + // Appeler la fonction d'envoi de l'API vMix avec les paramètres appropriés + ApiVmixSend(commandSelector, inputSelector, valueInput, durationInput, valueSelectedName); +} \ No newline at end of file diff --git a/app/src/assets/TypeScript/app.js b/app/src/assets/TypeScript/app.js deleted file mode 100644 index e9e888d..0000000 --- a/app/src/assets/TypeScript/app.js +++ /dev/null @@ -1,226 +0,0 @@ -var getHttpRequest = function () { - var httpRequest = false; - - if (window.XMLHttpRequest) { // Mozilla, Safari,... - httpRequest = new XMLHttpRequest(); - if (httpRequest.overrideMimeType) { - httpRequest.overrideMimeType('text/xml'); - } - } - else if (window.ActiveXObject) { // IE - try { - httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); - } - catch (e) { - try { - httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); - } - catch (e) { } - } - } - - if (!httpRequest) { - alert('Abandon :( Impossible de créer une instance XMLHTTP'); - return false; - } - - return httpRequest -} -var init = 1; -function chargerFichierXML() { - - var xhr = getHttpRequest() - - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - data = xhr.responseText; - if (document.getElementById('vmix_connect').value === "N") { - new_session(data); - reset_session(); - let vmix_connect_param = get_vmix_connect_param(); - if (vmix_connect_param && init === 1) { - document.getElementById('vmix_connect').value = vmix_connect_param; - init = 0; - } else { - update_url("N"); - } - } else { - const parser = new DOMParser(); - const xmlDoc = parser.parseFromString(data, 'text/xml'); - let vmixElement = xmlDoc.querySelector('vmix') - if (xmlDoc.querySelector('session_delay').textContent === "1000") { - document.getElementById('fast').className = "on"; - } else { - document.getElementById('fast').className = "off"; - } - processSettings(vmixElement); - processVideoSources(vmixElement); - processAudioBuses(vmixElement); - processAudioSources(vmixElement); - processPageSources(vmixElement); - XmlFile = vmixElement; - update_url(document.getElementById('vmix_connect').value); - } - } else if( xhr.status === 301) { - window.location.href = JSON.parse(xhr.responseText)['redirect']; - } else { - if (JSON.parse(xhr.responseText)['error']) { - createNotification('error', 'Erreur', JSON.parse(xhr.responseText)['error']); - } else if (JSON.parse(xhr.responseText)['reset']) { - createNotification('warning', 'Attention', JSON.parse(xhr.responseText)['reset']); - document.getElementById('vmix_connect').value = "N" - update_url("N"); - } - - } - } - - } - - xhr.open('GET', "/api/connect?session_vmix=" + document.getElementById('vmix_connect').value, true) - xhr.setRequestHeader('X-Requested-With', 'xmlhttprequest') - xhr.send() -} - -function new_session_send() { - - var xhr = getHttpRequest() - - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - new_session(xhr.responseText); - } - } - } - - xhr.open('GET', "/api/connect?session_vmix=N", true) - xhr.setRequestHeader('X-Requested-With', 'xmlhttprequest') - xhr.send() -} - -function reset_session() { - activatedBuses = []; - inputArray = []; - previewNumber = ""; - activeNumber = ""; - activeOverlay1 = ""; - activeOverlay2 = ""; - activeOverlay3 = ""; - activeOverlay4 = ""; - document.getElementById('projetName').textContent = ""; - updateCheckboxClass('streaming', false); - updateCheckboxClass('recording', false); - updateCheckboxClass('external', false); - updateCheckboxClass('fullscreen', false); - - const videoSourcesContainer = document.getElementById('videoSourcesContainer'); - // Supprimer les éléments existants dans le conteneur de sortie - while (videoSourcesContainer.firstChild) { - videoSourcesContainer.removeChild(videoSourcesContainer.firstChild); - } - const audioBusesContainer = document.getElementById('audioBusesContainer'); - // Supprimer les éléments existants dans le conteneur de sortie - while (audioBusesContainer.firstChild) { - audioBusesContainer.removeChild(audioBusesContainer.firstChild); - } - const audioSourcesContainer = document.getElementById('audioSourcesContainer'); - // Supprimer les éléments existants dans le conteneur de sortie - while (audioSourcesContainer.firstChild) { - audioSourcesContainer.removeChild(audioSourcesContainer.firstChild); - } -} - -function new_session(data) { - - // Récupérer l'élément par son ID + const selectElement = document.getElementById('vmix_connect') as HTMLSelectElement; + const files = JSON.parse(data); + + // Stocker les identifiants des options actuelles + const currentOptions = Array.from(selectElement.options).map(option => option.value); + + for (let i = 0; i < files.length; i++) { + const fileId = files[i]['id']; + + // Vérifier si l'option existe déjà + if (!optionExists(fileId)) { + console.log("new connection: " + fileId); + const option = document.createElement('option'); + option.value = fileId; + option.textContent = files[i]['name'] + "_" + fileId; + selectElement.appendChild(option); + } + } + + // Supprimer les options qui ne sont plus présentes + for (let i = 0; i < currentOptions.length; i++) { + if (!files.some(file => file.id === currentOptions[i]) && currentOptions[i] != "N") { + // L'option n'est plus présente, la supprimer + const optionToRemove = selectElement.querySelector(`[value="${currentOptions[i]}"]`) as HTMLOptionElement; + if (optionToRemove) { + const index = Array.from(selectElement.options).indexOf(optionToRemove); + if (index !== -1) { + selectElement.remove(index); + } + } + } + } + + // Fonction pour vérifier si une option existe déjà + function optionExists(value: string) { + for (let i = 0; i < selectElement.options.length; i++) { + if (selectElement.options[i].value === value) { + return true; + } + } + return false; + } + +} + +function update_url(paramValue: string) { + let currentUrl = window.location.href; + let paramName = 'vmix_connect'; + let regex = new RegExp(`([?&])${paramName}=.*?(&|$)`, 'i'); + let paramExists = currentUrl.match(regex); + + // Vérifiez si le paramètre existe et a une valeur différente + if (paramExists) { + let existingValue = currentUrl.match(regex)![0].split('=')[1]; + if (existingValue !== paramValue) { + // Mettez à jour la valeur du paramètre existant + let newUrl = currentUrl.replace(regex, `$1${paramName}=${paramValue}$2`); + window.history.replaceState({}, '', newUrl); + } + } else { + // Ajoutez le paramètre à l'URL s'il n'existe pas + let separator = currentUrl.includes('?') ? '&' : '?'; + let newUrl = currentUrl + separator + `${paramName}=${paramValue}`; + window.history.pushState({}, '', newUrl); + } +} + +function get_vmix_connect_param() { + let currentUrl = window.location.href; + let paramName = 'vmix_connect'; + let regex = new RegExp(`[?&]${paramName}=([^&]*)`, 'i'); + let match = currentUrl.match(regex); + + if (match) { + // La valeur du paramètre vmix_connect existe dans l'URL + return decodeURIComponent(match[1]); + } else { + // Le paramètre vmix_connect n'existe pas dans l'URL + return null; + } +} + +function Session_delay() { + if (document.getElementById('fast')!.className == "on") { + ConfirmApiVmixSend("Are you sure you want to switch to slow mode ? Please note that processing may take some time. Wait until the icon turns red to confirm that VMix has responded to your request before proceeding with the shipment.", "session_delay", "", "30000"); + } else { + ConfirmApiVmixSend("Are you sure you want to switch to fast mode ? Please note that processing may take some time. Wait until the icon turns red to confirm that VMix has responded to your request before proceeding with the shipment.", "session_delay", "", "1000"); + } + +} + + +// Charger le fichier XML et générer les éléments HTML au chargement de la page +window.onload = chargerFichierXML; +setInterval(chargerFichierXML, 1000); diff --git a/app/src/assets/TypeScript/copy.ts b/app/src/assets/TypeScript/copy.ts index 025240d..0e36213 100644 --- a/app/src/assets/TypeScript/copy.ts +++ b/app/src/assets/TypeScript/copy.ts @@ -1,10 +1,7 @@ function copyToClipboard(name: string = 'file', type: string = 'text/plain') { - const inputFieldElement = document.getElementById("VmixScript"); - if (!inputFieldElement) return; - - const inputField: string = inputFieldElement.textContent || ''; + const inputField = document.getElementById("VmixScript").textContent; const anchor = document.createElement('a'); anchor.href = window.URL.createObjectURL(new Blob([inputField], { type })); anchor.download = name; anchor.click(); -} +} \ No newline at end of file diff --git a/app/src/assets/TypeScript/lobby.js b/app/src/assets/TypeScript/lobby.js deleted file mode 100644 index e8f5c8b..0000000 --- a/app/src/assets/TypeScript/lobby.js +++ /dev/null @@ -1,110 +0,0 @@ -var getHttpRequest = function () { - var httpRequest = false; - - if (window.XMLHttpRequest) { // Mozilla, Safari,... - httpRequest = new XMLHttpRequest(); - if (httpRequest.overrideMimeType) { - httpRequest.overrideMimeType('text/xml'); - } - } - else if (window.ActiveXObject) { // IE - try { - httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); - } - catch (e) { - try { - httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); - } - catch (e) { } - } - } - - if (!httpRequest) { - alert('Abandon :( Impossible de créer une instance XMLHTTP'); - return false; - } - - return httpRequest -} -var init = 1; -function chargerFichierXML() { - - var xhr = getHttpRequest() - - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - data = xhr.responseText; - if (document.getElementById('vmix_connect').value === "N") { - new_session(data); - } else { - window.location.href = '/?vmix_connect=' + document.getElementById('vmix_connect').value; - } - } else { - if (JSON.parse(xhr.responseText)['error']) { - createNotification('error', 'Erreur', JSON.parse(xhr.responseText)['error']); - } else if (JSON.parse(xhr.responseText)['reset']) { - createNotification('warning', 'Attention', JSON.parse(xhr.responseText)['reset']); - document.getElementById('vmix_connect').value = "N" - } - - } - } - - } - - xhr.open('GET', "api/connect?session_vmix=" + document.getElementById('vmix_connect').value, true) - xhr.setRequestHeader('X-Requested-With', 'xmlhttprequest') - xhr.send() -} - -function new_session(data) { - - // Récupérer l'élément - // Ajouter les options au + // Ajouter les options au - - - `; - OpenEdit(nouveauDiv); -} - -function processPageSources_gt_countdown_settings(name, index) { - // Créez un nouvel élément div à partir de la chaîne de caractères - nouveauDiv = `

Counrdown Settings

-
- - - -
-
- - - -
- `; - OpenEdit(nouveauDiv); -} - -function validateCountdown(command ,name, index) { - var inputElement = document.getElementById('countdown_'+ command); - var pattern = /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/; - - // Check if the input value matches the pattern - if (pattern.test(inputElement.value)) { - // Perform the desired action (e.g., trigger ApiVmixSend) - ApiVmixSend(command, inputSelect, inputElement.value, '', name, index); - } else { - // Alert the user or handle the invalid input in some way - alert("Invalid input. Please enter a valid time format (HH:mm:ss)."); - } -} - -function processPageSources_remove() { - // Créez un nouvel élément div à partir de la chaîne de caractères - nouveauDiv = `

REMOVE INPUT

- - `; - OpenEdit(nouveauDiv); -} diff --git a/app/src/assets/TypeScript/processEdit.ts b/app/src/assets/TypeScript/processEdit.ts new file mode 100644 index 0000000..9cdc812 --- /dev/null +++ b/app/src/assets/TypeScript/processEdit.ts @@ -0,0 +1,71 @@ +function closeEdit() { + // Obtenir le div parent et le masquer + document.getElementById("EditContainer").classList.add("disabled"); +} + +function OpenEdit(HTML) { + const ancienConteneur = document.getElementById("EditContainerContainer"); + if (ancienConteneur) { + ancienConteneur.remove(); + } + + // Créer un nouvel élément div + const nouveauDiv = document.createElement('div'); + nouveauDiv.className = "Container"; + nouveauDiv.id = "EditContainerContainer"; + nouveauDiv.innerHTML = `
${HTML}
`; + + document.getElementById("EditContainer").appendChild(nouveauDiv); + document.getElementById("EditContainer").classList.remove("disabled"); +} + +function processPageSources_list_addItem() { + // Créer un nouvel élément div à partir de la chaîne de caractères + const nouveauDiv = `

Ajouter un nom de fichier à la liste

+
+ + +
+ + `; + OpenEdit(nouveauDiv); +} + +function processPageSources_gt_countdown_settings(name: string, index: string) { + // Créer un nouvel élément div à partir de la chaîne de caractères + const nouveauDiv = `

Paramètres de compte à rebours

+
+ + + +
+
+ + + +
+ `; + OpenEdit(nouveauDiv); +} + +function validateCountdown(command: string, name: string, index: string) { + const inputElement = document.getElementById('countdown_'+ command) as HTMLElement; + const pattern = /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/; + + // Vérifier si la valeur d'entrée correspond au modèle + if (pattern.test((inputElement as HTMLInputElement).value)) { + // Effectuer l'action souhaitée (par exemple, déclencher ApiVmixSend) + ApiVmixSend(command, inputSelect, (inputElement as HTMLInputElement).value, '', name, index); + } else { + // Avertir l'utilisateur ou gérer l'entrée invalide d'une autre manière + alert("Entrée invalide. Veuillez saisir un format d'heure valide (HH:mm:ss)."); + } +} + +function processPageSources_remove() { + // Créer un nouvel élément div à partir de la chaîne de caractères + const nouveauDiv = `

Supprimer l'entrée

+ + `; + OpenEdit(nouveauDiv); +} \ No newline at end of file diff --git a/app/src/assets/TypeScript/processPageSources.js b/app/src/assets/TypeScript/processPageSources.ts similarity index 51% rename from app/src/assets/TypeScript/processPageSources.js rename to app/src/assets/TypeScript/processPageSources.ts index 425f95d..bc49195 100644 --- a/app/src/assets/TypeScript/processPageSources.js +++ b/app/src/assets/TypeScript/processPageSources.ts @@ -1,11 +1,12 @@ -var inputContainer_InputName_No_Focus = true; -var inputContainer_LayersSelect_No_Focus = true; -var PageSources_LayersSelect = "0"; -var PageSources_GtSelect = 0; -var clickCount_closePageInput = false; +let inputContainer_InputName_No_Focus: boolean = true; +let inputContainer_LayersSelect_No_Focus: boolean = true; +let PageSources_LayersSelect: string = "0"; +let PageSources_GtSelect: number = 0; +let clickCount_closePageInput: boolean = false; // Fonction pour convertir le XML en HTML et l'ajouter à la page -function processPageSources(xmlDoc) { +function processPageSources(xmlDoc: Document) { + const inputSelect = ""; // Vous devez définir cette variable if (inputSelect) { const input = xmlDoc.querySelector(`input[key="${inputSelect}"]`); @@ -18,7 +19,7 @@ function processPageSources(xmlDoc) { const state = input.getAttribute('state'); const position = input.getAttribute('position'); const duration = input.getAttribute('duration'); - const loop = input.getAttribute('loop') + const loop = input.getAttribute('loop'); const muted = input.getAttribute('muted'); const volume = input.getAttribute('volume'); const balance = input.getAttribute('balance'); @@ -30,34 +31,33 @@ function processPageSources(xmlDoc) { const gainDb = input.getAttribute('gainDb'); const selectedIndex = input.getAttribute('selectedIndex'); - // Obtenir l'élément GT et son contenu if (input.querySelector('text') || input.querySelector('image')) { - var allItems = []; + let allItems: { index: string, name: string, type: string, value: string }[] = []; if (input.querySelector('text')) { - var TextItems = Array.from(input.querySelectorAll('text')).map(item => ({ - index: item.getAttribute('index'), - name: item.getAttribute('name'), + const TextItems = Array.from(input.querySelectorAll('text')).map(item => ({ + index: item.getAttribute('index')!, + name: item.getAttribute('name')!, type: "Text", - value: item.textContent.trim() + value: item.textContent!.trim() })); allItems = allItems.concat(TextItems); } if (input.querySelector('image')) { - var ImageItems = Array.from(input.querySelectorAll('image')).map(item => ({ - index: item.getAttribute('index'), - name: item.getAttribute('name'), + const ImageItems = Array.from(input.querySelectorAll('image')).map(item => ({ + index: item.getAttribute('index')!, + name: item.getAttribute('name')!, type: "Image", - value: item.textContent.trim().replace(/^file:\/\/\//, '') + value: item.textContent!.trim().replace(/^file:\/\/\//, '') })); allItems = allItems.concat(ImageItems); } if (input.querySelector('color')) { - var ColorItems = Array.from(input.querySelectorAll('color')).map(item => ({ - index: item.getAttribute('index'), - name: item.getAttribute('name'), + const ColorItems = Array.from(input.querySelectorAll('color')).map(item => ({ + index: item.getAttribute('index')!, + name: item.getAttribute('name')!, type: "Color", - value: item.textContent.trim() + value: item.textContent!.trim() })); allItems = allItems.concat(ColorItems); } @@ -65,85 +65,84 @@ function processPageSources(xmlDoc) { updateValue(inputContainer_content_gt_nav, processPageSources_updateGT_nav(allItems), ""); const inputContainer_content_gt_value = document.getElementById('inputContainer_content_gt_value'); updateValue(inputContainer_content_gt_value, processPageSources_updateGT_text(allItems), ""); - document.getElementById('inputContainer_nav_gt').style = "" + document.getElementById('inputContainer_nav_gt')!.style.display = ""; } else { - document.getElementById('inputContainer_nav_gt').style.display = "none" + document.getElementById('inputContainer_nav_gt')!.style.display = "none"; } // Obtenir l'élément et son contenu if (input.querySelector('list')) { - const listElement = input.querySelector('list'); + const listElement = input.querySelector('list')!; const listItems = Array.from(listElement.querySelectorAll('item')).map(item => ({ selected: item.getAttribute('selected') === 'true', - value: item.textContent.trim(), - enabled: (item.getAttribute('enabled') !== null && item.getAttribute('enabled') !== '') ? item.getAttribute('enabled') : 'checked' + value: item.textContent!.trim(), + enabled: (item.getAttribute('enabled') !== null && item.getAttribute('enabled') !== '') ? item.getAttribute('enabled')! : 'checked' })); const inputContainer_content_list_ul = document.getElementById('inputContainer_content_list_ul'); - updateValue(inputContainer_content_list_ul, processPageSources_updateList(listItems), ""); - document.getElementById('inputContainer_nav_list').style = "" + updateValue(inputContainer_content_list_ul!, processPageSources_updateList(listItems), ""); + document.getElementById('inputContainer_nav_list')!.style.display = ""; } else { - document.getElementById('inputContainer_nav_list').style.display = "none" + document.getElementById('inputContainer_nav_list')!.style.display = "none"; } - processPageSources_updateLayers(input) + processPageSources_updateLayers(input); processPageSources_updateInput_layers(xmlDoc); // Supposons également que vous avez déjà obtenu la référence aux éléments HTML du formulaire - const inputContainer_InputId = document.getElementById('inputContainer_InputId'); - const inputContainer_InputType = document.querySelector('h1[for="inputContainer_InputType"]'); - const inputContainer_InputName = document.getElementById('inputContainer_InputName'); - const inputContainer_InputLoop = document.getElementById('inputContainer_InputLoop'); + const inputContainer_InputId = document.getElementById('inputContainer_InputId') as HTMLInputElement; + const inputContainer_InputType = document.querySelector('h1[for="inputContainer_InputType"]') as HTMLInputElement; + const inputContainer_InputName = document.getElementById('inputContainer_InputName') as HTMLInputElement; + const inputContainer_InputLoop = document.getElementById('inputContainer_InputLoop') as HTMLInputElement; // Fonction pour mettre à jour une valeur si elle est différente et non vide - function updateValue(element, attribute, defaultValue) { + function updateValue(element: HTMLElement, attribute: string, defaultValue: string) { const attributeValue = attribute.trim(); - if (element && (element.value || element.innerHTML || (element.checked !== undefined && element.checked.toString()))) { - const currentValue = element.value || element.innerHTML || element.checked.toString(); - + if (element && (element.textContent || (element as HTMLInputElement).value || (element as HTMLInputElement).checked)) { + const currentValue = (element.textContent || (element as HTMLInputElement).value || (element as HTMLInputElement).checked.toString()).trim(); if (attributeValue !== "" && attributeValue !== currentValue) { - element.value = element.innerHTML = attributeValue; - if (element.type === 'checkbox') { - element.checked = (defaultValue.toLowerCase() === 'true'); + element.textContent = (element as HTMLInputElement).value = attributeValue; + if ((element as HTMLInputElement).type === 'checkbox') { + (element as HTMLInputElement).checked = (defaultValue.toLowerCase() === 'true'); } } else if (attributeValue === "" && defaultValue !== undefined) { // Mettre la valeur par défaut si l'attribut est vide - element.value = element.innerHTML = defaultValue; - if (element.type === 'checkbox') { - element.checked = (defaultValue.toLowerCase() === 'true'); + element.textContent = (element as HTMLInputElement).value = defaultValue; + if ((element as HTMLInputElement).type === 'checkbox') { + (element as HTMLInputElement).checked = (defaultValue.toLowerCase() === 'true'); } } } } // Utilisation de la fonction pour mettre à jour les éléments - updateValue(inputContainer_InputId, key); - updateValue(inputContainer_InputType, type); + updateValue(inputContainer_InputId, key, ""); + updateValue(inputContainer_InputType!, type!, ""); if (inputContainer_InputName_No_Focus) { - updateValue(inputContainer_InputName, shortTitle, ""); + updateValue(inputContainer_InputName, shortTitle!, ""); } - updateValue(inputContainer_InputLoop, loop, "Off"); + updateValue(inputContainer_InputLoop, loop!, "Off"); - inputContainer_header = `Input ${number}: ${document.getElementById("inputContainer_InputName").value}`; - if (document.getElementById("inputContainer_header").innerHTML !== inputContainer_header) { - document.getElementById("inputContainer_header").innerHTML = inputContainer_header; + const inputContainer_header = `Input ${number}: ${inputContainer_InputName.value}`; + if (document.getElementById("inputContainer_header")!.innerHTML !== inputContainer_header) { + document.getElementById("inputContainer_header")!.innerHTML = inputContainer_header; } } -}; +} -function closePageInput(key) { +function closePageInput(key: string) { // Get the parent div and hide it - insputSelect = ""; + inputSelect = ""; PageSources_GtSelect = 0; clickCount_closePageInput = false; - document.getElementById("inputsContainer").classList.add("disabled"); + document.getElementById("inputsContainer")!.classList.add("disabled"); } document.addEventListener('DOMContentLoaded', function () { - var popup = document.getElementById('inputsContainer_Container'); - function closePageInput_handleDocumentClick(event) { + const popup = document.getElementById('inputsContainer_Container'); + function closePageInput_handleDocumentClick(event: MouseEvent) { // Vérifier si l'élément cliqué est en dehors de la popup - if (!popup.contains(event.target) && !document.getElementById('inputsContainer').classList.contains('disabled')) { + if (!popup!.contains(event.target as Node) && !document.getElementById('inputsContainer')!.classList.contains('disabled')) { if (clickCount_closePageInput === true){ closePageInput(""); } @@ -154,18 +153,17 @@ document.addEventListener('DOMContentLoaded', function () { document.addEventListener('click', closePageInput_handleDocumentClick); }); -function OpenPageInput(key) { +function OpenPageInput(key: string) { // Get the parent div and hide it inputSelect = key; clickCount_closePageInput = false; - processPageSources(XmlFile); - processPageSources_updateInput_layers(XmlFile); + processPageSources(XmlFile); // Vous devez définir XmlFile + processPageSources_updateInput_layers(XmlFile); // Vous devez définir XmlFile changeMenu('general'); document.getElementById("inputsContainer").classList.remove("disabled"); - } -function processPageSources_updateList(listItems) { +function processPageSources_updateList(listItems: { selected: boolean, value: string, enabled: string }[]) { // Utiliser la méthode map pour créer un tableau de chaînes HTML const htmlListItems = listItems.map((item, index) => `
  • @@ -181,10 +179,10 @@ function processPageSources_updateList(listItems) { return htmlString; } -function processPageSources_updateGT_nav(textItems) { +function processPageSources_updateGT_nav(textItems: { index: string, name: string, type: string, value: string }[]) { // Utiliser la méthode map pour créer un tableau de chaînes HTML const htmlTextItems = textItems.map((item, index) => ` -
  • +
  • ${item.name}

  • `); @@ -194,10 +192,10 @@ function processPageSources_updateGT_nav(textItems) { return htmlString; } -function processPageSources_updateGT_text(textItems){ +function processPageSources_updateGT_text(textItems: { index: string, name: string, type: string, value: string }[]){ // Utiliser la méthode map pour créer un tableau de chaînes HTML const htmlTextItems = textItems.map((item, index) => ` -
    +
    ${ @@ -228,9 +226,9 @@ function processPageSources_updateGT_text(textItems){ return htmlString; } -function processPageSources_updateGT_nav_select(element, index) { - PageSources_GtSelect = index; - document.getElementById("gt_nav_"+ index).classList.remove('active') +function processPageSources_updateGT_nav_select(element: HTMLElement, index: string) { + PageSources_GtSelect = parseInt(index); + document.getElementById("gt_nav_"+ index)!.classList.remove('active'); // Retirer la classe "active" de tous les éléments
  • const allNavItems = document.querySelectorAll('.gt_nav'); @@ -242,55 +240,55 @@ function processPageSources_updateGT_nav_select(element, index) { const allTextItems = document.querySelectorAll('.gt_text'); allTextItems.forEach(navItem => navItem.classList.remove('active')); - document.getElementById('gt_text_'+index).classList.add('active'); + document.getElementById('gt_text_'+index)!.classList.add('active'); } -function processPageSources_updateLayers(inputSource) { +function processPageSources_updateLayers(inputSource: Element) { for (let i = 0; i <= 9; i++) { if (inputSource) { const overlays = inputSource.querySelectorAll('overlay'); overlays.forEach(overlay => { const overlayIndex = overlay.getAttribute('index'); const overlayKey = overlay.getAttribute('key'); - document.getElementById('inputContainer_List_Layers_' + overlayIndex).value = overlayKey; - document.getElementById('inputContainer_List_Layers_' + i).value = ""; - document.getElementById('inputContainer_Content_Layers_Select').textContent = "Layer " + (parseInt(PageSources_LayersSelect) + 1).toString(); + (document.getElementById('inputContainer_List_Layers_' + overlayIndex) as HTMLInputElement).value = overlayKey!; + (document.getElementById('inputContainer_List_Layers_' + i) as HTMLInputElement).value = ""; + (document.getElementById('inputContainer_Content_Layers_Select') as HTMLInputElement).textContent = "Layer " + (parseInt(PageSources_LayersSelect) + 1).toString(); if (PageSources_LayersSelect === overlayIndex && inputContainer_LayersSelect_No_Focus) { const positionElement = overlay.getElementsByTagName('position')[0]; if (positionElement) { - document.getElementById('inputContainer_Content_Layers_Select_move_X').value = positionElement.getAttribute('X'); - document.getElementById('inputContainer_Content_Layers_Select_move_Y').value = positionElement.getAttribute('Y'); - document.getElementById('inputContainer_Content_Layers_Select_move_Width').value = positionElement.getAttribute('width'); - document.getElementById('inputContainer_Content_Layers_Select_move_Height').value = positionElement.getAttribute('height'); + (document.getElementById('inputContainer_Content_Layers_Select_move_X') as HTMLInputElement).value = positionElement.getAttribute('X')!; + (document.getElementById('inputContainer_Content_Layers_Select_move_Y') as HTMLInputElement).value = positionElement.getAttribute('Y')!; + (document.getElementById('inputContainer_Content_Layers_Select_move_Width') as HTMLInputElement).value = positionElement.getAttribute('width')!; + (document.getElementById('inputContainer_Content_Layers_Select_move_Height') as HTMLInputElement).value = positionElement.getAttribute('height')!; } else { - document.getElementById('inputContainer_Content_Layers_Select_move_X').value = ""; - document.getElementById('inputContainer_Content_Layers_Select_move_Y').value = ""; - document.getElementById('inputContainer_Content_Layers_Select_move_Width').value = ""; - document.getElementById('inputContainer_Content_Layers_Select_move_Height').value = ""; + (document.getElementById('inputContainer_Content_Layers_Select_move_X') as HTMLInputElement).value = ""; + (document.getElementById('inputContainer_Content_Layers_Select_move_Y') as HTMLInputElement).value = ""; + (document.getElementById('inputContainer_Content_Layers_Select_move_Width') as HTMLInputElement).value = ""; + (document.getElementById('inputContainer_Content_Layers_Select_move_Height') as HTMLInputElement).value = ""; } const cropElement = overlay.getElementsByTagName('position')[0]; if (cropElement) { - document.getElementById('inputContainer_Content_Layers_Select_crop_X1').value = cropElement.getAttribute('X1'); - document.getElementById('inputContainer_Content_Layers_Select_crop_Y1').value = cropElement.getAttribute('Y1'); - document.getElementById('inputContainer_Content_Layers_Select_crop_X2').value = cropElement.getAttribute('X2'); - document.getElementById('inputContainer_Content_Layers_Select_crop_Y2').value = cropElement.getAttribute('Y2'); + (document.getElementById('inputContainer_Content_Layers_Select_crop_X1') as HTMLInputElement).value = cropElement.getAttribute('X1')!; + (document.getElementById('inputContainer_Content_Layers_Select_crop_Y1') as HTMLInputElement).value = cropElement.getAttribute('Y1')!; + (document.getElementById('inputContainer_Content_Layers_Select_crop_X2') as HTMLInputElement).value = cropElement.getAttribute('X2')!; + (document.getElementById('inputContainer_Content_Layers_Select_crop_Y2') as HTMLInputElement).value = cropElement.getAttribute('Y2')!; } else { - document.getElementById('inputContainer_Content_Layers_Select_crop_X1').value = ""; - document.getElementById('inputContainer_Content_Layers_Select_crop_Y1').value = ""; - document.getElementById('inputContainer_Content_Layers_Select_crop_X2').value = ""; - document.getElementById('inputContainer_Content_Layers_Select_crop_Y2').value = ""; + (document.getElementById('inputContainer_Content_Layers_Select_crop_X1') as HTMLInputElement).value = ""; + (document.getElementById('inputContainer_Content_Layers_Select_crop_Y1') as HTMLInputElement).value = ""; + (document.getElementById('inputContainer_Content_Layers_Select_crop_X2') as HTMLInputElement).value = ""; + (document.getElementById('inputContainer_Content_Layers_Select_crop_Y2') as HTMLInputElement).value = ""; } } }); } else { - document.getElementById('inputContainer_content_list_' + i).value = "" + (document.getElementById('inputContainer_content_list_' + i) as HTMLInputElement).value = "" } }; } -function changeMenu(menuName) { +function changeMenu(menuName: string) { // Liste des menus et de leurs correspondances avec les IDs des éléments HTML - const menuMapping = { + const menuMapping: { [key: string]: string } = { 'general': 'general', 'list': 'list', 'color_correction': 'color_correction', @@ -300,45 +298,45 @@ function changeMenu(menuName) { // Réinitialiser toutes les classes à une chaîne vide for (const id in menuMapping) { - document.getElementById('inputContainer_nav_' + menuMapping[id]).className = ''; - document.getElementById('inputContainer_content_' + menuMapping[id]).style.display = "none"; + (document.getElementById('inputContainer_nav_' + menuMapping[id]) as HTMLElement).className = ''; + (document.getElementById('inputContainer_content_' + menuMapping[id]) as HTMLElement).style.display = "none"; } // Définir la classe "active" sur l'élément correspondant au menu sélectionné - document.getElementById('inputContainer_nav_' + menuMapping[menuName]).className = 'active'; - document.getElementById('inputContainer_content_' + menuMapping[menuName]).style.display = ""; + (document.getElementById('inputContainer_nav_' + menuMapping[menuName]) as HTMLElement).className = 'active'; + (document.getElementById('inputContainer_content_' + menuMapping[menuName]) as HTMLElement).style.display = ""; } -function processPageSources_updateInput_layers(xmlDoc) { +function processPageSources_updateInput_layers(xmlDoc: Document) { const inputSources = xmlDoc.querySelectorAll('input'); for (let i = 0; i <= 9; i++) { - var selectElement = document.getElementById('inputContainer_List_Layers_' + i); + const selectElement = document.getElementById('inputContainer_List_Layers_' + i) as HTMLSelectElement; if (selectElement) { inputSources.forEach(inputSource => { - var key = inputSource.getAttribute('key'); - var title = inputSource.getAttribute('number') + " :" + inputSource.getAttribute('title'); + const key = inputSource.getAttribute('key')!; + const title = inputSource.getAttribute('number')! + " :" + inputSource.getAttribute('title')!; // Check if the option already exists - var existingOption = selectElement.querySelector('option[value="' + key + '"]'); + const existingOption = selectElement.querySelector('option[value="' + key + '"]'); if (existingOption) { // If the option exists, update its text - if (existingOption.text !== title) { - existingOption.text = title; + if (existingOption.textContent !== title) { + existingOption.textContent = title; } } else { // If the option does not exist, add a new option - var option = document.createElement('option'); + const option = document.createElement('option'); option.value = key; option.text = title; selectElement.add(option); } }); - var existingKeys = Array.from(inputSources).map(inputSource => inputSource.getAttribute('key')); + const existingKeys = Array.from(inputSources).map(inputSource => inputSource.getAttribute('key')!); Array.from(selectElement.options).forEach(option => { if (option.value !== '' && !existingKeys.includes(option.value)) { selectElement.remove(option.index); @@ -349,22 +347,22 @@ function processPageSources_updateInput_layers(xmlDoc) { } //custom envoi vmix - // inputContainer_InputName (Entrée) -document.getElementById('inputContainer_InputName').addEventListener('focus', function () { +document.getElementById('inputContainer_InputName')?.addEventListener('focus', () => { inputContainer_InputName_No_Focus = false; }); -// inputContainer_InputName (sortie) -document.getElementById('inputContainer_InputName').addEventListener('blur', function () { - var inputValue = document.getElementById('inputContainer_InputName').value; +// inputContainer_InputName (Sortie) +document.getElementById('inputContainer_InputName')?.addEventListener('blur', () => { + const inputValue = (document.getElementById('inputContainer_InputName') as HTMLInputElement)?.value; ApiVmixSend('SetInputName', inputSelect, inputValue); inputContainer_InputName_No_Focus = true; }); // inputContainer_InputLoop -document.getElementById('inputContainer_InputLoop').addEventListener('click', function () { - if (document.getElementById('inputContainer_InputLoop').checked) { +document.getElementById('inputContainer_InputLoop')?.addEventListener('click', () => { + const inputLoopCheckbox = document.getElementById('inputContainer_InputLoop') as HTMLInputElement; + if (inputLoopCheckbox.checked) { ApiVmixSend('LoopOn', inputSelect); } else { ApiVmixSend('LoopOff', inputSelect); @@ -372,6 +370,6 @@ document.getElementById('inputContainer_InputLoop').addEventListener('click', fu }); // inputContainer_listShuffle -document.getElementById('inputContainer_listShuffle').addEventListener('click', function () { +document.getElementById('inputContainer_listShuffle')?.addEventListener('click', () => { ApiVmixSend('ListShuffle', inputSelect); }); \ No newline at end of file diff --git a/app/src/assets/TypeScript/processSettings.js b/app/src/assets/TypeScript/processSettings.js deleted file mode 100644 index 3d07ec1..0000000 --- a/app/src/assets/TypeScript/processSettings.js +++ /dev/null @@ -1,72 +0,0 @@ -function processSettings(xmlDoc) { - - previewNumber = parseInt(xmlDoc.querySelector('preview').textContent); - activeNumber = parseInt(xmlDoc.querySelector('active').textContent); - activeOverlay1 = parseInt(xmlDoc.querySelector('overlay[number="1"]').textContent); - activeOverlay2 = parseInt(xmlDoc.querySelector('overlay[number="2"]').textContent); - activeOverlay3 = parseInt(xmlDoc.querySelector('overlay[number="3"]').textContent); - activeOverlay4 = parseInt(xmlDoc.querySelector('overlay[number="4"]').textContent); - - if (xmlDoc.querySelector('preset')) { - var projetName = xmlDoc.querySelector('preset').textContent.split(/[\\/]/); - projetName = projetName[projetName.length - 1].split('.')[0]; - document.getElementById('projetName').textContent = projetName; - } - - updateCheckboxClass('streaming', JSON.parse(xmlDoc.querySelector('streaming').textContent.trim().toLowerCase()), xmlDoc); - updateCheckboxClass('recording', JSON.parse(xmlDoc.querySelector('recording').textContent.trim().toLowerCase()), xmlDoc); - updateCheckboxClass('external', JSON.parse(xmlDoc.querySelector('external').textContent.trim().toLowerCase()), xmlDoc); - updateCheckboxClass('fullscreen', JSON.parse(xmlDoc.querySelector('fullscreen').textContent.trim().toLowerCase()), xmlDoc); -} - -function updateCheckboxClass(checkboxId, className, xmlDoc) { - - if (className) { - // La case à cocher est cochée, ajouter la classe - document.getElementById(checkboxId).classList.add('true'); - - // Parcourir chaque enregistrement et ajouter une div pour chaque fichier - let filename1 = ""; - let filename2 = ""; - let filename3 = ""; - - let recordings = xmlDoc.getElementsByTagName(checkboxId); - - if (checkboxId === 'streaming') { - filename1 = recordings[0].getAttribute("channel1"); - filename2 = recordings[0].getAttribute("channel2"); - filename3 = recordings[0].getAttribute("channel3"); - } - - if (checkboxId === 'recording') { - filename1 = recordings[0].getAttribute("filename1"); - filename2 = recordings[0].getAttribute("filename2"); - filename3 = recordings[0].getAttribute("filename3"); - } - - updateStatus(checkboxId, filename1, '1'); - updateStatus(checkboxId, filename2, '2'); - updateStatus(checkboxId, filename3, '3'); - - } else { - // La case à cocher n'est pas cochée, supprimer la classe - document.getElementById(checkboxId).classList.remove('true'); - - updateStatus(checkboxId, "", '1'); - updateStatus(checkboxId, "", '2'); - updateStatus(checkboxId, "", '3'); - - } -} - -function updateStatus(checkboxId, filename, index) { - let elementId = 'statut_' + checkboxId + index; - - if (document.getElementById(elementId) !== null) { - if (filename) { - document.getElementById(elementId).classList.add('active'); - } else { - document.getElementById(elementId).className = ""; - } - } -} diff --git a/app/src/assets/TypeScript/processSettings.ts b/app/src/assets/TypeScript/processSettings.ts new file mode 100644 index 0000000..81cca94 --- /dev/null +++ b/app/src/assets/TypeScript/processSettings.ts @@ -0,0 +1,79 @@ +function processSettings(xmlDoc: Document): void { + + previewNumber = parseInt(xmlDoc.querySelector('preview').textContent); + activeNumber = parseInt(xmlDoc.querySelector('active').textContent); + activeOverlay1 = parseInt(xmlDoc.querySelector('overlay[number="1"]').textContent); + activeOverlay2 = parseInt(xmlDoc.querySelector('overlay[number="2"]').textContent); + activeOverlay3 = parseInt(xmlDoc.querySelector('overlay[number="3"]').textContent); + activeOverlay4 = parseInt(xmlDoc.querySelector('overlay[number="4"]').textContent); + + if (xmlDoc.querySelector('preset')) { + const projectName = xmlDoc.querySelector('preset').textContent.split(/[\\/]/); + const projectNameText = projectName[projectName.length - 1].split('.')[0]; + const projectNameElement = document.getElementById('projetName'); + if (projectNameElement) { + projectNameElement.textContent = projectNameText; + } + } + + updateCheckboxClass('streaming', JSON.parse(xmlDoc.querySelector('streaming').textContent.trim().toLowerCase()), xmlDoc); + updateCheckboxClass('recording', JSON.parse(xmlDoc.querySelector('recording').textContent.trim().toLowerCase()), xmlDoc); + updateCheckboxClass('external', JSON.parse(xmlDoc.querySelector('external').textContent.trim().toLowerCase()), xmlDoc); + updateCheckboxClass('fullscreen', JSON.parse(xmlDoc.querySelector('fullscreen').textContent.trim().toLowerCase()), xmlDoc); +} + +function updateCheckboxClass(checkboxId: string, className: boolean,xmlDoc: Document | null = null): void { + + if (className && xmlDoc) { + // La case à cocher est cochée, ajouter la classe + const checkboxElement = document.getElementById(checkboxId); + if (checkboxElement) { + checkboxElement.classList.add('true'); + + let filename1 = ""; + let filename2 = ""; + let filename3 = ""; + + const recordings = xmlDoc.getElementsByTagName(checkboxId); + + if (checkboxId === 'streaming') { + filename1 = recordings[0].getAttribute("channel1") || ""; + filename2 = recordings[0].getAttribute("channel2") || ""; + filename3 = recordings[0].getAttribute("channel3") || ""; + } + + if (checkboxId === 'recording') { + filename1 = recordings[0].getAttribute("filename1") || ""; + filename2 = recordings[0].getAttribute("filename2") || ""; + filename3 = recordings[0].getAttribute("filename3") || ""; + } + + updateStatus(checkboxId, filename1, '1'); + updateStatus(checkboxId, filename2, '2'); + updateStatus(checkboxId, filename3, '3'); + } + + } else { + // La case à cocher n'est pas cochée, supprimer la classe + const checkboxElement = document.getElementById(checkboxId); + if (checkboxElement) { + checkboxElement.classList.remove('true'); + + updateStatus(checkboxId, "", '1'); + updateStatus(checkboxId, "", '2'); + updateStatus(checkboxId, "", '3'); + } + } +} + +function updateStatus(checkboxId: string, filename: string, index: string): void { + const elementId = 'statut_' + checkboxId + index; + const statusElement = document.getElementById(elementId); + if (statusElement) { + if (filename) { + statusElement.classList.add('active'); + } else { + statusElement.className = ""; + } + } +} \ No newline at end of file diff --git a/app/src/assets/TypeScript/processVideoSources.js b/app/src/assets/TypeScript/processVideoSources.ts similarity index 55% rename from app/src/assets/TypeScript/processVideoSources.js rename to app/src/assets/TypeScript/processVideoSources.ts index d6361c5..81c2bd7 100644 --- a/app/src/assets/TypeScript/processVideoSources.js +++ b/app/src/assets/TypeScript/processVideoSources.ts @@ -1,4 +1,4 @@ -function processVideoSources(xmlDoc) { +function processVideoSources(xmlDoc: Document): void { const videoSources = xmlDoc.querySelectorAll('input'); const container = document.getElementById('videoSourcesContainer'); @@ -14,8 +14,8 @@ function processVideoSources(xmlDoc) { // Si la source video existe déjà, la mettre à jour if (existingAudioSource) { // Mettre à jour les informations nécessaires - const VideoSourceHTML = getVideoSourceHTML(videoSource); - if( existingAudioSource.innerHTML != VideoSourceHTML){ + const VideoSourceHTML = getVideoSourceHTML(videoSource); + if (existingAudioSource.innerHTML != VideoSourceHTML) { existingAudioSource.innerHTML = VideoSourceHTML; } } else { @@ -34,41 +34,42 @@ function processVideoSources(xmlDoc) { } // Fonction pour obtenir le HTML d'une source audio à partir de l'élément XML -function getVideoSourceHTML(videoSource) { +function getVideoSourceHTML(videoSource: Element): string { const key = videoSource.getAttribute('key'); const title = videoSource.getAttribute('title'); const number = videoSource.getAttribute('number'); const type = videoSource.getAttribute('type'); - var tally = ""; - var tallyeOverlay1 - var tallyeOverlay2 - var tallyeOverlay3 - var tallyeOverlay4 + let tally = ""; + let tallyOverlay1: string; + let tallyOverlay2: string; + let tallyOverlay3: string; + let tallyOverlay4: string; + // Ajouter la classe "preview" si le nombre correspond à previewNumber if (parseInt(number) === previewNumber) { - tally = "preview"; - } - // Ajouter la classe "program" si le nombre correspond à previewNumber - if (parseInt(number) === activeNumber) { - tally = 'program'; - } - // Ajouter la classe "preview" si le nombre correspond à previewNumber - if (parseInt(number) === activeOverlay1) { - tallyeOverlay1 = "program"; - } - // Ajouter la classe "program" si le nombre correspond à previewNumber - if (parseInt(number) === activeOverlay2) { - tallyeOverlay2 = 'program'; - } - // Ajouter la classe "preview" si le nombre correspond à previewNumber - if (parseInt(number) === activeOverlay3) { - tallyeOverlay3 = "program"; - } - // Ajouter la classe "program" si le nombre correspond à previewNumber - if (parseInt(number) === activeOverlay4) { - tallyeOverlay4 = 'program'; - } - + tally = "preview"; + } + // Ajouter la classe "program" si le nombre correspond à previewNumber + if (parseInt(number) === activeNumber) { + tally = 'program'; + } + // Ajouter la classe "preview" si le nombre correspond à previewNumber + if (parseInt(number) === activeOverlay1) { + tallyOverlay1 = "program"; + } + // Ajouter la classe "program" si le nombre correspond à previewNumber + if (parseInt(number) === activeOverlay2) { + tallyOverlay2 = 'program'; + } + // Ajouter la classe "preview" si le nombre correspond à previewNumber + if (parseInt(number) === activeOverlay3) { + tallyOverlay3 = "program"; + } + // Ajouter la classe "program" si le nombre correspond à previewNumber + if (parseInt(number) === activeOverlay4) { + tallyOverlay4 = 'program'; + } + return `

    ${number}

    @@ -78,14 +79,13 @@ function getVideoSourceHTML(videoSource) {
  • - - - - + + + +
    `; - } diff --git a/app/src/assets/TypeScript/submit_vmix.ts b/app/src/assets/TypeScript/submit_vmix.ts index 727561f..ed255ae 100644 --- a/app/src/assets/TypeScript/submit_vmix.ts +++ b/app/src/assets/TypeScript/submit_vmix.ts @@ -1,74 +1,58 @@ -function ConfirmApiVmixSend( - message: string, - command: string, - input: number = 0, - value: number = 0, - duration: number = 0, - selectedName: string | number = 0, - selectedIndex: number = 0 -) { - let result: boolean = confirm(message); - if (result == true) { +function ConfirmApiVmixSend(message: string, command: string, input: string = "0", value: string = "0", duration: string = "0", selectedName: string = "0", selectedIndex: string = "0"): void { + let result = confirm(message); + if (result === true) { ApiVmixSend(command, input, value, duration, selectedName, selectedIndex); } } -function ApiVmixSend( - command: string, - input: number = 0, - value: number = 0, - duration: number = 0, - selectedName: string | number = 0, - selectedIndex: number = 0 -) { +function ApiVmixSend(command: string, input: string = "0", value: string = "0", duration: string = "0", selectedName: string = "0", selectedIndex: string = "0"): void { // Construire la requête à envoyer à vMix - let vmixConnectElement = document.getElementById('vmix_connect') as HTMLInputElement; - if (vmixConnectElement) { - let vmixConnectValue = vmixConnectElement.value; - let queryString: string = `session_vmix=${vmixConnectValue}&command=${encodeURIComponent(command)}`; - // Utilisez queryString comme vous le souhaitez - - + const vmixConnectElement = document.getElementById('vmix_connect') as HTMLInputElement; + if (vmixConnectElement) { + let queryString: string = `session_vmix=${vmixConnectElement.value}&command=${encodeURIComponent(command)}`; // Ajouter les paramètres d'entrée, valeur et durée s'ils sont fournis if (input !== undefined) { - queryString += `&input=${encodeURIComponent(input.toString())}`; + queryString += `&input=${encodeURIComponent(input)}`; } if (value !== undefined) { - queryString += `&value=${encodeURIComponent(value.toString())}`; + queryString += `&value=${encodeURIComponent(value)}`; } if (duration !== undefined) { - queryString += `&duration=${encodeURIComponent(duration.toString())}`; + queryString += `&duration=${encodeURIComponent(duration)}`; } if (selectedName !== undefined) { - queryString += `&selectedName=${encodeURIComponent(selectedName.toString())}`; + queryString += `&selectedName=${encodeURIComponent(selectedName)}`; } if (selectedIndex !== undefined) { - queryString += `&selectedIndex=${encodeURIComponent(selectedIndex.toString())}`; + queryString += `&selectedIndex=${encodeURIComponent(selectedIndex)}`; } - let xhr: XMLHttpRequest | null = getHttpRequest(); - if (!xhr) return; + const xhr = getHttpRequest(); - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - createNotification('success', 'Validation réussie', JSON.parse(xhr.responseText)['Valid'] + queryString); - } else { - createNotification('error', 'Erreur', JSON.parse(xhr.responseText)['error']); + if (xhr) { + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + createNotification('success', 'Validation successful', JSON.parse(xhr.responseText)['Valid'] + queryString); + } else { + createNotification('error', 'Error', JSON.parse(xhr.responseText)['error']); + } } - } - }; + }; - xhr.open('GET', "/api/send_command?" + queryString, true); - xhr.setRequestHeader('X-Requested-With', 'xmlhttprequest'); - xhr.send(); + xhr.open('GET', "/api/send_command?" + queryString, true); + xhr.setRequestHeader('X-Requested-With', 'xmlhttprequest'); + xhr.send(); + } else { + console.error('Unable to create an XMLHttpRequest instance.'); + } } else { - console.log("Null vmixConnectElement") + console.error("The element with the id 'vmix_connect' was not found."); } } \ No newline at end of file From 8bebfed74d06ee723624fa211919fe44a93ce332 Mon Sep 17 00:00:00 2001 From: vincentberry Date: Sun, 17 Mar 2024 17:17:56 +0100 Subject: [PATCH 15/36] =?UTF-8?q?=E2=9C=A8=20feat(JS):?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bundle de tout les fichier js dont app à besoin --- app/public/index.php | 24 +----------------------- app/src/assets/TypeScript/index.ts | 12 ++++++++++++ 2 files changed, 13 insertions(+), 23 deletions(-) create mode 100644 app/src/assets/TypeScript/index.ts diff --git a/app/public/index.php b/app/public/index.php index 26519ce..ad7c34c 100644 --- a/app/public/index.php +++ b/app/public/index.php @@ -357,30 +357,8 @@ - - - - - - - - - - - + - + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/inc/demo/header.php b/app/src/inc/demo/header.php index 7b63591..eb64aaf 100644 --- a/app/src/inc/demo/header.php +++ b/app/src/inc/demo/header.php @@ -22,6 +22,18 @@ -
    -

    It's the demo version

    -
    \ No newline at end of file +
    +

    This is a demonstration version. Not for production use.

    +
    + \ No newline at end of file diff --git a/app/src/inc/dev/header.php b/app/src/inc/dev/header.php index 59fae79..55bb3f6 100644 --- a/app/src/inc/dev/header.php +++ b/app/src/inc/dev/header.php @@ -22,6 +22,18 @@ -
    +

    It's the development version

    -
    \ No newline at end of file +
    + \ No newline at end of file