单击

时间:2017-12-01 18:23:27

标签: javascript angular codemirror ui-codemirror

我们在角度Web应用程序中使用Code Mirror。目前,当用户突出显示一段文本,然后点击突出显示的部分后,代码镜像会将所选区域的副本放入剪贴板。这不是我们想要的行为。我们希望只是取消选择文本的正常行为。

我试图抓住鼠标点击事件并返回false或将codemirrorIgnore设置为true,但它没有工作。我还尝试重新定义" LeftDown"的关键地图。但我找不到有关现有行动名称定义位置的信息。

有人可以帮忙吗?

以下是我尝试更改KeyMap的代码:

$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设置为true会阻止左键单击做任何事情。

1 个答案:

答案 0 :(得分:0)

我发现这是Code Mirror的一个错误。这是Code Mirror代码的第一位:

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) {

如果没有拖动,则将点击视为单击。我没有仔细查看代码,看看我是否可以修复它,但由于拖动使用剪贴板,剪贴板已被删除并替换为所选文本。

为了避免这种骚扰,你需要禁用拖放。