ixbrl-viewer 1.4.39__tar.gz → 1.4.40__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 (281) hide show
  1. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/PKG-INFO +32 -4
  2. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/README.md +31 -3
  3. ixbrl_viewer-1.4.40/docs/sample-config.json +23 -0
  4. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/__init__.py +25 -22
  5. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/_version.py +2 -2
  6. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/constants.py +120 -0
  7. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/featureConfig.py +4 -1
  8. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/iXBRLViewer.py +28 -14
  9. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js +2 -0
  10. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/i18next-parser.config.js +1 -1
  11. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/html/fact-details.html +78 -0
  12. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/html/footer-logo.html +4 -0
  13. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/html/footnote-details.html +1 -1
  14. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/html/inspector.html +564 -0
  15. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/cy/balancetypes.json +1 -0
  16. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/cy/currencies.json +13 -0
  17. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/cy/datatypes.json +9 -0
  18. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/cy/labelroles.json +24 -0
  19. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/cy/referenceparts.json +10 -0
  20. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/cy/scale.json +16 -0
  21. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/cy/tooltips.json +17 -0
  22. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/cy/translation.json +179 -0
  23. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/en/balancetypes.json +4 -0
  24. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/en/datatypes.json +10 -0
  25. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/en/labelroles.json +4 -0
  26. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/en/scale.json +16 -0
  27. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/en/tooltips.json +17 -0
  28. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/i18n/en/translation.json +50 -25
  29. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/es/balancetypes.json +4 -0
  30. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/es/datatypes.json +10 -0
  31. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/es/labelroles.json +24 -0
  32. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/es/scale.json +16 -0
  33. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/i18n/es/tooltips.json +17 -0
  34. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/i18n/es/translation.json +66 -40
  35. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/icons/dark-mode.svg +4 -0
  36. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/img/arelle-dark.svg +179 -0
  37. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/img/inline-viewer-dark.svg +59 -0
  38. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/accordian.js +2 -1
  39. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/aspect.js +18 -7
  40. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/js/balance.js +14 -0
  41. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/chart.js +10 -6
  42. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/concept.js +28 -1
  43. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/concept.test.js +23 -2
  44. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/js/datatype.js +20 -0
  45. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/js/datatype.test.js +62 -0
  46. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/dialog.js +3 -1
  47. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/fact.js +16 -0
  48. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/fact.test.js +3 -0
  49. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/js/index.js +19 -0
  50. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/inspector.js +498 -120
  51. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/inspector.test.js +1 -1
  52. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/ixbrlviewer.js +128 -30
  53. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/js/ixbrlviewer.test.js +193 -0
  54. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/menu.js +21 -3
  55. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/outline.js +2 -2
  56. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/report.js +60 -8
  57. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/report.test.js +51 -5
  58. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/reportset.js +20 -0
  59. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/reportset.test.js +3 -3
  60. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/search.js +23 -2
  61. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/search.test.js +2 -2
  62. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/summary.js +14 -0
  63. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/tableExport.js +2 -1
  64. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/js/taxonomynamer.js +34 -0
  65. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/js/taxonomynamer.test.js +32 -0
  66. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/js/theme.js +36 -0
  67. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/unit.js +17 -2
  68. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/util.js +16 -16
  69. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/viewer.js +13 -7
  70. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/accordian.less +8 -4
  71. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/less/block-list.less +38 -0
  72. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/calculation-inspector.less +2 -2
  73. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/chart.less +8 -5
  74. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/less/colours-dark-mode.less +40 -0
  75. ixbrl_viewer-1.4.40/iXBRLViewerPlugin/viewer/src/less/colours.less +40 -0
  76. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/common.less +1 -1
  77. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/components.less +3 -3
  78. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/core.less +2 -0
  79. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/dialog.less +13 -10
  80. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/form-controls.less +33 -11
  81. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/inspector.less +538 -299
  82. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/loader.less +2 -2
  83. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/menu.less +33 -15
  84. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/summary.less +16 -6
  85. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/tabs.less +5 -5
  86. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/text-mixins.less +2 -1
  87. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/validation-report.less +1 -1
  88. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/viewer.less +30 -18
  89. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/ixbrl_viewer.egg-info/PKG-INFO +32 -4
  90. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/ixbrl_viewer.egg-info/SOURCES.txt +30 -0
  91. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/build-viewer.py +3 -4
  92. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/framework/page_objects/doc_frame.js +1 -1
  93. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/tests/fact_properties.test.js +4 -4
  94. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/unit_tests/iXBRLViewerPlugin/test_iXBRLViewer.py +69 -28
  95. ixbrl_viewer-1.4.39/iXBRLViewerPlugin/constants.py +0 -35
  96. ixbrl_viewer-1.4.39/iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js +0 -2
  97. ixbrl_viewer-1.4.39/iXBRLViewerPlugin/viewer/src/html/fact-details.html +0 -47
  98. ixbrl_viewer-1.4.39/iXBRLViewerPlugin/viewer/src/html/inspector.html +0 -457
  99. ixbrl_viewer-1.4.39/iXBRLViewerPlugin/viewer/src/js/index.js +0 -11
  100. ixbrl_viewer-1.4.39/iXBRLViewerPlugin/viewer/src/js/ixbrlviewer.test.js +0 -80
  101. ixbrl_viewer-1.4.39/iXBRLViewerPlugin/viewer/src/less/block-list.less +0 -32
  102. ixbrl_viewer-1.4.39/iXBRLViewerPlugin/viewer/src/less/colours.less +0 -33
  103. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.babelrc +0 -0
  104. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  105. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  106. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/ISSUE_TEMPLATE/questions.yml +0 -0
  107. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/ISSUE_TEMPLATE/request.yml +0 -0
  108. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  109. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/dependabot.yml +0 -0
  110. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/release-drafter.yml +0 -0
  111. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/workflows/node-tests.yml +0 -0
  112. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/workflows/npm-package.yml +0 -0
  113. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/workflows/puppeteer.yml +0 -0
  114. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/workflows/python-package.yml +0 -0
  115. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/workflows/python-tests.yml +0 -0
  116. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/workflows/release-drafter.yml +0 -0
  117. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.github/workflows/release.yml +0 -0
  118. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.gitignore +0 -0
  119. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/.npmignore +0 -0
  120. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/ARCHITECTURE.md +0 -0
  121. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/CODEOWNERS +0 -0
  122. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/COPYRIGHT.md +0 -0
  123. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/LICENSE +0 -0
  124. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/MANIFEST.in +0 -0
  125. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/Makefile +0 -0
  126. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/NOTICE +0 -0
  127. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/PLUGINS.md +0 -0
  128. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/README.md +0 -0
  129. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630.xsd +0 -0
  130. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630_cal.xml +0 -0
  131. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630_d2.htm +0 -0
  132. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630_def.xml +0 -0
  133. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630_g1.jpg +0 -0
  134. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630_lab.xml +0 -0
  135. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/clx-20220630_pre.xml +0 -0
  136. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/fy22clxex21subsidiaries.htm +0 -0
  137. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/fy22clxex23accountingfirmc.htm +0 -0
  138. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/fy22clxex311ceocertificati.htm +0 -0
  139. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/fy22clxex312cfocertificati.htm +0 -0
  140. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/fy22clxex32ceocfocertifica.htm +0 -0
  141. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/fy22clxex992reconofeconomi.htm +0 -0
  142. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/clorox-2022-10-K-ixbrl-viewer/ixbrl-viewer.htm +0 -0
  143. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/example_plugin/README.md +0 -0
  144. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/example_plugin/example-plugin.gif +0 -0
  145. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/example_plugin/extended-viewer.js +0 -0
  146. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/example_plugin/index.js +0 -0
  147. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/example_plugin/package-lock.json +0 -0
  148. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/example_plugin/package.json +0 -0
  149. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/example_plugin/webpack.config.js +0 -0
  150. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/ixbrl-viewer-demo.gif +0 -0
  151. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/review-mode.png +0 -0
  152. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/workiva-january-2023-8-k-ixbrl-viewer/exhibit31abylawsofworkivai.htm +0 -0
  153. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/workiva-january-2023-8-k-ixbrl-viewer/exhibit31bbylawsofworkivai.htm +0 -0
  154. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/workiva-january-2023-8-k-ixbrl-viewer/ixbrl-viewer.htm +0 -0
  155. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/workiva-january-2023-8-k-ixbrl-viewer/wk-20230109.xsd +0 -0
  156. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/workiva-january-2023-8-k-ixbrl-viewer/wk-20230109_lab.xml +0 -0
  157. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/examples/workiva-january-2023-8-k-ixbrl-viewer/wk-20230109_pre.xml +0 -0
  158. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/plugin.py +0 -0
  159. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/stubviewer.html +0 -0
  160. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/ui.py +0 -0
  161. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js.LICENSE.txt +0 -0
  162. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/i18n/en/currencies.json +0 -0
  163. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/i18n/en/referenceparts.json +0 -0
  164. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/i18n/es/currencies.json +0 -0
  165. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/i18n/es/referenceparts.json +0 -0
  166. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/arrow-down.svg +0 -0
  167. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/arrow-up.svg +0 -0
  168. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/calculator.svg +0 -0
  169. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/chevron-down.svg +0 -0
  170. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/chevron-left.svg +0 -0
  171. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/chevron-right.svg +0 -0
  172. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/chevron-up.svg +0 -0
  173. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/circle-cross.svg +0 -0
  174. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/circle-tick.svg +0 -0
  175. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/clipboard.svg +0 -0
  176. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/close.svg +0 -0
  177. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/cog.svg +0 -0
  178. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/dimension-member.svg +0 -0
  179. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/dimension.svg +0 -0
  180. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/download.svg +0 -0
  181. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/filter.svg +0 -0
  182. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/graph.svg +0 -0
  183. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/member.svg +0 -0
  184. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/multi-tag.svg +0 -0
  185. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/outline.svg +0 -0
  186. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/print.svg +0 -0
  187. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/question.svg +0 -0
  188. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/search.svg +0 -0
  189. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/select.svg +0 -0
  190. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/summary.svg +0 -0
  191. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/tag.svg +0 -0
  192. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/text-block.svg +0 -0
  193. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/tick.svg +0 -0
  194. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/icons/warning.svg +0 -0
  195. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/img/arelle.svg +0 -0
  196. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/img/favicon.ico +0 -0
  197. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/img/inline-viewer.png +0 -0
  198. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/img/inline-viewer.svg +0 -0
  199. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/img/powered-by-workiva.png +0 -0
  200. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/img/powered-by-workiva.svg +0 -0
  201. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/aspect.test.js +0 -0
  202. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/calculation.js +0 -0
  203. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/calculation.test.js +0 -0
  204. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/calculationInspector.js +0 -0
  205. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/chart.test.js +0 -0
  206. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/docOrderIndex.js +0 -0
  207. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/factset.js +0 -0
  208. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/factset.test.js +0 -0
  209. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/footnote.js +0 -0
  210. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/identifiers.js +0 -0
  211. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/identifiers.test.js +0 -0
  212. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/interval.js +0 -0
  213. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/interval.test.js +0 -0
  214. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/ixnode.js +0 -0
  215. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/messagebox.js +0 -0
  216. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/moment-jest.js +0 -0
  217. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/number-matcher-preprocess.test.js +0 -0
  218. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/number-matcher.js +0 -0
  219. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/number-matcher.test.js +0 -0
  220. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/outline.test.js +0 -0
  221. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/period.js +0 -0
  222. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/period.test.js +0 -0
  223. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/qname.js +0 -0
  224. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/summary.test.js +0 -0
  225. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/test-utils.js +0 -0
  226. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/textblockviewer.js +0 -0
  227. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/unit.test.js +0 -0
  228. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/util.test.js +0 -0
  229. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/validationreport.js +0 -0
  230. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/js/viewerOptions.js +0 -0
  231. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/clearfix.less +0 -0
  232. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/fonts.less +0 -0
  233. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/icons.less.njk +0 -0
  234. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/src/less/text-block-viewer.less +0 -0
  235. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/tools/build-font.js +0 -0
  236. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/version.js +0 -0
  237. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/webpack.common.js +0 -0
  238. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/webpack.dev.js +0 -0
  239. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/viewer/webpack.prod.js +0 -0
  240. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/iXBRLViewerPlugin/xhtmlserialize.py +0 -0
  241. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/ixbrl_viewer.egg-info/dependency_links.txt +0 -0
  242. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/ixbrl_viewer.egg-info/entry_points.txt +0 -0
  243. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/ixbrl_viewer.egg-info/requires.txt +0 -0
  244. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/ixbrl_viewer.egg-info/top_level.txt +0 -0
  245. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/jest.config.json +0 -0
  246. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/package-lock.json +0 -0
  247. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/package.json +0 -0
  248. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/pyproject.toml +0 -0
  249. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/Makefile +0 -0
  250. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/Makefile-src +0 -0
  251. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/fetch-sample-files.py +0 -0
  252. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/sample-files.list +0 -0
  253. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/src/continuation/continuation.html +0 -0
  254. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/src/ixds-test/document1.html +0 -0
  255. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/src/ixds-test/faurecia.html +0 -0
  256. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/src/ixds-test/valeo.html +0 -0
  257. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/src/scrollable-div/scrollable-div.html +0 -0
  258. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/src/testdoc/build.sh +0 -0
  259. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/src/testdoc/example.xsd +0 -0
  260. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/src/testdoc/labels.json +0 -0
  261. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/src/testdoc/testdoc.ixtmpl +0 -0
  262. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/samples/src/xbrl-invalid-tests/xbrl-invalid-test.html +0 -0
  263. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/setup.cfg +0 -0
  264. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/__init__.py +0 -0
  265. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/framework/core_elements.js +0 -0
  266. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/framework/page_objects/fact_details_panel.js +0 -0
  267. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/framework/page_objects/search_panel.js +0 -0
  268. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/framework/page_objects/toolbar.js +0 -0
  269. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/framework/utils.js +0 -0
  270. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/framework/viewer_page.js +0 -0
  271. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/puppeteer_test_run_via_intellij.jpg +0 -0
  272. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/test_filings/filing_documents_smoke_test.zip +0 -0
  273. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/test_filings/highlights.zip +0 -0
  274. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/tests/highlight.test.js +0 -0
  275. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/tests/search.test.js +0 -0
  276. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/puppeteer/tools/generate.sh +0 -0
  277. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/unit_tests/__init__.py +0 -0
  278. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/unit_tests/iXBRLViewerPlugin/__init__.py +0 -0
  279. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/unit_tests/iXBRLViewerPlugin/mock_arelle.py +0 -0
  280. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tests/unit_tests/iXBRLViewerPlugin/test_xhtmlserialize.py +0 -0
  281. {ixbrl_viewer-1.4.39 → ixbrl_viewer-1.4.40}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ixbrl-viewer
