ixbrl-viewer 1.4.13__tar.gz → 1.4.15__tar.gz

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 (246) hide show
  1. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/workflows/node-tests.yml +1 -1
  2. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/workflows/npm-package.yml +4 -4
  3. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/workflows/puppeteer.yml +2 -2
  4. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/workflows/python-package.yml +4 -4
  5. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/PKG-INFO +3 -3
  6. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/__init__.py +27 -26
  7. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/_version.py +2 -2
  8. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/constants.py +2 -1
  9. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/iXBRLViewer.py +17 -8
  10. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/ui.py +5 -4
  11. ixbrl-viewer-1.4.15/iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js +2 -0
  12. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/html/inspector.html +27 -0
  13. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/i18n/en/translation.json +18 -1
  14. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/i18n/es/translation.json +18 -1
  15. ixbrl-viewer-1.4.15/iXBRLViewerPlugin/viewer/src/icons/calculator.svg +13 -0
  16. ixbrl-viewer-1.4.15/iXBRLViewerPlugin/viewer/src/icons/circle-cross.svg +11 -0
  17. ixbrl-viewer-1.4.15/iXBRLViewerPlugin/viewer/src/icons/circle-tick.svg +11 -0
  18. ixbrl-viewer-1.4.15/iXBRLViewerPlugin/viewer/src/icons/dimension.svg +9 -0
  19. ixbrl-viewer-1.4.15/iXBRLViewerPlugin/viewer/src/icons/member.svg +10 -0
  20. ixbrl-viewer-1.4.15/iXBRLViewerPlugin/viewer/src/icons/multi-tag.svg +10 -0
  21. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/accordian.js +2 -2
  22. ixbrl-viewer-1.4.15/iXBRLViewerPlugin/viewer/src/js/calculation.js +202 -0
  23. ixbrl-viewer-1.4.15/iXBRLViewerPlugin/viewer/src/js/calculation.test.js +306 -0
  24. ixbrl-viewer-1.4.15/iXBRLViewerPlugin/viewer/src/js/calculationInspector.js +190 -0
  25. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/concept.js +7 -1
  26. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/fact.js +59 -5
  27. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/factset.js +54 -5
  28. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/factset.test.js +71 -5
  29. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/inspector.js +85 -30
  30. ixbrl-viewer-1.4.15/iXBRLViewerPlugin/viewer/src/js/interval.js +70 -0
  31. ixbrl-viewer-1.4.15/iXBRLViewerPlugin/viewer/src/js/interval.test.js +153 -0
  32. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/test-utils.js +19 -0
  33. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/viewer.js +6 -8
  34. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/accordian.less +2 -2
  35. ixbrl-viewer-1.4.15/iXBRLViewerPlugin/viewer/src/less/calculation-inspector.less +83 -0
  36. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/colours.less +2 -0
  37. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/common.less +3 -3
  38. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/dialog.less +8 -4
  39. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/inspector.less +69 -25
  40. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/validation-report.less +1 -2
  41. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/viewer.less +12 -12
  42. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/ixbrl_viewer.egg-info/PKG-INFO +3 -3
  43. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/ixbrl_viewer.egg-info/SOURCES.txt +14 -1
  44. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/ixbrl_viewer.egg-info/requires.txt +2 -2
  45. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/package-lock.json +273 -252
  46. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/package.json +2 -1
  47. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/pyproject.toml +2 -2
  48. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/samples/build-viewer.py +2 -2
  49. ixbrl-viewer-1.4.15/samples/src/testdoc/build.sh +7 -0
  50. ixbrl-viewer-1.4.15/samples/src/testdoc/example.xsd +70 -0
  51. ixbrl-viewer-1.4.15/samples/src/testdoc/labels.json +22 -0
  52. ixbrl-viewer-1.4.15/samples/src/testdoc/testdoc.ixtmpl +349 -0
  53. ixbrl-viewer-1.4.13/iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js +0 -2
  54. ixbrl-viewer-1.4.13/iXBRLViewerPlugin/viewer/src/icons/dimension.svg +0 -13
  55. ixbrl-viewer-1.4.13/iXBRLViewerPlugin/viewer/src/icons/member.svg +0 -13
  56. ixbrl-viewer-1.4.13/iXBRLViewerPlugin/viewer/src/js/calculations.js +0 -111
  57. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.babelrc +0 -0
  58. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  59. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  60. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/ISSUE_TEMPLATE/questions.yml +0 -0
  61. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/ISSUE_TEMPLATE/request.yml +0 -0
  62. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  63. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/dependabot.yml +0 -0
  64. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/release-drafter.yml +0 -0
  65. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/workflows/python-tests.yml +0 -0
  66. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/workflows/release-drafter.yml +0 -0
  67. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.github/workflows/release.yml +0 -0
  68. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/.gitignore +0 -0
  69. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/ARCHITECTURE.md +0 -0
  70. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/CODEOWNERS +0 -0
  71. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/COPYRIGHT.md +0 -0
  72. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/LICENSE +0 -0
  73. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/MANIFEST.in +0 -0
  74. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/Makefile +0 -0
  75. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/NOTICE +0 -0
  76. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/PLUGINS.md +0 -0
  77. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/README.md +0 -0
  78. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/README.md +0 -0
  79. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630.xsd +0 -0
  80. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630_cal.xml +0 -0
  81. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630_d2.htm +0 -0
  82. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630_def.xml +0 -0
  83. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630_g1.jpg +0 -0
  84. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630_lab.xml +0 -0
  85. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630_pre.xml +0 -0
  86. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/fy22clxex21subsidiaries.htm +0 -0
  87. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/fy22clxex23accountingfirmc.htm +0 -0
  88. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/fy22clxex311ceocertificati.htm +0 -0
  89. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/fy22clxex312cfocertificati.htm +0 -0
  90. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/fy22clxex32ceocfocertifica.htm +0 -0
  91. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/fy22clxex992reconofeconomi.htm +0 -0
  92. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/clorox-2022-10-K-ixbrl-viewer/ixbrl-viewer.htm +0 -0
  93. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/example_plugin/README.md +0 -0
  94. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/example_plugin/example-plugin.gif +0 -0
  95. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/example_plugin/extended-viewer.js +0 -0
  96. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/example_plugin/index.js +0 -0
  97. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/example_plugin/package-lock.json +0 -0
  98. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/example_plugin/package.json +0 -0
  99. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/example_plugin/webpack.config.js +0 -0
  100. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/ixbrl-viewer-demo.gif +0 -0
  101. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/review-mode.png +0 -0
  102. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/workiva-january-2023-8-k-ixbrl-viewer/exhibit31abylawsofworkivai.htm +0 -0
  103. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/workiva-january-2023-8-k-ixbrl-viewer/exhibit31bbylawsofworkivai.htm +0 -0
  104. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/workiva-january-2023-8-k-ixbrl-viewer/ixbrl-viewer.htm +0 -0
  105. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/workiva-january-2023-8-k-ixbrl-viewer/wk-20230109.xsd +0 -0
  106. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/workiva-january-2023-8-k-ixbrl-viewer/wk-20230109_lab.xml +0 -0
  107. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/examples/workiva-january-2023-8-k-ixbrl-viewer/wk-20230109_pre.xml +0 -0
  108. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/featureConfig.py +0 -0
  109. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/stubviewer.html +0 -0
  110. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js.LICENSE.txt +0 -0
  111. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/i18next-parser.config.js +0 -0
  112. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/html/fact-details.html +0 -0
  113. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/html/footnote-details.html +0 -0
  114. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/i18n/en/currencies.json +0 -0
  115. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/i18n/en/referenceparts.json +0 -0
  116. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/i18n/es/currencies.json +0 -0
  117. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/i18n/es/referenceparts.json +0 -0
  118. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/arrow-down.svg +0 -0
  119. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/arrow-up.svg +0 -0
  120. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/chevron-down.svg +0 -0
  121. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/chevron-left.svg +0 -0
  122. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/chevron-right.svg +0 -0
  123. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/chevron-up.svg +0 -0
  124. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/clipboard.svg +0 -0
  125. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/close.svg +0 -0
  126. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/cog.svg +0 -0
  127. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/dimension-member.svg +0 -0
  128. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/download.svg +0 -0
  129. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/filter.svg +0 -0
  130. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/graph.svg +0 -0
  131. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/outline.svg +0 -0
  132. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/print.svg +0 -0
  133. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/question.svg +0 -0
  134. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/search.svg +0 -0
  135. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/select.svg +0 -0
  136. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/summary.svg +0 -0
  137. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/tag.svg +0 -0
  138. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/text-block.svg +0 -0
  139. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/tick.svg +0 -0
  140. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/icons/warning.svg +0 -0
  141. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/img/arelle.svg +0 -0
  142. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/img/favicon.ico +0 -0
  143. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/img/inline-viewer.png +0 -0
  144. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/img/inline-viewer.svg +0 -0
  145. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/img/powered-by-workiva.png +0 -0
  146. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/img/powered-by-workiva.svg +0 -0
  147. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/aspect.js +0 -0
  148. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/aspect.test.js +0 -0
  149. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/chart.js +0 -0
  150. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/chart.test.js +0 -0
  151. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/concept.test.js +0 -0
  152. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/dialog.js +0 -0
  153. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/docOrderIndex.js +0 -0
  154. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/fact.test.js +0 -0
  155. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/footnote.js +0 -0
  156. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/identifiers.js +0 -0
  157. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/identifiers.test.js +0 -0
  158. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/index.js +0 -0
  159. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/inspector.test.js +0 -0
  160. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/interact.min.js +0 -0
  161. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/ixbrlviewer.js +0 -0
  162. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/ixbrlviewer.test.js +0 -0
  163. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/ixnode.js +0 -0
  164. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/menu.js +0 -0
  165. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/messagebox.js +0 -0
  166. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/moment-jest.js +0 -0
  167. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/number-matcher-preprocess.test.js +0 -0
  168. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/number-matcher.js +0 -0
  169. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/number-matcher.test.js +0 -0
  170. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/outline.js +0 -0
  171. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/outline.test.js +0 -0
  172. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/period.js +0 -0
  173. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/period.test.js +0 -0
  174. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/qname.js +0 -0
  175. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/report.js +0 -0
  176. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/report.test.js +0 -0
  177. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/reportset.js +0 -0
  178. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/reportset.test.js +0 -0
  179. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/search.js +0 -0
  180. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/search.test.js +0 -0
  181. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/summary.js +0 -0
  182. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/summary.test.js +0 -0
  183. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/tableExport.js +0 -0
  184. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/textblockviewer.js +0 -0
  185. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/unit.js +0 -0
  186. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/unit.test.js +0 -0
  187. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/util.js +0 -0
  188. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/util.test.js +0 -0
  189. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/validationreport.js +0 -0
  190. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/js/viewerOptions.js +0 -0
  191. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/block-list.less +0 -0
  192. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/chart.less +0 -0
  193. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/clearfix.less +0 -0
  194. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/components.less +0 -0
  195. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/core.less +0 -0
  196. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/fonts.less +0 -0
  197. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/form-controls.less +0 -0
  198. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/icons.less.njk +0 -0
  199. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/loader.less +0 -0
  200. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/menu.less +0 -0
  201. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/summary.less +0 -0
  202. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/tabs.less +0 -0
  203. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/text-block-viewer.less +0 -0
  204. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/src/less/text-mixins.less +0 -0
  205. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/tools/build-font.js +0 -0
  206. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/version.js +0 -0
  207. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/webpack.common.js +0 -0
  208. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/webpack.dev.js +0 -0
  209. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/viewer/webpack.prod.js +0 -0
  210. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/iXBRLViewerPlugin/xhtmlserialize.py +0 -0
  211. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/ixbrl_viewer.egg-info/dependency_links.txt +0 -0
  212. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/ixbrl_viewer.egg-info/entry_points.txt +0 -0
  213. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/ixbrl_viewer.egg-info/top_level.txt +0 -0
  214. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/jest.config.json +0 -0
  215. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/samples/Makefile +0 -0
  216. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/samples/Makefile-src +0 -0
  217. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/samples/fetch-sample-files.py +0 -0
  218. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/samples/sample-files.list +0 -0
  219. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/samples/src/continuation/continuation.html +0 -0
  220. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/samples/src/ixds-test/document1.html +0 -0
  221. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/samples/src/ixds-test/faurecia.html +0 -0
  222. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/samples/src/ixds-test/valeo.html +0 -0
  223. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/samples/src/scrollable-div/scrollable-div.html +0 -0
  224. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/samples/src/xbrl-invalid-tests/xbrl-invalid-test.html +0 -0
  225. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/setup.cfg +0 -0
  226. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/__init__.py +0 -0
  227. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/framework/core_elements.js +0 -0
  228. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/framework/page_objects/doc_frame.js +0 -0
  229. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/framework/page_objects/fact_details_panel.js +0 -0
  230. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/framework/page_objects/search_panel.js +0 -0
  231. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/framework/page_objects/toolbar.js +0 -0
  232. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/framework/utils.js +0 -0
  233. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/framework/viewer_page.js +0 -0
  234. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/puppeteer_test_run_via_intellij.jpg +0 -0
  235. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/test_filings/filing_documents_smoke_test.zip +0 -0
  236. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/test_filings/highlights.zip +0 -0
  237. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/tests/fact_properties.test.js +0 -0
  238. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/tests/highlight.test.js +0 -0
  239. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/tests/search.test.js +0 -0
  240. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/puppeteer/tools/generate.sh +0 -0
  241. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/unit_tests/__init__.py +0 -0
  242. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/unit_tests/iXBRLViewerPlugin/__init__.py +0 -0
  243. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/unit_tests/iXBRLViewerPlugin/mock_arelle.py +0 -0
  244. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/unit_tests/iXBRLViewerPlugin/test_iXBRLViewer.py +0 -0
  245. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tests/unit_tests/iXBRLViewerPlugin/test_xhtmlserialize.py +0 -0
  246. {ixbrl-viewer-1.4.13 → ixbrl-viewer-1.4.15}/tox.ini +0 -0
