ixbrl-viewer 1.4.1__py3-none-any.whl → 1.4.86__py3-none-any.whl
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.
- iXBRLViewerPlugin/__init__.py +231 -127
- iXBRLViewerPlugin/_version.py +33 -3
- iXBRLViewerPlugin/constants.py +96 -2
- iXBRLViewerPlugin/featureConfig.py +8 -1
- iXBRLViewerPlugin/iXBRLViewer.py +356 -214
- iXBRLViewerPlugin/plugin.py +12 -0
- iXBRLViewerPlugin/ui.py +81 -50
- iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js +1 -1
- iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js.LICENSE.txt +12 -5
- iXBRLViewerPlugin/viewer/i18next-parser.config.js +1 -1
- iXBRLViewerPlugin/viewer/src/data/utr.json +1244 -0
- iXBRLViewerPlugin/viewer/src/html/fact-details.html +69 -38
- iXBRLViewerPlugin/viewer/src/html/footer-logo.html +4 -0
- iXBRLViewerPlugin/viewer/src/html/footnote-details.html +2 -2
- iXBRLViewerPlugin/viewer/src/html/inspector.html +352 -197
- iXBRLViewerPlugin/viewer/src/i18n/cy/balancetypes.json +1 -0
- iXBRLViewerPlugin/viewer/src/i18n/cy/currencies.json +13 -0
- iXBRLViewerPlugin/viewer/src/i18n/cy/datatypes.json +9 -0
- iXBRLViewerPlugin/viewer/src/i18n/cy/labelroles.json +24 -0
- iXBRLViewerPlugin/viewer/src/i18n/cy/referenceparts.json +10 -0
- iXBRLViewerPlugin/viewer/src/i18n/cy/scale.json +16 -0
- iXBRLViewerPlugin/viewer/src/i18n/cy/tooltips.json +17 -0
- iXBRLViewerPlugin/viewer/src/i18n/cy/translation.json +179 -0
- iXBRLViewerPlugin/viewer/src/i18n/da/balancetypes.json +4 -0
- iXBRLViewerPlugin/viewer/src/i18n/da/currencies.json +13 -0
- iXBRLViewerPlugin/viewer/src/i18n/da/datatypes.json +9 -0
- iXBRLViewerPlugin/viewer/src/i18n/da/labelroles.json +24 -0
- iXBRLViewerPlugin/viewer/src/i18n/da/referenceparts.json +10 -0
- iXBRLViewerPlugin/viewer/src/i18n/da/scale.json +15 -0
- iXBRLViewerPlugin/viewer/src/i18n/da/tooltips.json +17 -0
- iXBRLViewerPlugin/viewer/src/i18n/da/translation.json +179 -0
- iXBRLViewerPlugin/viewer/src/i18n/de/balancetypes.json +4 -0
- iXBRLViewerPlugin/viewer/src/i18n/de/currencies.json +13 -0
- iXBRLViewerPlugin/viewer/src/i18n/de/datatypes.json +9 -0
- iXBRLViewerPlugin/viewer/src/i18n/de/labelroles.json +24 -0
- iXBRLViewerPlugin/viewer/src/i18n/de/referenceparts.json +10 -0
- iXBRLViewerPlugin/viewer/src/i18n/de/scale.json +15 -0
- iXBRLViewerPlugin/viewer/src/i18n/de/tooltips.json +17 -0
- iXBRLViewerPlugin/viewer/src/i18n/de/translation.json +179 -0
- iXBRLViewerPlugin/viewer/src/i18n/en/balancetypes.json +4 -0
- iXBRLViewerPlugin/viewer/src/i18n/en/datatypes.json +10 -0
- iXBRLViewerPlugin/viewer/src/i18n/en/labelroles.json +4 -0
- iXBRLViewerPlugin/viewer/src/i18n/en/scale.json +16 -0
- iXBRLViewerPlugin/viewer/src/i18n/en/tooltips.json +17 -0
- iXBRLViewerPlugin/viewer/src/i18n/en/translation.json +73 -23
- iXBRLViewerPlugin/viewer/src/i18n/es/balancetypes.json +4 -0
- iXBRLViewerPlugin/viewer/src/i18n/es/datatypes.json +10 -0
- iXBRLViewerPlugin/viewer/src/i18n/es/labelroles.json +24 -0
- iXBRLViewerPlugin/viewer/src/i18n/es/scale.json +16 -0
- iXBRLViewerPlugin/viewer/src/i18n/es/tooltips.json +17 -0
- iXBRLViewerPlugin/viewer/src/i18n/es/translation.json +87 -37
- iXBRLViewerPlugin/viewer/src/i18n/fr/balancetypes.json +4 -0
- iXBRLViewerPlugin/viewer/src/i18n/fr/currencies.json +13 -0
- iXBRLViewerPlugin/viewer/src/i18n/fr/datatypes.json +9 -0
- iXBRLViewerPlugin/viewer/src/i18n/fr/labelroles.json +24 -0
- iXBRLViewerPlugin/viewer/src/i18n/fr/referenceparts.json +10 -0
- iXBRLViewerPlugin/viewer/src/i18n/fr/scale.json +15 -0
- iXBRLViewerPlugin/viewer/src/i18n/fr/tooltips.json +17 -0
- iXBRLViewerPlugin/viewer/src/i18n/fr/translation.json +179 -0
- iXBRLViewerPlugin/viewer/src/i18n/nl/balancetypes.json +4 -0
- iXBRLViewerPlugin/viewer/src/i18n/nl/currencies.json +13 -0
- iXBRLViewerPlugin/viewer/src/i18n/nl/datatypes.json +9 -0
- iXBRLViewerPlugin/viewer/src/i18n/nl/labelroles.json +24 -0
- iXBRLViewerPlugin/viewer/src/i18n/nl/referenceparts.json +10 -0
- iXBRLViewerPlugin/viewer/src/i18n/nl/scale.json +15 -0
- iXBRLViewerPlugin/viewer/src/i18n/nl/tooltips.json +17 -0
- iXBRLViewerPlugin/viewer/src/i18n/nl/translation.json +179 -0
- iXBRLViewerPlugin/viewer/src/i18n/uk/balancetypes.json +4 -0
- iXBRLViewerPlugin/viewer/src/i18n/uk/currencies.json +13 -0
- iXBRLViewerPlugin/viewer/src/i18n/uk/datatypes.json +9 -0
- iXBRLViewerPlugin/viewer/src/i18n/uk/labelroles.json +24 -0
- iXBRLViewerPlugin/viewer/src/i18n/uk/referenceparts.json +10 -0
- iXBRLViewerPlugin/viewer/src/i18n/uk/scale.json +15 -0
- iXBRLViewerPlugin/viewer/src/i18n/uk/tooltips.json +17 -0
- iXBRLViewerPlugin/viewer/src/i18n/uk/translation.json +179 -0
- iXBRLViewerPlugin/viewer/src/icons/calculator.svg +13 -0
- iXBRLViewerPlugin/viewer/src/icons/circle-cross.svg +11 -0
- iXBRLViewerPlugin/viewer/src/icons/circle-tick.svg +11 -0
- iXBRLViewerPlugin/viewer/src/icons/dark-mode.svg +4 -0
- iXBRLViewerPlugin/viewer/src/icons/dimension.svg +1 -5
- iXBRLViewerPlugin/viewer/src/icons/member.svg +2 -5
- iXBRLViewerPlugin/viewer/src/icons/multi-tag.svg +10 -0
- iXBRLViewerPlugin/viewer/src/img/arelle-dark.svg +179 -0
- iXBRLViewerPlugin/viewer/src/img/inline-viewer-dark.svg +59 -0
- iXBRLViewerPlugin/viewer/src/js/accordian.js +5 -4
- iXBRLViewerPlugin/viewer/src/js/aspect.js +29 -10
- iXBRLViewerPlugin/viewer/src/js/aspect.test.js +40 -31
- iXBRLViewerPlugin/viewer/src/js/balance.js +14 -0
- iXBRLViewerPlugin/viewer/src/js/calculation.js +213 -0
- iXBRLViewerPlugin/viewer/src/js/calculation.test.js +306 -0
- iXBRLViewerPlugin/viewer/src/js/calculationInspector.js +187 -0
- iXBRLViewerPlugin/viewer/src/js/chart.js +26 -24
- iXBRLViewerPlugin/viewer/src/js/chart.test.js +10 -9
- iXBRLViewerPlugin/viewer/src/js/concept.js +37 -4
- iXBRLViewerPlugin/viewer/src/js/concept.test.js +30 -6
- iXBRLViewerPlugin/viewer/src/js/datatype.js +20 -0
- iXBRLViewerPlugin/viewer/src/js/datatype.test.js +62 -0
- iXBRLViewerPlugin/viewer/src/js/dialog.js +6 -4
- iXBRLViewerPlugin/viewer/src/js/docOrderIndex.js +7 -7
- iXBRLViewerPlugin/viewer/src/js/fact.js +156 -59
- iXBRLViewerPlugin/viewer/src/js/fact.test.js +160 -29
- iXBRLViewerPlugin/viewer/src/js/factset.js +64 -15
- iXBRLViewerPlugin/viewer/src/js/factset.test.js +102 -31
- iXBRLViewerPlugin/viewer/src/js/footnote.js +8 -2
- iXBRLViewerPlugin/viewer/src/js/index.js +11 -3
- iXBRLViewerPlugin/viewer/src/js/inspector.js +747 -221
- iXBRLViewerPlugin/viewer/src/js/inspector.test.js +143 -25
- iXBRLViewerPlugin/viewer/src/js/interval.js +70 -0
- iXBRLViewerPlugin/viewer/src/js/interval.test.js +153 -0
- iXBRLViewerPlugin/viewer/src/js/ixbrlviewer.js +391 -262
- iXBRLViewerPlugin/viewer/src/js/ixbrlviewer.test.js +134 -20
- iXBRLViewerPlugin/viewer/src/js/ixnode.js +1 -1
- iXBRLViewerPlugin/viewer/src/js/menu.js +25 -7
- iXBRLViewerPlugin/viewer/src/js/number-matcher.js +7 -3
- iXBRLViewerPlugin/viewer/src/js/number-matcher.test.js +4 -0
- iXBRLViewerPlugin/viewer/src/js/outline.js +34 -13
- iXBRLViewerPlugin/viewer/src/js/outline.test.js +97 -91
- iXBRLViewerPlugin/viewer/src/js/period.js +0 -1
- iXBRLViewerPlugin/viewer/src/js/report.js +260 -351
- iXBRLViewerPlugin/viewer/src/js/report.test.js +95 -27
- iXBRLViewerPlugin/viewer/src/js/reportset.js +264 -0
- iXBRLViewerPlugin/viewer/src/js/reportset.test.js +357 -0
- iXBRLViewerPlugin/viewer/src/js/search.js +72 -38
- iXBRLViewerPlugin/viewer/src/js/search.test.js +184 -84
- iXBRLViewerPlugin/viewer/src/js/summary.js +34 -8
- iXBRLViewerPlugin/viewer/src/js/summary.test.js +69 -25
- iXBRLViewerPlugin/viewer/src/js/tableExport.js +9 -9
- iXBRLViewerPlugin/viewer/src/js/taxonomynamer.js +34 -0
- iXBRLViewerPlugin/viewer/src/js/taxonomynamer.test.js +32 -0
- iXBRLViewerPlugin/viewer/src/js/test-utils.js +46 -0
- iXBRLViewerPlugin/viewer/src/js/theme.js +50 -0
- iXBRLViewerPlugin/viewer/src/js/unit.js +90 -32
- iXBRLViewerPlugin/viewer/src/js/unit.test.js +62 -25
- iXBRLViewerPlugin/viewer/src/js/util.js +94 -0
- iXBRLViewerPlugin/viewer/src/js/util.test.js +33 -1
- iXBRLViewerPlugin/viewer/src/js/utr.js +27 -0
- iXBRLViewerPlugin/viewer/src/js/viewer.js +205 -181
- iXBRLViewerPlugin/viewer/src/js/viewerOptions.js +0 -2
- iXBRLViewerPlugin/viewer/src/less/accordian.less +10 -6
- iXBRLViewerPlugin/viewer/src/less/block-list.less +16 -5
- iXBRLViewerPlugin/viewer/src/less/calculation-inspector.less +83 -0
- iXBRLViewerPlugin/viewer/src/less/chart.less +8 -5
- iXBRLViewerPlugin/viewer/src/less/colours-dark-mode.less +40 -0
- iXBRLViewerPlugin/viewer/src/less/colours.less +32 -20
- iXBRLViewerPlugin/viewer/src/less/common.less +3 -3
- iXBRLViewerPlugin/viewer/src/less/components.less +6 -4
- iXBRLViewerPlugin/viewer/src/less/core.less +2 -0
- iXBRLViewerPlugin/viewer/src/less/dialog.less +21 -14
- iXBRLViewerPlugin/viewer/src/less/form-controls.less +33 -11
- iXBRLViewerPlugin/viewer/src/less/inspector.less +1045 -726
- iXBRLViewerPlugin/viewer/src/less/loader.less +2 -2
- iXBRLViewerPlugin/viewer/src/less/menu.less +33 -15
- iXBRLViewerPlugin/viewer/src/less/summary.less +16 -6
- iXBRLViewerPlugin/viewer/src/less/tabs.less +9 -9
- iXBRLViewerPlugin/viewer/src/less/text-block-viewer.less +2 -0
- iXBRLViewerPlugin/viewer/src/less/text-mixins.less +2 -1
- iXBRLViewerPlugin/viewer/src/less/validation-report.less +2 -3
- iXBRLViewerPlugin/viewer/src/less/viewer.less +105 -74
- iXBRLViewerPlugin/viewer/webpack.common.js +19 -9
- iXBRLViewerPlugin/xhtmlserialize.py +59 -45
- {ixbrl_viewer-1.4.1.dist-info → ixbrl_viewer-1.4.86.dist-info}/METADATA +181 -50
- ixbrl_viewer-1.4.86.dist-info/RECORD +217 -0
- {ixbrl_viewer-1.4.1.dist-info → ixbrl_viewer-1.4.86.dist-info}/WHEEL +1 -1
- ixbrl_viewer-1.4.1.dist-info/LICENSE → ixbrl_viewer-1.4.86.dist-info/licenses/LICENSE.md +8 -14
- {ixbrl_viewer-1.4.1.dist-info → ixbrl_viewer-1.4.86.dist-info}/top_level.txt +0 -1
- iXBRLViewerPlugin/viewer/src/js/calculations.js +0 -111
- iXBRLViewerPlugin/viewer/src/js/interact.min.js +0 -6
- ixbrl_viewer-1.4.1.dist-info/RECORD +0 -155
- tests/__init__.py +0 -0
- tests/puppeteer/framework/core_elements.js +0 -117
- tests/puppeteer/framework/page_objects/doc_frame.js +0 -105
- tests/puppeteer/framework/page_objects/fact_details_panel.js +0 -80
- tests/puppeteer/framework/page_objects/search_panel.js +0 -76
- tests/puppeteer/framework/page_objects/toolbar.js +0 -18
- tests/puppeteer/framework/utils.js +0 -3
- tests/puppeteer/framework/viewer_page.js +0 -103
- tests/puppeteer/puppeteer_test_run_via_intellij.jpg +0 -0
- tests/puppeteer/test_filings/filing_documents_smoke_test.zip +0 -0
- tests/puppeteer/test_filings/highlights.zip +0 -0
- tests/puppeteer/tests/fact_properties.test.js +0 -78
- tests/puppeteer/tests/highlight.test.js +0 -186
- tests/puppeteer/tests/search.test.js +0 -86
- tests/puppeteer/tools/generate.sh +0 -15
- tests/unit_tests/__init__.py +0 -0
- tests/unit_tests/iXBRLViewerPlugin/__init__.py +0 -0
- tests/unit_tests/iXBRLViewerPlugin/mock_arelle.py +0 -39
- tests/unit_tests/iXBRLViewerPlugin/test_iXBRLViewer.py +0 -641
- tests/unit_tests/iXBRLViewerPlugin/test_xhtmlserialize.py +0 -310
- {ixbrl_viewer-1.4.1.dist-info → ixbrl_viewer-1.4.86.dist-info}/entry_points.txt +0 -0
- {ixbrl_viewer-1.4.1.dist-info → ixbrl_viewer-1.4.86.dist-info/licenses}/NOTICE +0 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
// See COPYRIGHT.md for copyright information
|
|
2
|
+
|
|
3
|
+
import { ReportSet } from "./reportset.js";
|
|
4
|
+
import { ViewerOptions } from "./viewerOptions.js";
|
|
5
|
+
import { NAMESPACE_ISO4217, viewerUniqueId } from "./util.js";
|
|
6
|
+
import { createNumericFact } from "./test-utils.js";
|
|
7
|
+
|
|
8
|
+
function anchoringRelationShips(include) {
|
|
9
|
+
if (include) {
|
|
10
|
+
return {
|
|
11
|
+
"w-n": {
|
|
12
|
+
"role1": {
|
|
13
|
+
"eg:Concept1": [{"t": "eg:Concept2"}],
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return {}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function multiReportTestData(withAnchoring) {
|
|
22
|
+
return {
|
|
23
|
+
"features": [],
|
|
24
|
+
"languages": {
|
|
25
|
+
"en-us": "English (US)",
|
|
26
|
+
"en": "English",
|
|
27
|
+
"fr": "French",
|
|
28
|
+
},
|
|
29
|
+
"prefixes": {
|
|
30
|
+
"eg": "http://www.example.com",
|
|
31
|
+
"iso4217": NAMESPACE_ISO4217
|
|
32
|
+
},
|
|
33
|
+
"roles": {
|
|
34
|
+
"role1": "https://www.example.com/role1",
|
|
35
|
+
"role2": "https://www.example.com/role2",
|
|
36
|
+
"role3": "https://www.example.com/role3",
|
|
37
|
+
"role4": "https://www.example.com/role4"
|
|
38
|
+
},
|
|
39
|
+
"sourceReports": [
|
|
40
|
+
{
|
|
41
|
+
"targetReports": [
|
|
42
|
+
{
|
|
43
|
+
"roleDefs": {
|
|
44
|
+
"role1": { "en": "Role 1 Label" },
|
|
45
|
+
"role2": { "en": null },
|
|
46
|
+
"role3": {}
|
|
47
|
+
},
|
|
48
|
+
"concepts": {
|
|
49
|
+
"eg:Concept1": {
|
|
50
|
+
"labels": {
|
|
51
|
+
"std": {
|
|
52
|
+
"en": "English label"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"eg:Concept2": {
|
|
57
|
+
"labels": {
|
|
58
|
+
"std": {
|
|
59
|
+
"en": "English label for concept two",
|
|
60
|
+
"en-us": "English (US) label for concept two",
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"eg:Concept3": {
|
|
65
|
+
"labels": {
|
|
66
|
+
"std": {
|
|
67
|
+
"en": "Concept three"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
"facts": {
|
|
74
|
+
...createNumericFact("f1", "eg:Concept1", "iso2417:USD", "2018-01-01/2019-01-01", 1000, -3),
|
|
75
|
+
...createNumericFact("f2", "eg:Concept2", "iso2417:USD", "2018-01-01/2019-01-01", 1000, -3),
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
"softwareCredits": ["Example credit text C", "Example credit text B"],
|
|
80
|
+
},
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"targetReports": [
|
|
85
|
+
{
|
|
86
|
+
"roleDefs": {
|
|
87
|
+
},
|
|
88
|
+
"concepts": {
|
|
89
|
+
"eg:Concept1": {
|
|
90
|
+
"labels": {
|
|
91
|
+
"std": {
|
|
92
|
+
"en": "English label"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"eg:Concept2": {
|
|
97
|
+
"labels": {
|
|
98
|
+
"std": {
|
|
99
|
+
"en": "Report 2 English label for concept two",
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"eg:Concept3": {
|
|
104
|
+
"labels": {
|
|
105
|
+
"std": {
|
|
106
|
+
"en-gb": "Concept three"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
|
|
112
|
+
"facts": {
|
|
113
|
+
...createNumericFact("f1", "eg:Concept1", "iso2417:USD", "2018-01-01/2019-01-01", 2000, -3),
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
"rels": {
|
|
117
|
+
...anchoringRelationShips(withAnchoring)
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
"softwareCredits": ["Example credit text A"],
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Legacy report data format - no "sourceReports" array
|
|
129
|
+
function singleReportTestData() {
|
|
130
|
+
return {
|
|
131
|
+
"features": [],
|
|
132
|
+
"languages": {
|
|
133
|
+
"en-us": "English (US)",
|
|
134
|
+
"en": "English",
|
|
135
|
+
"fr": "French",
|
|
136
|
+
},
|
|
137
|
+
"prefixes": {
|
|
138
|
+
"eg": "http://www.example.com",
|
|
139
|
+
"iso4217": NAMESPACE_ISO4217
|
|
140
|
+
},
|
|
141
|
+
"roles": {
|
|
142
|
+
"role1": "https://www.example.com/role1",
|
|
143
|
+
"role2": "https://www.example.com/role2",
|
|
144
|
+
"role3": "https://www.example.com/role3",
|
|
145
|
+
"role4": "https://www.example.com/role4"
|
|
146
|
+
},
|
|
147
|
+
"roleDefs": {
|
|
148
|
+
"role1": { "en": "Role 1 Label" },
|
|
149
|
+
"role2": { "en": null },
|
|
150
|
+
"role3": {}
|
|
151
|
+
},
|
|
152
|
+
"concepts": {
|
|
153
|
+
"eg:Concept1": {
|
|
154
|
+
"labels": {
|
|
155
|
+
"std": {
|
|
156
|
+
"en": "English label"
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"eg:Concept2": {
|
|
161
|
+
"labels": {
|
|
162
|
+
"std": {
|
|
163
|
+
"en": "English label for concept two",
|
|
164
|
+
"en-us": "English (US) label for concept two",
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
|
|
170
|
+
"facts": {
|
|
171
|
+
...createNumericFact("f1", "eg:Concept1", "iso2417:USD", "2018-01-01/2019-01-01", 1000, -3),
|
|
172
|
+
...createNumericFact("f2", "eg:Concept2", "iso2417:USD", "2018-01-01/2019-01-01", 1000, -3),
|
|
173
|
+
},
|
|
174
|
+
|
|
175
|
+
"softwareCredits": ["Example credit text"],
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
describe("Multi report - basic", () => {
|
|
180
|
+
const testReportSet = new ReportSet(multiReportTestData());
|
|
181
|
+
testReportSet._initialize();
|
|
182
|
+
test("Report count", () => {
|
|
183
|
+
expect(testReportSet.reports).toHaveLength(2);
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
describe("Multi report - Language options", () => {
|
|
188
|
+
const testReportSet = new ReportSet(multiReportTestData());
|
|
189
|
+
testReportSet._initialize();
|
|
190
|
+
test("Available languages", () => {
|
|
191
|
+
const al = testReportSet.availableLanguages();
|
|
192
|
+
expect(al).toHaveLength(3);
|
|
193
|
+
expect(al).toEqual(expect.arrayContaining(["en", "en-us", "en-gb"]));
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
describe("Multi report - Fetching facts", () => {
|
|
198
|
+
const testReportSet = new ReportSet(multiReportTestData());
|
|
199
|
+
testReportSet._initialize();
|
|
200
|
+
|
|
201
|
+
test("Successful f1 (report 1)", () => {
|
|
202
|
+
const f = testReportSet.getItemById(viewerUniqueId(0, "f1"));
|
|
203
|
+
expect(f).not.toBeNull();
|
|
204
|
+
expect(f.decimals()).toEqual(-3);
|
|
205
|
+
});
|
|
206
|
+
test("Successful f2 (report 1)", () => {
|
|
207
|
+
const f = testReportSet.getItemById(viewerUniqueId(0, "f2"));
|
|
208
|
+
expect(f).not.toBeNull();
|
|
209
|
+
expect(f.decimals()).toEqual(-3);
|
|
210
|
+
});
|
|
211
|
+
test("Successful f1 (report 2)", () => {
|
|
212
|
+
const f = testReportSet.getItemById(viewerUniqueId(1, "f1"));
|
|
213
|
+
expect(f).not.toBeNull();
|
|
214
|
+
expect(f.decimals()).toEqual(-3);
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
test("Non-existent fact", () => {
|
|
218
|
+
const f = testReportSet.getItemById(viewerUniqueId(1, "f2"));
|
|
219
|
+
expect(f).toBeUndefined();
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
describe("Multi report - Concept labels", () => {
|
|
224
|
+
const testReportSet = new ReportSet(multiReportTestData());
|
|
225
|
+
testReportSet._initialize();
|
|
226
|
+
const testReport = testReportSet.reports[0];
|
|
227
|
+
const vo = new ViewerOptions();
|
|
228
|
+
testReportSet.viewerOptions = vo;
|
|
229
|
+
test("Label fallback", () => {
|
|
230
|
+
vo.language = 'en-us';
|
|
231
|
+
expect(testReportSet.reports[0].getLabel('eg:Concept2', 'std')).toBe("English (US) label for concept two");
|
|
232
|
+
// No en-US label in report 2, so fall back on en label
|
|
233
|
+
expect(testReportSet.reports[1].getLabel('eg:Concept2', 'std')).toBe("Report 2 English label for concept two");
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
describe("Multi report - ELR labels", () => {
|
|
238
|
+
const testReportSet = new ReportSet(multiReportTestData());
|
|
239
|
+
testReportSet._initialize();
|
|
240
|
+
|
|
241
|
+
test("Present", () => {
|
|
242
|
+
// Role 1 only has a label in report 1
|
|
243
|
+
expect(testReportSet.reports[0].getRoleLabelOrURI("role1")).toBe("Role 1 Label");
|
|
244
|
+
expect(testReportSet.reports[1].getRoleLabelOrURI("role1")).toBe("https://www.example.com/role1");
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
describe("Multi report - anchoring", () => {
|
|
249
|
+
test("Without anchoring", () => {
|
|
250
|
+
const testReportSet = new ReportSet(multiReportTestData(false));
|
|
251
|
+
testReportSet._initialize();
|
|
252
|
+
expect(testReportSet.usesAnchoring()).toBe(false);
|
|
253
|
+
});
|
|
254
|
+
test("With anchoring", () => {
|
|
255
|
+
const testReportSet = new ReportSet(multiReportTestData(true));
|
|
256
|
+
testReportSet._initialize();
|
|
257
|
+
expect(testReportSet.usesAnchoring()).toBe(true);
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
describe("Multi report - doc set files", () => {
|
|
262
|
+
test("Not overlapping", () => {
|
|
263
|
+
const data = multiReportTestData(false);
|
|
264
|
+
data.sourceReports[0].docSetFiles = ["a.html", "b.html"];
|
|
265
|
+
data.sourceReports[1].docSetFiles = ["c.html", "d.html"];
|
|
266
|
+
const testReportSet = new ReportSet(data);
|
|
267
|
+
testReportSet._initialize();
|
|
268
|
+
expect(testReportSet.reportFiles()).toStrictEqual([{"index": 0, "file": "a.html"}, {"index": 0, "file": "b.html"}, {"index": 1, "file": "c.html"}, {"index": 1, "file": "d.html"}]);
|
|
269
|
+
});
|
|
270
|
+
test("Repeated document set", () => {
|
|
271
|
+
const data = multiReportTestData(false);
|
|
272
|
+
data.sourceReports[0].docSetFiles = ["a.html", "b.html"];
|
|
273
|
+
data.sourceReports[1].docSetFiles = ["a.html", "b.html"];
|
|
274
|
+
const testReportSet = new ReportSet(data);
|
|
275
|
+
testReportSet._initialize();
|
|
276
|
+
expect(testReportSet.reportFiles()).toStrictEqual([{"index": 0, "file": "a.html"}, {"index": 0, "file": "b.html"}, {"index": 1, "file": "a.html"}, {"index": 1, "file": "b.html"}]);
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
describe("Single report - basic", () => {
|
|
281
|
+
const testReportSet = new ReportSet(singleReportTestData());
|
|
282
|
+
testReportSet._initialize();
|
|
283
|
+
test("Report count", () => {
|
|
284
|
+
expect(testReportSet.reports).toHaveLength(1);
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
describe("Single report - Language options", () => {
|
|
289
|
+
const testReportSet = new ReportSet(singleReportTestData());
|
|
290
|
+
testReportSet._initialize();
|
|
291
|
+
test("Available languages", () => {
|
|
292
|
+
const al = testReportSet.availableLanguages();
|
|
293
|
+
expect(al).toHaveLength(2);
|
|
294
|
+
expect(al).toEqual(expect.arrayContaining(["en", "en-us"]));
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
describe("Single report - Fetching facts", () => {
|
|
299
|
+
const testReportSet = new ReportSet(singleReportTestData());
|
|
300
|
+
testReportSet._initialize();
|
|
301
|
+
|
|
302
|
+
test("Successful f1", () => {
|
|
303
|
+
const f = testReportSet.getItemById(viewerUniqueId(0, "f1"));
|
|
304
|
+
expect(f).not.toBeNull();
|
|
305
|
+
expect(f.decimals()).toEqual(-3);
|
|
306
|
+
});
|
|
307
|
+
test("Successful f2", () => {
|
|
308
|
+
const f = testReportSet.getItemById(viewerUniqueId(0, "f2"));
|
|
309
|
+
expect(f).not.toBeNull();
|
|
310
|
+
expect(f.decimals()).toEqual(-3);
|
|
311
|
+
});
|
|
312
|
+
// There is no second report
|
|
313
|
+
test("Successful f1 (report 2)", () => {
|
|
314
|
+
const f = testReportSet.getItemById(viewerUniqueId(1, "f1"));
|
|
315
|
+
expect(f).toBeUndefined();
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
describe("Single report - Concept labels", () => {
|
|
320
|
+
const testReportSet = new ReportSet(singleReportTestData());
|
|
321
|
+
testReportSet._initialize();
|
|
322
|
+
const testReport = testReportSet.reports[0];
|
|
323
|
+
const vo = new ViewerOptions();
|
|
324
|
+
testReportSet.viewerOptions = vo;
|
|
325
|
+
test("Label fallback", () => {
|
|
326
|
+
vo.language = 'en-us';
|
|
327
|
+
expect(testReportSet.reports[0].getLabel('eg:Concept2', 'std')).toBe("English (US) label for concept two");
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
describe("ELR labels", () => {
|
|
332
|
+
const testReportSet = new ReportSet(singleReportTestData());
|
|
333
|
+
testReportSet._initialize();
|
|
334
|
+
|
|
335
|
+
test("Present", () => {
|
|
336
|
+
expect(testReportSet.reports[0].getRoleLabelOrURI("role1")).toBe("Role 1 Label");
|
|
337
|
+
});
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
describe("Fetching software credit", () => {
|
|
341
|
+
|
|
342
|
+
test("Single", () => {
|
|
343
|
+
const testReportSet = new ReportSet(singleReportTestData());
|
|
344
|
+
testReportSet._initialize();
|
|
345
|
+
|
|
346
|
+
const softwareCredits = testReportSet.getSoftwareCredits();
|
|
347
|
+
expect(softwareCredits).toEqual(["Example credit text"]);
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
test("Multiple", () => {
|
|
351
|
+
const testReportSet = new ReportSet(multiReportTestData(true));
|
|
352
|
+
testReportSet._initialize();
|
|
353
|
+
|
|
354
|
+
const softwareCredits = testReportSet.getSoftwareCredits();
|
|
355
|
+
expect(softwareCredits).toEqual(["Example credit text A", "Example credit text B", "Example credit text C"]);
|
|
356
|
+
});
|
|
357
|
+
});
|
|
@@ -1,56 +1,61 @@
|
|
|
1
1
|
// See COPYRIGHT.md for copyright information
|
|
2
2
|
|
|
3
3
|
import lunr from 'lunr'
|
|
4
|
-
import $ from 'jquery'
|
|
5
|
-
import Decimal from "decimal.js";
|
|
6
4
|
|
|
7
5
|
export class ReportSearch {
|
|
8
|
-
constructor(
|
|
9
|
-
this.
|
|
6
|
+
constructor(reportSet) {
|
|
7
|
+
this._reportSet = reportSet;
|
|
10
8
|
this.ready = false;
|
|
11
9
|
}
|
|
12
10
|
|
|
13
11
|
* buildSearchIndex(doneCallback) {
|
|
14
12
|
var docs = [];
|
|
15
13
|
var dims = {};
|
|
16
|
-
var facts = this.
|
|
14
|
+
var facts = this._reportSet.facts();
|
|
17
15
|
this.periods = {};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
var
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
16
|
+
// Add hidden facts to index later, so that they appear later in the
|
|
17
|
+
// default search
|
|
18
|
+
for (const hidden of [false, true]) {
|
|
19
|
+
for (var i = 0; i < facts.length; i++) {
|
|
20
|
+
var f = facts[i];
|
|
21
|
+
if (f.isHidden() !== hidden) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
var doc = { "id": f.vuid };
|
|
25
|
+
var l = f.getLabel("std");
|
|
26
|
+
doc.concept = f.conceptQName().localname;
|
|
27
|
+
doc.doc = f.getLabel("doc");
|
|
28
|
+
doc.date = f.periodTo();
|
|
29
|
+
doc.startDate = f.periodFrom();
|
|
30
|
+
var dims = f.dimensions();
|
|
31
|
+
for (var d in dims) {
|
|
32
|
+
if (f.report.getConcept(d).isTypedDimension()) {
|
|
33
|
+
if (dims[d] !== null) {
|
|
34
|
+
l += " " + dims[d];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
l += " " + f.report.getLabel(dims[d], "std");
|
|
31
39
|
}
|
|
32
40
|
}
|
|
33
|
-
|
|
34
|
-
|
|
41
|
+
doc.label = l;
|
|
42
|
+
doc.ref = f.concept().referenceValuesAsString();
|
|
43
|
+
const wider = f.widerConcepts();
|
|
44
|
+
if (wider.length > 0) {
|
|
45
|
+
doc.widerConcept = f.report.qname(wider[0]).localname;
|
|
46
|
+
doc.widerLabel = f.report.getLabel(wider[0], "std");
|
|
47
|
+
doc.widerDoc = f.report.getLabel(wider[0], "doc");
|
|
35
48
|
}
|
|
36
|
-
|
|
37
|
-
doc.label = l;
|
|
38
|
-
doc.ref = f.concept().referenceValuesAsString();
|
|
39
|
-
const wider = f.widerConcepts();
|
|
40
|
-
if (wider.length > 0) {
|
|
41
|
-
doc.widerConcept = this._report.qname(wider[0]).localname;
|
|
42
|
-
doc.widerLabel = this._report.getLabel(wider[0], "std");
|
|
43
|
-
doc.widerDoc = this._report.getLabel(wider[0], "doc");
|
|
44
|
-
}
|
|
45
|
-
docs.push(doc);
|
|
49
|
+
docs.push(doc);
|
|
46
50
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
+
var p = f.period();
|
|
52
|
+
if (p) {
|
|
53
|
+
this.periods[p.key()] = p.toString();
|
|
54
|
+
}
|
|
51
55
|
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
if (i % 100 === 0) {
|
|
57
|
+
yield;
|
|
58
|
+
}
|
|
54
59
|
}
|
|
55
60
|
}
|
|
56
61
|
const builder = new lunr.Builder();
|
|
@@ -88,7 +93,11 @@ export class ReportSearch {
|
|
|
88
93
|
}
|
|
89
94
|
|
|
90
95
|
visibilityFilter(s, item) {
|
|
91
|
-
return
|
|
96
|
+
return (
|
|
97
|
+
s.visibilityFilter === '*' ||
|
|
98
|
+
s.visibilityFilter === 'visible' && !item.isHidden() ||
|
|
99
|
+
s.visibilityFilter === 'hidden' && item.isHidden()
|
|
100
|
+
)
|
|
92
101
|
}
|
|
93
102
|
|
|
94
103
|
periodFilter(s, item) {
|
|
@@ -140,6 +149,14 @@ export class ReportSearch {
|
|
|
140
149
|
);
|
|
141
150
|
}
|
|
142
151
|
|
|
152
|
+
dataTypesFilter(s, item) {
|
|
153
|
+
return (
|
|
154
|
+
s.dataTypesFilter == null ||
|
|
155
|
+
s.dataTypesFilter.length === 0 ||
|
|
156
|
+
s.dataTypesFilter.some(p => item.concept().dataType()?.name === p)
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
|
|
143
160
|
unitsFilter(s, item) {
|
|
144
161
|
return (
|
|
145
162
|
s.unitsFilter.length === 0 ||
|
|
@@ -154,6 +171,20 @@ export class ReportSearch {
|
|
|
154
171
|
);
|
|
155
172
|
}
|
|
156
173
|
|
|
174
|
+
targetDocumentFilter(s, item) {
|
|
175
|
+
return (
|
|
176
|
+
s.targetDocumentFilter.length === 0 ||
|
|
177
|
+
s.targetDocumentFilter.some(t => (item.targetDocument() ?? ':default') === t)
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
mandatoryFactFilter(s, item) {
|
|
182
|
+
if(!s.showMandatoryFacts) {
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
return item.isMandatory();
|
|
186
|
+
}
|
|
187
|
+
|
|
157
188
|
search(s) {
|
|
158
189
|
if (!this.ready) {
|
|
159
190
|
return;
|
|
@@ -170,12 +201,15 @@ export class ReportSearch {
|
|
|
170
201
|
this.factValueFilter,
|
|
171
202
|
this.calculationsFilter,
|
|
172
203
|
this.namespacesFilter,
|
|
204
|
+
this.dataTypesFilter,
|
|
173
205
|
this.unitsFilter,
|
|
174
206
|
this.scalesFilter,
|
|
207
|
+
this.targetDocumentFilter,
|
|
208
|
+
this.mandatoryFactFilter
|
|
175
209
|
];
|
|
176
210
|
|
|
177
211
|
rr.forEach((r,_) => {
|
|
178
|
-
const item = searchIndex.
|
|
212
|
+
const item = searchIndex._reportSet.getItemById(r.ref);
|
|
179
213
|
if (filters.every(f => f(s, item))) {
|
|
180
214
|
results.push({
|
|
181
215
|
"fact": item,
|