852 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			852 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<div class="home">
 | 
						|
    <h1>Mon CV</h1>
 | 
						|
    
 | 
						|
</br>
 | 
						|
<div class="homepanel">
 | 
						|
    <div class="row w-100">
 | 
						|
        <div class="hbox col-lg">
 | 
						|
            <h1><i class="fas fa-puzzle-piece"></i> Sections</h1>
 | 
						|
            <div class="cv-sections">
 | 
						|
 | 
						|
            <div class="row w-100">
 | 
						|
            <select id="cv-section-selector" class="cv-selector">
 | 
						|
                <option>Qui suis-je ?</option>
 | 
						|
                <option>Contact</option>
 | 
						|
                <option>Formations</option>
 | 
						|
                <option>Diplomes & Certifications</option>
 | 
						|
                <option>Passions et activités</option>
 | 
						|
                <option>Ma recherche de stage</option>
 | 
						|
            </select>
 | 
						|
            </div>
 | 
						|
            <div class="row w-100">
 | 
						|
            <textarea id="cv-section-textarea" class="cv-textarea">
 | 
						|
 | 
						|
            </textarea>
 | 
						|
            </div>
 | 
						|
 | 
						|
            <div class="row w-100">
 | 
						|
                <button id="cv-section-save" class="cv-save col-lg-2"><i class="fa fa-save"></i> Sauvegarder</button>
 | 
						|
            </div>
 | 
						|
            <div class="row w-100">
 | 
						|
                
 | 
						|
                <p id="cv-section-info" class="cv-info" style="color:rgb(255, 48, 48)"></p>
 | 
						|
            </div>
 | 
						|
            
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
        <div class="hbox col-lg">
 | 
						|
          
 | 
						|
              
 | 
						|
            <h1><i class="fa fa-gear"></i> Projets</h1>
 | 
						|
            <div class="cv-sections">
 | 
						|
 | 
						|
                <div class="row w-100">
 | 
						|
                <select id="cv-project-selector" class="col-lg-10 cv-selector">
 | 
						|
                </select>
 | 
						|
                <button id="cv-project-add" class="col-lg-1 cv-plus"><i class="fa fa-plus"></i></button>
 | 
						|
                </div>
 | 
						|
                
 | 
						|
                <div class="row w-100">
 | 
						|
                <textarea id="cv-project-textarea" class="cv-textarea">
 | 
						|
    
 | 
						|
                </textarea>
 | 
						|
                </div>
 | 
						|
                <div class="row cv-upload-section">
 | 
						|
                    <p class="col-lg-8" style="font-size: 14px;">Image : <span id="cv-m-upload-name">Aucune image !</span></p>
 | 
						|
                    <button id="cv-m-upload-btn" style="margin-left: 10%;" class="col-lg-2 cv-upload"><i class="fa fa-upload"></i> Upload</button>
 | 
						|
                    <input id='cv-m-upload-file' type='file' hidden/>
 | 
						|
                    
 | 
						|
                </div>
 | 
						|
    
 | 
						|
                <div class="row w-100">
 | 
						|
                    <button id="cv-project-save" class="cv-save col-lg-2"><i class="fa fa-save"></i> Sauvegarder</button>
 | 
						|
                    <button id="cv-project-del" class="cv-del col-lg-2"><i class="fa fa-trash"></i> Effacer</button>
 | 
						|
                </div>
 | 
						|
                <div class="row w-100">
 | 
						|
                
 | 
						|
                    <p id="cv-project-info" class="cv-info" style="color:rgb(255, 48, 48)"></p>
 | 
						|
                </div>
 | 
						|
                
 | 
						|
            </div>
 | 
						|
            
 | 
						|
        </div>
 | 
						|
        
 | 
						|
         
 | 
						|
    </div>
 | 
						|
    <div class="row w-100">
 | 
						|
        <div class="hbox col-lg">
 | 
						|
          
 | 
						|
              
 | 
						|
            <h1><i class="fa fa-signal"></i> Statistiques</h1>
 | 
						|
            <p>Coming soon ...</p>
 | 
						|
            
 | 
						|
         </div>
 | 
						|
    </div>
 | 
						|
   
 | 
						|
 | 
						|
