można podłączyć do CodeMirror za pomocą haka i zdefiniować własne zdarzenie, które pożary, gdy zmienia się kursor z jednego kliknięcia myszy na edytorze
CodeMirror.defineInitHook(function (editor) {
editor.cursorDidChange = false;
$(editor.getWrapperElement()).on({
mousedown : function() {
if (editor.cursorDidChange) CodeMirror.signal(editor, 'cursorClick');
},
mouseup : function() {
editor.cursorDidChange = false;
}
});
editor.on('cursorActivity', function(e) {
if (e.isSelection) editor.cursorDidChange = true;
});
editor.on('beforeSelectionChange', function(e, range) {
var start = range.ranges[0].anchor, end = range.ranges[0].head;
e.isSelection = range.origin == '*mouse' && start.line == end.line && start.ch == end.ch;
})
});
Używa flagi i zegara do przechwytywania obu zdarzeń, jeśli wystąpią one w krótkim czasie względem siebie, ponieważ program obsługi kliknięć jest uruchamiany zaraz po obsłudze kursora kursora.
Oto przykład działa jak używać nowo zdefiniowanej Event z CodeMirror:
/* Create Hook */
CodeMirror.defineInitHook(function (editor) {
\t editor.cursorDidChange = false;
\t $(editor.getWrapperElement()).on({
\t mousedown : function() {
if (editor.cursorDidChange) CodeMirror.signal(editor, 'cursorClick');
},
mouseup : function() {
editor.cursorDidChange = false;
}
});
editor.on('cursorActivity', function(e) {
\t if (e.isSelection) editor.cursorDidChange = true;
});
editor.on('beforeSelectionChange', function(e, range) {
var start = range.ranges[0].anchor, end = range.ranges[0].head;
e.isSelection = range.origin == '*mouse' && start.line == end.line && start.ch == end.ch;
})
});
/* -------------- */
/* Create an editor to test it */
var $this = $('.code').eq(0),
$code = $this.html(),
$unescaped = $('<div/>').html($code).text();
$this.empty();
var editor = CodeMirror($this.get(0), {
value : $unescaped,
mode : 'javascript',
lineNumbers : true,
readOnly : false
});
/* Lets test out the new event */
editor.on('cursorClick', function() {
\t $('<div />', {text : 'Cursor moved when clicked !'}).appendTo('#result')
.show(1).delay(1000).fadeOut(function() {
\t $(this).remove();
});
});
body {background: #eee;}
.code {margin: 10px 0;}
#result {color: green;}
.CodeMirror {height: auto!important;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://codemirror.net/lib/codemirror.js"></script>
<script src="https://codemirror.net/mode/javascript/javascript.js"></script>
<link href="https://codemirror.net/lib/codemirror.css" rel="stylesheet"/>
<!-- EDITOR -->
<div class="code">test.fn = test.prototype = {
display : function() {}
console.log("Move cursor by clicking");
console.log("Move cursor with keys");
},
\t pushStack: function(elems) {
\t \t // This is just pseudocode to have something to test
\t }
return false;
}</div>
<!-- EDITOR END -->
<div id="result"></div>
'użytkownik przesuwa kursor do innej lokalizacji za pośrednictwem click' myszy można wyjaśnić tę część ? –
@IvankaTodorova Jeśli nie jest to jasne z tagów: jest to pytanie dotyczące edytora CodeMirror (https://codemirror.net/). Przez "inną lokalizację" rozumiem, że użytkownik zmienia bieżącą lokalizację kursora, klikając myszką jakiś tekst w edytorze. – Oak
Czy możesz zamieścić swoją aktualną konfigurację dla edytora codemirror? –