2016-08-09 1 views
2

(In Fortsetzung der this answer) Geben SieUserscript für ein Bestätigungsfenster zu schaffen, wenn durch Drücken von Strg + Enter oder in der Titel Textbox einer neuen Ausgabe Seite in GitHub

Ich habe ein Skript zu machen versucht (mit Greasemonkey), die einen Bestätigungs-Popup zeigen würde, wenn ich versuche:

  • eine neue Ausgabe einreichen oder
  • hinterlässt einen Kommentar.

über drücken Strg + Enter:
wenn Benutzer Ok im Popup drücken, dann das Skript zu ermöglichen, die einreichen,
aber wenn der Benutzer Cancel im Popup drückt, dann das Skript das stoppen einreichen.

Das Skript in der obigen Antwort funktioniert in diesen Fällen ordnungsgemäß.


Ich habe bemerkt, dass es eine zusätzliche Möglichkeit gibt, ein Problem zu unterbreiten:
drücken Geben Sie oder Strg + Geben Sie während Fokus auf die Titel Textbox Problem haben.

Ich möchte dies auch mit dem Skript abdecken.

Unten ist mein Code.
Wenn ich nur die neue Problemseite (https://github.com/darkred/test/issues/new) in einem neuen Tab öffnen _ (d. H. Nicht über einzelne Seite Anwendung Workflow, auch bekannt als die History API) _), dann das Skript auch funktioniert, wenn drücken Strg + Geben Sie.

Das Problem, das ich immer noch haben, dass , wenn ich auf die neue Ausgabe Seite navigieren über Anschluss an die New issue Taste (dh über die Geschichte API),
und dann entweder ich drücken Strg + Enter oder einfach Geben Sie in den Titel Textfeld, dann erscheint das Popup vorübergehend, aber das Senden ist nicht blockiert
.

(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 
})(); 

STR:

  • offen https://github.com/darkred/test/issues,
  • klicken Sie auf die Schaltfläche New Issue (Sie über die Geschichte API https://github.com/darkred/test/issues/new weitergeleitet werden,
  • (Sie werden den Fokus bemerken jetzt ist in der Ausgabe Titel Textfeld)
    Typ 123 als Problem Titel und behalten Sie den Fokus auf das Problem Titel Textfeld (lassen Sie die ist sue Körper leer),
  • drücken Strg + Enter (oder nur Enter),
  • Mitteilung nun, dass das Bestätigungsfenster für einen Moment erscheint,
    aber die vorlegen wird nicht blockiert werden.

Was ist falsch an meinem Skript?


Als Referenz ist hier eine Liste der Tastaturkürzel Liste der GitHub: screenshot,
wird, wenn Sie erscheint drücken? in der neuen Ausgabeseite.

+1

Versuchen vor dem 'confirm' zu verhindern, und wenn okay'd , rufen Sie das Formular 'submit()' direkt auf oder verwenden Sie 'dispatchEvent'. – wOxxOm

+0

@wOxxOm: Danke, dass du versucht hast zu helfen. Also habe ich versucht, vor dem 'confirm' zu verhindern, aber leider, wenn ich' manageKeyEvents (zEvent) 'in jetzt 'if (zEvent.ctrlKey && zEvent.keyCode === 13) {zEvent.stopPropagation(); zEvent.preventDefault(); 'und dann' if (confirm === ..) 'dann stoppt es das Senden nicht. – darkred

+1

Ja, verhindert die Arbeit für das aktuelle Ereignis, also müssen Sie einen "senden" Listener hinzufügen. – wOxxOm

Antwort

0

konnte ich diese lösen, indem eine unfocus + Re-Fokussierung auf das #issue_title Element zwingt:
, wenn Sie die neue Ausgabe-Seite zu öffnen, der Fokus auf dem Thema Titel Textbox ist.
Das Skript aus irgendeinem Grund würde das Senden nicht blockieren. Wenn Sie jedoch einen Unfokus und Neufokussierung dieses Elements (mit blur() (= Unfokus) und focus()) erzwingen, blockiert das Skript das Senden. Hier

ist der Code (immer // @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 
})(); 


Und hier ist die komplette userscript:
GitHub - Confirmations before submitting issues and comments

Verwandte Themen