3
- Version: 1.4.39
3
+ Version: 1.4.40
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
@@ -296,6 +296,34 @@ This mode replaces the namespace-based highlighting with optional highlighting b
296
296
  |---------------------------|----------------|
297
297
  | `--viewer-feature-review` | `?review=true` |
298
298
 
299
+ # Runtime config
300
+
301
+ When launched, the viewer will check for the existence of
302
+ `ixbrlviewer.config.json` in the same directory as `ixbrlviewer.js`. If found,
303
+ this will be loaded and used to configure the viewer.
304
+
305
+ The file supports the following keys:
306
+
307
+ * `features` - a JSON object containing defaults for features. These will be
308
+ overridden by features defined at generation time, and then by query
309
+ parameters, as defined above.
310
+
311
+ * `skin` - a JSON object supporting the following keys:
312
+
313
+ * `stylesheetUrl` - a URL to additional CSS definitions.
314
+ * `faviconUrl` - a URL to an icon file to be used as the favicon for the viewer.
315
+ * `footerLogoHtml` - a fragment of HTML that will be included in place of the standard footer logo.
316
+
317
+ * `taxonomyNames` - a JSON object where:
318
+
319
+ * Keys are strings that will be treated as a regular expression to match
320
+ against a namespace.
321
+ * Values are an array of (prefix, name) where "prefix" is the preferred
322
+ namespace prefix for the namespace, and "name" is a short descriptive
323
+ name for the taxonomy.
324
+
325
+ Relative URLs defined in the config file are resolved relative to the config file.
326
+
299
327
  # Disable viewer loading
