[incremental search] isearch highlight cleanup

This commit is contained in:
Robert Krahn 2013-03-17 17:38:33 -07:00
commit 69b125db10
3 changed files with 49 additions and 16 deletions

View file

@ -209,6 +209,14 @@
box-sizing: border-box;
}
.ace_marker-layer .ace_isearch-result {
position: absolute;
z-index: 6;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}}
.ace_line .ace_fold {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;

View file

@ -34,6 +34,7 @@ define(function(require, exports, module) {
var oop = require("./lib/oop");
var Range = require("./range").Range;
var Search = require("./search").Search;
var SearchHighlight = require("./search_highlight").SearchHighlight;
var iSearchCommandModule = require("./commands/incremental_search_commands");
var ISearchKbd = iSearchCommandModule.IncrementalSearchKeyboardHandler;
@ -65,14 +66,14 @@ oop.inherits(IncrementalSearch, Search);
;(function() {
this.activate = function(editor, backwards) {
this.$editor = editor;
this.$startPos = this.$currentPos = editor.getCursorPosition();
this.activate = function(ed, backwards) {
this.$editor = ed;
this.$startPos = this.$currentPos = ed.getCursorPosition();
this.$options.needle = '';
this.$options.backwards = backwards;
editor.keyBinding.addKeyboardHandler(this.$keyboardHandler);
this.$mousedownHandler = editor.addEventListener('mousedown', this.onMouseDown.bind(this));
this.selectionFix(editor);
ed.keyBinding.addKeyboardHandler(this.$keyboardHandler);
this.$mousedownHandler = ed.addEventListener('mousedown', this.onMouseDown.bind(this));
this.selectionFix(ed);
this.statusMessage(true);
}
@ -97,6 +98,14 @@ oop.inherits(IncrementalSearch, Search);
}
}
this.highlight = function(regexp) {
var sess = this.$editor.session,
hl = sess.$isearchHighlight = sess.$isearchHighlight || sess.addDynamicMarker(
new SearchHighlight(null, "ace_isearch-result", "text"));
hl.setRegexp(regexp);
sess._emit("changeBackMarker"); // force highlight layer redraw
}
this.cancelSearch = function(reset) {
var e = this.$editor;
this.$prevNeedle = this.$options.needle;
@ -105,8 +114,7 @@ oop.inherits(IncrementalSearch, Search);
e.moveCursorToPosition(this.$startPos);
this.$currentPos = this.$startPos;
}
e.session.highlight(null);
e.session._emit("changeBackMarker"); // force highlight layer redraw
this.highlight(null);
return Range.fromPoints(this.$currentPos, this.$currentPos);
}
@ -132,9 +140,7 @@ oop.inherits(IncrementalSearch, Search);
this.$editor.moveCursorToPosition(found.end);
if (moveToNext) this.$currentPos = found.end;
// highlight after cursor move, so selection works properly
// also force highlight layer redraw
session.highlight(options.re);
session._emit("changeBackMarker");
this.highlight(options.re)
}
this.statusMessage(found);
@ -205,10 +211,15 @@ exports.IncrementalSearch = IncrementalSearch;
var dom = require('./lib/dom');
function patchHighlightMarkerStyling(options) {
options = options || {};
var id = 'incremental-search-highlight-style-patch',
css = 'div.ace_selected-word {\n'
+ ' background-color: orange !important;\n'
+ ' border: 0 !important;\n'
var id = 'incremental-search-highlighting',
css = 'div.ace_isearch-result {\n'
+ " border-radius: 4px;\n"
+ " border: 8px solid rgba(255, 200, 0, 0.5);\n"
+ " box-shadow: 0 0 4px rgb(255, 200, 0);\n"
+ "}\n"
+ '.ace_dark div.ace_isearch-result {\n'
+ " border: 8px solid rgb(100, 110, 160);\n"
+ " box-shadow: 0 0 4px rgb(80, 90, 140);\n"
+ '}\n'
dom.importCssString(css, id);
}

View file

@ -57,7 +57,7 @@ function callHighlighterUpdate() {
ranges = ranges.concat(markerRanges);
}
}
session.$searchHighlight.update([], mockMarkerLayer, session, {
session.$isearchHighlight.update([], mockMarkerLayer, session, {
firstRow: 0, lastRow: session.getRowLength()});
return ranges;
}
@ -79,6 +79,20 @@ module.exports = {
assert.notEqual(editor.getKeyboardHandler(), iSearch.$keyboardHandler);
},
"test: isearch highlight setup" : function() {
var sess = editor.session;
iSearch.activate(editor);
iSearch.highlight('foo');
var highl = sess.$isearchHighlight.id;
assert.ok(sess.$isearchHighlight, 'session has no isearch highlighter');
assert.equal(sess.getMarkers()[highl.id], highl.id, 'isearch highlight not in markers');
iSearch.deactivate();
iSearch.activate(editor);
iSearch.highlight('bar');
var highl2 = sess.$isearchHighlight.id;
assert.equal(highl2, highl, 'multiple isearch highlights');
},
"test: find simple text incrementally" : function() {
iSearch.activate(editor);
var range = iSearch.addChar('1'), // "1"