basti1012.bplaced.net

Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
    Hiermit können sie alle EXIF Daten auslesen, die angegeben sind. Auch die Geodaten des Bildes

    Code

                                        
                                    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <!--
        <link rel="stylesheet" href="https://unpkg.com/boxicons@2.0.9/css/boxicons.min.css">
    -->
     <style>
        
    ::-webkit-scrollbar {
        width: 10px;
        transition: .5s;
    }
    ::-webkit-scrollbar-track {
        background: transparent;
        border-radius: 10px;
    }
    ::-webkit-scrollbar-thumb {
        background: #4d4d4d; 
        transition: .5s;
        border-radius: 10px;
    }
    ::-webkit-scrollbar-thumb:hover {
        background: black; 
    } 
    *,::before,::after{
        box-sizing: border-box;
    }
    body {
        background: whitesmoke;
        font-family: 'Open Sans', sans-serif;
        margin: 0;
      }
    h1 {
        font-size: 21px;
        text-align: center;
        margin: 20px 0 20px;
    }
    h2 {
        font-size: 19px;
        text-align: center;
        margin: 20px 0 20px;
        color: grey;
    }
      h1 small {
        display: block;
        font-size: 15px;
        padding-top: 8px;
        color: gray;
    }
    a{
        appearance: unset;
        border: unset;
        text-decoration: unset;
    }
    #imageUpload {
        display: none;
    }
    label {
        display: inline-block;
        cursor: pointer;
        transition: all 0.2s ease-in-out;
        color: black;
    }
    label:hover::after {
        opacity: 1;
    }
    label::after {
        content: "";
        display: block;
        padding-top: 3px;
        border-bottom: 3px solid black;
        transition: opacity .5s ease;
        opacity: 0;
    }
    .avatar-preview {
        width: 50px;
        height: 50px;
        position: relative;
        border-radius: 25%;
        border: 6px solid #ffffff;
        box-shadow: 0px 2px 4px 0px rgb(0 0 0 / 10%);
        display: inline-block;
    }
    .avatar-preview > div {
        width: 100%;
        height: 100%;
        border-radius: 25%;
        background-size: cover;
        background-repeat: no-repeat;
        background-position: center;
    }
    .fadein {
        opacity: 1 !important;
        transition: .5s;
    }  
    .main_con{
        display: flex;
        align-items: center;
        width: 100%;
        height: 100%;
        position: fixed;
    }
    .first_con{
        width: 100%;
        max-width: 700px;
        background-color: white;
        border-radius: 25px;
        border: 3px solid black;
        margin: 0 auto;
        padding: 40px;
    }
    .drag_box{
        width: 90%;
        height: 250px;
        margin-left: 5%;
        background-color: whitesmoke;
        border-radius: 25px;
        margin-top: 35px;
        border: 3px dashed black;
        text-align: center;
    }
    .upload_icon{
        font-size: 7rem;
        padding-top: 35px;
    }
    .uploaded_box{
        margin-top: 50px;
    }
    .card_con{
        max-height: 250px;
        overflow-y: auto;
    }
    .uploaded_card{
        width: 90%;
        margin-left: 5%;
        margin-top: 35px;
        margin-bottom: 35px;
        border-radius: 25px;
        background-color: whitesmoke;
        text-align: left;
        padding: 25px;
        display: flex;
        position: relative;
        border: 3px solid black;
    }
    .img_values{
        display: inline-block;
        vertical-align: super;
        margin-left: 15px;
        width: calc(100% - 150px);
        margin-right: 50px;
    }
    .title {
        font-size: 19px;
        margin-top: 5px;
        text-overflow: ellipsis;
        white-space: nowrap;
        overflow: hidden;
    }
    .cancel_card{
        display: flex;
        background: white;
        padding: 10px;
        border-radius: 10px;
        position: absolute;
        right: 25px;
        top: 32px;
        border: 3px solid black;
        cursor: pointer;
        transition: .5s;
    }
    .cancel_card:hover{
        background-color: black;
        color: white;
    }
    .button {
        background-color: #2b272f;
        padding: 20px 30px;
        font-size: 19px;
        text-align: center;
        cursor: pointer;
        border: none;
        text-decoration: none;
        border-radius: 5px;
        color: white;
        border: 3px solid transparent;
        transition: .5s;
        border-radius: 15px;
        margin: 35px;
        margin-top: 25px;
        margin-bottom: unset;
    }
    .button:hover {
        border: 3px solid #000000;
        background: black;
    }
    .analyse_active{
        border: 3px solid #000000;
        background: black;  
    }
    .dimmer{
        position: fixed;
        background-color: #212025c9;
        height: 100%;
        width: 100%;
        z-index: 100;
        display: none;
        align-items: center;
    }
    .popup{
        background: white;
        width: 50%;
        margin: 0 auto;
        border-radius: 20px;
        border: 3px solid black;
        padding: 25px;
        max-width: 800px;
    }
    .popup_letters_con{
        height: 200px;
        display: flex;
        flex-wrap: wrap;
        align-items: flex-start;
        justify-content: center;
        margin-bottom: 80px;
    }
    .popup .subtitle {
        margin: unset;
        padding: 50px;
        padding-bottom: unset;
    }
    .popup .text {
        padding: 50px;
        margin: unset;
        padding-top: 5px;
    }
    
    .spinner {
        -webkit-animation: rotator 1.4s linear infinite;
        animation: rotator 1.4s linear infinite;
        width: 30px;
        height: 30px;
    }
    .path {
        stroke-dasharray: 187;
        stroke-dashoffset: 0;
        transform-origin: center;
        -webkit-animation: dash 1.4s ease-in-out infinite, colors 5.6s ease-in-out infinite;
        animation: dash 1.4s ease-in-out infinite, colors 5.6s ease-in-out infinite;
    }
    @-webkit-keyframes rotator {
      0% {
        transform: rotate(0deg);
      }
      100% {
        transform: rotate(270deg);
      }
    }
    @keyframes rotator {
      0% {
        transform: rotate(0deg);
      }
      100% {
        transform: rotate(270deg);
      }
    }
    @-webkit-keyframes colors {
      0% {
        stroke: white;
      }
      25% {
        stroke: white;
      }
      50% {
        stroke: white;
      }
      75% {
        stroke: white;
      }
      100% {
        stroke: white;
      }
    }
    @keyframes colors {
      0% {
        stroke: white;
      }
      25% {
        stroke: white;
      }
      50% {
        stroke: white;
      }
      75% {
        stroke: white;
      }
      100% {
        stroke: white;
      }
    }
    @-webkit-keyframes dash {
      0% {
        stroke-dashoffset: 187;
      }
      50% {
        stroke-dashoffset: 46.75;
        transform: rotate(135deg);
      }
      100% {
        stroke-dashoffset: 187;
        transform: rotate(450deg);
      }
    }
    @keyframes dash {
      0% {
        stroke-dashoffset: 187;
      }
      50% {
        stroke-dashoffset: 46.75;
        transform: rotate(135deg);
      }
      100% {
        stroke-dashoffset: 187;
        transform: rotate(450deg);
      }
    }
    .second_con{
        width: 80%;
        background-color: white;
        border-radius: 25px;
        border: 3px solid black;
        margin: 0 auto;
        padding: 40px;
        height: 80%;
        display: none;
        position: relative;
    }
    .second_img_con{
        width: calc(100% - 575px);
        height: 100%;
        border-radius: 25px;
        background-size: cover;
        background-repeat: no-repeat;
        background-position: center;
    }
    .second_data_con{
        background: whitesmoke;
        width: 550px;
        border-radius: 25px;
        margin-left: 25px;
        padding: 50px;
        overflow: auto;
    }
    .second_mini_cons{
        display: flex;
        height: 100%;
        width: 100%;    
    }
    #second_data_title {
        font-size: 25px;
        font-weight: bold;
        text-overflow: ellipsis;
        white-space: nowrap;
        overflow: hidden;
    }
    #second_data_sub_title {
        font-size: 19px;
        margin-top: 5px;
    }
    pre {
        font-family: inherit;
        margin-left: 20px;
    }
    .info_cons {
        background: white;
        margin-top: 20px;
        border: 2px solid black;
        border-radius: 15px;
    }
    .info_con_title {
        font-size: 21px;
        padding: 20px 20px 20px;
        font-weight: bold;
        border-bottom: 2px solid;
        background: white;
        border-radius: 11px;
        display: flex;
        justify-content: space-between;
        align-items: center;
    }
    .dropdown_icon{
        padding-left: 5px;
        padding-right: 5px;
        border: 2px solid black;
        border-radius: 5px;
        padding-top: 3px;
        transition: .5s;
        cursor: pointer;
    }
    .dropdown_icon:hover{
        background-color: black;
        color: white;
    }
    .display_none{
        display: none;
    }
    .direction_buttons{
        top: 12px;
        position: absolute;
        right: 35px;
    }
    .next, .prev, .back{
        border: 2px solid black;
        border-radius: 5px;
        transition: .5s;
        cursor: pointer;
        margin: 5px;
        position: absolute;
        padding: 15px;
        font-size: 25px;
        background: white;
    }
    .next:hover, .prev:hover, .back:hover{
        background-color: black;
        color: white;
    }
    .next{
        right: 2%;
    }
    .prev{
        left: 2%;
    }
    .back{
        left: 2%;
        top:50px;
    }
    .link_box{
        height: 100px;
        display: flex;
    }
    input {
        font-size: 1.2rem;
        border-radius: 5px;
        color: black;
        padding: 25px;
        border: 3px dashed #000000;
        transition: .5s;
        display: inline-block;
        background: whitesmoke;
        border-radius: 15px;
        margin-left: 30px;
        width: 84%;
    }
    input:focus{
        border: 3px solid #000000;
    }
    @media screen and (max-width: 1300px) {
      .main_con{
          position: unset;
          margin-top: 150px;
      }
      .second_con{
          height: unset;
          overflow: auto;
          border: none;
          width: 100%;
      }
      .second_mini_cons{
          flex-direction: column;
      }
      .second_img_con{
          width: 100%;
          height: 500px;
      }
      .second_data_con{
          width: unset;
          margin-left: unset;
          overflow: unset;
          margin-top: 50px;
      }
      .back {
          left: 40px;
      }
      .prev {
          left: unset;
          right: 120px;
      }
      .next {
          right: 40px;
      }
      .next, .prev, .back{
          z-index: 455;
          top: 25px;
      }
    }
    @media screen and (max-width: 760px) {
      .first_con{
          width: 90%;
      }
      h2{
          padding-left: 25px;
          padding-right: 25px;
          padding-bottom: 25px;
      }
      .drag_box{
          height: unset;
      }
    }
    @media screen and (max-width: 600px) {
      .first_con{
          width:100%;
          max-width:unset;
          height: 100vh;
          border: unset;
          padding-top: 50px;
          overflow: auto;
          margin-top: -150px;
      }
      .drag_box{
          width: 98%;
          height: unset;
          margin-left: unset;
      }
      .button{
          margin: unset;
      }
      .card_con{
          max-height: unset;
          overflow: unset;
      }
      .uploaded_card {
          width: 100%;
          margin-left: unset;
      }
      pre {
          font-size: 15px;
          overflow-x: hidden;
          margin-right: 15px;
      }
      .second_data_con{
          padding: 10px;
          background-color: unset;
      }
      .second_con{
          padding: 20px;
      }
    }
        
        </style>
        
        <link href='/css_webseite/boxicons.min.css' rel='stylesheet'>
        -->
        <script src="/js_webseite/exif.js"></script>
        <title>Find Exif Data</title>
    </head>
    <body ondrop="dropHandler(event);" ondragover="dragOverHandler(event);">
        <div class="dimmer" id="dimmer">
            <div class="popup" id="popup">
                <h1>Error
                    <small>Please attach a file before analysing it!</small>
                <div class="button" onclick="letter_index_close()">OK</div>
            </div>
        </div>
        <div class="main_con">
            <div class="back display_none" id="back" onclick="backReview()"><i class='bx bx-arrow-back' ></i></div>
            <div class="prev display_none" id="prev" onclick="previousReview()"><i class='bx bx-chevron-left'></i></div>
            <div class="next display_none" id="next" onclick="nextReview()"><i class='bx bx-chevron-right'></i></div>
            <div class="first_con" id='first_con'>
                <h1>Find an Image's Exif Data
                    <small>By Abdirazak Hassan</small></h1>
                <div class="drag_box">
                    <i class='bx bx-cloud-upload upload_icon'></i>
                    <h2>Drag and Drop or <label for="imageUpload">Browse</label> to choose a file.</h2>
                    <input type='file' id="imageUpload" onchange="readURL(this);" accept=".png, .jpg, .jpeg, .gif" multiple/>
                </div>
                <!-- <h2 style="text-align:left; margin-left:35px; margin-top: 25px;"><label for="">Or Paste Link</label> of image below and hit enter to upload.</h2>
                <input type="text" onchange="link_upload(this)" placeholder="eg: https://www.google.com"> -->
                <div class="uploaded_box" id="uploaded_box">
                </div>
                <div class="button analyse" id='analyse_button' onclick="analyse()">Analyse</div>
            </div>
            <div class="second_con" id="second_con"></div>
            </div>
        </div>
    </body>
    <script>
    var id;
    img_array = []
    var counter = 0
    let rev = 0;
    function readURL(input) { 
        if (input.files) {
            Object.keys(input.files).forEach(i => {
                const file = input.files[i];
                var reader = new FileReader();
                reader.onload = function(e) {
                    img_array.push([counter,e.target.result,file]);
                    counter = counter + 1
                    image = 'url('+e.target.result +')';
                    image_name = file.name;
                    image_size = file.size;
                    image_size = formatBytes(image_size)
                    if(!check_if_cards_exists()){
                        document.getElementById('uploaded_box').innerHTML = '<h1>Uploaded Image</h1><div class="card_con" id="card_con"></div>'
                        generate_card(image, image_name, image_size)
                    }
                    else{
                        generate_card(image, image_name, image_size)
                    }
                }
                reader.readAsDataURL(file);
            })
        }
        
        else if (input) {
            var reader = new FileReader();
            reader.onload = function(e) {
                img_array.push([counter,e.target.result,input]);
                counter = counter + 1
                image = 'url('+e.target.result +')';
                image_name = input.name;
                image_size = input.size;
                image_size = formatBytes(image_size)
                if(!check_if_cards_exists()){
                    document.getElementById('uploaded_box').innerHTML = '<h1>Uploaded Image</h1><div class="card_con" id="card_con"></div>'
                    generate_card(image, image_name, image_size)
                }
                else{
                    generate_card(image, image_name, image_size)
                }
            }
            reader.readAsDataURL(input);
        }
    }
    function generate_card(image, image_name, image_size){
        document.getElementById('card_con').innerHTML += '<div class="uploaded_card" id='+ counter +'> <div class="avatar-preview"><div id="imagePreview" class="fadein"  style="background-image:'+ image +';"></div></div><div class="img_values"><div class="title">'+image_name+'</div><small>'+ image_size+'</small></div><div class="cancel_card" onclick = "delete_card(this)"><i class="bx bx-x" ></i></div></div>'
        avatar_preview = document.getElementsByClassName('avatar-preview')
        for (let i = 0; i < avatar_preview.length; i++) {
            avatar_preview[i].style.opacity = '0';
            setTimeout(function(){avatar_preview[i].classList.add("fadein")}, 200);
        }
    }
    function formatBytes(bytes, decimals = 2) {
        if (bytes === 0) return '0 Bytes';
        const k = 1024;
        const dm = decimals < 0 ? 0 : decimals;
        const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
        const i = Math.floor(Math.log(bytes) / Math.log(k));
        return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
    }
    function delete_card(that){
        id = that.parentNode.id - 1
        img_array.forEach(delete_card_from_array)
        that.parentNode.remove()
        if(!check_if_cards_exists()){
            document.getElementById('uploaded_box').innerHTML = ''
        }
    }
    function delete_card_from_array(item,arr){
        if(item[0] == id){
            img_array.splice(arr,1)
            return true
        }
    }
    function check_if_cards_exists(){
        if(document.getElementsByClassName('uploaded_card').length !== 0){
            return true;
        }
        else{
            return false;
        }
    }
    function dragOverHandler(ev) {
        ev.preventDefault();
    }
    function dropHandler(ev) {
        ev.preventDefault();
        if (ev.dataTransfer.items) {
          [...ev.dataTransfer.items].forEach((item) => {
            if (item.kind === 'file') {
              const file = item.getAsFile();
              readURL(file)
            }
          });
        }
    }
    function analyse(){
        document.getElementById('analyse_button').classList.add('analyse_active')
        document.getElementById('analyse_button').innerHTML = '<svg class="spinner" width="65px" height="65px" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"><circle class="path" fill="none" stroke-width="6" stroke-linecap="round" cx="33" cy="33" r="30"></circle></svg>'
        setTimeout(function() {
            if(check_if_cards_exists()){
                cancel_button = document.getElementsByClassName('cancel_card')
                for (let i = 0; i < cancel_button.length; i++) {
                    cancel_button[i].remove()
                }
                document.getElementById('first_con').style.display = 'none';
                document.getElementById('second_con').style.display = 'block'; 
                document.getElementById('back').classList.remove('display_none')
                if(img_array.length > 1){
                    show_buttons()
                }
                for (let i = 0; i < img_array.length; i++) {
                    exif_this = getExif(img_array[i][1])
                    exif_data = EXIF.pretty(exif_this);
                    if(exif_data == ''){
                        exif_data = 'No Exif Data Found.'
                        my_location = ''
                    }
                    else{
                        exif_data = exif_data.split(/[,]+/);
                            my_location = get_location(exif_this)
                            if(!my_location == ''){
                                my_location = '<div class="info_cons"><div class="info_con_title">GPS Location<div class="dropdown_icon" onclick="dropdown_toggle(this)"><i class="bx bx-chevron-down"></i></div></div><pre id="allMetaDataSpan">' + 'Latitude: ' + my_location[0] + '<br>' +  'Latitude Degree: '+ my_location[1] + '<br>' + 'Latitude Minutes: ' + my_location[2] + '<br>' + 'Latitude Seconds: ' + my_location[3] + '<br>' + '<br>' + 'Longtitude: ' + my_location[4] + '<br>' +  'Longtitude Degree: ' + my_location[5] + '<br>' + 'Longtitude Minutes: ' + my_location[6] + '<br>' + 'Longtitude Seconds: ' + my_location[7] + '<br>'+ '</pre>'+ my_location[8] +'<div class="button" style="margin:25px" >Google Maps</div></a></div>'    
                            }
                        }         
                    document.getElementById('second_con').innerHTML += '<div class="second_mini_cons"><div class="second_img_con" style="background-image: url('+ img_array[i][1] +')"></div><div class="second_data_con"><div id="second_data_title">' + img_array[i][2].name + '</div><div id="second_data_sub_title">' + 'Last modified: '+ normal_date(img_array[i][2].lastModified) + '</div>' + '<div class="info_cons"><div class="info_con_title">General Information<div class="dropdown_icon" onclick="dropdown_toggle(this)"><i class="bx bx-chevron-down"></i></div></div><pre id="allMetaDataSpan">' + 'Image size: ' + formatBytes(img_array[i][2].size) + '<br>' + 'Image type: '+ img_array[i][2].type + '</pre></div>'+'<div class="info_cons"><div class="info_con_title">Exif Data<div class="dropdown_icon" onclick="dropdown_toggle(this)"><i class="bx bx-chevron-down"></i></div></div><pre id="allMetaDataSpan">' + exif_data + '</pre></div>' + my_location +'</div></div>'
                    carousel(rev);
        
                }
            }
            else{
                letter_index_open('Error', 'Please attach a file before analysing it!')
            }
        }, 1000);
    }
    function getExif(value) {
        var data;
        var img2 = new Image();
        img2.src = value;
        EXIF.getData(img2, function() {
            data = this;
        });
        return data
    }
    function letter_index_open(type, message, cta = 'OK'){
        document.getElementById('popup').innerHTML = '<h1>'+ type +'<small>' + message + '</small><div class="button" onclick="letter_index_close()">'+ cta +'</div>'
        document.getElementById('dimmer').style.display = 'flex';
    }
    function letter_index_close(){
        document.getElementById('dimmer').style.display = 'none';
        document.getElementById('analyse_button').classList.remove('analyse_active')
        document.getElementById('analyse_button').innerHTML = 'Analyse'
    }
    function get_location(myData){
        if(myData.exifdata.GPSLatitude || myData.exifdata.GPSLongitude){
            var latDegree_nom = myData.exifdata.GPSLatitude[0].numerator;
            var latDegree_denom = myData.exifdata.GPSLatitude[0].denominator;
            var latDegree =  latDegree_nom / latDegree_denom;
    
            var latMinute_nom = myData.exifdata.GPSLatitude[1].numerator;
            var latMinute_denom = myData.exifdata.GPSLatitude[1].denominator;
            var latMinute = latMinute_nom / latMinute_denom
            
            var latSecond_nom = myData.exifdata.GPSLatitude[2].numerator;
            var latSecond_denom = myData.exifdata.GPSLatitude[2].denominator;
            var latSecond = latSecond_nom / latSecond_denom
    
            var latDirection = myData.exifdata.GPSLatitudeRef;
            var latFinal = ConvertDMSToDD(latDegree, latMinute, latSecond, latDirection);
    
    
            var lonDegree_nom = myData.exifdata.GPSLongitude[0].numerator;
            var lonDegree_denom = myData.exifdata.GPSLongitude[0].denominator;
            var lonDegree =  lonDegree_nom / lonDegree_denom;
    
            var lonMinute_nom = myData.exifdata.GPSLongitude[1].numerator;
            var lonMinute_denom = myData.exifdata.GPSLongitude[1].denominator;
            var lonMinute = lonMinute_nom / lonMinute_denom
            
            var lonSecond_nom = myData.exifdata.GPSLongitude[2].numerator;
            var lonSecond_denom = myData.exifdata.GPSLongitude[2].denominator;
            var lonSecond = lonSecond_nom / lonSecond_denom
    
            var lonDirection = myData.exifdata.GPSLongitudeRef;
            var lonFinal = ConvertDMSToDD(lonDegree, lonMinute, lonSecond, lonDirection);
            var link = '<a href="http://www.google.com/maps/place/'+latFinal+','+lonFinal+'" target="_blank">'
            return [latFinal, latDegree, latMinute, latSecond, lonFinal, lonDegree, lonMinute, lonSecond, link];
        }
        else{
            return ''
        }
        
    }
    function ConvertDMSToDD(degrees, minutes, seconds, direction) {
        var dd = degrees + (minutes/60) + (seconds/3600);
        if (direction == "S" || direction == "W") {
            dd = dd * -1; 
        }
        return dd;
    }
    function dropdown_toggle(that){
        that.parentNode.nextElementSibling.classList.toggle('display_none')
        if(that.firstElementChild.classList.contains('bx-chevron-down')){
            that.firstElementChild.classList.toggle('bx-chevron-up')
        }
        else{
            that.firstElementChild.classList.toggle('bx-chevron-down')
        }
    }
    function normal_date(val){
        const milliseconds = val// 1575909015000
    
        const dateObject = new Date(milliseconds)
    
        const humanDateFormat = dateObject.toLocaleString() //2019-12-9 10:30:15
    
        dateObject.toLocaleString("en-US", {weekday: "long"}) // Monday
        dateObject.toLocaleString("en-US", {month: "long"}) // December
        dateObject.toLocaleString("en-US", {day: "numeric"}) // 9
        dateObject.toLocaleString("en-US", {year: "numeric"}) // 2019
        dateObject.toLocaleString("en-US", {hour: "numeric"}) // 10 AM
        dateObject.toLocaleString("en-US", {minute: "numeric"}) // 30
        dateObject.toLocaleString("en-US", {second: "numeric"}) // 15
        dateObject.toLocaleString("en-US", {timeZoneName: "short"}) // 12/9/2019, 10:30:15 AM CST
        return humanDateFormat
    }   
    function show_buttons(){
        document.getElementById('next').classList.remove('display_none')
        document.getElementById('prev').classList.remove('display_none')
    }
    function previousReview() {
        rev = rev - 1;
        carousel(rev);
    }
    function nextReview() {
        rev = rev + 1;
        carousel(rev);
    }
    function backReview() {
        window.location.reload();
    }
    function carousel(review) {
        let reviews = document.getElementsByClassName("second_mini_cons");
    
        if (review >= reviews.length) {
            review = 0;
            rev = 0;
        }
        if (review < 0) {
            review = reviews.length - 1;
            rev = reviews.length - 1;
        }
        for (let i = 0; i < reviews.length; i++) {
            reviews[i].style.display = "none";
        }
        reviews[review].style.display = "flex";
    }
    // No CORS wont let this work!
    // function link_upload(that){
    //     isvalid = validURL(that.value)
    //     if(isvalid){
    //         var img2 = new Image();
    //         img2.src = that.value;
    
    //         fetch(that.value)
    //         .then(function (response) {
    //            return response.blob();
    //         })
    //         .then(function (blob) {
    //             readURL(blob)
    //         });
    //     }
    //     else{
    //         letter_index_open('Error', 'Please upload a valid URL. eg: https://www.google.com')
    //     }
    // }
    // function validURL(str) {
    //     var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol
    //       '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name
    //       '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address
    //       '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path
    //       '(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string
    //       '(\\#[-a-z\\d_]*)?$','i'); // fragment locator
    //     return pattern.test(str);
    // }
    </script>
    <!--
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&amp;sensor=false"></script>
    
         <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBK73HewkhHBVVs9nI98-HY_N7cZM_kdjE"></script>-->
    </html>