@@ -19,9 +19,9 @@ jobs:
19
19
  - ubuntu-22.04
20
20
  - windows-2022
21
21
  node-version:
22
- - '16'
23
22
  - '18'
24
23
  - '20'
24
+ - '21'
25
25
  runs-on: ${{ matrix.os }}
26
26
  steps:
27
27
  - uses: actions/checkout@v4.1.1
@@ -42,13 +42,13 @@ jobs:
42
42
  npm version $(git describe --tags)
43
43
  npm pack
44
44
  - name: Upload ixbrlviewer.js artifact
45
- uses: actions/upload-artifact@v4.0.0
45
+ uses: actions/upload-artifact@v4.2.0
46
46
  with:
47
47
  name: ixbrlviewer.js
48
48
  if-no-files-found: error
49
49
  path: iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js
50
50
  - name: Upload npm artifact
51
- uses: actions/upload-artifact@v4.0.0
51
+ uses: actions/upload-artifact@v4.2.0
52
52
  with:
53
53
  name: npm package
54
54
  if-no-files-found: error
@@ -69,11 +69,11 @@ jobs:
69
69
  node-version: ${{ inputs.node_version }}
70
70
  registry-url: 'https://registry.npmjs.org' # Must explicitly set this for NODE_AUTH_TOKEN to work below
