blob: 5eeb471bca45c565868b1643b4b52257af9709da [file] [log] [blame]
avm9996304def3e2016-11-27 22:53:05 +01001// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
2// source code is governed by a BSD-style license that can be found in the
3// LICENSE file.
4
5function $(id) {
6 return document.getElementById(id);
7}
8
9chrome.extension.onMessage.addListener(function(request, sender, response) {
10 if (request.msg == 'page_capturable') {
11 $('tip').style.display = 'none';
12 $('captureSpecialPageItem').style.display = 'none';
13 $('captureWindowItem').style.display = 'block';
14 $('captureAreaItem').style.display = 'block';
15 $('captureWebpageItem').style.display = 'block';
16 } else if (request.msg == 'page_uncapturable') {
17 i18nReplace('tip', 'special');
18 $('tip').style.display = 'block';
19 $('captureSpecialPageItem').style.display = 'none';
20 $('captureWindowItem').style.display = 'none';
21 $('captureAreaItem').style.display = 'none';
22 $('captureWebpageItem').style.display = 'none';
23 }
24});
25
26function toDo(what) {
27 var bg = chrome.extension.getBackgroundPage();
28 switch (what) {
29 case 'capture_window':
30 bg.screenshot.captureWindow();
31 window.close();
32 break;
33 case 'capture_area':
34 bg.screenshot.showSelectionArea();
35 window.close();
36 break;
37 case 'capture_webpage':
38 bg.screenshot.captureWebpage();
39 $('loadDiv').style.display = 'block';
40 $('item').style.display = 'none';
41 break;
42 case 'capture_special_page':
43 bg.screenshot.captureSpecialPage();
44 window.close();
45 break;
46 }
47}
48
49function i18nReplace(id, name) {
50 return $(id).innerHTML = chrome.i18n.getMessage(name);
51}
52
53function resizeDivWidth(id, width) {
54 $(id).style.width = width + "px";
55}
56
57function init() {
58 i18nReplace('captureSpecialPageText', 'capture_window');
59 i18nReplace('capturing', 'capturing');
60 i18nReplace('captureWindowText', 'capture_window');
61 i18nReplace('captureAreaText', 'capture_area');
62 i18nReplace('captureWebpageText', 'capture_webpage');
63 i18nReplace('optionItem', 'option');
64
65 $('option').addEventListener('click', function () {
66 chrome.tabs.create({ url: 'options.html'});
67 }, false);
avm99963873bf6f2021-02-07 00:01:31 +010068
69 $('captureWindowShortcut').style.display = 'none';
70 $('captureAreaShortcut').style.display = 'none';
71 $('captureWebpageShortcut').style.display = 'none';
72 document.body.style.minWidth = "140px";
73
avm9996304def3e2016-11-27 22:53:05 +010074 var isScriptLoad = false;
avm99963476a2a62021-02-07 00:40:02 +010075 chrome.tabs.query({
76 active: true,
77 }, function(tabs) {
78 if (tabs.length < 1) {
79 console.error('Expected 1 tab');
80 return;
81 }
82 var tab = tabs[0];
avm9996304def3e2016-11-27 22:53:05 +010083 if (tab.url.indexOf('chrome') == 0 || tab.url.indexOf('about') == 0) {
84 i18nReplace('tip', 'special');
85 return;
avm9996304def3e2016-11-27 22:53:05 +010086 }
avm99963476a2a62021-02-07 00:40:02 +010087 chrome.tabs.executeScript({ file: 'js/page.js' }, _ => {
88 chrome.tabs.executeScript(null, {file: 'js/isLoad.js'}, _ => {
89 $('tip').style.display = 'none';
90 $('captureSpecialPageItem').style.display = 'block';
91 showOption();
avm9996304def3e2016-11-27 22:53:05 +010092
avm99963476a2a62021-02-07 00:40:02 +010093 chrome.tabs.sendMessage(tab.id, {msg: 'is_page_capturable'},
94 response => {
95 isScriptLoad = true;
96 if (response.msg == 'capturable') {
97 $('tip').style.display = 'none';
98 $('captureSpecialPageItem').style.display = 'none';
99 $('captureWindowItem').style.display = 'block';
100 $('captureAreaItem').style.display = 'block';
101 $('captureWebpageItem').style.display = 'block';
102 var textWidth = $('captureWindowText')['scrollWidth'];
103 resizeDivWidth('captureWindowText', textWidth);
104 resizeDivWidth('captureAreaText', textWidth);
105 resizeDivWidth('captureWebpageText', textWidth);
106 var bg = chrome.extension.getBackgroundPage();
107 if (bg.screenshot.isThisPlatform('mac')) {
108 $('captureAreaShortcut').innerText = '\u2325\u2318R';
109 $('captureWindowShortcut').innerText = '\u2325\u2318V';
110 $('captureWebpageShortcut').innerText = '\u2325\u2318H';
111 }
112 } else if (response.msg == 'uncapturable') {
113 i18nReplace('tip', 'special');
114 $('tip').style.display = 'block';
115 } else {
116 i18nReplace('tip', 'loading');
117 }
118 });
119
120 var insertScript = function() {
121 if (isScriptLoad == false) {
122 chrome.tabs.query({
123 active: true,
124 }, function(tabs) {
125 if (tabs.length < 1) {
126 console.error('Expected 1 tab.');
127 return;
128 }
129 var tab = tabs[0];
130 if (tab.url.indexOf('chrome') == 0 ||
131 tab.url.indexOf('about') == 0) {
132 i18nReplace('tip', 'special');
133 } else {
134 $('tip').style.display = 'none';
135 $('captureSpecialPageItem').style.display = 'block';
136 showOption();
137 }
138 });
139 }
140 var captureItems = document.querySelectorAll('li.menuI');
141 var showSeparator = false;
142 for (var i = 0; i < captureItems.length; i++) {
143 if (window.getComputedStyle(captureItems[i]).display != 'none') {
144 showSeparator = true;
145 break;
146 }
147 }
148 $('separatorItem').style.display = showSeparator ? 'block' : 'none';
149 }
150 setTimeout(insertScript, 500);
151
152 // Update hot key.
153 $('captureSpecialPageItem').addEventListener('click', function(e) {
154 toDo('capture_special_page');
155 });
156 $('captureAreaItem').addEventListener('click', function(e) {
157 toDo('capture_area');
158 });
159 $('captureWindowItem').addEventListener('click', function(e) {
160 toDo('capture_window');
161 });
162 $('captureWebpageItem').addEventListener('click', function(e) {
163 toDo('capture_webpage');
164 });
165 });
166 });
avm9996304def3e2016-11-27 22:53:05 +0100167 });
168}
169
170function showOption() {
171 $('option').style.display = 'block';
172 $('separatorItem').style.display = 'block';
173}
174
175document.addEventListener('DOMContentLoaded', init);