Sindbad~EG File Manager

Current Path : /home/numerotech/dropbox.numerotech.com/dropbox_v2/core/templates/dropbox/
Upload File :
Current File : //home/numerotech/dropbox.numerotech.com/dropbox_v2/core/templates/dropbox/index_backup2.html

{% extends 'layout.html' %}
{% block title %}Index{% endblock %}
{% block content %}
<style>
        #drop-area {
            border: 2px dashed #ccc;
            padding: 20px;
            text-align: center;
        }
         #drop-area.highlight {
            border-color: #007bff; /* Change to your preferred highlight color */
            background-color: #f0f8ff; /* Change to your preferred highlight background color */
        }
        .progress-container {
            display: none;
            margin-top: 10px;
        }

        .progress {
            height: 20px;
            background-color: #f0f0f0;
            border-radius: 4px;
            overflow: hidden;
        }

        .progress-bar {
            width: 0;
            height: 100%;
            background-color: #007bff; /* Change to your preferred progress bar color */
            transition: width 0.3s;
        }

        .file-info {
            margin-top: 5px;
        }
    </style>

<div class="container bg-white mt-5">
  <div class="row mb-3"> 
    <div class="col-md-6">
     <h2>{{ folder_path or 'Main'}}
      <button  id="open-dropbox-button"  type="button" class="btn btn-link">Open Dropbox</button>
     </h2>
    </div>
    <div class="col-md-6 text-end">
      <form id="SearchForm" action="#">
      <div class="input-group float-right">
        <input type="text" class="form-control" name="search_text" placeholder="Search here.." aria-label="Search here.." aria-describedby="basic-addon2" required>
        
        <div>
          <button class="btn btn-outline-secondary" type="submit">Search</button>
          <a class="btn btn-outline-danger" href="#" >Clear</a>
           <input type="hidden" id="folder-path-input" value="{{ folder_path }}">
          
        </div>
      </div>
      </form>
      
    </div>
  </div>
  <hr>
  <div class="row">
    <div class="col">
      <h4>Upload Files to Dropbox</h4>
        <div id="drop-area">
          Drop files here
        </div>
        <div class="progress-container">
            <!-- <div class="progress">
                <div class="progress-bar" role="progressbar"></div>
            </div>
            <div class="file-info">Uploading: <span class="file-name"></span></div> -->
        </div>

 <!--    <form action="{{ url_for('dropbox.upload_files',folder_path=folder_path) }}" method="POST" enctype="multipart/form-data">
        <input type="file" name="files[]"  multiple required>
        <button class="btn btn-warning" type="submit">Upload</button>
    </form> -->
    </div>

  </div>
  <hr>
{% if subfolders %}

  <h3 class="mb-3">Folders :</h3>
      <div class="row">
        {% for folder in subfolders %}
        <div class="col-md-3">
          <div class="card mb-2">
            <div class="card-body">
              <div class="d-inline">
              <i class="fas fa-folder fa-lg" style="color: #3878e5;"></i>
              <a href="{{ url_for('dropbox.index', path=folder.path_display) }}">{{ folder.name }}</a> 
            </div>
              <div class="d-inline float-end">
                <!-- <i class="fa-sharp fa-regular fa-circle-right  fa-lg" style="color: #3878e5;"></i> -->
                <i class="fa-duotone fa-circle-ellipsis-vertical fa-lg" style="color: #3878e5;"></i>

              </div>
            </div>
          </div>
        </div>
        {% endfor %}
      </div>
  
    <hr>
  
  {% endif %}  
    <h3 class="mb-0">Files : <span class="h5">({{ files|length  }}) </span></h3>
    
    <table class="table">
      <thead>
        <tr>
        <!--   <th width="10%">
            thumbnail
          </th> -->
          <th width="70%">
            Name
          </th>
          <th width="20%">
            Modified
          </th>
          <th>
          </th>
        </tr>
        <tbody>
          {% for file in files %}
        <tr>
          <!-- <td class="text-center">
            <img src="" class="thumbnail" data-path="{{file.path_display}}"  alt="Thumbnail">
          </td> -->
          <td valign="middle">
             
             {{ file.name }}
          </td>
          <td>
              {{ file.server_modified.strftime('%d-%m-%Y') if file.server_modified else '' }}
              {{ file.server_modified.strftime('%I:%M %p') if file.server_modified else '' }}
          </td>
          <td>
            <button type="button" class="btn btn-outline-primary" onclick="previewModal('{{file.path_display}}')">
              <i class="fa-regular fa-eye"></i></button>
            <a href=""></a>  
             <i class="fa-regular fa-download"></i>
          </td>
        </tr>
        {% endfor %}
        </tbody>
        
      </thead>
      
    </table>
     <!--  <div class="row">
        {% for file in files %}
        <div class="col-md-3">
          <div class="card mb-2">
            <div class="card-body text-center">
               <img src="{{ url_for('dropbox.thumbnail', file_path=file.path_display) }}" alt="Thumbnail">
               {% set file_extension = file.name|file_extension %}
               <i class="icon icon-{{ file_extension }}"></i>
              {% if file.is_downloadable %}
                  
              {% endif %}
              {{ file.name }}
            </div>
          </div>
        </div>
        {% endfor %}
      </div> -->
  </div>
