| /* |
| * 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. |
| */ |
| |
| WI.CallFrameView = class CallFrameView extends WI.Object |
| { |
| constructor(callFrame, {showFunctionName, indicateIfBlackboxed} = {}) |
| { |
| console.assert(callFrame instanceof WI.CallFrame); |
| |
| var callFrameElement = document.createElement("div"); |
| callFrameElement.classList.add("call-frame", WI.CallFrameView.iconClassNameForCallFrame(callFrame)); |
| |
| var subtitleElement = document.createElement("span"); |
| subtitleElement.classList.add("subtitle"); |
| |
| var sourceCodeLocation = callFrame.sourceCodeLocation; |
| if (sourceCodeLocation) { |
| if (indicateIfBlackboxed) |
| callFrameElement.classList.toggle("blackboxed", WI.debuggerManager.blackboxDataForSourceCode(callFrame.sourceCodeLocation.sourceCode)); |
| |
| WI.linkifyElement(callFrameElement, sourceCodeLocation, { |
| ignoreNetworkTab: true, |
| ignoreSearchTab: true, |
| }); |
| |
| 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 = ` ${emDash} `; |
| 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 || WI.UIString("(anonymous function)")); |
| } |
| |
| callFrameElement.append(titleElement, subtitleElement); |
| |
| return callFrameElement; |
| } |
| |
| static iconClassNameForCallFrame(callFrame) |
| { |
| if (callFrame.isTailDeleted) |
| return WI.CallFrameView.TailDeletedIcon; |
| |
| if (callFrame.programCode) |
| return WI.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 WI.CallFrameView.EventListenerIconStyleClassName; |
| |
| if (callFrame.nativeCode) |
| return WI.CallFrameView.NativeIconStyleClassName; |
| |
| return WI.CallFrameView.FunctionIconStyleClassName; |
| } |
| }; |
| |
| WI.CallFrameView.ProgramIconStyleClassName = "program-icon"; |
| WI.CallFrameView.FunctionIconStyleClassName = "function-icon"; |
| WI.CallFrameView.EventListenerIconStyleClassName = "event-listener-icon"; |
| WI.CallFrameView.NativeIconStyleClassName = "native-icon"; |
| WI.CallFrameView.TailDeletedIcon = "tail-deleted"; |