From 1f77506f43607c6d3c9c87fbf82b993d87039526 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Tue, 10 Sep 2019 21:20:03 -0400 Subject: [PATCH] Implement profile copy --- ext/bg/js/settings-profiles.js | 39 +++++++++++++++++++++++++++++++--- ext/bg/settings.html | 19 +++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/ext/bg/js/settings-profiles.js b/ext/bg/js/settings-profiles.js index dca452d2..fa06203e 100644 --- a/ext/bg/js/settings-profiles.js +++ b/ext/bg/js/settings-profiles.js @@ -39,6 +39,8 @@ function profileOptionsSetupEventListeners() { $('#profile-add').click(utilAsync(onProfileAdd)); $('#profile-remove').click(utilAsync(onProfileRemove)); $('#profile-remove-confirm').click(utilAsync(onProfileRemoveConfirm)); + $('#profile-copy').click(utilAsync(onProfileCopy)); + $('#profile-copy-confirm').click(utilAsync(onProfileCopyConfirm)); $('.profile-form').find('input, select, textarea').not('.profile-form-manual').change(utilAsync(onProfileOptionsChanged)); } @@ -69,17 +71,22 @@ async function profileFormRead(optionsFull) { async function profileFormWrite(optionsFull) { const profile = optionsFull.profiles[currentProfileIndex]; - profileOptionsPopulateSelect($('#profile-active'), optionsFull.profiles, optionsFull.profileCurrent); - profileOptionsPopulateSelect($('#profile-target'), optionsFull.profiles, currentProfileIndex); + profileOptionsPopulateSelect($('#profile-active'), optionsFull.profiles, optionsFull.profileCurrent, null); + profileOptionsPopulateSelect($('#profile-target'), optionsFull.profiles, currentProfileIndex, null); $('#profile-remove').prop('disabled', optionsFull.profiles.length <= 1); + $('#profile-copy').prop('disabled', optionsFull.profiles.length <= 1); $('#profile-name').val(profile.name); } -function profileOptionsPopulateSelect(select, profiles, currentValue) { +function profileOptionsPopulateSelect(select, profiles, currentValue, ignoreIndices) { select.empty(); + for (let i = 0; i < profiles.length; ++i) { + if (ignoreIndices !== null && ignoreIndices.indexOf(i) >= 0) { + continue; + } const profile = profiles[i]; select.append($(``)); } @@ -199,3 +206,29 @@ async function onProfileRemoveConfirm() { function onProfileNameChanged() { $('#profile-active, #profile-target').find(`[value="${currentProfileIndex}"]`).text(this.value); } + +async function onProfileCopy() { + const optionsFull = await apiOptionsGetFull(); + if (optionsFull.profiles.length <= 1) { + return; + } + + profileOptionsPopulateSelect($('#profile-copy-source'), optionsFull.profiles, currentProfileIndex === 0 ? 1 : 0, [currentProfileIndex]); + $('#profile-copy-modal').modal('show'); +} + +async function onProfileCopyConfirm() { + $('#profile-copy-modal').modal('hide'); + + const optionsFull = await apiOptionsGetFull(); + const index = tryGetIntegerValue('#profile-copy-source', 0, optionsFull.profiles.length); + if (index === null || index === currentProfileIndex) { + return; + } + + const profile = utilIsolate(optionsFull.profiles[index].options); + optionsFull.profiles[currentProfileIndex].options = profile; + + await profileOptionsUpdateTarget(optionsFull); + await settingsSaveOptions(); +} diff --git a/ext/bg/settings.html b/ext/bg/settings.html index 1a1bc2ed..c0489894 100644 --- a/ext/bg/settings.html +++ b/ext/bg/settings.html @@ -100,6 +100,25 @@ + +