diff --git a/customize.dist/src/less2/include/drive.less b/customize.dist/src/less2/include/drive.less
index 1debb223e..1aec980d0 100644
--- a/customize.dist/src/less2/include/drive.less
+++ b/customize.dist/src/less2/include/drive.less
@@ -216,6 +216,41 @@
}
+ #cp-app-drive-search {
+ display: flex;
+ align-items: center;
+ max-width: 400px;
+ font-size: 30px;
+ margin: 15px;
+ input {
+ background: transparent;
+ color: @colortheme_drive-color;
+ .tools_placeholder-color(@colortheme_drive-color);
+ outline-width: 0px;
+ border-radius: 0;
+ width: 100%;
+ border: 0;
+ border-bottom: 3px solid @colortheme_drive-color;
+ margin: 0 5px;
+ flex: 1;
+ min-width: 0;
+ &:focus {
+ outline-width: 0px;
+ }
+ &.cp-app-drive-search-active {
+ & ~ .cp-app-drive-search-cancel {
+ visibility: visible;
+ }
+ }
+ }
+ .cp-app-drive-search-cancel {
+ visibility: hidden;
+ cursor: pointer;
+ }
+ .cp-app-drive-tree-search-icon, .cp-app-drive-search-cancel {
+ color: @colortheme_drive-color;
+ }
+ }
@@ -310,51 +345,6 @@
.cp-limit-container {
margin-top: 5px;
}
- #cp-app-drive-tree-search {
- text-align: center;
- padding: 0;
- position: relative;
- display: flex;
- background: @colortheme_drive-bg-light;
- border-right: 1px solid @colortheme_drive-bg-light;
- input {
- background: transparent;
- color: @colortheme_drive-color;
- .tools_placeholder-color(@colortheme_drive-color);
- outline-width: 0px;
- border-radius: 0;
- width: 100%;
- //border: 1px solid #ccc;
- border: 0;
- //border-right: 0;
- height: @variables_bar-height;
- padding: 0 5px;
- padding-left: 45px;
- flex: 1;
- min-width: 0;
- &:focus {
- outline-width: 0px;
- }
- &.cp-app-drive-search-active {
- & ~ .cp-app-drive-tree-search-icon {
- display: none;
- }
- & ~ .cp-app-drive-search-cancel {
- display: inline-block;
- }
- }
- }
- .cp-app-drive-search-cancel {
- display: none;
- cursor: pointer;
- }
- .cp-app-drive-tree-search-icon, .cp-app-drive-search-cancel {
- color: @colortheme_drive-color;
- position: absolute;
- left: 20px; // TODO align with drive categories
- top: 8px;
- }
- }
.fa.cp-app-drive-icon-expcol {
margin-left: -10px;
font-size: 14px;
diff --git a/www/common/drive-ui.js b/www/common/drive-ui.js
index c94204827..2729c6fb0 100644
--- a/www/common/drive-ui.js
+++ b/www/common/drive-ui.js
@@ -3143,7 +3143,74 @@ define([
});
};
+ APP.Search = {};
+ var isCharacterKey = function (e) {
+ return e.which === "undefined" /* IE */ ||
+ (e.which > 0 && e.which !== 13 && e.which !== 27 && !e.ctrlKey && !e.altKey);
+ };
var displaySearch = function ($list, value) {
+ var search = APP.Search;
+ var isInSearch = currentPath[0] === SEARCH;
+ var $div = $('
', {'id': 'cp-app-drive-search', 'class': 'cp-unselectable'});
+
+ $searchIcon.clone().appendTo($div);
+
+ var $input = APP.Search.$input = $('
', {
+ id: 'cp-app-drive-search-input',
+ type: 'text',
+ draggable: false,
+ tabindex: 1,
+ }).keyup(function (e) {
+ if (search.to) { window.clearTimeout(search.to); }
+ if ($input.val().trim() === "") {
+ search.cursor = 0;
+ displayDirectory([SEARCH]);
+ return;
+ }
+ if (e.which === 13) {
+ var newLocation = [SEARCH, $input.val()];
+ search.cursor = $input[0].selectionStart;
+ if (!manager.comparePath(newLocation, currentPath.slice())) { displayDirectory(newLocation); }
+ return;
+ }
+ if (e.which === 27) {
+ $input.val('');
+ search.cursor = 0;
+ displayDirectory([SEARCH]);
+ return;
+ }
+ if ($input.val()) {
+ if (!$input.hasClass('cp-app-drive-search-active')) {
+ $input.addClass('cp-app-drive-search-active');
+ }
+ } else {
+ $input.removeClass('cp-app-drive-search-active');
+ }
+ search.to = window.setTimeout(function () {
+ var newLocation = [SEARCH, $input.val()];
+ search.cursor = $input[0].selectionStart;
+ if (!manager.comparePath(newLocation, currentPath.slice())) { displayDirectory(newLocation); }
+ }, 500);
+ }).on('click mousedown mouseup', function (e) {
+ e.stopPropagation();
+ }).val(value || '').appendTo($div);
+ if (value) { $input.addClass('cp-app-drive-search-active'); }
+ $input[0].selectionStart = search.cursor || 0;
+ $input[0].selectionEnd = search.cursor || 0;
+
+ var cancel = h('span.fa.fa-times.cp-app-drive-search-cancel', {title:Messages.cancel});
+ cancel.addEventListener('click', function () {
+ $input.val('');
+ search.cursor = 0;
+ displayDirectory([SEARCH]);
+ });
+ $div.append(cancel);
+
+ $list.append($div);
+ setTimeout(function () {
+ $input.focus();
+ });
+
getFileListHeader(false).appendTo($list);
$list.closest('#cp-app-drive-content-folder').addClass('cp-app-drive-content-list');
var filesList = manager.search(value);
@@ -3434,18 +3501,6 @@ define([
// Display the tree and build the content
APP.resetTree();
- if (displayedCategories.indexOf(SEARCH) !== -1 && $tree.find('#cp-app-drive-tree-search-input').length) {
- // in history mode we want to focus the version number input
- if (!history.isHistoryMode && !APP.mobile()) {
- var st = $tree.scrollTop() || 0;
- if (!$('.alertify').length) {
- $tree.find('#cp-app-drive-tree-search-input').focus();
- }
- $tree.scrollTop(st);
- }
- $tree.find('#cp-app-drive-tree-search-input')[0].selectionStart = getSearchCursor();
- $tree.find('#cp-app-drive-tree-search-input')[0].selectionEnd = getSearchCursor();
- }
LS.setLastOpenedFolder(path);
@@ -3841,6 +3896,10 @@ define([
name: OWNED_NAME,
$icon: $ownedIcon
};
+ categories[SEARCH] = {
+ name: Messages.fm_searchPlaceholder,
+ $icon: $searchIcon
+ };
categories[TAGS] = {
name: TAGS_NAME,
$icon: $tagsIcon
@@ -3860,9 +3919,9 @@ define([
var s = $categories.scrollTop() || 0;
$tree.html('');
- if (displayedCategories.indexOf(SEARCH) !== -1) { createSearch($tree); }
var $div = $('
', {'class': 'cp-app-drive-tree-categories-container'})
.appendTo($tree);
+ if (displayedCategories.indexOf(SEARCH) !== -1) { createCategory($div, SEARCH); }
if (displayedCategories.indexOf(TAGS) !== -1) { createCategory($div, TAGS); }
if (displayedCategories.indexOf(RECENT) !== -1) { createCategory($div, RECENT); }
if (displayedCategories.indexOf(OWNED) !== -1) { createCategory($div, OWNED); }
@@ -4461,19 +4520,6 @@ define([
return;
}
});
- var isCharacterKey = function (e) {
- return e.which === "undefined" /* IE */ ||
- (e.which > 0 && e.which !== 13 && e.which !== 27 && !e.ctrlKey && !e.altKey);
- };
- $appContainer.on('keypress', function (e) {
- var $searchBar = $tree.find('#cp-app-drive-tree-search-input');
- if ($searchBar.is(':focus')) { return; }
- if (isCharacterKey(e)) {
- $searchBar.focus();
- e.preventDefault();
- return;
- }
- });
$appContainer.contextmenu(function () {
APP.hideMenu();
return false;