rename: Outlook Relook → Outcut, add keyboard presets, remove design UI from popup
- Rename extension to "Outcut" throughout all source files and console logs - Add KEY_PRESETS object (gmail/outlook) and matchesAction() helper to keyboard.js - Rewrite handleKeydown to use preset-based dispatch instead of hardcoded switch - Update updateSettings to re-init when keyboardPreset changes - Add keyboardPreset: 'gmail' default to settings-defaults.js - Replace popup Design Tweaks UI with preset dropdown + dynamic help text - Keep all design tweak content script logic intact (activatable via storage) - Update manifest: version 1.0.0, remove activeTab, add homepage_url
This commit is contained in:
108
popup/popup.js
108
popup/popup.js
@@ -1,4 +1,4 @@
|
||||
// Outlook Relook — Popup Settings Logic
|
||||
// Outcut — Popup Settings Logic
|
||||
|
||||
(function () {
|
||||
'use strict';
|
||||
@@ -9,6 +9,7 @@
|
||||
var DEFAULTS = {
|
||||
// Primary feature
|
||||
keyboardMultiSelect: true,
|
||||
keyboardPreset: 'gmail',
|
||||
|
||||
// Design tweaks master toggle
|
||||
enableDesignTweaks: false,
|
||||
@@ -67,44 +68,15 @@
|
||||
quickFolderJump: true,
|
||||
};
|
||||
|
||||
var DENSITY_PRESETS = {
|
||||
comfortable: {
|
||||
compactTopBar: false,
|
||||
compactCommandBar: false,
|
||||
compactMessageList: false,
|
||||
compactReadingPane: false,
|
||||
compactFolderPane: false,
|
||||
narrowDateColumn: false,
|
||||
compressComposeToolbar: false,
|
||||
readingPaneMaxWidth: true,
|
||||
},
|
||||
compact: {
|
||||
compactTopBar: true,
|
||||
compactCommandBar: true,
|
||||
compactMessageList: true,
|
||||
compactReadingPane: true,
|
||||
compactFolderPane: true,
|
||||
narrowDateColumn: true,
|
||||
compressComposeToolbar: true,
|
||||
readingPaneMaxWidth: true,
|
||||
},
|
||||
'ultra-compact': {
|
||||
compactTopBar: true,
|
||||
compactCommandBar: true,
|
||||
compactMessageList: true,
|
||||
compactReadingPane: true,
|
||||
compactFolderPane: true,
|
||||
narrowDateColumn: true,
|
||||
compressComposeToolbar: true,
|
||||
readingPaneMaxWidth: true,
|
||||
},
|
||||
};
|
||||
|
||||
// --- Design sections visibility ---
|
||||
var designSections = document.getElementById('designSections');
|
||||
|
||||
function updateDesignSectionsVisibility(enabled) {
|
||||
designSections.style.display = enabled ? 'block' : 'none';
|
||||
// --- Keyboard help text ---
|
||||
function updateKeyboardHelp(presetName) {
|
||||
var helpEl = document.getElementById('keyboardHelpText');
|
||||
if (!helpEl) return;
|
||||
var presets = {
|
||||
gmail: 'j/k navigate, x/Space select, # delete, e archive, Shift+i/u read/unread, v move, f flag, p pin, Esc deselect',
|
||||
outlook: 'Arrows navigate, Space select, Del/Backspace delete, e archive, q read/unread, v move, f flag, p pin, Esc deselect'
|
||||
};
|
||||
helpEl.textContent = presets[presetName] || presets.gmail;
|
||||
}
|
||||
|
||||
// --- Load settings and populate UI ---
|
||||
@@ -122,26 +94,12 @@
|
||||
selects[j].value = settings[selects[j].dataset.setting] || '';
|
||||
}
|
||||
|
||||
// Radio groups
|
||||
var radioGroups = document.querySelectorAll('.or-radio-group[data-setting]');
|
||||
for (var k = 0; k < radioGroups.length; k++) {
|
||||
var key = radioGroups[k].dataset.setting;
|
||||
var radio = radioGroups[k].querySelector('input[value="' + settings[key] + '"]');
|
||||
if (radio) radio.checked = true;
|
||||
}
|
||||
|
||||
// Color picker
|
||||
var colorPicker = document.querySelector('input[type="color"][data-setting]');
|
||||
if (colorPicker) {
|
||||
colorPicker.value = settings.accentColor || '#1976d2';
|
||||
}
|
||||
|
||||
// Version
|
||||
var manifest = chrome.runtime.getManifest();
|
||||
document.getElementById('version').textContent = 'v' + manifest.version;
|
||||
|
||||
// Show/hide design sections
|
||||
updateDesignSectionsVisibility(settings.enableDesignTweaks);
|
||||
// Update help text based on current preset
|
||||
updateKeyboardHelp(settings.keyboardPreset || 'gmail');
|
||||
});
|
||||
}
|
||||
|
||||
@@ -165,11 +123,6 @@
|
||||
for (var c = 0; c < checkboxes.length; c++) {
|
||||
checkboxes[c].addEventListener('change', function () {
|
||||
saveSetting(this.dataset.setting, this.checked);
|
||||
|
||||
// Toggle design sections visibility when master toggle changes
|
||||
if (this.dataset.setting === 'enableDesignTweaks') {
|
||||
updateDesignSectionsVisibility(this.checked);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -181,41 +134,12 @@
|
||||
var value = this.value;
|
||||
saveSetting(settingKey, value);
|
||||
|
||||
// Density preset: apply to individual toggles
|
||||
if (settingKey === 'densityPreset' && DENSITY_PRESETS[value]) {
|
||||
var preset = DENSITY_PRESETS[value];
|
||||
chrome.storage.sync.set(preset);
|
||||
var toggleKeys = Object.keys(preset);
|
||||
for (var p = 0; p < toggleKeys.length; p++) {
|
||||
var checkbox = document.getElementById(toggleKeys[p]);
|
||||
if (checkbox) checkbox.checked = preset[toggleKeys[p]];
|
||||
}
|
||||
if (settingKey === 'keyboardPreset') {
|
||||
updateKeyboardHelp(value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// --- Radio group change handlers ---
|
||||
var radioGroups = document.querySelectorAll('.or-radio-group[data-setting]');
|
||||
for (var r = 0; r < radioGroups.length; r++) {
|
||||
var groupKey = radioGroups[r].dataset.setting;
|
||||
var radios = radioGroups[r].querySelectorAll('input[type="radio"]');
|
||||
for (var ri = 0; ri < radios.length; ri++) {
|
||||
(function (gk) {
|
||||
radios[ri].addEventListener('change', function () {
|
||||
if (this.checked) saveSetting(gk, this.value);
|
||||
});
|
||||
})(groupKey);
|
||||
}
|
||||
}
|
||||
|
||||
// --- Color picker change handler ---
|
||||
var colorPickers = document.querySelectorAll('input[type="color"][data-setting]');
|
||||
for (var cp = 0; cp < colorPickers.length; cp++) {
|
||||
colorPickers[cp].addEventListener('input', function () {
|
||||
saveSetting(this.dataset.setting, this.value);
|
||||
});
|
||||
}
|
||||
|
||||
// --- Export settings ---
|
||||
document.getElementById('exportBtn').addEventListener('click', function () {
|
||||
chrome.storage.sync.get(DEFAULTS, function (settings) {
|
||||
@@ -223,7 +147,7 @@
|
||||
var url = URL.createObjectURL(blob);
|
||||
var a = document.createElement('a');
|
||||
a.href = url;
|
||||
a.download = 'outlook-relook-settings.json';
|
||||
a.download = 'outcut-settings.json';
|
||||
a.click();
|
||||
URL.revokeObjectURL(url);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user