mirror of
https://github.com/NaiboWang/EasySpider.git
synced 2026-10-29 07:27:39 +08:00
91 lines
2.8 KiB
JavaScript
91 lines
2.8 KiB
JavaScript
/**
|
|
* Copyright 2011 Google Inc. All Rights Reserved.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
/**
|
|
* @author opensource@google.com
|
|
* @license Apache License, Version 2.0.
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
// Constants.
|
|
var MOVE_COOLDOWN_PERIOD_MS = 400;
|
|
var X_KEYCODE = 88;
|
|
|
|
// Global variables.
|
|
var queryEl = document.getElementById('query');
|
|
var resultsEl = document.getElementById('results');
|
|
var nodeCountEl = document.getElementById('node-count');
|
|
|
|
var nodeCountText = document.createTextNode('0');
|
|
nodeCountEl.appendChild(nodeCountText);
|
|
|
|
// Used by handleMouseMove() to enforce a cooldown period on move.
|
|
var lastMoveTimeInMs = 0;
|
|
|
|
var evaluateQuery = function() {
|
|
chrome.runtime.sendMessage({
|
|
type: 'evaluate',
|
|
query: queryEl.value
|
|
});
|
|
};
|
|
|
|
var handleRequest = function(request, sender, cb) {
|
|
// Note: Setting textarea's value and text node's nodeValue is XSS-safe.
|
|
if (request.type === 'update') {
|
|
if (request.query !== null) {
|
|
queryEl.value = request.query;
|
|
}
|
|
if (request.results !== null) {
|
|
resultsEl.value = request.results[0];
|
|
nodeCountText.nodeValue = request.results[1];
|
|
}
|
|
}
|
|
};
|
|
|
|
var handleMouseMove = function(e) {
|
|
if (e.shiftKey) {
|
|
// Only move bar if we aren't in the cooldown period. Note, the cooldown
|
|
// duration should take CSS transition time into consideration.
|
|
var timeInMs = new Date().getTime();
|
|
if (timeInMs - lastMoveTimeInMs < MOVE_COOLDOWN_PERIOD_MS) {
|
|
return;
|
|
}
|
|
lastMoveTimeInMs = timeInMs;
|
|
// Tell content script to move iframe to a different part of the screen.
|
|
chrome.runtime.sendMessage({type: 'moveBar'});
|
|
}
|
|
};
|
|
|
|
var handleKeyDown = function(e) {
|
|
var ctrlKey = e.ctrlKey || e.metaKey;
|
|
var shiftKey = e.shiftKey;
|
|
if (e.keyCode === X_KEYCODE && ctrlKey && shiftKey) {
|
|
chrome.runtime.sendMessage({type: 'hideBar'});
|
|
}
|
|
};
|
|
|
|
queryEl.addEventListener('keyup', evaluateQuery);
|
|
queryEl.addEventListener('mouseup', evaluateQuery);
|
|
|
|
// Add mousemove listener so we can detect Shift + mousemove inside iframe.
|
|
document.addEventListener('mousemove', handleMouseMove);
|
|
// Add keydown listener so we can detect Ctrl-Shift-X and tell the content
|
|
// script to hide iframe and steal focus.
|
|
document.addEventListener('keydown', handleKeyDown);
|
|
|
|
chrome.runtime.onMessage.addListener(handleRequest);
|