45 lines
1.6 KiB
JavaScript
45 lines
1.6 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
/**
|
|
* A helper class that contains the state of the audit progress performed by
|
|
* the accessibility panel. Its onProgressForWalker function wraps around the
|
|
* onProgress function (see actions/audit.js) that updates the panel state. It
|
|
* combines the audits across multiple frames that happen asynchronously. It
|
|
* only starts dispatching/calling onProgress after we get an initial progress
|
|
* audit-event from all frames (and thus know the combined total).
|
|
*/
|
|
class CombinedProgress {
|
|
constructor({ onProgress, totalFrames }) {
|
|
this.onProgress = onProgress;
|
|
this.totalFrames = totalFrames;
|
|
this.combinedProgress = new Map();
|
|
}
|
|
|
|
onProgressForWalker(walker, progress) {
|
|
this.combinedProgress.set(walker, progress);
|
|
// We did not get all initial progress events from all frames, do not
|
|
// relay them to the client until we can calculate combined total below.
|
|
if (this.combinedProgress.size < this.totalFrames) {
|
|
return;
|
|
}
|
|
|
|
let combinedTotal = 0;
|
|
let combinedCompleted = 0;
|
|
|
|
for (const { completed, total } of this.combinedProgress.values()) {
|
|
combinedTotal += total;
|
|
combinedCompleted += completed;
|
|
}
|
|
this.onProgress({
|
|
total: combinedTotal,
|
|
percentage: Math.round((combinedCompleted / combinedTotal) * 100),
|
|
});
|
|
}
|
|
}
|
|
|
|
exports.CombinedProgress = CombinedProgress;
|
|
exports.isFiltered = filters => Object.values(filters).some(active => active);
|