refactor: remove checkbox selection — apply to all target domains in tag automatically
This commit is contained in:
parent
8275caa87f
commit
3bc08d491e
1 changed files with 18 additions and 15 deletions
33
web/app.js
33
web/app.js
|
|
@ -31,27 +31,31 @@ function renderGroups(data) {
|
|||
}
|
||||
|
||||
var html = groups.map(function (g) {
|
||||
var targetCount = g.domains.filter(function (d) { return d !== g.source; }).length;
|
||||
|
||||
var domainsHtml = g.domains.map(function (d) {
|
||||
var isSource = (d === g.source);
|
||||
if (isSource) {
|
||||
return '<li class="domain source">' + esc(d) + ' <span class="badge-source">SOURCE</span></li>';
|
||||
}
|
||||
return '<li class="domain"><label><input type="checkbox" class="target-cb" data-domain="' + escAttr(d) + '" checked> ' + esc(d) + '</label></li>';
|
||||
return '<li class="domain target">' + esc(d) + '</li>';
|
||||
}).join('');
|
||||
|
||||
var noSource = !g.hasSource
|
||||
? '<div class="warn">No domain in this tag has headers yet. Set headers on one domain (via Zoraxy UI) to use it as the source.</div>'
|
||||
: '';
|
||||
|
||||
var actions = g.hasSource
|
||||
? '<button class="btn btn-primary btn-apply">Apply to ' + targetCount + ' target(s)</button>' +
|
||||
'<button class="btn btn-secondary btn-remove">Remove from targets</button>'
|
||||
: '';
|
||||
|
||||
return (
|
||||
'<div class="group" data-tag="' + escAttr(g.tag) + '" data-source="' + escAttr(g.source) + '">' +
|
||||
'<h2 class="group-title">' + esc(g.tag) + '</h2>' +
|
||||
noSource +
|
||||
'<ul class="domain-list">' + domainsHtml + '</ul>' +
|
||||
'<div class="group-actions">' +
|
||||
'<button class="btn btn-primary btn-apply">Apply to selected</button>' +
|
||||
'<button class="btn btn-secondary btn-remove">Remove from selected</button>' +
|
||||
'</div>' +
|
||||
'<div class="group-actions">' + actions + '</div>' +
|
||||
'<div class="result"></div>' +
|
||||
'</div>'
|
||||
);
|
||||
|
|
@ -68,13 +72,12 @@ function loadGroups() {
|
|||
});
|
||||
}
|
||||
|
||||
function getSelectedTargets(group) {
|
||||
// Collect all target domains (all non-source domains in the tag).
|
||||
function getTargets(group) {
|
||||
var targets = [];
|
||||
var boxes = group.querySelectorAll('.target-cb');
|
||||
for (var i = 0; i < boxes.length; i++) {
|
||||
if (boxes[i].checked) {
|
||||
targets.push(boxes[i].getAttribute('data-domain'));
|
||||
}
|
||||
var items = group.querySelectorAll('.domain.target');
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
targets.push(items[i].textContent.trim());
|
||||
}
|
||||
return targets;
|
||||
}
|
||||
|
|
@ -82,11 +85,11 @@ function getSelectedTargets(group) {
|
|||
function applyGroup(group) {
|
||||
var tag = group.dataset.tag;
|
||||
var source = group.dataset.source;
|
||||
var targets = getSelectedTargets(group);
|
||||
var targets = getTargets(group);
|
||||
var resultEl = group.querySelector('.result');
|
||||
|
||||
if (!source) { showToast('No source domain with headers', 'error'); return; }
|
||||
if (targets.length === 0) { showToast('No target domains selected', 'error'); return; }
|
||||
if (targets.length === 0) { showToast('No target domains in this tag', 'error'); return; }
|
||||
|
||||
resultEl.textContent = 'Applying...';
|
||||
$.cjax({
|
||||
|
|
@ -110,11 +113,11 @@ function applyGroup(group) {
|
|||
|
||||
function removeGroup(group) {
|
||||
var source = group.dataset.source;
|
||||
var targets = getSelectedTargets(group);
|
||||
var targets = getTargets(group);
|
||||
var resultEl = group.querySelector('.result');
|
||||
|
||||
if (!source) { showToast('No source domain', 'error'); return; }
|
||||
if (targets.length === 0) { showToast('No target domains selected', 'error'); return; }
|
||||
if (targets.length === 0) { showToast('No target domains in this tag', 'error'); return; }
|
||||
|
||||
resultEl.textContent = 'Removing...';
|
||||
$.cjax({
|
||||
|
|
|
|||
Loading…
Reference in a new issue