71
71
  - name: Download ixbrlviewer.js artifact
72
- uses: actions/download-artifact@v4.1.0
72
+ uses: actions/download-artifact@v4.1.1
73
73
  with:
74
74
  name: ixbrlviewer.js
75
75
  - name: Download npm artifact
76
- uses: actions/download-artifact@v4.1.0
76
+ uses: actions/download-artifact@v4.1.1
77
77
  with:
78
78
  name: npm package
79
79
  - name: Publish with npm
@@ -18,9 +18,9 @@ jobs:
18
18
  - ubuntu-22.04
19
19
  - windows-2022
20
20
  node-version:
21
- - '16'
22
21
  - '18'
23
22
  - '20'
23
+ - '21'
24
24
  python-version:
25
25
  - '3.12'
26
26
  runs-on: ${{ matrix.os }}
@@ -54,7 +54,7 @@ jobs:
54
54
  run: npx http-server . &> tests/puppeteer/artifacts/http_server.log &
55
55
  - name: Run puppeteer tests
56
56
  run: npm run test:puppeteer
57
- - uses: actions/upload-artifact@v4.0.0
57
+ - uses: actions/upload-artifact@v4.2.0
58
58
  if: failure()
59
59
  with:
60
60
  name: ${{ github.run_id }}.${{ github.run_attempt }}_${{ matrix.os }}_${{ matrix.node-version }}_${{ matrix.python-version }}_artifacts
