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

@@ -40,6 +40,17 @@ export class Aspect {
40
40
  return a !== undefined && this._aspect === a._aspect && this._value === a._value;
41
41
  }
42
42
 
43
+ /**
44
+ * Compares this Aspect to another
45
+ *
46
+ *
47
+ * @param {Aspect} b - The Aspect instance to compare against.
48
+ * @returns {number} - Negative if this < b, positive if this > b, zero if
49
+ * equal.
50
+ */
51
+ compareTo(b) {
52
+ return this._aspect.localeCompare(b._aspect);
53
+ }
43
54
 
44
55
  isTaxonomyDefined() {
45
56
  return this._aspect.includes(":");
@@ -215,10 +215,23 @@ export class Fact {
215
215
  return this.concept().isTextBlock();
216
216
  }
217
217
 
218
+ /**
219
+ * Get all defined Aspects (sorted by aspect name).
220
+ *
221
+ * @returns {Aspect[]} An array of instantiated Aspect objects.
222
+ */
218
223
  aspects() {
219
- return Object.keys(this.f.a).map(k => this.aspect(k));
224
+ return Object.keys(this.f.a)
225
+ .map(k => this.aspect(k))
226
+ .sort((a, b) => a.compareTo(b));
220
227
  }
221
228
 
229
+ /**
230
+ * Retrieves or lazily creates an Aspect instance for the given aspect key.
231
+ *
232
+ * @param {string} a - The aspect key to retrieve or create.
233
+ * @returns {Aspect|undefined} The Aspect instance associated with the key, or undefined if not defined in `this.f.a`.
234
+ */
222
235
  aspect(a) {
223
236
  if (this._aspects === undefined) {
224
237
  this._aspects = {}
@@ -8,6 +8,8 @@ import { NAMESPACE_ISO4217 } from "./util";
8
8
  var testReportData = {
9
9
  "prefixes": {
10
10
  "eg": "http://www.example.com",
11
+ "aa": "http://www.example.com/aa",
12
+ "zz": "http://www.example.com/zz",
11
13
  "iso4217": NAMESPACE_ISO4217,
12
14
  "e": "http://example.com/entity",
13
15
  },
@@ -57,6 +59,30 @@ var testReportData = {
57
59
  },
58
60
  "d": "e"
59
61
  },
62
+ "eg:Dimension2": {
63
+ "labels": {
64
+ "std": {
65
+ "en": "Dimension Two"
66
+ }
67
+ },
68
+ "d": "e"
69
+ },
70
+ "zz:Axis1": {
71
+ "labels": {
72
+ "std": {
73
+ "en": "Axis One"
74
+ }
75
+ },
76
+ "d": "e"
77
+ },
78
+ "aa:Dimension3": {
79
+ "labels": {
80
+ "std": {
81
+ "en": "Dimension Three"
82
+ }
83
+ },
84
+ "d": "e"
85
+ },
60
86
  "eg:Member1": {
61
87
  "labels": {
62
88
  "std": {
@@ -71,6 +97,20 @@ var testReportData = {
71
97
  }
72
98
  }
73
99
  },
100
+ "eg:Member3": {
101
+ "labels": {
102
+ "std": {
103
+ "en": "Member Three"
104
+ }
105
+ }
106
+ },
107
+ "eg:Member4": {
108
+ "labels": {
109
+ "std": {
110
+ "en": "Member Four"
111
+ }
112
+ }
113
+ },
74
114
  "eg:UnlabelledMember": {
75
115
  "labels": {
76
116
  }
@@ -720,6 +760,68 @@ describe("Aspect methods", () => {
720
760
  });
721
761
  });
722
762
 
763
+ describe("Aspect sorting", () => {
764
+ var f = testFact({
765
+ "d": -3,
766
+ "v": 1000,
767
+ "a": {
768
+ "c": "eg:Concept1",
769
+ "u": "iso4217:USD",
770
+ "p": "2018-01-01/2019-01-01",
771
+ "eg:Dimension2": "eg:Member1",
772
+ "aa:Dimension3": "eg:Member2",
773
+ "zz:Axis1": "eg:Member3",
774
+ "eg:Dimension1": "eg:Member4"
775
+ }});
776
+ test("Fact.aspects() is sorted", () => {
777
+ expect(f.aspects().length).toEqual(7);
778
+ expect(f.aspects().filter(a => a.isTaxonomyDefined()).length).toEqual(4);
779
+
780
+ expect(f.aspects().filter(a => a.isTaxonomyDefined())[0].name()).toEqual("aa:Dimension3");
781
+ expect(f.aspects().filter(a => a.isTaxonomyDefined())[0].label()).toEqual("Dimension Three");
782
+ expect(f.aspects().filter(a => a.isTaxonomyDefined())[0].value()).toEqual("eg:Member2");
783
+ expect(f.aspects().filter(a => a.isTaxonomyDefined())[0].valueLabel()).toEqual("Member Two");
784
+
785
+ expect(f.aspects().filter(a => a.isTaxonomyDefined()).at(-1).label()).toEqual("Axis One");
786
+ expect(f.aspects().filter(a => a.isTaxonomyDefined()).at(-1).valueLabel()).toEqual("Member Three");
787
+
788
+ expect(f.aspects().filter(a => a.isTaxonomyDefined()).map(k => k.name())).toEqual(["aa:Dimension3", "eg:Dimension1", "eg:Dimension2", "zz:Axis1"]);
789
+ expect(f.aspects().filter(a => !a.isTaxonomyDefined()).map(k => k.name())).toEqual(["c", "p", "u"]);
790
+ });
791
+ });
792
+
793
+ describe("Aspect sorting consistent between facts", () => {
794
+ var fact1 = testFact({
795
+ "d": -3,
796
+ "v": 1000,
797
+ "a": {
798
+ "c": "eg:Concept1",
799
+ "u": "iso4217:USD",
800
+ "p": "2018-01-01/2019-01-01",
801
+ "eg:Dimension2": "eg:Member1",
802
+ "aa:Dimension3": "eg:Member2",
803
+ "zz:Axis1": "eg:Member3",
804
+ "eg:Dimension1": "eg:Member4"
805
+ }});
806
+ var fact2 = testFact({
807
+ "d": -3,
808
+ "v": 1001,
809
+ "a": {
810
+ "c": "eg:Concept2",
811
+ "u": "iso4217:USD",
812
+ "p": "2018-01-01/2019-01-01",
813
+ "zz:Axis1": "eg:Member1",
814
+ "eg:Dimension2": "eg:Member2",
815
+ "aa:Dimension3": "eg:Member3",
816
+ "eg:Dimension1": "eg:Member4"
817
+ }});
818
+ test("fact1 dims are sorted as expected and in exactly the same order as fact2 dims", () => {
819
+ expect(fact1.aspects().filter(a => a.isTaxonomyDefined()).map(k => k.name())).toEqual(["aa:Dimension3", "eg:Dimension1", "eg:Dimension2", "zz:Axis1"]);
820
+ expect(fact1.aspects().filter(a => a.isTaxonomyDefined()).map(k => k.name())).toEqual(fact2.aspects().filter(a => a.isTaxonomyDefined()).map(k => k.name()));
821
+ });
822
+ });
823
+
824
+
723
825
  describe("Fact errors", () => {
724
826
  test("iXBRL Invalid", () => {
725
827
  var f = testFact({
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ixbrl-viewer
3
- Version: 1.4.76
3
+ Version: 1.4.77
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-Expression: Apache-2.0
@@ -1,5 +1,5 @@
1
1
  iXBRLViewerPlugin/__init__.py,sha256=263DtPKBXeTomSI-4SeE7gTX0ak16GiIB9DFOoxBK3k,16839
2
- iXBRLViewerPlugin/_version.py,sha256=edAo7jInhTS2oZ9vog5QWMHuPXvf-Ds8Km-y7KEmfbU,706
2
+ iXBRLViewerPlugin/_version.py,sha256=8i4UboN7LyikKfY_6__GpilwC8bffYse-IldkSAZMkU,706
3
3
  iXBRLViewerPlugin/constants.py,sha256=DMyEKzoJZPN36vINiNF9wiP7PPofQg0ZLF0H2CP-ns4,3866
4
4
  iXBRLViewerPlugin/featureConfig.py,sha256=551aLjiGAkoxsgFDMBJT8s3nVaF787kgbRjFumTTsBE,255
5
5
  iXBRLViewerPlugin/iXBRLViewer.py,sha256=7IqbLuapCla5_c-lSM4KiKgSezbioKulJ5pa4ZEPejs,30643
@@ -12,7 +12,7 @@ iXBRLViewerPlugin/viewer/version.js,sha256=7b5si8UmaS7QqALQIP-wJ0I8onKFox8VyaAiU
12
12
  iXBRLViewerPlugin/viewer/webpack.common.js,sha256=hpXufjShXAESQh8Ds7ViJ_tbr8XSb7EdqQLRvyu_mQg,1691
13
13
  iXBRLViewerPlugin/viewer/webpack.dev.js,sha256=R9AwY_TBrg9otvXpDxT1UsGg5eMqi4aXW7C7EIsHzZk,551
14
14
  iXBRLViewerPlugin/viewer/webpack.prod.js,sha256=vfLowWC1EOty0zbq9P-usGaJ3w-JoERpJrYaE9MfoSE,499
15
- iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js,sha256=2rzjOlf9RJYEgCwAm-rS52y9dB7IjD32gFYVJfBi6BM,943084
15
+ iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js,sha256=w-Q7gLIm5ejl5ajp62Ihve4Ipst3BcDOhVzru_KkedI,943170
16
16
  iXBRLViewerPlugin/viewer/dist/ixbrlviewer.js.LICENSE.txt,sha256=LtlhXpjEorsiefz-usoFDNTZC_le1KyOKPWgb3RWIq8,1832
17
17
  iXBRLViewerPlugin/viewer/src/data/utr.json,sha256=32ZuovUvTOiCiXnxQH1fyOlgLEbah8DhUInqxZNIjFc,20159
18
18
  iXBRLViewerPlugin/viewer/src/html/fact-details.html,sha256=r3cPuOzcosgBkYl0jfmRUGjYnLgv6Eu0IeTMmUHY4Ak,2863
@@ -122,7 +122,7 @@ iXBRLViewerPlugin/viewer/src/img/inline-viewer.svg,sha256=7gwas3nHxMunJIhb3clFbS
122
122
  iXBRLViewerPlugin/viewer/src/img/powered-by-workiva.png,sha256=4XE5yykXtKUxF2hytq9Uqjx64pa7AgOuidVuB5_04wU,10362
123
123
  iXBRLViewerPlugin/viewer/src/img/powered-by-workiva.svg,sha256=Zf2JArzszZCn7zCkHNVZiW8bhlDwPEdgIDJLJe86W30,7620
124
124
  iXBRLViewerPlugin/viewer/src/js/accordian.js,sha256=HLEwlBC6qh1bCnq79_r0eJd6sLgCcqjchXuOk4ZgVlY,1918
125
- iXBRLViewerPlugin/viewer/src/js/aspect.js,sha256=ufAwONyAkBae_QvRSv3N5ZsYxSl4rnSZTBO_HewNS2g,2462
125
+ iXBRLViewerPlugin/viewer/src/js/aspect.js,sha256=BgMhxSAxnPq9RAtYV8WnyXocH2aYa8eSn9-iVH_g6j8,2770
126
126
  iXBRLViewerPlugin/viewer/src/js/aspect.test.js,sha256=2XGS_g7thB8UYSJ-lxHR-LmvM7N_cXPtCI1-7-rP4DQ,4271
127
127
  iXBRLViewerPlugin/viewer/src/js/balance.js,sha256=wOy4yTsvHkSW61pxGBQaCk-8mIBPbOpd3Jec0AcvA3c,323
128
128
  iXBRLViewerPlugin/viewer/src/js/calculation.js,sha256=tB5Tzr6aMrnERkBlLcPjJ0_SfGUT94FvXUbUR0id1iU,6778
@@ -136,8 +136,8 @@ iXBRLViewerPlugin/viewer/src/js/datatype.js,sha256=_hdRkZOZ-it8Jq4d10skIrQqKOcHL
136
136
  iXBRLViewerPlugin/viewer/src/js/datatype.test.js,sha256=A7rSgpvyPbhMpmt-dllaP1hwk4jDGBoi5eLi4TKqDWo,1738
137
137
  iXBRLViewerPlugin/viewer/src/js/dialog.js,sha256=Jr2RDS6wIJh8gtXoROCi-Xq9mz5QxdUPLYK9MmQTMYo,1131
138
138
  iXBRLViewerPlugin/viewer/src/js/docOrderIndex.js,sha256=rhNooqCDRU0f8Sb-adHnwqF7kq6vJA_rskGh6oPqdx8,674
139
- iXBRLViewerPlugin/viewer/src/js/fact.js,sha256=JczMGMw77NsdeKvjkJZ-mj7-zAX1TCfK7rSb0iNWF7U,12488
140
- iXBRLViewerPlugin/viewer/src/js/fact.test.js,sha256=Jkdd_khlu_nF1H0ojXNviqrYjQQRqS-vvT3MWjHXbWE,24320
139
+ iXBRLViewerPlugin/viewer/src/js/fact.js,sha256=A1PfYzsWKryOcpzLTBqaIXKhcTjBb_Z4qbtFeLWSgac,12983
140
+ iXBRLViewerPlugin/viewer/src/js/fact.test.js,sha256=gQoGD4SQFNgnJMN9ob-_3rg2j62ezUWpqHDoN_VkUO0,28087
141
141
  iXBRLViewerPlugin/viewer/src/js/factset.js,sha256=VwJSiIVra3IO5Zwz5LV4aQj5D_Q7tPAtlpQEPUioKU8,5120
142
142
  iXBRLViewerPlugin/viewer/src/js/factset.test.js,sha256=WNpm9EE1Eu3DkguUubN2nXnHWY9TIzQdJ6LuidRCHHY,8877
143
143
  iXBRLViewerPlugin/viewer/src/js/footnote.js,sha256=YPj7GQAdTC2KPSHAZSWF2z_gnJoJPQupusq3qcIwjhs,770
@@ -208,10 +208,10 @@ iXBRLViewerPlugin/viewer/src/less/text-mixins.less,sha256=pYeQjz6JptSyUTxoVwfNeb
208
208
  iXBRLViewerPlugin/viewer/src/less/validation-report.less,sha256=HWkYEWxny-_zAYrwPXwAXuNCbThMRyomhu6KteUAjEg,351
209
209
  iXBRLViewerPlugin/viewer/src/less/viewer.less,sha256=2Q_kms-bYCUHCX1sGUGzF3nQ6GGAy0y348wjybWchl8,5595
210
210
  iXBRLViewerPlugin/viewer/tools/build-font.js,sha256=Q-Uh0o6Uj2fkKd0zjS7rbVV2mkNydmEWGpkg0uWVir4,818
211
- ixbrl_viewer-1.4.76.dist-info/licenses/LICENSE.md,sha256=FOClHlBMDtwKei0tOJ7pv8WZ_HuQJMNYD1az3NpK73o,16647
212
- ixbrl_viewer-1.4.76.dist-info/licenses/NOTICE,sha256=-SHDY0OY7s4gm4Rdk5AB3nbnUsrdHEHPdJuGFR_vuM4,566
213
- ixbrl_viewer-1.4.76.dist-info/METADATA,sha256=PlzeEGfanhfX2Y1BkPfV72Ve5qdGvieY--gD4hG4CMc,18490
214
- ixbrl_viewer-1.4.76.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
215
- ixbrl_viewer-1.4.76.dist-info/entry_points.txt,sha256=2XUzP20WGwxdvnugdBybUBwAB3xf_zvrOR5W_smFz_4,65
216
- ixbrl_viewer-1.4.76.dist-info/top_level.txt,sha256=iQGm144gaJwCPqPDGQHi8umPFRQAvQShVKDk3JQv3JE,18
217
- ixbrl_viewer-1.4.76.dist-info/RECORD,,
211
+ ixbrl_viewer-1.4.77.dist-info/licenses/LICENSE.md,sha256=FOClHlBMDtwKei0tOJ7pv8WZ_HuQJMNYD1az3NpK73o,16647
212
+ ixbrl_viewer-1.4.77.dist-info/licenses/NOTICE,sha256=-SHDY0OY7s4gm4Rdk5AB3nbnUsrdHEHPdJuGFR_vuM4,566
213
+ ixbrl_viewer-1.4.77.dist-info/METADATA,sha256=gUMgcmNkJ7sxPxlEWhOUBljanIGTxFfqnp80wL53Fq4,18490
214
+ ixbrl_viewer-1.4.77.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
215
+ ixbrl_viewer-1.4.77.dist-info/entry_points.txt,sha256=2XUzP20WGwxdvnugdBybUBwAB3xf_zvrOR5W_smFz_4,65
216
+ ixbrl_viewer-1.4.77.dist-info/top_level.txt,sha256=iQGm144gaJwCPqPDGQHi8umPFRQAvQShVKDk3JQv3JE,18
217
+ ixbrl_viewer-1.4.77.dist-info/RECORD,,