300
328
 
301
329
  Loading of the viewer can be disabled by specifying `?disable-viewer` as a
@@ -303,9 +331,9 @@ query parameter. This will leave the iXBRL document loaded in the browser, but
303
331
  without any viewer functionality. In the case of an iXBRL document set, or
304
332
  multi-document viewer, the first document will be shown.
305
333
 
306
- ## Running tests
334
+ # Running tests
307
335
 
308
- ### Running unit tests
336
+ ## Running unit tests
309
337
 
310
338
  In order to run the javascript unit tests make sure that you have installed all of the npm requirements.
311
339
 
@@ -315,7 +343,7 @@ In order to run the python unit tests make sure that you have pip installed requ
315
343
 
316
344
  Run the following command to run python unit tests: `pytest tests/unit_tests`
317
345
 
318
- ### Running Puppeteer tests
346
+ ## Running Puppeteer tests
319
347
 
320
348
  All commands should be run from repository root
321
349
 
@@ -255,6 +255,34 @@ This mode replaces the namespace-based highlighting with optional highlighting b
255
255
  |---------------------------|----------------|
256
256
  | `--viewer-feature-review` | `?review=true` |
257
257
 
258
+ # Runtime config
259
+
260
+ When launched, the viewer will check for the existence of
261
+ `ixbrlviewer.config.json` in the same directory as `ixbrlviewer.js`. If found,
262
+ this will be loaded and used to configure the viewer.
263
+
264
+ The file supports the following keys:
265
+
266
+ * `features` - a JSON object containing defaults for features. These will be
267
+ overridden by features defined at generation time, and then by query
268
+ parameters, as defined above.
269
+
270
+ * `skin` - a JSON object supporting the following keys:
271
+
272
+ * `stylesheetUrl` - a URL to additional CSS definitions.
273
+ * `faviconUrl` - a URL to an icon file to be used as the favicon for the viewer.
274
+ * `footerLogoHtml` - a fragment of HTML that will be included in place of the standard footer logo.
275
+
276
+ * `taxonomyNames` - a JSON object where:
277
+
278
+ * Keys are strings that will be treated as a regular expression to match
279
+ against a namespace.
280
+ * Values are an array of (prefix, name) where "prefix" is the preferred
281
+ namespace prefix for the namespace, and "name" is a short descriptive
282
+ name for the taxonomy.
283
+
284
+ Relative URLs defined in the config file are resolved relative to the config file.
285
+
258
286
  # Disable viewer loading