@@ -60,13 +60,13 @@ jobs:
60
60
  - name: Build Python package
61
61
  run: python -m build
62
62
  - name: Upload source distribution artifact
63
- uses: actions/upload-artifact@v4.0.0
63
+ uses: actions/upload-artifact@v4.2.0
64
64
  with:
65
65
  name: source distribution
66
66
  if-no-files-found: error
67
67
  path: dist/*.tar.gz
68
68
  - name: Upload wheel artifact
69
- uses: actions/upload-artifact@v4.0.0
69
+ uses: actions/upload-artifact@v4.2.0
70
70
  with:
71
71
  name: wheel
72
72
  if-no-files-found: error
@@ -83,11 +83,11 @@ jobs:
83
83
  - name: Install twine
84
84
  run: pip install -U twine
85
85
  - name: Download source distribution artifact
86
- uses: actions/download-artifact@v4.1.0
86
+ uses: actions/download-artifact@v4.1.1
87
87
  with:
88
88
  name: source distribution
89
89
  - name: Download wheel artifact
90
- uses: actions/download-artifact@v4.1.0
90
+ uses: actions/download-artifact@v4.1.1
91
91
  with:
92
92
  name: wheel
93
93
  - name: Publish package on release
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ixbrl-viewer
3
- Version: 1.4.13
3
+ Version: 1.4.15
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
@@ -35,8 +35,8 @@ Requires-Dist: pycountry<24,>=22
35
35
  Provides-Extra: arelle
36
36
  Requires-Dist: arelle_release==2.*; extra == "arelle"
37
37
  Provides-Extra: dev
38
- Requires-Dist: flake8==6.1.0; extra == "dev"
39
- Requires-Dist: lxml-stubs==0.4.0; extra == "dev"
38
+ Requires-Dist: flake8==7.0.0; extra == "dev"
39
+ Requires-Dist: lxml-stubs==0.5.1; extra == "dev"
40
40
  Requires-Dist: mypy==1.8.0; extra == "dev"
41
41
  Requires-Dist: pytest==7.4.4; extra == "dev"
42
42
  Requires-Dist: typing-extensions==4.9.0; extra == "dev"
@@ -9,7 +9,6 @@ import sys
9
9
  import tempfile
10
10
  import traceback
11
11
  from optparse import OptionGroup, OptionParser
12
- from typing import Optional, Union
13
12
 
14
13
  from arelle import Cntlr
15
14
  from arelle.LocalViewer import LocalViewer
@@ -18,7 +17,7 @@ from arelle.webserver.bottle import static_file
18
17
 
19
18
  from .constants import CONFIG_FEATURE_PREFIX, CONFIG_LAUNCH_ON_LOAD, \
20
19
  CONFIG_SCRIPT_URL, DEFAULT_LAUNCH_ON_LOAD, DEFAULT_OUTPUT_NAME, \
21
- DEFAULT_VIEWER_PATH, FEATURE_CONFIGS
20
+ DEFAULT_JS_FILENAME, DEFAULT_VIEWER_PATH, FEATURE_CONFIGS
22
21
  from .iXBRLViewer import IXBRLViewerBuilder, IXBRLViewerBuilderError
23
22
 
24
23
 
@@ -96,13 +95,15 @@ def iXBRLViewerCommandLineOptionExtender(parser, *args, **kwargs):
96
95
 
97
96
  def generateViewer(
98
97
  cntlr: Cntlr,
99
- saveViewerDest: Union[io.BytesIO, str],
98
+ saveViewerDest: io.BytesIO | str | None,
100
99
  viewerURL: str = DEFAULT_VIEWER_PATH,
101
100
  showValidationMessages: bool = False,
102
101
  useStubViewer: bool = False,
103
102
  zipViewerOutput: bool = False,
104
- features: Optional[list[str]] = None,
105
- packageDownloadURL: str = None):
103
+ features: list[str] | None = None,
104
+ packageDownloadURL: str | None = None,
105
+ copyScript = True
106
+ ) -> None:
106
107
  """
107
108
  Generate and save a viewer at the given destination (file, directory, or in-memory file) with the given viewer URL.
108
109
  If the viewer URL is a location on the local file system, a copy will be placed included in the output destination.
@@ -115,6 +116,8 @@ def generateViewer(
115
116
  :param features: List of feature names to enable via generated JSON data.
116
117
  """
117
118
  # extend XBRL-loaded run processing for this option
119
+ if saveViewerDest is None:
120
+ return
118
121
  if (cntlr.modelManager is None
119
122
  or len(cntlr.modelManager.loadedModelXbrls) == 0
120
123
  or any(not mx.modelDocument for mx in cntlr.modelManager.loadedModelXbrls)):
@@ -135,24 +138,22 @@ def generateViewer(
135
138
  else:
136
139
  viewerAbsolutePath = getAbsoluteViewerPath(saveViewerDest, viewerURL)
137
140
 
138
- if os.path.isfile(viewerAbsolutePath):
141
+ if copyScript and os.path.isfile(viewerAbsolutePath):
139
142
  # The script was found on the local file system and will be copied into the
140
143
  # destination directory, so the local path (just the basename) of viewerURL should
141
144
  # be passed to the script tag
142
145
  copyScriptPath = viewerURL
143
146
  viewerURL = os.path.basename(viewerURL)
144
147
  try:
145
- out = saveViewerDest
146
- if out:
147
- viewerBuilder = IXBRLViewerBuilder(cntlr.modelManager.loadedModelXbrls)
148
- if features:
149
- for feature in features:
150
- viewerBuilder.enableFeature(feature)
151
- iv = viewerBuilder.createViewer(scriptUrl=viewerURL, showValidations=showValidationMessages, useStubViewer=useStubViewer, packageDownloadURL=packageDownloadURL)
152
- if iv is not None:
153
- iv.save(out, zipOutput=zipViewerOutput, copyScriptPath=copyScriptPath)
148
+ viewerBuilder = IXBRLViewerBuilder(cntlr.modelManager.loadedModelXbrls)
149
+ if features:
150
+ for feature in features:
151
+ viewerBuilder.enableFeature(feature)
152
+ iv = viewerBuilder.createViewer(scriptUrl=viewerURL, showValidations=showValidationMessages, useStubViewer=useStubViewer, packageDownloadURL=packageDownloadURL)
153
+ if iv is not None:
154
+ iv.save(saveViewerDest, zipOutput=zipViewerOutput, copyScriptPath=copyScriptPath)
154
155
  except IXBRLViewerBuilderError as ex:
155
- print(ex.message)
156
+ print(ex)
156
157
  except Exception as ex:
157
158
  cntlr.addToLog("Exception {} \nTraceback {}".format(ex, traceback.format_tb(sys.exc_info()[2])))
158
159
 
@@ -170,7 +171,7 @@ def getAbsoluteViewerPath(saveViewerPath: str, relativeViewerPath: str) -> str:
170
171
  return os.path.join(saveViewerDir, relativeViewerPath)
171
172
 
172
173
 
173
- def getFeaturesFromOptions(options: Union[argparse.Namespace, OptionParser]):
174
+ def getFeaturesFromOptions(options: argparse.Namespace | OptionParser):
174
175
  return [
175
176
  featureConfig.key
176
177
  for featureConfig in FEATURE_CONFIGS
@@ -206,7 +207,7 @@ def iXBRLViewerSaveCommand(cntlr):
206
207
  generateViewer(
207
208
  cntlr,
208
209
  dialog.filename(),
209
- dialog.scriptUrl(),
210
+ dialog.scriptUrl() or DEFAULT_VIEWER_PATH,
210
211
  zipViewerOutput=dialog.zipViewerOutput(),
211
212
  features=dialog.features()
212
213
  )
@@ -249,23 +250,23 @@ def commandLineRun(*args, **kwargs):
249
250
  class iXBRLViewerLocalViewer(LocalViewer):
250
251
  # plugin-specific local file handler
251
252
  def getLocalFile(self, file, relpath, request):
252
- _report, _sep, _file = file.partition("/")
253
- if file == 'ixbrlviewer.js':
254
- return static_file('ixbrlviewer.js', os.path.dirname(DEFAULT_VIEWER_PATH))
255
- elif _report.isnumeric(): # in reportsFolder folder
253
+ if file == DEFAULT_JS_FILENAME:
254
+ return static_file(DEFAULT_JS_FILENAME, os.path.dirname(DEFAULT_VIEWER_PATH))
255
+ _report, _, _file = file.partition("/")
256
+ if _report.isnumeric(): # in reportsFolder folder
256
257
  # check if file is in the current or parent directory
257
258
  _fileDir = self.reportsFolders[int(_report)]
258
259
  _fileExists = False
259
260
  if os.path.exists(os.path.join(_fileDir, _file)):
260
261
  _fileExists = True
261
- elif "/" in _file and os.path.exists(os.path.join(_fileDir, os.path.filepart(_file))):
262
+ elif "/" in _file and os.path.exists(os.path.join(_fileDir, os.path.basename(_file))):
262
263
  # xhtml in a subdirectory for output files may refer to an image file in parent directory
263
264
  _fileExists = True
264
- _file = os.path.filepart(_file)
265
+ _file = os.path.basename(_file)
265
266
  if not _fileExists:
266
267
  self.cntlr.addToLog("http://localhost:{}/{}".format(self.port, file), messageCode="localViewer:fileNotFound", level=logging.DEBUG)
267
268
  return static_file(_file, root=_fileDir, headers=self.noCacheHeaders) # extra_headers modification to py-bottle
268
- return static_file(file, root="/") # probably can't get here unless path is wrong
269
+ return static_file(file, root="/") # absolute path used for ixbrlviewer.js.
269
270
 
270
271
 
271
272
  def guiRun(cntlr, modelXbrl, attach, *args, **kwargs):
@@ -286,7 +287,7 @@ def guiRun(cntlr, modelXbrl, attach, *args, **kwargs):
286
287
  generateViewer(
287
288
  cntlr,
288
289
  saveViewerDest=tempViewer.name,
289
- viewerURL=cntlr.config.setdefault(CONFIG_SCRIPT_URL, DEFAULT_VIEWER_PATH),
290
+ viewerURL=cntlr.config.get(CONFIG_SCRIPT_URL) or DEFAULT_VIEWER_PATH,
290
291
  useStubViewer=True,
291
292
  features=features
292
293
  )
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.4.13'
16
- __version_tuple__ = version_tuple = (1, 4, 13)
15
+ __version__ = version = '1.4.15'
16
+ __version_tuple__ = version_tuple = (1, 4, 15)
@@ -13,7 +13,8 @@ CONFIG_ZIP_OUTPUT = 'iXBRLViewerZipOutput'
13
13
 
14
14
  DEFAULT_LAUNCH_ON_LOAD = True
15
15
  DEFAULT_OUTPUT_NAME = 'ixbrlviewer.html'
16
- DEFAULT_VIEWER_PATH = os.path.join(os.path.dirname(__file__), "viewer", "dist", "ixbrlviewer.js")
16
+ DEFAULT_JS_FILENAME = 'ixbrlviewer.js'
17
+ DEFAULT_VIEWER_PATH = os.path.join(os.path.dirname(__file__), "viewer", "dist", DEFAULT_JS_FILENAME)
17
18
 
18
19
  FEATURE_CONFIGS = [
19
20
  FeatureConfig(
@@ -12,7 +12,6 @@ import urllib.parse
12
12
  import zipfile
13
13
  from collections import defaultdict
14
14
  from copy import deepcopy
15
- from typing import Optional, Union
16
15
 
17
16
  import pycountry
18
17
  from arelle import XbrlConst
@@ -266,11 +265,15 @@ class IXBRLViewerBuilder:
266
265
  factData["v"] = None
267
266
  elif f.concept is not None and f.concept.isEnumeration:
268
267
  qnEnums = f.xValue
269
- if not isinstance(qnEnums, list):
270
- qnEnums = (qnEnums,)
271
- factData["v"] = " ".join(self.nsmap.qname(qn) for qn in qnEnums)
272
- for qn in qnEnums:
273
- self.addConcept(report, report.qnameConcepts.get(qn))
268
+ if qnEnums is None:
269
+ factData["v"] = f.value
270
+ factData["err"] = 'INVALID_IX_VALUE'
271
+ else:
272
+ if not isinstance(qnEnums, list):
273
+ qnEnums = (qnEnums,)
274
+ factData["v"] = " ".join(self.nsmap.qname(qn) for qn in qnEnums)
275
+ for qn in qnEnums:
276
+ self.addConcept(report, report.qnameConcepts.get(qn))
274
277
  else:
275
278
  factData["v"] = f.value
276
279
  if f.value == INVALIDixVALUE:
@@ -390,7 +393,13 @@ class IXBRLViewerBuilder:
390
393
  self.taxonomyData["sourceReports"].append(sourceReport)
391
394
  return sourceReport
392
395
 
393
- def createViewer(self, scriptUrl: str = DEFAULT_VIEWER_PATH, useStubViewer: bool = False, showValidations: bool = True, packageDownloadURL: str = None) -> Optional[iXBRLViewer]:
396
+ def createViewer(
397
+ self,
398
+ scriptUrl: str = DEFAULT_VIEWER_PATH,
399
+ useStubViewer: bool = False,
400
+ showValidations: bool = True,
401
+ packageDownloadURL: str | None = None,
402
+ ) -> iXBRLViewer | None:
394
403
  """
395
404
  Create an iXBRL file with XBRL data as a JSON blob, and script tags added.
396
405
  :param scriptUrl: The `src` value of the script tag that loads the viewer script.
@@ -526,7 +535,7 @@ class iXBRLViewer:
526
535
  def addFilingDoc(self, filingDocuments):
527
536
  self.filingDocuments = filingDocuments
528
537
 
529
- def save(self, destination: Union[io.BytesIO, str], zipOutput: bool = False, copyScriptPath: Optional[str] = None):
538
+ def save(self, destination: io.BytesIO | str, zipOutput: bool = False, copyScriptPath: str | None = None):
530
539
  """
531
540
  Save the iXBRL viewer.
532
541
  :param destination: The target that viewer data/files will be written to (path to file/directory, or a file object itself).
@@ -10,8 +10,9 @@ import os
10
10
 
11
11
  from .constants import CONFIG_FEATURE_PREFIX, CONFIG_FILE_DIRECTORY, CONFIG_LAUNCH_ON_LOAD, \
12
12
  CONFIG_OUTPUT_FILE, CONFIG_SCRIPT_URL, CONFIG_ZIP_OUTPUT, DEFAULT_LAUNCH_ON_LOAD, \
13
- DEFAULT_VIEWER_PATH, GUI_FEATURE_CONFIGS
13
+ GUI_FEATURE_CONFIGS
14
14
 
15
+ UNSET_SCRIPT_URL = ''
15
16
 
16
17
  class BaseViewerDialog(Toplevel):
17
18
  """
@@ -28,7 +29,7 @@ class BaseViewerDialog(Toplevel):
28
29
  featureVar.set(self.cntlr.config.setdefault(f'{CONFIG_FEATURE_PREFIX}{featureConfig.key}', featureConfig.guiDefault))
29
30
  self._features[featureConfig.key] = featureVar
30
31
  self._scriptUrl = StringVar()
31
- self._scriptUrl.set(self.cntlr.config.setdefault(CONFIG_SCRIPT_URL, DEFAULT_VIEWER_PATH))
32
+ self._scriptUrl.set(self.cntlr.config.setdefault(CONFIG_SCRIPT_URL, UNSET_SCRIPT_URL))
32
33
 
33
34
  def addButtons(self, frame: Frame, x: int, y: int) -> int:
34
35
  """
@@ -56,7 +57,7 @@ class BaseViewerDialog(Toplevel):
56
57
  :return: Row `y` that the last field was added on
57
58
  """
58
59
  y += 1
59
- scriptUrlLabel = Label(frame, text="Script URL")
60
+ scriptUrlLabel = Label(frame, text="Script URL (leave blank for default)")
60
61
  scriptUrlEntry = Entry(frame, textvariable=self._scriptUrl, width=80)
61
62
  scriptUrlLabel.grid(row=y, column=0, sticky=W, pady=3, padx=3)
62
63
  scriptUrlEntry.grid(row=y, column=1, columnspan=2, sticky=EW, pady=3, padx=3)
@@ -247,6 +248,6 @@ class SettingsDialog(BaseViewerDialog):
247
248
  Resets dialog variable values to default values
248
249
  """
249
250
  self._launchOnLoad.set(DEFAULT_LAUNCH_ON_LOAD)
250
- self._scriptUrl.set(DEFAULT_VIEWER_PATH)
251
+ self._scriptUrl.set(UNSET_SCRIPT_URL)
251
252
  for featureConfig in GUI_FEATURE_CONFIGS:
252
253
  self._features[featureConfig.key].set(featureConfig.guiDefault)