82 lines
2.8 KiB
JavaScript
82 lines
2.8 KiB
JavaScript
(function () {
|
|
'use strict';
|
|
|
|
var ext = typeof browser !== 'undefined' ? browser : chrome;
|
|
var protocol = globalThis.VerstakBrowser;
|
|
var queue = new protocol.CaptureQueue(protocol.browserStorageAdapter(ext));
|
|
var DEFAULT_SETTINGS = {
|
|
receiverUrl: protocol.DEFAULT_RECEIVER_URL,
|
|
receiverToken: ''
|
|
};
|
|
|
|
function getSettings() {
|
|
return ext.storage.local.get('settings').then(function (result) {
|
|
return Object.assign({}, DEFAULT_SETTINGS, result && result.settings || {});
|
|
});
|
|
}
|
|
|
|
function activeTab() {
|
|
return ext.tabs.query({ active: true, currentWindow: true }).then(function (tabs) {
|
|
return tabs && tabs[0] || {};
|
|
});
|
|
}
|
|
|
|
function captureFromInfo(kind, info, tab) {
|
|
return protocol.buildCapture({
|
|
kind: kind,
|
|
url: tab && tab.url || info.pageUrl || info.frameUrl || '',
|
|
title: tab && tab.title || '',
|
|
selectionText: info.selectionText || '',
|
|
linkUrl: info.linkUrl || '',
|
|
linkText: info.selectionText || ''
|
|
});
|
|
}
|
|
|
|
function sendOrQueue(payload) {
|
|
return getSettings().then(function (settings) {
|
|
return protocol.sendCapture(settings.receiverUrl, settings.receiverToken, payload).catch(function () {
|
|
return queue.enqueue(payload).then(function () {
|
|
return { status: 'queued', captureId: payload.captureId };
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
function retryPending() {
|
|
return getSettings().then(function (settings) {
|
|
return queue.retry(function (payload) {
|
|
return protocol.sendCapture(settings.receiverUrl, settings.receiverToken, payload);
|
|
});
|
|
});
|
|
}
|
|
|
|
function setupContextMenus() {
|
|
if (!ext.contextMenus) return;
|
|
ext.contextMenus.removeAll(function () {
|
|
ext.contextMenus.create({ id: 'verstak-capture-page', title: 'Send page to Verstak', contexts: ['page'] });
|
|
ext.contextMenus.create({ id: 'verstak-capture-selection', title: 'Send selection to Verstak', contexts: ['selection'] });
|
|
ext.contextMenus.create({ id: 'verstak-capture-link', title: 'Send link to Verstak', contexts: ['link'] });
|
|
});
|
|
}
|
|
|
|
ext.runtime.onInstalled.addListener(setupContextMenus);
|
|
if (ext.contextMenus && ext.contextMenus.onClicked) {
|
|
ext.contextMenus.onClicked.addListener(function (info, tab) {
|
|
var kind = info.menuItemId === 'verstak-capture-selection' ? 'selection'
|
|
: info.menuItemId === 'verstak-capture-link' ? 'link'
|
|
: 'page';
|
|
sendOrQueue(captureFromInfo(kind, info, tab || {}));
|
|
});
|
|
}
|
|
|
|
ext.runtime.onMessage.addListener(function (message) {
|
|
if (!message || message.type !== 'verstak.capture') return undefined;
|
|
if (message.action === 'retryPending') {
|
|
return retryPending();
|
|
}
|
|
return activeTab().then(function (tab) {
|
|
return sendOrQueue(captureFromInfo(message.kind || 'page', message, tab));
|
|
});
|
|
});
|
|
})();
|