Home | History | Annotate | Download | only in front-end
      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