</div>
 | 
						|
 | 
						|
</div>
 | 
						|
 | 
						|
<dialog class="cv_addproject" id="cv-project-dialog">
 | 
						|
    <h1><i class="fa fa-project-diagram"></i> Créer un projet</h1>
 | 
						|
        <p>Nom du projet :</p>
 | 
						|
        <input class="inp" id="cv-project-add-input" type="text">
 | 
						|
        <div style="color: rgb(255, 76, 76);" id="cv-project-add-info"></div>
 | 
						|
    </div>
 | 
						|
    <div class="cv-upload-section">
 | 
						|
        <p style="font-size: 14px;">Image : <span id="cv-upload-name">NULL_NAME</span> <button id="cv-upload-btn" style="margin-left: 10%;" class="cv-upload"><i class="fa fa-upload"></i> Upload</button></p>
 | 
						|
        <input id='cv-upload-file' type='file' hidden/>
 | 
						|
        
 | 
						|
    </div>
 | 
						|
    <button onclick="getPage('cv.html')" id="cv-project-add-close" class="cv_add_close">Annuler</button>
 | 
						|
    <button id="cv-project-add-confirm" class="cv_add_confirm">Ajouter</button>
 | 
						|
 | 
						|
</dialog>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<script>
 | 
						|
    if(typeof checkDelare == "undefined") {
 | 
						|
        const checkDelare = true;
 | 
						|
 | 
						|
        const sectionTextArea = document.getElementById("cv-section-textarea")
 | 
						|
        const sectionSelector = document.getElementById("cv-section-selector")
 | 
						|
        const sectionSave = document.getElementById("cv-section-save")
 | 
						|
        const sectionInfo = document.getElementById("cv-section-info")
 | 
						|
 | 
						|
        const projectTextArea = document.getElementById("cv-project-textarea")
 | 
						|
        const projectSelector = document.getElementById("cv-project-selector")
 | 
						|
        const projectSave = document.getElementById("cv-project-save")
 | 
						|
        const projectInfo = document.getElementById("cv-project-info")
 | 
						|
        const projectDelete = document.getElementById("cv-project-del")
 | 
						|
        const projectAdd = document.getElementById("cv-project-add")
 | 
						|
        const projectDialog = document.getElementById("cv-project-dialog") 
 | 
						|
        const projectAddInput = document.getElementById("cv-project-add-input")
 | 
						|
        const projectAddConfirm = document.getElementById("cv-project-add-confirm")
 | 
						|
        const projectAddInfo = document.getElementById("cv-project-add-info")
 | 
						|
 | 
						|
        const projectUploadFile = document.getElementById("cv-upload-file")
 | 
						|
        const projectUploadBtn = document.getElementById("cv-upload-btn")
 | 
						|
        const projectUploadName = document.getElementById("cv-upload-name")
 | 
						|
 | 
						|
        const eprojectUploadFile = document.getElementById("cv-m-upload-file")
 | 
						|
        const eprojectUploadBtn = document.getElementById("cv-m-upload-btn")
 | 
						|
        const eprojectUploadName = document.getElementById("cv-m-upload-name")
 | 
						|
 | 
						|
        var sectionSelectedMD = null;
 | 
						|
        var projectSelectedMD = null;
 | 
						|
 | 
						|
        loadText(sectionTextArea, "WHOAMI")
 | 
						|
        getProjects(projectSelector)
 | 
						|
 | 
						|
        projectAddConfirm.addEventListener("click", () => {
 | 
						|
 | 
						|
            projectAddInfo.innerHTML = ""
 | 
						|
 | 
						|
            
 | 
						|
 | 
						|
            const refusedChar = ['\\','/' ,':' ,'*','?' ,'"','<','>','|']
 | 
						|
            var wrongName = true;
 | 
						|
 | 
						|
            for(var char of refusedChar) {
 | 
						|
 | 
						|
                console.log(wrongName)
 | 
						|
 | 
						|
                if(projectAddInput.value.includes(char)) {
 | 
						|
                    wrongName = false;
 | 
						|
 | 
						|
                } 
 | 
						|
            }
 | 
						|
 | 
						|
            if(wrongName == true && projectAddInput.value != "" && projectAddInput.value != "WHOAMI" && projectAddInput.value != "CONTACT" && projectAddInput.value != "FORMATION" && projectAddInput.value != "DIPLOME" && projectAddInput.value != "LOBBIES" && projectAddInput.value != "FIND") {
 | 
						|
 | 
						|
                fetch('/cv', {
 | 
						|
                method: 'POST',
 | 
						|
                redirect: 'follow',
 | 
						|
                headers: {
 | 
						|
                    'Accept': 'application/json',
 | 
						|
                    'Content-Type': 'application/json'
 | 
						|
                },
 | 
						|
                body: JSON.stringify({"request":"add", "value": projectAddInput.value})
 | 
						|
                })
 | 
						|
                .then(response => response.json())
 | 
						|
                .then(response => res(response))
 | 
						|
 | 
						|
                function res(response) {
 | 
						|
                    if(response.result == "failed") {
 | 
						|
                        content.innerHTML = ' <h1 style="color:red;"><i style="color:yellow; font-size: 2vw;" class="fa fa-warning"></i>  Erreur de chargement des données - Erreur : ' + response.content  + '</h1>'
 | 
						|
                        console.log("FAILED")
 | 
						|
                    
 | 
						|
                    } else if(response.result == "success") {
 | 
						|
 | 
						|
                        if(response.content == "ERROR_NOT_PERMITTED") {
 | 
						|
                            projectAddInfo.innerHTML = "Erreur, le fichier n'a pas été ajouté correctement !"
 | 
						|
 | 
						|
                        } else {
 | 
						|
                            projectDialog.close()
 | 
						|
                            getProjects(projectSelector)
 | 
						|
                            loadText(projectTextArea, projectAddInput.value)
 | 
						|
                            projectSelector.value = projectAddInput.value
 | 
						|
                        }
 | 
						|
                        
 | 
						|
                    }
 | 
						|
 | 
						|
                }
 | 
						|
 | 
						|
                if(projectUploadFile.files.length > 0) {
 | 
						|
 | 
						|
                    const file_acc = new FormData();
 | 
						|
                    file_acc.append("apic", projectUploadFile.files[0])
 | 
						|
 | 
						|
                    fetch('/upload', {
 | 
						|
                    method: 'POST',
 | 
						|
                    mode:"cors",
 | 
						|
                    cache:"no-cache",
 | 
						|
                    credentials:"same-origin",
 | 
						|
                    headers: {
 | 
						|
                        "uploadforproject": projectAddInput.value
 | 
						|
 | 
						|
                    },
 | 
						|
                    referrerPolicy:"no-referrer",
 | 
						|
                    redirect: 'follow',
 | 
						|
                    body: file_acc
 | 
						|
                }).then(response => response.json())
 | 
						|
                .then(response => resupload(response))
 | 
						|
 | 
						|
                function resupload(response) {
 | 
						|
 | 
						|
 | 
						|
                    if(response.result == "ERROR") {
 | 
						|
                        projectInfo.innerHTML = "L'image n'a pas été upload !"
 | 
						|
 | 
						|
                    
 | 
						|
                    } 
 | 
						|
 | 
						|
                    
 | 
						|
 | 
						|
                } 
 | 
						|
                   
 | 
						|
                }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
            } else {
 | 
						|
 | 
						|
                projectAddInfo.innerHTML = "Ce nom n'est pas autorisé !"
 | 
						|
            }
 | 
						|
        })
 | 
						|
 | 
						|
        projectAdd.addEventListener("click", () => {
 | 
						|
 | 
						|
            projectDialog.showModal()
 | 
						|
 | 
						|
            projectAddInput.value = ""
 | 
						|
            projectUploadName.innerHTML = "Aucune image."
 | 
						|
            projectUploadFile.value = null;
 | 
						|
        
 | 
						|
 | 
						|
        })
 | 
						|
 | 
						|
        projectUploadFile.addEventListener("change", () => {
 | 
						|
 | 
						|
            projectUploadName.innerHTML = projectUploadFile.files[0].name
 | 
						|
 | 
						|
        })
 | 
						|
 | 
						|
 | 
						|
        projectUploadBtn.addEventListener("click", () => {
 | 
						|
 | 
						|
            projectUploadFile.click()
 | 
						|
        })
 | 
						|
 | 
						|
        eprojectUploadBtn.addEventListener("click", () => {
 | 
						|
 | 
						|
            eprojectUploadFile.click()
 | 
						|
        })
 | 
						|
 | 
						|
        eprojectUploadFile.addEventListener("change", () => {
 | 
						|
 | 
						|
            eprojectUploadName.innerHTML = eprojectUploadFile.files[0].name
 | 
						|
 | 
						|
                if(eprojectUploadFile.files.length > 0) {
 | 
						|
 | 
						|
                const file_acc = new FormData();
 | 
						|
                file_acc.append("apic", eprojectUploadFile.files[0])
 | 
						|
 | 
						|
                fetch('/upload', {
 | 
						|
                    method: 'POST',
 | 
						|
                    mode:"cors",
 | 
						|
                    cache:"no-cache",
 | 
						|
                    credentials:"same-origin",
 | 
						|
                    headers: {
 | 
						|
                        "uploadforproject": projectSelector.value
 | 
						|
 | 
						|
                    },
 | 
						|
                    referrerPolicy:"no-referrer",
 | 
						|
                    redirect: 'follow',
 | 
						|
                    body: file_acc
 | 
						|
                }).then(response => response.json())
 | 
						|
                .then(response => resupload(response))
 | 
						|
 | 
						|
                function resupload(response) {
 | 
						|
 | 
						|
 | 
						|
                    if(response.result == "ERROR") {
 | 
						|
                        projectInfo.innerHTML = "L'image n'a pas été upload !"
 | 
						|
 | 
						|
 | 
						|
                    } else {
 | 
						|
 | 
						|
                        projectInfo.innerHTML = "<span style='color:rgb(130, 255, 163); '>L'image a été correctement upload !</span>"
 | 
						|
                    }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
                } 
 | 
						|
 | 
						|
            }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
        })
 | 
						|
        
 | 
						|
 | 
						|
        projectDelete.addEventListener("click", () => {
 | 
						|
 | 
						|
            const opt = projectSelector.value
 | 
						|
 | 
						|
            deleteProject(opt)
 | 
						|
 | 
						|
        })
 | 
						|
 | 
						|
        sectionSelector.addEventListener("change", () => {
 | 
						|
            const opt = sectionSelector.value
 | 
						|
 | 
						|
            if(opt == "Qui suis-je ?") {
 | 
						|
                loadText(sectionTextArea, "WHOAMI")
 | 
						|
                
 | 
						|
            } else if(opt == "Contact") {
 | 
						|
                loadText(sectionTextArea, "CONTACT")
 | 
						|
         
 | 
						|
            } else if(opt == "Formations") {
 | 
						|
                loadText(sectionTextArea, "FORMATION")
 | 
						|
               
 | 
						|
            } else if(opt == "Diplomes & Certifications") {
 | 
						|
                loadText(sectionTextArea, "DIPLOME")
 | 
						|
             
 | 
						|
            } else if(opt == "Passions et activités") {
 | 
						|
                loadText(sectionTextArea, "LOBBIES")
 | 
						|
               
 | 
						|
            } else if(opt == "Ma recherche de stage") {
 | 
						|
                loadText(sectionTextArea, "FIND")
 | 
						|
              
 | 
						|
            }
 | 
						|
 | 
						|
        })
 | 
						|
 | 
						|
        
 | 
						|
 | 
						|
 | 
						|
        projectSelector.addEventListener("change", () => {
 | 
						|
            const opt = projectSelector.value
 | 
						|
 | 
						|
            loadText(projectTextArea, opt)
 | 
						|
 | 
						|
        })
 | 
						|
 | 
						|
        sectionSave.addEventListener("click", () => {
 | 
						|
 | 
						|
            sectionInfo.innerHTML = ""
 | 
						|
 | 
						|
       
 | 
						|
 | 
						|
            fetch('/cv', {
 | 
						|
                method: 'POST',
 | 
						|
                redirect: 'follow',
 | 
						|
                headers: {
 | 
						|
                    'Accept': 'application/json',
 | 
						|
                    'Content-Type': 'application/json'
 | 
						|
                },
 | 
						|
                body: JSON.stringify({"request":"set", "value": sectionTextArea.value, "type": sectionSelectedMD})
 | 
						|
                })
 | 
						|
                .then(response => response.json())
 | 
						|
                .then(response => res(response))
 | 
						|
 | 
						|
                function res(response) {
 | 
						|
                    if(response.result == "failed") {
 | 
						|
                        content.innerHTML = ' <h1 style="color:red;"><i style="color:yellow; font-size: 2vw;" class="fa fa-warning"></i>  Erreur de chargement des données - Erreur : ' + response.content  + '</h1>'
 | 
						|
                        console.log("FAILED")
 | 
						|
                    
 | 
						|
                    } else if(response.result == "success") {
 | 
						|
 | 
						|
                        if(response.content == "ERROR_NOT_PERMITTED") {
 | 
						|
                            sectionInfo.innerHTML = "Erreur, le fichier n'a pas été sauvegardé correctement !"
 | 
						|
 | 
						|
                        } else {
 | 
						|
                            sectionInfo.innerHTML = "<span style='color:rgb(130, 255, 163); '>Le fichier a été sauvegardé avec succès !</span>"
 | 
						|
 | 
						|
                        }
 | 
						|
                        
 | 
						|
                    }
 | 
						|
 | 
						|
                }
 | 
						|
 | 
						|
        })
 | 
						|
 | 
						|
        projectSave.addEventListener("click", () => {
 | 
						|
 | 
						|
        projectInfo.innerHTML = ""
 | 
						|
 | 
						|
 | 
						|
 | 
						|
        fetch('/cv', {
 | 
						|
            method: 'POST',
 | 
						|
            redirect: 'follow',
 | 
						|
            headers: {
 | 
						|
                'Accept': 'application/json',
 | 
						|
                'Content-Type': 'application/json'
 | 
						|
            },
 | 
						|
            body: JSON.stringify({"request":"set", "value": projectTextArea.value, "type": projectSelectedMD})
 | 
						|
            })
 | 
						|
            .then(response => response.json())
 | 
						|
            .then(response => res(response))
 | 
						|
 | 
						|
            function res(response) {
 | 
						|
                if(response.result == "failed") {
 | 
						|
                    content.innerHTML = ' <h1 style="color:red;"><i style="color:yellow; font-size: 2vw;" class="fa fa-warning"></i>  Erreur de chargement des données - Erreur : ' + response.content  + '</h1>'
 | 
						|
                    console.log("FAILED")
 | 
						|
                
 | 
						|
                } else if(response.result == "success") {
 | 
						|
 | 
						|
                    if(response.content == "ERROR_NOT_PERMITTED") {
 | 
						|
                        projectInfo.innerHTML = "Erreur, le fichier n'a pas été sauvegardé correctement !"
 | 
						|
 | 
						|
                    } else {
 | 
						|
                        projectInfo.innerHTML = "<span style='color:rgb(130, 255, 163); '>Le fichier a été sauvegardé avec succès !</span>"
 | 
						|
 | 
						|
                    }
 | 
						|
                    
 | 
						|
                }
 | 
						|
 | 
						|
            }
 | 
						|
 | 
						|
        })
 | 
						|
 | 
						|
 | 
						|
        loadText(sectionTextArea, "WHOAMI")
 | 
						|
        
 | 
						|
        function loadText(textArea, requestElement) {
 | 
						|
 | 
						|
            sectionSelectedMD = requestElement
 | 
						|
            projectSelectedMD = projectSelector.value
 | 
						|
            
 | 
						|
 | 
						|
                fetch('/cv', {
 | 
						|
                    method: 'POST',
 | 
						|
                    redirect: 'follow',
 | 
						|
                    headers: {
 | 
						|
                        'Accept': 'application/json',
 | 
						|
                        'Content-Type': 'application/json'
 | 
						|
                    },
 | 
						|
                    body: JSON.stringify({"request":"get", "value": requestElement})
 | 
						|
                })
 | 
						|
                .then(response => response.json())
 | 
						|
                .then(response => res(response))
 | 
						|
 | 
						|
                function res(response) {
 | 
						|
                    if(response.result == "failed") {
 | 
						|
                        content.innerHTML = ' <h1 style="color:red;"><i style="color:yellow; font-size: 2vw;" class="fa fa-warning"></i>  Erreur de chargement des données - Erreur : ' + response.content  + '</h1>'
 | 
						|
                        console.log("FAILED")
 | 
						|
                    
 | 
						|
                    } else if(response.result == "success") {
 | 
						|
 | 
						|
                        textArea.value = response.content
 | 
						|
                        
 | 
						|
                    }
 | 
						|
 | 
						|
                }
 | 
						|
            
 | 
						|
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        function getProjects(selector) {
 | 
						|
 | 
						|
            fetch('/cv', {
 | 
						|
                    method: 'POST',
 | 
						|
                    redirect: 'follow',
 | 
						|
                    headers: {
 | 
						|
                        'Accept': 'application/json',
 | 
						|
                        'Content-Type': 'application/json'
 | 
						|
                    },
 | 
						|
                    body: JSON.stringify({"request":"get-projects"})
 | 
						|
                })
 | 
						|
                .then(response => response.json())
 | 
						|
                .then(response => res(response))
 | 
						|
 | 
						|
                function res(response) {
 | 
						|
                    if(response.result == "failed") {
 | 
						|
                        content.innerHTML = ' <h1 style="color:red;"><i style="color:yellow; font-size: 2vw;" class="fa fa-warning"></i>  Erreur de chargement des données - Erreur : ' + response.content  + '</h1>'
 | 
						|
                        console.log("FAILED")
 | 
						|
                    
 | 
						|
                    } else if(response.result == "success") {
 | 
						|
 | 
						|
                        const projectList = response.content
 | 
						|
                        var projectSelectorInner = new Array();
 | 
						|
 | 
						|
                        for(var projet of projectList) {
 | 
						|
 | 
						|
                            projectSelectorInner.push("<option>" + projet + "</option>")
 | 
						|
                         
 | 
						|
                        }
 | 
						|
 | 
						|
                        if(projectList.length == 0) {
 | 
						|
 | 
						|
                            projectInfo.innerHTML = "<span style='color: white;'>Aucun projet</span>"
 | 
						|
                            projectTextArea.innerHTML = 'Aucun projet n\'est disponible'
 | 
						|
                        }
 | 
						|
                        
 | 
						|
 | 
						|
                        selector.innerHTML = projectSelectorInner.join("")
 | 
						|
                        loadText(projectTextArea, selector.value)
 | 
						|
                    }
 | 
						|
 | 
						|
                }
 | 
						|
            
 | 
						|
                        
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        function deleteProject(opt) {
 | 
						|
 | 
						|
                fetch('/cv', {
 | 
						|
                    method: 'POST',
 | 
						|
                    redirect: 'follow',
 | 
						|
                    headers: {
 | 
						|
                        'Accept': 'application/json',
 | 
						|
                        'Content-Type': 'application/json'
 | 
						|
                    },
 | 
						|
                    body: JSON.stringify({"request":"del", "value": opt})
 | 
						|
                })
 | 
						|
                .then(response => response.json())
 | 
						|
                .then(response => res(response))
 | 
						|
 | 
						|
                function res(response) {
 | 
						|
                    if(response.result == "failed") {
 | 
						|
                        content.innerHTML = ' <h1 style="color:red;"><i style="color:yellow; font-size: 2vw;" class="fa fa-warning"></i>  Erreur de chargement des données - Erreur : ' + response.content  + '</h1>'
 | 
						|
                        console.log("FAILED")
 | 
						|
                    
 | 
						|
                    } else if(response.result == "success") {
 | 
						|
 | 
						|
                        if(response.content == "ERROR_NOT_PERMITTED") {
 | 
						|
                            projectInfo.innerHTML = "Erreur, le fichier n'a pas été supprimé correctement !"
 | 
						|
 | 
						|
                        } else {
 | 
						|
                            projectInfo.innerHTML = "<span style='color:rgb(130, 255, 163); '>Le fichier a été supprimé avec succès !</span>"
 | 
						|
 | 
						|
                        }
 | 
						|
 | 
						|
                        getProjects(projectSelector)
 | 
						|
                        
 | 
						|
                    }
 | 
						|
 | 
						|
                }
 | 
						|
 | 
						|
        }
 | 
						|
    }
 | 
						|
</script>
 | 
						|
 | 
						|
 | 
						|
<!-- Style-->
 | 
						|
<style>
 | 
						|
 | 
						|
.cv_addproject {
 | 
						|
 | 
						|
border-radius: 1vw;
 | 
						|
border-color: transparent;
 | 
						|
background-color: rgb(80, 80, 80);
 | 
						|
color: white;
 | 
						|
text-align: center;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.cv_add_close {
 | 
						|
 | 
						|
border-radius: 1vw;
 | 
						|
border-color: rgb(255, 48, 48);
 | 
						|
border-width: 1%;
 | 
						|
border-style: solid;
 | 
						|
color: white;
 | 
						|
background-color: transparent;
 | 
						|
transition: all 0.2s ease 0s;
 | 
						|
margin: 0.5vw;
 | 
						|
padding: 0.5vw;
 | 
						|
font-size: 1vw;
 | 
						|
}
 | 
						|
 | 
						|
.cv_add_close:hover {
 | 
						|
box-shadow: 1px 1px 10px rgb(255, 48, 48);
 | 
						|
background-color: rgb(255, 48, 48);
 | 
						|
color: black;
 | 
						|
}
 | 
						|
 | 
						|
.cv_add_close:active {
 | 
						|
box-shadow: none;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.cv_add_confirm {
 | 
						|
 | 
						|
border-radius: 1vw;
 | 
						|
border-color: rgb(0, 174, 255);
 | 
						|
border-width: 1%;
 | 
						|
border-style: solid;
 | 
						|
color: white;
 | 
						|
background-color: transparent;
 | 
						|
transition: all 0.2s ease 0s;
 | 
						|
margin: 0.5vw;
 | 
						|
padding: 0.5vw;
 | 
						|
font-size: 1vw;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.cv_add_confirm:hover {
 | 
						|
box-shadow: 1px 1px 10px rgb(0, 174, 255);
 | 
						|
background-color: rgb(0, 174, 255);
 | 
						|
color: black;
 | 
						|
}
 | 
						|
 | 
						|
.cv_add_confirm:active {
 | 
						|
box-shadow: none;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.inp {
 | 
						|
 | 
						|
border-style: hidden;
 | 
						|
border-radius: 1vw;
 | 
						|
padding: 0.2vw;
 | 
						|
padding-left: 1vw;
 | 
						|
transition: all 0.2s ease 0s;
 | 
						|
margin-bottom: 0.5vw;
 | 
						|
width: 100%;
 | 
						|
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
.inp:hover {
 | 
						|
 | 
						|
box-shadow: 2px 2px 5px rgba(255, 255, 255, 0.477) ;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
.inp:focus {
 | 
						|
 | 
						|
box-shadow: 5px 5px 5px rgba(0, 174, 255, 0.477) ;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
.cv-info {
 | 
						|
 | 
						|
    margin-top: 5%;
 | 
						|
}
 | 
						|
 | 
						|
.cv-upload-section {
 | 
						|
 | 
						|
    align-items: center;
 | 
						|
    margin-top: 3%;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.cv-selector {
 | 
						|
 | 
						|
    border-radius: 1vw;
 | 
						|
    border-color: rgb(0, 174, 255);
 | 
						|
    border-width: 1%;
 | 
						|
    border-style: solid;
 | 
						|
    color: white;
 | 
						|
    background-color: transparent;
 | 
						|
    transition: all 0.2s ease 0s;
 | 
						|
    font-size: 0.7vw;
 | 
						|
    padding: 0.5vw;
 | 
						|
    margin-bottom: 3%;
 | 
						|
    
 | 
						|
 | 
						|
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.cv-selector:hover {
 | 
						|
    box-shadow: 1px 1px 10px rgb(0, 174, 255);
 | 
						|
    background-color: rgb(0, 174, 255);
 | 
						|
    color: black;
 | 
						|
}
 | 
						|
 | 
						|
.cv-selector:active {
 | 
						|
    box-shadow: none;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.cv-selector option {
 | 
						|
 | 
						|
    background-color: rgb(80, 80, 80);
 | 
						|
    color: white;
 | 
						|
}
 | 
						|
 | 
						|
.cv-upload {
 | 
						|
 | 
						|
border-radius: 1vw;
 | 
						|
border-color: rgb(0, 174, 255);
 | 
						|
border-width: 1%;
 | 
						|
border-style: solid;
 | 
						|
color: white;
 | 
						|
background-color: transparent;
 | 
						|
transition: all 0.2s ease 0s;
 | 
						|
font-size: 0.7vw;
 | 
						|
padding: 0.5vw;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.cv-upload:hover {
 | 
						|
box-shadow: 1px 1px 10px rgb(0, 174, 255);
 | 
						|
background-color: rgb(0, 174, 255);
 | 
						|
color: black;
 | 
						|
}
 | 
						|
 | 
						|
.cv-upload:active {
 | 
						|
box-shadow: none;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.cv-save{
 | 
						|
 | 
						|
    border-radius: 1vw;
 | 
						|
    border-color: rgb(0, 174, 255);
 | 
						|
    border-width: 1%;
 | 
						|
    border-style: solid;
 | 
						|
    color: white;
 | 
						|
    background-color: transparent;
 | 
						|
    transition: all 0.2s ease 0s;
 | 
						|
    font-size: 0.7vw;
 | 
						|
    padding: 0.5vw;
 | 
						|
    margin-top: 3%;
 | 
						|
    margin-right: 3%;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.cv-save:hover {
 | 
						|
    box-shadow: 1px 1px 10px rgb(0, 174, 255);
 | 
						|
    background-color: rgb(0, 174, 255);
 | 
						|
    color: black;
 | 
						|
}
 | 
						|
 | 
						|
.cv-save:active {
 | 
						|
    box-shadow: none;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.cv-plus {
 | 
						|
 | 
						|
border-radius: 1vw;
 | 
						|
border-color: rgb(0, 174, 255);
 | 
						|
border-width: 1%;
 | 
						|
border-style: solid;
 | 
						|
color: white;
 | 
						|
background-color: transparent;
 | 
						|
transition: all 0.2s ease 0s;
 | 
						|
font-size: 0.7vw;
 | 
						|
padding: 0.5vw;
 | 
						|
margin-bottom: 3%;
 | 
						|
margin-left: 2%;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.cv-plus:hover {
 | 
						|
box-shadow: 1px 1px 10px rgb(0, 174, 255);
 | 
						|
background-color: rgb(0, 174, 255);
 | 
						|
color: black;
 | 
						|
}
 | 
						|
 | 
						|
.cv-plus:active {
 | 
						|
box-shadow: none;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
.cv-del {
 | 
						|
 | 
						|
    border-radius: 1vw;
 | 
						|
    border-color: rgb(255, 48, 48);
 | 
						|
    border-width: 1%;
 | 
						|
    border-style: solid;
 | 
						|
    color: white;
 | 
						|
    background-color: transparent;
 | 
						|
    transition: all 0.2s ease 0s;
 | 
						|
    font-size: 0.7vw;
 | 
						|
    padding: 0.5vw;
 | 
						|
    margin-top: 3%;
 | 
						|
    margin-right: 3%;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.cv-del:hover {
 | 
						|
    box-shadow: 1px 1px 10px rgb(255, 48, 48);
 | 
						|
    background-color: rgb(255, 48, 48);
 | 
						|
    color: black;
 | 
						|
}
 | 
						|
 | 
						|
.cv-del:active {
 | 
						|
    box-shadow: none;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.cv-textarea {
 | 
						|
 | 
						|
    border-radius: 1vw;
 | 
						|
    padding: 3%;
 | 
						|
    color: black;
 | 
						|
    height: 15vw;
 | 
						|
    
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
.cv-sections {
 | 
						|
 | 
						|
    padding: 2% !important;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
.hbox h1 {
 | 
						|
 | 
						|
    font-size: large;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
table  {
 | 
						|
    color: white;
 | 
						|
    
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
.hbox {
 | 
						|
    
 | 
						|
    margin: 1%;
 | 
						|
    padding: 1%;
 | 
						|
    background-color: rgb(80, 80, 80);
 | 
						|
    border-radius: 1vw;
 | 
						|
    box-shadow: 5px 5px 5px rgba(80, 80, 80, 0.477) ;
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
</style> |