[incremental search] isearch highlight cleanup
This commit is contained in:
parent
a11c06a589
commit
69b125db10
3 changed files with 49 additions and 16 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue