mirror of
https://github.com/gosticks/DefinitelyTyped.git
synced 2025-10-16 12:05:41 +00:00
248 lines
9.5 KiB
TypeScript
248 lines
9.5 KiB
TypeScript
/// <reference path="chrome.d.ts" />
|
|
/// <reference path="../jquery/jquery.d.ts" />
|
|
/// <reference path="../jqueryui/jqueryui.d.ts" />
|
|
|
|
// https://developer.chrome.com/extensions/examples/api/bookmarks/basic/popup.js
|
|
function bookmarksExample() {
|
|
$(function () {
|
|
$('#search').change(function () {
|
|
$('#bookmarks').empty();
|
|
dumpBookmarks($('#search').val());
|
|
});
|
|
});
|
|
// Traverse the bookmark tree, and print the folder and nodes.
|
|
function dumpBookmarks(query?) {
|
|
var bookmarkTreeNodes = chrome.bookmarks.getTree(
|
|
function (bookmarkTreeNodes) {
|
|
$('#bookmarks').append(dumpTreeNodes(bookmarkTreeNodes, query));
|
|
});
|
|
}
|
|
function dumpTreeNodes(bookmarkNodes, query) {
|
|
var list = $('<ul>');
|
|
var i;
|
|
for (i = 0; i < bookmarkNodes.length; i++) {
|
|
list.append(dumpNode(bookmarkNodes[i], query));
|
|
}
|
|
return list;
|
|
}
|
|
function dumpNode(bookmarkNode, query) {
|
|
if (bookmarkNode.title) {
|
|
if (query && !bookmarkNode.children) {
|
|
if (String(bookmarkNode.title).indexOf(query) == -1) {
|
|
return $('<span></span>');
|
|
}
|
|
}
|
|
var anchor = $('<a>');
|
|
anchor.attr('href', bookmarkNode.url);
|
|
anchor.text(bookmarkNode.title);
|
|
/*
|
|
* When clicking on a bookmark in the extension, a new tab is fired with
|
|
* the bookmark url.
|
|
*/
|
|
anchor.click(function () {
|
|
chrome.tabs.create({ url: bookmarkNode.url });
|
|
});
|
|
var span = $('<span>');
|
|
var options = bookmarkNode.children ?
|
|
$('<span>[<a href="#" id="addlink">Add</a>]</span>') :
|
|
$('<span>[<a id="editlink" href="#">Edit</a> <a id="deletelink" ' +
|
|
'href="#">Delete</a>]</span>');
|
|
var edit = bookmarkNode.children ? $('<table><tr><td>Name</td><td>' +
|
|
'<input id="title"></td></tr><tr><td>URL</td><td><input id="url">' +
|
|
'</td></tr></table>') : $('<input>');
|
|
// Show add and edit links when hover over.
|
|
span.hover(function () {
|
|
span.append(options);
|
|
$('#deletelink').click(function () {
|
|
$('#deletedialog').empty().dialog({
|
|
autoOpen: false,
|
|
title: 'Confirm Deletion',
|
|
resizable: false,
|
|
height: 140,
|
|
modal: true,
|
|
buttons: {
|
|
'Yes, Delete It!': function () {
|
|
chrome.bookmarks.remove(String(bookmarkNode.id));
|
|
span.parent().remove();
|
|
$(this).dialog('destroy');
|
|
},
|
|
Cancel: function () {
|
|
$(this).dialog('destroy');
|
|
}
|
|
}
|
|
}).dialog('open');
|
|
});
|
|
$('#addlink').click(function () {
|
|
$('#adddialog').empty().append(edit).dialog({
|
|
autoOpen: false,
|
|
closeOnEscape: true, title: 'Add New Bookmark', modal: true,
|
|
buttons: {
|
|
'Add': function () {
|
|
chrome.bookmarks.create({
|
|
parentId: bookmarkNode.id,
|
|
title: $('#title').val(), url: $('#url').val()
|
|
});
|
|
$('#bookmarks').empty();
|
|
$(this).dialog('destroy');
|
|
dumpBookmarks();
|
|
},
|
|
'Cancel': function () {
|
|
$(this).dialog('destroy');
|
|
}
|
|
}
|
|
}).dialog('open');
|
|
});
|
|
$('#editlink').click(function () {
|
|
edit.val(anchor.text());
|
|
$('#editdialog').empty().append(edit).dialog({
|
|
autoOpen: false,
|
|
closeOnEscape: true, title: 'Edit Title', modal: true,
|
|
show: 'slide', buttons: {
|
|
'Save': function () {
|
|
chrome.bookmarks.update(String(bookmarkNode.id), {
|
|
title: edit.val()
|
|
});
|
|
anchor.text(edit.val());
|
|
options.show();
|
|
$(this).dialog('destroy');
|
|
},
|
|
'Cancel': function () {
|
|
$(this).dialog('destroy');
|
|
}
|
|
}
|
|
}).dialog('open');
|
|
});
|
|
options.fadeIn();
|
|
},
|
|
// unhover
|
|
function () {
|
|
options.remove();
|
|
}).append(anchor);
|
|
}
|
|
var li = $(bookmarkNode.title ? '<li>' : '<div>').append(span);
|
|
if (bookmarkNode.children && bookmarkNode.children.length > 0) {
|
|
li.append(dumpTreeNodes(bookmarkNode.children, query));
|
|
}
|
|
return li;
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
dumpBookmarks();
|
|
});
|
|
}
|
|
|
|
// https://developer.chrome.com/extensions/examples/api/browserAction/make_page_red/background.js
|
|
function pageRedder() {
|
|
chrome.browserAction.onClicked.addListener(function (tab) {
|
|
// No tabs or host permissions needed!
|
|
console.log('Turning ' + tab.url + ' red!');
|
|
chrome.tabs.executeScript({
|
|
code: 'document.body.style.backgroundColor="red"'
|
|
});
|
|
});
|
|
}
|
|
|
|
// https://developer.chrome.com/extensions/examples/api/browserAction/print/background.js
|
|
function printPage() {
|
|
chrome.browserAction.onClicked.addListener(function (tab) {
|
|
var action_url = "javascript:window.print();";
|
|
chrome.tabs.update(tab.id, { url: action_url });
|
|
});
|
|
}
|
|
|
|
// https://developer.chrome.com/extensions/examples/extensions/catblock/background.js
|
|
function catBlock () {
|
|
var loldogs: string[];
|
|
chrome.webRequest.onBeforeRequest.addListener(
|
|
function(info) {
|
|
console.log("Cat intercepted: " + info.url);
|
|
// Redirect the lolcal request to a random loldog URL.
|
|
var i = Math.round(Math.random() * loldogs.length);
|
|
return {redirectUrl: loldogs[i]};
|
|
},
|
|
// filters
|
|
{
|
|
urls: [
|
|
"https://i.chzbgr.com/*"
|
|
],
|
|
types: ["image"]
|
|
},
|
|
// extraInfoSpec
|
|
["blocking"]);
|
|
}
|
|
|
|
// contrived settings example
|
|
function proxySettings() {
|
|
chrome.proxy.settings.get({ incognito: false }, (details) => {
|
|
var val = details.value;
|
|
var level: string = details.levelOfControl;
|
|
var incognito: boolean = details.incognitoSpecific;
|
|
});
|
|
|
|
// bare minimum set call
|
|
chrome.proxy.settings.set({ value: 'something' });
|
|
|
|
// add a scope and callback
|
|
chrome.proxy.settings.set({
|
|
value: 'something',
|
|
scope: 'regular'
|
|
}, () => {});
|
|
|
|
chrome.proxy.settings.clear({});
|
|
|
|
// clear with a scope set
|
|
chrome.proxy.settings.clear({ scope: 'regular' });
|
|
}
|
|
|
|
// https://developer.chrome.com/extensions/examples/api/contentSettings/popup.js
|
|
function contentSettings() {
|
|
var incognito;
|
|
var url;
|
|
|
|
function settingChanged() {
|
|
var type = this.id;
|
|
var setting = this.value;
|
|
var pattern = /^file:/.test(url) ? url : url.replace(/\/[^\/]*?$/, '/*');
|
|
console.log(type+' setting for '+pattern+': '+setting);
|
|
// HACK: [type] is not recognised by the docserver's sample crawler, so
|
|
// mention an explicit
|
|
// type: chrome.contentSettings.cookies.set - See http://crbug.com/299634
|
|
chrome.contentSettings[type].set({
|
|
'primaryPattern': pattern,
|
|
'setting': setting,
|
|
'scope': (incognito ? 'incognito_session_only' : 'regular')
|
|
});
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
chrome.tabs.query({active: true, currentWindow: true, url: ['http://*/*', 'https://*/*'] }, function(tabs) {
|
|
var current = tabs[0];
|
|
incognito = current.incognito;
|
|
url = current.url;
|
|
var types = ['cookies', 'images', 'javascript', 'location', 'plugins',
|
|
'popups', 'notifications', 'fullscreen', 'mouselock',
|
|
'microphone', 'camera', 'unsandboxedPlugins',
|
|
'automaticDownloads'];
|
|
types.forEach(function(type) {
|
|
// HACK: [type] is not recognised by the docserver's sample crawler, so
|
|
// mention an explicit
|
|
// type: chrome.contentSettings.cookies.get - See http://crbug.com/299634
|
|
chrome.contentSettings[type] && chrome.contentSettings[type].get({
|
|
'primaryUrl': url,
|
|
'incognito': incognito
|
|
},
|
|
function(details) {
|
|
var input = <HTMLInputElement>document.getElementById(type);
|
|
input.disabled = false;
|
|
input.value = details.setting;
|
|
});
|
|
});
|
|
});
|
|
|
|
var selects = document.querySelectorAll('select');
|
|
for (var i = 0; i < selects.length; i++) {
|
|
selects[i].addEventListener('change', settingChanged);
|
|
}
|
|
});
|
|
}
|