@jbrowse/plugin-alignments 2.4.1 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +4 -5
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +88 -126
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -1
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureFlags.d.ts +5 -0
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js +44 -0
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js.map +1 -0
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.d.ts +5 -0
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.js +37 -0
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.js.map +1 -0
- package/dist/AlignmentsFeatureDetail/index.d.ts +5 -2
- package/dist/AlignmentsFeatureDetail/util.d.ts +8 -0
- package/dist/AlignmentsFeatureDetail/util.js +27 -0
- package/dist/AlignmentsFeatureDetail/util.js.map +1 -0
- package/dist/AlignmentsTrack/configSchemaF.d.ts +74 -0
- package/dist/AlignmentsTrack/configSchemaF.js +19 -0
- package/dist/AlignmentsTrack/configSchemaF.js.map +1 -0
- package/dist/AlignmentsTrack/index.js +2 -15
- package/dist/AlignmentsTrack/index.js.map +1 -1
- package/dist/BamAdapter/BamAdapter.d.ts +1 -1
- package/dist/BamAdapter/BamAdapter.js +2 -2
- package/dist/BamAdapter/BamAdapter.js.map +1 -1
- package/dist/BamAdapter/configSchema.d.ts +50 -1
- package/dist/CramAdapter/CramAdapter.d.ts +1 -1
- package/dist/CramAdapter/CramAdapter.js +1 -1
- package/dist/CramAdapter/CramAdapter.js.map +1 -1
- package/dist/CramAdapter/CramTestAdapters.js +2 -2
- package/dist/CramAdapter/CramTestAdapters.js.map +1 -1
- package/dist/CramAdapter/configSchema.d.ts +40 -1
- package/dist/HtsgetBamAdapter/configSchema.d.ts +26 -1
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +0 -1
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +2 -2
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -1
- package/dist/LinearAlignmentsDisplay/models/configSchema.d.ts +39 -1
- package/dist/LinearAlignmentsDisplay/models/model.d.ts +8 -4
- package/dist/LinearAlignmentsDisplay/models/model.js +7 -3
- package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -1
- package/dist/LinearPileupDisplay/components/ColorByModifications.d.ts +0 -1
- package/dist/LinearPileupDisplay/components/ColorByTag.d.ts +0 -1
- package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +0 -1
- package/dist/LinearPileupDisplay/components/SetFeatureHeight.d.ts +0 -1
- package/dist/LinearPileupDisplay/components/SetMaxHeight.d.ts +0 -1
- package/dist/LinearPileupDisplay/components/SetMaxHeight.js +3 -5
- package/dist/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -1
- package/dist/LinearPileupDisplay/components/SortByTag.d.ts +0 -1
- package/dist/LinearPileupDisplay/configSchema.d.ts +57 -1
- package/dist/LinearPileupDisplay/model.d.ts +109 -51
- package/dist/LinearPileupDisplay/model.js +21 -24
- package/dist/LinearPileupDisplay/model.js.map +1 -1
- package/dist/LinearReadArcsDisplay/components/ReactComponent.d.ts +0 -1
- package/dist/LinearReadArcsDisplay/configSchema.d.ts +62 -1
- package/dist/LinearReadArcsDisplay/drawFeats.js +2 -2
- package/dist/LinearReadArcsDisplay/drawFeats.js.map +1 -1
- package/dist/LinearReadArcsDisplay/model.d.ts +82 -33
- package/dist/LinearReadCloudDisplay/components/ReactComponent.d.ts +0 -1
- package/dist/LinearReadCloudDisplay/configSchema.d.ts +50 -1
- package/dist/LinearReadCloudDisplay/drawFeats.d.ts +2 -0
- package/dist/LinearReadCloudDisplay/drawFeats.js +4 -4
- package/dist/LinearReadCloudDisplay/drawFeats.js.map +1 -1
- package/dist/LinearReadCloudDisplay/model.d.ts +69 -30
- package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +0 -1
- package/dist/LinearSNPCoverageDisplay/models/configSchema.d.ts +79 -1
- package/dist/LinearSNPCoverageDisplay/models/model.d.ts +52 -27
- package/dist/LinearSNPCoverageDisplay/models/model.js +1 -1
- package/dist/LinearSNPCoverageDisplay/models/model.js.map +1 -1
- package/dist/MismatchParser/index.js +2 -2
- package/dist/MismatchParser/index.js.map +1 -1
- package/dist/PileupRenderer/PileupLayoutSession.d.ts +1 -1
- package/dist/PileupRenderer/PileupRenderer.d.ts +1 -1
- package/dist/PileupRenderer/PileupRenderer.js +10 -1
- package/dist/PileupRenderer/PileupRenderer.js.map +1 -1
- package/dist/PileupRenderer/configSchema.d.ts +87 -1
- package/dist/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +1 -1
- package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +2 -2
- package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -1
- package/dist/SNPCoverageAdapter/configSchema.d.ts +10 -1
- package/dist/SNPCoverageAdapter/generateCoverageBins.js +50 -46
- package/dist/SNPCoverageAdapter/generateCoverageBins.js.map +1 -1
- package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +1 -1
- package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
- package/dist/SNPCoverageRenderer/configSchema.d.ts +42 -1
- package/dist/shared/FilterByTag.d.ts +0 -1
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +4 -5
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +88 -126
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -1
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.d.ts +5 -0
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js +38 -0
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js.map +1 -0
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.d.ts +5 -0
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.js +31 -0
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.js.map +1 -0
- package/esm/AlignmentsFeatureDetail/index.d.ts +5 -2
- package/esm/AlignmentsFeatureDetail/util.d.ts +8 -0
- package/esm/AlignmentsFeatureDetail/util.js +22 -0
- package/esm/AlignmentsFeatureDetail/util.js.map +1 -0
- package/esm/AlignmentsTrack/configSchemaF.d.ts +74 -0
- package/esm/AlignmentsTrack/configSchemaF.js +16 -0
- package/esm/AlignmentsTrack/configSchemaF.js.map +1 -0
- package/esm/AlignmentsTrack/index.js +3 -16
- package/esm/AlignmentsTrack/index.js.map +1 -1
- package/esm/BamAdapter/BamAdapter.d.ts +1 -1
- package/esm/BamAdapter/BamAdapter.js +2 -2
- package/esm/BamAdapter/BamAdapter.js.map +1 -1
- package/esm/BamAdapter/configSchema.d.ts +50 -1
- package/esm/CramAdapter/CramAdapter.d.ts +1 -1
- package/esm/CramAdapter/CramAdapter.js +1 -1
- package/esm/CramAdapter/CramAdapter.js.map +1 -1
- package/esm/CramAdapter/CramTestAdapters.js +1 -1
- package/esm/CramAdapter/CramTestAdapters.js.map +1 -1
- package/esm/CramAdapter/configSchema.d.ts +40 -1
- package/esm/HtsgetBamAdapter/configSchema.d.ts +26 -1
- package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +0 -1
- package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +2 -2
- package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -1
- package/esm/LinearAlignmentsDisplay/models/configSchema.d.ts +39 -1
- package/esm/LinearAlignmentsDisplay/models/model.d.ts +8 -4
- package/esm/LinearAlignmentsDisplay/models/model.js +7 -3
- package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -1
- package/esm/LinearPileupDisplay/components/ColorByModifications.d.ts +0 -1
- package/esm/LinearPileupDisplay/components/ColorByTag.d.ts +0 -1
- package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +0 -1
- package/esm/LinearPileupDisplay/components/SetFeatureHeight.d.ts +0 -1
- package/esm/LinearPileupDisplay/components/SetMaxHeight.d.ts +0 -1
- package/esm/LinearPileupDisplay/components/SetMaxHeight.js +3 -5
- package/esm/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -1
- package/esm/LinearPileupDisplay/components/SortByTag.d.ts +0 -1
- package/esm/LinearPileupDisplay/configSchema.d.ts +57 -1
- package/esm/LinearPileupDisplay/model.d.ts +109 -51
- package/esm/LinearPileupDisplay/model.js +21 -24
- package/esm/LinearPileupDisplay/model.js.map +1 -1
- package/esm/LinearReadArcsDisplay/components/ReactComponent.d.ts +0 -1
- package/esm/LinearReadArcsDisplay/configSchema.d.ts +62 -1
- package/esm/LinearReadArcsDisplay/drawFeats.js +2 -2
- package/esm/LinearReadArcsDisplay/drawFeats.js.map +1 -1
- package/esm/LinearReadArcsDisplay/model.d.ts +82 -33
- package/esm/LinearReadCloudDisplay/components/ReactComponent.d.ts +0 -1
- package/esm/LinearReadCloudDisplay/configSchema.d.ts +50 -1
- package/esm/LinearReadCloudDisplay/drawFeats.d.ts +2 -0
- package/esm/LinearReadCloudDisplay/drawFeats.js +4 -4
- package/esm/LinearReadCloudDisplay/drawFeats.js.map +1 -1
- package/esm/LinearReadCloudDisplay/model.d.ts +69 -30
- package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +0 -1
- package/esm/LinearSNPCoverageDisplay/models/configSchema.d.ts +79 -1
- package/esm/LinearSNPCoverageDisplay/models/model.d.ts +52 -27
- package/esm/LinearSNPCoverageDisplay/models/model.js +1 -1
- package/esm/LinearSNPCoverageDisplay/models/model.js.map +1 -1
- package/esm/MismatchParser/index.js +2 -2
- package/esm/MismatchParser/index.js.map +1 -1
- package/esm/PileupRenderer/PileupLayoutSession.d.ts +1 -1
- package/esm/PileupRenderer/PileupRenderer.d.ts +1 -1
- package/esm/PileupRenderer/PileupRenderer.js +10 -1
- package/esm/PileupRenderer/PileupRenderer.js.map +1 -1
- package/esm/PileupRenderer/configSchema.d.ts +87 -1
- package/esm/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +1 -1
- package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js +2 -2
- package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -1
- package/esm/SNPCoverageAdapter/configSchema.d.ts +10 -1
- package/esm/SNPCoverageAdapter/generateCoverageBins.js +50 -46
- package/esm/SNPCoverageAdapter/generateCoverageBins.js.map +1 -1
- package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +1 -1
- package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
- package/esm/SNPCoverageRenderer/configSchema.d.ts +42 -1
- package/esm/shared/FilterByTag.d.ts +0 -1
- package/package.json +2 -2
- package/src/AlignmentsFeatureDetail/AlignmentsFeatureDetail.tsx +109 -183
- package/src/AlignmentsFeatureDetail/AlignmentsFeatureFlags.tsx +62 -0
- package/src/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.tsx +51 -0
- package/src/AlignmentsFeatureDetail/__snapshots__/index.test.tsx.snap +4 -4
- package/src/AlignmentsFeatureDetail/util.ts +27 -0
- package/src/AlignmentsTrack/configSchemaF.ts +22 -0
- package/src/AlignmentsTrack/index.ts +3 -24
- package/src/BamAdapter/BamAdapter.ts +5 -2
- package/src/CramAdapter/CramAdapter.ts +4 -1
- package/src/CramAdapter/CramTestAdapters.ts +1 -1
- package/src/LinearAlignmentsDisplay/components/AlignmentsDisplay.tsx +2 -2
- package/src/LinearAlignmentsDisplay/models/model.tsx +11 -3
- package/src/LinearPileupDisplay/components/SetMaxHeight.tsx +3 -5
- package/src/LinearPileupDisplay/model.ts +38 -36
- package/src/LinearReadArcsDisplay/drawFeats.ts +2 -2
- package/src/LinearReadCloudDisplay/drawFeats.ts +6 -5
- package/src/LinearSNPCoverageDisplay/models/model.ts +1 -1
- package/src/MismatchParser/index.ts +2 -2
- package/src/PileupRenderer/PileupLayoutSession.ts +1 -1
- package/src/PileupRenderer/PileupRenderer.ts +15 -6
- package/src/SNPCoverageAdapter/SNPCoverageAdapter.ts +5 -2
- package/src/SNPCoverageAdapter/generateCoverageBins.ts +58 -55
- package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +1 -1
- package/dist/NestedFrequencyTable.d.ts +0 -14
- package/dist/NestedFrequencyTable.js +0 -94
- package/dist/NestedFrequencyTable.js.map +0 -1
- package/esm/NestedFrequencyTable.d.ts +0 -14
- package/esm/NestedFrequencyTable.js +0 -91
- package/esm/NestedFrequencyTable.js.map +0 -1
- package/src/NestedFrequencyTable.ts +0 -113
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
// see perf results on object.keys vs for-in loop
|
|
3
|
-
// https://jsperf.com/object-keys-vs-hasownproperty/55
|
|
4
|
-
export default class NestedFrequencyTable {
|
|
5
|
-
constructor(initialData = {}) {
|
|
6
|
-
this.categories = { ...initialData };
|
|
7
|
-
}
|
|
8
|
-
// get the sum of all the category counts
|
|
9
|
-
total() {
|
|
10
|
-
// calculate total if necessary
|
|
11
|
-
let t = 0;
|
|
12
|
-
for (const k in this.categories) {
|
|
13
|
-
const v = this.categories[k];
|
|
14
|
-
t += v.total ? v.total() : v;
|
|
15
|
-
}
|
|
16
|
-
return t;
|
|
17
|
-
}
|
|
18
|
-
// decrement the count for the given category
|
|
19
|
-
decrement(slotName, amount) {
|
|
20
|
-
if (!amount) {
|
|
21
|
-
amount = 1;
|
|
22
|
-
}
|
|
23
|
-
slotName = slotName ? slotName.toString() : 'default';
|
|
24
|
-
if (this.categories[slotName]) {
|
|
25
|
-
this.categories[slotName] = Math.max(0, this.categories[slotName] - amount);
|
|
26
|
-
return this.categories[slotName];
|
|
27
|
-
}
|
|
28
|
-
return 0;
|
|
29
|
-
}
|
|
30
|
-
// increment the count for the given category
|
|
31
|
-
increment(slotName, amount) {
|
|
32
|
-
if (!amount) {
|
|
33
|
-
amount = 1;
|
|
34
|
-
}
|
|
35
|
-
slotName = slotName ? slotName.toString() : 'default';
|
|
36
|
-
this.categories[slotName] = (this.categories[slotName] || 0) + amount;
|
|
37
|
-
return this.categories[slotName];
|
|
38
|
-
}
|
|
39
|
-
// get the value of the given category. may be a number or a
|
|
40
|
-
// frequency table.
|
|
41
|
-
get(slotName) {
|
|
42
|
-
return this.categories[slotName] || 0;
|
|
43
|
-
}
|
|
44
|
-
// get a given category as a frequency table
|
|
45
|
-
getNested(path) {
|
|
46
|
-
if (typeof path === 'string') {
|
|
47
|
-
path = path.split('/');
|
|
48
|
-
}
|
|
49
|
-
if (path.length === 0) {
|
|
50
|
-
return this;
|
|
51
|
-
}
|
|
52
|
-
const slotName = path[0].toString();
|
|
53
|
-
let slot = this.categories[slotName];
|
|
54
|
-
if (!slot || !slot.categories) {
|
|
55
|
-
this.categories[slotName] = new NestedFrequencyTable(slot ? { default: slot + 0 } : {});
|
|
56
|
-
}
|
|
57
|
-
slot = this.categories[slotName];
|
|
58
|
-
if (path.length > 1) {
|
|
59
|
-
return slot.getNested(path.slice(1));
|
|
60
|
-
}
|
|
61
|
-
return slot;
|
|
62
|
-
}
|
|
63
|
-
toString() {
|
|
64
|
-
return this.total()
|
|
65
|
-
.toPrecision(6)
|
|
66
|
-
.toString()
|
|
67
|
-
.replace(/\.?0+$/, '');
|
|
68
|
-
}
|
|
69
|
-
valueOf() {
|
|
70
|
-
return this.total();
|
|
71
|
-
}
|
|
72
|
-
// iterate through the categories and counts, call like:
|
|
73
|
-
//
|
|
74
|
-
// tbl.forEach( function( count, categoryName ) {
|
|
75
|
-
// // do something
|
|
76
|
-
// }, this );
|
|
77
|
-
//
|
|
78
|
-
forEach(func, ctx) {
|
|
79
|
-
if (ctx) {
|
|
80
|
-
for (const slotName in this.categories) {
|
|
81
|
-
func.call(ctx, this.categories[slotName], slotName);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
for (const slotName in this.categories) {
|
|
86
|
-
func(this.categories[slotName], slotName);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=NestedFrequencyTable.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NestedFrequencyTable.js","sourceRoot":"","sources":["../src/NestedFrequencyTable.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
// see perf results on object.keys vs for-in loop
|
|
3
|
-
// https://jsperf.com/object-keys-vs-hasownproperty/55
|
|
4
|
-
export default class NestedFrequencyTable {
|
|
5
|
-
public categories: { [key: string]: any }
|
|
6
|
-
|
|
7
|
-
constructor(initialData = {}) {
|
|
8
|
-
this.categories = { ...initialData }
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
// get the sum of all the category counts
|
|
12
|
-
total() {
|
|
13
|
-
// calculate total if necessary
|
|
14
|
-
let t = 0
|
|
15
|
-
|
|
16
|
-
for (const k in this.categories) {
|
|
17
|
-
const v = this.categories[k]
|
|
18
|
-
t += v.total ? v.total() : v
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return t
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// decrement the count for the given category
|
|
25
|
-
decrement(slotName: string, amount: number) {
|
|
26
|
-
if (!amount) {
|
|
27
|
-
amount = 1
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
slotName = slotName ? slotName.toString() : 'default'
|
|
31
|
-
|
|
32
|
-
if (this.categories[slotName]) {
|
|
33
|
-
this.categories[slotName] = Math.max(
|
|
34
|
-
0,
|
|
35
|
-
this.categories[slotName] - amount,
|
|
36
|
-
)
|
|
37
|
-
return this.categories[slotName]
|
|
38
|
-
}
|
|
39
|
-
return 0
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// increment the count for the given category
|
|
43
|
-
increment(slotName: string, amount: number) {
|
|
44
|
-
if (!amount) {
|
|
45
|
-
amount = 1
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
slotName = slotName ? slotName.toString() : 'default'
|
|
49
|
-
|
|
50
|
-
this.categories[slotName] = (this.categories[slotName] || 0) + amount
|
|
51
|
-
return this.categories[slotName]
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// get the value of the given category. may be a number or a
|
|
55
|
-
// frequency table.
|
|
56
|
-
get(slotName: string) {
|
|
57
|
-
return this.categories[slotName] || 0
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// get a given category as a frequency table
|
|
61
|
-
getNested(path: string | string[]) {
|
|
62
|
-
if (typeof path === 'string') {
|
|
63
|
-
path = path.split('/')
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (path.length === 0) {
|
|
67
|
-
return this
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const slotName = path[0].toString()
|
|
71
|
-
let slot = this.categories[slotName]
|
|
72
|
-
if (!slot || !slot.categories) {
|
|
73
|
-
this.categories[slotName] = new NestedFrequencyTable(
|
|
74
|
-
slot ? { default: slot + 0 } : {},
|
|
75
|
-
)
|
|
76
|
-
}
|
|
77
|
-
slot = this.categories[slotName]
|
|
78
|
-
|
|
79
|
-
if (path.length > 1) {
|
|
80
|
-
return slot.getNested(path.slice(1))
|
|
81
|
-
}
|
|
82
|
-
return slot
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
toString() {
|
|
86
|
-
return this.total()
|
|
87
|
-
.toPrecision(6)
|
|
88
|
-
.toString()
|
|
89
|
-
.replace(/\.?0+$/, '')
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
valueOf() {
|
|
93
|
-
return this.total()
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// iterate through the categories and counts, call like:
|
|
97
|
-
//
|
|
98
|
-
// tbl.forEach( function( count, categoryName ) {
|
|
99
|
-
// // do something
|
|
100
|
-
// }, this );
|
|
101
|
-
//
|
|
102
|
-
forEach(func: Function, ctx: any) {
|
|
103
|
-
if (ctx) {
|
|
104
|
-
for (const slotName in this.categories) {
|
|
105
|
-
func.call(ctx, this.categories[slotName], slotName)
|
|
106
|
-
}
|
|
107
|
-
} else {
|
|
108
|
-
for (const slotName in this.categories) {
|
|
109
|
-
func(this.categories[slotName], slotName)
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|