Skip to content

Commit

Permalink
Add support for opening archived pages, links and images via the cont…
Browse files Browse the repository at this point in the history
…ext menu (#144)

Adds support for opening archived versions of pages, links and images via the context menu. Each context menu item can be enabled or disabled via the options page.

* [settings.js] Add 'contextMenuArchive' options to defaults
* [messages.json][en] Add messages for 'ViewArchived' context menu options
* [options.html] Add checkboxes for view archived options
* [options.html] Add title attribute to checkbox labels
* [options.js] Add support for 'contextMenuViewArchived' options
* [background.js] Update contextMenus()
* [background.js] Update browser.contextMenus.onClicked callback
  • Loading branch information
VerifiedJoseph authored Feb 17, 2020
1 parent 42183b3 commit 2f9efe8
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 20 deletions.
15 changes: 15 additions & 0 deletions src/_locales/en/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,21 @@
"description": "Title of context menu item that saves a image to the Wayback Machine."
},

"MenuItemViewArchivedPage": {
"message": "View Archived Page",
"description": "Title of context menu item that opens an archived version of a page."
},

"MenuItemViewArchivedImage": {
"message": "View Archived Image",
"description": "Title of context menu item that opens an archived version of an image."
},

"MenuItemViewArchivedLink": {
"message": "View Archived Link",
"description": "Title of context menu item that opens an archived version of a link."
},

