') > -1) {
content = match;
break;
}
}
// Replace any extraneous whitespace to make it look nicer.
content = content.replace(/[\n\t]/g, ' ');
content = content.replace(/ {2,}/g, ' ');
// Codesearch wraps the result in tags. Remove those if they're
// still there.
content = content.replace(/<\/?pre>/g, '');
// Codesearch highlights the matches with 'b' tags. Replaces those
// with 'match'.
content = content.replace(/<(\/)?b>/g, '<$1match>');
description += ' ' + content;
}
results.push({
content: path + '@' + line,
description: description
});
}
suggest(results);
});
}
);
/**
* 更新下拉框中提示
* @param String text 用户输入文本
*/
function updateDefaultSuggestion(text) {
var description = [
'搜索方式',
' [ ',
'' /* 文字搜索 显示文字占位 */
];
// 如果用户输入不为空,先假设为文字搜索,如果后面匹配上了其他搜索方式,则更新
let isPlaintext = !!text.trim().length;
currentSearchModeIndex = 0; // 初始化搜索方式下标s
// 默认第 0 个为文字搜索,除此之外的搜索方式如果都没有匹配到,则显示文字搜索
for (var i = 1, keyword; i < omniboxSearchModes.length && (keyword = omniboxSearchModes[i]); i++) {
// 分隔符
description.push(' \| ');
// 通过用户输入文本匹配搜索方式
if (keyword.match(text)) {
// 是当前这种搜索模式
isPlaintext = false; // 说明不是文字搜索
currentSearchModeIndex = i; // 记录当前搜索模式的下标
description.push('' + keyword.showText + ':' + keyword.getInputText(text) + '');
} else {
// 不是当前这种搜索模式
description.push('' + keyword.key + ": " + keyword.showText + '');
}
}
description.push(' ] ');
description[2] = isPlaintext ? ('' + text.trim() + '') : ('' + omniboxSearchModes[0].showText + '');
chrome.omnibox.setDefaultSuggestion({
description: description.join('')
});
// var isRegex = /^re:/.test(text);
// var isFile = /^file:/.test(text);
// var isHalp = (text == 'halp');
// var isPlaintext = text.length && !isRegex && !isFile && !isHalp;
// var description = '搜索方式 [ ';
// description += isPlaintext ? ('' + text + '') : '文字';
// description += ' | ';
// description += isRegex ? ('' + text + '') : 're: 正则';
// description += ' | ';
// description += isFile ? ('' + text + '') : 'file:文件';
// description += ' | ';
// description += isHalp ? 'halp' : 'halp';
// description += ' ]';
// chrome.omnibox.setDefaultSuggestion({
// description: description
// });
}
/**
* 用户开始输入文本
*/
chrome.omnibox.onInputStarted.addListener(function () {
updateDefaultSuggestion('');
});
/**
* 搜索框失去焦点
*/
chrome.omnibox.onInputCancelled.addListener(function () {
updateDefaultSuggestion('');
});
/**
* 执行搜索
* @param {*} query
* @param {*} callback
* @returns
*/
function search(query, callback) {
if (/^re:/.test(query))
query = query.substring('re:'.length);
else if (/^file:/.test(query))
query = 'file:"' + query.substring('file:'.length) + '"';
else
query = '"' + query + '"';
var url = "https://code.google.com/p/chromium/codesearch#search/&type=cs&q=" + query +
"&exact_package=chromium&type=cs";
var req = new XMLHttpRequest();
req.open("GET", url, true);
req.setRequestHeader("GData-Version", "2");
req.onreadystatechange = function () {
if (req.readyState == 4) {
callback(req.responseXML);
}
}
req.send(null);
return req;
}
/**
* 将当前标签页导航到指定Url / 或者新建标签页
*
* @param String url 要导航到的url
* @param bool openInNewTab 是否打开新标签页
*/
function navigate(url, openInNewTab = false) {
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
if (!openInNewTab) {
chrome.tabs.update(tabs[0].id, { url: url });
} else {
chrome.tabs.create({ url: url });
}
});
}
/**
* 用户输入完成,按下回车键
*/
chrome.omnibox.onInputEntered.addListener(function (text) {
alert(text)
navigate("https://www.baidu.com/s?wd=" + text)
return
if (/@\d+\b/.test(text)) {
var chunks = text.split('@');
var path = chunks[0];
var line = chunks[1];
navigate(getUrl(path, line));
} else if (text == 'halp') {
// TODO(aa)
} else {
navigate("https://code.google.com/p/chromium/codesearch#search/&type=cs" +
"&q=" + text +
"&exact_package=chromium&type=cs");
}
});