15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008 Apple Inc. All Rights Reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {TreeElement}
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SidebarSectionTreeElement = function(title, representedObject, hasChildren)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    TreeElement.call(this, title.escapeHTML(), representedObject || {}, hasChildren);
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.expand();
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SidebarSectionTreeElement.prototype = {
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    selectable: false,
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    collapse: function()
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // Should not collapse as it is not selectable.
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get smallChildren()
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._smallChildren;
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set smallChildren(x)
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._smallChildren === x)
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._smallChildren = x;
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
56d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._childrenListNode.classList.toggle("small", this._smallChildren);
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onattach: function()
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
61a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        this._listItemNode.classList.add("sidebar-tree-section");
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onreveal: function()
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.listItemElement)
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.listItemElement.scrollIntoViewIfNeeded(false);
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: TreeElement.prototype
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {TreeElement}
76a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {string} className
77a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {string} title
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string=} subtitle
79a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {?Object=} representedObject
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean=} hasChildren
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SidebarTreeElement = function(className, title, subtitle, representedObject, hasChildren)
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    TreeElement.call(this, "", representedObject, hasChildren);
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (hasChildren) {
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.disclosureButton = document.createElement("button");
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.disclosureButton.className = "disclosure-button";
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
91d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    this.iconElement = document.createElementWithClass("div", "icon");
9209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this.statusElement = document.createElementWithClass("div", "status");
9309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this.titlesElement = document.createElementWithClass("div", "titles");
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this.titleContainer = this.titlesElement.createChild("span", "title-container");
9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this.titleElement = this.titleContainer.createChild("span", "title");
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this.subtitleElement = this.titlesElement.createChild("span", "subtitle");
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.className = className;
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.mainTitle = title;
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.subtitle = subtitle;
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SidebarTreeElement.prototype = {
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get small()
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._small;
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set small(x)
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._small = x;
114d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (this._listItemNode)
115d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            this._listItemNode.classList.toggle("small", this._small);
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get mainTitle()
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._mainTitle;
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set mainTitle(x)
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._mainTitle = x;
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.refreshTitles();
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get subtitle()
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._subtitle;
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set subtitle(x)
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._subtitle = x;
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.refreshTitles();
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set wait(x)
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
142d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._listItemNode.classList.toggle("wait", x);
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    refreshTitles: function()
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var mainTitle = this.mainTitle;
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.titleElement.textContent !== mainTitle)
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.titleElement.textContent = mainTitle;
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var subtitle = this.subtitle;
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (subtitle) {
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (this.subtitleElement.textContent !== subtitle)
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this.subtitleElement.textContent = subtitle;
155a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            this.titlesElement.classList.remove("no-subtitle");
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } else {
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.subtitleElement.textContent = "";
158a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            this.titlesElement.classList.add("no-subtitle");
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
16309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {boolean}
16409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isEventWithinDisclosureTriangle: function(event)
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return event.target === this.disclosureButton;
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onattach: function()
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
172a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        this._listItemNode.classList.add("sidebar-tree-item");
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.className)
175a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            this._listItemNode.classList.add(this.className);
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.small)
178a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            this._listItemNode.classList.add("small");
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.hasChildren && this.disclosureButton)
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._listItemNode.appendChild(this.disclosureButton);
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._listItemNode.appendChild(this.iconElement);
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._listItemNode.appendChild(this.statusElement);
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._listItemNode.appendChild(this.titlesElement);
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onreveal: function()
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._listItemNode)
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._listItemNode.scrollIntoViewIfNeeded(false);
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: TreeElement.prototype
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
196