summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorge Karpenkov <ekarpenkov@apple.com>2018-01-17 20:06:26 +0000
committerGeorge Karpenkov <ekarpenkov@apple.com>2018-01-17 20:06:26 +0000
commit6d83f34afdb0833ae5d7173daf0f8e009e95afa0 (patch)
tree547de29c0042d787ee7cac7be85f062114e0e967
parent8e21678d5b5c8b91a8d6ca9ba6a66e6cd5ba344f (diff)
downloadbcm5719-llvm-6d83f34afdb0833ae5d7173daf0f8e009e95afa0.tar.gz
bcm5719-llvm-6d83f34afdb0833ae5d7173daf0f8e009e95afa0.zip
[analyzer] Better UI in html reports for displaying shortcuts help
Make the help window accessible, but don't show by default. Use a different CSS class from macro. llvm-svn: 322750
-rw-r--r--clang/lib/Rewrite/HTMLRewrite.cpp4
-rw-r--r--clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp47
2 files changed, 48 insertions, 3 deletions
diff --git a/clang/lib/Rewrite/HTMLRewrite.cpp b/clang/lib/Rewrite/HTMLRewrite.cpp
index d3247846bc6..349b088c332 100644
--- a/clang/lib/Rewrite/HTMLRewrite.cpp
+++ b/clang/lib/Rewrite/HTMLRewrite.cpp
@@ -311,6 +311,10 @@ void html::AddHeaderFooterInternalBuiltinCSS(Rewriter &R, FileID FID,
" -webkit-border-radius:5px; -webkit-box-shadow:1px 1px 7px #000; "
" border-radius:5px; box-shadow:1px 1px 7px #000; "
"position: absolute; top: -1em; left:10em; z-index: 1 } \n"
+ " #tooltiphint { position: fixed; width: 50em; margin-left: -25em;"
+ "left: 50%; padding: 10px; border: 1px solid #b0b0b0;"
+ "border-radius: 2px; box-shadow: 1px 1px 7px black; "
+ "background-color: #c0c0c0; z-index: 2; }\n"
" .macro { color: darkmagenta; background-color:LemonChiffon;"
// Macros are position: relative to provide base for expansions.
" position: relative }\n"
diff --git a/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp b/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
index 635625107f0..acddcefc88f 100644
--- a/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
+++ b/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
@@ -101,6 +101,9 @@ private:
/// \return Executed lines from \p D in JSON format.
std::string serializeExecutedLines(const PathDiagnostic &D);
+
+ /// \return Javascript for displaying shortcuts help;
+ std::string showHelpJavascript();
};
} // end anonymous namespace
@@ -347,6 +350,8 @@ void HTMLDiagnostics::FinalizeHTML(const PathDiagnostic& D, Rewriter &R,
int LineNumber = path.back()->getLocation().asLocation().getExpansionLineNumber();
int ColumnNumber = path.back()->getLocation().asLocation().getExpansionColumnNumber();
+ R.InsertTextBefore(SMgr.getLocForStartOfFile(FID), showHelpJavascript());
+
R.InsertTextBefore(SMgr.getLocForStartOfFile(FID),
generateKeyboardNavigationJavascript());
@@ -399,9 +404,17 @@ void HTMLDiagnostics::FinalizeHTML(const PathDiagnostic& D, Rewriter &R,
</table>
<!-- REPORTSUMMARYEXTRA -->
<h3>Annotated Source Code</h3>
-<p><span class='macro'>[?]
- <span class='expansion'>Use j/k keys for keyboard navigation</span>
-</span></p>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
)<<<";
R.InsertTextBefore(SMgr.getLocForStartOfFile(FID), os.str());
@@ -461,6 +474,34 @@ void HTMLDiagnostics::FinalizeHTML(const PathDiagnostic& D, Rewriter &R,
html::AddHeaderFooterInternalBuiltinCSS(R, FID, Entry->getName());
}
+std::string HTMLDiagnostics::showHelpJavascript() {
+ return R"<<<(
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+)<<<";
+}
+
std::string
HTMLDiagnostics::showRelevantLinesJavascript(const PathDiagnostic &D) {
std::string s;
OpenPOWER on IntegriCloud