diff --git a/.github/workflows/docker-image_demo.yml b/.github/workflows/docker-image_demo.yml index 6f699c7..590ce51 100644 --- a/.github/workflows/docker-image_demo.yml +++ b/.github/workflows/docker-image_demo.yml @@ -13,17 +13,17 @@ 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: 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: Build the Docker image - run: docker build . --file Dockerfile --tag vincentberry/vmix-remote:demo - - - name: Docker Push - run: docker push --all-tags vincentberry/vmix-remote + - name: Docker Push + run: docker push --all-tags vincentberry/vmix-remote \ No newline at end of file diff --git a/.github/workflows/docker-image_dev.yml b/.github/workflows/docker-image_dev.yml index deb7343..99156b8 100644 --- a/.github/workflows/docker-image_dev.yml +++ b/.github/workflows/docker-image_dev.yml @@ -14,6 +14,7 @@ jobs: steps: - uses: actions/checkout@v2 + - name: docker login env: DOCKER_USER: ${{secrets.DOCKER_USER}} @@ -22,7 +23,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 + 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..1efb869 100644 --- a/.github/workflows/docker-image_main.yml +++ b/.github/workflows/docker-image_main.yml @@ -13,19 +13,20 @@ 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: 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 diff --git a/.gitignore b/.gitignore index 41f2ff3..a9884f7 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,18 @@ /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/ +/app/public/assets/style +/app/public/assets/js + + +#npm ignore +/node_modules +package-lock.json \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 715e8e4..94e1c65 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,20 @@ +FROM node:14 AS build +ARG NODE_ENV +WORKDIR /build + +COPY ./ /build + +RUN npm install +RUN npm install typescript + + +RUN npm run build-${NODE_ENV} + FROM php:apache +ARG NODE_ENV ENV COMPOSER_ALLOW_SUPERUSER=1 +ARG NODE_ENV EXPOSE 80 WORKDIR /var/www/html/ @@ -18,9 +32,12 @@ RUN apt-get update -qq && \ RUN docker-php-ext-install -j$(nproc) opcache pdo_mysql # Apache -COPY config/prod/apache2/conf-available/swag.conf /etc/apache2/conf-available/swag.conf -COPY /config/prod/apache2/sites-enabled /etc/apache2/sites-enabled/ -COPY app/ /var/www/html/ +COPY config/${NODE_ENV}/apache2/conf-available/swag.conf /etc/apache2/conf-available/swag.conf +COPY /config/${NODE_ENV}/apache2/sites-enabled /etc/apache2/sites-enabled/ +COPY --from=build /build/app/ /var/www/html/ +COPY app/src/inc/${NODE_ENV}/ /var/www/html/inc/ + +RUN rm -rf /var/www/html/src RUN mkdir -p /var/www/html/file/ RUN mkdir -p /var/www/html/db/ diff --git a/app/inc/header.php b/app/inc/header.php index bc630fd..75d7878 100644 --- a/app/inc/header.php +++ b/app/inc/header.php @@ -1,5 +1,6 @@ + @@ -22,3 +23,18 @@ +
+

No Build version

