/* * Copyright (C) 2007, 2008 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. * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY APPLE 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 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. */ WebInspector.ResourceView = function(resource) { WebInspector.View.call(this); this.element.addStyleClass("resource-view"); this.resource = resource; this.headersElement = document.createElement("div"); this.headersElement.className = "resource-view-headers"; this.element.appendChild(this.headersElement); this.contentElement = document.createElement("div"); this.contentElement.className = "resource-view-content"; this.element.appendChild(this.contentElement); this.headersListElement = document.createElement("ol"); this.headersListElement.className = "outline-disclosure"; this.headersElement.appendChild(this.headersListElement); this.headersTreeOutline = new TreeOutline(this.headersListElement); this.headersTreeOutline.expandTreeElementsWhenArrowing = true; this.urlTreeElement = new TreeElement("", null, false); this.urlTreeElement.selectable = false; this.headersTreeOutline.appendChild(this.urlTreeElement); this.requestHeadersTreeElement = new TreeElement("", null, true); this.requestHeadersTreeElement.expanded = false; this.requestHeadersTreeElement.selectable = false; this.headersTreeOutline.appendChild(this.requestHeadersTreeElement); this.responseHeadersTreeElement = new TreeElement("", null, true); this.responseHeadersTreeElement.expanded = false; this.responseHeadersTreeElement.selectable = false; this.headersTreeOutline.appendChild(this.responseHeadersTreeElement); this.headersVisible = true; resource.addEventListener("url changed", this._refreshURL, this); resource.addEventListener("requestHeaders changed", this._refreshRequestHeaders, this); resource.addEventListener("responseHeaders changed", this._refreshResponseHeaders, this); this._refreshURL(); this._refreshRequestHeaders(); this._refreshResponseHeaders(); } WebInspector.ResourceView.prototype = { get headersVisible() { return this._headersVisible; }, set headersVisible(x) { if (x === this._headersVisible) return; this._headersVisible = x; if (x) this.element.addStyleClass("headers-visible"); else this.element.removeStyleClass("headers-visible"); }, attach: function() { if (!this.element.parentNode) { var parentElement = (document.getElementById("resource-views") || document.getElementById("script-resource-views")); if (parentElement) parentElement.appendChild(this.element); } }, _refreshURL: function() { this.urlTreeElement.title = this.resource.url.escapeHTML(); }, _refreshRequestHeaders: function() { this._refreshHeaders(WebInspector.UIString("Request Headers"), this.resource.sortedRequestHeaders, this.requestHeadersTreeElement); }, _refreshResponseHeaders: function() { this._refreshHeaders(WebInspector.UIString("Response Headers"), this.resource.sortedResponseHeaders, this.responseHeadersTreeElement); }, _refreshHeaders: function(title, headers, headersTreeElement) { headersTreeElement.removeChildren(); var length = headers.length; headersTreeElement.title = title.escapeHTML() + "<span class=\"header-count\">" + WebInspector.UIString(" (%d)", length) + "</span>"; headersTreeElement.hidden = !length; var length = headers.length; for (var i = 0; i < length; ++i) { var title = "<div class=\"header-name\">" + headers[i].header.escapeHTML() + ":</div>"; title += "<div class=\"header-value\">" + headers[i].value.escapeHTML() + "</div>" var headerTreeElement = new TreeElement(title, null, false); headerTreeElement.selectable = false; headersTreeElement.appendChild(headerTreeElement); } } } WebInspector.ResourceView.prototype.__proto__ = WebInspector.View.prototype;