259
287
 
260
288
  Loading of the viewer can be disabled by specifying `?disable-viewer` as a
@@ -262,9 +290,9 @@ query parameter. This will leave the iXBRL document loaded in the browser, but
262
290
  without any viewer functionality. In the case of an iXBRL document set, or
263
291
  multi-document viewer, the first document will be shown.
264
292
 
265
- ## Running tests
293
+ # Running tests
266
294
 
267
- ### Running unit tests
295
+ ## Running unit tests
268
296
 
269
297
  In order to run the javascript unit tests make sure that you have installed all of the npm requirements.
270
298
 
@@ -274,7 +302,7 @@ In order to run the python unit tests make sure that you have pip installed requ
274
302
 
275
303
  Run the following command to run python unit tests: `pytest tests/unit_tests`
276
304
 
277
- ### Running Puppeteer tests
305
+ ## Running Puppeteer tests
278
306
 
279
307
  All commands should be run from repository root
280
308
 
@@ -0,0 +1,23 @@
1
+ {
2
+ "skin": {
3
+ "stylesheetUrl": "./myskin.css",
4
+ "footerLogoHtml": "<b>Footer override</b>"
5
+ },
6
+ "features": {
7
+ "support_link": "https://www.example.com/getSupport",
8
+ "survey_link": "http://www.example.com/survey"
9
+ },
10
+ "taxonomyNames": {
11
+ "http://xbrl\\.frc\\.org\\.uk/cd/(\\d{4})-\\d{2}-\\d{2}/business": ["uk-bus", "UK Business"],
12
+ "http://xbrl\\.frc\\.org\\.uk/fr/(\\d{4})-\\d{2}-\\d{2}/core": ["uk-core", "UK Core"],
13
+ "http://xbrl\\.frc\\.org\\.uk/general/(\\d{4})-\\d{2}-\\d{2}/types": ["uk-types", "UK Types"],
14
+ "http://xbrl\\.frc\\.org\\.uk/reports/(\\d{4})-\\d{2}-\\d{2}/direp": ["uk-direp", "UK Directors' Report"],
15
+ "http://xbrl\\.frc\\.org\\.uk/reports/(\\d{4})-\\d{2}-\\d{2}/accrep": ["uk-accrep", "UK Accountant's Report"],
16
+ "http://xbrl\\.frc\\.org\\.uk/reports/(\\d{4})-\\d{2}-\\d{2}/aurep": ["uk-aurep", "UK Auditor's Report"],
17
+ "http://xbrl\\.frc\\.org\\.uk/cd/(\\d{4})-\\d{2}-\\d{2}/countries": ["uk-countries", "UK Countries"],
18
+ "http://xbrl\\.frc\\.org\\.uk/cd/(\\d{4})-\\d{2}-\\d{2}/currencies": ["uk-curr", "UK Currencies"],
19
+ "http://xbrl\\.frc\\.org\\.uk/cd/(\\d{4})-\\d{2}-\\d{2}/languages": ["uk-lang", "UK Languages"],
20
+ "http://xbrl\\.frc\\.org\\.uk/dpl/(\\d{4})-\\d{2}-\\d{2}": ["uk-dpl", "UK Detailed Profit & Loss"],
21
+ "http://xbrl\\.frc\\.org\\.uk/general/(\\d{4})-\\d{2}-\\d{2}/common": ["uk-common", "UK Common"]
22
+ }
23
+ }
@@ -10,6 +10,7 @@ import tempfile
10
10
  import traceback
