Implement profile copy
This commit is contained in:
parent
c002e1bbd2
commit
1f77506f43
@ -39,6 +39,8 @@ function profileOptionsSetupEventListeners() {
|
|||||||
$('#profile-add').click(utilAsync(onProfileAdd));
|
$('#profile-add').click(utilAsync(onProfileAdd));
|
||||||
$('#profile-remove').click(utilAsync(onProfileRemove));
|
$('#profile-remove').click(utilAsync(onProfileRemove));
|
||||||
$('#profile-remove-confirm').click(utilAsync(onProfileRemoveConfirm));
|
$('#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));
|
$('.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) {
|
async function profileFormWrite(optionsFull) {
|
||||||
const profile = optionsFull.profiles[currentProfileIndex];
|
const profile = optionsFull.profiles[currentProfileIndex];
|
||||||
|
|
||||||
profileOptionsPopulateSelect($('#profile-active'), optionsFull.profiles, optionsFull.profileCurrent);
|
profileOptionsPopulateSelect($('#profile-active'), optionsFull.profiles, optionsFull.profileCurrent, null);
|
||||||
profileOptionsPopulateSelect($('#profile-target'), optionsFull.profiles, currentProfileIndex);
|
profileOptionsPopulateSelect($('#profile-target'), optionsFull.profiles, currentProfileIndex, null);
|
||||||
$('#profile-remove').prop('disabled', optionsFull.profiles.length <= 1);
|
$('#profile-remove').prop('disabled', optionsFull.profiles.length <= 1);
|
||||||
|
$('#profile-copy').prop('disabled', optionsFull.profiles.length <= 1);
|
||||||
|
|
||||||
$('#profile-name').val(profile.name);
|
$('#profile-name').val(profile.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
function profileOptionsPopulateSelect(select, profiles, currentValue) {
|
function profileOptionsPopulateSelect(select, profiles, currentValue, ignoreIndices) {
|
||||||
select.empty();
|
select.empty();
|
||||||
|
|
||||||
|
|
||||||
for (let i = 0; i < profiles.length; ++i) {
|
for (let i = 0; i < profiles.length; ++i) {
|
||||||
|
if (ignoreIndices !== null && ignoreIndices.indexOf(i) >= 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
const profile = profiles[i];
|
const profile = profiles[i];
|
||||||
select.append($(`<option value="${i}">${profile.name}</option>`));
|
select.append($(`<option value="${i}">${profile.name}</option>`));
|
||||||
}
|
}
|
||||||
@ -199,3 +206,29 @@ async function onProfileRemoveConfirm() {
|
|||||||
function onProfileNameChanged() {
|
function onProfileNameChanged() {
|
||||||
$('#profile-active, #profile-target').find(`[value="${currentProfileIndex}"]`).text(this.value);
|
$('#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();
|
||||||
|
}
|
||||||
|
@ -100,6 +100,25 @@
|
|||||||
<input type="text" id="profile-name" class="form-control">
|
<input type="text" id="profile-name" class="form-control">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="modal fade" tabindex="-1" role="dialog" id="profile-copy-modal">
|
||||||
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||||
|
<h4 class="modal-title">Copy Profile</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<p>Select which profile to copy options from:</p>
|
||||||
|
<select class="form-control" id="profile-copy-source"></select>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="profile-copy-confirm">Copy Profile</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="modal fade" tabindex="-1" role="dialog" id="profile-remove-modal">
|
<div class="modal fade" tabindex="-1" role="dialog" id="profile-remove-modal">
|
||||||
<div class="modal-dialog modal-dialog-centered">
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
|
Loading…
Reference in New Issue
Block a user