"notificationArchiveFailed": {
"message": "Page Not Archived",
"description": "Title of notification that tells the user that the page was not archived."
Expand Down
27 changes: 24 additions & 3 deletions src/html/options.html
Original file line number Diff line number Diff line change
Expand Up @@ -117,26 +117,47 @@ <h3>Right Click Menu</h3>
</label>
</div>
<div class="option child">
<label class="checkbox">
<label title="Adds a right click menu option for archiving pages." class="checkbox">
<input type="checkbox" id="context_menu_page" />
<span></span>
<p class="text">Enable 'Archive Page' option.</p>
</label>
</div>
<div class="option child">
<label class="checkbox">
<label title="Adds a right click menu option for archiving links." class="checkbox">
<input type="checkbox" id="context_menu_link" />
<span></span>
<p class="text">Enable 'Archive Link' option.</p>
</label>
</div>
<div class="option child">
<label class="checkbox">
<label title="Adds a right click menu option for archiving images." class="checkbox">
<input type="checkbox" id="context_menu_image" />
<span></span>
<p class="text">Enable 'Archive Image' option.</p>
</label>
</div>
<div class="option child">
<label title="Adds a right click menu option for viewing archived versions of a page." class="checkbox">
<input type="checkbox" id="context_menu_view_page" />
<span></span>
<p class="text">Enable 'View Archived Page' option.</p>
</label>
</div>
<div class="option child">
<label title="Adds a right click menu option for viewing archived versions of a link." class="checkbox">
<input type="checkbox" id="context_menu_view_link" />
<span></span>
<p class="text">Enable 'View Archived Link' option.</p>
</label>
</div>
<div class="option child">
<label title="Adds a right click menu option for viewing archived versions of an image." class="checkbox">
<input type="checkbox" id="context_menu_view_image" />
<span></span>
<p class="text">Enable 'View Archived Image' option.</p>
</label>
</div>
<div class="option bottom">
<label class="checkbox">
<input type="checkbox" id="context_note" />
Expand Down
88 changes: 71 additions & 17 deletions src/javascript/pages/background.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*jslint node: true */
/*global Stats, Settings, Notify, validate, archive, browser, Debug, console */
/*global Stats, Settings, Notify, validate, archive, browser, Debug, global, console */
"use strict";

var settings = new Settings(),
Expand All @@ -9,7 +9,10 @@ var settings = new Settings(),
contextMenuSet = {
'archivePage': false,
'archiveLink': false,
'archiveImage': false
'archiveImage': false,
'viewArchivedPage': false,
'viewArchivedLink': false,
'viewArchivedImage': false
};

/**
Expand Down Expand Up @@ -64,54 +67,83 @@ function contextMenus() {

// Pages
if (contextMenuSet.archivePage === false && settings.get('contextMenuArchive').page === true) {

contextMenuCreate(
'archivePage',
'page',
browser.i18n.getMessage('MenuItemArchivePage')
);

} else if (contextMenuSet.archivePage === true && settings.get('contextMenuArchive').page === false) {

contextMenuRemove('archivePage');

}

// Links
if (contextMenuSet.archiveLink === false && settings.get('contextMenuArchive').link === true) {

contextMenuCreate(
'archiveLink',
'link',
browser.i18n.getMessage('MenuItemArchiveLink')
);

} else if (contextMenuSet.archiveLink === true && settings.get('contextMenuArchive').link === false) {

contextMenuRemove('archiveLink');

}

// Images
if (contextMenuSet.archiveImage === false && settings.get('contextMenuArchive').image === true) {

contextMenuCreate(
'archiveImage',
'image',
browser.i18n.getMessage('MenuItemArchiveImage')
);

} else if (contextMenuSet.archiveImage === true && settings.get('contextMenuArchive').image === false) {

contextMenuRemove('archiveImage');
}

// View archived page
if (contextMenuSet.viewArchivedPage === false && settings.get('contextMenuViewArchived').page === true) {
contextMenuCreate(
'viewArchivedPage',
'page',
browser.i18n.getMessage('MenuItemViewArchivedPage')
);

} else if (contextMenuSet.viewArchivedPage === true && settings.get('contextMenuViewArchived').page === false) {
contextMenuRemove('viewArchivedPage');
}

// View archived link
if (contextMenuSet.viewArchivedLink === false && settings.get('contextMenuViewArchived').link === true) {
contextMenuCreate(
'viewArchivedLink',
'link',
browser.i18n.getMessage('MenuItemViewArchivedLink')
);

} else if (contextMenuSet.viewArchivedLink === true && settings.get('contextMenuViewArchived').link === false) {
contextMenuRemove('viewArchivedLink');
}

// View archived image
if (contextMenuSet.viewArchivedImage === false && settings.get('contextMenuViewArchived').image === true) {
contextMenuCreate(
'viewArchivedImage',
'image',
browser.i18n.getMessage('MenuItemViewArchivedImage')
);

} else if (contextMenuSet.viewArchivedImage === true && settings.get('contextMenuViewArchived').image === false) {
contextMenuRemove('viewArchivedImage');
}
} else { // Context menu options disabled, remove all options.

contextMenuRemove('archivePage');
contextMenuRemove('archiveLink');
contextMenuRemove('archiveImage');

contextMenuRemove('viewArchivedPage');
contextMenuRemove('viewArchivedLink');
contextMenuRemove('viewArchivedImage');
}
}

Expand Down Expand Up @@ -232,23 +264,46 @@ browser.storage.onChanged.addListener(function () {

// Listener for context menu link
browser.contextMenus.onClicked.addListener(function (info) {
var archivePage = false,
url;

if (info.hasOwnProperty('pageUrl')) {
if (info.menuItemId === 'archivePage') {
archivePage = true;
}

var url = info.pageUrl;
url = info.pageUrl;
}

if (info.hasOwnProperty('linkUrl')) {
if (info.menuItemId === 'archiveLink') {
archivePage = true;
}

if (info.menuItemId === 'archiveLink') {
url = info.linkUrl;
}

if (info.hasOwnProperty('srcUrl')) {
if (info.menuItemId === 'archiveImage') {
archivePage = true;
}

if (info.menuItemId === 'archiveImage') {
url = info.srcUrl;
}

settings.load(function () {

validate(url, function (status) {

if (status === true) {
archive(url, wasArchived); // Save the page
if (archivePage === true) { // Archive page
archive(url, wasArchived);
}

if (archivePage === false) { // View archived page
browser.tabs.create({
url: global.urls.base + '/web/2/' + url
});
}

} else { // Failed, show notification

Expand All @@ -260,7 +315,6 @@ browser.contextMenus.onClicked.addListener(function (info) {
}
});
});

});

browser.runtime.onInstalled.addListener(function (details) {
Expand Down
18 changes: 18 additions & 0 deletions src/javascript/pages/options.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ function displaySettings(showDefaults) {
document.getElementById('context_menu_page').checked = list.contextMenuArchive.page;
document.getElementById('context_menu_link').checked = list.contextMenuArchive.link;
document.getElementById('context_menu_image').checked = list.contextMenuArchive.image;
document.getElementById('context_menu_view_page').checked = list.contextMenuViewArchived.page;
document.getElementById('context_menu_view_link').checked = list.contextMenuViewArchived.link;
document.getElementById('context_menu_view_image').checked = list.contextMenuViewArchived.image;

// Notifications
document.getElementById('context_note').checked = list.contextMenuNote;
Expand All @@ -68,6 +71,10 @@ function displaySettings(showDefaults) {
ui.disableInput('context_menu_page');
ui.disableInput('context_menu_link');
ui.disableInput('context_menu_image');

ui.disableInput('context_menu_view_page');
ui.disableInput('context_menu_view_link');
ui.disableInput('context_menu_view_image');
ui.disableInput('context_note');
}

Expand Down Expand Up @@ -178,6 +185,11 @@ function saveSettings() {
'link': document.getElementById('context_menu_link').checked,
'image': document.getElementById('context_menu_image').checked
},
contextMenuViewArchived: {
'page': document.getElementById('context_menu_view_page').checked,
'link': document.getElementById('context_menu_view_link').checked,
'image': document.getElementById('context_menu_view_image').checked
},
contextMenuNote: document.getElementById('context_note').checked,

notePlayAlert: document.getElementById('note_sound').checked,
Expand Down Expand Up @@ -250,11 +262,17 @@ function inputEventHandler(event) {
ui.enableInput('context_menu_page');
ui.enableInput('context_menu_link');
ui.enableInput('context_menu_image');
ui.enableInput('context_menu_view_page');
ui.enableInput('context_menu_view_link');
ui.enableInput('context_menu_view_image');
ui.enableInput('context_note');
} else {
ui.disableInput('context_menu_page');
ui.disableInput('context_menu_link');
ui.disableInput('context_menu_image');
ui.disableInput('context_menu_view_page');
ui.disableInput('context_menu_view_link');
ui.disableInput('context_menu_view_image');
ui.disableInput('context_note');
}

Expand Down
5 changes: 5 additions & 0 deletions src/javascript/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ function Settings() {
'link': true,
'image': true
},
contextMenuViewArchived: { // View archived content context menu options
'page': true,
'link': true,
'image': true
},
contextMenuNote: true, // Display notification if a page, link or image cannot be archived via the context menu.

// Notifications
Expand Down

0 comments on commit 2f9efe8

Please sign in to comment.