11
11
  from optparse import OptionGroup, OptionParser
12
12
  from pathlib import Path
13
+ from typing import Any
13
14
 
14
15
  from arelle import Cntlr
15
16
  from arelle.LocalViewer import LocalViewer
@@ -100,8 +101,14 @@ def iXBRLViewerCommandLineOptionExtender(parser, *args, **kwargs):
100
101
  featureGroup = OptionGroup(parser, "Viewer Features",
101
102
  "See viewer README for information on enabling/disabling features.")
102
103
  for featureConfig in FEATURE_CONFIGS:
103
- arg = f'--viewer-feature-{featureConfig.key}'
104
- featureGroup.add_option(arg, arg.lower(), action="store_true", default=False, help=featureConfig.description)
104
+ arg = f'--viewer-feature-{featureConfig.key}'.replace('_', '-')
105
+ featureGroup.add_option(
106
+ arg,
107
+ arg.lower(),
108
+ action=featureConfig.cliAction,
109
+ default=featureConfig.cliDefault,
110
+ help=featureConfig.description
111
+ )
105
112
  parser.add_option_group(featureGroup)
106
113
 
107
114
  def pluginData(cntlr: Cntlr):
@@ -130,7 +137,6 @@ def generateViewer(
130
137
  viewerURL: str | None = None,
131
138
  showValidationMessages: bool = False,
132
139
  zipViewerOutput: bool = False,
133
- features: list[str] | None = None,
134
140
  packageDownloadURL: str | None = None,
135
141
  copyScript: bool = True,
136
142
  ) -> None:
