2017-12-01 6 views
0

角度ウェブアプリケーションでコードミラーを使用しています。現在、ユーザーがテキストを強調表示した後、強調表示された部分をクリックすると、コードミラーは選択された領域のコピーをクリップボードに配置します。これは私たちが望む行動ではありません。テキストの選択を解除するだけの通常の動作が欲しいです。クリック時のコードミラーコピーの防止

私はマウスクリックイベントをキャッチしてfalseを返すか、codemirrorIgnoreをtrueに設定しようとしましたが、動作しませんでした。私は "LeftDown"のキーマップを再定義しようとしましたが、既存のアクション名が定義されている場所に関する情報は見つかりませんでした。

誰でも手助けできますか?ここで

私はキーマップを変更するために試したコードは次のとおりです。

$scope.editorOptions = { 
    lineWrapping: true, 
    lineNumbers: true, 
    smartIndent: true, 
    autoCloseTags: true, 
    cursorScrollMargin: 25, 
    styleActiveLine: true, 
    mode: "text/html", 
    theme: "default", 
    matchBrackets: true, 
    matchTags: { 
     bothTags: true 
    }, 
    extraKeys: { 
     "F11": function (cm) { 
      cm.setOption("fullScreen", !cm.getOption("fullScreen")); 
     }, 
     "Esc": function (cm) { 
      if (cm.getOption("fullScreen")) { 
       cm.setOption("fullScreen", false); 
      } 
     }, 
     //Don't know where "autocomple", "findPersistent" are defined so I can see what is available 
     "LeftClick": "LeftClick", 
     "Ctrl-Space": "autocomplete", 
     "Alt-B": "findPersistent", 
     "Ctrl-J": "toMatchingTag" 
    }, 
    viewportMargin: 10, 
    textWrapping: true 
}; 

私もui-codemirror="{ onLoad : codemirrorLoaded }"を使用してのonload機能を使用しようと、次の

$scope.codemirrorLoaded = function(_editor) { 
    _editor.on("mouseDown", function(cm, event) { 
     cm.codemirrorIgnore = true; 
     //also tried return false 
    } 
}; 

falseを返すには、何もしなかったし、codemirrorIgnoreを設定します本当に、左クリックが何もしないようにしました。

+0

あなたが既に持っているコードと、手元にある問題を解決しようとしたコードを提供すると、より役に立ちます。 –

+0

申し訳ございません。私は月曜日まで待つ必要があります。ありがとう。 – markbernard

+0

@GhassenLouhaichiは私が試したコードサンプルを追加しました。 – markbernard

答えて

0

これはコードミラーのバグであることが判明しました。ここではコードのミラーコードの最初のビットは次のとおりです。

if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && 
    type == "single" && (contained = sel.contains(start)) > -1 && 
    (cmp((contained = sel.ranges[contained]).from(), start) < 0 || start.xRel > 0) && 
    (cmp(contained.to(), start) > 0 || start.xRel < 0)) 
    leftButtonStartDrag(cm, e, start, modifier); 
else 
    leftButtonSelect(cm, e, start, type, modifier); 

これによると、ドラッグ&ドロップは、その後、ドラッグ、それがデフォルトである、有効になっている場合に起動します。しかし、コードの次のビットで:

// Start a text drag. When it ends, see if any dragging actually 
// happen, and treat as a click if it didn't. 
function leftButtonStartDrag(cm, e, start, modifier) { 

ドラッグがない場合、クリックとして処理します。私はそれを修正することができるかどうかを確認するコードを見ていないが、ドラッグはクリップボードを使用するので、クリップボードは既に消去され、選択されたテキストに置き換えられます。

このような問題を回避するには、ドラッグアンドドロップを無効にする必要があります。

関連する問題