</div>


    <!-- Modal -->
    <div class="modal fade" id="previewModal" tabindex="-1" aria-labelledby="previewModalLabel" aria-hidden="true">
        <div class="modal-dialog modal-lg">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="previewModalLabel">File Preview</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <div class="modal-body">
                    <iframe id="previewFrame" frameborder="0" width="100%" height="500"></iframe>
                </div>
            </div>
        </div>
    </div>


{% endblock %}
{% block script %}
<script>

  var folder_path =  '{{ folder_path}}'

  $(function() {
       $('#open-dropbox-button').click(function() {
                var folderPath = $('#folder-path-input').val();
                if (folderPath) {
                    $.ajax({
                        url: '/open_dropbox_folder/' + encodeURIComponent(folderPath),
                        type: 'GET',
                        success: function(data) {
                            window.open(data, '_blank');
                        }
                    });
                }
        });
        
  });






function previewModal(file_path) {
      event.preventDefault();
      
      if (file_path) {
        $.ajax({
            url: '/view_file/' + encodeURIComponent(file_path),
            type: 'GET',
            success: function(data) {
              if(data)
              {
                $('#previewFrame').attr('src', data);  
                $("#previewModal").modal('show');  
              }
              
            }
        });
      }

  }  


function getThumbnails() {
  $( ".thumbnail" ).each(function( index ) {
        var file_path = $(this).attr('data-path')
        var thumbnail_container = $(this);
        $.ajax({
        type: 'GET', 
        url: '/thumbnail/'+file_path, 
        data:{}, 
        dataType: 'text',
        success: function(data){
          if(data){
            thumbnail_container.attr('src','data:image/jpeg;base64,' + data)
          }
        },
        // error: function(XMLHttpRequest, textStatus, errorThrown) {
        error: function(xhr, status, error) {
          console.log(xhr.responseText)
        } 
                                            
      }); 
  });

  
}


  
</script>


<script type="text/javascript">
    $(document).ready(function() {
            var dropArea = document.getElementById('drop-area');
             var progressContainer = document.querySelector('.progress-container');
            var progressBar = document.querySelector('.progress-bar');
            var fileInfo = document.querySelector('.file-info');
            var fileNameSpan = document.querySelector('.file-name');


            // Prevent default drag behaviors
            dropArea.addEventListener('dragenter', preventDefaults, false);
            dropArea.addEventListener('dragleave', preventDefaults, false);
            dropArea.addEventListener('dragover', preventDefaults, false);
            dropArea.addEventListener('drop', preventDefaults, false);

            // Highlight the drop area when a file is dragged over
            dropArea.addEventListener('dragenter', highlight, false);
            dropArea.addEventListener('dragover', highlight, false);

            // Unhighlight the drop area when a file is dragged out
            dropArea.addEventListener('dragleave', unhighlight, false);
            dropArea.addEventListener('drop', unhighlight, false);

            // Handle the dropped files
            dropArea.addEventListener('drop', handleDrop, false);

            function preventDefaults(event) {
                event.preventDefault();
                event.stopPropagation();
            }

            function highlight(event) {
                dropArea.classList.add('highlight');
            }

            function unhighlight(event) {
                dropArea.classList.remove('highlight');
            }

            function handleDrop(event) {
                var files = event.dataTransfer.files;
                handleFiles(files);
            }


            function createProgressContainer(file) {
                var progressContainer = document.createElement('div');
                progressContainer.className = 'progress-container';
                progressContainer.innerHTML = `
                    <div class="progress">
                        <div class="progress-bar" role="progressbar"></div>
                    </div>
                    <div class="file-info">Uploading: <span class="file-name">${file.name}</span></div>
                `;
                progressContainers.appendChild(progressContainer);
            }

            function handleFiles(files) {
                var formData = new FormData();
                for (var i = 0; i < files.length; i++) {
                    formData.append('files[]', files[i]);
                }

                progressContainer.style.display = 'block'; // Show the progress container

                $.ajax({
                    url: '/upload_files/'+encodeURIComponent(folder_path),
                    type: 'POST',
                    data: formData,
                    processData: false,
                    contentType: false,
                    xhr: function() {
                        var xhr = new window.XMLHttpRequest();
                        xhr.upload.addEventListener('progress', function(event) {
                            if (event.lengthComputable) {
                                var percent = (event.loaded / event.total) * 100;
                                progressBar.style.width = percent + '%';
                                fileNameSpan.textContent = files[0].name; // Display filename
                            }
                        }, false);
                        return xhr;
                    },
                   success: function() {
                        // progressContainer.style.display = 'none'; // Hide the progress container
                        // progressBar.style.width = '0'; // Reset progress bar width
                        // fileNameSpan.textContent = ''; // Clear filename
                        alert('Files uploaded successfully to Dropbox!');
                    },
                    error: function() {
                        progressContainer.style.display = 'none'; // Hide the progress container
                        progressBar.style.width = '0'; // Reset progress bar width
                        fileNameSpan.textContent = ''; // Clear filename
                        alert('An error occurred during upload.');
                    }
                });
            }
        });
</script>

{% endblock %}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists