每当在 GitHub 中的新问题页面的标题文本框中按 Ctrl+Enter 或 Enter 时,用于创建确认弹出窗口的用户脚本
Userscript for creating a confirmation popup whenever pressing Ctrl+Enter or Enter in the title textbox of a new issue page in GitHub
(延续)
我一直在尝试制作一个脚本(使用 Greasemonkey),每当我尝试这样做时都会显示一个确认弹出窗口:
- 提交新问题,或
- post 一条新评论。
通过按 Ctrl + Enter:
如果用户在弹出窗口中按下 Ok
,则脚本允许提交,
但如果用户在弹出窗口中按下 Cancel
,则脚本会停止提交。
上述答案中的脚本在这些情况下工作正常。
我注意到,还有一种提交问题的方法:
按 Enter 或 Ctrl+Enter 并同时关注 issue title 文本框。
我也想用脚本来解决这个问题。
下面是我的代码。
如果我只是在新选项卡中打开新问题页面 (https://github.com/darkred/test/issues/new)_(即不通过 single-page 应用程序工作流程,也就是历史记录 API)_),那么该脚本在按下 Ctrl+Enter.
时也有效
我还有的问题是
如果我通过 New issue
按钮 (即通过历史记录 API)、
导航到新问题页面
然后我在标题文本框中按 Ctrl+Enter 或 Enter,
然后弹出窗口暂时出现,但提交未被阻止。
(function () {
function init() {
var targArea = document.querySelector('#issue_title'); // New issue title
function manageKeyEvents(zEvent) {
if (zEvent.ctrlKey && zEvent.keyCode === 13) { // and the focused element is the issue title textbox
if (confirm('Are you sure?') === false) {
zEvent.stopPropagation();
zEvent.preventDefault();
// } else {
// var btn = document.querySelector('.btn-primary'); // 'Submit new issue' button
// btn.click();
}
}
}
if (targArea !== null) {targArea.addEventListener('keydown', manageKeyEvents);}
}
init();
document.addEventListener('pjax:end', init); // for the History API
})();
力量:
- 打开 https://github.com/darkred/test/issues,
- 单击
New Issue
按钮(您将通过历史记录 API 重定向到 https://github.com/darkred/test/issues/new、
- (您会注意到现在焦点在问题标题文本框上)
输入 123 作为问题标题并将焦点放在问题标题文本框上(将问题 body 留空),
- 按 Ctrl+Enter(或直接按 Enter),
- 现在请注意,确认弹出窗口将立即出现,
但不会阻止提交。
我的脚本有什么问题?
此处列出了 GitHub 的键盘快捷键列表供参考:screenshot、
当您在新问题页面中按 ? 时出现。
我通过在 #issue_title
元素上强制取消焦点+re-focus:
设法解决了这个问题
当您打开新问题页面时,焦点位于问题标题文本框上。
由于某种原因,脚本不会阻止提交。但是,如果您强制该元素 (使用 blur()
(=unfocus) 和 focus()
) 取消焦点和 re-focus,则脚本会阻止提交。
这是代码(总是// @run-at document-end
)
(function () {
function init() {
var targArea = document.querySelector('#issue_title'); // New issue title
function manageKeyEvents(zEvent) {
targArea.blur();
targArea.focus();
if ((zEvent.ctrlKey && zEvent.keyCode === 13) || zEvent.keyCode === 13) {
if (confirm('Are you sure?') === false) {
zEvent.stopPropagation();
zEvent.preventDefault();
} else {
var btn = document.querySelector('.btn-primary');
btn.click();
}
}
}
if (targArea !== null) {targArea.addEventListener('keydown', manageKeyEvents);}
}
init();
document.addEventListener('pjax:end', init); // for the History API
})();
这是完整的用户脚本:
GitHub - Confirmations before submitting issues and comments
(延续
我一直在尝试制作一个脚本(使用 Greasemonkey),每当我尝试这样做时都会显示一个确认弹出窗口:
- 提交新问题,或
- post 一条新评论。
通过按 Ctrl + Enter:
如果用户在弹出窗口中按下 Ok
,则脚本允许提交,
但如果用户在弹出窗口中按下 Cancel
,则脚本会停止提交。
上述答案中的脚本在这些情况下工作正常。
我注意到,还有一种提交问题的方法:
按 Enter 或 Ctrl+Enter 并同时关注 issue title 文本框。
我也想用脚本来解决这个问题。
下面是我的代码。
如果我只是在新选项卡中打开新问题页面 (https://github.com/darkred/test/issues/new)_(即不通过 single-page 应用程序工作流程,也就是历史记录 API)_),那么该脚本在按下 Ctrl+Enter.
我还有的问题是
如果我通过 New issue
按钮 (即通过历史记录 API)、
导航到新问题页面
然后我在标题文本框中按 Ctrl+Enter 或 Enter,
然后弹出窗口暂时出现,但提交未被阻止。
(function () {
function init() {
var targArea = document.querySelector('#issue_title'); // New issue title
function manageKeyEvents(zEvent) {
if (zEvent.ctrlKey && zEvent.keyCode === 13) { // and the focused element is the issue title textbox
if (confirm('Are you sure?') === false) {
zEvent.stopPropagation();
zEvent.preventDefault();
// } else {
// var btn = document.querySelector('.btn-primary'); // 'Submit new issue' button
// btn.click();
}
}
}
if (targArea !== null) {targArea.addEventListener('keydown', manageKeyEvents);}
}
init();
document.addEventListener('pjax:end', init); // for the History API
})();
力量:
- 打开 https://github.com/darkred/test/issues,
- 单击
New Issue
按钮(您将通过历史记录 API 重定向到 https://github.com/darkred/test/issues/new、 - (您会注意到现在焦点在问题标题文本框上)
输入 123 作为问题标题并将焦点放在问题标题文本框上(将问题 body 留空), - 按 Ctrl+Enter(或直接按 Enter),
- 现在请注意,确认弹出窗口将立即出现,
但不会阻止提交。
我的脚本有什么问题?
此处列出了 GitHub 的键盘快捷键列表供参考:screenshot、
当您在新问题页面中按 ? 时出现。
我通过在 #issue_title
元素上强制取消焦点+re-focus:
设法解决了这个问题
当您打开新问题页面时,焦点位于问题标题文本框上。
由于某种原因,脚本不会阻止提交。但是,如果您强制该元素 (使用 blur()
(=unfocus) 和 focus()
) 取消焦点和 re-focus,则脚本会阻止提交。
这是代码(总是// @run-at document-end
)
(function () {
function init() {
var targArea = document.querySelector('#issue_title'); // New issue title
function manageKeyEvents(zEvent) {
targArea.blur();
targArea.focus();
if ((zEvent.ctrlKey && zEvent.keyCode === 13) || zEvent.keyCode === 13) {
if (confirm('Are you sure?') === false) {
zEvent.stopPropagation();
zEvent.preventDefault();
} else {
var btn = document.querySelector('.btn-primary');
btn.click();
}
}
}
if (targArea !== null) {targArea.addEventListener('keydown', manageKeyEvents);}
}
init();
document.addEventListener('pjax:end', init); // for the History API
})();
这是完整的用户脚本:
GitHub - Confirmations before submitting issues and comments