Skip to content

Commit

Permalink
Merge pull request #17 from WesleyBranton/development
Browse files Browse the repository at this point in the history
Version 2.4
  • Loading branch information
WesleyBranton committed Jun 8, 2020
2 parents 89c6d09 + 0c6e0c6 commit 5407b60
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 51 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ To develop and test the extension, you need to open the "about:debugging" page i
Further documentation about developing Firefox extensions can be found [here](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension).

## Release Notes
### Version 2.4
* **[NEW]** Links can now be opened in a new window
* **[FIXED]** Minor performance improvement

### Version 2.3
* **[FIXED]** Firefox now uses the Outlook icon for the settings
* **[CHANGE]** Overhauled options UI
Expand Down
50 changes: 41 additions & 9 deletions firefox/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,33 @@
* @param {Object} info Storage API object
*/
function verify(info) {
// Check that mode setting is valid
if (info.mode != 'ask' && info.mode != 'live' && info.mode != 'office') {
browser.storage.local.set({
mode: 'ask'
});
} else {
mode = info.mode;
}

// Check that open in new window setting is valid
if (info.openInNewWindow) {
openInNewWindow = true;
}
}

/**
* Update settings variables to match Storage API
* @param {Object} changes List of changes
* @param {string} area Storage area changed
*/
function updatePrefs(changes, area) {
if (changes.mode) {
mode = changes.mode.newValue;
}

if (changes.openInNewWindow) {
openInNewWindow = changes.openInNewWindow.newValue;
}
}

Expand Down Expand Up @@ -73,16 +96,25 @@ async function openTab(requestDetails) {
const base = await getBase();
const link = base + params;
const tabInfo = await browser.tabs.get(requestDetails.tabId);
let tab;

// Checks if the link is already in a new tab or if a new tab needs to be created
if (tabInfo.url == 'about:blank') {
browser.tabs.update(requestDetails.tabId, {
tab = await browser.tabs.update(requestDetails.tabId, {
url: link
});
} else {
browser.tabs.create({
tab = await browser.tabs.create({
index: tabInfo.index + 1,
url: link
url: link,
active: !openInNewWindow
});
}

// Open email in new window, if user settings prefer that
if (openInNewWindow) {
browser.windows.create({
tabId: tab.id
});
}

Expand Down Expand Up @@ -151,20 +183,19 @@ function format(url) {
}

/** Determine which Outlook service to use
* @async
* @returns {string} Outlook URL
*/
async function getBase() {
const data = await browser.storage.local.get();

if (data.mode == 'live' || data.mode == 'office') {
return `https://outlook.${data.mode}.com/mail/deeplink/compose`;
function getBase() {
if (mode == 'live' || mode == 'office') {
return `https://outlook.${mode}.com/mail/deeplink/compose`;
} else {
return '/handler/sendmail.html';
}
}

let tmpUrl;
let openInNewWindow = false;
let mode = 'ask';
const filter = {
urls: [
'*://outlook.live.com/mail/deeplink/compose',
Expand All @@ -175,6 +206,7 @@ let data = browser.storage.local.get();
data.then(verify);

chrome.runtime.onMessage.addListener(saveMessage);
browser.storage.onChanged.addListener(updatePrefs);
browser.webRequest.onBeforeRequest.addListener(openTab, {
urls: ['*://outlook.com/send*']
}, ['blocking']);
59 changes: 20 additions & 39 deletions firefox/handler/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,68 +9,49 @@
function redirect(mode) {
let parameters = decodeURIComponent(window.location);
parameters = parameters.slice(parameters.indexOf('?to='), parameters.length);
let url = `https://outlook.${mode}.com/mail/deeplink/compose${parameters}`;
const url = `https://outlook.${mode}.com/mail/deeplink/compose${parameters}`;

// Set the default Outlook service (if required)
if (!wait) {
if (document.getElementById('doNotAsk').checked) {
browser.storage.local.set({
'mode': mode
});
}
if (document.getElementById('doNotAsk').checked) {
browser.storage.local.set({
'mode': mode
});
}

// Create data loss handler
chrome.runtime.sendMessage({
code: 'create-handler',
msg: [url, parameters]
});

// Redirect
showLoading(true);
window.location.replace(url);
}

/**
* Automatically load if user selected 'Do not ask again'
* @param {Object} info Storage API object
*/
function loaded(info) {
if (info.mode == 'live' || info.mode == 'office') {
wait = true;
redirect(info.mode);
} else {
wait = false;
refreshUI();
}
}

/**
* Remove loading bar & show choices
* @param {boolean} show Show loading bar
*/
function refreshUI() {
function showLoading(show) {
const loading = document.getElementById('loading');
const choose = document.getElementById('choose');

if (loading && choose) {
loading.className = 'hide';
choose.className = '';
loading.classList.remove('hide');
choose.classList.remove('hide');

if (show) {
choose.classList.add('hide');
} else {
loading.classList.add('hide');
}
}

let wait = true;
let data = browser.storage.local.get();
data.then(loaded);

/**
* Load button click events
*/
window.onload = function() {
document.getElementById('live').addEventListener('click', () => {
redirect('live')
});
document.getElementById('office').addEventListener('click', () => {
redirect('office')
});

if (!wait) {
refreshUI();
}
document.getElementById('live').addEventListener('click', () => { redirect('live') });
document.getElementById('office').addEventListener('click', () => { redirect('office') });
showLoading(false);
};
2 changes: 1 addition & 1 deletion firefox/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"manifest_version": 2,
"name": "Outlook.com mailto",
"version": "2.3",
"version": "2.4",
"description": "Add Outlook.com as a default email provider for all mailto links.",
"author": "Wesley Branton",

Expand Down
10 changes: 9 additions & 1 deletion firefox/options/options.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,22 @@
<body class="browser-style">
<form name="settings">
<section class="panel-section">
<label for="mode">Preferred Outlook.com Version<br>
<label for="mode">Preferred Outlook.com version<br>
<a href="https://github.com/WesleyBranton/Outlook.com-mailto/wiki/Which-Outlook.com-version-do-I-choose%3F" target="_blank">Learn More</a></label>
<div>
<label><input type="radio" name="mode" value="live"> Personal</label><br>
<label><input type="radio" name="mode" value="office"> Organization</label><br>
<label><input type="radio" name="mode" value="ask" checked> Always ask me</label>
</div>
</section>
<div class="panel-section-separator"></div>
<section class="panel-section">
<label for="openInNewWindow">Open emails in a new window?</label>
<div>
<label><input type="radio" name="openInNewWindow" value="yes"> Yes</label><br>
<label><input type="radio" name="openInNewWindow" value="no"> No</label>
</div>
</section>
</form>
<script src="script.js"></script>
</body>
Expand Down
11 changes: 10 additions & 1 deletion firefox/options/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,28 @@
* @param {Object} setting Storage API object
*/
function restore(setting) {
// Load mode setting
if (setting.mode != 'live' && setting.mode != 'office') {
document.settings.mode.value = 'ask';
} else {
document.settings.mode.value = setting.mode;
}

// Load open in new window setting
if (setting.openInNewWindow && setting.openInNewWindow == true) {
document.settings.openInNewWindow.value = 'yes';
} else {
document.settings.openInNewWindow.value = 'no';
}
}

/**
* Save settings to Storage API
*/
function save() {
browser.storage.local.set({
mode: document.settings.mode.value
mode: document.settings.mode.value,
openInNewWindow: document.settings.openInNewWindow.value == 'yes'
});
}

Expand Down

0 comments on commit 5407b60

Please sign in to comment.