Skip to content

Commit

Permalink
added ability to export and import reading list
Browse files Browse the repository at this point in the history
  • Loading branch information
evdokimovm committed Apr 13, 2024
1 parent 5a3b907 commit b4b9431
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 7 deletions.
49 changes: 43 additions & 6 deletions js/options.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ var ignore_pinned_checkbox = document.querySelector('input.ignore_pinned')
var delete_merged_checkbox = document.querySelector('input.delete_merged')
var settings_dropdown = document.querySelector('#settingsDropdown')
var dropdown_content = settings_dropdown.querySelector('.settings-dropdown-content')
var open_dropdown_button = document.querySelector('.open_dropdown')
var open_dropdown_buttons = document.querySelectorAll('.open_dropdown')

var copy_button = document.querySelector('.copy')
var save_button = document.querySelector('.save')
Expand All @@ -23,11 +23,15 @@ var delete_files_button = document.querySelector('.delete_files')
var import_file_button = document.querySelector('button.import_file')
var import_all_files_button = document.querySelector('button.import_all_files')
var export_all_files_button = document.querySelector('button.export_all_files')
var export_reading_list_button = document.querySelector('button.export_reading_list')
var import_reading_list_button = document.querySelector('button.import_reading_list')

var file_ids = []
var query_options = { currentWindow: true }
var default_settings = { all_instances: false, ignore_pinned: false, delete_merged: false }

var _ = undefined

function getTabsFromCertainGroup(tab_type, data = null) {
switch (tab_type) {
case "All Tabs":
Expand Down Expand Up @@ -293,15 +297,24 @@ function toggleDropdown(id) {
dropdownMenu.classList.toggle('show')
}

function exportFile(e, files, index) {
async function entryExists(url) {
var entryExists = await chrome.readingList.query({ url })
return entryExists
}

async function addReadingListEntry(title, url, hasBeenRead) {
await chrome.readingList.addEntry({ title, url, hasBeenRead })
}

function exportFile(e, files, index, filename = 'alltabs.json') {
var file = index >= 0 ? files[index] : files
var json = JSON.stringify(file)
var blob = new Blob([json], { type: 'application/json' })
var url = URL.createObjectURL(blob)

var link = document.createElement('a')
link.href = url
link.download = index >= 0 ? files[index].name : 'alltabs.json'
link.download = index >= 0 ? files[index].name : filename
link.click()

URL.revokeObjectURL(url)
Expand Down Expand Up @@ -425,7 +438,6 @@ import_file_button.addEventListener('click', async function () {

export_all_files_button.addEventListener('click', async function () {
var files = await promiseWrapper('files', storageGetAllFrom)
var _ = undefined

exportFile(_, files, _)
})
Expand Down Expand Up @@ -541,6 +553,31 @@ delete_file_button.addEventListener('click', async function () {
}
})

open_dropdown_button.addEventListener('click', function() {
toggleDropdown(this.nextElementSibling.id)
open_dropdown_buttons.forEach(function(button) {
button.addEventListener('click', function() {
toggleDropdown(this.nextElementSibling.id)
})
})

export_reading_list_button.addEventListener('click', async function(e) {
var items = await chrome.readingList.query({})

if (!items.length) {
alert('Your reading list is empty. There is nothing to export')

return
}

exportFile(_, items, _, 'reading_list.json')
})

import_reading_list_button.addEventListener('click', async function(e) {
var reading_list = await pickFile(props)
for (var entry of reading_list) {
if (entryExists(entry.url)) {
console.log(`URL ${entry.url} already exists. This entry will not be imported`)
continue
}
await addReadingListEntry(entry.title, entry.url, entry.hasBeenRead)
}
})
3 changes: 2 additions & 1 deletion manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
"permissions": [
"tabGroups",
"tabs",
"storage"
"storage",
"readingList"
],
"host_permissions": [
"http://*/*",
Expand Down
8 changes: 8 additions & 0 deletions options.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,14 @@
</div>
</div>

<div class="dropdown">
<button class="btn btn-common grey open_dropdown">READING LIST</button>
<div id="reading_list_buttons_dropdown" class="buttons-dropdown-content">
<button type="button" class="btn btn-common grey export_reading_list">EXPORT READING LIST</button>
<button type="button" class="btn btn-common grey import_reading_list">IMPORT READING LIST</button>
</div>
</div>

<button type="button" class="btn btn-common red delete_file" disabled>DELETE</button>

<div class="settings-dropdown" id="settingsDropdown">
Expand Down

0 comments on commit b4b9431

Please sign in to comment.