Loading Please wait...
x
232
1
var2
popupButtonSettings, popupCounter, popupTextarea, popupTextareaContainer, popupFilterTabs, popupFilterTabsContainer,3
popupButtonCopy, popupButtonExport,4
popupFormat, popupLabelFormatTitles, popupLabelFormatCustom, popupLimitWindow,5
currentWindowId, os,6
optionsIgnoreNonHTTP, optionsIgnorePinned, optionsFormatCustom, optionsFilterTabs, optionsCustomHeader7
8
var defaultPopupStates = {9
'states': {10
format: false,11
popupLimitWindow: false12
}13
}14
15
browser.runtime.getPlatformInfo(function (info) {16
os = info.os17
})18
19
browser.windows.getLastFocused(function (currentWindow) {20
currentWindowId = 21
})22
23
w.addEventListener('load', function () {24
popupCounter = d.getElementsByClassName('popup-counter')[0]25
popupFilterTabs = d.getElementsByClassName('popup-filter-tabs')[0]26
popupFilterTabsContainer = d.getElementsByClassName('popup-filter-tabs-container')[0]27
popupTextarea = d.getElementsByClassName('popup-textarea')[0]28
popupTextareaContainer = d.getElementsByClassName('popup-textarea-container')[0]29
popupFormat = d.getElementById('popup-format')30
popupLabelFormatTitles = d.getElementsByClassName('popup-label-format-titles')[0]31
popupLabelFormatCustom = d.getElementsByClassName('popup-label-format-custom')[0]32
popupLimitWindow = d.getElementById('popup-limit-window')33
popupButtonCopy = d.getElementsByClassName('popup-button-copy')[0]34
popupButtonExport = d.getElementsByClassName('popup-button-export')[0]35
popupButtonSettings = d.getElementsByClassName('popup-button-settings')[0]36
37
setLimitWindowVisibility()38
39
popupFormat.addEventListener('change', function () {40
savePopupStates()41
updatePopup()42
})43
44
popupButtonSettings.addEventListener('click', function () {45
browser.runtime.openOptionsPage()46
})47
48
popupLimitWindow.addEventListener('change', function () {49
savePopupStates()50
updatePopup()51
})52
53
popupFilterTabs.addEventListener('input', function () {54
updatePopup()55
})56
57
popupButtonCopy.addEventListener('click', function () {58
copyToClipboard()59
})60
61
popupButtonExport.addEventListener('click', function () {62
download()63
})64
65
getOptions()66
restorePopupStates()67
68
localization()69
})70
71
function updatePopup () {72
browser.tabs.query(73
{},74
function (tabs) {75
var list = ''76
var header = ''77
var format = '{url}\r\n'78
var actualNbTabs = 079
var totalNbTabs = tabs.length80
var nbFilterMatch = 081
var userInput = popupFilterTabs.value82
83
if (popupFormat.checked) format = '{title}\r\n{url}\r\n\r\n'84
85
if (optionsFormatCustom) {86
popupLabelFormatTitles.classList.add('hidden')87
popupLabelFormatCustom.classList.remove('hidden')88
89
if (popupFormat.checked) format = optionsFormatCustom.replace(/\\n/g, '\n').replace(/\\r/g, '\r')90
}91
92
if (optionsFilterTabs) popupFilterTabsContainer.classList.remove('hidden')93
94
for (var i = 0; i < totalNbTabs; i++) {95
var tabWindowId = tabs[i].windowId96
var tabPinned = tabs[i].pinned97
var tabURL = tabs[i].url98
var tabTitle = tabs[i].title99
100
if (optionsIgnorePinned && tabPinned) continue101
if (popupLimitWindow.checked && tabWindowId !== currentWindowId) continue102
103
if ((optionsIgnoreNonHTTP && tabURL.startsWith('http')) || !optionsIgnoreNonHTTP) {104
actualNbTabs += 1105
106
if (filterMatch(userInput, [tabTitle, tabURL]) || userInput === '') {107
nbFilterMatch += 1108
109
if (/<\/?[a-zA-Z]+\/?>/.test(format)) tabTitle = tabTitle.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"')110
111
list += format.replace(/{title}/g, tabTitle).replace(/{url}/g, tabURL).replace(/{window-id}/g, tabWindowId)112
}113
}114
}115
116
popupTextarea.value = ''117
118
if (optionsCustomHeader) {119
var nbTabs = (userInput !== '') ? nbFilterMatch : actualNbTabs120
121
header = optionsCustomHeader.replace(/\\n/g, '\n').replace(/\\r/g, '\r').replace(/{num-tabs}/g, nbTabs)122
123
popupTextarea.value += header + '\r\n\r\n'124
}125
126
popupTextarea.value += list127
popupCounter.textContent = (userInput !== '') ? nbFilterMatch + ' / ' + actualNbTabs : actualNbTabs128
129
setSeparatorStyle()130
popupFilterTabs.focus()131
}132
)133
}134
135
function filterMatch (needle, haystack) {136
var regex = new RegExp(needle, 'i')137
var match = false138
139
haystack.forEach(function (element) {140
if (regex.test(element)) match = true141
})142
143
return match144
}145
146
function setSeparatorStyle () {147
if (hasScrollbar(popupTextarea)) {148
popupTextareaContainer.classList.add('has-scrollbar')149
} else {150
popupTextareaContainer.classList.remove('has-scrollbar')151
}152
}153
154
function setLimitWindowVisibility () {155
let getting = browser.windows.getAll()156
157
getting.then(function (windowInfoArray) {158
if (windowInfoArray.length > 1) {159
popupLimitWindow.parentNode.classList.remove('hidden')160
}161
})162
}163
164
function copyToClipboard () {165
if (popupButtonCopy.classList.contains('disabled')) return166
167
popupTextarea.select()168
169
var message = d.execCommand('copy') ? 'copiedToClipboard' : 'notCopiedToClipboard'170
171
browser.notifications.create('ExportTabsURLs', {172
'type': 'basic',173
'title': browser.i18n.getMessage('appName'),174
'iconUrl': '../img/icon.svg',175
'message': browser.i18n.getMessage(message)176
})177
178
popupButtonCopy.classList.add('disabled')179
180
setTimeout(function () {181
browser.notifications.clear('ExportTabsURLs')182
popupButtonCopy.classList.remove('disabled')183
}, 3000)184
}185
186
function download () {187
var list = popupTextarea.value188
189
// fix inconsistent behaviour on Windows, see 190
if (os === 'win') list = list.replace(/\r?\n/g, '\r\n')191
192
var element = d.createElement('a')193
element.href = 'data:text/plain;charset=utf-8,' + encodeURIComponent(list)194
element.download = moment().format('YYYYMMDDTHHmmssZZ') + '_ExportTabsURLs.txt'195
element.style.display = 'none'196
197
d.body.appendChild(element)198
element.click()199
d.body.removeChild(element)200
}201
202
function restorePopupStates () {203
let gettingItem = browser.storage.local.get(defaultPopupStates)204
205
gettingItem.then(function (items) {206
popupLimitWindow.checked = items.states.popupLimitWindow207
popupFormat.checked = items.states.format208
209
updatePopup()210
})211
}212
213
function savePopupStates () {214
browser.storage.local.set({215
'states': {216
format: popupFormat.checked,217
popupLimitWindow: popupLimitWindow.checked218
}219
})220
}221
222
function getOptions () {223
let gettingItem = browser.storage.local.get(defaultOptions)224
225
gettingItem.then(function (items) {226
optionsIgnoreNonHTTP = items.options.ignoreNonHTTP227
optionsIgnorePinned = items.options.ignorePinned228
optionsFormatCustom = items.options.formatCustom229
optionsFilterTabs = items.options.filterTabs230
optionsCustomHeader = items.options.customHeader231
})232
}Description
No description 😔
RAW Paste Data
Recent Pastes
-
test
Plaintext | 7 | 1 minute ago
-
⌛ why do we do this
Plaintext | 54 | 22 minutes ago
-
iaygd6iad
Plaintext | 35 | 37 minutes ago
-
c
Plaintext | 23 | 1 hour ago
-
zdfsdfsdfdf
Plaintext | 27 | 1 hour ago
-
List iptv m3u
Plaintext | 27 | 1 hour ago