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

Files changed (32) hide show
  1. iXBRLViewerPlugin/_version.py +2 -2
  2. iXBRLViewerPlugin/iXBRLViewer.py +47 -52
  3. iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js +1 -1
  4. iXBRLViewerPlugin/viewer/src/html/inspector.html +2 -2
  5. iXBRLViewerPlugin/viewer/src/i18n/en/translation.json +1 -1
  6. iXBRLViewerPlugin/viewer/src/i18n/es/translation.json +1 -1
  7. iXBRLViewerPlugin/viewer/src/js/aspect.js +1 -1
  8. iXBRLViewerPlugin/viewer/src/js/aspect.test.js +2 -1
  9. iXBRLViewerPlugin/viewer/src/js/chart.js +1 -1
  10. iXBRLViewerPlugin/viewer/src/js/chart.test.js +2 -2
  11. iXBRLViewerPlugin/viewer/src/js/concept.test.js +2 -2
  12. iXBRLViewerPlugin/viewer/src/js/fact.js +11 -24
  13. iXBRLViewerPlugin/viewer/src/js/fact.test.js +6 -11
  14. iXBRLViewerPlugin/viewer/src/js/factset.test.js +2 -4
  15. iXBRLViewerPlugin/viewer/src/js/inspector.js +3 -3
  16. iXBRLViewerPlugin/viewer/src/js/inspector.test.js +2 -3
  17. iXBRLViewerPlugin/viewer/src/js/outline.test.js +3 -3
  18. iXBRLViewerPlugin/viewer/src/js/report.js +7 -3
  19. iXBRLViewerPlugin/viewer/src/js/report.test.js +2 -1
  20. iXBRLViewerPlugin/viewer/src/js/reportset.test.js +3 -3
  21. iXBRLViewerPlugin/viewer/src/js/unit.js +15 -33
  22. iXBRLViewerPlugin/viewer/src/js/unit.test.js +17 -24
  23. iXBRLViewerPlugin/viewer/src/js/util.js +21 -0
  24. iXBRLViewerPlugin/viewer/src/js/viewer.js +58 -53
  25. {ixbrl_viewer-1.4.9.dist-info → ixbrl_viewer-1.4.11.dist-info}/METADATA +8 -4
  26. {ixbrl_viewer-1.4.9.dist-info → ixbrl_viewer-1.4.11.dist-info}/RECORD +32 -32
  27. tests/unit_tests/iXBRLViewerPlugin/test_iXBRLViewer.py +17 -12
  28. {ixbrl_viewer-1.4.9.dist-info → ixbrl_viewer-1.4.11.dist-info}/LICENSE +0 -0
  29. {ixbrl_viewer-1.4.9.dist-info → ixbrl_viewer-1.4.11.dist-info}/NOTICE +0 -0
  30. {ixbrl_viewer-1.4.9.dist-info → ixbrl_viewer-1.4.11.dist-info}/WHEEL +0 -0
  31. {ixbrl_viewer-1.4.9.dist-info → ixbrl_viewer-1.4.11.dist-info}/entry_points.txt +0 -0
  32. {ixbrl_viewer-1.4.9.dist-info → ixbrl_viewer-1.4.11.dist-info}/top_level.txt +0 -0
@@ -3,9 +3,8 @@
3
3
  import $ from 'jquery'
4
4
  import { numberMatchSearch, fullDateMatch } from './number-matcher.js'
5
5
  import { TableExport } from './tableExport.js'
6
- import { escapeRegex, viewerUniqueId } from './util.js'
7
6
  import { IXNode } from './ixnode.js';
8
- import { getIXHiddenLinkStyle, runGenerator } from './util.js';
7
+ import { getIXHiddenLinkStyle, runGenerator, escapeRegex, viewerUniqueId, HIGHLIGHT_COLORS } from './util.js';
9
8
  import { DocOrderIndex } from './docOrderIndex.js';
10
9
  import { MessageBox } from './messagebox.js';
11
10
 
@@ -109,7 +108,7 @@ export class Viewer {
109
108
  if (this._reportSet.isMultiDocumentViewer()) {
110
109
  $('#ixv .ixds-tabs').show();
111
110
  for (const [i, doc] of this._reportSet.reportFiles().entries()) {
112
- $('<div class="tab">')
111
+ $('<div class="tab"></div>')
113
112
  .text(doc.file)
114
113
  .prop('title', doc.file)
115
114
  .data('ix-doc-id', i)
@@ -247,8 +246,13 @@ export class Viewer {
247
246
  }
248
247
  }
249
248
 
250
- _findOrCreateWrapperNode(domNode) {
249
+ _findOrCreateWrapperNode(domNode, inHidden) {
251
250
  const v = this;
251
+
252
+ if (inHidden) {
253
+ return $(domNode).addClass("ixbrl-element-hidden");
254
+ }
255
+
252
256
  /* Is the element the only significant content within a <td> or <th> ? If
253
257
  * so, use that as the wrapper element. */
254
258
  const tableNode = domNode.closest("td,th");
@@ -308,13 +312,13 @@ export class Viewer {
308
312
  const reportIndex = $(iframe).data("report-index");
309
313
  $(iframe).contents().find("body *").each((m, node) => {
310
314
  const name = localName(node.nodeName).toUpperCase();
311
- if (['NONNUMERIC', 'NONFRACTION', 'FOOTNOTE', 'CONTINUATION'].includes(name)) {
315
+ if (['NONNUMERIC', 'NONFRACTION', 'FOOTNOTE', 'CONTINUATION'].includes(name) && node.hasAttribute('id')) {
312
316
  const nodeId = viewerUniqueId(reportIndex, node.getAttribute('id'));
313
317
  const continuedAtId = viewerUniqueId(reportIndex, node.getAttribute("continuedAt"));
314
318
  if (continuedAtId !== null) {
315
319
  nextContinuationMap[nodeId] = continuedAtId;
316
320
  }
317
- if (name != 'CONTINUATION' && !node.hasAttribute('target')) {
321
+ if (name != 'CONTINUATION') {
318
322
  itemContinuationMap[nodeId] = [];
319
323
  }
320
324
  }
@@ -338,6 +342,18 @@ export class Viewer {
338
342
  this.itemContinuationMap = itemContinuationMap;
339
343
  }
340
344
 
345
+ _getOrCreateIXNode(vuid, nodes, docIndex, isHidden) {
346
+ // We may have already created an IXNode for this ID from a -sec-ix-hidden
347
+ // element
348
+ let ixn = this._ixNodeMap[vuid];
349
+ if (!ixn) {
350
+ ixn = new IXNode(vuid, nodes, docIndex);
351
+ this._ixNodeMap[vuid] = ixn;
352
+ ixn.isHidden = isHidden;
353
+ }
354
+ return ixn;
355
+ }
356
+
341
357
  //
342
358
  // Traverse the DOM hierarchy to find IX elements, and build maps and add
343
359
  // wrapper nodes and classes.
@@ -375,59 +391,48 @@ export class Viewer {
375
391
  const isNonFraction = name === 'NONFRACTION';
376
392
  const isFact = isNonNumeric || isNonFraction;
377
393
  if (n.nodeType === 1) {
378
- // Ignore iXBRL elements that are not in the default target document, as
379
- // the viewer builder does not handle these, and the builder does not
380
- // ensure that they have ID attributes.
381
394
  const vuid = viewerUniqueId(reportIndex, n.getAttribute("id"));
382
- if (((isFact || isFootnote) && !n.hasAttribute("target"))
383
- || (isContinuation && this.continuationOfMap[vuid] !== undefined)) {
384
- let nodes;
385
- if (inHidden) {
386
- nodes = $(n);
387
- } else {
388
- nodes = this._findOrCreateWrapperNode(n);
389
- }
390
-
391
- // For a continuation, store the IX ID(s) of the item(s), not the continuation
392
- const headId = isContinuation ? this.continuationOfMap[vuid] : vuid;
393
- this._addIdToNode(nodes.first(), headId);
395
+ if (isFact || isFootnote) {
396
+ // If @id is not present, it must be for a target document that wasn't processed.
397
+ if (n.hasAttribute("id")) {
398
+ let nodes = this._findOrCreateWrapperNode(n, inHidden);
394
399
 
395
- // We may have already created an IXNode for this ID from a -sec-ix-hidden
396
- // element
397
- let ixn = this._ixNodeMap[vuid];
398
- if (!ixn) {
399
- ixn = new IXNode(vuid, nodes, docIndex);
400
- this._ixNodeMap[vuid] = ixn;
401
- }
402
- if (inHidden) {
403
- ixn.isHidden = true;
404
- nodes.addClass("ixbrl-element-hidden");
405
- }
406
- if (isContinuation) {
407
- nodes.addClass("ixbrl-continuation");
408
- }
409
- else {
400
+ this._addIdToNode(nodes.first(), vuid);
401
+ let ixn = this._getOrCreateIXNode(vuid, nodes, docIndex, inHidden);
410
402
  this._docOrderItemIndex.addItem(vuid, docIndex);
411
- }
412
- if (isNonFraction) {
413
- nodes.addClass("ixbrl-element-nonfraction");
414
- if (n.hasAttribute('scale')) {
415
- const scale = Number(n.getAttribute('scale'));
416
- // Set scale if the value is a valid number and is not a redundant 0/"ones" scale.
417
- if (!Number.isNaN(scale) && scale !== 0) {
418
- ixn.scale = scale;
403
+
404
+ if (isNonFraction) {
405
+ nodes.addClass("ixbrl-element-nonfraction");
406
+ if (n.hasAttribute('scale')) {
407
+ const scale = Number(n.getAttribute('scale'));
408
+ // Set scale if the value is a valid number and is not a redundant 0/"ones" scale.
409
+ if (!Number.isNaN(scale) && scale !== 0) {
410
+ ixn.scale = scale;
411
+ }
419
412
  }
420
413
  }
421
- }
422
- if (isNonNumeric) {
423
- nodes.addClass("ixbrl-element-nonnumeric");
424
- if (n.hasAttribute('escape') && n.getAttribute('escape').match(/^(true|1)$/)) {
425
- ixn.escaped = true;
414
+ if (isNonNumeric) {
415
+ nodes.addClass("ixbrl-element-nonnumeric");
416
+ if (n.hasAttribute('escape') && n.getAttribute('escape').match(/^(true|1)$/)) {
417
+ ixn.escaped = true;
418
+ }
419
+ }
420
+ if (isFootnote) {
421
+ nodes.addClass("ixbrl-element-footnote");
422
+ ixn.footnote = true;
426
423
  }
427
424
  }
428
- if (isFootnote) {
429
- nodes.addClass("ixbrl-element-footnote");
430
- ixn.footnote = true;
425
+ }
426
+ else if (isContinuation) {
427
+ if (n.hasAttribute("id") && this.continuationOfMap[vuid] !== undefined) {
428
+ let nodes = this._findOrCreateWrapperNode(n, inHidden);
429
+
430
+ // For a continuation, store the IX ID(s) of the item(s), not the continuation
431
+ this._addIdToNode(nodes.first(), this.continuationOfMap[vuid]);
432
+
433
+ this._getOrCreateIXNode(vuid, nodes, docIndex, inHidden);
434
+
435
+ nodes.addClass("ixbrl-continuation");
431
436
  }
432
437
  }
433
438
  else if(name == 'HIDDEN') {
@@ -733,7 +738,7 @@ export class Viewer {
733
738
  highlightAllTags(on, namespaceGroups) {
734
739
  const groups = {};
735
740
  $.each(namespaceGroups, function (i, ns) {
736
- groups[ns] = i;
741
+ groups[ns] = i % HIGHLIGHT_COLORS;
737
742
  });
738
743
  const reportSet = this._reportSet;
739
744
  const viewer = this;
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ixbrl-viewer
3
- Version: 1.4.9
3
+ Version: 1.4.11
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
@@ -29,12 +29,16 @@ Requires-Python: >=3.8
29
29
  Description-Content-Type: text/markdown
30
30
  License-File: LICENSE
31
31
  License-File: NOTICE
32
- Requires-Dist: arelle-release ==2.*
33
32
  Requires-Dist: lxml ==4.*
34
- Requires-Dist: pycountry ==22.*
33
+ Requires-Dist: pycountry <24,>=22
34
+ Provides-Extra: arelle
35
+ Requires-Dist: arelle-release ==2.* ; extra == 'arelle'
35
36
  Provides-Extra: dev
37
+ Requires-Dist: flake8 ==6.1.0 ; extra == 'dev'
38
+ Requires-Dist: lxml-stubs ==0.4.0 ; extra == 'dev'
39
+ Requires-Dist: mypy ==1.8.0 ; extra == 'dev'
36
40
  Requires-Dist: nose2 ==0.14.0 ; extra == 'dev'
37
- Requires-Dist: typing-extensions ==4.8.0 ; extra == 'dev'
41
+ Requires-Dist: typing-extensions ==4.9.0 ; extra == 'dev'
38
42
 
39
43
  # Arelle iXBRL Viewer
40
44
 
@@ -1,8 +1,8 @@
1
1
  iXBRLViewerPlugin/__init__.py,sha256=WU4immfhGAVbyVRSNhMc-jAqcMHtXNu_8r1v0qYQ9Gw,13974
2
- iXBRLViewerPlugin/_version.py,sha256=sPZ1R9Ki-yJLDq1LG42Cd8JcFKIsznRRWdx6esE-OfY,160
2
+ iXBRLViewerPlugin/_version.py,sha256=HAxYk2WJE6p-QOIdm7l4LeuuoH2nO0U5RfTze4BjJ4M,162
3
3
  iXBRLViewerPlugin/constants.py,sha256=kJ-kjt6rGhwBvk8HNbIiXt31b5qe6Lb6qPOXQF6rH_8,833
4
4
  iXBRLViewerPlugin/featureConfig.py,sha256=tOViPYmN32i2uIf_T9HGgbkkv41VoTpTjqhn4w9rTgw,194
5
- iXBRLViewerPlugin/iXBRLViewer.py,sha256=aHcBcnGBu2X4dhdJmALBehJ9jUi29N5Ne_cuHIMmImk,28138
5
+ iXBRLViewerPlugin/iXBRLViewer.py,sha256=tKdit2-Ts98r4vb07uCzL92RAWatx6xj2AxosH0oyq8,27806
6
6
  iXBRLViewerPlugin/stubviewer.html,sha256=hc5BeIR7y3ojGRux_Hy5oqEAHdlQ34kk3lL5eH-B4AU,158
7
7
  iXBRLViewerPlugin/ui.py,sha256=G2TsBoBLfpmyYQxB01d_7r8IsMEnemayU__fKvSQeLE,9713
8
8
  iXBRLViewerPlugin/xhtmlserialize.py,sha256=XG6HRR6qDclSwbrpywFC0v8Ktb4-YZj-9IV_gqroCOY,6766
@@ -11,17 +11,17 @@ iXBRLViewerPlugin/viewer/version.js,sha256=7b5si8UmaS7QqALQIP-wJ0I8onKFox8VyaAiU
11
11
  iXBRLViewerPlugin/viewer/webpack.common.js,sha256=AsiOVAW2XbmSNjv6Kl6LC4VUM2rA9UyQ8vwhz_1jb1Y,1320
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=3M3tGeDXRyNIgxx7bfu4trbAIu35wcygcDjNhcQVmDE,860807
14
+ iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js,sha256=olTXd-r1RfPVMEeDIYg21KzosMWdgBinU2EfW2uFJ3c,861629
15
15
  iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js.LICENSE.txt,sha256=eA5xbvB65RVR5QmweqeHe4sYtW3dzEmgLhUDFOGr9m4,1697
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=7NmtRHQjsF2dVdsijgcKozPc_vwwEiDG0aj7v19mnV4,18109
18
+ iXBRLViewerPlugin/viewer/src/html/inspector.html,sha256=PM-c68WmPVYrz6_F8BnGzU0uT0_RlmL3ZBK8f6kUv5U,18101
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=cr5nI0IHci9vyRvPB6OECqeYesG49PdCbrgKgczApR8,3819
21
+ iXBRLViewerPlugin/viewer/src/i18n/en/translation.json,sha256=sSVODHTdcZNkAkdOc9x8H55yMVAhWyunFzEhZ8hH4YM,3814
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=H4OgQvgSkfUeI3qMdqr7K46xIIMZLAhroU3z39Ni_sg,3525
24
+ iXBRLViewerPlugin/viewer/src/i18n/es/translation.json,sha256=W7G0nkPF-ajvL3NZP398dFsroSwca-dDBGLPEffm3u8,3522
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/chevron-down.svg,sha256=V-vUnVI2ixt8EkLYrtNpmW2OT8Iq9u5abEADzi2hlEA,462
@@ -54,25 +54,25 @@ iXBRLViewerPlugin/viewer/src/img/inline-viewer.svg,sha256=7gwas3nHxMunJIhb3clFbS
54
54
  iXBRLViewerPlugin/viewer/src/img/powered-by-workiva.png,sha256=4XE5yykXtKUxF2hytq9Uqjx64pa7AgOuidVuB5_04wU,10362
55
55
  iXBRLViewerPlugin/viewer/src/img/powered-by-workiva.svg,sha256=Zf2JArzszZCn7zCkHNVZiW8bhlDwPEdgIDJLJe86W30,7620
56
56
  iXBRLViewerPlugin/viewer/src/js/accordian.js,sha256=hntVW5QfzHpx_2K1ysbJNDfLR63F_PLTiPg4rEbGs2Y,1842
57
- iXBRLViewerPlugin/viewer/src/js/aspect.js,sha256=xVN2GdJxxhHJbMq20IDp_2JoLv0O4GWueTBntZrvXDU,2218
58
- iXBRLViewerPlugin/viewer/src/js/aspect.test.js,sha256=hnht5NazaC4HMoFC7prUEdL1g9oIgkZAFKpL01Z3usg,4242
57
+ iXBRLViewerPlugin/viewer/src/js/aspect.js,sha256=RBJ3-9nT8-iAwhYa7m3g4203lDONfJhbBG40-fkhhp0,2211
58
+ iXBRLViewerPlugin/viewer/src/js/aspect.test.js,sha256=ctDakUsDdJ65uuW70WcnsRW7keVBOsxWrKqD6PZsPC8,4269
59
59
  iXBRLViewerPlugin/viewer/src/js/calculations.js,sha256=xPT2e8CtDXgnJA5DnAWouyeYJijNSQBrMb1D6iUM0KI,3388
60
- iXBRLViewerPlugin/viewer/src/js/chart.js,sha256=w0JS5TrcJlxlMpoT7v4Qjw73seLPbr1hPNu9MFuhwgI,7000
61
- iXBRLViewerPlugin/viewer/src/js/chart.test.js,sha256=GepXX4pG2se2DAXr99JEKQJV955Lws8gyPo-MXK8Jtk,3386
60
+ iXBRLViewerPlugin/viewer/src/js/chart.js,sha256=B-Wdr4Rshdr5LWknJyv8u9Ro_8GYQL3N-ZAiotFkcps,6997
61
+ iXBRLViewerPlugin/viewer/src/js/chart.test.js,sha256=LWH7Qb-ABufPGxyAomX6q7PJgMpUWNvHskHLYCiepiE,3379
62
62
  iXBRLViewerPlugin/viewer/src/js/concept.js,sha256=LCtYnEqmVWw2d61SF6an80RhO78swfxNnuRnhtSz7tM,1176
63
- iXBRLViewerPlugin/viewer/src/js/concept.test.js,sha256=g3fIk4g0twrwhyoOX7eGX2HuMRzN_MACi47WPQ15pAk,2558
63
+ iXBRLViewerPlugin/viewer/src/js/concept.test.js,sha256=ZQHRJSxrDo4iB9srYxdmpLtgqFP1iWiCIKrezLIgthw,2543
64
64
  iXBRLViewerPlugin/viewer/src/js/dialog.js,sha256=09uGcyAcaWLyMyUNDmP9XqYKsuDiAAEIQUM6YLwG_j4,1058
65
65
  iXBRLViewerPlugin/viewer/src/js/docOrderIndex.js,sha256=rhNooqCDRU0f8Sb-adHnwqF7kq6vJA_rskGh6oPqdx8,674
66
- iXBRLViewerPlugin/viewer/src/js/fact.js,sha256=jYnI15b8qthBWJfquZ5fvJwx7fNt8jV5lEGwGR7fV9g,10103
67
- iXBRLViewerPlugin/viewer/src/js/fact.test.js,sha256=91RJpP2gFvcbI8YRL9YgtTDvK81xmNSDPGK1Vte6ERE,22957
66
+ iXBRLViewerPlugin/viewer/src/js/fact.js,sha256=PHUSXU2w-wlQLypyad358OPenl1DS6-Cs0OEGzZ9D1Y,9693
67
+ iXBRLViewerPlugin/viewer/src/js/fact.test.js,sha256=-DVTQ1rr3uNwPCILZFE9iOUHtv6m86MIiBj0EyRgvWo,22681
68
68
  iXBRLViewerPlugin/viewer/src/js/factset.js,sha256=qhMoLwAB5T6GtWyaBXdLnDfGrkEG9a6s6OeygO-6T7M,3861
69
- iXBRLViewerPlugin/viewer/src/js/factset.test.js,sha256=DFPx4rLHk9HQQTpwVoehSjJEgyU2gBdeMsTKqvRNbuQ,6749
69
+ iXBRLViewerPlugin/viewer/src/js/factset.test.js,sha256=Edji12qbFqvkHduK_BkE0wmaycdaG2sQSdXwdCpriBg,6675
70
70
  iXBRLViewerPlugin/viewer/src/js/footnote.js,sha256=jZreicIBPAtBjbpoRbLnkSs8fHdCYVlr-mqn_x5fUfw,597
71
71
  iXBRLViewerPlugin/viewer/src/js/identifiers.js,sha256=gcGitF1CfiyiUvzWDG6INnFDIBi5jXdBgiqCB8Ip0YE,2260
72
72
  iXBRLViewerPlugin/viewer/src/js/identifiers.test.js,sha256=eu2TkHVpuRItIyNdNAuoITnpGFwwAicqMynf0dFreRk,2112
73
73
  iXBRLViewerPlugin/viewer/src/js/index.js,sha256=SdxunWx8kNw0-vwwnr58-ac1-eQIE1__Ll7ekNNK79E,232
74
- iXBRLViewerPlugin/viewer/src/js/inspector.js,sha256=6xI_Qj-Qaqp_-5szctUUeyIxkQCGMfz4mQbCeUWXwLs,45281
75
- iXBRLViewerPlugin/viewer/src/js/inspector.test.js,sha256=aLmCtcQYtXM4y3EC1LAfwbQD4QDgVYKeZ7SBlAOgzZk,10118
74
+ iXBRLViewerPlugin/viewer/src/js/inspector.js,sha256=CcBbXBcR8vOwbttIMIHoYmt3NOtyJliMCuNGwFhRx5M,45317
75
+ iXBRLViewerPlugin/viewer/src/js/inspector.test.js,sha256=AQjbwTllw_dZfovCfjfHWtt0kdjzDnoXw-mQ0IrHKWk,10086
76
76
  iXBRLViewerPlugin/viewer/src/js/interact.min.js,sha256=Yk0ZkCU3IZ0heGijAgUiNVkZ1Djq-MjvbS32DBSrdIs,85048
77
77
  iXBRLViewerPlugin/viewer/src/js/ixbrlviewer.js,sha256=3bQpJ_fUJzSQNjFizz6_7jJ5bKctwQq8Bb1sJB-HE2Y,13211
78
78
  iXBRLViewerPlugin/viewer/src/js/ixbrlviewer.test.js,sha256=ey61xTRZkP0Kf3W8DVQtZE-PeXwK4OOx51iLySMSBsY,2712
@@ -84,14 +84,14 @@ iXBRLViewerPlugin/viewer/src/js/number-matcher-preprocess.test.js,sha256=0DaUAwI
84
84
  iXBRLViewerPlugin/viewer/src/js/number-matcher.js,sha256=mGqt20dBAHmWN9a96qNzC3lrJoB-QSh0_hf1Ihf4Emg,6133
85
85
  iXBRLViewerPlugin/viewer/src/js/number-matcher.test.js,sha256=mNgnB46-p7NxWa6aQvI83GRDupxncvGeDb59KuI8CMM,4059
86
86
  iXBRLViewerPlugin/viewer/src/js/outline.js,sha256=pf5l0d8Cplu-uMBJSOmSfyx4AieNgm3C-GAnfxBHAZY,6594
87
- iXBRLViewerPlugin/viewer/src/js/outline.test.js,sha256=GJtAB_1Yj-sxoiNQJOZUjSuVJ7TE4NHRW-259HBllrA,13677
87
+ iXBRLViewerPlugin/viewer/src/js/outline.test.js,sha256=PaUzfy675G04YcjY8CcFDLCWi87Xx2hjqh1pogdetYY,13661
88
88
  iXBRLViewerPlugin/viewer/src/js/period.js,sha256=D9zXSOr19trWCmHizgCe5DQ612HB6IlAWmI5Rh4I8ZM,2267
89
89
  iXBRLViewerPlugin/viewer/src/js/period.test.js,sha256=nMamproI2VukUnO0wm3SKQA_rnjwNkwkzyn4uhke0kc,5417
90
90
  iXBRLViewerPlugin/viewer/src/js/qname.js,sha256=6MqMBbgziuPPNHKS3UUGyYIgHWygaAIf0mcpK95hwT8,282
91
- iXBRLViewerPlugin/viewer/src/js/report.js,sha256=6A9it4-1mIIGBgwDdVLRG0BUyS8OljodHuXhBqmchF8,8567
92
- iXBRLViewerPlugin/viewer/src/js/report.test.js,sha256=tedkrEUoUrFv9_zfU3ekJT-HQNEOVH8PftxgJof0saQ,5041
91
+ iXBRLViewerPlugin/viewer/src/js/report.js,sha256=4vP4LMHmzAFWQMKKbRQ-9z16PgZvVM1rkztvyNqiBeg,8694
92
+ iXBRLViewerPlugin/viewer/src/js/report.test.js,sha256=OpWSRo0oWQY2nwwD2u1L_y8APB9kjkJ4pV89WuTmVzo,5068
93
93
  iXBRLViewerPlugin/viewer/src/js/reportset.js,sha256=4_f6zphwC2firfYeiX4gd4DyyvZ-MFMaq1Idej3nFK8,7832
94
- iXBRLViewerPlugin/viewer/src/js/reportset.test.js,sha256=ZSXsojqB_aWpNq5XUoMlfKG5KsUtZTb7UtaGX1_-Hrs,12573
94
+ iXBRLViewerPlugin/viewer/src/js/reportset.test.js,sha256=qzXGfqKlEu3pGk4m_iMwFdXsIxTCoRM7f4bUrYWIsUU,12558
95
95
  iXBRLViewerPlugin/viewer/src/js/search.js,sha256=M7rZ7IVqzUbsLusgbu2ohhLnaRRigAVYJ2Bb8jmjKPQ,5490
96
96
  iXBRLViewerPlugin/viewer/src/js/search.test.js,sha256=YGUrgxKjNC0CoY9CJm5FbpBi5tepqMcGriIv7fw19aQ,20925
97
97
  iXBRLViewerPlugin/viewer/src/js/summary.js,sha256=86-BeF_h6PxH4ztY2nzBX04yvdvDN1s539S1k9PahZ4,4437
@@ -99,12 +99,12 @@ iXBRLViewerPlugin/viewer/src/js/summary.test.js,sha256=-fMLTuFz0JTk6dauAeB_QBekP
99
99
  iXBRLViewerPlugin/viewer/src/js/tableExport.js,sha256=kE0Zyr7MPzcopcc0yy-NKiRwr2ZpyvQx87PYBrosIgc,9669
100
100
  iXBRLViewerPlugin/viewer/src/js/test-utils.js,sha256=xPjpwZxuxXcCNqDnRacN46ldYP9gL_a35R8nhvTkXRk,1034
101
101
  iXBRLViewerPlugin/viewer/src/js/textblockviewer.js,sha256=lCAZeN_wrSwmYie_rwdeIFCIjiOSblT0K9Vslqwktc8,1874
102
- iXBRLViewerPlugin/viewer/src/js/unit.js,sha256=KBaFtwxdGU0a9aBDVzDB6FEcD8mfIaIUDLLBh5YRJR4,2192
103
- iXBRLViewerPlugin/viewer/src/js/unit.test.js,sha256=D11c0Z0j5Xpci3FgiCCDjqLKtIFWVdTYJ9R5AvYAgx0,3084
104
- iXBRLViewerPlugin/viewer/src/js/util.js,sha256=AlX2qgDGfj5mc9XDpL64qnXxNW7qEe_97ILhCsTRPhw,6104
102
+ iXBRLViewerPlugin/viewer/src/js/unit.js,sha256=eHaCTE3snK7uuXK48VK1yPPpl0MAQReqPGWKhBvzwPQ,1638
103
+ iXBRLViewerPlugin/viewer/src/js/unit.test.js,sha256=l4nELK-gK2uJG6jXHEXwnAKzCCCQ7V_oTySaUN_JnhQ,2801
104
+ iXBRLViewerPlugin/viewer/src/js/util.js,sha256=oF6wGOTODyMNrQ9N91FqOYamW_bLmLYUdiYaGnviH-c,6793
105
105
  iXBRLViewerPlugin/viewer/src/js/util.test.js,sha256=9z1y2ImH2t8GKAF5wpkXBADkeQd6X6H7JBejbaSHRwg,6460
106
106
  iXBRLViewerPlugin/viewer/src/js/validationreport.js,sha256=zWA9_8sWavX2Fi8fwEyDPABxWL_XSzvNQ21O1Qu2ayY,644
107
- iXBRLViewerPlugin/viewer/src/js/viewer.js,sha256=Uso_MieWmpbAhtVtDUmsk11ktIjjrewTryL4qSwETu0,34884
107
+ iXBRLViewerPlugin/viewer/src/js/viewer.js,sha256=9ob_js01hDd2B8IygYhTo-GsUPUsG84_Jx_co-NEasM,35018
108
108
  iXBRLViewerPlugin/viewer/src/js/viewerOptions.js,sha256=Cvj-gAhqNbdyoUAhUKt-EoTKVOcBR5OjG6y-11hF_hY,164
109
109
  iXBRLViewerPlugin/viewer/src/less/accordian.less,sha256=MMYLCpZprb0Y8Mc8bkTL0qQgIsgLbk3u08ZBaCnYXnY,582
110
110
  iXBRLViewerPlugin/viewer/src/less/block-list.less,sha256=p2ERp2ahRGSr3Mkj9KhB0eZBzUPEFnhv9Y_58PlWuxs,502
@@ -146,12 +146,12 @@ tests/puppeteer/tools/generate.sh,sha256=A-SUACwIh_OLlV6nPh2HH21grYhPLIqwm0PpygR
146
146
  tests/unit_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
147
147
  tests/unit_tests/iXBRLViewerPlugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
148
148
  tests/unit_tests/iXBRLViewerPlugin/mock_arelle.py,sha256=Dm11pBwEqDmcCc4mkxNciFEEM_DbgtzQ2QYNP1y_ImE,1307
149
- tests/unit_tests/iXBRLViewerPlugin/test_iXBRLViewer.py,sha256=arjJXU5jWkh_JmEuZIGXVJ0Ory6_uGUvPcQLM9o6TZA,31583
149
+ tests/unit_tests/iXBRLViewerPlugin/test_iXBRLViewer.py,sha256=naSIovmZmn53p8u7csJ7lAl0W8_XbMUIFcCQi-IHrjQ,32024
150
150
  tests/unit_tests/iXBRLViewerPlugin/test_xhtmlserialize.py,sha256=BQNN1sC899sZzV1RN3wuFj9uwi8ioaRJcONxTiTdfZM,12570
151
- ixbrl_viewer-1.4.9.dist-info/LICENSE,sha256=TZJhu77S_2-WQcPAkuIAlQiuuiNqVcuHBjd7z3Y5S08,16645
152
- ixbrl_viewer-1.4.9.dist-info/METADATA,sha256=YpgLF08ZyS3Oy1M6gl8hvFDpz51X5v10N7WSUSFAsvM,14496
153
- ixbrl_viewer-1.4.9.dist-info/NOTICE,sha256=-SHDY0OY7s4gm4Rdk5AB3nbnUsrdHEHPdJuGFR_vuM4,566
154
- ixbrl_viewer-1.4.9.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
155
- ixbrl_viewer-1.4.9.dist-info/entry_points.txt,sha256=2XUzP20WGwxdvnugdBybUBwAB3xf_zvrOR5W_smFz_4,65
156
- ixbrl_viewer-1.4.9.dist-info/top_level.txt,sha256=h8MkrMhC_t2-KbfS1oxJVnFAbn5NZJH8END_BL40mv8,24
157
- ixbrl_viewer-1.4.9.dist-info/RECORD,,
151
+ ixbrl_viewer-1.4.11.dist-info/LICENSE,sha256=TZJhu77S_2-WQcPAkuIAlQiuuiNqVcuHBjd7z3Y5S08,16645
152
+ ixbrl_viewer-1.4.11.dist-info/METADATA,sha256=fzkmp8hYOp3bHXFUMU4uwbAliyncUKWLXua44Nq8wnY,14685
153
+ ixbrl_viewer-1.4.11.dist-info/NOTICE,sha256=-SHDY0OY7s4gm4Rdk5AB3nbnUsrdHEHPdJuGFR_vuM4,566
154
+ ixbrl_viewer-1.4.11.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
155
+ ixbrl_viewer-1.4.11.dist-info/entry_points.txt,sha256=2XUzP20WGwxdvnugdBybUBwAB3xf_zvrOR5W_smFz_4,65
156
+ ixbrl_viewer-1.4.11.dist-info/top_level.txt,sha256=h8MkrMhC_t2-KbfS1oxJVnFAbn5NZJH8END_BL40mv8,24
157
+ ixbrl_viewer-1.4.11.dist-info/RECORD,,
@@ -14,7 +14,7 @@ from .mock_arelle import mock_arelle
14
14
 
15
15
  mock_arelle()
16
16
 
17
- from iXBRLViewerPlugin.iXBRLViewer import NamespaceMap, IXBRLViewerBuilder
17
+ from iXBRLViewerPlugin.iXBRLViewer import NamespaceMap, IXBRLViewerBuilder, iXBRLViewerFile
18
18
 
19
19
  class TestNamespaceMap(unittest.TestCase):
20
20
 
@@ -449,7 +449,8 @@ class TestIXBRLViewer(unittest.TestCase):
449
449
  @patch('arelle.XbrlConst.conceptReference', 'http://www.xbrl.org/2003/arcrole/concept-reference')
450
450
  def test_addConcept_simple_case(self):
451
451
  builder = IXBRLViewerBuilder([self.modelXbrl_1])
452
- builder.addReport()
452
+ builder.currentTargetReport = builder.newTargetReport()
453
+ builder.addSourceReport()["targetReports"].append(builder.currentTargetReport)
453
454
  builder.addConcept(self.modelXbrl_1, self.cash_concept)
454
455
  self.assertTrue(builder.taxonomyData["sourceReports"][0]["targetReports"][0].get('concepts').get('us-gaap:Cash'))
455
456
 
@@ -465,7 +466,7 @@ class TestIXBRLViewer(unittest.TestCase):
465
466
  @patch('arelle.XbrlConst.summationItem', 'http://www.xbrl.org/2003/arcrole/summation-item')
466
467
  def test_getRelationships_returns_a_rel(self):
467
468
  builder = IXBRLViewerBuilder([self.modelXbrl_1])
468
- builder.addReport()
469
+ builder.currentTargetReport = builder.newTargetReport()
469
470
  result = builder.getRelationships(self.modelXbrl_1)
470
471
  roleMap = builder.roleMap
471
472
  siPrefix = roleMap.getPrefix('http://www.xbrl.org/2003/arcrole/summation-item')
@@ -477,10 +478,10 @@ class TestIXBRLViewer(unittest.TestCase):
477
478
  """
478
479
  elr = "http://example.com/unknownELR"
479
480
  builder = IXBRLViewerBuilder([self.modelXbrl_1])
480
- builder.addReport()
481
+ builder.currentTargetReport = builder.newTargetReport()
481
482
  builder.addELR(self.modelXbrl_1, elr)
482
483
  elrPrefix = builder.roleMap.getPrefix(elr)
483
- self.assertEqual(builder.currentReportData.get('roleDefs').get(elrPrefix), None)
484
+ self.assertEqual(builder.currentTargetReport.get('roleDefs').get(elrPrefix), None)
484
485
 
485
486
  def test_addELR_with_definition(self):
486
487
  """
@@ -488,10 +489,10 @@ class TestIXBRLViewer(unittest.TestCase):
488
489
  """
489
490
  elr = "ELR"
490
491
  builder = IXBRLViewerBuilder([self.modelXbrl_1])
491
- builder.addReport()
492
+ builder.currentTargetReport = builder.newTargetReport()
492
493
  builder.addELR(self.modelXbrl_1, elr)
493
494
  elrPrefix = builder.roleMap.getPrefix(elr)
494
- self.assertEqual(builder.currentReportData.get('roleDefs').get(elrPrefix).get("en"), "ELR Label")
495
+ self.assertEqual(builder.currentTargetReport.get('roleDefs').get(elrPrefix).get("en"), "ELR Label")
495
496
 
496
497
  @patch('arelle.XbrlConst.conceptLabel', 'http://www.xbrl.org/2003/arcrole/concept-label')
497
498
  @patch('arelle.XbrlConst.conceptReference', 'http://www.xbrl.org/2003/arcrole/concept-reference')
@@ -560,9 +561,7 @@ class TestIXBRLViewer(unittest.TestCase):
560
561
  'local-unrecognized-linkbase.xml': ['unrecognizedLinkbase'],
561
562
  })
562
563
 
563
- # There's not actually a good reason for not including "docSetFiles"
564
- # now, but it's what we do currently.
565
- self.assertNotIn("docSetFiles", jsdata["sourceReports"][0]);
564
+ self.assertEqual(jsdata["sourceReports"][0]["docSetFiles"], ["a.html"]);
566
565
 
567
566
  @patch('arelle.XbrlConst.conceptLabel', 'http://www.xbrl.org/2003/arcrole/concept-label')
568
567
  @patch('arelle.XbrlConst.conceptReference', 'http://www.xbrl.org/2003/arcrole/concept-reference')
@@ -710,9 +709,15 @@ class TestIXBRLViewer(unittest.TestCase):
710
709
  xml = etree.parse(StringIO(xmls))
711
710
 
712
711
  js_uri = 'https://example.com/script-url'
713
- result = self.builder_1.addViewerToXMLDocument(xml, js_uri)
712
+ viewer_file = iXBRLViewerFile("test.xhtml", xml)
713
+ result = self.builder_1.addViewerData(viewer_file, js_uri)
714
714
 
715
- body = xml.getroot()[0]
715
+ # addViewerData takes a copy, so original body tag should be empty
716
+ original_body = xml.getroot()[0]
717
+ self.assertEqual(len(original_body), 0)
718
+
719
+ body = viewer_file.xmlDocument.getroot()[0]
720
+ self.assertEqual(len(body), 4)
716
721
  self.assertEqual(body[0].text, 'BEGIN IXBRL VIEWER EXTENSIONS')
717
722
  self.assertEqual(body[1].tag, '{http://www.w3.org/1999/xhtml}script')
718
723
  self.assertEqual(body[1].prefix, None)