1 /* 2 * Copyright (C) 2007, 2008 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 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 14 * its contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 WebInspector.ImageView = function(resource) 30 { 31 WebInspector.ResourceView.call(this, resource); 32 33 this.element.addStyleClass("image"); 34 } 35 36 WebInspector.ImageView.prototype = { 37 hasContent: function() 38 { 39 return true; 40 }, 41 42 show: function(parentElement) 43 { 44 WebInspector.ResourceView.prototype.show.call(this, parentElement); 45 this._createContentIfNeeded(); 46 }, 47 48 _createContentIfNeeded: function() 49 { 50 if (this._container) 51 return; 52 53 var imageContainer = document.createElement("div"); 54 imageContainer.className = "image"; 55 this.element.appendChild(imageContainer); 56 57 var imagePreviewElement = document.createElement("img"); 58 imagePreviewElement.addStyleClass("resource-image-view"); 59 imageContainer.appendChild(imagePreviewElement); 60 61 this._container = document.createElement("div"); 62 this._container.className = "info"; 63 this.element.appendChild(this._container); 64 65 var imageNameElement = document.createElement("h1"); 66 imageNameElement.className = "title"; 67 imageNameElement.textContent = this.resource.displayName; 68 this._container.appendChild(imageNameElement); 69 70 var infoListElement = document.createElement("dl"); 71 infoListElement.className = "infoList"; 72 73 this.resource.populateImageSource(imagePreviewElement); 74 75 function onImageLoad() 76 { 77 var content = this.resource.content; 78 if (content) 79 var resourceSize = this._base64ToSize(content); 80 else 81 var resourceSize = this.resource.resourceSize; 82 83 var imageProperties = [ 84 { name: WebInspector.UIString("Dimensions"), value: WebInspector.UIString("%d %d", imagePreviewElement.naturalWidth, imagePreviewElement.naturalHeight) }, 85 { name: WebInspector.UIString("File size"), value: Number.bytesToString(resourceSize) }, 86 { name: WebInspector.UIString("MIME type"), value: this.resource.mimeType } 87 ]; 88 89 infoListElement.removeChildren(); 90 for (var i = 0; i < imageProperties.length; ++i) { 91 var dt = document.createElement("dt"); 92 dt.textContent = imageProperties[i].name; 93 infoListElement.appendChild(dt); 94 var dd = document.createElement("dd"); 95 dd.textContent = imageProperties[i].value; 96 infoListElement.appendChild(dd); 97 } 98 var dt = document.createElement("dt"); 99 dt.textContent = WebInspector.UIString("URL"); 100 infoListElement.appendChild(dt); 101 var dd = document.createElement("dd"); 102 dd.appendChild(WebInspector.linkifyURLAsNode(this.resource.url)); 103 infoListElement.appendChild(dd); 104 105 this._container.appendChild(infoListElement); 106 } 107 imagePreviewElement.addEventListener("load", onImageLoad.bind(this), false); 108 }, 109 110 _base64ToSize: function(content) 111 { 112 if (!content.length) 113 return 0; 114 var size = (content.length || 0) * 3 / 4; 115 if (content.length > 0 && content[content.length - 1] === "=") 116 size--; 117 if (content.length > 1 && content[content.length - 2] === "=") 118 size--; 119 return size; 120 } 121 } 122 123 WebInspector.ImageView.prototype.__proto__ = WebInspector.ResourceView.prototype; 124