Quellcode durchsuchen

show the share dialog when items are dropped on a username in the sidebar

Nariman Jelveh vor 11 Monaten
Ursprung
Commit
bd958b3820
2 geänderte Dateien mit 91 neuen und 7 gelöschten Zeilen
  1. 86 2
      src/UI/UIWindow.js
  2. 5 5
      src/UI/UIWindowShare.js

+ 86 - 2
src/UI/UIWindow.js

@@ -29,6 +29,7 @@ import refresh_item_container from '../helpers/refresh_item_container.js';
 import UIWindowSaveAccount from './UIWindowSaveAccount.js';
 import UIWindowSaveAccount from './UIWindowSaveAccount.js';
 import UIWindowEmailConfirmationRequired from './UIWindowEmailConfirmationRequired.js';
 import UIWindowEmailConfirmationRequired from './UIWindowEmailConfirmationRequired.js';
 import launch_app from "../helpers/launch_app.js"
 import launch_app from "../helpers/launch_app.js"
+import UIWindowShare from './UIWindowShare.js';
 
 
 const el_body = document.getElementsByTagName('body')[0];
 const el_body = document.getElementsByTagName('body')[0];
 
 
@@ -350,7 +351,6 @@ async function UIWindow(options) {
                     
                     
                     const components = options.path.slice(1).split('/');
                     const components = options.path.slice(1).split('/');
 
 
-                    console.log('components???', components);
                     if ( components.length === 2 && components[1] === 'Public' ) {
                     if ( components.length === 2 && components[1] === 'Public' ) {
                         const username = components[0];
                         const username = components[0];
                         h += `<iframe
                         h += `<iframe
@@ -1045,13 +1045,97 @@ async function UIWindow(options) {
                             continue;
                             continue;
                             ht += `<div  class="window-sidebar-item disable-user-select ${options.path === shared_user.path ? 'window-sidebar-item-active' : ''}" 
                             ht += `<div  class="window-sidebar-item disable-user-select ${options.path === shared_user.path ? 'window-sidebar-item-active' : ''}" 
                                     data-path="${shared_user.path}"
                                     data-path="${shared_user.path}"
+                                    data-sharing-username="${html_encode(shared_user.name)}"
                                     title="${html_encode(shared_user.name)}"
                                     title="${html_encode(shared_user.name)}"
                                     data-is_shared="1">
                                     data-is_shared="1">
                                         <img class="window-sidebar-item-icon" src="${html_encode(window.icons['shared-outline.svg'])}">${shared_user.name}
                                         <img class="window-sidebar-item-icon" src="${html_encode(window.icons['shared-outline.svg'])}">${shared_user.name}
                                     </div>`;  
                                     </div>`;  
                     }
                     }
                 }
                 }
-                $(el_window).find('.window-sidebar').append(ht);        
+                $(el_window).find('.window-sidebar').append(ht);
+
+                $(el_window).find('.window-sidebar-item:not(.ui-droppable)').droppable({
+                    accept: '.item',
+                    tolerance: 'pointer',
+                    drop: function( event, ui ) {
+                        // check if item was actually dropped on this navbar path
+                        if($(window.mouseover_window).attr('data-id') !== $(el_window).attr('data-id')){
+                            return;
+                        }
+                        const items_to_share = []
+                        
+                        // first item
+                        items_to_share.push({
+                            path: $(ui.draggable).attr('data-path'),
+                            icon: $(ui.draggable).find('.item-icon img').attr('src'),
+                            name: $(ui.draggable).find('.item-name').text(),
+                        }); 
+                        
+                        // all subsequent items
+                        const cloned_items = document.getElementsByClassName('item-selected-clone');
+                        for(let i =0; i<cloned_items.length; i++){
+                            const source_item = document.getElementById('item-' + $(cloned_items[i]).attr('data-id'));
+                            if(!source_item) continue;
+                            items_to_share.push({
+                                path: $(source_item).attr('data-path'),
+                                icon: $(source_item).find('.item-icon img').attr('src'),
+                                name: $(source_item).find('.item-name').text(),
+                            })
+                        }
+            
+                        // if alt key is down, create shortcut items
+                        if(event.altKey){
+                            items_to_share.forEach((item_to_move) => {
+                                window.create_shortcut(
+                                    path.basename($(item_to_move).attr('data-path')), 
+                                    $(item_to_move).attr('data-is_dir') === '1', 
+                                    $(this).attr('data-path'), 
+                                    null, 
+                                    $(item_to_move).attr('data-shortcut_to') === '' ? $(item_to_move).attr('data-uid') : $(item_to_move).attr('data-shortcut_to'),
+                                    $(item_to_move).attr('data-shortcut_to_path') === '' ? $(item_to_move).attr('data-path') : $(item_to_move).attr('data-shortcut_to_path'),
+                                );
+                            });
+                        }
+                        // move items
+                        else{
+                            UIWindowShare(items_to_share, $(this).attr('data-sharing-username'));
+                        }
+            
+                        $('.item-container').droppable('enable')
+                        $(this).removeClass('window-sidebar-item-drag-active');
+            
+                        return false;
+                    },
+                    over: function(event, ui){
+                        // check if item was actually hovered over this window
+                        if($(window.mouseover_window).attr('data-id') !== $(el_window).attr('data-id'))
+                            return;
+            
+                        // Don't do anything if the dragged item is NOT a UIItem
+                        if(!$(ui.draggable).hasClass('item'))
+                            return;
+                        
+                        // highlight this item
+                        $(this).addClass('window-sidebar-item-drag-active');
+                        $('.ui-draggable-dragging').css('opacity', 0.2)
+                        $('.item-selected-clone').css('opacity', 0.2)
+            
+                        // disable all window bodies 
+                        $('.item-container').droppable( 'disable' )
+                    },
+                    out: function(event, ui){
+                        // Don't do anything if the dragged element is NOT a UIItem
+                        if(!$(ui.draggable).hasClass('item'))
+                            return;
+                        
+                        // unselect item if item is dragged out
+                        $(this).removeClass('window-sidebar-item-drag-active');
+                        $('.ui-draggable-dragging').css('opacity', 'initial')
+                        $('.item-selected-clone').css('opacity', 'initial')
+            
+                        $('.item-container').droppable( 'enable' )    
+                    }
+                });
             }).catch(function(err){
             }).catch(function(err){
                 console.error(err);
                 console.error(err);
             })
             })

