66d1d4110946ad8f483dc3caf90a49ca567bd064
[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     WebInspector.DetailsSidebarPanel.call(this, identifier, displayName, singularDisplayName, image, keyboardShortcutKey, element);
28
29     this.element.addEventListener("click", this._mouseWasClicked.bind(this), true);
30
31     this._domNode = null;
32 };
33
34 WebInspector.DOMDetailsSidebarPanel.prototype = {
35     constructor: WebInspector.DOMDetailsSidebarPanel,
36
37     // Public
38
39     inspect: function(objects)
40     {
41         // Convert to a single item array if needed.
42         if (!(objects instanceof Array))
43             objects = [objects];
44
45         var nodeToInspect = null;
46
47         // Iterate over the objects to find a WebInspector.DOMNode to inspect.
48         for (var i = 0; i < objects.length; ++i) {
49             if (objects[i] instanceof WebInspector.DOMNode) {
50                 nodeToInspect = objects[i];
51                 break;
52             }
53         }
54
55         if (nodeToInspect && !this.supportsDOMNode(nodeToInspect))
56             nodeToInspect = null;
57
58         this.domNode = nodeToInspect;
59
60         return !!this._domNode;
61     },
62
63     get domNode()
64     {
65         return this._domNode;
66     },
67
68     set domNode(domNode)
69     {
70         if (domNode === this._domNode)
71             return;
72
73         if (this._domNode)
74             this.removeEventListeners();
75
76         this._domNode = domNode;
77
78         if (this._domNode)
79             this.addEventListeners();
80
81         this.needsRefresh();
82     },
83
84     supportsDOMNode: function(nodeToInspect)
85     {
86         // Implemented by subclasses.
87         return true;
88     },
89
90     addEventListeners: function()
91     {
92         // Implemented by subclasses.
93     },
94
95     removeEventListeners: function()
96     {
97         // Implemented by subclasses.
98     },
99
100     // Private
101
102     _mouseWasClicked: function(event)
103     {
104         if (this._domNode && this._domNode.ownerDocument) {
105             var mainResource = WebInspector.frameResourceManager.resourceForURL(this._domNode.ownerDocument.documentURL);
106             if (mainResource)
107                 var parentFrame = mainResource.parentFrame;
108         }
109
110         WebInspector.handlePossibleLinkClick(event, parentFrame);
111     }
112 };
113
114 WebInspector.DOMDetailsSidebarPanel.prototype.__proto__ = WebInspector.DetailsSidebarPanel.prototype;