summaryrefslogtreecommitdiff
path: root/Source/WebInspectorUI/UserInterface/Views/CallFrameView.js
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebInspectorUI/UserInterface/Views/CallFrameView.js')
-rw-r--r--Source/WebInspectorUI/UserInterface/Views/CallFrameView.js98
1 files changed, 98 insertions, 0 deletions
diff --git a/Source/WebInspectorUI/UserInterface/Views/CallFrameView.js b/Source/WebInspectorUI/UserInterface/Views/CallFrameView.js
new file mode 100644
index 000000000..e7ac8543a
--- /dev/null
+++ b/Source/WebInspectorUI/UserInterface/Views/CallFrameView.js
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.CallFrameView = class CallFrameView extends WebInspector.Object
+{
+ constructor(callFrame, showFunctionName)
+ {
+ console.assert(callFrame instanceof WebInspector.CallFrame);
+
+ var callFrameElement = document.createElement("div");
+ callFrameElement.classList.add("call-frame", WebInspector.CallFrameView.iconClassNameForCallFrame(callFrame));
+
+ var subtitleElement = document.createElement("span");
+ subtitleElement.classList.add("subtitle");
+
+ var sourceCodeLocation = callFrame.sourceCodeLocation;
+ if (sourceCodeLocation) {
+ WebInspector.linkifyElement(callFrameElement, sourceCodeLocation);
+
+ var linkElement = document.createElement("a");
+ linkElement.classList.add("source-link");
+ linkElement.href = sourceCodeLocation.sourceCode.url;
+
+ if (showFunctionName) {
+ var separatorElement = document.createElement("span");
+ separatorElement.classList.add("separator");
+ separatorElement.textContent = " — ";
+ subtitleElement.append(separatorElement);
+ }
+
+ subtitleElement.append(linkElement);
+
+ sourceCodeLocation.populateLiveDisplayLocationTooltip(linkElement);
+ sourceCodeLocation.populateLiveDisplayLocationString(linkElement, "textContent");
+ }
+
+ var titleElement = document.createElement("span");
+ titleElement.classList.add("title");
+
+ if (showFunctionName) {
+ var imgElement = document.createElement("img");
+ imgElement.classList.add("icon");
+
+ titleElement.append(imgElement, callFrame.functionName || WebInspector.UIString("(anonymous function)"));
+ }
+
+ callFrameElement.append(titleElement, subtitleElement);
+
+ return callFrameElement;
+ }
+
+ static iconClassNameForCallFrame(callFrame)
+ {
+ if (callFrame.isTailDeleted)
+ return WebInspector.CallFrameView.TailDeletedIcon;
+
+ if (callFrame.programCode)
+ return WebInspector.CallFrameView.ProgramIconStyleClassName;
+
+ // This is more than likely an event listener function with an "on" prefix and it is
+ // as long or longer than the shortest event listener name -- "oncut".
+ if (callFrame.functionName && callFrame.functionName.startsWith("on") && callFrame.functionName.length >= 5)
+ return WebInspector.CallFrameView.EventListenerIconStyleClassName;
+
+ if (callFrame.nativeCode)
+ return WebInspector.CallFrameView.NativeIconStyleClassName;
+
+ return WebInspector.CallFrameView.FunctionIconStyleClassName;
+ }
+};
+
+WebInspector.CallFrameView.ProgramIconStyleClassName = "program-icon";
+WebInspector.CallFrameView.FunctionIconStyleClassName = "function-icon";
+WebInspector.CallFrameView.EventListenerIconStyleClassName = "event-listener-icon";
+WebInspector.CallFrameView.NativeIconStyleClassName = "native-icon";
+WebInspector.CallFrameView.TailDeletedIcon = "tail-deleted";