@@ -143,7 +149,6 @@ def generateViewer(
143
149
  :param showValidationMessages: True if validation messages should be shown in the viewer.
144
150
  :param useStubViewer: True if the stub viewer should be used.
145
151
  :param zipViewerOutput: True if the destination is a zip archive.
146
- :param features: Optional list of features to enable.
147
152
  :param packageDownloadURL: Optional URL to use as the report package download URL.
148
153
  :param copyScript: Controls if the script referenced by viewerURL is copied into the output directory, or directly set as the 'src' value of the script tag in the HTML iXBRL Viewer.
149
154
  """
@@ -185,9 +190,6 @@ def generateViewer(
185
190
  return
186
191
 
187
192
  try:
188
- if features:
189
- for feature in features:
190
- bldr.enableFeature(feature)
191
193
  iv = bldr.createViewer(scriptUrl=viewerURL, showValidations=showValidationMessages, packageDownloadURL=packageDownloadURL)
192
194
  if iv is not None:
193
195
  iv.save(saveViewerDest, zipOutput=zipViewerOutput, copyScriptPath=copyScriptPath)
@@ -199,17 +201,21 @@ def generateViewer(
199
201
  resetPluginData(cntlr)
200
202
 
201
203
 
202
- def getFeaturesFromOptions(options: argparse.Namespace | OptionParser):
203
- return [
204
- featureConfig.key
205
- for featureConfig in FEATURE_CONFIGS
206
- if getattr(options, f'viewer_feature_{featureConfig.key}') or getattr(options, f'viewer_feature_{featureConfig.key.lower()}')
207
- ]
204
+ def getFeaturesFromOptions(options: argparse.Namespace | OptionParser) -> dict[str, Any]:
205
+ features = {}
206
+ for featureConfig in FEATURE_CONFIGS:
207
+ key = featureConfig.key
208
+ option = f'viewer_feature_{key}'
209
+ value = getattr(options, option, None)
210
+ if value is not None:
211
+ features[key] = value
212
+ return features
213
+
208
214
 
209
215
  def iXBRLViewerCommandLineXbrlRun(cntlr, options, modelXbrl, *args, **kwargs):
210
216
  pd = pluginData(cntlr)
211
217
  if pd.builder is None:
212
- pd.builder = IXBRLViewerBuilder(cntlr, useStubViewer = options.useStubViewer)
218
+ pd.builder = IXBRLViewerBuilder(cntlr, useStubViewer = options.useStubViewer, features=getFeaturesFromOptions(options))
213
219
  processModel(cntlr, modelXbrl)
214
220
 
215
221
  def iXBRLViewerCommandLineFilingEnd(cntlr, options, *args, **kwargs):
@@ -220,7 +226,6 @@ def iXBRLViewerCommandLineFilingEnd(cntlr, options, *args, **kwargs):
220
226
  copyScript=not options.viewerNoCopyScript,
221
227
  showValidationMessages=options.validationMessages,
222
228
  zipViewerOutput=options.zipViewerOutput,
223
- features=getFeaturesFromOptions(options),
224
229
  packageDownloadURL=options.packageDownloadURL,
225
230
  )
226
231
 
@@ -315,19 +320,17 @@ def guiRun(cntlr, modelXbrl, attach, *args, **kwargs):
315
320
  global tempViewer
316
321
  tempViewer = tempfile.TemporaryDirectory()
317
322
  viewer_file_name = DEFAULT_OUTPUT_NAME
318
- features = [
319
- c.key
320
- for c in FEATURE_CONFIGS
321
- if cntlr.config.setdefault(f'{CONFIG_FEATURE_PREFIX}{c.key}', False)
322
- ]
323
- pluginData(cntlr).builder = IXBRLViewerBuilder(cntlr, useStubViewer = True)
323
+ features = {}
324
+ for featureConfig in FEATURE_CONFIGS:
325
+ if cntlr.config.setdefault(f'{CONFIG_FEATURE_PREFIX}{featureConfig.key}', False):
326
+ features[featureConfig.key] = True
327
+ pluginData(cntlr).builder = IXBRLViewerBuilder(cntlr, useStubViewer=True, features=features)
324
328
  processModel(cntlr, modelXbrl)
325
329
  generateViewer(
326
330
  cntlr=cntlr,
327
331
  saveViewerDest=tempViewer.name,
328
332
  viewerURL=cntlr.config.get(CONFIG_SCRIPT_URL),
329
333
  copyScript=cntlr.config.get(CONFIG_COPY_SCRIPT, DEFAULT_COPY_SCRIPT),
330
- features=features,
331
334
  )
332
335
  if Path(tempViewer.name, viewer_file_name).exists():
333
336
  localViewer = iXBRLViewerLocalViewer("iXBRL Viewer", os.path.dirname(__file__))
@@ -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.39'
16
- __version_tuple__ = version_tuple = (1, 4, 39)
15
+ __version__ = version = '1.4.40'
16
+ __version_tuple__ = version_tuple = (1, 4, 40)
@@ -0,0 +1,120 @@
1
+ # See COPYRIGHT.md for copyright information
2
+
3
+ import os
4
+
5
+ from .featureConfig import FeatureConfig
6
+
7
+ CONFIG_FEATURE_PREFIX = 'iXBRLViewerFeature_'
8
+ CONFIG_FILE_DIRECTORY = 'iXBRLViewerFileDir'
9
+ CONFIG_LAUNCH_ON_LOAD = 'iXBRLViewerLaunchOnLoad'
10
+ CONFIG_COPY_SCRIPT = 'iXBRLViewerCopyScript'
11
+ CONFIG_OUTPUT_FILE = 'iXBRLViewerOutputFile'
12
+ CONFIG_SCRIPT_URL = 'iXBRLViewerScriptURL'
13
+ CONFIG_ZIP_OUTPUT = 'iXBRLViewerZipOutput'
14
+
15
+ ERROR_MESSAGE_CODE = 'viewer:error'
16
+ EXCEPTION_MESSAGE_CODE = 'viewer:exception'
17
+ INFO_MESSAGE_CODE = 'viewer:info'
18
+
19
+ DEFAULT_LAUNCH_ON_LOAD = True
20
+ DEFAULT_COPY_SCRIPT = True
21
+ DEFAULT_OUTPUT_NAME = 'ixbrlviewer.html'
22
+ DEFAULT_JS_FILENAME = 'ixbrlviewer.js'
23
+ DEFAULT_VIEWER_PATH = os.path.join(os.path.dirname(__file__), "viewer", "dist", DEFAULT_JS_FILENAME)
24
+
25
+ FEATURE_CONFIGS = [
26
+ FeatureConfig(
27
+ key='home_link_label',
28
+ label='Home Link (Label)',
29
+ description='Customizes the label of the "Home" link enabled by "home_link_url".',
30
+ cliAction='store',
31
+ cliDefault=None,
32
+ guiVisible=False,
33
+ guiDefault=None,
34
+ ),
35
+ FeatureConfig(
36
+ key='home_link_url',
37
+ label='Home Link (URL)',
38
+ description='Adds a "Home" link that directs to the specified URL. Label can be customized with "home_link_label".',
39
+ cliAction='store',
40
+ cliDefault=None,
41
+ guiVisible=False,
42
+ guiDefault=None,
43
+ ),
44
+ FeatureConfig(
45
+ key='support_link',
46
+ label='Support Link',
47
+ description='Adds a "Support" link that directs to the specified URL.',
48
+ cliAction='store',
49
+ cliDefault=None,
50
+ guiVisible=False,
51
+ guiDefault=None,
52
+ ),
53
+ FeatureConfig(
54
+ key='survey_link',
55
+ label='Survey Link',
56
+ description='Adds a "Survey" link that directs to the specified URL.',
57
+ cliAction='store',
58
+ cliDefault=None,
59
+ guiVisible=False,
60
+ guiDefault=None,
61
+ ),
62
+ FeatureConfig(
63
+ key='review',
64
+ label='Review Mode',
65
+ description='Enables highlighting of untagged numbers and dates.',
66
+ cliAction='store_true',
67
+ cliDefault=False,
68
+ guiVisible=True,
69
+ guiDefault=False
70
+ ),
71
+ FeatureConfig(
72
+ key='mandatory_facts',
73
+ label='Mandatory Facts',
74
+ description='Enables the display of mandatory facts for the selected taxonomy.',
75
+ cliAction='store',
76
+ cliDefault=None,
77
+ guiVisible=False,
78
+ guiDefault=None
79
+ ),
80
+ FeatureConfig(
81
+ key='search_on_startup',
82
+ label='Search on startup',
83
+ description='Show the search pane by default on startup',
84
+ cliAction='store_true',
85
+ cliDefault=None,
86
+ guiVisible=False,
87
+ guiDefault=None
88
+ ),
89
+ FeatureConfig(
90
+ key='highlight_facts_on_startup',
91
+ label='Highlight facts on startup',
92
+ description='Default "Highlight all facts" to on',
93
+ cliAction='store_true',
94
+ cliDefault=None,
95
+ guiVisible=False,
96
+ guiDefault=None
97
+ )
98
+ ]
99
+ GUI_FEATURE_CONFIGS = [c for c in FEATURE_CONFIGS if c.guiVisible]
100
+
101
+ MANDATORY_FACTS = {
102
+ "companies-house": [
103
+ "UKCompaniesHouseRegisteredNumber",
104
+ "EntityCurrentLegalOrRegisteredName",
105
+ "BalanceSheetDate",
106
+ "DateAuthorisationFinancialStatementsForIssue",
107
+ "DirectorSigningFinancialStatements",
108
+ "EntityDormantTruefalse",
109
+ "EntityTradingStatus",
110
+ "AccountsStatusAuditedOrUnaudited",
111
+ "AccountsTypeFullOrAbbreviated",
112
+ "AccountingStandardsApplied",
113
+ "LegalFormEntity",
114
+ "StartDateForPeriodCoveredByReport",
115
+ "EndDateForPeriodCoveredByReport",
116
+ "CharityRegistrationNumberEnglandWales",
117
+ "CharityRegistrationNumberScotland",
118
+ "CharityRegistrationNumberNorthernIreland"
119
+ ]
120
+ }
@@ -1,4 +1,5 @@
1
1
  from dataclasses import dataclass
2
+ from typing import Any
2
3
 
3
4
 
4
5
  @dataclass(frozen=True, repr=False, eq=False)
@@ -6,5 +7,7 @@ class FeatureConfig:
6
7
  key: str
7
8
  label: str
8
9
  description: str
10
+ cliAction: str
11
+ cliDefault: Any
9
12
  guiVisible: bool
10
- guiDefault: bool
13
+ guiDefault: Any
@@ -13,6 +13,7 @@ import zipfile
13
13
  from collections import defaultdict
14
14
  from copy import deepcopy
15
15
  from pathlib import Path
16
+ from typing import Any
16
17
 
17
18
  from arelle import XbrlConst
18
19
  from arelle.ModelDocument import ModelDocument, Type
@@ -23,7 +24,7 @@ from arelle.UrlUtil import isHttpUrl
23
24
  from arelle.ValidateXbrlCalcs import inferredDecimals
24
25
  from lxml import etree
25
26
 
26
- from .constants import DEFAULT_JS_FILENAME, DEFAULT_OUTPUT_NAME, ERROR_MESSAGE_CODE, FEATURE_CONFIGS, INFO_MESSAGE_CODE
27
+ from .constants import DEFAULT_JS_FILENAME, DEFAULT_OUTPUT_NAME, ERROR_MESSAGE_CODE, FEATURE_CONFIGS, INFO_MESSAGE_CODE, MANDATORY_FACTS
27
28
  from .xhtmlserialize import XHTMLSerializer
28
29
 
29
30
  REPORT_TYPE_EXTENSIONS = ('.xbrl', '.xhtml', '.html', '.htm', '.json')
@@ -89,13 +90,20 @@ class IXBRLViewerBuilder:
89
90
  cntlr: Cntlr,
90
91
  basenameSuffix: str = '',
91
92
  useStubViewer: bool = False,
93
+ features: dict[str, Any] | None = None,
92
94
  ):
95
+ if features is None:
96
+ features = {}
97
+ featureNames = {c.key for c in FEATURE_CONFIGS}
98
+ for featureName in features:
99
+ assert featureName in featureNames, \
100
+ f'Given feature name `{featureName}` does not match any defined features: {featureNames}'
93
101
  self.reportZip = None
94
102
  self.nsmap = NamespaceMap()
95
103
  self.roleMap = NamespaceMap()
96
104
  self.taxonomyData = {
97
105
  "sourceReports": [],
98
- "features": [],
106
+ "features": features,
99
107
  }
100
108
  self.basenameSuffix = basenameSuffix
101
109
  self.currentTargetReport = None
@@ -120,14 +128,6 @@ class IXBRLViewerBuilder:
120
128
  self.reportCount = 0
121
129
  self.assets = []
122
130
 
123
- def enableFeature(self, featureName: str):
124
- if featureName in self.taxonomyData["features"]:
125
- return
126
- featureNames = [c.key for c in FEATURE_CONFIGS]
127
- assert featureName in featureNames, \
128
- f'Given feature name `{featureName}` does not match any defined features: {featureNames}'
129
- self.taxonomyData["features"].append(featureName)
130
-
131
131
  def outputFilename(self, filename):
132
132
  (base, ext) = os.path.splitext(filename)
133
133
  return base + self.basenameSuffix + ext
@@ -155,7 +155,7 @@ class IXBRLViewerBuilder:
155
155
  """
156
156
  return s.replace("<","\\u003C").replace(">","\\u003E").replace("&","\\u0026")
157
157
 
158
- def addELR(self, report: ModelXbrl, elr):
158
+ def addRoleDefinition(self, report: ModelXbrl, elr):
159
159
  prefix = self.roleMap.getPrefix(elr)
160
160
  if self.currentTargetReport.setdefault("roleDefs",{}).get(prefix, None) is None:
161
161
  rts = report.roleTypes.get(elr, [])
@@ -176,6 +176,7 @@ class IXBRLViewerBuilder:
176
176
  for lr in labels:
177
177
  l = lr.toModelObject
178
178
  conceptData["labels"].setdefault(self.roleMap.getPrefix(l.role),{})[l.xmlLang.lower()] = l.text;
179
+ self.addRoleDefinition(report, l.role)
179
180
 
180
181
  refData = []
181
182
  for _refRel in concept.modelXbrl.relationshipSet(XbrlConst.conceptReference).fromModelObject(concept):
@@ -193,9 +194,15 @@ class IXBRLViewerBuilder:
193
194
  if concept.isEnumeration:
194
195
  conceptData["e"] = True
195
196
 
196
- if concept.type is not None and concept.type.isTextBlock:
197
+ if concept.isTextBlock:
197
198
  conceptData['t'] = True
198
199
 
200
+ if concept.balance is not None:
201
+ conceptData['b'] = concept.balance
202
+
203
+ if concept.type is not None:
204
+ conceptData['dt'] = self.nsmap.qname(concept.type.qname)
205
+
199
206
  if concept.isTypedDimension:
200
207
  typedDomainElement = concept.typedDomainElement
201
208
  if typedDomainElement is not None:
@@ -216,7 +223,7 @@ class IXBRLViewerBuilder:
216
223
  for baseSetKey, baseSetModelLinks in report.baseSets.items():
217
224
  arcrole, ELR, linkqname, arcqname = baseSetKey
218
225
  if arcrole in (XbrlConst.summationItem, XbrlConst.summationItem11, WIDER_NARROWER_ARCROLE, XbrlConst.parentChild, XbrlConst.dimensionDefault) and ELR is not None:
219
- self.addELR(report, ELR)
226
+ self.addRoleDefinition(report, ELR)
220
227
  rr = dict()
221
228
  relSet = report.relationshipSet(arcrole, ELR)
222
229
  for r in relSet.modelRelationships:
@@ -256,11 +263,14 @@ class IXBRLViewerBuilder:
256
263
 
257
264
  self.idGen += 1
258
265
  conceptName = self.nsmap.qname(f.qname)
266
+ factList = MANDATORY_FACTS.get(self.taxonomyData["features"].get("mandatory_facts"), [])
267
+ isMandatory = f.qname.localName in factList
259
268
  scheme, ident = f.context.entityIdentifier
260
269
 
261
270
  aspects = {
262
271
  "c": conceptName,
263
272
  "e": self.nsmap.qname(QName(self.nsmap.getPrefix(scheme,"e"), scheme, ident)),
273
+ "m": isMandatory
264
274
  }
265
275
 
266
276
  factData = {
@@ -414,7 +424,11 @@ class IXBRLViewerBuilder:
414
424
  if softwareCredits:
415
425
  self.currentTargetReport["softwareCredits"] = list(softwareCredits)
416
426
  for f in report.facts:
417
- self.addFact(report, f)
427
+ if f.isTuple:
428
+ for nestedTupleFact in f.ixIter():
429
+ self.addFact(report, nestedTupleFact)
430
+ else:
431
+ self.addFact(report, f)
418
432
  self.currentTargetReport["rels"] = self.getRelationships(report)
419
433
 
420
434
  docSetFiles = None