Ability to remove window handlers added from the drive
This commit is contained in:
parent
b58b6fa691
commit
f17cdcda9f
@ -732,7 +732,8 @@ define([
|
|||||||
};
|
};
|
||||||
$content.mousemove(sel.move);
|
$content.mousemove(sel.move);
|
||||||
});
|
});
|
||||||
$(window).on('mouseup', function (e) {
|
|
||||||
|
var onWindowMouseUp = function (e) {
|
||||||
if (!sel.down) { return; }
|
if (!sel.down) { return; }
|
||||||
if (e.which !== 1) { return; }
|
if (e.which !== 1) { return; }
|
||||||
sel.down = false;
|
sel.down = false;
|
||||||
@ -745,10 +746,146 @@ define([
|
|||||||
selectElement($(element));
|
selectElement($(element));
|
||||||
});
|
});
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
});
|
};
|
||||||
|
|
||||||
|
var getSelectedPaths = function ($element) {
|
||||||
|
var paths = [];
|
||||||
|
if (!$element || $element.length === 0) { return paths; }
|
||||||
|
if (findSelectedElements().length > 1) {
|
||||||
|
var $selected = findSelectedElements();
|
||||||
|
$selected.each(function (idx, elmt) {
|
||||||
|
var ePath = $(elmt).data('path');
|
||||||
|
if (ePath) {
|
||||||
|
paths.push({
|
||||||
|
path: ePath,
|
||||||
|
element: $(elmt)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!paths.length) {
|
||||||
|
var path = $element.data('path');
|
||||||
|
if (!path) { return false; }
|
||||||
|
paths.push({
|
||||||
|
path: path,
|
||||||
|
element: $element
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return paths;
|
||||||
|
};
|
||||||
|
|
||||||
|
var removeInput = function (cancel) {
|
||||||
|
if (!cancel && $('.cp-app-drive-element-row > input').length === 1) {
|
||||||
|
var $input = $('.cp-app-drive-element-row > input');
|
||||||
|
manager.rename($input.data('path'), $input.val(), APP.refresh);
|
||||||
|
}
|
||||||
|
$('.cp-app-drive-element-row > input').remove();
|
||||||
|
$('.cp-app-drive-element-row > span:hidden').removeAttr('style');
|
||||||
|
};
|
||||||
|
|
||||||
|
var getFileNameExtension = function (name) {
|
||||||
|
var matched = /\.[^\. ]+$/.exec(name);
|
||||||
|
if (matched && matched.length) { return matched[matched.length -1]; }
|
||||||
|
return '';
|
||||||
|
};
|
||||||
|
|
||||||
|
// Replace a file/folder name by an input to change its value
|
||||||
|
var displayRenameInput = function ($element, path) {
|
||||||
|
// NOTE: setTimeout(f, 0) otherwise the "rename" button in the toolbar is not working
|
||||||
|
window.setTimeout(function () {
|
||||||
|
if (!APP.editable) { return; }
|
||||||
|
if (!path || path.length < 2) {
|
||||||
|
logError("Renaming a top level element (root, trash or filesData) is forbidden.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
removeInput();
|
||||||
|
var $name = $element.find('.cp-app-drive-element-name');
|
||||||
|
if (!$name.length) {
|
||||||
|
$name = $element.find('> .cp-app-drive-element');
|
||||||
|
}
|
||||||
|
$name.hide();
|
||||||
|
var isFolder = $element.is(".cp-app-drive-element-folder:not(.cp-app-drive-element-sharedf)");
|
||||||
|
var el = manager.find(path);
|
||||||
|
var name = manager.isFile(el) ? manager.getTitle(el) : path[path.length - 1];
|
||||||
|
if (manager.isSharedFolder(el)) {
|
||||||
|
name = manager.getSharedFolderData(el).title;
|
||||||
|
}
|
||||||
|
var $input = $('<input>', {
|
||||||
|
placeholder: name,
|
||||||
|
value: name
|
||||||
|
}).data('path', path);
|
||||||
|
|
||||||
|
|
||||||
|
// Stop propagation on keydown to avoid issues with arrow keys
|
||||||
|
$input.on('keydown', function (e) { e.stopPropagation(); });
|
||||||
|
|
||||||
|
$input.on('keyup', function (e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
if (e.which === 13) {
|
||||||
|
removeInput(true);
|
||||||
|
var newName = $input.val();
|
||||||
|
if (JSON.stringify(path) === JSON.stringify(currentPath)) {
|
||||||
|
manager.rename(path, $input.val(), function () {
|
||||||
|
if (isFolder) {
|
||||||
|
LS.renameFoldersOpened(path, newName);
|
||||||
|
path[path.length - 1] = newName;
|
||||||
|
}
|
||||||
|
APP.displayDirectory(path);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
manager.rename(path, $input.val(), function () {
|
||||||
|
if (isFolder) {
|
||||||
|
LS.renameFoldersOpened(path, newName);
|
||||||
|
unselectElement($element);
|
||||||
|
$element.data("path", $element.data("path").slice(0, -1).concat(newName));
|
||||||
|
selectElement($element);
|
||||||
|
}
|
||||||
|
APP.refresh();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (e.which === 27) {
|
||||||
|
removeInput(true);
|
||||||
|
}
|
||||||
|
}).on('keypress', function (e) { e.stopPropagation(); });
|
||||||
|
//$element.parent().append($input);
|
||||||
|
$name.after($input);
|
||||||
|
$input.focus();
|
||||||
|
|
||||||
|
var extension = getFileNameExtension(name);
|
||||||
|
var input = $input[0];
|
||||||
|
input.selectionStart = 0;
|
||||||
|
input.selectionEnd = name.length - extension.length;
|
||||||
|
|
||||||
|
// We don't want to open the file/folder when clicking on the input
|
||||||
|
$input.on('click dblclick', function (e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
// Remove the browser ability to drag text from the input to avoid
|
||||||
|
// triggering our drag/drop event handlers
|
||||||
|
$input.on('dragstart dragleave drag drop', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
// Make the parent element non-draggable when selecting text in the field
|
||||||
|
// since it would remove the input
|
||||||
|
$input.on('mousedown', function (e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
$input.parents('.cp-app-drive-element-row').attr("draggable", false);
|
||||||
|
});
|
||||||
|
$input.on('mouseup', function (e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
$input.parents('.cp-app-drive-element-row').attr("draggable", true);
|
||||||
|
});
|
||||||
|
},0);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// Arrow keys to modify the selection
|
// Arrow keys to modify the selection
|
||||||
$(window).keydown(function (e) {
|
var onWindowKeydown = function (e) {
|
||||||
var $searchBar = $tree.find('#cp-app-drive-tree-search-input');
|
var $searchBar = $tree.find('#cp-app-drive-tree-search-input');
|
||||||
if (document.activeElement && document.activeElement.nodeName === 'INPUT') { return; }
|
if (document.activeElement && document.activeElement.nodeName === 'INPUT') { return; }
|
||||||
if ($searchBar.is(':focus') && $searchBar.val()) { return; }
|
if ($searchBar.is(':focus') && $searchBar.val()) { return; }
|
||||||
@ -784,6 +921,13 @@ define([
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// F2: rename selected element
|
||||||
|
if (e.which === 113) {
|
||||||
|
var paths = getSelectedPaths(findSelectedElements().first());
|
||||||
|
if (paths.length !== 1) { return; }
|
||||||
|
displayRenameInput(paths[0].element, paths[0].path);
|
||||||
|
}
|
||||||
|
|
||||||
// [Left, Up, Right, Down]
|
// [Left, Up, Right, Down]
|
||||||
if ([37, 38, 39, 40].indexOf(e.which) === -1) { return; }
|
if ([37, 38, 39, 40].indexOf(e.which) === -1) { return; }
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@ -843,17 +987,6 @@ define([
|
|||||||
click($elements.get(Math.min(lastIndex+cols, length-1)));
|
click($elements.get(Math.min(lastIndex+cols, length-1)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
var removeInput = function (cancel) {
|
|
||||||
if (!cancel && $('.cp-app-drive-element-row > input').length === 1) {
|
|
||||||
var $input = $('.cp-app-drive-element-row > input');
|
|
||||||
manager.rename($input.data('path'), $input.val(), APP.refresh);
|
|
||||||
}
|
|
||||||
$('.cp-app-drive-element-row > input').remove();
|
|
||||||
$('.cp-app-drive-element-row > span:hidden').removeAttr('style');
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var compareDays = function (date1, date2) {
|
var compareDays = function (date1, date2) {
|
||||||
@ -896,105 +1029,6 @@ define([
|
|||||||
APP.displayDirectory(currentPath);
|
APP.displayDirectory(currentPath);
|
||||||
};
|
};
|
||||||
|
|
||||||
var getFileNameExtension = function (name) {
|
|
||||||
var matched = /\.[^\. ]+$/.exec(name);
|
|
||||||
if (matched && matched.length) { return matched[matched.length -1]; }
|
|
||||||
return '';
|
|
||||||
};
|
|
||||||
|
|
||||||
// Replace a file/folder name by an input to change its value
|
|
||||||
var displayRenameInput = function ($element, path) {
|
|
||||||
// NOTE: setTimeout(f, 0) otherwise the "rename" button in the toolbar is not working
|
|
||||||
window.setTimeout(function () {
|
|
||||||
if (!APP.editable) { return; }
|
|
||||||
if (!path || path.length < 2) {
|
|
||||||
logError("Renaming a top level element (root, trash or filesData) is forbidden.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
removeInput();
|
|
||||||
var $name = $element.find('.cp-app-drive-element-name');
|
|
||||||
if (!$name.length) {
|
|
||||||
$name = $element.find('> .cp-app-drive-element');
|
|
||||||
}
|
|
||||||
$name.hide();
|
|
||||||
var isFolder = $element.is(".cp-app-drive-element-folder:not(.cp-app-drive-element-sharedf)");
|
|
||||||
var el = manager.find(path);
|
|
||||||
var name = manager.isFile(el) ? manager.getTitle(el) : path[path.length - 1];
|
|
||||||
if (manager.isSharedFolder(el)) {
|
|
||||||
name = manager.getSharedFolderData(el).title;
|
|
||||||
}
|
|
||||||
var $input = $('<input>', {
|
|
||||||
placeholder: name,
|
|
||||||
value: name
|
|
||||||
}).data('path', path);
|
|
||||||
|
|
||||||
|
|
||||||
// Stop propagation on keydown to avoid issues with arrow keys
|
|
||||||
$input.on('keydown', function (e) { e.stopPropagation(); });
|
|
||||||
|
|
||||||
$input.on('keyup', function (e) {
|
|
||||||
e.stopPropagation();
|
|
||||||
if (e.which === 13) {
|
|
||||||
removeInput(true);
|
|
||||||
var newName = $input.val();
|
|
||||||
if (JSON.stringify(path) === JSON.stringify(currentPath)) {
|
|
||||||
manager.rename(path, $input.val(), function () {
|
|
||||||
if (isFolder) {
|
|
||||||
LS.renameFoldersOpened(path, newName);
|
|
||||||
path[path.length - 1] = newName;
|
|
||||||
}
|
|
||||||
APP.displayDirectory(path);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
manager.rename(path, $input.val(), function () {
|
|
||||||
if (isFolder) {
|
|
||||||
LS.renameFoldersOpened(path, newName);
|
|
||||||
unselectElement($element);
|
|
||||||
$element.data("path", $element.data("path").slice(0, -1).concat(newName));
|
|
||||||
selectElement($element);
|
|
||||||
}
|
|
||||||
refresh();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (e.which === 27) {
|
|
||||||
removeInput(true);
|
|
||||||
}
|
|
||||||
}).on('keypress', function (e) { e.stopPropagation(); });
|
|
||||||
//$element.parent().append($input);
|
|
||||||
$name.after($input);
|
|
||||||
$input.focus();
|
|
||||||
|
|
||||||
var extension = getFileNameExtension(name);
|
|
||||||
var input = $input[0];
|
|
||||||
input.selectionStart = 0;
|
|
||||||
input.selectionEnd = name.length - extension.length;
|
|
||||||
|
|
||||||
// We don't want to open the file/folder when clicking on the input
|
|
||||||
$input.on('click dblclick', function (e) {
|
|
||||||
e.stopPropagation();
|
|
||||||
});
|
|
||||||
// Remove the browser ability to drag text from the input to avoid
|
|
||||||
// triggering our drag/drop event handlers
|
|
||||||
$input.on('dragstart dragleave drag drop', function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation();
|
|
||||||
});
|
|
||||||
// Make the parent element non-draggable when selecting text in the field
|
|
||||||
// since it would remove the input
|
|
||||||
$input.on('mousedown', function (e) {
|
|
||||||
e.stopPropagation();
|
|
||||||
$input.parents('.cp-app-drive-element-row').attr("draggable", false);
|
|
||||||
});
|
|
||||||
$input.on('mouseup', function (e) {
|
|
||||||
e.stopPropagation();
|
|
||||||
$input.parents('.cp-app-drive-element-row').attr("draggable", true);
|
|
||||||
});
|
|
||||||
},0);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
var pickFolderColor = function ($element, currentColor, cb) {
|
var pickFolderColor = function ($element, currentColor, cb) {
|
||||||
var colors = ["", "#f23c38", "#ff0073", "#da0eba", "#9d00ac", "#6c19b3", "#4a42b1", "#3d8af0", "#30a0f1", "#1fb9d1", "#009686", "#45b354", "#84c750", "#c6e144", "#faf147", "#fbc423", "#fc9819", "#fd5227", "#775549", "#9c9c9c", "#607a89"];
|
var colors = ["", "#f23c38", "#ff0073", "#da0eba", "#9d00ac", "#6c19b3", "#4a42b1", "#3d8af0", "#30a0f1", "#1fb9d1", "#009686", "#45b354", "#84c750", "#c6e144", "#faf147", "#fbc423", "#fc9819", "#fd5227", "#775549", "#9c9c9c", "#607a89"];
|
||||||
@ -1206,33 +1240,6 @@ define([
|
|||||||
return filtered;
|
return filtered;
|
||||||
};
|
};
|
||||||
|
|
||||||
var getSelectedPaths = function ($element) {
|
|
||||||
var paths = [];
|
|
||||||
if (!$element || $element.length === 0) { return paths; }
|
|
||||||
if (findSelectedElements().length > 1) {
|
|
||||||
var $selected = findSelectedElements();
|
|
||||||
$selected.each(function (idx, elmt) {
|
|
||||||
var ePath = $(elmt).data('path');
|
|
||||||
if (ePath) {
|
|
||||||
paths.push({
|
|
||||||
path: ePath,
|
|
||||||
element: $(elmt)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!paths.length) {
|
|
||||||
var path = $element.data('path');
|
|
||||||
if (!path) { return false; }
|
|
||||||
paths.push({
|
|
||||||
path: path,
|
|
||||||
element: $element
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return paths;
|
|
||||||
};
|
|
||||||
|
|
||||||
var updateContextButton = function () {
|
var updateContextButton = function () {
|
||||||
if (manager.isPathIn(currentPath, [TRASH])) {
|
if (manager.isPathIn(currentPath, [TRASH])) {
|
||||||
$driveToolbar.find('cp-app-drive-toolbar-emptytrash').show();
|
$driveToolbar.find('cp-app-drive-toolbar-emptytrash').show();
|
||||||
@ -3663,13 +3670,13 @@ define([
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Disable middle click in the context menu to avoid opening /drive/inner.html# in new tabs
|
// Disable middle click in the context menu to avoid opening /drive/inner.html# in new tabs
|
||||||
$(window).click(function (e) {
|
var onWindowClick = function (e) {
|
||||||
if (!e.target || !$(e.target).parents('.cp-dropdown-content').length) { return; }
|
if (!e.target || !$(e.target).parents('.cp-dropdown-content').length) { return; }
|
||||||
if (e.which !== 1) {
|
if (e.which !== 1) {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
var getProperties = APP.getProperties = function (el, cb) {
|
var getProperties = APP.getProperties = function (el, cb) {
|
||||||
if (!manager.isFile(el) && !manager.isSharedFolder(el)) {
|
if (!manager.isFile(el) && !manager.isSharedFolder(el)) {
|
||||||
@ -4111,13 +4118,15 @@ define([
|
|||||||
APP.hideMenu();
|
APP.hideMenu();
|
||||||
});
|
});
|
||||||
|
|
||||||
$(window).on("keydown", function (e) {
|
$(window).on('mouseup', onWindowMouseUp);
|
||||||
if (e.which === 113) { // if F2 key pressed
|
$(window).on('keydown', onWindowKeydown);
|
||||||
var paths = getSelectedPaths(findSelectedElements().first());
|
$(window).on('click', onWindowClick);
|
||||||
if (paths.length !== 1) { return; }
|
|
||||||
displayRenameInput(paths[0].element, paths[0].path);
|
var removeWindowListeners = function () {
|
||||||
}
|
$(window).off('mouseup', onWindowMouseUp);
|
||||||
});
|
$(window).off('keydown', onWindowKeydown);
|
||||||
|
$(window).off('click', onWindowClick);
|
||||||
|
};
|
||||||
|
|
||||||
// Chrome considers the double-click means "select all" in the window
|
// Chrome considers the double-click means "select all" in the window
|
||||||
$content.on('mousedown', function (e) {
|
$content.on('mousedown', function (e) {
|
||||||
@ -4342,7 +4351,10 @@ define([
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
refresh: refresh
|
refresh: refresh,
|
||||||
|
close: function () {
|
||||||
|
removeWindowListeners();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -89,7 +89,9 @@ define([
|
|||||||
APP.module.execCommand('SUBSCRIBE', null, function () {
|
APP.module.execCommand('SUBSCRIBE', null, function () {
|
||||||
sframeChan.query('Q_SET_TEAM', null, function (err) {
|
sframeChan.query('Q_SET_TEAM', null, function (err) {
|
||||||
if (err) { return void console.error(err); }
|
if (err) { return void console.error(err); }
|
||||||
|
if (APP.drive && APP.drive.close) { APP.drive.close(); }
|
||||||
APP.team = null;
|
APP.team = null;
|
||||||
|
APP.drive = null;
|
||||||
APP.buildUI(common);
|
APP.buildUI(common);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -206,6 +208,7 @@ define([
|
|||||||
updateSharedFolders: updateSharedFolders,
|
updateSharedFolders: updateSharedFolders,
|
||||||
APP: driveAPP
|
APP: driveAPP
|
||||||
});
|
});
|
||||||
|
APP.drive = drive;
|
||||||
driveAPP.refresh = drive.refresh;
|
driveAPP.refresh = drive.refresh;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user