• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2007 Apple Inc.  All rights reserved.
3 * Copyright (C) 2009 Google Inc.  All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1.  Redistributions of source code must retain the above copyright
10 *     notice, this list of conditions and the following disclaimer.
11 * 2.  Redistributions in binary form must reproduce the above copyright
12 *     notice, this list of conditions and the following disclaimer in the
13 *     documentation and/or other materials provided with the distribution.
14 * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
15 *     its contributors may be used to endorse or promote products derived
16 *     from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30WebInspector.Section = function(title, subtitle)
31{
32    this.element = document.createElement("div");
33    this.element.className = "section";
34
35    this.headerElement = document.createElement("div");
36    this.headerElement.className = "header";
37
38    this.titleElement = document.createElement("div");
39    this.titleElement.className = "title";
40
41    this.subtitleElement = document.createElement("div");
42    this.subtitleElement.className = "subtitle";
43
44    this.headerElement.appendChild(this.subtitleElement);
45    this.headerElement.appendChild(this.titleElement);
46
47    this.headerElement.addEventListener("click", this.toggleExpanded.bind(this), false);
48    this.element.appendChild(this.headerElement);
49
50    this.title = title;
51    this.subtitle = subtitle;
52    this._expanded = false;
53}
54
55WebInspector.Section.prototype = {
56    get title()
57    {
58        return this._title;
59    },
60
61    set title(x)
62    {
63        if (this._title === x)
64            return;
65        this._title = x;
66
67        if (x instanceof Node) {
68            this.titleElement.removeChildren();
69            this.titleElement.appendChild(x);
70        } else
71          this.titleElement.textContent = x;
72    },
73
74    get subtitle()
75    {
76        return this._subtitle;
77    },
78
79    set subtitle(x)
80    {
81        if (this._subtitle === x)
82            return;
83        this._subtitle = x;
84        this.subtitleElement.innerHTML = x;
85    },
86
87    get expanded()
88    {
89        return this._expanded;
90    },
91
92    set expanded(x)
93    {
94        if (x)
95            this.expand();
96        else
97            this.collapse();
98    },
99
100    get populated()
101    {
102        return this._populated;
103    },
104
105    set populated(x)
106    {
107        this._populated = x;
108        if (!x && this.onpopulate && this._expanded) {
109            this.onpopulate(this);
110            this._populated = true;
111        }
112    },
113
114    expand: function()
115    {
116        if (this._expanded)
117            return;
118        this._expanded = true;
119        this.element.addStyleClass("expanded");
120
121        if (!this._populated && this.onpopulate) {
122            this.onpopulate(this);
123            this._populated = true;
124        }
125    },
126
127    collapse: function()
128    {
129        if (!this._expanded)
130            return;
131        this._expanded = false;
132        this.element.removeStyleClass("expanded");
133    },
134
135    toggleExpanded: function()
136    {
137        this.expanded = !this.expanded;
138    }
139}
140