+ 5 - 5
src/UI/UIWindowShare.js

@@ -1,6 +1,6 @@
 import UIWindow from './UIWindow.js'
 import UIWindow from './UIWindow.js'
 
 
-async function UIWindowShare(items){
+async function UIWindowShare(items, recipient){
     return new Promise(async (resolve) => {
     return new Promise(async (resolve) => {
         let h = '';
         let h = '';
         h += `<div style="padding: 30px 40px 20px; border-bottom: 1px solid #ced7e1;">`;
         h += `<div style="padding: 30px 40px 20px; border-bottom: 1px solid #ced7e1;">`;
@@ -10,7 +10,7 @@ async function UIWindowShare(items){
             h += `<img src="${items[0].icon}" style="width:70px; height:70px; display: block; margin: 10px auto 0;">`;
             h += `<img src="${items[0].icon}" style="width:70px; height:70px; display: block; margin: 10px auto 0;">`;
 
 
             // name
             // name
-            h += `<h2 style="font-size: 17px; margin-top:0; text-align:center; margin-bottom: 40px; font-weight: 400; color: #303d49; text-shadow: 1px 1px white;">${items.length > 1 ? `Share ${items.length} items` : `${items[0].name}`}</h2>`;
+            h += `<h2 style="font-size: 17px; margin-top:0; text-align:center; margin-bottom: 40px; font-weight: 400; color: #303d49; text-shadow: 1px 1px white;">${items.length > 1 ? `Share ${items.length} items` : `${html_encode(items[0].name)}`}</h2>`;
 
 
             // form
             // form
             h += `<form class="window-give-item-access-form">`;
             h += `<form class="window-give-item-access-form">`;
@@ -21,9 +21,9 @@ async function UIWindowShare(items){
                     h += `<label style="font-size: 16px; font-weight: 600;">Share with:</label>`;
                     h += `<label style="font-size: 16px; font-weight: 600;">Share with:</label>`;
                     h += `<div style="display: flex;">`;
                     h += `<div style="display: flex;">`;
                         // Username/email
                         // Username/email
-                        h += `<input placeholder="username" class="access-recipient" style="border-right: none; margin-bottom: 10px; border-top-right-radius: 0; border-bottom-right-radius: 0;" type="text" autocomplete="recipient_email_username" spellcheck="false" autocorrect="off" autocapitalize="off" data-gramm_editor="false"/>`;
+                        h += `<input placeholder="username" class="access-recipient" value="${html_encode(recipient ?? '')}" style="border-right: none; margin-bottom: 10px; border-top-right-radius: 0; border-bottom-right-radius: 0;" type="text" autocomplete="recipient_email_username" spellcheck="false" autocorrect="off" autocapitalize="off" data-gramm_editor="false"/>`;
                         // Share
                         // Share
-                        h += `<button class="give-access-btn button button-primary button-normal" style="border-top-left-radius: 0; border-bottom-left-radius: 0;" disabled>Share</button>`
+                        h += `<button class="give-access-btn button button-primary button-normal" style="border-top-left-radius: 0; border-bottom-left-radius: 0;" ${!recipient ? 'disabled' : ''}>Share</button>`
                     h += `</div>`;                
                     h += `</div>`;                
                 h += `</div>`;
                 h += `</div>`;
             h += `</form>`;
             h += `</form>`;
@@ -127,7 +127,7 @@ async function UIWindowShare(items){
                 $(el_window).find('.share-recipients').append(`${perm_list}`);                  
                 $(el_window).find('.share-recipients').append(`${perm_list}`);                  
             }).
             }).
             catch((err) => {
             catch((err) => {
-                console.error(err);
+                // console.error(err);
             })
             })
         }
         }