summaryrefslogtreecommitdiff
path: root/ext/bg/js/settings-profiles.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/bg/js/settings-profiles.js')
-rw-r--r--ext/bg/js/settings-profiles.js39
1 files changed, 36 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($(`<option value="${i}">${profile.name}</option>`));
}
@@ -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();
+}