Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Keep the search bar open #154

Merged
merged 1 commit into from
Dec 26, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/command/Commands.js
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ define(function (require, exports, module) {
exports.TOGGLE_LINE_NUMBERS = "view.toggleLineNumbers"; // EditorOptionHandlers.js _getToggler()
exports.TOGGLE_ACTIVE_LINE = "view.toggleActiveLine"; // EditorOptionHandlers.js _getToggler()
exports.TOGGLE_WORD_WRAP = "view.toggleWordWrap"; // EditorOptionHandlers.js _getToggler()
exports.TOGGLE_SEARCH_AUTOHIDE = "view.toggleSearchAutoHide"; // EditorOptionHandlers.js _getToggler()

exports.CMD_OPEN = "cmd.open";
exports.CMD_ADD_TO_WORKINGSET_AND_OPEN = "cmd.addToWorkingSetAndOpen"; // DocumentCommandHandlers.js handleOpenDocumentInNewPane()
Expand Down
1 change: 1 addition & 0 deletions src/command/DefaultMenus.js
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ define(function (require, exports, module) {
menu.addMenuItem(Commands.CMD_SPLITVIEW_HORIZONTAL);
menu.addMenuDivider();
menu.addMenuItem(Commands.VIEW_HIDE_SIDEBAR);
menu.addMenuItem(Commands.TOGGLE_SEARCH_AUTOHIDE);
menu.addMenuDivider();
menu.addMenuItem(Commands.VIEW_INCREASE_FONT_SIZE);
menu.addMenuItem(Commands.VIEW_DECREASE_FONT_SIZE);
Expand Down
7 changes: 7 additions & 0 deletions src/editor/Editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ define(function (require, exports, module) {
UPPERCASE_COLORS = "uppercaseColors",
USE_TAB_CHAR = "useTabChar",
WORD_WRAP = "wordWrap",
AUTO_HIDE_SEARCH = "autoHideSearch",
INDENT_LINE_COMMENT = "indentLineComment",
INDENT_LINE_COMMENT = "indentLineComment",
INPUT_STYLE = "inputStyle";

Expand Down Expand Up @@ -229,6 +231,11 @@ define(function (require, exports, module) {
PreferencesManager.definePreference(WORD_WRAP, "boolean", true, {
description: Strings.DESCRIPTION_WORD_WRAP
});

PreferencesManager.definePreference(AUTO_HIDE_SEARCH, "boolean", true, {
description: Strings.DESCRIPTION_SEARCH_AUTOHIDE
});

PreferencesManager.definePreference(INDENT_LINE_COMMENT, "boolean", false, {
description: Strings.DESCRIPTION_INDENT_LINE_COMMENT
});
Expand Down
8 changes: 7 additions & 1 deletion src/editor/EditorOptionHandlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ define(function (require, exports, module) {
var SHOW_LINE_NUMBERS = "showLineNumbers",
STYLE_ACTIVE_LINE = "styleActiveLine",
WORD_WRAP = "wordWrap",
CLOSE_BRACKETS = "closeBrackets";
CLOSE_BRACKETS = "closeBrackets",
AUTO_HIDE_SEARCH = "autoHideSearch";


/**
* @private
Expand All @@ -49,6 +51,9 @@ define(function (require, exports, module) {
_optionMapping[STYLE_ACTIVE_LINE] = Commands.TOGGLE_ACTIVE_LINE;
_optionMapping[WORD_WRAP] = Commands.TOGGLE_WORD_WRAP;
_optionMapping[CLOSE_BRACKETS] = Commands.TOGGLE_CLOSE_BRACKETS;
_optionMapping[AUTO_HIDE_SEARCH] = Commands.TOGGLE_SEARCH_AUTOHIDE;



/**
* @private
Expand Down Expand Up @@ -98,6 +103,7 @@ define(function (require, exports, module) {
CommandManager.register(Strings.CMD_TOGGLE_ACTIVE_LINE, Commands.TOGGLE_ACTIVE_LINE, _getToggler(STYLE_ACTIVE_LINE));
CommandManager.register(Strings.CMD_TOGGLE_WORD_WRAP, Commands.TOGGLE_WORD_WRAP, _getToggler(WORD_WRAP));
CommandManager.register(Strings.CMD_TOGGLE_CLOSE_BRACKETS, Commands.TOGGLE_CLOSE_BRACKETS, _getToggler(CLOSE_BRACKETS));
CommandManager.register(Strings.CMD_TOGGLE_SEARCH_AUTOHIDE, Commands.TOGGLE_SEARCH_AUTOHIDE, _getToggler(AUTO_HIDE_SEARCH));

AppInit.htmlReady(_init);
});
2 changes: 2 additions & 0 deletions src/htmlContent/findreplace-bar.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,5 @@
<div class="indexing-message">{{Strings.FIND_IN_FILES_INDEXING}}</div>
</div>
{{/multifile}}

<a href="#" class="close">&times;</a>
2 changes: 2 additions & 0 deletions src/nls/root/strings.js
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,7 @@ define({
"CMD_WORKINGSET_SORT_BY_TYPE" : "Sort by Type",
"CMD_WORKING_SORT_TOGGLE_AUTO" : "Automatic Sort",
"CMD_THEMES" : "Themes\u2026",
"CMD_TOGGLE_SEARCH_AUTOHIDE" : "Automatically close search",

// Navigate menu commands
"NAVIGATE_MENU" : "Navigate",
Expand Down Expand Up @@ -779,6 +780,7 @@ define({
"DESCRIPTION_USE_TAB_CHAR" : "true to use tabs instead of spaces",
"DESCRIPTION_UPPERCASE_COLORS" : "true to generate uppercase hex colors in Inline Color Editor",
"DESCRIPTION_WORD_WRAP" : "Wrap lines that exceed the viewport width",
"DESCRIPTION_SEARCH_AUTOHIDE" : "Close the search as soon as the editor is focused",
"DESCRIPTION_DETECTED_EXCLUSIONS" : "A list of files that have been detected to cause Tern to run out of control",
"DESCRIPTION_INFERENCE_TIMEOUT" : "The amount of time after which Tern will time out when trying to understand files",
"DESCRIPTION_SHOW_ERRORS_IN_STATUS_BAR" : "true to show errors in status bar",
Expand Down
83 changes: 58 additions & 25 deletions src/search/FindBar.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ define(function (require, exports, module) {
intervalId = 0,
lastQueriedText = "",
lastTypedText = "",
lastTypedTextWasRegexp = false,
// eslint-disable-next-line no-unused-vars
lastKeyCode;

Expand Down Expand Up @@ -97,6 +98,7 @@ define(function (require, exports, module) {
this._enabled = true;
this.lastQueriedText = "";
this.lastTypedText = "";
this.lastTypedTextWasRegexp = false;
}
EventDispatcher.makeEventDispatcher(FindBar.prototype);

Expand Down Expand Up @@ -211,8 +213,10 @@ define(function (require, exports, module) {
* Save the prefs state based on the state of the toggles.
*/
FindBar.prototype._updatePrefsFromSearchBar = function () {
var isRegexp = this.$("#find-regexp").is(".active");
PreferencesManager.setViewState("caseSensitive", this.$("#find-case-sensitive").is(".active"));
PreferencesManager.setViewState("regexp", this.$("#find-regexp").is(".active"));
PreferencesManager.setViewState("regexp", isRegexp);
lastTypedTextWasRegexp = isRegexp;
};

/**
Expand Down Expand Up @@ -275,10 +279,27 @@ define(function (require, exports, module) {

self._addElementToSearchHistory(this._options.initialQuery);

this._modalBar = new ModalBar(Mustache.render(_searchBarTemplate, templateVars), true); // 2nd arg = auto-close on Esc/blur
this._modalBar = new ModalBar(
Mustache.render(_searchBarTemplate, templateVars),
!!PreferencesManager.get("autoHideSearch") // 2nd arg = auto-close on Esc/blur
);

// Done this way because ModalBar.js seems to react unreliably when
// modifying it to handle the escape key - the findbar wasn't getting
// closed as it should, instead persisting in the background
function _handleKeydown(e) {
if (e.keyCode === KeyEvent.DOM_VK_ESCAPE) {
e.stopPropagation();
e.preventDefault();
self.close();
}
}
window.document.body.addEventListener("keydown", _handleKeydown, true);

// When the ModalBar closes, clean ourselves up.
this._modalBar.on("close", function (event) {
window.document.body.removeEventListener("keydown", _handleKeydown, true);

// Hide error popup, since it hangs down low enough to make the slide-out look awkward
self.showError(null);
self._modalBar = null;
Expand All @@ -300,7 +321,9 @@ define(function (require, exports, module) {
$root
.on("input", "#find-what", function () {
self.trigger("queryChange");
lastTypedText = self.getQueryInfo().query;
var queryInfo = self.getQueryInfo();
lastTypedText = queryInfo.query;
lastTypedTextWasRegexp = queryInfo.isRegexp;
})
.on("click", "#find-case-sensitive, #find-regexp", function (e) {
$(e.currentTarget).toggleClass("active");
Expand Down Expand Up @@ -335,8 +358,11 @@ define(function (require, exports, module) {
return;
}
currentTime = new Date().getTime();
if (lastTypedTime && (currentTime - lastTypedTime >= 100) && self.getQueryInfo().query !== lastQueriedText &&

if (lastTypedTime && (currentTime - lastTypedTime >= 100) &&
self.getQueryInfo().query !== lastQueriedText &&
!FindUtils.isNodeSearchInProgress()) {

// init Search
if (self._options.multifile) {
if ($(e.target).is("#find-what")) {
Expand Down Expand Up @@ -384,6 +410,9 @@ define(function (require, exports, module) {
quickSearchContainer.show();
}
}
})
.on("click", ".close", function () {
self.close();
});

if (!this._options.multifile) {
Expand Down Expand Up @@ -652,6 +681,21 @@ define(function (require, exports, module) {
this.trigger("doFind");
};

/*
* Returns the string used to prepopulate the find bar
* @param {!Editor} editor
* @return {string} first line of primary selection to populate the find bar
*/
FindBar._getInitialQueryFromSelection = function(editor) {
var selectionText = editor.getSelectedText();
if (selectionText) {
return selectionText
.replace(/^\n*/, "") // Trim possible newlines at the very beginning of the selection
.split("\n")[0];
}
return "";
};

/**
* Gets you the right query and replace text to prepopulate the Find Bar.
* @static
Expand All @@ -660,39 +704,28 @@ define(function (require, exports, module) {
* @return {query: string, replaceText: string} Query and Replace text to prepopulate the Find Bar with
*/
FindBar.getInitialQuery = function (currentFindBar, editor) {
var query = lastTypedText,
var query,
selection = FindBar._getInitialQueryFromSelection(editor),
replaceText = "";

/*
* Returns the string used to prepopulate the find bar
* @param {!Editor} editor
* @return {string} first line of primary selection to populate the find bar
*/
function getInitialQueryFromSelection(editor) {
var selectionText = editor.getSelectedText();
if (selectionText) {
return selectionText
.replace(/^\n*/, "") // Trim possible newlines at the very beginning of the selection
.split("\n")[0];
}
return "";
}

if (currentFindBar && !currentFindBar.isClosed()) {
// The modalBar was already up. When creating the new modalBar, copy the
// current query instead of using the passed-in selected text.
query = currentFindBar.getQueryInfo().query;
var queryInfo = currentFindBar.getQueryInfo();
query = (!queryInfo.isRegexp && selection) || queryInfo.query;
replaceText = currentFindBar.getReplaceText();
} else {
var openedFindBar = FindBar._bars && _.find(FindBar._bars, function (bar) {
return !bar.isClosed();
});
var openedFindBar = FindBar._bars && _.find(FindBar._bars,
function (bar) {
return !bar.isClosed();
}
);

if (openedFindBar) {
query = openedFindBar.getQueryInfo().query;
replaceText = openedFindBar.getReplaceText();
} else if (editor) {
query = getInitialQueryFromSelection(editor) || lastTypedText;
query = (!lastTypedTextWasRegexp && selection) || lastQueriedText || lastTypedText;
}
}

Expand Down
3 changes: 2 additions & 1 deletion src/search/FindInFilesUI.js
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@ define(function (require, exports, module) {
var showMessage = false;
_findBar.enable(true);
if (zeroFilesToken === FindInFiles.ZERO_FILES_TO_SEARCH) {
_findBar.showError(StringUtils.format(Strings.FIND_IN_FILES_ZERO_FILES, FindUtils.labelForScope(FindInFiles.searchModel.scope)), true);
_findBar.showError(StringUtils.format(Strings.FIND_IN_FILES_ZERO_FILES,
FindUtils.labelForScope(FindInFiles.searchModel.scope)), true);
} else {
showMessage = true;
}
Expand Down
14 changes: 11 additions & 3 deletions src/search/FindReplace.js
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ define(function (require, exports, module) {
if (!primary) {
primary = _.last(selections);
}

editor._codeMirror.scrollIntoView({from: primary.start, to: primary.end});
editor.setSelections(selections, center, centerOptions);
}
Expand Down Expand Up @@ -584,6 +585,8 @@ define(function (require, exports, module) {
// Blank or invalid query: just jump back to initial pos
editor._codeMirror.setCursor(state.searchStartPos);
}

editor.lastParsedQuery = state.parsedQuery;
}


Expand All @@ -604,6 +607,9 @@ define(function (require, exports, module) {

// Prepopulate the search field
var initialQuery = FindBar.getInitialQuery(findBar, editor);
if (initialQuery.query === "" && editor.lastParsedQuery !== "") {
initialQuery.query = editor.lastParsedQuery;
}

// Close our previous find bar, if any. (The open() of the new findBar will
// take care of closing any other find bar instances.)
Expand All @@ -629,6 +635,7 @@ define(function (require, exports, module) {
findNext(editor, searchBackwards);
})
.on("close.FindReplace", function (e) {
editor.lastParsedQuery = state.parsedQuery;
// Clear highlights but leave search state in place so Find Next/Previous work after closing
clearHighlights(cm, state);

Expand All @@ -648,12 +655,12 @@ define(function (require, exports, module) {
*/
function doSearch(editor, searchBackwards) {
var state = getSearchState(editor._codeMirror);

if (state.parsedQuery) {
findNext(editor, searchBackwards);
return;
} else {
openSearchBar(editor, false);
}

openSearchBar(editor, false);
}


Expand Down Expand Up @@ -716,6 +723,7 @@ define(function (require, exports, module) {

function _launchFind() {
var editor = EditorManager.getActiveEditor();

if (editor) {
// Create a new instance of the search bar UI
clearSearch(editor._codeMirror);
Expand Down
9 changes: 7 additions & 2 deletions src/styles/brackets.less
Original file line number Diff line number Diff line change
Expand Up @@ -681,8 +681,6 @@ a, img {
.close {
position: absolute;
right: 10px;

// vertically centers close button
top: 50%;
margin-top: -10px;
}
Expand Down Expand Up @@ -1711,6 +1709,13 @@ a, img {
margin-left: 0;
border-radius: 0;
}

.close {
position: absolute;
right: 10px;
top: 50%;
margin-top: -8px;
}
}

// File exclusion filter (used only in Find in Files search bar, for now)
Expand Down
4 changes: 2 additions & 2 deletions test/spec/SpecRunnerUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -1357,7 +1357,7 @@ define(function (require, exports, module) {
/**
* Expects the given editor's selection to be a cursor at the given position (no range selected)
*/
toHaveCursorPosition: function (line, ch) {
toHaveCursorPosition: function (line, ch, ignoreSelection) {
var editor = this.actual;
var selection = editor.getSelection();
var notString = this.isNot ? "not " : "";
Expand All @@ -1379,7 +1379,7 @@ define(function (require, exports, module) {

// when adding the not operator, it's confusing to check both the size of the
// selection and the position. We just check the position in that case.
if (this.isNot) {
if (this.isNot || ignoreSelection) {
return positionsMatch;
}

Expand Down