繁体   English   中英

用户脚本用于在GitHub中按Ctrl + Enter(内置热键)提交问题或发表评论时创建确认弹出窗口

[英]Userscript for creating a confirmation popup whenever submitting an issue or posting a comment via pressing Ctrl+Enter(the built-in hotkey) in GitHub

测试网址: https//github.com/darkred/test/issues/new

GitHub允许在公共仓库的问题区域:

  • 提交一个新问题只有1个字符作为标题,没有正文,和
  • 发布只有1个字符的评论。

上面发生了很多,因为“提交问题或评论”的内置热键是Ctrl + Enter :在我的问题/评论文本准备就绪之前,我不小心按下了键盘快捷键。


所以,我试图制作一个脚本(使用Greasemonkey),每当我尝试时,它会显示一个确认弹出窗口:

  • 提交新问题,或
  • 发表评论

Ctrl + Enter
如果用户在弹出窗口中按“ 确定 ”,则允许提交的脚本,
但如果用户在弹出窗口中按“ 取消 ”,则脚本停止提交。


我遇到过这两种方法:
在Brock Adams的有用评论之后,我有以下代码:

var targArea_1 = document.querySelector('#issue_body');         // New issue textarea
var targArea_2 = document.querySelector('#new_comment_field');  // New comment textarea

function manageKeyEvents (zEvent) {
    if (zEvent.ctrlKey && zEvent.keyCode == 13) {   // If Ctrl+Enter is pressed
        if (confirm('Are you sure?') == false) {    // If the user presses Cancel in the popup
            zEvent.stopPropagation();               // then it stops propagation of the event 
            zEvent.preventDefault();                // and cancels/stops the submit submit action bound to Ctrl+Enter
        } 
    }
}

if (targArea_1 !== null) {targArea_1.addEventListener('keydown', manageKeyEvents);}
if (targArea_2 !== null) {targArea_2.addEventListener('keydown', manageKeyEvents);}

现在,只要按Ctrl + Enter ,弹出窗口就会显示。
问题是在弹出窗口中按“ 确定”时没有提交问题/评论 (即使我之前没有在弹出窗口中按“ 取消 ”)。 如何解决这个问题?
而且,如何重新允许后,我按在弹出一旦取消问题/评论提交?
换句话说:在preventDefault()之后如何重新启用默认值?

基于用户trespassersW帮助这里 (我感谢他很多)
即我的代码缺少一个else分支:

if (confirm('Are you sure?') == false) {
    // ...
} else {
    var btn = document.querySelector("#partial-new-comment-form-actions button");
    if (btn) btn.click();
}

那是因为confirm消息框清除了键盘事件队列。
(因此, click 'Ok'操作必须由脚本完成)。

这是一个完整的工作脚本:

// ==UserScript==
// @nameGitHub Confirm Create and Close issues
// @include https://github.com/*
// @grant   none
// ==/UserScript==


(function () {      // Self-Invoking function

    function init() {

        // For submitting issues in issue body textarea via Ctrl+Enter
        var targArea1 = document.querySelector('#issue_body');  // New issue textarea
        function manageKeyEvents1(zEvent) {
            if (zEvent.ctrlKey && zEvent.keyCode === 13) {
                if (confirm('Are you sure?') === false) {
                    zEvent.stopPropagation();
                    zEvent.preventDefault();
                } else {
                    var btn1 = document.querySelector('.btn-primary');
                    if (btn1) {btn1.click();}
                }
            }
        }
        if (targArea1 !== null) { targArea1.addEventListener('keydown', manageKeyEvents1); }

        // ------------------------------------------------------------------------------------------------
        // For submitting issues in new comment textarea via Ctrl+Enter
        var targArea2 = document.querySelector('#new_comment_field');   // New comment textarea
        function manageKeyEvents2(zEvent) {
            if (zEvent.ctrlKey && zEvent.keyCode === 13) {
                if (confirm('Are you sure?') === false) {
                    zEvent.stopPropagation();
                    zEvent.preventDefault();
                } else {
                    var btn2 = document.querySelector('#partial-new-comment-form-actions button');
                    if (btn2) {btn2.click();}
                }
            }
        }
        if (targArea2 !== null) { targArea2.addEventListener('keydown', manageKeyEvents2); }

    }

    // Page load
    init();

    // On pjax (because GitHub uses the History API)
    document.addEventListener('pjax:end', init);

})();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM