ixbrl-viewer 1.4.26__py3-none-any.whl → 1.4.28__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.

Potentially problematic release.


This version of ixbrl-viewer might be problematic. Click here for more details.

@@ -18,7 +18,7 @@ https://github.com/nodeca/pako/blob/main/LICENSE
18
18
  */
19
19
 
20
20
  /*!
21
- * Chart.js v4.4.2
21
+ * Chart.js v4.4.3
22
22
  * https://www.chartjs.org
23
23
  * (c) 2024 Chart.js Contributors
24
24
  * Released under the MIT License
@@ -346,6 +346,12 @@ See COPYRIGHT.md for copyright information
346
346
  </div>
347
347
  </div>
348
348
  </div>
349
+ <div class="collapsible-section report-creation">
350
+ <h3 class="collapsible-header" data-i18n="inspector.summary.reportCreation">Report Creation</h3>
351
+ <div class="collapsible-body">
352
+ <ul></ul>
353
+ </div>
354
+ </div>
349
355
  </div>
350
356
  </div>
351
357
 
@@ -98,7 +98,8 @@
98
98
  "other": "Other Linkbases",
99
99
  "presentation": "Presentation Linkbases",
100
100
  "references": "Reference Linkbases",
101
- "schemas": "Schemas"
101
+ "schemas": "Schemas",
102
+ "reportCreation": "Report Creation"
102
103
  },
103
104
  "tag": {
104
105
  "colDimensions": "Dimensions",
@@ -98,7 +98,8 @@
98
98
  "other": "",
99
99
  "presentation": "",
100
100
  "references": "",
101
- "schemas": ""
101
+ "schemas": "",
102
+ "reportCreation": ""
102
103
  },
103
104
  "tag": {
104
105
  "colDimensions": "",
@@ -516,6 +516,7 @@ export class Inspector {
516
516
  this._populateFactSummary(summaryDom);
517
517
  this._populateTagSummary(summaryDom);
518
518
  this._populateFileSummary(summaryDom);
519
+ this._populateReportCreation(summaryDom);
519
520
  }
520
521
 
521
522
  _populateFactSummary(summaryDom) {
@@ -616,6 +617,21 @@ export class Inspector {
616
617
  }
617
618
  };
618
619
 
620
+ _populateReportCreation(summaryDom) {
621
+ const softwareCredits = this.summary.getSoftwareCredits();
622
+
623
+ const reportCreationContent = summaryDom.find(".report-creation");
624
+
625
+ if (softwareCredits.length > 0) {
626
+ const ul = reportCreationContent.find('ul');
627
+ for (const softwareCredit of softwareCredits) {
628
+ ul.append($("<li></li>").text(softwareCredit));
629
+ }
630
+ } else {
631
+ reportCreationContent.hide();
632
+ }
633
+ };
634
+
619
635
  createOutline() {
620
636
  if (this.outline.hasOutline()) {
621
637
  $('.outline .no-outline-overlay').hide();
@@ -266,4 +266,12 @@ export class XBRLReport {
266
266
  }
267
267
  return this._calculationSummations.has(c);
268
268
  }
269
+
270
+
271
+ /**
272
+ * @return {Array[String]} Software credit text labels provided with this report for display purposes.
273
+ */
274
+ softwareCredits() {
275
+ return this._reportData.softwareCredits ?? [];
276
+ }
269
277
  }
@@ -62,7 +62,9 @@ var testReportData = {
62
62
  "p": "2018-01-01/2019-01-01",
63
63
  }
64
64
  }
65
- }
65
+ },
66
+
67
+ "softwareCredits": ["Example credit text A", "Example credit text B"],
66
68
  };
67
69
 
68
70
 
@@ -144,3 +146,26 @@ describe("ELR labels", () => {
144
146
  });
145
147
 
146
148
  });
