1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Constants. 6 var FEEDBACK_LANDING_PAGE = 7 'http://www.google.com/support/chrome/go/feedback_confirmation' 8 9 var selectedThumbnailDivId = ''; 10 var selectedThumbnailId = ''; 11 var selectedImageUrl; 12 13 var savedThumbnailIds = []; 14 savedThumbnailIds['current-screenshots'] = ''; 15 savedThumbnailIds['saved-screenshots'] = ''; 16 17 var localStrings = new LocalStrings(); 18 19 /** 20 * Selects an image thumbnail in the specified div. 21 */ 22 function selectImage(divId, thumbnailId) { 23 var thumbnailDivs = $(divId).children; 24 selectedThumbnailDivId = divId; 25 if (thumbnailDivs.length == 0) { 26 $(divId).style.display = 'none'; 27 return; 28 } 29 for (var i = 0; i < thumbnailDivs.length; i++) { 30 // If the the current div matches the thumbnail id provided, 31 // or there is no thumbnail id given, and we're at the first thumbnail. 32 if ((thumbnailDivs[i].id == thumbnailId) || (!thumbnailId && !i)) { 33 thumbnailDivs[i].className = 'image-thumbnail-container-selected'; 34 selectedThumbnailId = thumbnailId; 35 savedThumbnailIds[divId] = thumbnailId; 36 } else { 37 thumbnailDivs[i].className = 'image-thumbnail-container'; 38 } 39 } 40 } 41 42 /** 43 * Adds an image thumbnail to the specified div. 44 */ 45 function addScreenshot(divId, screenshot) { 46 var thumbnailDiv = document.createElement('div'); 47 thumbnailDiv.className = 'image-thumbnail-container'; 48 49 thumbnailDiv.id = divId + '-thumbnailDiv-' + $(divId).children.length; 50 thumbnailDiv.onclick = function() { 51 selectImage(divId, thumbnailDiv.id); 52 }; 53 54 var innerDiv = document.createElement('div'); 55 if (divId == 'current-screenshots') 56 innerDiv.className = 'image-thumbnail-current'; 57 else 58 innerDiv.className = 'image-thumbnail'; 59 60 var thumbnail = document.createElement('img'); 61 thumbnail.id = thumbnailDiv.id + '-image'; 62 // We add the ?+timestamp to make sure the image URLs are unique 63 // and Chrome does not load the image from cache. 64 thumbnail.src = screenshot + '?' + Date.now(); 65 innerDiv.appendChild(thumbnail); 66 67 thumbnailDiv.appendChild(innerDiv); 68 $(divId).appendChild(thumbnailDiv); 69 70 if (!selectedThumbnailId) 71 selectImage(divId, thumbnailDiv.id); 72 } 73 74 /** 75 * Send's the report; after the report is sent, we need to be redirected to 76 * the landing page, but we shouldn't be able to navigate back, hence 77 * we open the landing page in a new tab and sendReport closes this tab. 78 */ 79 function sendReport() { 80 if (!$('issue-with-combo').selectedIndex) { 81 alert(localStrings.getString('no-issue-selected')); 82 return false; 83 } else if ($('description-text').value.length == 0) { 84 alert(localStrings.getString('no-description')); 85 return false; 86 } 87 88 var imagePath = ''; 89 if ($('screenshot-checkbox').checked && selectedThumbnailId) 90 imagePath = $(selectedThumbnailId + '-image').src; 91 var pageUrl = $('page-url-text').value; 92 if (!$('page-url-checkbox').checked) 93 pageUrl = ''; 94 95 // Note, categories are based from 1 in our protocol buffers, so no 96 // adjustment is needed on selectedIndex. 97 var reportArray = [String($('issue-with-combo').selectedIndex), 98 pageUrl, 99 $('description-text').value, 100 imagePath]; 101 102 // Add chromeos data if it exists. 103 if ($('user-email-text') && $('sys-info-checkbox')) { 104 var userEmail= $('user-email-text').textContent; 105 if (!$('user-email-checkbox').checked) 106 userEmail = ''; 107 reportArray = reportArray.concat([userEmail, 108 String($('sys-info-checkbox').checked)]); 109 } 110 111 // open the landing page in a new tab, sendReport will close this one. 112 window.open(FEEDBACK_LANDING_PAGE, '_blank'); 113 chrome.send('sendReport', reportArray); 114 return true; 115 } 116 117 function cancel() { 118 chrome.send('cancel', []); 119 return true; 120 } 121 122 /** 123 * Select the current screenshots div, restoring the image that was 124 * selected when we had this div open previously. 125 */ 126 function currentSelected() { 127 // TODO(rkc): Change this to use a class instead. 128 $('current-screenshots').style.display = 'block'; 129 if ($('saved-screenshots')) 130 $('saved-screenshots').style.display = 'none'; 131 132 if (selectedThumbnailDivId != 'current-screenshots') 133 selectImage('current-screenshots', 134 savedThumbnailIds['current-screenshots']); 135 136 return true; 137 } 138 139 /** 140 * Select the saved screenshots div, restoring the image that was 141 * selected when we had this div open previously. 142 */ 143 function savedSelected() { 144 $('current-screenshots').style.display = 'none'; 145 146 if ($('saved-screenshots').childElementCount == 0) { 147 // setupSavedScreenshots will take care of changing visibility 148 chrome.send('refreshSavedScreenshots', []); 149 } else { 150 $('saved-screenshots').style.display = 'block'; 151 if (selectedThumbnailDivId != 'saved-screenshots') 152 selectImage('saved-screenshots', savedThumbnailIds['saved-screenshots']); 153 } 154 155 return true; 156 } 157 158 159 /** 160 * Change the type of screenshot we're showing to the user from 161 * the current screenshot to saved screenshots 162 */ 163 function changeToSaved() { 164 $('screenshot-label-current').style.display = 'none'; 165 $('screenshot-label-saved').style.display = 'inline'; 166 167 // Change the link to say "go to original" 168 $('screenshot-link-tosaved').style.display = 'none'; 169 $('screenshot-link-tocurrent').style.display = 'inline'; 170 171 savedSelected(); 172 } 173 174 /** 175 * Change the type of screenshot we're showing to the user from 176 * the saved screenshots to the current screenshots 177 */ 178 function changeToCurrent() { 179 $('screenshot-label-current').style.display = 'inline'; 180 $('screenshot-label-saved').style.display = 'none'; 181 182 // Change the link to say "go to original" 183 $('screenshot-link-tosaved').style.display = 'inline'; 184 $('screenshot-link-tocurrent').style.display = 'none'; 185 186 currentSelected(); 187 } 188