| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // For codereview.chromium.org |
| |
| let clicked_element = null; |
| |
| document.addEventListener('contextmenu', (event) => { |
| clicked_element = event.target; |
| }); |
| |
| chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { |
| if (request == 'getFiles') { |
| let element = clicked_element; |
| clicked_element = null; |
| while (element != null && element.tagName != 'TABLE') |
| element = element.parentElement; |
| |
| let trs = element.getElementsByTagName('TR'); |
| if (trs.length == 0) |
| alert('Please toggle one patchset.'); |
| |
| // TODO(watk): Sometimes this approach collects duplicates, but I'm not |
| // sure of the conditions under which it happens, so use a Set for now. |
| let files = new Set(); |
| for (let i = 1; i < trs.length; ++i) { |
| let tr = trs[i]; |
| if (tr.getAttribute('name') != 'patch') |
| continue; |
| // Skip deleted file. |
| if (tr.children[1].firstChild.data == 'D') |
| continue; |
| |
| files.add(tr.children[2].children[0].text.replace(/\s*/g, '')); |
| } |
| |
| sendResponse({files: Array.from(files)}); |
| } else if (request == 'getFile' && clicked_element.tagName == 'A') { |
| let filepath = clicked_element.text.replace(/\s*/g, ''); |
| clicked_element = null; |
| sendResponse({file: filepath}); |
| } |
| }); |