skomski created this revision.
skomski added reviewers: dcoughlin, krememek, jordan_rose.
skomski added a subscriber: cfe-commits.
skomski set the repository for this revision to rL LLVM.

Adds three keyboard shortcuts to report.html
to make navigation faster:
    
Jump to next path: j
Jump to previous path: k
Show Help: ?

Repository:
  rL LLVM

http://reviews.llvm.org/D13134

Files:
  lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
  tools/scan-build/keyboard-shortcuts.js
  tools/scan-build/scan-build

Index: tools/scan-build/scan-build
===================================================================
--- tools/scan-build/scan-build
+++ tools/scan-build/scan-build
@@ -459,28 +459,20 @@
 ##----------------------------------------------------------------------------##
 
 sub CopyFiles {
-
   my $Dir = shift;
+  my @Files = ("sorttable.js", "keyboard-shortcuts.js", "scanview.css");
 
-  my $JS = Cwd::realpath("$RealBin/sorttable.js");
-
-  DieDiag("Cannot find 'sorttable.js'.\n")
-    if (! -r $JS);
-
-  copy($JS, "$Dir");
+  foreach my $FileName (@Files) {
+    my $File = Cwd::realpath("$RealBin/$FileName");
 
-  DieDiag("Could not copy 'sorttable.js' to '$Dir'.\n")
-    if (! -r "$Dir/sorttable.js");
+    DieDiag("Cannot find '$FileName'.\n")
+      if (! -r $File);
 
-  my $CSS = Cwd::realpath("$RealBin/scanview.css");
+    copy($File, "$Dir");
 
-  DieDiag("Cannot find 'scanview.css'.\n")
-    if (! -r $CSS);
-
-  copy($CSS, "$Dir");
-
-  DieDiag("Could not copy 'scanview.css' to '$Dir'.\n")
-    if (! -r $CSS);
+    DieDiag("Could not copy '$FileName' to '$Dir'.\n")
+      if (! -r "$Dir/$FileName");
+  }
 }
 
 ##----------------------------------------------------------------------------##
Index: tools/scan-build/keyboard-shortcuts.js
===================================================================
--- /dev/null
+++ tools/scan-build/keyboard-shortcuts.js
@@ -0,0 +1,41 @@
+(function () {
+
+function Jump(matchTarget, lastBlock) {
+  var match = document.location.hash.match(/Path\d+|EndPath/)[0];
+  var matches = document.querySelectorAll('#' + match + ' .PathNav')
+  if (matches.length == 2) {
+    document.location = matches[matchTarget].children[0].href;
+  } else {
+    if (!document.location.hash.includes(lastBlock)) {
+      document.location = matches[0].children[0].href;
+    }
+  }
+};
+
+function ShowHelp() {
+  alert("Keyboard shortcuts:\n\n" +
+        "Jump to next path: j\n"  +
+        "Jump to previous path: k\n");
+}
+
+const KEYS = {
+  J: 74,
+  K: 75,
+  SLASH: 191
+}
+
+document.onkeydown = function (e) {
+  switch(e.keyCode) {
+    case KEYS.J:
+      Jump(1, '#EndPath');
+      break;
+    case KEYS.K:
+      Jump(0, '#Path1');
+      break;
+    case KEYS.SLASH:
+      ShowHelp();
+      break;
+  }
+};
+
+}());
Index: lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
===================================================================
--- lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
+++ lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
@@ -263,6 +263,13 @@
     R.InsertTextBefore(SMgr.getLocForStartOfFile(FID), os.str());
   }
 
+  {
+    std::string s;
+    llvm::raw_string_ostream os(s);
+    os << "<script src=\"keyboard-shortcuts.js\"></script>";
+    R.InsertTextBefore(SMgr.getLocForStartOfFile(FID), os.str());
+  }
+
   // Add CSS, header, and footer.
 
   html::AddHeaderFooterInternalBuiltinCSS(R, FID, Entry->getName());
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to