149
+
150
+ describe("Fetching software credit", () => {
151
+
152
+ test("Successful", () => {
153
+ const testReportSet = new ReportSet(testReportData);
154
+ testReportSet._initialize();
155
+ const report = testReportSet.reports[0];
156
+
157
+ const softwareCredits = report.softwareCredits();
158
+ expect(softwareCredits).toEqual(["Example credit text A", "Example credit text B"]);
159
+ });
160
+
161
+ test("Unset", () => {
162
+ let alternateData = JSON.parse(JSON.stringify(testReportData));
163
+ delete alternateData.softwareCredits;
164
+ const testReportSet = new ReportSet(alternateData);
165
+ testReportSet._initialize();
166
+ const report = testReportSet.reports[0];
167
+
168
+ const softwareCredits = report.softwareCredits();
169
+ expect(softwareCredits).toEqual([]);
170
+ });
171
+ });
@@ -117,6 +117,14 @@ export class ReportSet {
117
117
  return this._usedPrefixes;
118
118
  }
119
119
 
120
+ /**
121
+ * @return {Array[String]} Sorted list of unique software credit text values
122
+ */
123
+ getSoftwareCredits() {
124
+ let softwareCredits = new Set(this.reports.flatMap(r => r.softwareCredits()));
125
+ return Array.from(softwareCredits).sort();
126
+ }
127
+
120
128
  getTargetDocuments() {
121
129
  if (this._targetDocuments === undefined) {
122
130
  this._targetDocuments = new Set(Object.values(this._items)
@@ -73,7 +73,10 @@ function multiReportTestData(withAnchoring) {
73
73
  "facts": {
74
74
  ...createNumericFact("f1", "eg:Concept1", "iso2417:USD", "2018-01-01/2019-01-01", 1000, -3),
75
75
  ...createNumericFact("f2", "eg:Concept2", "iso2417:USD", "2018-01-01/2019-01-01", 1000, -3),
76
- }
76
+ },
77
+
78
+
79
+ "softwareCredits": ["Example credit text C", "Example credit text B"],
77
80
  },
78
81
  ]
79
82
  },
@@ -112,7 +115,9 @@ function multiReportTestData(withAnchoring) {
112
115
 
113
116
  "rels": {
114
117
  ...anchoringRelationShips(withAnchoring)
115
- }
118
+ },
119
+
120
+ "softwareCredits": ["Example credit text A"],
116
121
  }
117
122
  ]
118
123
  }
@@ -165,7 +170,9 @@ function singleReportTestData() {
165
170
  "facts": {
166
171
  ...createNumericFact("f1", "eg:Concept1", "iso2417:USD", "2018-01-01/2019-01-01", 1000, -3),
167
172
  ...createNumericFact("f2", "eg:Concept2", "iso2417:USD", "2018-01-01/2019-01-01", 1000, -3),
168
- }
173
+ },
174
+
175
+ "softwareCredits": ["Example credit text"],
169
176
  };
170
177
  }
171
178
 
@@ -329,3 +336,22 @@ describe("ELR labels", () => {
329
336
  expect(testReportSet.reports[0].getRoleLabel("role1")).toBe("Role 1 Label");
330
337
  });
331
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
+ });
@@ -138,4 +138,12 @@ export class DocumentSummary {
138
138
  }
139
139
  return this._localFileSummary.getDocuments()
140
140
  }
141
+
142
+
143
+ /**
144
+ * @return {Array[String]} Report set's list of software credit text values.
145
+ */
146
+ getSoftwareCredits() {
147
+ return this._reportSet.getSoftwareCredits();
148
+ }
141
149
  }
@@ -17,16 +17,17 @@ function testFact(conceptName, dimensions) {
17
17
  }
18
18
  }
19
19
 
20
- function testReportSet(concepts, facts, documents) {
20
+ function testReportSet(concepts, facts, documents, softwareCredits) {
21
21
  const report = {
22
22
  getConcept: conceptName => concepts[conceptName],
23
- localDocuments: () => documents
23
+ localDocuments: () => documents,
24
24
  }
25
25
  for (const f of facts) {
26
26
  f.report = report;
27
27
  }
28
28
  return {
29
29
  facts: () => facts,
30
+ getSoftwareCredits: () => softwareCredits,
30
31
  reports: [ report ]
31
32
  }
32
33
  }
@@ -34,7 +35,7 @@ function testReportSet(concepts, facts, documents) {
34
35
  describe("Facts summary", () => {
35
36
 
36
37
  test("no facts", () => {
37
- const reportSet = testReportSet({}, [], {});
38
+ const reportSet = testReportSet({}, [], {}, []);
38
39
  const summary = new DocumentSummary(reportSet);
39
40
 
40
41
  expect(summary.totalFacts()).toBe(0);
@@ -43,9 +44,9 @@ describe("Facts summary", () => {
43
44
  test("multiple facts", () => {
44
45
  const facts = [];
45
46
  for (let i = 0; i < 10; i++) {
46
- facts.push(testFact("eg:Concept1", {}));
47
+ facts.push(testFact("eg:Concept1", {}, []));
47
48
  }
48
- const reportSet = testReportSet({}, facts, {});
49
+ const reportSet = testReportSet({}, facts, {}, []);
49
50
  const summary = new DocumentSummary(reportSet);
50
51
 
51
52
  expect(summary.totalFacts()).toBe(10);
@@ -55,7 +56,7 @@ describe("Facts summary", () => {
55
56
  const conceptName = "eg:Concept1";
56
57
  const fact1 = testFact(conceptName, {});
57
58
  const fact2 = testFact(conceptName, {});
58
- const reportSet = testReportSet({}, [fact1, fact2], {});
59
+ const reportSet = testReportSet({}, [fact1, fact2], {}, []);
59
60
  const summary = new DocumentSummary(reportSet);
60
61
 
61
62
  expect(summary.totalFacts()).toBe(2);
@@ -66,7 +67,7 @@ describe("Facts summary", () => {
66
67
  describe("Tags summary", () => {
67
68
 
68
69
  test("no tags", () => {
69
- const reportSet = testReportSet({}, [], {})
70
+ const reportSet = testReportSet({}, [], {}, [])
70
71
  const summary = new DocumentSummary(reportSet);
71
72
 
72
73
  expect(summary.tagCounts()).toEqual(new Map());
@@ -76,7 +77,7 @@ describe("Tags summary", () => {
76
77
  const fact1 = testFact("eg:Concept1", {});
77
78
  const fact2 = testFact("eg:Concept2", {});
78
79
  const fact3 = testFact("xz:Concept1", {});
79
- const reportSet = testReportSet({}, [fact1, fact2, fact3], {})
80
+ const reportSet = testReportSet({}, [fact1, fact2, fact3], {}, [])
80
81
  const summary = new DocumentSummary(reportSet);
81
82
 
82
83
  expect(Object.fromEntries(summary.tagCounts())).toEqual({
@@ -105,7 +106,7 @@ describe("Tags summary", () => {
105
106
  const concepts = {
106
107
  [dimension]: testConcept(),
107
108
  }
108
- const reportSet = testReportSet(concepts, [fact], {})
109
+ const reportSet = testReportSet(concepts, [fact], {}, [])
109
110
  const summary = new DocumentSummary(reportSet);
110
111
 
111
112
  expect(Object.fromEntries(summary.tagCounts())).toEqual({
@@ -135,7 +136,7 @@ describe("Tags summary", () => {
135
136
  [dimension2]: testConcept(),
136
137
  [dimension3]: testConcept(),
137
138
  }
138
- const reportSet = testReportSet(concepts, [fact], {})
139
+ const reportSet = testReportSet(concepts, [fact], {}, [])
139
140
  const summary = new DocumentSummary(reportSet);
140
141
 
141
142
  expect(Object.fromEntries(summary.tagCounts())).toEqual({
@@ -176,7 +177,7 @@ describe("Tags summary", () => {
176
177
  const concepts = {
177
178
  [dimension]: testConcept(typedDomain),
178
179
  }
179
- const reportSet = testReportSet(concepts, [fact], {})
180
+ const reportSet = testReportSet(concepts, [fact], {}, [])
180
181
  const summary = new DocumentSummary(reportSet);
181
182
 
182
183
  expect(Object.fromEntries(summary.tagCounts())).toEqual({
@@ -200,7 +201,7 @@ describe("Files summary", () => {
200
201
 
201
202
  test("no files", () => {
202
203
  const documentData = {}
203
- const reportSet = testReportSet({}, [], documentData);
204
+ const reportSet = testReportSet({}, [], documentData, []);
204
205
  const summary = new DocumentSummary(reportSet);
205
206
 
206
207
  expect(summary.getLocalDocuments()).toEqual({
@@ -228,7 +229,7 @@ describe("Files summary", () => {
228
229
  'labelLinkbase.xml': ['labelLinkbase'],
229
230
  'unrecognizedLinkbase.xml': ['unrecognizedLinkbase'],
230
231
  }
231
- const reportSet = testReportSet({}, [], documentData);
232
+ const reportSet = testReportSet({}, [], documentData, []);
232
233
  const summary = new DocumentSummary(reportSet);
233
234
 
234
235
  expect(summary.getLocalDocuments()).toEqual({
@@ -243,3 +244,39 @@ describe("Files summary", () => {
243
244
  });
244
245
  });
245
246
  });
247
+
248
+ describe("Software credit", () => {
249
+
250
+ test("no credits", () => {
251
+ const softwareCredits = []
252
+ const documentData = {}
253
+ const reportSet = testReportSet({}, [], documentData, softwareCredits);
254
+ const summary = new DocumentSummary(reportSet);
255
+
256
+ expect(summary.getSoftwareCredits()).toEqual([]);
257
+ });
258
+
259
+ test("one credit", () => {
260
+ const softwareCredits = ["Example credit text"]
261
+ const documentData = {}
262
+ const reportSet = testReportSet({}, [], documentData, softwareCredits);
263
+ const summary = new DocumentSummary(reportSet);
264
+
265
+ expect(summary.getSoftwareCredits()).toEqual(["Example credit text"]);
266
+ });
267
+
268
+ test("multiple credits", () => {
269
+ const softwareCredits = [
270
+ "Example credit text A",
271
+ "Example credit text B",
272
+ ]
273
+ const documentData = {}
274
+ const reportSet = testReportSet({}, [], documentData, softwareCredits);
275
+ const summary = new DocumentSummary(reportSet);
276
+
277
+ expect(summary.getSoftwareCredits()).toEqual([
278
+ "Example credit text A",
279
+ "Example credit text B",
280
+ ]);
281
+ });
282
+ });
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ixbrl-viewer
3
- Version: 1.4.26
3
+ Version: 1.4.28
4
4
  Summary: The Arelle iXBRL Viewer allows iXBRL reports to be viewed interactively in a web browser.
5
5
  Author-email: "arelle.org" <support@arelle.org>
6
6
  License: Apache-2.0
@@ -37,8 +37,8 @@ Provides-Extra: dev
37
37
  Requires-Dist: flake8 ==7.0.0 ; extra == 'dev'
38
38
  Requires-Dist: lxml-stubs ==0.5.1 ; extra == 'dev'
39
39
  Requires-Dist: mypy ==1.10.0 ; extra == 'dev'
40
- Requires-Dist: pytest ==8.1.1 ; extra == 'dev'
41
- Requires-Dist: typing-extensions ==4.11.0 ; extra == 'dev'
40
+ Requires-Dist: pytest ==8.2.1 ; extra == 'dev'
41
+ Requires-Dist: typing-extensions ==4.12.0 ; extra == 'dev'
42
42
 
43
43
  # Arelle iXBRL Viewer
44
44
 
@@ -1,8 +1,8 @@
1
1
  iXBRLViewerPlugin/__init__.py,sha256=11uzkyzBvzgrFDf5EKwBZZ70iZER9LBCY7-6Eu3kXFM,15808
2
- iXBRLViewerPlugin/_version.py,sha256=BKJcZ9eP7b7GmuQHt-vFW3IpTzyehqpTvfH4TY76lMk,413
2
+ iXBRLViewerPlugin/_version.py,sha256=xRKV1NGkyiyyNzFGzdbk5IVPLceRrq8H5_kp9SYw6Qc,413
3
3
  iXBRLViewerPlugin/constants.py,sha256=gXwZxPp5PJETC-sOvLxOToSe5pIjmQv2WMhZMNoPpKw,1062
4
4
  iXBRLViewerPlugin/featureConfig.py,sha256=tOViPYmN32i2uIf_T9HGgbkkv41VoTpTjqhn4w9rTgw,194
5
- iXBRLViewerPlugin/iXBRLViewer.py,sha256=KgZUTZKEwThPlfPecrsECv7zt11RHa-05P2_Qu6e604,27363
5
+ iXBRLViewerPlugin/iXBRLViewer.py,sha256=7imzjiyaTMxqFuI-TcGu3nzo7JQvIvHIsJ9XMZ-BIW0,27825
6
6
  iXBRLViewerPlugin/stubviewer.html,sha256=hc5BeIR7y3ojGRux_Hy5oqEAHdlQ34kk3lL5eH-B4AU,158
7
7
  iXBRLViewerPlugin/ui.py,sha256=OismWQzm_T16j-6O8cfGZ7qLMKIMIA36rRlb9mbOOh0,10512
8
8
  iXBRLViewerPlugin/xhtmlserialize.py,sha256=2fV88KD5XOXqDzYaQgovbvuUQINF0n6E-6Nw174zniY,6771
@@ -11,17 +11,17 @@ iXBRLViewerPlugin/viewer/version.js,sha256=7b5si8UmaS7QqALQIP-wJ0I8onKFox8VyaAiU
11
11
  iXBRLViewerPlugin/viewer/webpack.common.js,sha256=hpXufjShXAESQh8Ds7ViJ_tbr8XSb7EdqQLRvyu_mQg,1691
12
12
  iXBRLViewerPlugin/viewer/webpack.dev.js,sha256=R9AwY_TBrg9otvXpDxT1UsGg5eMqi4aXW7C7EIsHzZk,551
13
13
  iXBRLViewerPlugin/viewer/webpack.prod.js,sha256=vfLowWC1EOty0zbq9P-usGaJ3w-JoERpJrYaE9MfoSE,499
14
- iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js,sha256=QEEJ3h9h0zHN64RNc_x0x2ks96EEK506LB1FHHZMe1c,799469
15
- iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js.LICENSE.txt,sha256=Za0Im8y5BhF_6Y9A2Ojp0TfKk-BULnk6TuY456-TAok,1832
14
+ iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js,sha256=1azWxmA_bsZo8_9mDeSf3EyEMqLjILYQKk6pgWRnx_k,800179
15
+ iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js.LICENSE.txt,sha256=2bD4VShd311WquXvtJNpD0aHN3ru67ZeolE1OxkV5Ys,1832
16
16
  iXBRLViewerPlugin/viewer/src/html/fact-details.html,sha256=P9BJw1OK4nIYfoT4KPwW1WP94ZeD7v1nisvSKMeSnU8,1495
17
17
  iXBRLViewerPlugin/viewer/src/html/footnote-details.html,sha256=9I7y0KM7xsPzbiZheuHkm1k4nHNXD8S9qxvD_Y0I1Us,278
18
- iXBRLViewerPlugin/viewer/src/html/inspector.html,sha256=4cJDAOfZnj2iAlPpJQjevvSzCtbbCpmqq0gypLwADk8,19790
18
+ iXBRLViewerPlugin/viewer/src/html/inspector.html,sha256=Uze8Y_uSeeYqz_eMNkABc2VP2yRvlfIdg8Zo-kOfTTo,20062
19
19
  iXBRLViewerPlugin/viewer/src/i18n/en/currencies.json,sha256=p2vXnQcaRWX3tDY8E52AaIeKhbmcNNhPfTBHlL5AL_U,315
20
20
  iXBRLViewerPlugin/viewer/src/i18n/en/referenceparts.json,sha256=rp0p7aWt0U2Ny3ai_fadZhdV-LWx-9-tgKWQmggoewM,207
21
- iXBRLViewerPlugin/viewer/src/i18n/en/translation.json,sha256=WyIfvZJNHEKFGlacxoZsCd3smxM54Ll52y_kvlNMqZU,4870
21
+ iXBRLViewerPlugin/viewer/src/i18n/en/translation.json,sha256=g7PNlozn0xVXN8bg_JGAaXjy6lyae8nzSPGpBR79B0A,4915
22
22
  iXBRLViewerPlugin/viewer/src/i18n/es/currencies.json,sha256=YzzYkYpUAgYFBDROUosaxoVbft5zPXKJ4zI9Zb2nsqQ,171
23
23
  iXBRLViewerPlugin/viewer/src/i18n/es/referenceparts.json,sha256=X6l9IS1w9LSItMaS14q9gqDIu1jaeHthuhOogaBLRTI,237
24
- iXBRLViewerPlugin/viewer/src/i18n/es/translation.json,sha256=6EcKTjNDxQyyrh1uDF7h4O4It1rvUZRyvw3bWonJPSQ,4147
24
+ iXBRLViewerPlugin/viewer/src/i18n/es/translation.json,sha256=PtjbAS002o6kb2eKlyV5K3UeTs0LPgIfDb0WkldI0_A,4177
25
25
  iXBRLViewerPlugin/viewer/src/icons/arrow-down.svg,sha256=FjlACizI1NEMLQMyeVSfwsnP1t63HnGBQhmiFLgqDCI,403
26
26
  iXBRLViewerPlugin/viewer/src/icons/arrow-up.svg,sha256=-1ZLPAkpGUH4btofeJ_YLyw04dzoWNi_QAm6LK6yYh8,403
27
27
  iXBRLViewerPlugin/viewer/src/icons/calculator.svg,sha256=W86RLdi2jge2dvL1LciTYXBTymaZZEE_IoIzspVjcVI,1543
@@ -77,7 +77,7 @@ iXBRLViewerPlugin/viewer/src/js/footnote.js,sha256=jZreicIBPAtBjbpoRbLnkSs8fHdCY
77
77
  iXBRLViewerPlugin/viewer/src/js/identifiers.js,sha256=gcGitF1CfiyiUvzWDG6INnFDIBi5jXdBgiqCB8Ip0YE,2260
78
78
  iXBRLViewerPlugin/viewer/src/js/identifiers.test.js,sha256=eu2TkHVpuRItIyNdNAuoITnpGFwwAicqMynf0dFreRk,2112
79
79
  iXBRLViewerPlugin/viewer/src/js/index.js,sha256=SdxunWx8kNw0-vwwnr58-ac1-eQIE1__Ll7ekNNK79E,232
80
- iXBRLViewerPlugin/viewer/src/js/inspector.js,sha256=NEXNrU-Ua2U21g6hKT4lPsZWTV5IitIAnuDBGQZPGl4,49873
80
+ iXBRLViewerPlugin/viewer/src/js/inspector.js,sha256=c7s1kMxGbcRIl2LQEzYwV478efbWrMZBFp7c_As7g-A,50423
81
81
  iXBRLViewerPlugin/viewer/src/js/inspector.test.js,sha256=AQjbwTllw_dZfovCfjfHWtt0kdjzDnoXw-mQ0IrHKWk,10086
82
82
  iXBRLViewerPlugin/viewer/src/js/interval.js,sha256=ZEIbH4uwTIvF1jmulEWnJI5ZD1AamgKtkyplOwlcrv0,1889
83
83
  iXBRLViewerPlugin/viewer/src/js/interval.test.js,sha256=pLbukwlcS38ycDJaNYV_9pAca7wiprunXHqD4TkHEi8,4577
@@ -95,14 +95,14 @@ iXBRLViewerPlugin/viewer/src/js/outline.test.js,sha256=PaUzfy675G04YcjY8CcFDLCWi
95
95
  iXBRLViewerPlugin/viewer/src/js/period.js,sha256=qTSLapuLwK_Rky0cNZ16ms0o04xSVH_vUBAGdJ8Cx4s,2238
96
96
  iXBRLViewerPlugin/viewer/src/js/period.test.js,sha256=nMamproI2VukUnO0wm3SKQA_rnjwNkwkzyn4uhke0kc,5417
97
97
  iXBRLViewerPlugin/viewer/src/js/qname.js,sha256=6MqMBbgziuPPNHKS3UUGyYIgHWygaAIf0mcpK95hwT8,282
98
- iXBRLViewerPlugin/viewer/src/js/report.js,sha256=L_u8NxJLA38lp_neRljQvID5_jdkVkZmS4VxiaY2ILg,8624
99
- iXBRLViewerPlugin/viewer/src/js/report.test.js,sha256=AyN362l1ZQBMNjkQRnLaQIy1m9SWT0HAMIWARZSEV44,4818
100
- iXBRLViewerPlugin/viewer/src/js/reportset.js,sha256=TK2VDJOyB0xLpIF__VwASIXnJtbNXsRWGZd8RD61_aE,8051
101
- iXBRLViewerPlugin/viewer/src/js/reportset.test.js,sha256=r9UpGOVpMCnhyi-SiYU8iDPhpHydt6iHFyISEImP73M,11996
98
+ iXBRLViewerPlugin/viewer/src/js/report.js,sha256=C-lsR1knIwnLqdpdLsIKrZRVnLnlqD1qlUTZoUDvI8s,8834
99
+ iXBRLViewerPlugin/viewer/src/js/report.test.js,sha256=a8ExsmypDvqNx1J2vNEUqVcw0YjKyVS8Yfb_ERLXjtA,5687
100
+ iXBRLViewerPlugin/viewer/src/js/reportset.js,sha256=ao77URkMRxFlQGDIcWw4gNo1xrZKMXdSoaF3-kE2x0I,8320
101
+ iXBRLViewerPlugin/viewer/src/js/reportset.test.js,sha256=qEBoOxDt1CX4uAFmo55FI4ps-KihlstbgqFYyLjMT7w,12881
102
102
  iXBRLViewerPlugin/viewer/src/js/search.js,sha256=xbxLAPrRVgHFHb0CmgfY9X_X5L0LoDrTYHfvNQS-e7I,5683
103
103
  iXBRLViewerPlugin/viewer/src/js/search.test.js,sha256=Z1op3e8nUjDzry3lNfcq6LXs_gKUk-UiGkm8iJTUIAc,25436
104
- iXBRLViewerPlugin/viewer/src/js/summary.js,sha256=86-BeF_h6PxH4ztY2nzBX04yvdvDN1s539S1k9PahZ4,4437
105
- iXBRLViewerPlugin/viewer/src/js/summary.test.js,sha256=-fMLTuFz0JTk6dauAeB_QBekP3ZdUfskdk6V9L-zQoo,7339
104
+ iXBRLViewerPlugin/viewer/src/js/summary.js,sha256=RrMm5FmJ9HOM_RbI3cQncOgmgPZ3lWwFQ-ganqkkL64,4622
105
+ iXBRLViewerPlugin/viewer/src/js/summary.test.js,sha256=-3QtRfb3kMy7ivuP-S30hco31bEvzTl0S53bRXY9pAo,8613
106
106
  iXBRLViewerPlugin/viewer/src/js/tableExport.js,sha256=zj-sgC8yOTnMONik-9A9ezY_z32DAJmSKnDVoLZtfCY,9640
107
107
  iXBRLViewerPlugin/viewer/src/js/test-utils.js,sha256=MXhrubSf0PmSRsrDrqHftPgTrK5PioroXN-FlU4HcN8,1680
108
108
  iXBRLViewerPlugin/viewer/src/js/textblockviewer.js,sha256=lCAZeN_wrSwmYie_rwdeIFCIjiOSblT0K9Vslqwktc8,1874
@@ -154,12 +154,12 @@ tests/puppeteer/tools/generate.sh,sha256=jZ1Jac6KsuRo2nHuA2B9g9mZqr7tLjPJKJAUf0o
154
154
  tests/unit_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
155
155
  tests/unit_tests/iXBRLViewerPlugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
156
  tests/unit_tests/iXBRLViewerPlugin/mock_arelle.py,sha256=fQKJGwceaEVaxvqV9tyuvT6DJB5s1X3-oSMjbFMKlS8,1301
157
- tests/unit_tests/iXBRLViewerPlugin/test_iXBRLViewer.py,sha256=XSMbjEwof877OT2uwZ8mF8v_umWg39ySodOocQqP4XM,31447
157
+ tests/unit_tests/iXBRLViewerPlugin/test_iXBRLViewer.py,sha256=1Q4O_1SzJaDjouRbkgn2PGFsWfJ4_lK-zzsgV9iXXF0,31725
158
158
  tests/unit_tests/iXBRLViewerPlugin/test_xhtmlserialize.py,sha256=kdrg4i-YXnYAGl9TLWEACPQF0V69OAMXdXLYJwefsH0,12521
159
- ixbrl_viewer-1.4.26.dist-info/LICENSE,sha256=TZJhu77S_2-WQcPAkuIAlQiuuiNqVcuHBjd7z3Y5S08,16645
160
- ixbrl_viewer-1.4.26.dist-info/METADATA,sha256=tKxL0LWLFXqF7nv_rXSNjz9fq5JYLU2tS2nBvxTSHNg,14716
161
- ixbrl_viewer-1.4.26.dist-info/NOTICE,sha256=-SHDY0OY7s4gm4Rdk5AB3nbnUsrdHEHPdJuGFR_vuM4,566
162
- ixbrl_viewer-1.4.26.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
163
- ixbrl_viewer-1.4.26.dist-info/entry_points.txt,sha256=2XUzP20WGwxdvnugdBybUBwAB3xf_zvrOR5W_smFz_4,65
164
- ixbrl_viewer-1.4.26.dist-info/top_level.txt,sha256=h8MkrMhC_t2-KbfS1oxJVnFAbn5NZJH8END_BL40mv8,24
165
- ixbrl_viewer-1.4.26.dist-info/RECORD,,
159
+ ixbrl_viewer-1.4.28.dist-info/LICENSE,sha256=TZJhu77S_2-WQcPAkuIAlQiuuiNqVcuHBjd7z3Y5S08,16645
160
+ ixbrl_viewer-1.4.28.dist-info/METADATA,sha256=R6OQwhHoICv5CpMmyjeBWtHbThTNVTf0Ag4SXMOt-8A,14716
161
+ ixbrl_viewer-1.4.28.dist-info/NOTICE,sha256=-SHDY0OY7s4gm4Rdk5AB3nbnUsrdHEHPdJuGFR_vuM4,566
162
+ ixbrl_viewer-1.4.28.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
163
+ ixbrl_viewer-1.4.28.dist-info/entry_points.txt,sha256=2XUzP20WGwxdvnugdBybUBwAB3xf_zvrOR5W_smFz_4,65
164
+ ixbrl_viewer-1.4.28.dist-info/top_level.txt,sha256=h8MkrMhC_t2-KbfS1oxJVnFAbn5NZJH8END_BL40mv8,24
165
+ ixbrl_viewer-1.4.28.dist-info/RECORD,,
@@ -296,6 +296,9 @@ class TestIXBRLViewer:
296
296
  format='format'
297
297
  )
298
298
 
299
+ def creationSoftwareMatches_effect(text):
300
+ return ["Example Software Name"]
301
+
299
302
  def fromModelObjects_effect(concept):
300
303
  return []
301
304
 
@@ -372,6 +375,7 @@ class TestIXBRLViewer:
372
375
 
373
376
  def urlDocEntry(path, docType, linkQName=None):
374
377
  return path, Mock(
378
+ creationSoftwareMatches=creationSoftwareMatches_effect,
375
379
  type=docType,
376
380
  basename=os.path.basename(path),
377
381
  xmlRootElement=Mock(
@@ -523,6 +527,7 @@ class TestIXBRLViewer:
523
527
  errors = jsdata["validation"]
524
528
  assert errors == [{"sev": "ERROR", "msg": "Error message", "code": "code1" }]
525
529
  assert set(jsdata["sourceReports"][0]["targetReports"][0]["facts"]) == {"fact_id1", "fact_typed_dimension", "fact_dimension_missing_member"}
530
+ assert jsdata["sourceReports"][0]["targetReports"][0]["softwareCredits"] == ["Example Software Name"]
526
531
 
527
532
  @patch('arelle.XbrlConst.conceptLabel', 'http://www.xbrl.org/2003/arcrole/concept-label')
528
533
  @patch('arelle.XbrlConst.conceptReference', 'http://www.xbrl.org/2003/arcrole/concept-reference')