+
+ \ No newline at end of file diff --git a/app/public/api/connect.php b/app/public/api/connect.php index b09d73f..2190f64 100644 --- a/app/public/api/connect.php +++ b/app/public/api/connect.php @@ -1,6 +1,6 @@ "N") { - $file = $Dir_inc."file/" . $session_vmix . ".xml"; + $file = $Dir_inc . "file/" . $session_vmix . ".xml"; + + if (file_exists($file)) { - $timestamp_derniere_modif = filemtime($file); + $timestamp_derniere_modif = filemtime($file); - if ($timestamp_actuel - $timestamp_derniere_modif > 130){ - http_response_code(201); - echo json_encode(array("reset" => "Le vmix n'a rien envoyé depuis plus de 130s")); - die(); - } - if (file_exists($file)){ - echo ''.file_get_contents($file).''; + if ($timestamp_actuel - $timestamp_derniere_modif > 130) { + http_response_code(201); + echo json_encode(array("reset" => "Le vmix n'a rien envoyé depuis plus de 130s")); + die(); + } + + echo '' . file_get_contents($file) . ''; die(); } - } else { // Spécifiez le chemin du dossier - $directoryPath = $Dir_inc.'file/'; - + $directoryPath = $Dir_inc . 'file/'; + // Initialiser un tableau pour stocker les informations des fichiers $fileInfoArray = []; - + // Filtrer les fichiers pour exclure les entrées "." et ".." - $filteredFiles = array_filter(scandir($directoryPath), function ($file) use ($Dir_inc, &$fileInfoArray) { + $filteredFiles = array_filter(scandir($directoryPath), function ($file) use ($Dir_inc, &$fileInfoArray) { // Vérifier si le fichier existe - $dir_file = $Dir_inc.'file/'.$file; + $dir_file = $Dir_inc . 'file/' . $file; if (file_exists($dir_file) && $file !== '.' && $file !== '..') { // Obtenir le timestamp de la dernière modification du fichier $timestamp_derniere_modif = filemtime($dir_file); - + // Vérifier si le fichier a été modifié il y a plus de 5 minutes if (time() - $timestamp_derniere_modif > 300) { // 300 secondes = 5 minutes // Supprimer le fichier unlink($dir_file); return ""; } - + // Charger le fichier XML $xml = file_get_contents($dir_file); $xml = simplexml_load_string('' . (string)$xml . ''); @@ -53,10 +54,10 @@ // Récupérer le contenu du nœud $nomFichierSansChemin = preg_replace('#.*\\\#', '', (string)$xml->vmix->preset); $nomFichierSansExtension = pathinfo($nomFichierSansChemin, PATHINFO_FILENAME); - + // Extraire le nom du fichier du chemin complet $nomFichier = pathinfo($file, PATHINFO_FILENAME); - + // Stocker les informations dans le tableau $fileInfoArray[] = [ 'id' => $nomFichier, @@ -70,8 +71,7 @@ echo json_encode($fileInfoArray); die(); } - -}else{ +} else { http_response_code(301); echo json_encode(array("redirect" => "/lobby")); die(); @@ -79,4 +79,4 @@ http_response_code(403); echo json_encode(array("error" => "valeur envoi non conforme session_vmix !")); -die(); \ No newline at end of file +die(); diff --git a/app/public/assets/js/app.js b/app/public/assets/js/app.js deleted file mode 100644 index e9e888d..0000000 --- a/app/public/assets/js/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 - var selectElement = document.getElementById('vmix_connect'); - var files = JSON.parse(data); - - // Ajouter les options au uniquement si elles n'existent pas déjà - for (var i = 0; i < files.length; i++) { - var fileId = files[i]['id']; - - // Vérifier si l'option existe déjà - if (!optionExists(fileId)) { - console.log("new connection") - var option = document.createElement('option'); - option.value = fileId; - option.textContent = files[i]['name'] + "_" + fileId; - selectElement.appendChild(option); - } - } - // Fonction pour vérifier si une option existe déjà - function optionExists(value) { - for (var i = 0; i < selectElement.options.length; i++) { - if (selectElement.options[i].value === value) { - return true; - } - } - return false; - } - -} - -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; - } -} - -// Charger le fichier XML et générer les éléments HTML au chargement de la page -window.onload = chargerFichierXML; -setInterval(chargerFichierXML, 10000); \ No newline at end of file diff --git a/app/public/assets/js/notification.js b/app/public/assets/js/notification.js deleted file mode 100644 index c961e67..0000000 --- a/app/public/assets/js/notification.js +++ /dev/null @@ -1,28 +0,0 @@ - -function createNotification(type, title, description) { - const notificationContainer = document.getElementById('notification-container'); - const notification = document.createElement('div'); - notification.className = `notification ${type} in`; - - const closeButton = document.createElement('span'); - closeButton.className = 'close-btn'; - closeButton.innerHTML = '×'; - closeButton.addEventListener('click', function () { - notification.classList.remove('in'); - setTimeout(() => { - notification.remove(); - }, 500); - }); - - notification.innerHTML = `${title}
${description}`; - notification.appendChild(closeButton); - - notificationContainer.appendChild(notification); - - setTimeout(() => { - notification.classList.remove('in'); - setTimeout(() => { - notification.remove(); - }, 500); - }, 3000); // 5 seconds timeout -} \ No newline at end of file diff --git a/app/public/assets/js/processEdit.js b/app/public/assets/js/processEdit.js deleted file mode 100644 index a5b7af1..0000000 --- a/app/public/assets/js/processEdit.js +++ /dev/null @@ -1,72 +0,0 @@ - -function closeEdit() { - // Get the parent div and hide it - document.getElementById("EditContainer").classList.add("disabled"); -} - -function OpenEdit(HTML) { - const ancienConteneur = document.getElementById("EditContainerContainer"); - if (ancienConteneur) { - ancienConteneur.remove(); - } - - // Créez 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éez un nouvel élément div à partir de la chaîne de caractères - nouveauDiv = `

Add Filename to List

-
- - -
- - `; - 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/public/assets/js/processPageSources.js b/app/public/assets/js/processPageSources.js deleted file mode 100644 index 425f95d..0000000 --- a/app/public/assets/js/processPageSources.js +++ /dev/null @@ -1,377 +0,0 @@ -var inputContainer_InputName_No_Focus = true; -var inputContainer_LayersSelect_No_Focus = true; -var PageSources_LayersSelect = "0"; -var PageSources_GtSelect = 0; -var clickCount_closePageInput = false; - -// Fonction pour convertir le XML en HTML et l'ajouter à la page -function processPageSources(xmlDoc) { - if (inputSelect) { - const input = xmlDoc.querySelector(`input[key="${inputSelect}"]`); - - // Obtenir les attributs de l'élément - const key = input.getAttribute('key'); - const number = input.getAttribute('number'); - const type = input.getAttribute('type'); - const title = input.getAttribute('title'); - const shortTitle = input.getAttribute('shortTitle'); - const state = input.getAttribute('state'); - const position = input.getAttribute('position'); - const duration = input.getAttribute('duration'); - const loop = input.getAttribute('loop') - const muted = input.getAttribute('muted'); - const volume = input.getAttribute('volume'); - const balance = input.getAttribute('balance'); - const solo = input.getAttribute('solo'); - const soloPFL = input.getAttribute('soloPFL'); - const audiobusses = input.getAttribute('audiobusses'); - const meterF1 = input.getAttribute('meterF1'); - const meterF2 = input.getAttribute('meterF2'); - 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 = []; - if (input.querySelector('text')) { - var TextItems = Array.from(input.querySelectorAll('text')).map(item => ({ - index: item.getAttribute('index'), - name: item.getAttribute('name'), - type: "Text", - 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'), - type: "Image", - 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'), - type: "Color", - value: item.textContent.trim() - })); - allItems = allItems.concat(ColorItems); - } - const inputContainer_content_gt_nav = document.getElementById('inputContainer_content_gt_nav'); - 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 = "" - } else { - 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 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' - })); - 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 = "" - } else { - document.getElementById('inputContainer_nav_list').style.display = "none" - } - - 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'); - - // Fonction pour mettre à jour une valeur si elle est différente et non vide - function updateValue(element, attribute, defaultValue) { - 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 (attributeValue !== "" && attributeValue !== currentValue) { - element.value = element.innerHTML = attributeValue; - if (element.type === 'checkbox') { - element.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'); - } - } - } - } - - // Utilisation de la fonction pour mettre à jour les éléments - updateValue(inputContainer_InputId, key); - updateValue(inputContainer_InputType, type); - if (inputContainer_InputName_No_Focus) { - updateValue(inputContainer_InputName, shortTitle, ""); - } - 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; - } - - } -}; - -function closePageInput(key) { - // Get the parent div and hide it - insputSelect = ""; - PageSources_GtSelect = 0; - clickCount_closePageInput = false; - document.getElementById("inputsContainer").classList.add("disabled"); -} - -document.addEventListener('DOMContentLoaded', function () { - var popup = document.getElementById('inputsContainer_Container'); - function closePageInput_handleDocumentClick(event) { - // 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 (clickCount_closePageInput === true){ - closePageInput(""); - } - clickCount_closePageInput = false; - } - } - // Fermer la popup lors du clic à l'extérieur de la popup - document.addEventListener('click', closePageInput_handleDocumentClick); -}); - -function OpenPageInput(key) { - // Get the parent div and hide it - inputSelect = key; - clickCount_closePageInput = false; - processPageSources(XmlFile); - processPageSources_updateInput_layers(XmlFile); - changeMenu('general'); - document.getElementById("inputsContainer").classList.remove("disabled"); - -} - -function processPageSources_updateList(listItems) { - // Utiliser la méthode map pour créer un tableau de chaînes HTML - const htmlListItems = listItems.map((item, index) => ` -
  • - - - -
  • - `); - - // Joindre les chaînes HTML pour obtenir une seule chaîne - const htmlString = htmlListItems.join(''); - - return htmlString; -} - -function processPageSources_updateGT_nav(textItems) { - // Utiliser la méthode map pour créer un tableau de chaînes HTML - const htmlTextItems = textItems.map((item, index) => ` -
  • -

    ${item.name}

    -
  • - `); - // Joindre les chaînes HTML pour obtenir une seule chaîne - const htmlString = htmlTextItems.join(''); - - return htmlString; -} - -function processPageSources_updateGT_text(textItems){ - // Utiliser la méthode map pour créer un tableau de chaînes HTML - const htmlTextItems = textItems.map((item, index) => ` -
    - -
    - ${ - item.type === "Text" ? - ` -
    -

    Color

    - -

    Ticker Speed

    - -
    -
    -

    Countdown

    - - - - -
    - ` - : '' - } -
    -
    - `); - // Joindre les chaînes HTML pour obtenir une seule chaîne - const htmlString = htmlTextItems.join(''); - - return htmlString; -} - -function processPageSources_updateGT_nav_select(element, index) { - PageSources_GtSelect = index; - document.getElementById("gt_nav_"+ index).classList.remove('active') - - // Retirer la classe "active" de tous les éléments
  • - const allNavItems = document.querySelectorAll('.gt_nav'); - allNavItems.forEach(navItem => navItem.classList.remove('active')); - - // Ajouter la classe "active" à l'élément
  • cliqué - element.classList.add('active'); - // Mettre à jour le textarea correspondant avec les données de l'item - const allTextItems = document.querySelectorAll('.gt_text'); - allTextItems.forEach(navItem => navItem.classList.remove('active')); - - document.getElementById('gt_text_'+index).classList.add('active'); -} - -function processPageSources_updateLayers(inputSource) { - 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(); - 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'); - } 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 = ""; - } - 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'); - } 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 = ""; - } - } - }); - } else { - document.getElementById('inputContainer_content_list_' + i).value = "" - } - }; -} - -function changeMenu(menuName) { - // Liste des menus et de leurs correspondances avec les IDs des éléments HTML - const menuMapping = { - 'general': 'general', - 'list': 'list', - 'color_correction': 'color_correction', - 'layers': 'layers', - 'gt': 'gt' - }; - - // 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"; - } - - // 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 = ""; -} - -function processPageSources_updateInput_layers(xmlDoc) { - - const inputSources = xmlDoc.querySelectorAll('input'); - - for (let i = 0; i <= 9; i++) { - var selectElement = document.getElementById('inputContainer_List_Layers_' + i); - - if (selectElement) { - inputSources.forEach(inputSource => { - var key = inputSource.getAttribute('key'); - var title = inputSource.getAttribute('number') + " :" + inputSource.getAttribute('title'); - - // Check if the option already exists - var existingOption = selectElement.querySelector('option[value="' + key + '"]'); - - if (existingOption) { - // If the option exists, update its text - if (existingOption.text !== title) { - existingOption.text = title; - } - } else { - // If the option does not exist, add a new option - var option = document.createElement('option'); - option.value = key; - option.text = title; - selectElement.add(option); - } - }); - - var 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); - } - }); - } - } -} - -//custom envoi vmix - -// inputContainer_InputName (Entrée) -document.getElementById('inputContainer_InputName').addEventListener('focus', function () { - inputContainer_InputName_No_Focus = false; -}); - -// inputContainer_InputName (sortie) -document.getElementById('inputContainer_InputName').addEventListener('blur', function () { - var inputValue = document.getElementById('inputContainer_InputName').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) { - ApiVmixSend('LoopOn', inputSelect); - } else { - ApiVmixSend('LoopOff', inputSelect); - } -}); - -// inputContainer_listShuffle -document.getElementById('inputContainer_listShuffle').addEventListener('click', function () { - ApiVmixSend('ListShuffle', inputSelect); -}); \ No newline at end of file diff --git a/app/public/assets/js/processSettings.js b/app/public/assets/js/processSettings.js deleted file mode 100644 index 3d07ec1..0000000 --- a/app/public/assets/js/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/public/assets/js/processVideoSources.js b/app/public/assets/js/processVideoSources.js deleted file mode 100644 index d6361c5..0000000 --- a/app/public/assets/js/processVideoSources.js +++ /dev/null @@ -1,91 +0,0 @@ -function processVideoSources(xmlDoc) { - - const videoSources = xmlDoc.querySelectorAll('input'); - const container = document.getElementById('videoSourcesContainer'); - - // Parcourir toutes les sources video - videoSources.forEach(videoSource => { - // Récupérer la clé unique de la source video - const key = videoSource.getAttribute('key'); - - // Vérifier si une source video avec la même clé existe déjà dans le conteneur - const existingAudioSource = document.querySelector(`.video-source[data-key="${key}"]`); - - // 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){ - existingAudioSource.innerHTML = VideoSourceHTML; - } - } else { - // Créer une nouvelle div pour la source video - const newDivElement = document.createElement('div'); - newDivElement.className = 'video-source'; - newDivElement.setAttribute('data-key', key); - - // Remplir la div avec les informations - newDivElement.innerHTML = getVideoSourceHTML(videoSource); - - // Ajouter la nouvelle div au conteneur - container.appendChild(newDivElement); - } - }); -} - -// Fonction pour obtenir le HTML d'une source audio à partir de l'élément XML -function getVideoSourceHTML(videoSource) { - 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 - // 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'; - } - - return ` -
    -

    ${number}

    -
    - ${type} -

    ${title}

    -
    -
    -
    - - - - - -
    -`; - -} - - diff --git a/app/public/assets/js/submit_vmix.js b/app/public/assets/js/submit_vmix.js deleted file mode 100644 index e513520..0000000 --- a/app/public/assets/js/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/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 diff --git a/app/public/index.php b/app/public/index.php index 26519ce..33cf08c 100644 --- a/app/public/index.php +++ b/app/public/index.php @@ -369,18 +369,6 @@ \ No newline at end of file diff --git a/app/src/inc/dev/header.php b/app/src/inc/dev/header.php new file mode 100644 index 0000000..55bb3f6 --- /dev/null +++ b/app/src/inc/dev/header.php @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + REMOTE VMIX + + + + + +
    +

    It's the development version

    +
    + \ No newline at end of file diff --git a/app/src/inc/prod/header.php b/app/src/inc/prod/header.php new file mode 100644 index 0000000..bc630fd --- /dev/null +++ b/app/src/inc/prod/header.php @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + REMOTE VMIX + + + + + diff --git a/config/demo/apache2/apache2.conf b/config/demo/apache2/apache2.conf new file mode 100644 index 0000000..fff772d --- /dev/null +++ b/config/demo/apache2/apache2.conf @@ -0,0 +1,227 @@ +# This is the main Apache server configuration file. It contains the +# configuration directives that give the server its instructions. +# See http://httpd.apache.org/docs/2.4/ for detailed information about +# the directives and /usr/share/doc/apache2/README.Debian about Debian specific +# hints. +# +# +# Summary of how the Apache 2 configuration works in Debian: +# The Apache 2 web server configuration in Debian is quite different to +# upstream's suggested way to configure the web server. This is because Debian's +# default Apache2 installation attempts to make adding and removing modules, +# virtual hosts, and extra configuration directives as flexible as possible, in +# order to make automating the changes and administering the server as easy as +# possible. + +# It is split into several files forming the configuration hierarchy outlined +# below, all located in the /etc/apache2/ directory: +# +# /etc/apache2/ +# |-- apache2.conf +# | `-- ports.conf +# |-- mods-enabled +# | |-- *.load +# | `-- *.conf +# |-- conf-enabled +# | `-- *.conf +# `-- sites-enabled +# `-- *.conf +# +# +# * apache2.conf is the main configuration file (this file). It puts the pieces +# together by including all remaining configuration files when starting up the +# web server. +# +# * ports.conf is always included from the main configuration file. It is +# supposed to determine listening ports for incoming connections which can be +# customized anytime. +# +# * Configuration files in the mods-enabled/, conf-enabled/ and sites-enabled/ +# directories contain particular configuration snippets which manage modules, +# global configuration fragments, or virtual host configurations, +# respectively. +# +# They are activated by symlinking available configuration files from their +# respective *-available/ counterparts. These should be managed by using our +# helpers a2enmod/a2dismod, a2ensite/a2dissite and a2enconf/a2disconf. See +# their respective man pages for detailed information. +# +# * The binary is called apache2. Due to the use of environment variables, in +# the default configuration, apache2 needs to be started/stopped with +# /etc/init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not +# work with the default configuration. + + +# Global configuration +# + +# +# ServerRoot: The top of the directory tree under which the server's +# configuration, error, and log files are kept. +# +# NOTE! If you intend to place this on an NFS (or otherwise network) +# mounted filesystem then please read the Mutex documentation (available +# at ); +# you will save yourself a lot of trouble. +# +# Do NOT add a slash at the end of the directory path. +# +#ServerRoot "/etc/apache2" + +# +# The accept serialization lock file MUST BE STORED ON A LOCAL DISK. +# +#Mutex file:${APACHE_LOCK_DIR} default + +# +# The directory where shm and other runtime files will be stored. +# + +DefaultRuntimeDir ${APACHE_RUN_DIR} + +# +# PidFile: The file in which the server should record its process +# identification number when it starts. +# This needs to be set in /etc/apache2/envvars +# +PidFile ${APACHE_PID_FILE} + +# +# Timeout: The number of seconds before receives and sends time out. +# +Timeout 300 + +# +# KeepAlive: Whether or not to allow persistent connections (more than +# one request per connection). Set to "Off" to deactivate. +# +KeepAlive On + +# +# MaxKeepAliveRequests: The maximum number of requests to allow +# during a persistent connection. Set to 0 to allow an unlimited amount. +# We recommend you leave this number high, for maximum performance. +# +MaxKeepAliveRequests 100 + +# +# KeepAliveTimeout: Number of seconds to wait for the next request from the +# same client on the same connection. +# +KeepAliveTimeout 5 + + +# These need to be set in /etc/apache2/envvars +User ${APACHE_RUN_USER} +Group ${APACHE_RUN_GROUP} + +# +# HostnameLookups: Log the names of clients or just their IP addresses +# e.g., www.apache.org (on) or 204.62.129.132 (off). +# The default is off because it'd be overall better for the net if people +# had to knowingly turn this feature on, since enabling it means that +# each client request will result in AT LEAST one lookup request to the +# nameserver. +# +HostnameLookups Off + +# ErrorLog: The location of the error log file. +# If you do not specify an ErrorLog directive within a +# container, error messages relating to that virtual host will be +# logged here. If you *do* define an error logfile for a +# container, that host's errors will be logged there and not here. +# +ErrorLog ${APACHE_LOG_DIR}/error.log + +# +# LogLevel: Control the severity of messages logged to the error_log. +# Available values: trace8, ..., trace1, debug, info, notice, warn, +# error, crit, alert, emerg. +# It is also possible to configure the log level for particular modules, e.g. +# "LogLevel info ssl:warn" +# +LogLevel warn + +# Include module configuration: +IncludeOptional mods-enabled/*.load +IncludeOptional mods-enabled/*.conf + +# Include list of ports to listen on +Include ports.conf + + +# Sets the default security model of the Apache2 HTTPD server. It does +# not allow access to the root filesystem outside of /usr/share and /var/www. +# The former is used by web applications packaged in Debian, +# the latter may be used for local directories served by the web server. If +# your system is serving content from a sub-directory in /srv you must allow +# access here, or in any related virtual host. + + Options FollowSymLinks + AllowOverride None + Require all denied + + + + AllowOverride None + Require all granted + + + + Options Indexes FollowSymLinks + AllowOverride None + Require all granted + + +# +# Options Indexes FollowSymLinks +# AllowOverride None +# Require all granted +# + + + + +# AccessFileName: The name of the file to look for in each directory +# for additional configuration directives. See also the AllowOverride +# directive. +# +AccessFileName .htaccess + +# +# The following lines prevent .htaccess and .htpasswd files from being +# viewed by Web clients. +# + + Require all denied + + + +# +# The following directives define some format nicknames for use with +# a CustomLog directive. +# +# These deviate from the Common Log Format definitions in that they use %O +# (the actual bytes sent including headers) instead of %b (the size of the +# requested file), because the latter makes it impossible to detect partial +# requests. +# +# Note that the use of %{X-Forwarded-For}i instead of %h is not recommended. +# Use mod_remoteip instead. +# +LogFormat "%v:%p %{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined +LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined +LogFormat "%a %l %u %t \"%r\" %>s %O" common +LogFormat "%{Referer}i -> %U" referer +LogFormat "%{User-agent}i" agent + +# Include of directories ignores editors' and dpkg's backup files, +# see README.Debian for details. + +# Include generic snippets of statements +IncludeOptional conf-enabled/*.conf + +# Include the virtual host configurations: +IncludeOptional sites-enabled/*.conf + +# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/config/demo/apache2/conf-available/swag.conf b/config/demo/apache2/conf-available/swag.conf new file mode 100644 index 0000000..9d8511b --- /dev/null +++ b/config/demo/apache2/conf-available/swag.conf @@ -0,0 +1 @@ +RemoteIPHeader X-Forwarded-For \ No newline at end of file diff --git a/config/demo/apache2/sites-enabled/000-default.conf b/config/demo/apache2/sites-enabled/000-default.conf new file mode 100644 index 0000000..4509921 --- /dev/null +++ b/config/demo/apache2/sites-enabled/000-default.conf @@ -0,0 +1,32 @@ + + # The ServerName directive sets the request scheme, hostname and port that + # the server uses to identify itself. This is used when creating + # redirection URLs. In the context of virtual hosts, the ServerName + # specifies what hostname must appear in the request's Host: header to + # match this virtual host. For the default virtual host (this file) this + # value is not decisive as it is used as a last resort host regardless. + # However, you must set it for any further virtual host explicitly. + #ServerName www.example.com + + DocumentRoot /var/www/html/public + + # Ajout de la directive DirectoryIndex + DirectoryIndex index.php + # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, + # error, crit, alert, emerg. + # It is also possible to configure the loglevel for particular + # modules, e.g. + #LogLevel info ssl:warn + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + + # For most configuration files from conf-available/, which are + # enabled or disabled at a global level, it is possible to + # include a line for only one particular virtual host. For example the + # following line enables the CGI configuration for this host only + # after it has been globally disabled with "a2disconf". + #Include conf-available/serve-cgi-bin.conf + + +# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/config/dev/apache2/apache2.conf b/config/dev/apache2/apache2.conf new file mode 100644 index 0000000..fff772d --- /dev/null +++ b/config/dev/apache2/apache2.conf @@ -0,0 +1,227 @@ +# This is the main Apache server configuration file. It contains the +# configuration directives that give the server its instructions. +# See http://httpd.apache.org/docs/2.4/ for detailed information about +# the directives and /usr/share/doc/apache2/README.Debian about Debian specific +# hints. +# +# +# Summary of how the Apache 2 configuration works in Debian: +# The Apache 2 web server configuration in Debian is quite different to +# upstream's suggested way to configure the web server. This is because Debian's +# default Apache2 installation attempts to make adding and removing modules, +# virtual hosts, and extra configuration directives as flexible as possible, in +# order to make automating the changes and administering the server as easy as +# possible. + +# It is split into several files forming the configuration hierarchy outlined +# below, all located in the /etc/apache2/ directory: +# +# /etc/apache2/ +# |-- apache2.conf +# | `-- ports.conf +# |-- mods-enabled +# | |-- *.load +# | `-- *.conf +# |-- conf-enabled +# | `-- *.conf +# `-- sites-enabled +# `-- *.conf +# +# +# * apache2.conf is the main configuration file (this file). It puts the pieces +# together by including all remaining configuration files when starting up the +# web server. +# +# * ports.conf is always included from the main configuration file. It is +# supposed to determine listening ports for incoming connections which can be +# customized anytime. +# +# * Configuration files in the mods-enabled/, conf-enabled/ and sites-enabled/ +# directories contain particular configuration snippets which manage modules, +# global configuration fragments, or virtual host configurations, +# respectively. +# +# They are activated by symlinking available configuration files from their +# respective *-available/ counterparts. These should be managed by using our +# helpers a2enmod/a2dismod, a2ensite/a2dissite and a2enconf/a2disconf. See +# their respective man pages for detailed information. +# +# * The binary is called apache2. Due to the use of environment variables, in +# the default configuration, apache2 needs to be started/stopped with +# /etc/init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not +# work with the default configuration. + + +# Global configuration +# + +# +# ServerRoot: The top of the directory tree under which the server's +# configuration, error, and log files are kept. +# +# NOTE! If you intend to place this on an NFS (or otherwise network) +# mounted filesystem then please read the Mutex documentation (available +# at ); +# you will save yourself a lot of trouble. +# +# Do NOT add a slash at the end of the directory path. +# +#ServerRoot "/etc/apache2" + +# +# The accept serialization lock file MUST BE STORED ON A LOCAL DISK. +# +#Mutex file:${APACHE_LOCK_DIR} default + +# +# The directory where shm and other runtime files will be stored. +# + +DefaultRuntimeDir ${APACHE_RUN_DIR} + +# +# PidFile: The file in which the server should record its process +# identification number when it starts. +# This needs to be set in /etc/apache2/envvars +# +PidFile ${APACHE_PID_FILE} + +# +# Timeout: The number of seconds before receives and sends time out. +# +Timeout 300 + +# +# KeepAlive: Whether or not to allow persistent connections (more than +# one request per connection). Set to "Off" to deactivate. +# +KeepAlive On + +# +# MaxKeepAliveRequests: The maximum number of requests to allow +# during a persistent connection. Set to 0 to allow an unlimited amount. +# We recommend you leave this number high, for maximum performance. +# +MaxKeepAliveRequests 100 + +# +# KeepAliveTimeout: Number of seconds to wait for the next request from the +# same client on the same connection. +# +KeepAliveTimeout 5 + + +# These need to be set in /etc/apache2/envvars +User ${APACHE_RUN_USER} +Group ${APACHE_RUN_GROUP} + +# +# HostnameLookups: Log the names of clients or just their IP addresses +# e.g., www.apache.org (on) or 204.62.129.132 (off). +# The default is off because it'd be overall better for the net if people +# had to knowingly turn this feature on, since enabling it means that +# each client request will result in AT LEAST one lookup request to the +# nameserver. +# +HostnameLookups Off + +# ErrorLog: The location of the error log file. +# If you do not specify an ErrorLog directive within a +# container, error messages relating to that virtual host will be +# logged here. If you *do* define an error logfile for a +# container, that host's errors will be logged there and not here. +# +ErrorLog ${APACHE_LOG_DIR}/error.log + +# +# LogLevel: Control the severity of messages logged to the error_log. +# Available values: trace8, ..., trace1, debug, info, notice, warn, +# error, crit, alert, emerg. +# It is also possible to configure the log level for particular modules, e.g. +# "LogLevel info ssl:warn" +# +LogLevel warn + +# Include module configuration: +IncludeOptional mods-enabled/*.load +IncludeOptional mods-enabled/*.conf + +# Include list of ports to listen on +Include ports.conf + + +# Sets the default security model of the Apache2 HTTPD server. It does +# not allow access to the root filesystem outside of /usr/share and /var/www. +# The former is used by web applications packaged in Debian, +# the latter may be used for local directories served by the web server. If +# your system is serving content from a sub-directory in /srv you must allow +# access here, or in any related virtual host. + + Options FollowSymLinks + AllowOverride None + Require all denied + + + + AllowOverride None + Require all granted + + + + Options Indexes FollowSymLinks + AllowOverride None + Require all granted + + +# +# Options Indexes FollowSymLinks +# AllowOverride None +# Require all granted +# + + + + +# AccessFileName: The name of the file to look for in each directory +# for additional configuration directives. See also the AllowOverride +# directive. +# +AccessFileName .htaccess + +# +# The following lines prevent .htaccess and .htpasswd files from being +# viewed by Web clients. +# + + Require all denied + + + +# +# The following directives define some format nicknames for use with +# a CustomLog directive. +# +# These deviate from the Common Log Format definitions in that they use %O +# (the actual bytes sent including headers) instead of %b (the size of the +# requested file), because the latter makes it impossible to detect partial +# requests. +# +# Note that the use of %{X-Forwarded-For}i instead of %h is not recommended. +# Use mod_remoteip instead. +# +LogFormat "%v:%p %{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined +LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined +LogFormat "%a %l %u %t \"%r\" %>s %O" common +LogFormat "%{Referer}i -> %U" referer +LogFormat "%{User-agent}i" agent + +# Include of directories ignores editors' and dpkg's backup files, +# see README.Debian for details. + +# Include generic snippets of statements +IncludeOptional conf-enabled/*.conf + +# Include the virtual host configurations: +IncludeOptional sites-enabled/*.conf + +# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/config/dev/apache2/conf-available/swag.conf b/config/dev/apache2/conf-available/swag.conf new file mode 100644 index 0000000..9d8511b --- /dev/null +++ b/config/dev/apache2/conf-available/swag.conf @@ -0,0 +1 @@ +RemoteIPHeader X-Forwarded-For \ No newline at end of file diff --git a/config/dev/apache2/sites-enabled/000-default.conf b/config/dev/apache2/sites-enabled/000-default.conf new file mode 100644 index 0000000..4509921 --- /dev/null +++ b/config/dev/apache2/sites-enabled/000-default.conf @@ -0,0 +1,32 @@ + + # The ServerName directive sets the request scheme, hostname and port that + # the server uses to identify itself. This is used when creating + # redirection URLs. In the context of virtual hosts, the ServerName + # specifies what hostname must appear in the request's Host: header to + # match this virtual host. For the default virtual host (this file) this + # value is not decisive as it is used as a last resort host regardless. + # However, you must set it for any further virtual host explicitly. + #ServerName www.example.com + + DocumentRoot /var/www/html/public + + # Ajout de la directive DirectoryIndex + DirectoryIndex index.php + # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, + # error, crit, alert, emerg. + # It is also possible to configure the loglevel for particular + # modules, e.g. + #LogLevel info ssl:warn + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + + # For most configuration files from conf-available/, which are + # enabled or disabled at a global level, it is possible to + # include a line for only one particular virtual host. For example the + # following line enables the CGI configuration for this host only + # after it has been globally disabled with "a2disconf". + #Include conf-available/serve-cgi-bin.conf + + +# vim: syntax=apache ts=4 sw=4 sts=4 sr noet 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 */; diff --git a/package.json b/package.json new file mode 100644 index 0000000..6f1dfeb --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "devDependencies": { + "sass": "^1.72.0", + "typescript": "^5.4.2" + }, + "dependencies": { + "sass": "^1.72.0", + "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": { + "build-prod": "npm run compile-scss && npm run compile-ts", + "build-dev": "npm run compile-scss && npm run compile-ts", + "build-demo": "npm run compile-scss && npm run compile-ts", + "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..1ced4f3 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ES2016", + "outDir": "app/public/assets/js", + "strict": true, + }, + "include": [ + "app/src/assets/TypeScript/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file