ginebra/chrome/bedrockchrome/download.snippet/download.js
changeset 5 0f2326c2a325
parent 1 b0dd75e285d2
child 6 1c3b8676e58c
equal deleted inserted replaced
1:b0dd75e285d2 5:0f2326c2a325
     1 /* js for download progress */
       
     2 
       
     3 var debugDownloadSignals = true;
       
     4 
       
     5 // Generate HTML to populate download DIV element.
       
     6 
       
     7 function downloadProgressHTML()
       
     8 {
       
     9     var html =
       
    10         '<div class="DownloadFile" id="DownloadFile"></div>' +
       
    11         '<div class="DownloadMeter" id="DownloadMeter" style="width: 200px">' +
       
    12             '<div class="DownloadProgress" id="DownloadProgress" style="width: 0px"></div>' +
       
    13             '<div class="DownloadCounter" id="DownloadCounter" style="left: 210px"></div>' +
       
    14         '</div>';
       
    15 
       
    16     // FIXME ;;; replace form with pure div/css button
       
    17 
       
    18     html +=
       
    19         '<form name="DownloadForm" action="">' +
       
    20             '<input type="button" name="DownloadButton" value="Clear" ' +
       
    21             'onClick="window.snippets.DownloadId.hide();">' +
       
    22         '</form>';
       
    23 
       
    24     return html;
       
    25 }
       
    26 
       
    27 function downloadErrorHTML(file, error)
       
    28 {
       
    29     var html =
       
    30         '<div class="DownloadFile" id="DownloadFile">' + file + '</div>' +
       
    31         '<div class="DownloadError" id="DownloadError">ERROR: ' + error + '</div>';
       
    32 
       
    33     return html;
       
    34 }
       
    35 
       
    36 function writeDownloadEmpty()
       
    37 {
       
    38     document.write(downloadProgressHTML());
       
    39 }
       
    40 
       
    41 // Initialize download DIV.
       
    42 
       
    43 function Download()
       
    44 {
       
    45     this.write = writeDownloadEmpty;
       
    46 
       
    47     this.write();
       
    48 }
       
    49 
       
    50 // Update HTML.
       
    51 
       
    52 function setDownloadHTML(html)
       
    53 {
       
    54     var dlElem = document.getElementById("DownloadId");
       
    55     dlElem.innerHTML = html;
       
    56 }
       
    57 
       
    58 function setDownloadFile(file)
       
    59 {
       
    60     var dlFile = document.getElementById("DownloadFile");
       
    61     dlFile.innerHTML = file;
       
    62 }
       
    63 
       
    64 function setDownloadPercent(percent)
       
    65 {
       
    66     var outer = document.getElementById("DownloadMeter");
       
    67     var inner = document.getElementById("DownloadProgress");
       
    68     var counter = document.getElementById("DownloadCounter");
       
    69 
       
    70     var outerWidthStyle = outer.style.width;
       
    71     var innerWidthStyle = inner.style.width;
       
    72     var counterLeftStyle = counter.style.left;
       
    73 
       
    74     var outerWidthNum = parseInt(outerWidthStyle);
       
    75     var innerWidthNum = parseInt(innerWidthStyle);
       
    76     var counterLeftNum = parseInt(counterLeftStyle);
       
    77 
       
    78     innerWidthNum = Math.floor(outerWidthNum * percent / 100.0);
       
    79     innerWidthStyle = innerWidthStyle.replace(/^\d+/, innerWidthNum);
       
    80 
       
    81     counterLeftNum = outerWidthNum + 10 - innerWidthNum;
       
    82     counterLeftStyle = counterLeftStyle.replace(/^\d+/, counterLeftNum);
       
    83 
       
    84     inner.style.width = innerWidthStyle;
       
    85     counter.style.left = counterLeftStyle;
       
    86     counter.style.width = "" + (innerWidthNum + 50) + "px";
       
    87 
       
    88     counter.innerHTML = "" + percent + "%";
       
    89 }
       
    90 
       
    91 function setDownloadSize(size, sofar, percent)
       
    92 {
       
    93     if (size >= 0) {
       
    94         setDownloadPercent(percent);
       
    95     } else {
       
    96         var counter = document.getElementById("DownloadCounter");
       
    97         counter.innerHTML = "" + sofar + " bytes";
       
    98     }
       
    99 }
       
   100 
       
   101 // Connect to relevant ChromeJSObject signals.
       
   102 
       
   103 window.chrome.onDownloadCreated.connect(
       
   104     function(id) {
       
   105         if (debugDownloadSignals) {
       
   106             window.chrome.alert("JS received signal onDownloadCreated");
       
   107             window.chrome.alert("id=" + id);
       
   108         }
       
   109         window.snippets.DownloadId.show();
       
   110         setDownloadHTML(downloadProgressHTML());
       
   111     }
       
   112 );
       
   113 
       
   114 window.chrome.onDownloadStarted.connect(
       
   115     function(id, file, size) {
       
   116         if (debugDownloadSignals) {
       
   117             window.chrome.alert("JS received signal onDownloadStarted");
       
   118             window.chrome.alert("id=" + id);
       
   119             window.chrome.alert("file=" + file);
       
   120             window.chrome.alert("size=" + size);
       
   121         }
       
   122         setDownloadFile(file);
       
   123     }
       
   124 );
       
   125 
       
   126 window.chrome.onDownloadProgress.connect(
       
   127     function(id, file, size, sofar, percent) {
       
   128         if (debugDownloadSignals) {
       
   129             window.chrome.alert("JS received signal onDownloadProgress");
       
   130             window.chrome.alert("id=" + id);
       
   131             window.chrome.alert("file=" + file);
       
   132             window.chrome.alert("size=" + size);
       
   133             window.chrome.alert("sofar=" + sofar);
       
   134             window.chrome.alert("percent=" + percent);
       
   135         }
       
   136         setDownloadFile(file);
       
   137         setDownloadSize(size, sofar, percent);
       
   138     }
       
   139 );
       
   140 
       
   141 window.chrome.onDownloadFinished.connect(
       
   142     function(id, file, size, sofar, percent) {
       
   143         if (debugDownloadSignals) {
       
   144             window.chrome.alert("JS received signal onDownloadFinished");
       
   145             window.chrome.alert("id=" + id);
       
   146             window.chrome.alert("file=" + file);
       
   147             window.chrome.alert("size=" + size);
       
   148             window.chrome.alert("sofar=" + sofar);
       
   149             window.chrome.alert("percent=" + percent);
       
   150         }
       
   151         setDownloadFile(file);
       
   152         setDownloadSize(size, sofar, percent);
       
   153     }
       
   154 );
       
   155 
       
   156 window.chrome.onDownloadPaused.connect(
       
   157     function(id, file, size, sofar, percent, error) {
       
   158         if (debugDownloadSignals) {
       
   159             window.chrome.alert("JS received signal onDownloadPaused");
       
   160             window.chrome.alert("id=" + id);
       
   161             window.chrome.alert("file=" + file);
       
   162             window.chrome.alert("size=" + size);
       
   163             window.chrome.alert("sofar=" + sofar);
       
   164             window.chrome.alert("percent=" + percent);
       
   165             window.chrome.alert("error=" + error);
       
   166         }
       
   167         setDownloadHTML(downloadErrorHTML(file, error));
       
   168     }
       
   169 );
       
   170 
       
   171 window.chrome.onDownloadCancelled.connect(
       
   172     function(id, file, size, sofar, percent, error) {
       
   173         if (debugDownloadSignals) {
       
   174             window.chrome.alert("JS received signal onDownloadCancelled");
       
   175             window.chrome.alert("id=" + id);
       
   176             window.chrome.alert("file=" + file);
       
   177             window.chrome.alert("size=" + size);
       
   178             window.chrome.alert("sofar=" + sofar);
       
   179             window.chrome.alert("percent=" + percent);
       
   180             window.chrome.alert("error=" + error);
       
   181         }
       
   182         setDownloadHTML(downloadErrorHTML(file, error));
       
   183     }
       
   184 );
       
   185 
       
   186 window.chrome.onDownloadFailed.connect(
       
   187     function(id, file, size, sofar, percent, error) {
       
   188         if (debugDownloadSignals) {
       
   189             window.chrome.alert("JS received signal onDownloadFailed");
       
   190             window.chrome.alert("id=" + id);
       
   191             window.chrome.alert("file=" + file);
       
   192             window.chrome.alert("size=" + size);
       
   193             window.chrome.alert("sofar=" + sofar);
       
   194             window.chrome.alert("percent=" + percent);
       
   195             window.chrome.alert("error=" + error);
       
   196         }
       
   197         setDownloadHTML(downloadErrorHTML(file, error));
       
   198     }
       
   199 );
       
   200 
       
   201 window.chrome.onDownloadNetworkLoss.connect(
       
   202     function(id, file, size, sofar, percent, error) {
       
   203         if (debugDownloadSignals) {
       
   204             window.chrome.alert("JS received signal onDownloadNetworkLoss");
       
   205             window.chrome.alert("id=" + id);
       
   206             window.chrome.alert("file=" + file);
       
   207             window.chrome.alert("size=" + size);
       
   208             window.chrome.alert("sofar=" + sofar);
       
   209             window.chrome.alert("percent=" + percent);
       
   210             window.chrome.alert("error=" + error);
       
   211         }
       
   212         setDownloadHTML(downloadErrorHTML(file, error));
       
   213     }
       
   214 );
       
   215 
       
   216 window.chrome.onDownloadError.connect(
       
   217     function(id, file, size, sofar, percent, error) {
       
   218         if (debugDownloadSignals) {
       
   219             window.chrome.alert("JS received signal onDownloadError");
       
   220             window.chrome.alert("id=" + id);
       
   221             window.chrome.alert("file=" + file);
       
   222             window.chrome.alert("size=" + size);
       
   223             window.chrome.alert("sofar=" + sofar);
       
   224             window.chrome.alert("percent=" + percent);
       
   225             window.chrome.alert("error=" + error);
       
   226         }
       
   227         setDownloadHTML(downloadErrorHTML(file, error));
       
   228     }
       
   229 );