-
Notifications
You must be signed in to change notification settings - Fork 0
/
background.js
68 lines (59 loc) · 1.81 KB
/
background.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/* eslint-env browser, es6 */
/* global browser, window, saveToPinboard, saveToReadLater,
openUnreadBookmarks, openAllBookmarks */
browser.runtime.onMessage.addListener((message, sender) => {
if (message === 'save-to-pinboard' || message === 'save-to-read-later') {
getTabInfo().then((options) => {
saveBookmark(message, options)
})
} else if (message === 'open-unread-bookmarks') {
openUnreadBookmarks()
} else if (message === 'open-all-bookmarks') {
openAllBookmarks()
} else if (message === 'close-this') {
browser.tabs.remove(sender.tab.id)
}
})
browser.commands.onCommand.addListener((command) => {
if (command === 'save-to-pinboard' || command === 'save-to-read-later') {
getTabInfo().then((options) => {
saveBookmark(command, options)
})
}
})
function saveBookmark (command, options) {
if (command === 'save-to-pinboard') {
saveToPinboard(options)
} else if (command === 'save-to-read-later') {
saveToReadLater(options)
}
}
function getTabInfo () {
return browser.tabs.query({active: true, currentWindow: true}).then((tabs) => {
let tab = tabs[0]
let info = {
url: tab.url,
title: tab.title,
description: ''
}
return getDescription().then((results) => {
return {...info, description: results[0]}
}, () => {
return info
})
})
}
function getDescription () {
function getSelectionOrDescription () {
let selection = ''
if (window.getSelection) selection = window.getSelection().toString()
let meta = window.document.querySelector('meta[name=description]')
let description = ''
if (meta) description = meta.getAttribute('content') || ''
return selection || description
}
return browser.tabs.executeScript({
code: '(' + getSelectionOrDescription + ')()',
allFrames: false
})
}