Web Inspector: Layer summary should be bottom sticky
[WebKit-https.git] / Source / WebInspectorUI / UserInterface / Views / DOMDetailsSidebarPanel.js
1 /*
2  * Copyright (C) 2013 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 WebInspector.DOMDetailsSidebarPanel = function(identifier, displayName, singularDisplayName, image, keyboardShortcutKey, element)
27 {
28     WebInspector.DetailsSidebarPanel.call(this, identifier, displayName, singularDisplayName, image, keyboardShortcutKey, element);
29
30     this.element.addEventListener("click", this._mouseWasClicked.bind(this), true);
31
32     this._domNode = null;
33 };
34
35 WebInspector.DOMDetailsSidebarPanel.prototype = {
36     constructor: WebInspector.DOMDetailsSidebarPanel,
37     __proto__: WebInspector.DetailsSidebarPanel.prototype,
38
39     // Public
40
41     inspect: function(objects)
42     {
43         // Convert to a single item array if needed.
44         if (!(objects instanceof Array))
45             objects = [objects];
46
47         var nodeToInspect = null;
48
49         // Iterate over the objects to find a WebInspector.DOMNode to inspect.
50         for (var i = 0; i < objects.length; ++i) {
51             if (objects[i] instanceof WebInspector.DOMNode) {
52                 nodeToInspect = objects[i];
53                 break;
54             }
55         }
56
57         if (nodeToInspect && !this.supportsDOMNode(nodeToInspect))
58             nodeToInspect = null;
59
60         this.domNode = nodeToInspect;
61
62         return !!this._domNode;
63     },
64
65     get domNode()
66     {
67         return this._domNode;
68     },
69
70     set domNode(domNode)
71     {
72         if (domNode === this._domNode)
73             return;
74
75         if (this._domNode)
76             this.removeEventListeners();
77
78         this._domNode = domNode;
79
80         if (this._domNode)
81             this.addEventListeners();
82
83         this.needsRefresh();
84     },
85
86     supportsDOMNode: function(nodeToInspect)
87     {
88         // Implemented by subclasses.
89         return true;
90     },
91
92     addEventListeners: function()
93     {
94         // Implemented by subclasses.
95     },
96
97     removeEventListeners: function()
98     {
99         // Implemented by subclasses.
100     },
101
102     // Private
103
104     _mouseWasClicked: function(event)
105     {
106         if (this._domNode && this._domNode.ownerDocument) {
107             var mainResource = WebInspector.frameResourceManager.resourceForURL(this._domNode.ownerDocument.documentURL);
108             if (mainResource)
109                 var parentFrame = mainResource.parentFrame;
110         }
111
112         WebInspector.handlePossibleLinkClick(event, parentFrame);
113     }
114 };