graphdb-workbench 10.0.0-M2-1 → 10.5.1
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.
- package/README.md +10 -2
- package/dist/0.f8448f998a59db17e94e.bundle.js +25 -0
- package/dist/1.46d9ecd4119bac145f3b.bundle.js +81 -0
- package/dist/10.a26ae97905866618b14e.bundle.js +7 -0
- package/dist/100.aef098a33fbb925e0d2d.bundle.js +1 -0
- package/dist/101.42eacc63e0fb5834b78a.bundle.js +1 -0
- package/dist/102.4f78eeab62aac245879e.bundle.js +1 -0
- package/dist/103.f38f3cd69ff610955aaf.bundle.js +1 -0
- package/dist/104.2e21f1462021dca17db1.bundle.js +1 -0
- package/dist/105.76381cb7984bcbc9ba9a.bundle.js +1 -0
- package/dist/106.23e14c6b280756d04533.bundle.js +1 -0
- package/dist/107.75e40619cb45972dc39f.bundle.js +1 -0
- package/dist/108.f09444e990531d27e0be.bundle.js +1 -0
- package/dist/109.ef97393181ee534042d8.bundle.js +1 -0
- package/dist/11.0fc995ac096734b915c6.bundle.js +1 -0
- package/dist/110.d59b8565d2255a282669.bundle.js +1 -0
- package/dist/111.fff9f089f65f01013923.bundle.js +1 -0
- package/dist/112.5bd3fcd7c37f1024fe26.bundle.js +1 -0
- package/dist/113.2fa29eca15d32deb3320.bundle.js +1 -0
- package/dist/114.d78615087abe68db7b2f.bundle.js +1 -0
- package/dist/115.558ce3da00d3be87d18a.bundle.js +1 -0
- package/dist/116.577aab1d9bafd0053623.bundle.js +1 -0
- package/dist/117.c20f037799328c931eba.bundle.js +1 -0
- package/dist/118.39c8b47405ab93c40847.bundle.js +1 -0
- package/dist/119.19ee7b3ae143f817c5b1.bundle.js +1 -0
- package/dist/12.7877dd6008df9acf44e1.bundle.js +1 -0
- package/dist/120.b944d5e63424d4307fc8.bundle.js +1 -0
- package/dist/121.3a8954e4c885c56a9817.bundle.js +1 -0
- package/dist/122.71a8cf0330504672fffc.bundle.js +1 -0
- package/dist/123.c6957ecb441d8a09932a.bundle.js +1 -0
- package/dist/124.27e85a0284e2ebeb7d6e.bundle.js +1 -0
- package/dist/125.9e925ae0dd1217d81d89.bundle.js +1 -0
- package/dist/126.a32b57d6108545746ed3.bundle.js +1 -0
- package/dist/127.90d1975083eef3d4a715.bundle.js +1 -0
- package/dist/128.544f1a82e19dd245c7de.bundle.js +1 -0
- package/dist/129.64ec11449e0c734500c2.bundle.js +1 -0
- package/dist/13.fe78f15334507bcc08ae.bundle.js +1 -0
- package/dist/130.f8e68ac86e17b3622d40.bundle.js +1 -0
- package/dist/131.4868fc3a837277c30273.bundle.js +1 -0
- package/dist/132.7815ab1168a254cb0d47.bundle.js +1 -0
- package/dist/133.f87e1685dd5ed920f9b5.bundle.js +1 -0
- package/dist/134.8998ff724a077ecff2ce.bundle.js +1 -0
- package/dist/135.c07268699f76ef7a02ff.bundle.js +1 -0
- package/dist/136.908f1f6fe3054f99b560.bundle.js +1 -0
- package/dist/137.8262ca9736e9818284cd.bundle.js +1 -0
- package/dist/138.8c149cad49010a65b3ca.bundle.js +1 -0
- package/dist/139.97ee12e7a3c05be03456.bundle.js +1 -0
- package/dist/14.0bb211bcdc29c6d8b3b5.bundle.js +29 -0
- package/dist/140.6b3c57ffec700081328b.bundle.js +1 -0
- package/dist/141.4981056237955a34b2e2.bundle.js +1 -0
- package/dist/142.4d60c1795eed3a9570f9.bundle.js +1 -0
- package/dist/143.b7057852f7859cf39e75.bundle.js +1 -0
- package/dist/144.3f85f8eacae521d52355.bundle.js +1 -0
- package/dist/145.9281069e9e77978b640a.bundle.js +1 -0
- package/dist/146.51d2987de4defe7df7c7.bundle.js +1 -0
- package/dist/147.54016549674d35bc2869.bundle.js +1 -0
- package/dist/148.ad95b30f508a0bd02970.bundle.js +1 -0
- package/dist/149.8dd1281617389f8c189b.bundle.js +1 -0
- package/dist/15.6a74adbd30b4d2930e10.bundle.js +1 -0
- package/dist/150.5e0ee4350f8edd0e7b9a.bundle.js +1 -0
- package/dist/151.6b81c99a1ec1b184b82d.bundle.js +1 -0
- package/dist/152.2e1aa910a68f0086825b.bundle.js +1 -0
- package/dist/153.7a64973115bdaec26406.bundle.js +1 -0
- package/dist/154.5938248b52830d0a80a2.bundle.js +1 -0
- package/dist/155.a4511849c1001c5f2ba6.bundle.js +1 -0
- package/dist/156.bbcaf52acb0cecbc6257.bundle.js +1 -0
- package/dist/157.51181d03518519f84b5e.bundle.js +1 -0
- package/dist/158.640e412f6002ee1d7341.bundle.js +1 -0
- package/dist/159.10457cbb053c1315d93a.bundle.js +1 -0
- package/dist/16.2f60fbeaccd97aefaae2.bundle.js +1 -0
- package/dist/160.c46bfdf09357a4c62a53.bundle.js +1 -0
- package/dist/{103.05b86c1b360c05133b49.bundle.js → 161.0f35ee11981f0ea0455f.bundle.js} +1 -2
- package/dist/{104.089568ff7c49a29de892.bundle.js → 162.fef28120701e7d200b01.bundle.js} +1 -2
- package/dist/{105.81b74220f7fa646e719b.bundle.js → 163.38565d40ac5f71d1c875.bundle.js} +1 -2
- package/dist/164.b2116f472aa847618aee.bundle.js +1 -0
- package/dist/168.2d4b5a75da5430c73efc.bundle.js +1 -0
- package/dist/169.6897f56896e3664e8b53.bundle.js +1 -0
- package/dist/17.2bff7856b13fd72e2db4.bundle.js +1 -0
- package/dist/170.d5c0d475c5b6ad84ef77.bundle.js +1 -0
- package/dist/171.60cdc91b2bf682a20911.bundle.js +1 -0
- package/dist/172.1fb9ead3e508a7cfa5f3.bundle.js +1 -0
- package/dist/173.95602c81a2692624a015.bundle.js +1 -0
- package/dist/174.aac1982e67b5ca1731c1.bundle.js +1 -0
- package/dist/175.5e49a28397900168f816.bundle.js +1 -0
- package/dist/176.2e6d1a9f4eac4fdd8422.bundle.js +1 -0
- package/dist/177.3b6aabf3c4db8519ea74.bundle.js +1 -0
- package/dist/178.e10370553beb5c6bb839.bundle.js +1 -0
- package/dist/179.784cbd536b8e636c1272.bundle.js +1 -0
- package/dist/18.d6be3e6583bf3dacd54f.bundle.js +2 -0
- package/dist/180.d37db50f3ce1b3a04a65.bundle.js +1 -0
- package/dist/181.f307cabdc4ed7a10ff64.bundle.js +1 -0
- package/dist/182.e8fe148e90fcd334b9b9.bundle.js +1 -0
- package/dist/183.a086e00d4dc3c7855611.bundle.js +1 -0
- package/dist/184.ff8a39692d0ff666c9e6.bundle.js +1 -0
- package/dist/185.8b9f0b866e848f8a1aac.bundle.js +1 -0
- package/dist/186.798880846274da7033da.bundle.js +1 -0
- package/dist/{120.3b0b67fbfa81ec95e044.bundle.js → 187.eb92a35d38294bc21703.bundle.js} +1 -2
- package/dist/{121.ff452d05188836228deb.bundle.js → 188.641582484af80415d29a.bundle.js} +1 -2
- package/dist/189.7ccbb0ef67513ae7001a.bundle.js +1 -0
- package/dist/19.c2a5c3e7a49a4acba486.bundle.js +2 -0
- package/dist/{123.289bb9a87ce416004c0a.bundle.js → 190.a3609218c5d8e873a46f.bundle.js} +1 -2
- package/dist/191.4c817606bf66c16d9ad1.bundle.js +1 -0
- package/dist/{125.51ff26fe7687752811e4.bundle.js → 192.21f366a1ea7e6905f120.bundle.js} +1 -2
- package/dist/193.4d40b788bd7ddcf16788.bundle.js +1 -0
- package/dist/{127.4d0a2164fb95df43ea22.bundle.js → 194.0170093f1daf20e82b5f.bundle.js} +1 -2
- package/dist/{128.c7a3530622ede2f34e72.bundle.js → 195.d7d8af61458f9416878f.bundle.js} +1 -2
- package/dist/{129.2d32313059ae96dba010.bundle.js → 196.6e6b7589cd1342a0b2b5.bundle.js} +1 -2
- package/dist/{130.7302112cf14a10bd1306.bundle.js → 197.c071fa1fe9e081a3b053.bundle.js} +1 -2
- package/dist/{131.eb262b5100305bdc23ee.bundle.js → 198.3c5ca9ac5a745b4b23a1.bundle.js} +1 -2
- package/dist/199.00ac5221a334189ea09a.bundle.js +1 -0
- package/dist/2.78b4e53269171c9c08a5.bundle.js +1 -0
- package/dist/20.8fd969e3860ddffedcc3.bundle.js +1 -0
- package/dist/{133.f855496341ba657eb673.bundle.js → 200.aa3f4dcf9cf98409dbf5.bundle.js} +1 -2
- package/dist/201.a1b147e78f43a3bc99c3.bundle.js +1 -0
- package/dist/202.20e71b18f57e7d234ff0.bundle.js +1 -0
- package/dist/{136.74f131c98a163b48e3df.bundle.js → 203.0219c2ba2d4fe4881af2.bundle.js} +1 -2
- package/dist/204.cc169603e18b84e7e65b.bundle.js +1 -0
- package/dist/{138.9111fe731587313e4574.bundle.js → 205.99fb3c89cd9b9183ddbf.bundle.js} +1 -2
- package/dist/206.43b04d2170165e13353c.bundle.js +1 -0
- package/dist/207.798c195e1d7d3f301131.bundle.js +1 -0
- package/dist/208.34f042066a757f4fd8c0.bundle.js +1 -0
- package/dist/{142.5ced0a8e7a08aea7988f.bundle.js → 209.288844c6a42ff4d5685a.bundle.js} +1 -2
- package/dist/21.c981976c6528073c0a2f.bundle.js +1 -0
- package/dist/210.1ac38e393ca959703d4b.bundle.js +1 -0
- package/dist/211.d2721b9785e609e2f817.bundle.js +1 -0
- package/dist/212.b6b19c939f21132b451c.bundle.js +1 -0
- package/dist/213.5a5116f764e6357e53ab.bundle.js +1 -0
- package/dist/{147.f6bd445276a200981cff.bundle.js → 214.a2640be51c42d820bb83.bundle.js} +1 -2
- package/dist/215.209396a71f130477e2b3.bundle.js +1 -0
- package/dist/216.16e2e982acc750b4045a.bundle.js +1 -0
- package/dist/217.8540eb1d1a0946e72dbf.bundle.js +1 -0
- package/dist/218.ef33580c82d20f39f75f.bundle.js +1 -0
- package/dist/219.1652bc940cdd0088dc18.bundle.js +1 -0
- package/dist/22.9d339503774f4f6c0a8b.bundle.js +1 -0
- package/dist/{153.ebc378a7a60222b69484.bundle.js → 220.f8f9c348b1fc0cc72bd6.bundle.js} +1 -2
- package/dist/221.b18a92f0ba880edaebbf.bundle.js +1 -0
- package/dist/222.a52ebecd1d5201437ebe.bundle.js +1 -0
- package/dist/23.87ca8226d464e3699b8e.bundle.js +3 -0
- package/dist/24.9076b75f45ce0579f7be.bundle.js +1 -0
- package/dist/25.073791b8dd02c5b31183.bundle.js +1 -0
- package/dist/26.6e06be7172a866ad45f9.bundle.js +2 -0
- package/dist/27.5152c2a1f3b1369e21b0.bundle.js +1 -0
- package/dist/28.90b784e728e3d5e4c6aa.bundle.js +1 -0
- package/dist/29.e2309b858706718f1732.bundle.js +1 -0
- package/dist/3.cf89087c137e759ecd19.bundle.js +27 -0
- package/dist/30.32fb84930c42bae43a74.bundle.js +1 -0
- package/dist/31.31b7b4bd073b82c09fda.bundle.js +1 -0
- package/dist/32.6725d94946764db833b8.bundle.js +1 -0
- package/dist/33.fa9f0e662060f2e97267.bundle.js +1 -0
- package/dist/34.af22bc6d5ed2bcb72a09.bundle.js +1 -0
- package/dist/35.e601e19e63c6ddaf2484.bundle.js +1 -0
- package/dist/36.df47a70d8efbf1cd033b.bundle.js +1 -0
- package/dist/37.085cdb373f74d55eee07.bundle.js +2 -0
- package/dist/38.fc172c7b0d24ab0f8a35.bundle.js +1 -0
- package/dist/39.5ca9fa51ec3c63459317.bundle.js +1 -0
- package/dist/4.851f9ade6202116ecfb9.bundle.js +1 -0
- package/dist/40.309ec5212fd53fe696bb.bundle.js +1 -0
- package/dist/41.3870740f1d24570cb415.bundle.js +1 -0
- package/dist/42.b926c2c8620df5c7ed6d.bundle.js +1 -0
- package/dist/43.d4551e1f6cac0a1a77e5.bundle.js +1 -0
- package/dist/44.46c9e2d54a9f07d78368.bundle.js +1 -0
- package/dist/45.a916daee1f0c6873c890.bundle.js +1 -0
- package/dist/46.4f57238bd032edc81d6d.bundle.js +1 -0
- package/dist/47.4fbfdaa63628c501a30c.bundle.js +1 -0
- package/dist/48.3fbd50adcb0c7dd7ec60.bundle.js +1 -0
- package/dist/49.0707795b3b6e40387da8.bundle.js +1 -0
- package/dist/5.7cfbc07050f137932ffe.bundle.js +1 -0
- package/dist/50.8f6cc698b42c96f2b41f.bundle.js +1 -0
- package/dist/51.514a339efd6cd11db0f8.bundle.js +1 -0
- package/dist/52.410a7d8b4cb433fb24ca.bundle.js +1 -0
- package/dist/53.174d18435f7bf3bf05a0.bundle.js +1 -0
- package/dist/54.7cb3bd3ae8055e350629.bundle.js +1 -0
- package/dist/55.f0762e755ba58cbaac26.bundle.js +1 -0
- package/dist/56.3b0312e77f8607a4d957.bundle.js +1 -0
- package/dist/57.dfb7a710da8ca09c725b.bundle.js +1 -0
- package/dist/58.ac0fa95bbbe4b2dfb0fc.bundle.js +1 -0
- package/dist/59.273ffcd48e856d2752ff.bundle.js +1 -0
- package/dist/6.c5eea752e1f541f494e8.bundle.js +1 -0
- package/dist/60.00a29320ea162becd718.bundle.js +1 -0
- package/dist/61.3794de8b6d022738bafa.bundle.js +1 -0
- package/dist/62.cf39ad55adb1616560ec.bundle.js +1 -0
- package/dist/63.8880f667c958d12b338b.bundle.js +1 -0
- package/dist/64.fdd90fedc8a5dc3cacaf.bundle.js +1 -0
- package/dist/65.cdc961a8042c385c49c6.bundle.js +1 -0
- package/dist/66.c3b906de2fcf69089b7b.bundle.js +1 -0
- package/dist/67.9c851e5930459a5f5903.bundle.js +1 -0
- package/dist/68.05bba948c414a1e21c8f.bundle.js +1 -0
- package/dist/69.c5561c83fe410ea9a908.bundle.js +1 -0
- package/dist/7.14f008aaac190939acd3.bundle.js +7 -0
- package/dist/70.f2557c225be5923bab24.bundle.js +1 -0
- package/dist/71.e9c3c5ccc70f443c97cf.bundle.js +1 -0
- package/dist/72.0780a8424293909f94a4.bundle.js +1 -0
- package/dist/73.57e88cee0af3f67aee77.bundle.js +1 -0
- package/dist/74.48e90caf0b5ecd351f1d.bundle.js +1 -0
- package/dist/75.c75a824264d0e67421ed.bundle.js +1 -0
- package/dist/76.2ad0f5373462bc70bebf.bundle.js +1 -0
- package/dist/77.303a075d21928354102c.bundle.js +1 -0
- package/dist/78.66f3e9630550f20287ff.bundle.js +1 -0
- package/dist/79.29d39a29721f936ae688.bundle.js +1 -0
- package/dist/8.b5e29f80f8a5766d70d5.bundle.js +2 -0
- package/dist/80.8af0388db859fcc9fbf3.bundle.js +1 -0
- package/dist/{47.686e599732ae6f41120c.bundle.js → 81.2ff1f5047ab4e0591585.bundle.js} +1 -2
- package/dist/82.27bb51dfeb4898504e96.bundle.js +1 -0
- package/dist/83.a59d34bc50cf323af43d.bundle.js +1 -0
- package/dist/84.a4ee7bb5d3ed2e6ead5e.bundle.js +1 -0
- package/dist/{51.895a3dacdc3a8eaee275.bundle.js → 85.1f1b07562fbf97ab3e11.bundle.js} +1 -2
- package/dist/86.637667a4555ae621aff0.bundle.js +1 -0
- package/dist/87.b76338a62297ad83960b.bundle.js +1 -0
- package/dist/88.532e7295b49b1071d45c.bundle.js +1 -0
- package/dist/89.90bb1cf65f183ecce47c.bundle.js +1 -0
- package/dist/9.610b595b60a0fc51466a.bundle.js +1 -0
- package/dist/90.683c4d5b142356f274ef.bundle.js +1 -0
- package/dist/{56.91947e80d8e04223ac58.bundle.js → 91.2437dfc2ea1bc89f53f3.bundle.js} +1 -2
- package/dist/92.a12cfd3b602e98b344de.bundle.js +1 -0
- package/dist/93.a5cb6192d32cb016bb60.bundle.js +1 -0
- package/dist/94.f6a3e7628449796419b6.bundle.js +1 -0
- package/dist/95.15f0e472c49c81a68c3a.bundle.js +1 -0
- package/dist/96.2bf3b75fb0efb6b9e7e8.bundle.js +1 -0
- package/dist/97.bd1988af419f7373b569.bundle.js +1 -0
- package/dist/98.060c6842b3a8ed94dd20.bundle.js +1 -0
- package/dist/{64.ac922cb38c3ff6c431fb.bundle.js → 99.6360b70da56083cd76fe.bundle.js} +1 -2
- package/dist/bundle.39b836d40f0926aeec16.bundle.js +91 -0
- package/dist/css/aclmanagement.css +114 -0
- package/dist/css/angular-tooltips.css +144 -0
- package/dist/css/autocomplete-select.css +62 -0
- package/dist/css/backup-and-restore.css +7 -0
- package/dist/css/bootstrap-graphdb-theme-dark-auto.css +36 -0
- package/dist/css/bootstrap-graphdb-theme.css +514 -252
- package/dist/css/clustermanagement.css +145 -266
- package/dist/css/common.css +105 -0
- package/dist/css/dependencies.css +4 -4
- package/dist/css/domain-range-graph.css +3 -3
- package/dist/css/explore.css +7 -1
- package/dist/css/export.css +13 -9
- package/dist/css/find.css +2 -3
- package/dist/css/fonts/icons.eot +0 -0
- package/dist/css/fonts/icons.svg +14 -5
- package/dist/css/fonts/icons.ttf +0 -0
- package/dist/css/fonts/icons.woff +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600.woff +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600.woff2 +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600italic.woff +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600italic.woff2 +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-italic.woff +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-italic.woff2 +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-regular.woff +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-regular.woff2 +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300.woff +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300.woff2 +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff2 +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500.woff +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500.woff2 +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff2 +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff2 +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff2 +0 -0
- package/dist/css/graphs-config.css +4 -4
- package/dist/css/graphs-vizualizations.css +11 -10
- package/dist/css/guides.css +9 -0
- package/dist/css/jmx.css +22 -0
- package/dist/css/lib/angular-xeditable/xeditable.min.css +2 -2
- package/dist/css/new-sparql.css +68 -2
- package/dist/css/operations-statuses-monitor.css +111 -0
- package/dist/css/plugins.css +7 -18
- package/dist/css/rdf-class-hierarchy-labels.css +2 -2
- package/dist/css/rdf-class-hierarchy.css +3 -3
- package/dist/css/rdf-details-side-panel.css +8 -1
- package/dist/css/rdf-resource-search.css +5 -2
- package/dist/css/repositories.css +73 -31
- package/dist/css/repository.create.css +14 -4
- package/dist/css/shepherd-custom.css +80 -0
- package/dist/css/workbench-custom.css +54 -14
- package/dist/css/yasr.custom.css +28 -6
- package/dist/font/{icons.f404525bf0491c43fc1c35fc43fe14d8.eot → icons.23e96f215ba03e98233de883d2c30b60.eot} +0 -0
- package/dist/i18n/locale-en.json +488 -129
- package/dist/i18n/locale-fr.json +602 -261
- package/dist/icon.png +0 -0
- package/dist/img/{graphdb-logo-sq.75ddb875d9a986a6ac944450ae134725.svg → graphdb-logo-sq.3a5fb4b3f1e0e248dc308da1bf4de9f8.svg} +4 -4
- package/dist/img/{graphdb-logo.cb18d544b9cf2eb6062daa81bdb1f850.svg → graphdb-logo.741abf3e3881e1566e4504c9f00b91c0.svg} +3 -4
- package/dist/img/{graphdb-small.635110bdf15de2ad589b6e3fdaa75887.svg → graphdb-small.5f94ee13e65870be1db31bb89e6deded.svg} +6 -6
- package/dist/img/graphdb-splash.1ef2940889acddc03c7defb3f9f41f8d.svg +1 -0
- package/dist/img/{icons.2271b2cdd5a3d1037d80bf831f4918cc.svg → icons.ab6168834b8775f511d09c8fad540b27.svg} +14 -5
- package/dist/index.html +87 -85
- package/dist/js/angular/autocomplete/templates/modal/add-label.html +9 -8
- package/dist/js/angular/chatgpt/templates/chat.html +113 -0
- package/dist/js/angular/chatgpt/templates/chatInfo.html +11 -0
- package/dist/js/angular/chatgpt/templates/modal/settings.html +61 -0
- package/dist/js/angular/clustermanagement/templates/modal/add-nodes-dialog.html +67 -0
- package/dist/js/angular/clustermanagement/templates/modal/cluster-create-dialog.html +173 -0
- package/dist/js/angular/clustermanagement/templates/modal/cluster-delete-dialog.html +9 -14
- package/dist/js/angular/clustermanagement/templates/modal/cluster-edit-dialog.html +118 -0
- package/dist/js/angular/clustermanagement/templates/modal/remove-nodes-dialog.html +39 -0
- package/dist/js/angular/clustermanagement/templates/modal/replace-nodes-dialog.html +86 -0
- package/dist/js/angular/core/directives/autocomplete/templates/autocomplete.html +18 -0
- package/dist/js/angular/core/directives/languageselector/templates/languageSelector.html +9 -7
- package/dist/js/angular/core/directives/operations-statuses-monitor/templates/operations-statuses-monitor.html +57 -0
- package/dist/js/angular/core/directives/queryeditor/templates/query-editor.html +44 -56
- package/dist/js/angular/core/directives/queryeditor/templates/query-sample.html +11 -11
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +4 -6
- package/dist/js/angular/core/templates/core-errors.html +27 -18
- package/dist/js/angular/core/templates/inactive-plugin-warning-page.html +1 -2
- package/dist/js/angular/core/templates/modal/copy-to-clipboard-modal.html +9 -10
- package/dist/js/angular/core/templates/modal/modal-warning.html +1 -1
- package/dist/js/angular/core/templates/search-resource-input.html +9 -9
- package/dist/js/angular/externalsync/templates/deleteConnector.html +5 -5
- package/dist/js/angular/graphexplore/templates/modal/save-graph.html +10 -11
- package/dist/js/angular/graphexplore/templates/rdfsCommentLabelTemplate.html +4 -6
- package/dist/js/angular/graphexplore/templates/searchIconInputTemplate.html +5 -7
- package/dist/js/angular/import/templates/filesTable.html +15 -15
- package/dist/js/angular/import/templates/settingsModal.html +231 -231
- package/dist/js/angular/import/templates/textSnippet.html +4 -4
- package/dist/js/angular/import/templates/urlImport.html +7 -5
- package/dist/js/angular/repositories/templates/fedx-repo.html +53 -49
- package/dist/js/angular/repositories/templates/ontop-repo.html +191 -60
- package/dist/js/angular/security/templates/modal/default-authorities.html +12 -12
- package/dist/js/angular/security/templates/user.html +102 -41
- package/dist/js/angular/security/templates/users.html +24 -17
- package/dist/js/angular/settings/modal/location-settings.html +17 -18
- package/dist/js/angular/settings/modal/validate-license.html +19 -6
- package/dist/js/angular/templates/graphdb-small.svg +6 -6
- package/dist/js/angular/templates/modal/add-fedx-remote-repo.html +17 -15
- package/dist/js/angular/templates/modal/add-location.html +18 -22
- package/dist/js/angular/templates/modal/edit-location.html +11 -11
- package/dist/js/angular/templates/modal/editRepoFile.html +2 -2
- package/dist/js/angular/templates/modal/upload-repository-config.html +2 -2
- package/dist/js/angular/templates/repositorySize.html +7 -1
- package/dist/js/lib/angucomplete-alt/angucomplete-alt.css +2 -2
- package/dist/js/lib/rzslider/rzslider.min.css +1 -1
- package/dist/license-checker-static.json +128 -0
- package/dist/license-checker.json +872 -0
- package/dist/main.3ac2b4b19f56209c6467.css +1 -0
- package/dist/main.948c3b96766ce09e145b.bundle.js +1 -0
- package/dist/pages/aclmanagement.html +177 -0
- package/dist/pages/autocomplete.html +16 -12
- package/dist/pages/choose-repository-type.html +8 -8
- package/dist/pages/cluster-management/clusterInfo.html +160 -138
- package/dist/pages/connectorsInfo.html +23 -18
- package/dist/pages/create-index.html +18 -18
- package/dist/pages/createConnector.html +137 -137
- package/dist/pages/dependencies.html +23 -31
- package/dist/pages/domainRangeInfo.html +16 -19
- package/dist/pages/edit.html +15 -15
- package/dist/pages/explore.html +22 -25
- package/dist/pages/export.html +38 -39
- package/dist/pages/find.html +3 -3
- package/dist/pages/graph-config/saveGraphConfig.html +43 -43
- package/dist/pages/graphs-visualizations.html +71 -78
- package/dist/pages/guides.html +60 -0
- package/dist/pages/home.html +46 -28
- package/dist/pages/import.html +11 -10
- package/dist/pages/info.html +18 -18
- package/dist/pages/jdbc-create.html +48 -46
- package/dist/pages/jdbc.html +4 -4
- package/dist/pages/licenseInfo.html +66 -48
- package/dist/pages/login.html +5 -6
- package/dist/pages/monitor/backup-and-restore.html +80 -0
- package/dist/pages/monitor/queries.html +7 -8
- package/dist/pages/monitor/resources.html +213 -79
- package/dist/pages/namespaces.html +22 -21
- package/dist/pages/plugins.html +9 -10
- package/dist/pages/rdfClassHierarchyInfo.html +31 -35
- package/dist/pages/rdfrank.html +25 -27
- package/dist/pages/registerLicenseInfo.html +10 -12
- package/dist/pages/repositories.html +170 -193
- package/dist/pages/repository.html +124 -58
- package/dist/pages/similarity-indexes.html +18 -18
- package/dist/pages/sparql-template-create.html +30 -29
- package/dist/pages/sparql-templates.html +4 -4
- package/dist/pages/sparql.html +11 -11
- package/dist/pages/ux-test1.html +102 -0
- package/dist/pages/ux-test2.html +17 -0
- package/dist/pages/webapi.html +4 -4
- package/dist/plugin-registry.js +14 -0
- package/dist/plugins.js +1967 -84
- package/dist/res/sparql/keyboard-shortcuts.html +7 -1
- package/dist/res/swagger/css/onto-theme.css +8 -0
- package/dist/res/swagger/css/reset.css +1 -2
- package/dist/res/swagger/css/screen.css +6 -15
- package/dist/res/swagger/fonts/icons.woff +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600.woff +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600.woff2 +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600italic.woff +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600italic.woff2 +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-italic.woff +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-italic.woff2 +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-regular.woff +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-regular.woff2 +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300.woff +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300.woff2 +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff2 +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500.woff +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500.woff2 +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff2 +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff2 +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff2 +0 -0
- package/dist/res/swagger/fonts/rubik-italic.woff +0 -0
- package/dist/res/swagger/fonts/rubik-italic.woff2 +0 -0
- package/dist/res/swagger/fonts/rubik-light.woff +0 -0
- package/dist/res/swagger/fonts/rubik-light.woff2 +0 -0
- package/dist/res/swagger/fonts/rubik-lightitalic.woff +0 -0
- package/dist/res/swagger/fonts/rubik-lightitalic.woff2 +0 -0
- package/dist/res/swagger/fonts/rubik-medium.woff +0 -0
- package/dist/res/swagger/fonts/rubik-medium.woff2 +0 -0
- package/dist/res/swagger/fonts/rubik-mediumitalic.woff +0 -0
- package/dist/res/swagger/fonts/rubik-mediumitalic.woff2 +0 -0
- package/dist/res/swagger/fonts/rubik-regular.woff +0 -0
- package/dist/res/swagger/fonts/rubik-regular.woff2 +0 -0
- package/dist/res/swagger/index.html +27 -25
- package/dist/vendor.7b6ede99ef82acd3dcf5.bundle.js +27 -0
- package/dist/{vendor.4ba46e62f4d43dab5e82.css → vendor.d1c629ceaacea40a5f4a.css} +1 -1
- package/package.json +13 -9
- package/dist/0.32d0f91ca9c8d09fb6f1.bundle.js +0 -82
- package/dist/0.32d0f91ca9c8d09fb6f1.bundle.js.map +0 -1
- package/dist/1.6300131e72a9f28f9df3.bundle.js +0 -27
- package/dist/1.6300131e72a9f28f9df3.bundle.js.map +0 -1
- package/dist/10.bb0713b18c3e55445fa7.bundle.js +0 -2
- package/dist/10.bb0713b18c3e55445fa7.bundle.js.map +0 -1
- package/dist/100.acbece8e389effbcfa2e.bundle.js +0 -2
- package/dist/100.acbece8e389effbcfa2e.bundle.js.map +0 -1
- package/dist/101.abc28aeafc8c037b80dc.bundle.js +0 -2
- package/dist/101.abc28aeafc8c037b80dc.bundle.js.map +0 -1
- package/dist/102.236df15ec49946c8799a.bundle.js +0 -2
- package/dist/102.236df15ec49946c8799a.bundle.js.map +0 -1
- package/dist/103.05b86c1b360c05133b49.bundle.js.map +0 -1
- package/dist/104.089568ff7c49a29de892.bundle.js.map +0 -1
- package/dist/105.81b74220f7fa646e719b.bundle.js.map +0 -1
- package/dist/106.5de7943f8a3adda97372.bundle.js +0 -2
- package/dist/106.5de7943f8a3adda97372.bundle.js.map +0 -1
- package/dist/11.288d37db1902f00f7c8e.bundle.js +0 -2
- package/dist/11.288d37db1902f00f7c8e.bundle.js.map +0 -1
- package/dist/110.5a553b21d45a64e7e321.bundle.js +0 -2
- package/dist/110.5a553b21d45a64e7e321.bundle.js.map +0 -1
- package/dist/111.04e34833a2c4fc227899.bundle.js +0 -2
- package/dist/111.04e34833a2c4fc227899.bundle.js.map +0 -1
- package/dist/112.b2bdfd64c50509d05503.bundle.js +0 -2
- package/dist/112.b2bdfd64c50509d05503.bundle.js.map +0 -1
- package/dist/113.b386b036c2a3d9077f64.bundle.js +0 -2
- package/dist/113.b386b036c2a3d9077f64.bundle.js.map +0 -1
- package/dist/114.0768e042a8e6ec856942.bundle.js +0 -2
- package/dist/114.0768e042a8e6ec856942.bundle.js.map +0 -1
- package/dist/115.374b221f284e8755ef31.bundle.js +0 -2
- package/dist/115.374b221f284e8755ef31.bundle.js.map +0 -1
- package/dist/116.ca9d40889c222f47c45f.bundle.js +0 -2
- package/dist/116.ca9d40889c222f47c45f.bundle.js.map +0 -1
- package/dist/117.92f7630bfb95444a87e8.bundle.js +0 -2
- package/dist/117.92f7630bfb95444a87e8.bundle.js.map +0 -1
- package/dist/118.7e28dcfd80b93a705d71.bundle.js +0 -2
- package/dist/118.7e28dcfd80b93a705d71.bundle.js.map +0 -1
- package/dist/119.e3a038ffb960ed3661fe.bundle.js +0 -2
- package/dist/119.e3a038ffb960ed3661fe.bundle.js.map +0 -1
- package/dist/12.9004ab127289745129a4.bundle.js +0 -4
- package/dist/12.9004ab127289745129a4.bundle.js.map +0 -1
- package/dist/120.3b0b67fbfa81ec95e044.bundle.js.map +0 -1
- package/dist/121.ff452d05188836228deb.bundle.js.map +0 -1
- package/dist/122.1b8056c745358fa2f6cb.bundle.js +0 -2
- package/dist/122.1b8056c745358fa2f6cb.bundle.js.map +0 -1
- package/dist/123.289bb9a87ce416004c0a.bundle.js.map +0 -1
- package/dist/124.75965fcb93d0fe988609.bundle.js +0 -2
- package/dist/124.75965fcb93d0fe988609.bundle.js.map +0 -1
- package/dist/125.51ff26fe7687752811e4.bundle.js.map +0 -1
- package/dist/126.b89a0728154793be4eb9.bundle.js +0 -2
- package/dist/126.b89a0728154793be4eb9.bundle.js.map +0 -1
- package/dist/127.4d0a2164fb95df43ea22.bundle.js.map +0 -1
- package/dist/128.c7a3530622ede2f34e72.bundle.js.map +0 -1
- package/dist/129.2d32313059ae96dba010.bundle.js.map +0 -1
- package/dist/13.897f9af290de9fbd43bb.bundle.js +0 -16
- package/dist/13.897f9af290de9fbd43bb.bundle.js.map +0 -1
- package/dist/130.7302112cf14a10bd1306.bundle.js.map +0 -1
- package/dist/131.eb262b5100305bdc23ee.bundle.js.map +0 -1
- package/dist/132.264b9ebf860e308417ad.bundle.js +0 -2
- package/dist/132.264b9ebf860e308417ad.bundle.js.map +0 -1
- package/dist/133.f855496341ba657eb673.bundle.js.map +0 -1
- package/dist/134.91de2ab11c49967200ad.bundle.js +0 -2
- package/dist/134.91de2ab11c49967200ad.bundle.js.map +0 -1
- package/dist/135.82e48e81e60b2ab89e04.bundle.js +0 -2
- package/dist/135.82e48e81e60b2ab89e04.bundle.js.map +0 -1
- package/dist/136.74f131c98a163b48e3df.bundle.js.map +0 -1
- package/dist/137.89253235e0e48f86534b.bundle.js +0 -2
- package/dist/137.89253235e0e48f86534b.bundle.js.map +0 -1
- package/dist/138.9111fe731587313e4574.bundle.js.map +0 -1
- package/dist/139.642cab70149cdfc8c034.bundle.js +0 -2
- package/dist/139.642cab70149cdfc8c034.bundle.js.map +0 -1
- package/dist/14.3c22be70e13b5347940a.bundle.js +0 -3
- package/dist/14.3c22be70e13b5347940a.bundle.js.map +0 -1
- package/dist/140.8fcbd3b16a54b9ca5d80.bundle.js +0 -2
- package/dist/140.8fcbd3b16a54b9ca5d80.bundle.js.map +0 -1
- package/dist/141.09939d5f25d69d9e1bdd.bundle.js +0 -2
- package/dist/141.09939d5f25d69d9e1bdd.bundle.js.map +0 -1
- package/dist/142.5ced0a8e7a08aea7988f.bundle.js.map +0 -1
- package/dist/143.1bd6e2941d5c9fdc9e77.bundle.js +0 -2
- package/dist/143.1bd6e2941d5c9fdc9e77.bundle.js.map +0 -1
- package/dist/144.34dd1b710f93da283e39.bundle.js +0 -2
- package/dist/144.34dd1b710f93da283e39.bundle.js.map +0 -1
- package/dist/145.832e90a54396296da91b.bundle.js +0 -2
- package/dist/145.832e90a54396296da91b.bundle.js.map +0 -1
- package/dist/146.a4ab1f2f5177d9e27861.bundle.js +0 -2
- package/dist/146.a4ab1f2f5177d9e27861.bundle.js.map +0 -1
- package/dist/147.f6bd445276a200981cff.bundle.js.map +0 -1
- package/dist/148.1c23268b87514b7220b3.bundle.js +0 -2
- package/dist/148.1c23268b87514b7220b3.bundle.js.map +0 -1
- package/dist/149.82fc16905f1377c6610a.bundle.js +0 -2
- package/dist/149.82fc16905f1377c6610a.bundle.js.map +0 -1
- package/dist/15.ba4fe6f57951d2f73adc.bundle.js +0 -2
- package/dist/15.ba4fe6f57951d2f73adc.bundle.js.map +0 -1
- package/dist/150.6d8e3bb0cbc5774322d9.bundle.js +0 -2
- package/dist/150.6d8e3bb0cbc5774322d9.bundle.js.map +0 -1
- package/dist/151.c752cbb4d5f9299df813.bundle.js +0 -2
- package/dist/151.c752cbb4d5f9299df813.bundle.js.map +0 -1
- package/dist/152.78d7840c4b8f93748bfe.bundle.js +0 -2
- package/dist/152.78d7840c4b8f93748bfe.bundle.js.map +0 -1
- package/dist/153.ebc378a7a60222b69484.bundle.js.map +0 -1
- package/dist/154.4452ad65074e44967389.bundle.js +0 -2
- package/dist/154.4452ad65074e44967389.bundle.js.map +0 -1
- package/dist/155.12819130f26753e109ad.bundle.js +0 -2
- package/dist/155.12819130f26753e109ad.bundle.js.map +0 -1
- package/dist/16.a236b38d63123b1a3c61.bundle.js +0 -4
- package/dist/16.a236b38d63123b1a3c61.bundle.js.map +0 -1
- package/dist/17.d8d59fa7fbb3b422fdf8.bundle.js +0 -2
- package/dist/17.d8d59fa7fbb3b422fdf8.bundle.js.map +0 -1
- package/dist/18.bc2da9ff57be136ef082.bundle.js +0 -2
- package/dist/18.bc2da9ff57be136ef082.bundle.js.map +0 -1
- package/dist/19.19811699b6e54f19f71e.bundle.js +0 -3
- package/dist/19.19811699b6e54f19f71e.bundle.js.map +0 -1
- package/dist/2.fb2f97f5c543a24296f6.bundle.js +0 -2
- package/dist/2.fb2f97f5c543a24296f6.bundle.js.map +0 -1
- package/dist/20.df3652981fc73c6a8b8c.bundle.js +0 -2
- package/dist/20.df3652981fc73c6a8b8c.bundle.js.map +0 -1
- package/dist/21.b7fbdf3c3b22b578928c.bundle.js +0 -2
- package/dist/21.b7fbdf3c3b22b578928c.bundle.js.map +0 -1
- package/dist/22.2da0e8ec2ac2048ecd60.bundle.js +0 -3
- package/dist/22.2da0e8ec2ac2048ecd60.bundle.js.map +0 -1
- package/dist/23.4140c4c20347efc963a4.bundle.js +0 -2
- package/dist/23.4140c4c20347efc963a4.bundle.js.map +0 -1
- package/dist/24.219ce55f8f6a5bd02dad.bundle.js +0 -2
- package/dist/24.219ce55f8f6a5bd02dad.bundle.js.map +0 -1
- package/dist/25.e79de2370b1ee4072e19.bundle.js +0 -2
- package/dist/25.e79de2370b1ee4072e19.bundle.js.map +0 -1
- package/dist/26.c1619706b8cbb1ab23cb.bundle.js +0 -2
- package/dist/26.c1619706b8cbb1ab23cb.bundle.js.map +0 -1
- package/dist/27.350dba622e243e1ab5fb.bundle.js +0 -2
- package/dist/27.350dba622e243e1ab5fb.bundle.js.map +0 -1
- package/dist/28.e687c87a5f1dc8a30fd0.bundle.js +0 -2
- package/dist/28.e687c87a5f1dc8a30fd0.bundle.js.map +0 -1
- package/dist/29.34a4af65623cd4af6899.bundle.js +0 -2
- package/dist/29.34a4af65623cd4af6899.bundle.js.map +0 -1
- package/dist/3.dfa66b44200c3fca24a2.bundle.js +0 -2
- package/dist/3.dfa66b44200c3fca24a2.bundle.js.map +0 -1
- package/dist/30.f4738c7c2d74f00f2e5f.bundle.js +0 -2
- package/dist/30.f4738c7c2d74f00f2e5f.bundle.js.map +0 -1
- package/dist/31.ab8f2e70841221e1d427.bundle.js +0 -2
- package/dist/31.ab8f2e70841221e1d427.bundle.js.map +0 -1
- package/dist/32.3210a7952ffcb57daa1a.bundle.js +0 -2
- package/dist/32.3210a7952ffcb57daa1a.bundle.js.map +0 -1
- package/dist/33.fcf9c56901b5590bd603.bundle.js +0 -2
- package/dist/33.fcf9c56901b5590bd603.bundle.js.map +0 -1
- package/dist/34.2c344c05bfc4048c3d53.bundle.js +0 -2
- package/dist/34.2c344c05bfc4048c3d53.bundle.js.map +0 -1
- package/dist/35.423c4a91e80adf5d97c8.bundle.js +0 -2
- package/dist/35.423c4a91e80adf5d97c8.bundle.js.map +0 -1
- package/dist/36.247686b6d65de11ec10d.bundle.js +0 -2
- package/dist/36.247686b6d65de11ec10d.bundle.js.map +0 -1
- package/dist/37.5f6089a939b59309cc82.bundle.js +0 -2
- package/dist/37.5f6089a939b59309cc82.bundle.js.map +0 -1
- package/dist/38.9e79a9ec2f9d5af38692.bundle.js +0 -2
- package/dist/38.9e79a9ec2f9d5af38692.bundle.js.map +0 -1
- package/dist/39.b64ae969a5f5fea4504c.bundle.js +0 -2
- package/dist/39.b64ae969a5f5fea4504c.bundle.js.map +0 -1
- package/dist/4.188966396c80909f58cd.bundle.js +0 -2
- package/dist/4.188966396c80909f58cd.bundle.js.map +0 -1
- package/dist/40.1303e99feecbba2614a7.bundle.js +0 -2
- package/dist/40.1303e99feecbba2614a7.bundle.js.map +0 -1
- package/dist/41.687956ca2240355a838f.bundle.js +0 -2
- package/dist/41.687956ca2240355a838f.bundle.js.map +0 -1
- package/dist/42.78e0302e87b9d244a1d7.bundle.js +0 -2
- package/dist/42.78e0302e87b9d244a1d7.bundle.js.map +0 -1
- package/dist/43.ee0de548c525f8e422ba.bundle.js +0 -2
- package/dist/43.ee0de548c525f8e422ba.bundle.js.map +0 -1
- package/dist/44.38b4979d4b201ae1fffb.bundle.js +0 -2
- package/dist/44.38b4979d4b201ae1fffb.bundle.js.map +0 -1
- package/dist/45.8a0ab002ad0f614964e5.bundle.js +0 -2
- package/dist/45.8a0ab002ad0f614964e5.bundle.js.map +0 -1
- package/dist/46.720c0f65b93f4fe01a7c.bundle.js +0 -2
- package/dist/46.720c0f65b93f4fe01a7c.bundle.js.map +0 -1
- package/dist/47.686e599732ae6f41120c.bundle.js.map +0 -1
- package/dist/48.bdb51ad865126b918831.bundle.js +0 -2
- package/dist/48.bdb51ad865126b918831.bundle.js.map +0 -1
- package/dist/49.74a24e08097ef1f6fcd2.bundle.js +0 -2
- package/dist/49.74a24e08097ef1f6fcd2.bundle.js.map +0 -1
- package/dist/5.9bbd38317d375cd02da2.bundle.js +0 -8
- package/dist/5.9bbd38317d375cd02da2.bundle.js.map +0 -1
- package/dist/50.313e315d4c339ad1bcdd.bundle.js +0 -2
- package/dist/50.313e315d4c339ad1bcdd.bundle.js.map +0 -1
- package/dist/51.895a3dacdc3a8eaee275.bundle.js.map +0 -1
- package/dist/52.1f6bc47f1c9abcc79e8d.bundle.js +0 -2
- package/dist/52.1f6bc47f1c9abcc79e8d.bundle.js.map +0 -1
- package/dist/53.f6c19075252833268cca.bundle.js +0 -2
- package/dist/53.f6c19075252833268cca.bundle.js.map +0 -1
- package/dist/54.599ca3ae32ee1fb5f937.bundle.js +0 -2
- package/dist/54.599ca3ae32ee1fb5f937.bundle.js.map +0 -1
- package/dist/55.c20a51cb1d894f9113b4.bundle.js +0 -2
- package/dist/55.c20a51cb1d894f9113b4.bundle.js.map +0 -1
- package/dist/56.91947e80d8e04223ac58.bundle.js.map +0 -1
- package/dist/57.ab4ee313c9d6c7e29384.bundle.js +0 -2
- package/dist/57.ab4ee313c9d6c7e29384.bundle.js.map +0 -1
- package/dist/58.99c83a8dac31c1b681df.bundle.js +0 -2
- package/dist/58.99c83a8dac31c1b681df.bundle.js.map +0 -1
- package/dist/59.99da52e1d8946ac0f601.bundle.js +0 -2
- package/dist/59.99da52e1d8946ac0f601.bundle.js.map +0 -1
- package/dist/6.6c67a1bcf82bb335b0c4.bundle.js +0 -2
- package/dist/6.6c67a1bcf82bb335b0c4.bundle.js.map +0 -1
- package/dist/60.92b9758945e497e52bac.bundle.js +0 -2
- package/dist/60.92b9758945e497e52bac.bundle.js.map +0 -1
- package/dist/61.42887fbc87f941cf7c81.bundle.js +0 -2
- package/dist/61.42887fbc87f941cf7c81.bundle.js.map +0 -1
- package/dist/62.c21410d6e123395d3920.bundle.js +0 -2
- package/dist/62.c21410d6e123395d3920.bundle.js.map +0 -1
- package/dist/63.1ab0c580ba57aee5479c.bundle.js +0 -2
- package/dist/63.1ab0c580ba57aee5479c.bundle.js.map +0 -1
- package/dist/64.ac922cb38c3ff6c431fb.bundle.js.map +0 -1
- package/dist/65.9fcde753699dc94bea1d.bundle.js +0 -2
- package/dist/65.9fcde753699dc94bea1d.bundle.js.map +0 -1
- package/dist/66.8213a0430e7543b6d7f7.bundle.js +0 -2
- package/dist/66.8213a0430e7543b6d7f7.bundle.js.map +0 -1
- package/dist/67.320a484bc979f5076d8c.bundle.js +0 -2
- package/dist/67.320a484bc979f5076d8c.bundle.js.map +0 -1
- package/dist/68.a69e9e22327878f44dbd.bundle.js +0 -2
- package/dist/68.a69e9e22327878f44dbd.bundle.js.map +0 -1
- package/dist/69.be786580c66ac4ee18cb.bundle.js +0 -2
- package/dist/69.be786580c66ac4ee18cb.bundle.js.map +0 -1
- package/dist/7.0fd9bc389f42820382e4.bundle.js +0 -3
- package/dist/7.0fd9bc389f42820382e4.bundle.js.map +0 -1
- package/dist/70.93cfa1f02948e8276451.bundle.js +0 -2
- package/dist/70.93cfa1f02948e8276451.bundle.js.map +0 -1
- package/dist/71.6b8c8bce52a95f2da242.bundle.js +0 -2
- package/dist/71.6b8c8bce52a95f2da242.bundle.js.map +0 -1
- package/dist/72.6cbb41a38d917191c660.bundle.js +0 -2
- package/dist/72.6cbb41a38d917191c660.bundle.js.map +0 -1
- package/dist/73.801e05b4acc74a3e268c.bundle.js +0 -2
- package/dist/73.801e05b4acc74a3e268c.bundle.js.map +0 -1
- package/dist/74.1c6322e5f93d5376fd76.bundle.js +0 -2
- package/dist/74.1c6322e5f93d5376fd76.bundle.js.map +0 -1
- package/dist/75.c95c9015a30a98acb353.bundle.js +0 -2
- package/dist/75.c95c9015a30a98acb353.bundle.js.map +0 -1
- package/dist/76.29111b9618d43a0dd149.bundle.js +0 -2
- package/dist/76.29111b9618d43a0dd149.bundle.js.map +0 -1
- package/dist/77.6ced6f6e26dfe1c4e00f.bundle.js +0 -2
- package/dist/77.6ced6f6e26dfe1c4e00f.bundle.js.map +0 -1
- package/dist/78.7c7d2a0d9e7c2d2483e6.bundle.js +0 -2
- package/dist/78.7c7d2a0d9e7c2d2483e6.bundle.js.map +0 -1
- package/dist/79.696045e048461f420813.bundle.js +0 -2
- package/dist/79.696045e048461f420813.bundle.js.map +0 -1
- package/dist/8.22695f5c20dcddc1c7f9.bundle.js +0 -2
- package/dist/8.22695f5c20dcddc1c7f9.bundle.js.map +0 -1
- package/dist/80.b5e832779f88ebe839e2.bundle.js +0 -2
- package/dist/80.b5e832779f88ebe839e2.bundle.js.map +0 -1
- package/dist/81.5a0776b89463df60bd1a.bundle.js +0 -2
- package/dist/81.5a0776b89463df60bd1a.bundle.js.map +0 -1
- package/dist/82.0a98b482c7c37a9812fc.bundle.js +0 -2
- package/dist/82.0a98b482c7c37a9812fc.bundle.js.map +0 -1
- package/dist/83.8beeb651df72c23d53ac.bundle.js +0 -2
- package/dist/83.8beeb651df72c23d53ac.bundle.js.map +0 -1
- package/dist/84.6f35fe422db61d53ae3e.bundle.js +0 -2
- package/dist/84.6f35fe422db61d53ae3e.bundle.js.map +0 -1
- package/dist/85.2d1142fcbdf4c9868e94.bundle.js +0 -2
- package/dist/85.2d1142fcbdf4c9868e94.bundle.js.map +0 -1
- package/dist/86.ce91cb69963c2b84e551.bundle.js +0 -2
- package/dist/86.ce91cb69963c2b84e551.bundle.js.map +0 -1
- package/dist/87.d4aa485128cd374a11c7.bundle.js +0 -2
- package/dist/87.d4aa485128cd374a11c7.bundle.js.map +0 -1
- package/dist/88.b4cd8e99a6af1abea692.bundle.js +0 -2
- package/dist/88.b4cd8e99a6af1abea692.bundle.js.map +0 -1
- package/dist/89.8ce40cc9d5fe2596fdf9.bundle.js +0 -2
- package/dist/89.8ce40cc9d5fe2596fdf9.bundle.js.map +0 -1
- package/dist/9.d94f24c12177433d455a.bundle.js +0 -2
- package/dist/9.d94f24c12177433d455a.bundle.js.map +0 -1
- package/dist/90.94988124ca51fa46932e.bundle.js +0 -2
- package/dist/90.94988124ca51fa46932e.bundle.js.map +0 -1
- package/dist/91.bfbbacbaea095478d82e.bundle.js +0 -2
- package/dist/91.bfbbacbaea095478d82e.bundle.js.map +0 -1
- package/dist/92.791121a262e5f42a2ba2.bundle.js +0 -2
- package/dist/92.791121a262e5f42a2ba2.bundle.js.map +0 -1
- package/dist/93.7da268902b8515abecf6.bundle.js +0 -2
- package/dist/93.7da268902b8515abecf6.bundle.js.map +0 -1
- package/dist/94.88f1bd8fa645739c4f30.bundle.js +0 -2
- package/dist/94.88f1bd8fa645739c4f30.bundle.js.map +0 -1
- package/dist/95.bbd1b757de3af20f2ac1.bundle.js +0 -2
- package/dist/95.bbd1b757de3af20f2ac1.bundle.js.map +0 -1
- package/dist/96.38e7df277c99946f9a20.bundle.js +0 -2
- package/dist/96.38e7df277c99946f9a20.bundle.js.map +0 -1
- package/dist/97.1818744137f2fb66596a.bundle.js +0 -2
- package/dist/97.1818744137f2fb66596a.bundle.js.map +0 -1
- package/dist/98.1a14af46a31cf35db0e5.bundle.js +0 -2
- package/dist/98.1a14af46a31cf35db0e5.bundle.js.map +0 -1
- package/dist/99.bd486f7d738e281a0752.bundle.js +0 -2
- package/dist/99.bd486f7d738e281a0752.bundle.js.map +0 -1
- package/dist/bundle.5eeff901b77240e58d27.bundle.js +0 -89
- package/dist/bundle.5eeff901b77240e58d27.bundle.js.map +0 -1
- package/dist/css/fonts/rubik-italic.woff +0 -0
- package/dist/css/fonts/rubik-italic.woff2 +0 -0
- package/dist/css/fonts/rubik-light.woff +0 -0
- package/dist/css/fonts/rubik-light.woff2 +0 -0
- package/dist/css/fonts/rubik-lightitalic.woff +0 -0
- package/dist/css/fonts/rubik-lightitalic.woff2 +0 -0
- package/dist/css/fonts/rubik-medium.woff +0 -0
- package/dist/css/fonts/rubik-medium.woff2 +0 -0
- package/dist/css/fonts/rubik-mediumitalic.woff +0 -0
- package/dist/css/fonts/rubik-mediumitalic.woff2 +0 -0
- package/dist/css/fonts/rubik-regular.woff +0 -0
- package/dist/css/fonts/rubik-regular.woff2 +0 -0
- package/dist/css/lib/bootstrap-switch/bootstrap-switch.min.css +0 -10
- package/dist/img/graphdb-splash.2eb3f7f02aa7e25a2545459e096f3738.svg +0 -141
- package/dist/js/angular/clustermanagement/templates/modal/clone-modal.html +0 -27
- package/dist/js/lib/nvd3/nv.d3.css +0 -755
- package/dist/main.e5d47f1d0bcd23074c38.css +0 -1
- package/dist/main.f10730ef6eebe969b494.bundle.js +0 -2
- package/dist/main.f10730ef6eebe969b494.bundle.js.map +0 -1
- package/dist/pages/cluster-management/cluster-configuration.html +0 -183
- package/dist/res/swagger/css/style.css +0 -250
- package/dist/res/swagger/css/typography.css +0 -60
- package/dist/vendor.327ffd7c7997ca288654.bundle.js +0 -50
- package/dist/vendor.327ffd7c7997ca288654.bundle.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/js/lib/nvd3/nv.d3.js","webpack:///./src/js/angular/resources/controllers.js"],"names":["floor","step","number","nv","window","version","dev","tooltip","utils","models","charts","graphs","logs","dispatch","d3","on","e","startTime","Date","endTime","totalTime","log","console","apply","arguments","Function","prototype","bind","call","length","render","active","render_start","setTimeout","chart","graph","i","queue","generate","callback","push","splice","callee","render_end","addGraph","obj","identity","d","strip","s","replace","time","monthEnd","date","getFullYear","getMonth","monthEnds","month","year","setUTCDate","getUTCDate","setDate","getDate","t0","t1","dt","times","interactiveGuideline","width","height","margin","left","top","xScale","scale","linear","showGuideLine","svgContainer","isMSIE","navigator","userAgent","indexOf","layer","selection","each","data","container","select","this","availableWidth","availableHeight","wrap","selectAll","mouseHandler","d3mouse","mouse","mouseX","mouseY","subtractMargin","mouseOutAnyReason","event","offsetX","offsetY","target","tagName","className","baseVal","match","relatedTarget","undefined","ownerSVGElement","nvPointerEventsClass","elementMouseout","renderGuideLine","pointXValue","invert","elementMousemove","enter","append","attr","x","line","NaNtoZero","String","exit","remove","_","interactiveBisect","values","searchVal","xAccessor","Array","bisect","bisector","index","max","currentValue","nextIndex","min","nextValue","Math","abs","content","gravity","distance","snapDistance","fixedTop","classes","chartContainer","position","enabled","id","random","valueFormatter","headerFormatter","contentGenerator","html","value","series","forEach","item","color","key","dataSeriesExists","nvtooltip","svg","node","viewBox","split","ratio","parseInt","style","convertViewBoxRatio","newContent","body","innerHTML","classed","getTooltipContainer","svgComp","getElementsByTagName","svgOffset","getBoundingClientRect","svgBound","chartBound","offsetLeft","scrollLeft","offsetTop","scrollTop","calcTooltipPosition","show","pos","dist","parentContainer","document","createElement","opacity","appendChild","findFirstNonSVGParent","Elem","parentNode","findTotalOffsetTop","initialTop","isNaN","offsetParent","findTotalOffsetLeft","initialLeft","offsetHeight","offsetWidth","windowWidth","windowSize","windowHeight","pageYOffset","pageXOffset","innerWidth","scrollWidth","innerHeight","scrollHeight","tooltipTop","tooltipLeft","tLeft","tTop","cleanup","tooltips","getElementsByClassName","purging","transitionDelay","removeMe","pop","removeChild","size","compatMode","documentElement","windowResize","fun","oldresize","onresize","getColor","Object","toString","defaultColor","colors","category20","range","customTheme","dictionary","getKey","defaultColors","defIndex","pjax","links","load","href","fragment","replaceChild","history","pushState","textContent","preventDefault","state","calcApproxTextWidth","svgTextElem","fontSize","text","n","Infinity","optionsFunc","args","map","axis","scale0","right","bottom","axisLabelText","showMaxMin","highlightZero","rotateLabels","rotateYLabel","staggerLabels","isOrdinal","ticks","g","orient","transition","fmt","tickFormat","axisLabel","w","axisMaxMin","domain","tickPadding","v","xLabelMargin","maxTextWidth","xTicks","getBBox","sin","PI","j","rangeBand","maxMinRange","err","filter","parseFloat","round","__data__","copy","rebind","options","rangeBands","bullet","reverse","ranges","markers","measures","rangeLabels","markerLabels","measureLabels","forceX","rangez","slice","sort","descending","markerz","measurez","rangeLabelz","markerLabelz","measureLabelz","x1","extent","merge","__chart__","rangeMin","rangeMax","rangeAvg","gEnter","w1","xp1","datum","elementMouseover","label","h3","bulletChart","y","noData","showTooltip","offsetElement","that","update","noDataText","x0","title","subtitle","bulletWrap","format","tick","tickEnter","tickUpdate","timer","flush","tooltipShow","tooltipHide","tooltipContent","cumulativeLineChart","lines","xAxis","yAxis","legend","controls","interactiveLayer","showLegend","showXAxis","showYAxis","rightAlignYAxis","showControls","useInteractiveGuideline","rescaleY","defaultState","average","transitionDuration","updateState","dx","point","pointIndex","duration","disabled","indexDrag","behavior","drag","updateZero","stateChange","yScale","yDomain","seriesDomains","initialDomain","completeDomain","clamp","idx","tempDisabled","display","indexify","interactivePointerEvents","controlsData","join","linesWrap","seriesIndex","avgLineData","avgLines","getAvgLineY","yVal","indexLine","oldDuration","tickSize","newState","clearHighlights","singlePoint","pointXLocation","allData","highlightPoint","xValue","interactive","useVoronoi","discreteBar","xDomain","xRange","yRange","y0","ordinal","getX","getY","forceY","showValues","valueFormat","rectClass","seriesData","concat","groups","hover","bars","barsEnter","elementClick","stopPropagation","elementDblClick","discreteBarChart","discretebar","beforeUpdate","defsEnter","distribution","getData","naxis","distWrap","functor","historicalBar","padData","clipEdge","wrapEnter","chartClick","rval","isHoverOver","historicalBarChart","indentedTree","header","filterZero","childIndent","columns","type","tableClass","iconOpen","iconClose","getUrl","url","depth","tree","layout","children","nodes","tableEnter","table","theadRow1","column","tbody","icon","folded","nodeEnter","click","unshift","shiftKey","_values","hasChildren","nodeName","showCount","order","row","elementDblclick","scatter","align","rightAlign","radioButtonMode","seriesEnter","legendMouseover","legendMouseout","legendClick","every","legendDblclick","seriesWidths","nodeTextLength","legendText","getComputedTextLength","seriesPerRow","legendWidth","columnWidths","k","reduce","prev","cur","array","xPositions","curX","ceil","xpos","ypos","newxpos","maxwidth","defined","isArea","area","interpolate","scatterWrap","areaPaths","y1","linePaths","sizeDomain","lineChart","linePlusBarChart","y2","y1Axis","y2Axis","bar","dataBars","dataLines","originalKey","barsWrap","lineWithFocusChart","x2","lines2","x2Axis","brush","margin2","height2","brushExtent","availableHeight1","availableHeight2","focusEnter","contextEnter","contextLinesWrap","oldTransition","onBrush","brushBG","brushBGenter","gBrush","empty","leftWidth","rightWidth","xTickFormat","yTickFormat","linePlusBarWithFocusChart","y3","y4","bars2","y3Axis","y4Axis","series1","series2","bars2Wrap","lines2Wrap","focusBarsWrap","focusLinesWrap","multiBar","stacked","hideable","barColor","delay","groupSpacing","stack","offset","posBase","negBase","f","rgb","darker","multiBarChart","multibar","reduceXTicks","controlWidth","getTranslate","totalInBetweenTicks","multiBarHorizontal","valuePadding","multiBarHorizontalChart","multiChart","yDomain1","yDomain2","yScale1","yScale2","lines1","bars1","stack1","stackedArea","stack2","yAxis1","yAxis2","dataLines1","dataLines2","dataBars1","dataBars2","dataStack1","dataStack2","lines1Wrap","bars1Wrap","stack1Wrap","stack2Wrap","extraValue1","a","b","aVal","extraValue2","ohlcBar","getOpen","open","getClose","close","getHigh","high","getLow","low","pie","getDescription","description","showLabels","pieLabelsOutside","donutLabelsOutside","labelType","labelThreshold","donut","labelSunbeamLayout","startAngle","endAngle","donutRatio","radius","arcRadius","arc","outerRadius","innerRadius","slices","ae","pageX","pageY","_current","attrTween","t","labelsArc","group","rotateAngle","centroid","percent","labelTypes","textBox","pieChart","pieWrap","tooltipLabel","z0","timeoutID","z","getSize","getShape","shape","onlyCircles","forceSize","pointKey","pointActive","notActive","padDataOuter","clipVoronoi","clipRadius","sizeRange","needsUpdate","points","sqrt","symbol","clearTimeout","vertices","groupIndex","pX","pY","pointArray","pointClips","bounds","geom","polygon","voronoi","clip","pointPaths","mouseEventCallback","mDispatch","zScale","scatterChart","distX","distY","fisheye","distortion","xPadding","yPadding","showDistX","showDistY","pauseFisheye","tooltipX","tooltipY","leftX","topX","leftY","topY","xVal","focus","tooltipXContent","tooltipYContent","scatterPlusLineChart","regWrap","regLine","slope","intercept","sparkline","animate","paths","yValues","result","maxPoint","lastIndexOf","sparklinePlus","paused","showValue","alignValue","rightAlignValue","sparklineWrap","updateValueLine","hoverValue","hoverEnter","closestIndex","getClosestIndex","dataFiltered","aseries","out","yHeight","zeroArea","path","areaMouseover","areaMouseout","areaClick","stackedAreaChart","yAxisTickFormat","cData","setTickFormat","angular","module","controller","$scope","toastr","$interval","$timeout","MonitoringRestService","$translate","classCount","instant","cpuLoad","memoryUsage","threadCount","firstLoad","activeTab","error","loader","garbadgeCollectorLoader","getResourcesData","monitorResources","success","clearData","timestamp","toFixed","heapMemoryUsage","used","$on","cancel","getError","chartConfig","refreshDataOnly","chartOptions","chartMemoryOptions","chartCPUOptions","garbadgeCollector","monitorGC","msg"],"mappings":"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","file":"3.dfa66b44200c3fca24a2.bundle.js","sourcesContent":["define(['lib/d3-ONTO-chord-patch'],\n function() {\n\n(function(){\n\nvar nv = window.nv || {};\n\n\nnv.version = '1.1.10b';\nnv.dev = true //set false when in production\n\nwindow.nv = nv;\n\nnv.tooltip = {}; // For the tooltip system\nnv.utils = {}; // Utility subsystem\nnv.models = {}; //stores all the possible models/components\nnv.charts = {}; //stores all the ready to use charts\nnv.graphs = []; //stores all the graphs currently on the page\nnv.logs = {}; //stores some statistics and potential error messages\n\nnv.dispatch = d3.dispatch('render_start', 'render_end');\n\n// *************************************************************************\n// Development render timers - disabled if dev = false\n\nif (nv.dev) {\n nv.dispatch.on('render_start', function(e) {\n nv.logs.startTime = +new Date();\n });\n\n nv.dispatch.on('render_end', function(e) {\n nv.logs.endTime = +new Date();\n nv.logs.totalTime = nv.logs.endTime - nv.logs.startTime;\n //nv.log('total', nv.logs.totalTime); // used for development, to keep track of graph generation times\n });\n}\n\n// ********************************************\n// Public Core NV functions\n\n// Logs all arguments, and returns the last so you can test things in place\n// Note: in IE8 console.log is an object not a function, and if modernizr is used\n// then calling Function.prototype.bind with with anything other than a function\n// causes a TypeError to be thrown.\nnv.log = function() {\n if (nv.dev && console.log && console.log.apply)\n console.log.apply(console, arguments)\n else if (nv.dev && typeof console.log == \"function\" && Function.prototype.bind) {\n var log = Function.prototype.bind.call(console.log, console);\n log.apply(console, arguments);\n }\n return arguments[arguments.length - 1];\n};\n\n\nnv.render = function render(step) {\n step = step || 1; // number of graphs to generate in each timeout loop\n\n nv.render.active = true;\n nv.dispatch.render_start();\n\n setTimeout(function() {\n var chart, graph;\n\n for (var i = 0; i < step && (graph = nv.render.queue[i]); i++) {\n chart = graph.generate();\n if (typeof graph.callback == typeof(Function)) graph.callback(chart);\n nv.graphs.push(chart);\n }\n\n nv.render.queue.splice(0, i);\n\n if (nv.render.queue.length) setTimeout(arguments.callee, 0);\n else { nv.render.active = false; nv.dispatch.render_end(); }\n }, 0);\n};\n\nnv.render.active = false;\nnv.render.queue = [];\n\nnv.addGraph = function(obj) {\n if (typeof arguments[0] === typeof(Function))\n obj = {generate: arguments[0], callback: arguments[1]};\n\n nv.render.queue.push(obj);\n\n if (!nv.render.active) nv.render();\n};\n\nnv.identity = function(d) { return d; };\n\nnv.strip = function(s) { return s.replace(/(\\s|&)/g,''); };\n\nfunction daysInMonth(month,year) {\n return (new Date(year, month+1, 0)).getDate();\n}\n\nfunction d3_time_range(floor, step, number) {\n return function(t0, t1, dt) {\n var time = floor(t0), times = [];\n if (time < t0) step(time);\n if (dt > 1) {\n while (time < t1) {\n var date = new Date(+time);\n if ((number(date) % dt === 0)) times.push(date);\n step(time);\n }\n } else {\n while (time < t1) { times.push(new Date(+time)); step(time); }\n }\n return times;\n };\n}\n\nd3.time.monthEnd = function(date) {\n return new Date(date.getFullYear(), date.getMonth(), 0);\n};\n\nd3.time.monthEnds = d3_time_range(d3.time.monthEnd, function(date) {\n date.setUTCDate(date.getUTCDate() + 1);\n date.setDate(daysInMonth(date.getMonth() + 1, date.getFullYear()));\n }, function(date) {\n return date.getMonth();\n }\n);\n\n/* Utility class to handle creation of an interactive layer.\nThis places a rectangle on top of the chart. When you mouse move over it, it sends a dispatch\ncontaining the X-coordinate. It can also render a vertical line where the mouse is located.\n\ndispatch.elementMousemove is the important event to latch onto. It is fired whenever the mouse moves over\nthe rectangle. The dispatch is given one object which contains the mouseX/Y location.\nIt also has 'pointXValue', which is the conversion of mouseX to the x-axis scale.\n*/\nnv.interactiveGuideline = function() {\n\t\"use strict\";\n\tvar tooltip = nv.models.tooltip();\n\t//Public settings\n\tvar width = null\n\t, height = null\n //Please pass in the bounding chart's top and left margins\n //This is important for calculating the correct mouseX/Y positions.\n\t, margin = {left: 0, top: 0}\n\t, xScale = d3.scale.linear()\n\t, yScale = d3.scale.linear()\n\t, dispatch = d3.dispatch('elementMousemove', 'elementMouseout')\n\t, showGuideLine = true\n\t, svgContainer = null\n //Must pass in the bounding chart's <svg> container.\n //The mousemove event is attached to this container.\n\t;\n\n\t//Private variables\n\tvar isMSIE = navigator.userAgent.indexOf(\"MSIE\") !== -1 //Check user-agent for Microsoft Internet Explorer.\n\t;\n\n\n\tfunction layer(selection) {\n\t\tselection.each(function(data) {\n\t\t\t\tvar container = d3.select(this);\n\n\t\t\t\tvar availableWidth = (width || 960), availableHeight = (height || 400);\n\n\t\t\t\tvar wrap = container.selectAll(\"g.nv-wrap.nv-interactiveLineLayer\").data([data]);\n\t\t\t\tvar wrapEnter = wrap.enter()\n\t\t\t\t\t\t\t\t.append(\"g\").attr(\"class\", \" nv-wrap nv-interactiveLineLayer\");\n\n\n\t\t\t\twrapEnter.append(\"g\").attr(\"class\",\"nv-interactiveGuideLine\");\n\n\t\t\t\tif (!svgContainer) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n function mouseHandler() {\n var d3mouse = d3.mouse(this);\n var mouseX = d3mouse[0];\n var mouseY = d3mouse[1];\n var subtractMargin = true;\n var mouseOutAnyReason = false;\n if (isMSIE) {\n /*\n D3.js (or maybe SVG.getScreenCTM) has a nasty bug in Internet Explorer 10.\n d3.mouse() returns incorrect X,Y mouse coordinates when mouse moving\n over a rect in IE 10.\n However, d3.event.offsetX/Y also returns the mouse coordinates\n relative to the triggering <rect>. So we use offsetX/Y on IE.\n */\n mouseX = d3.event.offsetX;\n mouseY = d3.event.offsetY;\n\n /*\n On IE, if you attach a mouse event listener to the <svg> container,\n it will actually trigger it for all the child elements (like <path>, <circle>, etc).\n When this happens on IE, the offsetX/Y is set to where ever the child element\n is located.\n As a result, we do NOT need to subtract margins to figure out the mouse X/Y\n position under this scenario. Removing the line below *will* cause\n the interactive layer to not work right on IE.\n */\n if(d3.event.target.tagName !== \"svg\")\n subtractMargin = false;\n\n if (d3.event.target.className.baseVal.match(\"nv-legend\"))\n \tmouseOutAnyReason = true;\n\n }\n\n if(subtractMargin) {\n mouseX -= margin.left;\n mouseY -= margin.top;\n }\n\n /* If mouseX/Y is outside of the chart's bounds,\n trigger a mouseOut event.\n */\n if (mouseX < 0 || mouseY < 0\n || mouseX > availableWidth || mouseY > availableHeight\n || (d3.event.relatedTarget && d3.event.relatedTarget.ownerSVGElement === undefined)\n || mouseOutAnyReason\n )\n {\n \t\tif (isMSIE) {\n \t\t\tif (d3.event.relatedTarget\n \t\t\t\t&& d3.event.relatedTarget.ownerSVGElement === undefined\n \t\t\t\t&& d3.event.relatedTarget.className.match(tooltip.nvPointerEventsClass)) {\n \t\t\t\treturn;\n \t\t\t}\n \t\t}\n dispatch.elementMouseout({\n mouseX: mouseX,\n mouseY: mouseY\n });\n layer.renderGuideLine(null); //hide the guideline\n return;\n }\n\n var pointXValue = xScale.invert(mouseX);\n dispatch.elementMousemove({\n mouseX: mouseX,\n mouseY: mouseY,\n pointXValue: pointXValue\n });\n }\n\n\t\t\t\tsvgContainer\n\t\t\t\t .on(\"mousemove\",mouseHandler, true)\n\t\t\t\t .on(\"mouseout\",mouseHandler,true)\n\t\t\t\t ;\n\n\t\t\t\t //Draws a vertical guideline at the given X postion.\n\t\t\t\tlayer.renderGuideLine = function(x) {\n\t\t\t\t \tif (!showGuideLine) return;\n\t\t\t\t \tvar line = wrap.select(\".nv-interactiveGuideLine\")\n\t\t\t\t \t .selectAll(\"line\")\n\t\t\t\t \t .data((x != null) ? [nv.utils.NaNtoZero(x)] : [], String);\n\n\t\t\t\t \tline.enter()\n\t\t\t\t \t\t.append(\"line\")\n\t\t\t\t \t\t.attr(\"class\", \"nv-guideline\")\n\t\t\t\t \t\t.attr(\"x1\", function(d) { return d;})\n\t\t\t\t \t\t.attr(\"x2\", function(d) { return d;})\n\t\t\t\t \t\t.attr(\"y1\", availableHeight)\n\t\t\t\t \t\t.attr(\"y2\",0)\n\t\t\t\t \t\t;\n\t\t\t\t \tline.exit().remove();\n\n\t\t\t\t}\n\t\t});\n\t}\n\n\tlayer.dispatch = dispatch;\n\tlayer.tooltip = tooltip;\n\n\tlayer.margin = function(_) {\n\t if (!arguments.length) return margin;\n\t margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n\t margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n\t return layer;\n };\n\n\tlayer.width = function(_) {\n\t\tif (!arguments.length) return width;\n\t\twidth = _;\n\t\treturn layer;\n\t};\n\n\tlayer.height = function(_) {\n\t\tif (!arguments.length) return height;\n\t\theight = _;\n\t\treturn layer;\n\t};\n\n\tlayer.xScale = function(_) {\n\t\tif (!arguments.length) return xScale;\n\t\txScale = _;\n\t\treturn layer;\n\t};\n\n\tlayer.showGuideLine = function(_) {\n\t\tif (!arguments.length) return showGuideLine;\n\t\tshowGuideLine = _;\n\t\treturn layer;\n\t};\n\n\tlayer.svgContainer = function(_) {\n\t\tif (!arguments.length) return svgContainer;\n\t\tsvgContainer = _;\n\t\treturn layer;\n\t};\n\n\n\treturn layer;\n};\n\n/* Utility class that uses d3.bisect to find the index in a given array, where a search value can be inserted.\nThis is different from normal bisectLeft; this function finds the nearest index to insert the search value.\n\nFor instance, lets say your array is [1,2,3,5,10,30], and you search for 28.\nNormal d3.bisectLeft will return 4, because 28 is inserted after the number 10. But interactiveBisect will return 5\nbecause 28 is closer to 30 than 10.\n\nUnit tests can be found in: interactiveBisectTest.html\n\nHas the following known issues:\n * Will not work if the data points move backwards (ie, 10,9,8,7, etc) or if the data points are in random order.\n * Won't work if there are duplicate x coordinate values.\n*/\nnv.interactiveBisect = function (values, searchVal, xAccessor) {\n\t \"use strict\";\n if (! values instanceof Array) return null;\n if (typeof xAccessor !== 'function') xAccessor = function(d,i) { return d.x;}\n\n var bisect = d3.bisector(xAccessor).left;\n var index = d3.max([0, bisect(values,searchVal) - 1]);\n var currentValue = xAccessor(values[index], index);\n if (typeof currentValue === 'undefined') currentValue = index;\n\n if (currentValue === searchVal) return index; //found exact match\n\n var nextIndex = d3.min([index+1, values.length - 1]);\n var nextValue = xAccessor(values[nextIndex], nextIndex);\n if (typeof nextValue === 'undefined') nextValue = nextIndex;\n\n if (Math.abs(nextValue - searchVal) >= Math.abs(currentValue - searchVal))\n return index;\n else\n return nextIndex\n};/* Tooltip rendering model for nvd3 charts.\nwindow.nv.models.tooltip is the updated,new way to render tooltips.\n\nwindow.nv.tooltip.show is the old tooltip code.\nwindow.nv.tooltip.* also has various helper methods.\n*/\n(function() {\n \"use strict\";\n window.nv.tooltip = {};\n\n /* Model which can be instantiated to handle tooltip rendering.\n Example usage:\n var tip = nv.models.tooltip().gravity('w').distance(23)\n .data(myDataObject);\n\n tip(); //just invoke the returned function to render tooltip.\n */\n window.nv.models.tooltip = function() {\n var content = null //HTML contents of the tooltip. If null, the content is generated via the data variable.\n , data = null /* Tooltip data. If data is given in the proper format, a consistent tooltip is generated.\n Format of data:\n {\n key: \"Date\",\n value: \"August 2009\",\n series: [\n {\n key: \"Series 1\",\n value: \"Value 1\",\n color: \"#000\"\n },\n {\n key: \"Series 2\",\n value: \"Value 2\",\n color: \"#00f\"\n }\n ]\n\n }\n\n */\n , gravity = 'w' //Can be 'n','s','e','w'. Determines how tooltip is positioned.\n , distance = 50 //Distance to offset tooltip from the mouse location.\n , snapDistance = 25 //Tolerance allowed before tooltip is moved from its current position (creates 'snapping' effect)\n , fixedTop = null //If not null, this fixes the top position of the tooltip.\n , classes = null //Attaches additional CSS classes to the tooltip DIV that is created.\n , chartContainer = null //Parent DIV, of the SVG Container that holds the chart.\n , position = {left: null, top: null} //Relative position of the tooltip inside chartContainer.\n , enabled = true //True -> tooltips are rendered. False -> don't render tooltips.\n //Generates a unique id when you create a new tooltip() object\n , id = \"nvtooltip-\" + Math.floor(Math.random() * 100000)\n ;\n\n //CSS class to specify whether element should not have mouse events.\n var nvPointerEventsClass = \"nv-pointer-events-none\";\n\n //Format function for the tooltip values column\n var valueFormatter = function(d,i) {\n return d;\n };\n\n //Format function for the tooltip header value.\n var headerFormatter = function(d) {\n return d;\n };\n\n //By default, the tooltip model renders a beautiful table inside a DIV.\n //You can override this function if a custom tooltip is desired.\n var contentGenerator = function(d) {\n if (content != null) return content;\n\n if (d == null) return '';\n\n var html = \"<table><thead><tr><td colspan='3'><strong class='x-value'>\" + headerFormatter(d.value) + \"</strong></td></tr></thead><tbody>\";\n if (d.series instanceof Array) {\n d.series.forEach(function(item, i) {\n html += \"<tr>\";\n html += \"<td class='legend-color-guide'><div style='background-color: \" + item.color + \";'></div></td>\";\n html += \"<td class='key'>\" + item.key + \":</td>\";\n html += \"<td class='value'>\" + valueFormatter(item.value,i) + \"</td></tr>\";\n });\n }\n html += \"</tbody></table>\";\n return html;\n };\n\n var dataSeriesExists = function(d) {\n if (d && d.series && d.series.length > 0) return true;\n\n return false;\n };\n\n //In situations where the chart is in a 'viewBox', re-position the tooltip based on how far chart is zoomed.\n function convertViewBoxRatio() {\n if (chartContainer) {\n var svg = d3.select(chartContainer);\n if (svg.node().tagName !== \"svg\") {\n svg = svg.select(\"svg\");\n }\n var viewBox = (svg.node()) ? svg.attr('viewBox') : null;\n if (viewBox) {\n viewBox = viewBox.split(' ');\n var ratio = parseInt(svg.style('width')) / viewBox[2];\n\n position.left = position.left * ratio;\n position.top = position.top * ratio;\n }\n }\n }\n\n //Creates new tooltip container, or uses existing one on DOM.\n function getTooltipContainer(newContent) {\n var body;\n if (chartContainer)\n body = d3.select(chartContainer);\n else\n body = d3.select(\"body\");\n\n var container = body.select(\".nvtooltip\");\n if (container.node() === null) {\n //Create new tooltip div if it doesn't exist on DOM.\n container = body.append(\"div\")\n .attr(\"class\", \"nvtooltip \" + (classes? classes: \"xy-tooltip\"))\n .attr(\"id\",id)\n ;\n }\n\n\n container.node().innerHTML = newContent;\n container.style(\"top\",0).style(\"left\",0).style(\"opacity\",0);\n container.selectAll(\"div, table, td, tr\").classed(nvPointerEventsClass,true)\n container.classed(nvPointerEventsClass,true);\n return container.node();\n }\n\n\n\n //Draw the tooltip onto the DOM.\n function nvtooltip() {\n if (!enabled) return;\n if (!dataSeriesExists(data)) return;\n\n convertViewBoxRatio();\n\n var left = position.left;\n var top = (fixedTop != null) ? fixedTop : position.top;\n var container = getTooltipContainer(contentGenerator(data));\n\n if (chartContainer) {\n var svgComp = chartContainer.getElementsByTagName(\"svg\")[0];\n var boundRect = (svgComp) ? svgComp.getBoundingClientRect() : chartContainer.getBoundingClientRect();\n var svgOffset = {left:0,top:0};\n if (svgComp) {\n var svgBound = svgComp.getBoundingClientRect();\n var chartBound = chartContainer.getBoundingClientRect();\n svgOffset.top = Math.abs(svgBound.top - chartBound.top);\n svgOffset.left = Math.abs(svgBound.left - chartBound.left);\n }\n //If the parent container is an overflow <div> with scrollbars, subtract the scroll offsets.\n //You need to also add any offset between the <svg> element and its containing <div>\n //Finally, add any offset of the containing <div> on the whole page.\n left += chartContainer.offsetLeft + svgOffset.left - 2*chartContainer.scrollLeft;\n top += chartContainer.offsetTop + svgOffset.top - 2*chartContainer.scrollTop;\n }\n\n if (snapDistance && snapDistance > 0) {\n top = Math.floor(top/snapDistance) * snapDistance;\n }\n\n nv.tooltip.calcTooltipPosition([left,top], gravity, distance, container);\n return nvtooltip;\n };\n\n nvtooltip.nvPointerEventsClass = nvPointerEventsClass;\n\n nvtooltip.content = function(_) {\n if (!arguments.length) return content;\n content = _;\n return nvtooltip;\n };\n\n nvtooltip.contentGenerator = function(_) {\n if (!arguments.length) return contentGenerator;\n if (typeof _ === 'function') {\n contentGenerator = _;\n }\n return nvtooltip;\n };\n\n nvtooltip.data = function(_) {\n if (!arguments.length) return data;\n data = _;\n return nvtooltip;\n };\n\n nvtooltip.gravity = function(_) {\n if (!arguments.length) return gravity;\n gravity = _;\n return nvtooltip;\n };\n\n nvtooltip.distance = function(_) {\n if (!arguments.length) return distance;\n distance = _;\n return nvtooltip;\n };\n\n nvtooltip.snapDistance = function(_) {\n if (!arguments.length) return snapDistance;\n snapDistance = _;\n return nvtooltip;\n };\n\n nvtooltip.classes = function(_) {\n if (!arguments.length) return classes;\n classes = _;\n return nvtooltip;\n };\n\n nvtooltip.chartContainer = function(_) {\n if (!arguments.length) return chartContainer;\n chartContainer = _;\n return nvtooltip;\n };\n\n nvtooltip.position = function(_) {\n if (!arguments.length) return position;\n position.left = (typeof _.left !== 'undefined') ? _.left : position.left;\n position.top = (typeof _.top !== 'undefined') ? _.top : position.top;\n return nvtooltip;\n };\n\n nvtooltip.fixedTop = function(_) {\n if (!arguments.length) return fixedTop;\n fixedTop = _;\n return nvtooltip;\n };\n\n nvtooltip.enabled = function(_) {\n if (!arguments.length) return enabled;\n enabled = _;\n return nvtooltip;\n };\n\n nvtooltip.valueFormatter = function(_) {\n if (!arguments.length) return valueFormatter;\n if (typeof _ === 'function') {\n valueFormatter = _;\n }\n return nvtooltip;\n };\n\n nvtooltip.headerFormatter = function(_) {\n if (!arguments.length) return headerFormatter;\n if (typeof _ === 'function') {\n headerFormatter = _;\n }\n return nvtooltip;\n };\n\n //id() is a read-only function. You can't use it to set the id.\n nvtooltip.id = function() {\n return id;\n };\n\n\n return nvtooltip;\n };\n\n\n //Original tooltip.show function. Kept for backward compatibility.\n // pos = [left,top]\n nv.tooltip.show = function(pos, content, gravity, dist, parentContainer, classes) {\n\n //Create new tooltip div if it doesn't exist on DOM.\n var container = document.createElement('div');\n container.className = 'nvtooltip ' + (classes ? classes : 'xy-tooltip');\n\n var body = parentContainer;\n if ( !parentContainer || parentContainer.tagName.match(/g|svg/i)) {\n //If the parent element is an SVG element, place tooltip in the <body> element.\n body = document.getElementsByTagName('body')[0];\n }\n\n container.style.left = 0;\n container.style.top = 0;\n container.style.opacity = 0;\n container.innerHTML = content;\n body.appendChild(container);\n\n //If the parent container is an overflow <div> with scrollbars, subtract the scroll offsets.\n if (parentContainer) {\n pos[0] = pos[0] - parentContainer.scrollLeft;\n pos[1] = pos[1] - parentContainer.scrollTop;\n }\n nv.tooltip.calcTooltipPosition(pos, gravity, dist, container);\n };\n\n //Looks up the ancestry of a DOM element, and returns the first NON-svg node.\n nv.tooltip.findFirstNonSVGParent = function(Elem) {\n while(Elem.tagName.match(/^g|svg$/i) !== null) {\n Elem = Elem.parentNode;\n }\n return Elem;\n };\n\n //Finds the total offsetTop of a given DOM element.\n //Looks up the entire ancestry of an element, up to the first relatively positioned element.\n nv.tooltip.findTotalOffsetTop = function ( Elem, initialTop ) {\n var offsetTop = initialTop;\n\n do {\n if( !isNaN( Elem.offsetTop ) ) {\n offsetTop += (Elem.offsetTop);\n }\n } while( Elem = Elem.offsetParent );\n return offsetTop;\n };\n\n //Finds the total offsetLeft of a given DOM element.\n //Looks up the entire ancestry of an element, up to the first relatively positioned element.\n nv.tooltip.findTotalOffsetLeft = function ( Elem, initialLeft) {\n var offsetLeft = initialLeft;\n\n do {\n if( !isNaN( Elem.offsetLeft ) ) {\n offsetLeft += (Elem.offsetLeft);\n }\n } while( Elem = Elem.offsetParent );\n return offsetLeft;\n };\n\n //Global utility function to render a tooltip on the DOM.\n //pos = [left,top] coordinates of where to place the tooltip, relative to the SVG chart container.\n //gravity = how to orient the tooltip\n //dist = how far away from the mouse to place tooltip\n //container = tooltip DIV\n nv.tooltip.calcTooltipPosition = function(pos, gravity, dist, container) {\n\n var height = parseInt(container.offsetHeight),\n width = parseInt(container.offsetWidth),\n windowWidth = nv.utils.windowSize().width,\n windowHeight = nv.utils.windowSize().height,\n scrollTop = window.pageYOffset,\n scrollLeft = window.pageXOffset,\n left, top;\n\n windowHeight = window.innerWidth >= document.body.scrollWidth ? windowHeight : windowHeight - 16;\n windowWidth = window.innerHeight >= document.body.scrollHeight ? windowWidth : windowWidth - 16;\n\n gravity = gravity || 's';\n dist = dist || 20;\n\n var tooltipTop = function ( Elem ) {\n return nv.tooltip.findTotalOffsetTop(Elem, top);\n };\n\n var tooltipLeft = function ( Elem ) {\n return nv.tooltip.findTotalOffsetLeft(Elem,left);\n };\n\n switch (gravity) {\n case 'e':\n left = pos[0] - width - dist;\n top = pos[1] - (height / 2);\n var tLeft = tooltipLeft(container);\n var tTop = tooltipTop(container);\n if (tLeft < scrollLeft) left = pos[0] + dist > scrollLeft ? pos[0] + dist : scrollLeft - tLeft + left;\n if (tTop < scrollTop) top = scrollTop - tTop + top;\n if (tTop + height > scrollTop + windowHeight) top = scrollTop + windowHeight - tTop + top - height;\n break;\n case 'w':\n left = pos[0] + dist;\n top = pos[1] - (height / 2);\n var tLeft = tooltipLeft(container);\n var tTop = tooltipTop(container);\n if (tLeft + width > windowWidth) left = pos[0] - width - dist;\n if (tTop < scrollTop) top = scrollTop + 5;\n if (tTop + height > scrollTop + windowHeight) top = scrollTop + windowHeight - tTop + top - height;\n break;\n case 'n':\n left = pos[0] - (width / 2) - 5;\n top = pos[1] + dist;\n var tLeft = tooltipLeft(container);\n var tTop = tooltipTop(container);\n if (tLeft < scrollLeft) left = scrollLeft + 5;\n if (tLeft + width > windowWidth) left = left - width/2 + 5;\n if (tTop + height > scrollTop + windowHeight) top = scrollTop + windowHeight - tTop + top - height;\n break;\n case 's':\n left = pos[0] - (width / 2);\n top = pos[1] - height - dist;\n var tLeft = tooltipLeft(container);\n var tTop = tooltipTop(container);\n if (tLeft < scrollLeft) left = scrollLeft + 5;\n if (tLeft + width > windowWidth) left = left - width/2 + 5;\n if (scrollTop > tTop) top = scrollTop;\n break;\n case 'none':\n left = pos[0];\n top = pos[1] - dist;\n var tLeft = tooltipLeft(container);\n var tTop = tooltipTop(container);\n break;\n }\n\n\n container.style.left = left+'px';\n container.style.top = top+'px';\n container.style.opacity = 1;\n container.style.position = 'absolute';\n\n return container;\n };\n\n //Global utility function to remove tooltips from the DOM.\n nv.tooltip.cleanup = function() {\n\n // Find the tooltips, mark them for removal by this class (so others cleanups won't find it)\n var tooltips = document.getElementsByClassName('nvtooltip');\n var purging = [];\n while(tooltips.length) {\n purging.push(tooltips[0]);\n tooltips[0].style.transitionDelay = '0 !important';\n tooltips[0].style.opacity = 0;\n tooltips[0].className = 'nvtooltip-pending-removal';\n }\n\n setTimeout(function() {\n\n while (purging.length) {\n var removeMe = purging.pop();\n removeMe.parentNode.removeChild(removeMe);\n }\n }, 500);\n };\n\n})();\n\nnv.utils.windowSize = function() {\n // Sane defaults\n var size = {width: 640, height: 480};\n\n // Earlier IE uses Doc.body\n if (document.body && document.body.offsetWidth) {\n size.width = document.body.offsetWidth;\n size.height = document.body.offsetHeight;\n }\n\n // IE can use depending on mode it is in\n if (document.compatMode=='CSS1Compat' &&\n document.documentElement &&\n document.documentElement.offsetWidth ) {\n size.width = document.documentElement.offsetWidth;\n size.height = document.documentElement.offsetHeight;\n }\n\n // Most recent browsers use\n if (window.innerWidth && window.innerHeight) {\n size.width = window.innerWidth;\n size.height = window.innerHeight;\n }\n return (size);\n};\n\n\n\n// Easy way to bind multiple functions to window.onresize\n// TODO: give a way to remove a function after its bound, other than removing all of them\nnv.utils.windowResize = function(fun){\n if (fun === undefined) return;\n var oldresize = window.onresize;\n\n window.onresize = function(e) {\n if (typeof oldresize == 'function') oldresize(e);\n fun(e);\n }\n}\n\n// Backwards compatible way to implement more d3-like coloring of graphs.\n// If passed an array, wrap it in a function which implements the old default\n// behavior\nnv.utils.getColor = function(color) {\n if (!arguments.length) return nv.utils.defaultColor(); //if you pass in nothing, get default colors back\n\n if( Object.prototype.toString.call( color ) === '[object Array]' )\n return function(d, i) { return d.color || color[i % color.length]; };\n else\n return color;\n //can't really help it if someone passes rubbish as color\n}\n\n// Default color chooser uses the index of an object as before.\nnv.utils.defaultColor = function() {\n var colors = d3.scale.category20().range();\n return function(d, i) { return d.color || colors[i % colors.length] };\n}\n\n\n// Returns a color function that takes the result of 'getKey' for each series and\n// looks for a corresponding color from the dictionary,\nnv.utils.customTheme = function(dictionary, getKey, defaultColors) {\n getKey = getKey || function(series) { return series.key }; // use default series.key if getKey is undefined\n defaultColors = defaultColors || d3.scale.category20().range(); //default color function\n\n var defIndex = defaultColors.length; //current default color (going in reverse)\n\n return function(series, index) {\n var key = getKey(series);\n\n if (!defIndex) defIndex = defaultColors.length; //used all the default colors, start over\n\n if (typeof dictionary[key] !== \"undefined\")\n return (typeof dictionary[key] === \"function\") ? dictionary[key]() : dictionary[key];\n else\n return defaultColors[--defIndex]; // no match in dictionary, use default color\n }\n}\n\n\n\n// From the PJAX example on d3js.org, while this is not really directly needed\n// it's a very cool method for doing pjax, I may expand upon it a little bit,\n// open to suggestions on anything that may be useful\nnv.utils.pjax = function(links, content) {\n d3.selectAll(links).on(\"click\", function() {\n history.pushState(this.href, this.textContent, this.href);\n load(this.href);\n d3.event.preventDefault();\n });\n\n function load(href) {\n d3.html(href, function(fragment) {\n var target = d3.select(content).node();\n target.parentNode.replaceChild(d3.select(fragment).select(content).node(), target);\n nv.utils.pjax(links, content);\n });\n }\n\n d3.select(window).on(\"popstate\", function() {\n if (d3.event.state) load(d3.event.state);\n });\n}\n\n/* For situations where we want to approximate the width in pixels for an SVG:text element.\nMost common instance is when the element is in a display:none; container.\nForumla is : text.length * font-size * constant_factor\n*/\nnv.utils.calcApproxTextWidth = function (svgTextElem) {\n if (svgTextElem instanceof d3.selection) {\n var fontSize = parseInt(svgTextElem.style(\"font-size\").replace(\"px\",\"\"));\n var textLength = svgTextElem.text().length;\n\n return textLength * fontSize * 0.5;\n }\n return 0;\n};\n\n/* Numbers that are undefined, null or NaN, convert them to zeros.\n*/\nnv.utils.NaNtoZero = function(n) {\n if (typeof n !== 'number'\n || isNaN(n)\n || n === null\n || n === Infinity) return 0;\n\n return n;\n};\n\n/*\nSnippet of code you can insert into each nv.models.* to give you the ability to\ndo things like:\nchart.options({\n showXAxis: true,\n tooltips: true\n});\n\nTo enable in the chart:\nchart.options = nv.utils.optionsFunc.bind(chart);\n*/\nnv.utils.optionsFunc = function(args) {\n if (args) {\n d3.map(args).forEach((function(key,value) {\n if (typeof this[key] === \"function\") {\n this[key](value);\n }\n }).bind(this));\n }\n return this;\n};nv.models.axis = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var axis = d3.svg.axis()\n ;\n\n var margin = {top: 0, right: 0, bottom: 0, left: 0}\n , width = 75 //only used for tickLabel currently\n , height = 60 //only used for tickLabel currently\n , scale = d3.scale.linear()\n , axisLabelText = null\n , showMaxMin = true //TODO: showMaxMin should be disabled on all ordinal scaled axes\n , highlightZero = true\n , rotateLabels = 0\n , rotateYLabel = true\n , staggerLabels = false\n , isOrdinal = false\n , ticks = null\n ;\n\n axis\n .scale(scale)\n .orient('bottom')\n .tickFormat(function(d) { return d })\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var scale0;\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this);\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-axis').data([data]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-axis');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g')\n\n //------------------------------------------------------------\n\n\n if (ticks !== null)\n axis.ticks(ticks);\n else if (axis.orient() == 'top' || axis.orient() == 'bottom')\n axis.ticks(Math.abs(scale.range()[1] - scale.range()[0]) / 100);\n\n\n //TODO: consider calculating width/height based on whether or not label is added, for reference in charts using this component\n\n\n g.transition().call(axis);\n\n scale0 = scale0 || axis.scale();\n\n var fmt = axis.tickFormat();\n if (fmt == null) {\n fmt = scale0.tickFormat();\n }\n\n var axisLabel = g.selectAll('text.nv-axislabel')\n .data([axisLabelText || null]);\n axisLabel.exit().remove();\n switch (axis.orient()) {\n case 'top':\n axisLabel.enter().append('text').attr('class', 'nv-axislabel');\n var w = (scale.range().length==2) ? scale.range()[1] : (scale.range()[scale.range().length-1]+(scale.range()[1]-scale.range()[0]));\n axisLabel\n .attr('text-anchor', 'middle')\n .attr('y', 0)\n .attr('x', w/2);\n if (showMaxMin) {\n var axisMaxMin = wrap.selectAll('g.nv-axisMaxMin')\n .data(scale.domain());\n axisMaxMin.enter().append('g').attr('class', 'nv-axisMaxMin').append('text');\n axisMaxMin.exit().remove();\n axisMaxMin\n .attr('transform', function(d,i) {\n return 'translate(' + scale(d) + ',0)'\n })\n .select('text')\n .attr('dy', '0em')\n .attr('y', -axis.tickPadding())\n .attr('text-anchor', 'middle')\n .text(function(d,i) {\n var v = fmt(d);\n return ('' + v).match('NaN') ? '' : v;\n });\n axisMaxMin.transition()\n .attr('transform', function(d,i) {\n return 'translate(' + scale.range()[i] + ',0)'\n });\n }\n break;\n case 'bottom':\n var xLabelMargin = 36;\n var maxTextWidth = 30;\n var xTicks = g.selectAll('g').select(\"text\");\n if (rotateLabels%360) {\n //Calculate the longest xTick width\n xTicks.each(function(d,i){\n var width = this.getBBox().width;\n if(width > maxTextWidth) maxTextWidth = width;\n });\n //Convert to radians before calculating sin. Add 30 to margin for healthy padding.\n var sin = Math.abs(Math.sin(rotateLabels*Math.PI/180));\n var xLabelMargin = (sin ? sin*maxTextWidth : maxTextWidth)+30;\n //Rotate all xTicks\n xTicks\n .attr('transform', function(d,i,j) { return 'rotate(' + rotateLabels + ' 0,0)' })\n .style('text-anchor', rotateLabels%360 > 0 ? 'start' : 'end');\n }\n axisLabel.enter().append('text').attr('class', 'nv-axislabel');\n var w = (scale.range().length==2) ? scale.range()[1] : (scale.range()[scale.range().length-1]+(scale.range()[1]-scale.range()[0]));\n axisLabel\n .attr('text-anchor', 'middle')\n .attr('y', xLabelMargin)\n .attr('x', w/2);\n if (showMaxMin) {\n //if (showMaxMin && !isOrdinal) {\n var axisMaxMin = wrap.selectAll('g.nv-axisMaxMin')\n //.data(scale.domain())\n .data([scale.domain()[0], scale.domain()[scale.domain().length - 1]]);\n axisMaxMin.enter().append('g').attr('class', 'nv-axisMaxMin').append('text');\n axisMaxMin.exit().remove();\n axisMaxMin\n .attr('transform', function(d,i) {\n return 'translate(' + (scale(d) + (isOrdinal ? scale.rangeBand() / 2 : 0)) + ',0)'\n })\n .select('text')\n .attr('dy', '.71em')\n .attr('y', axis.tickPadding())\n .attr('transform', function(d,i,j) { return 'rotate(' + rotateLabels + ' 0,0)' })\n .style('text-anchor', rotateLabels ? (rotateLabels%360 > 0 ? 'start' : 'end') : 'middle')\n .text(function(d,i) {\n var v = fmt(d);\n return ('' + v).match('NaN') ? '' : v;\n });\n axisMaxMin.transition()\n .attr('transform', function(d,i) {\n //return 'translate(' + scale.range()[i] + ',0)'\n //return 'translate(' + scale(d) + ',0)'\n return 'translate(' + (scale(d) + (isOrdinal ? scale.rangeBand() / 2 : 0)) + ',0)'\n });\n }\n if (staggerLabels)\n xTicks\n .attr('transform', function(d,i) { return 'translate(0,' + (i % 2 == 0 ? '0' : '12') + ')' });\n\n break;\n case 'right':\n axisLabel.enter().append('text').attr('class', 'nv-axislabel');\n axisLabel\n .style('text-anchor', rotateYLabel ? 'middle' : 'begin')\n .attr('transform', rotateYLabel ? 'rotate(90)' : '')\n .attr('y', rotateYLabel ? (-Math.max(margin.right,width) + 12) : -10) //TODO: consider calculating this based on largest tick width... OR at least expose this on chart\n .attr('x', rotateYLabel ? (scale.range()[0] / 2) : axis.tickPadding());\n if (showMaxMin) {\n var axisMaxMin = wrap.selectAll('g.nv-axisMaxMin')\n .data(scale.domain());\n axisMaxMin.enter().append('g').attr('class', 'nv-axisMaxMin').append('text')\n .style('opacity', 0);\n axisMaxMin.exit().remove();\n axisMaxMin\n .attr('transform', function(d,i) {\n return 'translate(0,' + scale(d) + ')'\n })\n .select('text')\n .attr('dy', '.32em')\n .attr('y', 0)\n .attr('x', axis.tickPadding())\n .style('text-anchor', 'start')\n .text(function(d,i) {\n var v = fmt(d);\n return ('' + v).match('NaN') ? '' : v;\n });\n axisMaxMin.transition()\n .attr('transform', function(d,i) {\n return 'translate(0,' + scale.range()[i] + ')'\n })\n .select('text')\n .style('opacity', 1);\n }\n break;\n case 'left':\n /*\n //For dynamically placing the label. Can be used with dynamically-sized chart axis margins\n var yTicks = g.selectAll('g').select(\"text\");\n yTicks.each(function(d,i){\n var labelPadding = this.getBBox().width + axis.tickPadding() + 16;\n if(labelPadding > width) width = labelPadding;\n });\n */\n axisLabel.enter().append('text').attr('class', 'nv-axislabel');\n axisLabel\n .style('text-anchor', rotateYLabel ? 'middle' : 'end')\n .attr('transform', rotateYLabel ? 'rotate(-90)' : '')\n .attr('y', rotateYLabel ? (-Math.max(margin.left,width) + 12) : -10) //TODO: consider calculating this based on largest tick width... OR at least expose this on chart\n .attr('x', rotateYLabel ? (-scale.range()[0] / 2) : -axis.tickPadding());\n if (showMaxMin) {\n var axisMaxMin = wrap.selectAll('g.nv-axisMaxMin')\n .data(scale.domain());\n axisMaxMin.enter().append('g').attr('class', 'nv-axisMaxMin').append('text')\n .style('opacity', 0);\n axisMaxMin.exit().remove();\n axisMaxMin\n .attr('transform', function(d,i) {\n return 'translate(0,' + scale0(d) + ')'\n })\n .select('text')\n .attr('dy', '.32em')\n .attr('y', 0)\n .attr('x', -axis.tickPadding())\n .attr('text-anchor', 'end')\n .text(function(d,i) {\n var v = fmt(d);\n return ('' + v).match('NaN') ? '' : v;\n });\n axisMaxMin.transition()\n .attr('transform', function(d,i) {\n return 'translate(0,' + scale.range()[i] + ')'\n })\n .select('text')\n .style('opacity', 1);\n }\n break;\n }\n axisLabel\n .text(function(d) { return d });\n\n\n if (showMaxMin && (axis.orient() === 'left' || axis.orient() === 'right')) {\n //check if max and min overlap other values, if so, hide the values that overlap\n g.selectAll('g') // the g's wrapping each tick\n .each(function(d,i) {\n d3.select(this).select('text').attr('opacity', 1);\n if (scale(d) < scale.range()[1] + 10 || scale(d) > scale.range()[0] - 10) { // 10 is assuming text height is 16... if d is 0, leave it!\n if (d > 1e-10 || d < -1e-10) // accounts for minor floating point errors... though could be problematic if the scale is EXTREMELY SMALL\n d3.select(this).attr('opacity', 0);\n\n d3.select(this).select('text').attr('opacity', 0); // Don't remove the ZERO line!!\n }\n });\n\n //if Max and Min = 0 only show min, Issue #281\n if (scale.domain()[0] == scale.domain()[1] && scale.domain()[0] == 0)\n wrap.selectAll('g.nv-axisMaxMin')\n .style('opacity', function(d,i) { return !i ? 1 : 0 });\n\n }\n\n if (showMaxMin && (axis.orient() === 'top' || axis.orient() === 'bottom')) {\n var maxMinRange = [];\n wrap.selectAll('g.nv-axisMaxMin')\n .each(function(d,i) {\n try {\n if (i) // i== 1, max position\n maxMinRange.push(scale(d) - this.getBBox().width - 4) //assuming the max and min labels are as wide as the next tick (with an extra 4 pixels just in case)\n else // i==0, min position\n maxMinRange.push(scale(d) + this.getBBox().width + 4)\n }catch (err) {\n if (i) // i== 1, max position\n maxMinRange.push(scale(d) - 4) //assuming the max and min labels are as wide as the next tick (with an extra 4 pixels just in case)\n else // i==0, min position\n maxMinRange.push(scale(d) + 4)\n }\n });\n g.selectAll('g') // the g's wrapping each tick\n .each(function(d,i) {\n if (scale(d) < maxMinRange[0] || scale(d) > maxMinRange[1]) {\n if (d > 1e-10 || d < -1e-10) // accounts for minor floating point errors... though could be problematic if the scale is EXTREMELY SMALL\n d3.select(this).remove();\n else\n d3.select(this).select('text').remove(); // Don't remove the ZERO line!!\n }\n });\n }\n\n\n //highlight zero line ... Maybe should not be an option and should just be in CSS?\n if (highlightZero)\n g.selectAll('.tick')\n .filter(function(d) { return !parseFloat(Math.round(d.__data__*100000)/1000000) && (d.__data__ !== undefined) }) //this is because sometimes the 0 tick is a very small fraction, TODO: think of cleaner technique\n .classed('zero', true);\n\n //store old scales for use in transitions on update\n scale0 = scale.copy();\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.axis = axis;\n\n d3.rebind(chart, axis, 'orient', 'tickValues', 'tickSubdivide', 'tickSize', 'tickPadding', 'tickFormat');\n d3.rebind(chart, scale, 'domain', 'range', 'rangeBand', 'rangeBands'); //these are also accessible by chart.scale(), but added common ones directly for ease of use\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if(!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n }\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.ticks = function(_) {\n if (!arguments.length) return ticks;\n ticks = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.axisLabel = function(_) {\n if (!arguments.length) return axisLabelText;\n axisLabelText = _;\n return chart;\n }\n\n chart.showMaxMin = function(_) {\n if (!arguments.length) return showMaxMin;\n showMaxMin = _;\n return chart;\n }\n\n chart.highlightZero = function(_) {\n if (!arguments.length) return highlightZero;\n highlightZero = _;\n return chart;\n }\n\n chart.scale = function(_) {\n if (!arguments.length) return scale;\n scale = _;\n axis.scale(scale);\n isOrdinal = typeof scale.rangeBands === 'function';\n d3.rebind(chart, scale, 'domain', 'range', 'rangeBand', 'rangeBands');\n return chart;\n }\n\n chart.rotateYLabel = function(_) {\n if(!arguments.length) return rotateYLabel;\n rotateYLabel = _;\n return chart;\n }\n\n chart.rotateLabels = function(_) {\n if(!arguments.length) return rotateLabels;\n rotateLabels = _;\n return chart;\n }\n\n chart.staggerLabels = function(_) {\n if (!arguments.length) return staggerLabels;\n staggerLabels = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\n// Chart design based on the recommendations of Stephen Few. Implementation\n// based on the work of Clint Ivy, Jamie Love, and Jason Davies.\n// http://projects.instantcognition.com/protovis/bulletchart/\n\nnv.models.bullet = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 0, right: 0, bottom: 0, left: 0}\n , orient = 'left' // TODO top & bottom\n , reverse = false\n , ranges = function(d) { return d.ranges }\n , markers = function(d) { return d.markers }\n , measures = function(d) { return d.measures }\n , rangeLabels = function(d) { return d.rangeLabels ? d.rangeLabels : [] }\n , markerLabels = function(d) { return d.markerLabels ? d.markerLabels : [] }\n , measureLabels = function(d) { return d.measureLabels ? d.measureLabels : [] }\n , forceX = [0] // List of numbers to Force into the X scale (ie. 0, or a max / min, etc.)\n , width = 380\n , height = 30\n , tickFormat = null\n , color = nv.utils.getColor(['#1f77b4'])\n , dispatch = d3.dispatch('elementMouseover', 'elementMouseout')\n ;\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(d, i) {\n var availableWidth = width - margin.left - margin.right,\n availableHeight = height - margin.top - margin.bottom,\n container = d3.select(this);\n\n var rangez = ranges.call(this, d, i).slice().sort(d3.descending),\n markerz = markers.call(this, d, i).slice().sort(d3.descending),\n measurez = measures.call(this, d, i).slice().sort(d3.descending),\n rangeLabelz = rangeLabels.call(this, d, i).slice(),\n markerLabelz = markerLabels.call(this, d, i).slice(),\n measureLabelz = measureLabels.call(this, d, i).slice();\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n // Compute the new x-scale.\n var x1 = d3.scale.linear()\n .domain( d3.extent(d3.merge([forceX, rangez])) )\n .range(reverse ? [availableWidth, 0] : [0, availableWidth]);\n\n // Retrieve the old x-scale, if this is an update.\n var x0 = this.__chart__ || d3.scale.linear()\n .domain([0, Infinity])\n .range(x1.range());\n\n // Stash the new scale.\n this.__chart__ = x1;\n\n\n var rangeMin = d3.min(rangez), //rangez[2]\n rangeMax = d3.max(rangez), //rangez[0]\n rangeAvg = rangez[1];\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-bullet').data([d]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-bullet');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g');\n\n gEnter.append('rect').attr('class', 'nv-range nv-rangeMax');\n gEnter.append('rect').attr('class', 'nv-range nv-rangeAvg');\n gEnter.append('rect').attr('class', 'nv-range nv-rangeMin');\n gEnter.append('rect').attr('class', 'nv-measure');\n gEnter.append('path').attr('class', 'nv-markerTriangle');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n //------------------------------------------------------------\n\n\n\n var w0 = function(d) { return Math.abs(x0(d) - x0(0)) }, // TODO: could optimize by precalculating x0(0) and x1(0)\n w1 = function(d) { return Math.abs(x1(d) - x1(0)) };\n var xp0 = function(d) { return d < 0 ? x0(d) : x0(0) },\n xp1 = function(d) { return d < 0 ? x1(d) : x1(0) };\n\n\n g.select('rect.nv-rangeMax')\n .attr('height', availableHeight)\n .attr('width', w1(rangeMax > 0 ? rangeMax : rangeMin))\n .attr('x', xp1(rangeMax > 0 ? rangeMax : rangeMin))\n .datum(rangeMax > 0 ? rangeMax : rangeMin)\n /*\n .attr('x', rangeMin < 0 ?\n rangeMax > 0 ?\n x1(rangeMin)\n : x1(rangeMax)\n : x1(0))\n */\n\n g.select('rect.nv-rangeAvg')\n .attr('height', availableHeight)\n .attr('width', w1(rangeAvg))\n .attr('x', xp1(rangeAvg))\n .datum(rangeAvg)\n /*\n .attr('width', rangeMax <= 0 ?\n x1(rangeMax) - x1(rangeAvg)\n : x1(rangeAvg) - x1(rangeMin))\n .attr('x', rangeMax <= 0 ?\n x1(rangeAvg)\n : x1(rangeMin))\n */\n\n g.select('rect.nv-rangeMin')\n .attr('height', availableHeight)\n .attr('width', w1(rangeMax))\n .attr('x', xp1(rangeMax))\n .attr('width', w1(rangeMax > 0 ? rangeMin : rangeMax))\n .attr('x', xp1(rangeMax > 0 ? rangeMin : rangeMax))\n .datum(rangeMax > 0 ? rangeMin : rangeMax)\n /*\n .attr('width', rangeMax <= 0 ?\n x1(rangeAvg) - x1(rangeMin)\n : x1(rangeMax) - x1(rangeAvg))\n .attr('x', rangeMax <= 0 ?\n x1(rangeMin)\n : x1(rangeAvg))\n */\n\n g.select('rect.nv-measure')\n .style('fill', color)\n .attr('height', availableHeight / 3)\n .attr('y', availableHeight / 3)\n .attr('width', measurez < 0 ?\n x1(0) - x1(measurez[0])\n : x1(measurez[0]) - x1(0))\n .attr('x', xp1(measurez))\n .on('mouseover', function() {\n dispatch.elementMouseover({\n value: measurez[0],\n label: measureLabelz[0] || 'Current',\n pos: [x1(measurez[0]), availableHeight/2]\n })\n })\n .on('mouseout', function() {\n dispatch.elementMouseout({\n value: measurez[0],\n label: measureLabelz[0] || 'Current'\n })\n })\n\n var h3 = availableHeight / 6;\n if (markerz[0]) {\n g.selectAll('path.nv-markerTriangle')\n .attr('transform', function(d) { return 'translate(' + x1(markerz[0]) + ',' + (availableHeight / 2) + ')' })\n .attr('d', 'M0,' + h3 + 'L' + h3 + ',' + (-h3) + ' ' + (-h3) + ',' + (-h3) + 'Z')\n .on('mouseover', function() {\n dispatch.elementMouseover({\n value: markerz[0],\n label: markerLabelz[0] || 'Previous',\n pos: [x1(markerz[0]), availableHeight/2]\n })\n })\n .on('mouseout', function() {\n dispatch.elementMouseout({\n value: markerz[0],\n label: markerLabelz[0] || 'Previous'\n })\n });\n } else {\n g.selectAll('path.nv-markerTriangle').remove();\n }\n\n\n wrap.selectAll('.nv-range')\n .on('mouseover', function(d,i) {\n var label = rangeLabelz[i] || (!i ? \"Maximum\" : i == 1 ? \"Mean\" : \"Minimum\");\n\n dispatch.elementMouseover({\n value: d,\n label: label,\n pos: [x1(d), availableHeight/2]\n })\n })\n .on('mouseout', function(d,i) {\n var label = rangeLabelz[i] || (!i ? \"Maximum\" : i == 1 ? \"Mean\" : \"Minimum\");\n\n dispatch.elementMouseout({\n value: d,\n label: label\n })\n })\n\n/* // THIS IS THE PREVIOUS BULLET IMPLEMENTATION, WILL REMOVE SHORTLY\n // Update the range rects.\n var range = g.selectAll('rect.nv-range')\n .data(rangez);\n\n range.enter().append('rect')\n .attr('class', function(d, i) { return 'nv-range nv-s' + i; })\n .attr('width', w0)\n .attr('height', availableHeight)\n .attr('x', reverse ? x0 : 0)\n .on('mouseover', function(d,i) {\n dispatch.elementMouseover({\n value: d,\n label: (i <= 0) ? 'Maximum' : (i > 1) ? 'Minimum' : 'Mean', //TODO: make these labels a variable\n pos: [x1(d), availableHeight/2]\n })\n })\n .on('mouseout', function(d,i) {\n dispatch.elementMouseout({\n value: d,\n label: (i <= 0) ? 'Minimum' : (i >=1) ? 'Maximum' : 'Mean' //TODO: make these labels a variable\n })\n })\n\n d3.transition(range)\n .attr('x', reverse ? x1 : 0)\n .attr('width', w1)\n .attr('height', availableHeight);\n\n\n // Update the measure rects.\n var measure = g.selectAll('rect.nv-measure')\n .data(measurez);\n\n measure.enter().append('rect')\n .attr('class', function(d, i) { return 'nv-measure nv-s' + i; })\n .style('fill', function(d,i) { return color(d,i ) })\n .attr('width', w0)\n .attr('height', availableHeight / 3)\n .attr('x', reverse ? x0 : 0)\n .attr('y', availableHeight / 3)\n .on('mouseover', function(d) {\n dispatch.elementMouseover({\n value: d,\n label: 'Current', //TODO: make these labels a variable\n pos: [x1(d), availableHeight/2]\n })\n })\n .on('mouseout', function(d) {\n dispatch.elementMouseout({\n value: d,\n label: 'Current' //TODO: make these labels a variable\n })\n })\n\n d3.transition(measure)\n .attr('width', w1)\n .attr('height', availableHeight / 3)\n .attr('x', reverse ? x1 : 0)\n .attr('y', availableHeight / 3);\n\n\n\n // Update the marker lines.\n var marker = g.selectAll('path.nv-markerTriangle')\n .data(markerz);\n\n var h3 = availableHeight / 6;\n marker.enter().append('path')\n .attr('class', 'nv-markerTriangle')\n .attr('transform', function(d) { return 'translate(' + x0(d) + ',' + (availableHeight / 2) + ')' })\n .attr('d', 'M0,' + h3 + 'L' + h3 + ',' + (-h3) + ' ' + (-h3) + ',' + (-h3) + 'Z')\n .on('mouseover', function(d,i) {\n dispatch.elementMouseover({\n value: d,\n label: 'Previous',\n pos: [x1(d), availableHeight/2]\n })\n })\n .on('mouseout', function(d,i) {\n dispatch.elementMouseout({\n value: d,\n label: 'Previous'\n })\n });\n\n d3.transition(marker)\n .attr('transform', function(d) { return 'translate(' + (x1(d) - x1(0)) + ',' + (availableHeight / 2) + ')' });\n\n marker.exit().remove();\n*/\n\n });\n\n // d3.timer.flush(); // Not needed?\n\n return chart;\n }\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n chart.dispatch = dispatch;\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n // left, right, top, bottom\n chart.orient = function(_) {\n if (!arguments.length) return orient;\n orient = _;\n reverse = orient == 'right' || orient == 'bottom';\n return chart;\n };\n\n // ranges (bad, satisfactory, good)\n chart.ranges = function(_) {\n if (!arguments.length) return ranges;\n ranges = _;\n return chart;\n };\n\n // markers (previous, goal)\n chart.markers = function(_) {\n if (!arguments.length) return markers;\n markers = _;\n return chart;\n };\n\n // measures (actual, forecast)\n chart.measures = function(_) {\n if (!arguments.length) return measures;\n measures = _;\n return chart;\n };\n\n chart.forceX = function(_) {\n if (!arguments.length) return forceX;\n forceX = _;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.tickFormat = function(_) {\n if (!arguments.length) return tickFormat;\n tickFormat = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n};\n\n\n\n// Chart design based on the recommendations of Stephen Few. Implementation\n// based on the work of Clint Ivy, Jamie Love, and Jason Davies.\n// http://projects.instantcognition.com/protovis/bulletchart/\nnv.models.bulletChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var bullet = nv.models.bullet()\n ;\n\n var orient = 'left' // TODO top & bottom\n , reverse = false\n , margin = {top: 5, right: 40, bottom: 20, left: 120}\n , ranges = function(d) { return d.ranges }\n , markers = function(d) { return d.markers }\n , measures = function(d) { return d.measures }\n , width = null\n , height = 55\n , tickFormat = null\n , tooltips = true\n , tooltip = function(key, x, y, e, graph) {\n return '<h3>' + x + '</h3>' +\n '<p>' + y + '</p>'\n }\n , noData = 'No Data Available.'\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide')\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var showTooltip = function(e, offsetElement) {\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ) + margin.left,\n top = e.pos[1] + ( offsetElement.offsetTop || 0) + margin.top,\n content = tooltip(e.key, e.label, e.value, e, chart);\n\n nv.tooltip.show([left, top], content, e.value < 0 ? 'e' : 'w', null, offsetElement);\n };\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(d, i) {\n var container = d3.select(this);\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = height - margin.top - margin.bottom,\n that = this;\n\n\n chart.update = function() { chart(selection) };\n chart.container = this;\n\n //------------------------------------------------------------\n // Display No Data message if there's nothing to show.\n\n if (!d || !ranges.call(this, d, i)) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', 18 + margin.top + availableHeight / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n\n var rangez = ranges.call(this, d, i).slice().sort(d3.descending),\n markerz = markers.call(this, d, i).slice().sort(d3.descending),\n measurez = measures.call(this, d, i).slice().sort(d3.descending);\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-bulletChart').data([d]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-bulletChart');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-bulletWrap');\n gEnter.append('g').attr('class', 'nv-titles');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n //------------------------------------------------------------\n\n\n // Compute the new x-scale.\n var x1 = d3.scale.linear()\n .domain([0, Math.max(rangez[0], markerz[0], measurez[0])]) // TODO: need to allow forceX and forceY, and xDomain, yDomain\n .range(reverse ? [availableWidth, 0] : [0, availableWidth]);\n\n // Retrieve the old x-scale, if this is an update.\n var x0 = this.__chart__ || d3.scale.linear()\n .domain([0, Infinity])\n .range(x1.range());\n\n // Stash the new scale.\n this.__chart__ = x1;\n\n /*\n // Derive width-scales from the x-scales.\n var w0 = bulletWidth(x0),\n w1 = bulletWidth(x1);\n\n function bulletWidth(x) {\n var x0 = x(0);\n return function(d) {\n return Math.abs(x(d) - x(0));\n };\n }\n\n function bulletTranslate(x) {\n return function(d) {\n return 'translate(' + x(d) + ',0)';\n };\n }\n */\n\n var w0 = function(d) { return Math.abs(x0(d) - x0(0)) }, // TODO: could optimize by precalculating x0(0) and x1(0)\n w1 = function(d) { return Math.abs(x1(d) - x1(0)) };\n\n\n var title = gEnter.select('.nv-titles').append('g')\n .attr('text-anchor', 'end')\n .attr('transform', 'translate(-6,' + (height - margin.top - margin.bottom) / 2 + ')');\n title.append('text')\n .attr('class', 'nv-title')\n .text(function(d) { return d.title; });\n\n title.append('text')\n .attr('class', 'nv-subtitle')\n .attr('dy', '1em')\n .text(function(d) { return d.subtitle; });\n\n\n\n bullet\n .width(availableWidth)\n .height(availableHeight)\n\n var bulletWrap = g.select('.nv-bulletWrap');\n\n d3.transition(bulletWrap).call(bullet);\n\n\n\n // Compute the tick format.\n var format = tickFormat || x1.tickFormat( availableWidth / 100 );\n\n // Update the tick groups.\n var tick = g.selectAll('g.nv-tick')\n .data(x1.ticks( availableWidth / 50 ), function(d) {\n return this.textContent || format(d);\n });\n\n // Initialize the ticks with the old scale, x0.\n var tickEnter = tick.enter().append('g')\n .attr('class', 'nv-tick')\n .attr('transform', function(d) { return 'translate(' + x0(d) + ',0)' })\n .style('opacity', 1e-6);\n\n tickEnter.append('line')\n .attr('y1', availableHeight)\n .attr('y2', availableHeight * 7 / 6);\n\n tickEnter.append('text')\n .attr('text-anchor', 'middle')\n .attr('dy', '1em')\n .attr('y', availableHeight * 7 / 6)\n .text(format);\n\n\n // Transition the updating ticks to the new scale, x1.\n var tickUpdate = d3.transition(tick)\n .attr('transform', function(d) { return 'translate(' + x1(d) + ',0)' })\n .style('opacity', 1);\n\n tickUpdate.select('line')\n .attr('y1', availableHeight)\n .attr('y2', availableHeight * 7 / 6);\n\n tickUpdate.select('text')\n .attr('y', availableHeight * 7 / 6);\n\n // Transition the exiting ticks to the new scale, x1.\n d3.transition(tick.exit())\n .attr('transform', function(d) { return 'translate(' + x1(d) + ',0)' })\n .style('opacity', 1e-6)\n .remove();\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n dispatch.on('tooltipShow', function(e) {\n e.key = d.title;\n if (tooltips) showTooltip(e, that.parentNode);\n });\n\n //============================================================\n\n });\n\n d3.timer.flush();\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n bullet.dispatch.on('elementMouseover.tooltip', function(e) {\n dispatch.tooltipShow(e);\n });\n\n bullet.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n chart.dispatch = dispatch;\n chart.bullet = bullet;\n\n d3.rebind(chart, bullet, 'color');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n // left, right, top, bottom\n chart.orient = function(x) {\n if (!arguments.length) return orient;\n orient = x;\n reverse = orient == 'right' || orient == 'bottom';\n return chart;\n };\n\n // ranges (bad, satisfactory, good)\n chart.ranges = function(x) {\n if (!arguments.length) return ranges;\n ranges = x;\n return chart;\n };\n\n // markers (previous, goal)\n chart.markers = function(x) {\n if (!arguments.length) return markers;\n markers = x;\n return chart;\n };\n\n // measures (actual, forecast)\n chart.measures = function(x) {\n if (!arguments.length) return measures;\n measures = x;\n return chart;\n };\n\n chart.width = function(x) {\n if (!arguments.length) return width;\n width = x;\n return chart;\n };\n\n chart.height = function(x) {\n if (!arguments.length) return height;\n height = x;\n return chart;\n };\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.tickFormat = function(x) {\n if (!arguments.length) return tickFormat;\n tickFormat = x;\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n};\n\n\n\nnv.models.cumulativeLineChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var lines = nv.models.line()\n , xAxis = nv.models.axis()\n , yAxis = nv.models.axis()\n , legend = nv.models.legend()\n , controls = nv.models.legend()\n , interactiveLayer = nv.interactiveGuideline()\n ;\n\n var margin = {top: 30, right: 30, bottom: 50, left: 60}\n , color = nv.utils.defaultColor()\n , width = null\n , height = null\n , showLegend = true\n , showXAxis = true\n , showYAxis = true\n , rightAlignYAxis = false\n , tooltips = true\n , showControls = true\n , useInteractiveGuideline = false\n , rescaleY = true\n , tooltip = function(key, x, y, e, graph) {\n return '<h3>' + key + '</h3>' +\n '<p>' + y + ' at ' + x + '</p>'\n }\n , x //can be accessed via chart.xScale()\n , y //can be accessed via chart.yScale()\n , id = lines.id()\n , state = { index: 0, rescaleY: rescaleY }\n , defaultState = null\n , noData = 'No Data Available.'\n , average = function(d) { return d.average }\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')\n , transitionDuration = 250\n ;\n\n xAxis\n .orient('bottom')\n .tickPadding(7)\n ;\n yAxis\n .orient((rightAlignYAxis) ? 'right' : 'left')\n ;\n\n //============================================================\n controls.updateState(false);\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var dx = d3.scale.linear()\n , index = {i: 0, x: 0}\n ;\n\n var showTooltip = function(e, offsetElement) {\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n top = e.pos[1] + ( offsetElement.offsetTop || 0),\n x = xAxis.tickFormat()(lines.x()(e.point, e.pointIndex)),\n y = yAxis.tickFormat()(lines.y()(e.point, e.pointIndex)),\n content = tooltip(e.series.key, x, y, e, chart);\n\n nv.tooltip.show([left, top], content, null, null, offsetElement);\n };\n\n/*\n //Moved to see if we can get better behavior to fix issue #315\n var indexDrag = d3.behavior.drag()\n .on('dragstart', dragStart)\n .on('drag', dragMove)\n .on('dragend', dragEnd);\n\n function dragStart(d,i) {\n d3.select(chart.container)\n .style('cursor', 'ew-resize');\n }\n\n function dragMove(d,i) {\n d.x += d3.event.dx;\n d.i = Math.round(dx.invert(d.x));\n\n d3.select(this).attr('transform', 'translate(' + dx(d.i) + ',0)');\n chart.update();\n }\n\n function dragEnd(d,i) {\n d3.select(chart.container)\n .style('cursor', 'auto');\n chart.update();\n }\n*/\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this).classed('nv-chart-' + id, true),\n that = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n\n\n chart.update = function() { container.transition().duration(transitionDuration).call(chart) };\n chart.container = this;\n\n //set state.disabled\n state.disabled = data.map(function(d) { return !!d.disabled });\n\n if (!defaultState) {\n var key;\n defaultState = {};\n for (key in state) {\n if (state[key] instanceof Array)\n defaultState[key] = state[key].slice(0);\n else\n defaultState[key] = state[key];\n }\n }\n\n var indexDrag = d3.behavior.drag()\n .on('dragstart', dragStart)\n .on('drag', dragMove)\n .on('dragend', dragEnd);\n\n\n function dragStart(d,i) {\n d3.select(chart.container)\n .style('cursor', 'ew-resize');\n }\n\n function dragMove(d,i) {\n index.x = d3.event.x;\n index.i = Math.round(dx.invert(index.x));\n updateZero();\n }\n\n function dragEnd(d,i) {\n d3.select(chart.container)\n .style('cursor', 'auto');\n\n // update state and send stateChange with new index\n state.index = index.i;\n dispatch.stateChange(state);\n }\n\n //------------------------------------------------------------\n // Display No Data message if there's nothing to show.\n\n if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x = lines.xScale();\n y = lines.yScale();\n\n\n if (!rescaleY) {\n var seriesDomains = data\n .filter(function(series) { return !series.disabled })\n .map(function(series,i) {\n var initialDomain = d3.extent(series.values, lines.y());\n\n //account for series being disabled when losing 95% or more\n if (initialDomain[0] < -.95) initialDomain[0] = -.95;\n\n return [\n (initialDomain[0] - initialDomain[1]) / (1 + initialDomain[1]),\n (initialDomain[1] - initialDomain[0]) / (1 + initialDomain[0])\n ];\n });\n\n var completeDomain = [\n d3.min(seriesDomains, function(d) { return d[0] }),\n d3.max(seriesDomains, function(d) { return d[1] })\n ]\n\n lines.yDomain(completeDomain);\n } else {\n lines.yDomain(null);\n }\n\n\n dx .domain([0, data[0].values.length - 1]) //Assumes all series have same length\n .range([0, availableWidth])\n .clamp(true);\n\n //------------------------------------------------------------\n\n\n var data = indexify(index.i, data);\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n var interactivePointerEvents = (useInteractiveGuideline) ? \"none\" : \"all\";\n var wrap = container.selectAll('g.nv-wrap.nv-cumulativeLine').data([data]);\n var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-cumulativeLine').append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-interactive');\n gEnter.append('g').attr('class', 'nv-x nv-axis').style(\"pointer-events\",\"none\");\n gEnter.append('g').attr('class', 'nv-y nv-axis');\n gEnter.append('g').attr('class', 'nv-background');\n gEnter.append('g').attr('class', 'nv-linesWrap').style(\"pointer-events\",interactivePointerEvents);\n gEnter.append('g').attr('class', 'nv-avgLinesWrap').style(\"pointer-events\",\"none\");\n gEnter.append('g').attr('class', 'nv-legendWrap');\n gEnter.append('g').attr('class', 'nv-controlsWrap');\n\n\n //------------------------------------------------------------\n // Legend\n\n if (showLegend) {\n legend.width(availableWidth);\n\n g.select('.nv-legendWrap')\n .datum(data)\n .call(legend);\n\n if ( margin.top != legend.height()) {\n margin.top = legend.height();\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n }\n\n g.select('.nv-legendWrap')\n .attr('transform', 'translate(0,' + (-margin.top) +')')\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Controls\n\n if (showControls) {\n var controlsData = [\n { key: 'Re-scale y-axis', disabled: !rescaleY }\n ];\n\n controls.width(140).color(['#444', '#444', '#444']);\n g.select('.nv-controlsWrap')\n .datum(controlsData)\n .attr('transform', 'translate(0,' + (-margin.top) +')')\n .call(controls);\n }\n\n //------------------------------------------------------------\n\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n if (rightAlignYAxis) {\n g.select(\".nv-y.nv-axis\")\n .attr(\"transform\", \"translate(\" + availableWidth + \",0)\");\n }\n\n // Show error if series goes below 100%\n var tempDisabled = data.filter(function(d) { return d.tempDisabled });\n\n wrap.select('.tempDisabled').remove(); //clean-up and prevent duplicates\n if (tempDisabled.length) {\n wrap.append('text').attr('class', 'tempDisabled')\n .attr('x', availableWidth / 2)\n .attr('y', '-.71em')\n .style('text-anchor', 'end')\n .text(tempDisabled.map(function(d) { return d.key }).join(', ') + ' values cannot be calculated for this time period.');\n }\n\n //------------------------------------------------------------\n // Main Chart Component(s)\n\n //------------------------------------------------------------\n //Set up interactive layer\n if (useInteractiveGuideline) {\n interactiveLayer\n .width(availableWidth)\n .height(availableHeight)\n .margin({left:margin.left,top:margin.top})\n .svgContainer(container)\n .xScale(x);\n wrap.select(\".nv-interactive\").call(interactiveLayer);\n }\n\n gEnter.select('.nv-background')\n .append('rect');\n\n g.select('.nv-background rect')\n .attr('width', availableWidth)\n .attr('height', availableHeight);\n\n lines\n //.x(function(d) { return d.x })\n .y(function(d) { return d.display.y })\n .width(availableWidth)\n .height(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled && !data[i].tempDisabled; }));\n\n\n\n var linesWrap = g.select('.nv-linesWrap')\n .datum(data.filter(function(d) { return !d.disabled && !d.tempDisabled }));\n\n //d3.transition(linesWrap).call(lines);\n linesWrap.call(lines);\n\n /*Handle average lines [AN-612] ----------------------------*/\n\n //Store a series index number in the data array.\n data.forEach(function(d,i) {\n d.seriesIndex = i;\n });\n\n var avgLineData = data.filter(function(d) {\n return !d.disabled && !!average(d);\n });\n\n var avgLines = g.select(\".nv-avgLinesWrap\").selectAll(\"line\")\n .data(avgLineData, function(d) { return d.key; });\n\n var getAvgLineY = function(d) {\n //If average lines go off the svg element, clamp them to the svg bounds.\n var yVal = y(average(d));\n if (yVal < 0) return 0;\n if (yVal > availableHeight) return availableHeight;\n return yVal;\n };\n\n avgLines.enter()\n .append('line')\n .style('stroke-width',2)\n .style('stroke-dasharray','10,10')\n .style('stroke',function (d,i) {\n return lines.color()(d,d.seriesIndex);\n })\n .attr('x1',0)\n .attr('x2',availableWidth)\n .attr('y1', getAvgLineY)\n .attr('y2', getAvgLineY);\n\n avgLines\n .style('stroke-opacity',function(d){\n //If average lines go offscreen, make them transparent\n var yVal = y(average(d));\n if (yVal < 0 || yVal > availableHeight) return 0;\n return 1;\n })\n .attr('x1',0)\n .attr('x2',availableWidth)\n .attr('y1', getAvgLineY)\n .attr('y2', getAvgLineY);\n\n avgLines.exit().remove();\n\n //Create index line -----------------------------------------\n\n var indexLine = linesWrap.selectAll('.nv-indexLine')\n .data([index]);\n indexLine.enter().append('rect').attr('class', 'nv-indexLine')\n .attr('width', 3)\n .attr('x', -2)\n .attr('fill', 'red')\n .attr('fill-opacity', .5)\n .style(\"pointer-events\",\"all\")\n .call(indexDrag)\n\n indexLine\n .attr('transform', function(d) { return 'translate(' + dx(d.i) + ',0)' })\n .attr('height', availableHeight)\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Axes\n\n if (showXAxis) {\n xAxis\n .scale(x)\n //Suggest how many ticks based on the chart width and D3 should listen (70 is the optimal number for MM/DD/YY dates)\n .ticks( Math.min(data[0].values.length,availableWidth/70) )\n .tickSize(-availableHeight, 0);\n\n g.select('.nv-x.nv-axis')\n .attr('transform', 'translate(0,' + y.range()[0] + ')');\n d3.transition(g.select('.nv-x.nv-axis'))\n .call(xAxis);\n }\n\n\n if (showYAxis) {\n yAxis\n .scale(y)\n .ticks( availableHeight / 36 )\n .tickSize( -availableWidth, 0);\n\n d3.transition(g.select('.nv-y.nv-axis'))\n .call(yAxis);\n }\n //------------------------------------------------------------\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n\n function updateZero() {\n indexLine\n .data([index]);\n\n //When dragging the index line, turn off line transitions.\n // Then turn them back on when done dragging.\n var oldDuration = chart.transitionDuration();\n chart.transitionDuration(0);\n chart.update();\n chart.transitionDuration(oldDuration);\n }\n\n g.select('.nv-background rect')\n .on('click', function() {\n index.x = d3.mouse(this)[0];\n index.i = Math.round(dx.invert(index.x));\n\n // update state and send stateChange with new index\n state.index = index.i;\n dispatch.stateChange(state);\n\n updateZero();\n });\n\n lines.dispatch.on('elementClick', function(e) {\n index.i = e.pointIndex;\n index.x = dx(index.i);\n\n // update state and send stateChange with new index\n state.index = index.i;\n dispatch.stateChange(state);\n\n updateZero();\n });\n\n controls.dispatch.on('legendClick', function(d,i) {\n d.disabled = !d.disabled;\n rescaleY = !d.disabled;\n\n state.rescaleY = rescaleY;\n dispatch.stateChange(state);\n chart.update();\n });\n\n\n legend.dispatch.on('stateChange', function(newState) {\n state.disabled = newState.disabled;\n dispatch.stateChange(state);\n chart.update();\n });\n\n interactiveLayer.dispatch.on('elementMousemove', function(e) {\n lines.clearHighlights();\n var singlePoint, pointIndex, pointXLocation, allData = [];\n data\n .filter(function(series, i) {\n series.seriesIndex = i;\n return !series.disabled;\n })\n .forEach(function(series,i) {\n pointIndex = nv.interactiveBisect(series.values, e.pointXValue, chart.x());\n lines.highlightPoint(i, pointIndex, true);\n var point = series.values[pointIndex];\n if (typeof point === 'undefined') return;\n if (typeof singlePoint === 'undefined') singlePoint = point;\n if (typeof pointXLocation === 'undefined') pointXLocation = chart.xScale()(chart.x()(point,pointIndex));\n allData.push({\n key: series.key,\n value: chart.y()(point, pointIndex),\n color: color(series,series.seriesIndex)\n });\n });\n\n var xValue = xAxis.tickFormat()(chart.x()(singlePoint,pointIndex));\n interactiveLayer.tooltip\n .position({left: pointXLocation + margin.left, top: e.mouseY + margin.top})\n .chartContainer(that.parentNode)\n .enabled(tooltips)\n .valueFormatter(function(d,i) {\n return yAxis.tickFormat()(d);\n })\n .data(\n {\n value: xValue,\n series: allData\n }\n )();\n\n interactiveLayer.renderGuideLine(pointXLocation);\n\n });\n\n interactiveLayer.dispatch.on(\"elementMouseout\",function(e) {\n dispatch.tooltipHide();\n lines.clearHighlights();\n });\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e, that.parentNode);\n });\n\n\n // Update chart from a state object passed to event handler\n dispatch.on('changeState', function(e) {\n\n if (typeof e.disabled !== 'undefined') {\n data.forEach(function(series,i) {\n series.disabled = e.disabled[i];\n });\n\n state.disabled = e.disabled;\n }\n\n\n if (typeof e.index !== 'undefined') {\n index.i = e.index;\n index.x = dx(index.i);\n\n state.index = e.index;\n\n indexLine\n .data([index]);\n }\n\n\n if (typeof e.rescaleY !== 'undefined') {\n rescaleY = e.rescaleY;\n }\n\n chart.update();\n });\n\n //============================================================\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n lines.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n lines.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.dispatch = dispatch;\n chart.lines = lines;\n chart.legend = legend;\n chart.xAxis = xAxis;\n chart.yAxis = yAxis;\n chart.interactiveLayer = interactiveLayer;\n\n d3.rebind(chart, lines, 'defined', 'isArea', 'x', 'y', 'xScale','yScale', 'size', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'interactive', 'clipEdge', 'clipVoronoi','useVoronoi', 'id');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n legend.color(color);\n return chart;\n };\n\n chart.rescaleY = function(_) {\n if (!arguments.length) return rescaleY;\n rescaleY = _\n return rescaleY;\n };\n\n chart.showControls = function(_) {\n if (!arguments.length) return showControls;\n showControls = _;\n return chart;\n };\n\n chart.useInteractiveGuideline = function(_) {\n if(!arguments.length) return useInteractiveGuideline;\n useInteractiveGuideline = _;\n if (_ === true) {\n chart.interactive(false);\n chart.useVoronoi(false);\n }\n return chart;\n };\n\n chart.showLegend = function(_) {\n if (!arguments.length) return showLegend;\n showLegend = _;\n return chart;\n };\n\n chart.showXAxis = function(_) {\n if (!arguments.length) return showXAxis;\n showXAxis = _;\n return chart;\n };\n\n chart.showYAxis = function(_) {\n if (!arguments.length) return showYAxis;\n showYAxis = _;\n return chart;\n };\n\n chart.rightAlignYAxis = function(_) {\n if(!arguments.length) return rightAlignYAxis;\n rightAlignYAxis = _;\n yAxis.orient( (_) ? 'right' : 'left');\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.state = function(_) {\n if (!arguments.length) return state;\n state = _;\n return chart;\n };\n\n chart.defaultState = function(_) {\n if (!arguments.length) return defaultState;\n defaultState = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n chart.average = function(_) {\n if(!arguments.length) return average;\n average = _;\n return chart;\n };\n\n chart.transitionDuration = function(_) {\n if (!arguments.length) return transitionDuration;\n transitionDuration = _;\n return chart;\n };\n\n //============================================================\n\n\n //============================================================\n // Functions\n //------------------------------------------------------------\n\n /* Normalize the data according to an index point. */\n function indexify(idx, data) {\n return data.map(function(line, i) {\n if (!line.values) {\n return line;\n }\n var v = lines.y()(line.values[idx], idx);\n\n //TODO: implement check below, and disable series if series loses 100% or more cause divide by 0 issue\n if (v < -.95) {\n //if a series loses more than 100%, calculations fail.. anything close can cause major distortion (but is mathematically correct till it hits 100)\n line.tempDisabled = true;\n return line;\n }\n\n line.tempDisabled = false;\n\n line.values = line.values.map(function(point, pointIndex) {\n point.display = {'y': (lines.y()(point, pointIndex) - v) / (1 + v) };\n return point;\n })\n\n return line;\n })\n }\n\n //============================================================\n\n\n return chart;\n}\n//TODO: consider deprecating by adding necessary features to multiBar model\nnv.models.discreteBar = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 0, right: 0, bottom: 0, left: 0}\n , width = 960\n , height = 500\n , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one\n , x = d3.scale.ordinal()\n , y = d3.scale.linear()\n , getX = function(d) { return d.x }\n , getY = function(d) { return d.y }\n , forceY = [0] // 0 is forced by default.. this makes sense for the majority of bar graphs... user can always do chart.forceY([]) to remove\n , color = nv.utils.defaultColor()\n , showValues = false\n , valueFormat = d3.format(',.2f')\n , xDomain\n , yDomain\n , xRange\n , yRange\n , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout')\n , rectClass = 'discreteBar'\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var x0, y0;\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var availableWidth = width - margin.left - margin.right,\n availableHeight = height - margin.top - margin.bottom,\n container = d3.select(this);\n\n\n //add series index to each data point for reference\n data = data.map(function(series, i) {\n series.values = series.values.map(function(point) {\n point.series = i;\n return point;\n });\n return series;\n });\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n // remap and flatten the data for use in calculating the scales' domains\n var seriesData = (xDomain && yDomain) ? [] : // if we know xDomain and yDomain, no need to calculate\n data.map(function(d) {\n return d.values.map(function(d,i) {\n return { x: getX(d,i), y: getY(d,i), y0: d.y0 }\n })\n });\n\n x .domain(xDomain || d3.merge(seriesData).map(function(d) { return d.x }))\n .rangeBands(xRange || [0, availableWidth], .1);\n\n y .domain(yDomain || d3.extent(d3.merge(seriesData).map(function(d) { return d.y }).concat(forceY)));\n\n\n // If showValues, pad the Y axis range to account for label height\n if (showValues) y.range(yRange || [availableHeight - (y.domain()[0] < 0 ? 12 : 0), y.domain()[1] > 0 ? 12 : 0]);\n else y.range(yRange || [availableHeight, 0]);\n\n //store old scales if they exist\n x0 = x0 || x;\n y0 = y0 || y.copy().range([y(0),y(0)]);\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-discretebar').data([data]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-discretebar');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-groups');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n //------------------------------------------------------------\n\n\n\n //TODO: by definition, the discrete bar should not have multiple groups, will modify/remove later\n var groups = wrap.select('.nv-groups').selectAll('.nv-group')\n .data(function(d) { return d }, function(d) { return d.key });\n groups.enter().append('g')\n .style('stroke-opacity', 1e-6)\n .style('fill-opacity', 1e-6);\n groups.exit()\n .transition()\n .style('stroke-opacity', 1e-6)\n .style('fill-opacity', 1e-6)\n .remove();\n groups\n .attr('class', function(d,i) { return 'nv-group nv-series-' + i })\n .classed('hover', function(d) { return d.hover });\n groups\n .transition()\n .style('stroke-opacity', 1)\n .style('fill-opacity', .75);\n\n\n var bars = groups.selectAll('g.nv-bar')\n .data(function(d) { return d.values });\n\n bars.exit().remove();\n\n\n var barsEnter = bars.enter().append('g')\n .attr('transform', function(d,i,j) {\n return 'translate(' + (x(getX(d,i)) + x.rangeBand() * .05 ) + ', ' + y(0) + ')'\n })\n .on('mouseover', function(d,i) { //TODO: figure out why j works above, but not here\n d3.select(this).classed('hover', true);\n dispatch.elementMouseover({\n value: getY(d,i),\n point: d,\n series: data[d.series],\n pos: [x(getX(d,i)) + (x.rangeBand() * (d.series + .5) / data.length), y(getY(d,i))], // TODO: Figure out why the value appears to be shifted\n pointIndex: i,\n seriesIndex: d.series,\n e: d3.event\n });\n })\n .on('mouseout', function(d,i) {\n d3.select(this).classed('hover', false);\n dispatch.elementMouseout({\n value: getY(d,i),\n point: d,\n series: data[d.series],\n pointIndex: i,\n seriesIndex: d.series,\n e: d3.event\n });\n })\n .on('click', function(d,i) {\n dispatch.elementClick({\n value: getY(d,i),\n point: d,\n series: data[d.series],\n pos: [x(getX(d,i)) + (x.rangeBand() * (d.series + .5) / data.length), y(getY(d,i))], // TODO: Figure out why the value appears to be shifted\n pointIndex: i,\n seriesIndex: d.series,\n e: d3.event\n });\n d3.event.stopPropagation();\n })\n .on('dblclick', function(d,i) {\n dispatch.elementDblClick({\n value: getY(d,i),\n point: d,\n series: data[d.series],\n pos: [x(getX(d,i)) + (x.rangeBand() * (d.series + .5) / data.length), y(getY(d,i))], // TODO: Figure out why the value appears to be shifted\n pointIndex: i,\n seriesIndex: d.series,\n e: d3.event\n });\n d3.event.stopPropagation();\n });\n\n barsEnter.append('rect')\n .attr('height', 0)\n .attr('width', x.rangeBand() * .9 / data.length )\n\n if (showValues) {\n barsEnter.append('text')\n .attr('text-anchor', 'middle')\n ;\n\n bars.select('text')\n .text(function(d,i) { return valueFormat(getY(d,i)) })\n .transition()\n .attr('x', x.rangeBand() * .9 / 2)\n .attr('y', function(d,i) { return getY(d,i) < 0 ? y(getY(d,i)) - y(0) + 12 : -4 })\n\n ;\n } else {\n bars.selectAll('text').remove();\n }\n\n bars\n .attr('class', function(d,i) { return getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive' })\n .style('fill', function(d,i) { return d.color || color(d,i) })\n .style('stroke', function(d,i) { return d.color || color(d,i) })\n .select('rect')\n .attr('class', rectClass)\n .transition()\n .attr('width', x.rangeBand() * .9 / data.length);\n bars.transition()\n //.delay(function(d,i) { return i * 1200 / data[0].values.length })\n .attr('transform', function(d,i) {\n var left = x(getX(d,i)) + x.rangeBand() * .05,\n top = getY(d,i) < 0 ?\n y(0) :\n y(0) - y(getY(d,i)) < 1 ?\n y(0) - 1 : //make 1 px positive bars show up above y=0\n y(getY(d,i));\n\n return 'translate(' + left + ', ' + top + ')'\n })\n .select('rect')\n .attr('height', function(d,i) {\n return Math.max(Math.abs(y(getY(d,i)) - y((yDomain && yDomain[0]) || 0)) || 1)\n });\n\n\n //store old scales for use in transitions on update\n x0 = x.copy();\n y0 = y.copy();\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n chart.dispatch = dispatch;\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.x = function(_) {\n if (!arguments.length) return getX;\n getX = _;\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return getY;\n getY = _;\n return chart;\n };\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.xScale = function(_) {\n if (!arguments.length) return x;\n x = _;\n return chart;\n };\n\n chart.yScale = function(_) {\n if (!arguments.length) return y;\n y = _;\n return chart;\n };\n\n chart.xDomain = function(_) {\n if (!arguments.length) return xDomain;\n xDomain = _;\n return chart;\n };\n\n chart.yDomain = function(_) {\n if (!arguments.length) return yDomain;\n yDomain = _;\n return chart;\n };\n\n chart.xRange = function(_) {\n if (!arguments.length) return xRange;\n xRange = _;\n return chart;\n };\n\n chart.yRange = function(_) {\n if (!arguments.length) return yRange;\n yRange = _;\n return chart;\n };\n\n chart.forceY = function(_) {\n if (!arguments.length) return forceY;\n forceY = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n return chart;\n };\n\n chart.id = function(_) {\n if (!arguments.length) return id;\n id = _;\n return chart;\n };\n\n chart.showValues = function(_) {\n if (!arguments.length) return showValues;\n showValues = _;\n return chart;\n };\n\n chart.valueFormat= function(_) {\n if (!arguments.length) return valueFormat;\n valueFormat = _;\n return chart;\n };\n\n chart.rectClass= function(_) {\n if (!arguments.length) return rectClass;\n rectClass = _;\n return chart;\n };\n //============================================================\n\n\n return chart;\n}\n\nnv.models.discreteBarChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var discretebar = nv.models.discreteBar()\n , xAxis = nv.models.axis()\n , yAxis = nv.models.axis()\n ;\n\n var margin = {top: 15, right: 10, bottom: 50, left: 60}\n , width = null\n , height = null\n , color = nv.utils.getColor()\n , showXAxis = true\n , showYAxis = true\n , rightAlignYAxis = false\n , staggerLabels = false\n , tooltips = true\n , tooltip = function(key, x, y, e, graph) {\n return '<h3>' + x + '</h3>' +\n '<p>' + y + '</p>'\n }\n , x\n , y\n , noData = \"No Data Available.\"\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'beforeUpdate')\n , transitionDuration = 250\n ;\n\n xAxis\n .orient('bottom')\n .highlightZero(false)\n .showMaxMin(false)\n .tickFormat(function(d) { return d })\n ;\n yAxis\n .orient((rightAlignYAxis) ? 'right' : 'left')\n .tickFormat(d3.format(',.1f'))\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var showTooltip = function(e, offsetElement) {\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n top = e.pos[1] + ( offsetElement.offsetTop || 0),\n x = xAxis.tickFormat()(discretebar.x()(e.point, e.pointIndex)),\n y = yAxis.tickFormat()(discretebar.y()(e.point, e.pointIndex)),\n content = tooltip(e.series.key, x, y, e, chart);\n\n nv.tooltip.show([left, top], content, e.value < 0 ? 'n' : 's', null, offsetElement);\n };\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this),\n that = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n\n\n chart.update = function() {\n dispatch.beforeUpdate();\n container.transition().duration(transitionDuration).call(chart);\n };\n chart.container = this;\n\n\n //------------------------------------------------------------\n // Display No Data message if there's nothing to show.\n\n if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x = discretebar.xScale();\n y = discretebar.yScale().clamp(true);\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-discreteBarWithAxes').data([data]);\n var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-discreteBarWithAxes').append('g');\n var defsEnter = gEnter.append('defs');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-x nv-axis');\n gEnter.append('g').attr('class', 'nv-y nv-axis');\n gEnter.append('g').attr('class', 'nv-barsWrap');\n\n g.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n if (rightAlignYAxis) {\n g.select(\".nv-y.nv-axis\")\n .attr(\"transform\", \"translate(\" + availableWidth + \",0)\");\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Main Chart Component(s)\n\n discretebar\n .width(availableWidth)\n .height(availableHeight);\n\n\n var barsWrap = g.select('.nv-barsWrap')\n .datum(data.filter(function(d) { return !d.disabled }))\n\n barsWrap.transition().call(discretebar);\n\n //------------------------------------------------------------\n\n\n\n defsEnter.append('clipPath')\n .attr('id', 'nv-x-label-clip-' + discretebar.id())\n .append('rect');\n\n g.select('#nv-x-label-clip-' + discretebar.id() + ' rect')\n .attr('width', x.rangeBand() * (staggerLabels ? 2 : 1))\n .attr('height', 16)\n .attr('x', -x.rangeBand() / (staggerLabels ? 1 : 2 ));\n\n\n //------------------------------------------------------------\n // Setup Axes\n\n if (showXAxis) {\n xAxis\n .scale(x)\n .ticks( availableWidth / 100 )\n .tickSize(-availableHeight, 0);\n\n g.select('.nv-x.nv-axis')\n .attr('transform', 'translate(0,' + (y.range()[0] + ((discretebar.showValues() && y.domain()[0] < 0) ? 16 : 0)) + ')');\n //d3.transition(g.select('.nv-x.nv-axis'))\n g.select('.nv-x.nv-axis').transition()\n .call(xAxis);\n\n\n var xTicks = g.select('.nv-x.nv-axis').selectAll('g');\n\n if (staggerLabels) {\n xTicks\n .selectAll('text')\n .attr('transform', function(d,i,j) { return 'translate(0,' + (j % 2 == 0 ? '5' : '17') + ')' })\n }\n }\n\n if (showYAxis) {\n yAxis\n .scale(y)\n .ticks( availableHeight / 36 )\n .tickSize( -availableWidth, 0);\n\n g.select('.nv-y.nv-axis').transition()\n .call(yAxis);\n }\n\n //------------------------------------------------------------\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e, that.parentNode);\n });\n\n //============================================================\n\n\n });\n\n return chart;\n }\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n discretebar.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n discretebar.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.dispatch = dispatch;\n chart.discretebar = discretebar;\n chart.xAxis = xAxis;\n chart.yAxis = yAxis;\n\n d3.rebind(chart, discretebar, 'x', 'y', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'id', 'showValues', 'valueFormat');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n discretebar.color(color);\n return chart;\n };\n\n chart.showXAxis = function(_) {\n if (!arguments.length) return showXAxis;\n showXAxis = _;\n return chart;\n };\n\n chart.showYAxis = function(_) {\n if (!arguments.length) return showYAxis;\n showYAxis = _;\n return chart;\n };\n\n chart.rightAlignYAxis = function(_) {\n if(!arguments.length) return rightAlignYAxis;\n rightAlignYAxis = _;\n yAxis.orient( (_) ? 'right' : 'left');\n return chart;\n };\n\n chart.staggerLabels = function(_) {\n if (!arguments.length) return staggerLabels;\n staggerLabels = _;\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n chart.transitionDuration = function(_) {\n if (!arguments.length) return transitionDuration;\n transitionDuration = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.distribution = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 0, right: 0, bottom: 0, left: 0}\n , width = 400 //technically width or height depending on x or y....\n , size = 8\n , axis = 'x' // 'x' or 'y'... horizontal or vertical\n , getData = function(d) { return d[axis] } // defaults d.x or d.y\n , color = nv.utils.defaultColor()\n , scale = d3.scale.linear()\n , domain\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var scale0;\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var availableLength = width - (axis === 'x' ? margin.left + margin.right : margin.top + margin.bottom),\n naxis = axis == 'x' ? 'y' : 'x',\n container = d3.select(this);\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n scale0 = scale0 || scale;\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-distribution').data([data]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-distribution');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')\n\n //------------------------------------------------------------\n\n\n var distWrap = g.selectAll('g.nv-dist')\n .data(function(d) { return d }, function(d) { return d.key });\n\n distWrap.enter().append('g');\n distWrap\n .attr('class', function(d,i) { return 'nv-dist nv-series-' + i })\n .style('stroke', function(d,i) { return color(d, i) });\n\n var dist = distWrap.selectAll('line.nv-dist' + axis)\n .data(function(d) { return d.values })\n dist.enter().append('line')\n .attr(axis + '1', function(d,i) { return scale0(getData(d,i)) })\n .attr(axis + '2', function(d,i) { return scale0(getData(d,i)) })\n distWrap.exit().selectAll('line.nv-dist' + axis)\n .transition()\n .attr(axis + '1', function(d,i) { return scale(getData(d,i)) })\n .attr(axis + '2', function(d,i) { return scale(getData(d,i)) })\n .style('stroke-opacity', 0)\n .remove();\n dist\n .attr('class', function(d,i) { return 'nv-dist' + axis + ' nv-dist' + axis + '-' + i })\n .attr(naxis + '1', 0)\n .attr(naxis + '2', size);\n dist\n .transition()\n .attr(axis + '1', function(d,i) { return scale(getData(d,i)) })\n .attr(axis + '2', function(d,i) { return scale(getData(d,i)) })\n\n\n scale0 = scale.copy();\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.axis = function(_) {\n if (!arguments.length) return axis;\n axis = _;\n return chart;\n };\n\n chart.size = function(_) {\n if (!arguments.length) return size;\n size = _;\n return chart;\n };\n\n chart.getData = function(_) {\n if (!arguments.length) return getData;\n getData = d3.functor(_);\n return chart;\n };\n\n chart.scale = function(_) {\n if (!arguments.length) return scale;\n scale = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n return chart;\n };\n //============================================================\n\n\n return chart;\n}\n//TODO: consider deprecating and using multibar with single series for this\nnv.models.historicalBar = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 0, right: 0, bottom: 0, left: 0}\n , width = 960\n , height = 500\n , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one\n , x = d3.scale.linear()\n , y = d3.scale.linear()\n , getX = function(d) { return d.x }\n , getY = function(d) { return d.y }\n , forceX = []\n , forceY = [0]\n , padData = false\n , clipEdge = true\n , color = nv.utils.defaultColor()\n , xDomain\n , yDomain\n , xRange\n , yRange\n , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout')\n , interactive = true\n ;\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var availableWidth = width - margin.left - margin.right,\n availableHeight = height - margin.top - margin.bottom,\n container = d3.select(this);\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x .domain(xDomain || d3.extent(data[0].values.map(getX).concat(forceX) ))\n\n if (padData)\n x.range(xRange || [availableWidth * .5 / data[0].values.length, availableWidth * (data[0].values.length - .5) / data[0].values.length ]);\n else\n x.range(xRange || [0, availableWidth]);\n\n y .domain(yDomain || d3.extent(data[0].values.map(getY).concat(forceY) ))\n .range(yRange || [availableHeight, 0]);\n\n // If scale's domain don't have a range, slightly adjust to make one... so a chart can show a single data point\n\n if (x.domain()[0] === x.domain()[1])\n x.domain()[0] ?\n x.domain([x.domain()[0] - x.domain()[0] * 0.01, x.domain()[1] + x.domain()[1] * 0.01])\n : x.domain([-1,1]);\n\n if (y.domain()[0] === y.domain()[1])\n y.domain()[0] ?\n y.domain([y.domain()[0] + y.domain()[0] * 0.01, y.domain()[1] - y.domain()[1] * 0.01])\n : y.domain([-1,1]);\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-historicalBar-' + id).data([data[0].values]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-historicalBar-' + id);\n var defsEnter = wrapEnter.append('defs');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-bars');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n //------------------------------------------------------------\n\n\n container\n .on('click', function(d,i) {\n dispatch.chartClick({\n data: d,\n index: i,\n pos: d3.event,\n id: id\n });\n });\n\n\n defsEnter.append('clipPath')\n .attr('id', 'nv-chart-clip-path-' + id)\n .append('rect');\n\n wrap.select('#nv-chart-clip-path-' + id + ' rect')\n .attr('width', availableWidth)\n .attr('height', availableHeight);\n\n g .attr('clip-path', clipEdge ? 'url(#nv-chart-clip-path-' + id + ')' : '');\n\n\n\n var bars = wrap.select('.nv-bars').selectAll('.nv-bar')\n .data(function(d) { return d }, function(d,i) {return getX(d,i)});\n\n bars.exit().remove();\n\n\n var barsEnter = bars.enter().append('rect')\n //.attr('class', function(d,i,j) { return (getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive') + ' nv-bar-' + j + '-' + i })\n .attr('x', 0 )\n .attr('y', function(d,i) { return nv.utils.NaNtoZero(y(Math.max(0, getY(d,i)))) })\n .attr('height', function(d,i) { return nv.utils.NaNtoZero(Math.abs(y(getY(d,i)) - y(0))) })\n .attr('transform', function(d,i) { return 'translate(' + (x(getX(d,i)) - availableWidth / data[0].values.length * .45) + ',0)'; })\n .on('mouseover', function(d,i) {\n if (!interactive) return;\n d3.select(this).classed('hover', true);\n dispatch.elementMouseover({\n point: d,\n series: data[0],\n pos: [x(getX(d,i)), y(getY(d,i))], // TODO: Figure out why the value appears to be shifted\n pointIndex: i,\n seriesIndex: 0,\n e: d3.event\n });\n\n })\n .on('mouseout', function(d,i) {\n if (!interactive) return;\n d3.select(this).classed('hover', false);\n dispatch.elementMouseout({\n point: d,\n series: data[0],\n pointIndex: i,\n seriesIndex: 0,\n e: d3.event\n });\n })\n .on('click', function(d,i) {\n if (!interactive) return;\n dispatch.elementClick({\n //label: d[label],\n value: getY(d,i),\n data: d,\n index: i,\n pos: [x(getX(d,i)), y(getY(d,i))],\n e: d3.event,\n id: id\n });\n d3.event.stopPropagation();\n })\n .on('dblclick', function(d,i) {\n if (!interactive) return;\n dispatch.elementDblClick({\n //label: d[label],\n value: getY(d,i),\n data: d,\n index: i,\n pos: [x(getX(d,i)), y(getY(d,i))],\n e: d3.event,\n id: id\n });\n d3.event.stopPropagation();\n });\n\n bars\n .attr('fill', function(d,i) { return color(d, i); })\n .attr('class', function(d,i,j) { return (getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive') + ' nv-bar-' + j + '-' + i })\n .transition()\n .attr('transform', function(d,i) { return 'translate(' + (x(getX(d,i)) - availableWidth / data[0].values.length * .45) + ',0)'; })\n //TODO: better width calculations that don't assume always uniform data spacing;w\n .attr('width', (availableWidth / data[0].values.length) * .9 );\n\n\n bars.transition()\n .attr('y', function(d,i) {\n var rval = getY(d,i) < 0 ?\n y(0) :\n y(0) - y(getY(d,i)) < 1 ?\n y(0) - 1 :\n y(getY(d,i));\n return nv.utils.NaNtoZero(rval);\n })\n .attr('height', function(d,i) { return nv.utils.NaNtoZero(Math.max(Math.abs(y(getY(d,i)) - y(0)),1)) });\n\n });\n\n return chart;\n }\n\n //Create methods to allow outside functions to highlight a specific bar.\n chart.highlightPoint = function(pointIndex, isHoverOver) {\n d3.select(\".nv-historicalBar-\" + id)\n .select(\".nv-bars .nv-bar-0-\" + pointIndex)\n .classed(\"hover\", isHoverOver)\n ;\n };\n\n chart.clearHighlights = function() {\n d3.select(\".nv-historicalBar-\" + id)\n .select(\".nv-bars .nv-bar.hover\")\n .classed(\"hover\", false)\n ;\n };\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n chart.dispatch = dispatch;\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.x = function(_) {\n if (!arguments.length) return getX;\n getX = _;\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return getY;\n getY = _;\n return chart;\n };\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.xScale = function(_) {\n if (!arguments.length) return x;\n x = _;\n return chart;\n };\n\n chart.yScale = function(_) {\n if (!arguments.length) return y;\n y = _;\n return chart;\n };\n\n chart.xDomain = function(_) {\n if (!arguments.length) return xDomain;\n xDomain = _;\n return chart;\n };\n\n chart.yDomain = function(_) {\n if (!arguments.length) return yDomain;\n yDomain = _;\n return chart;\n };\n\n chart.xRange = function(_) {\n if (!arguments.length) return xRange;\n xRange = _;\n return chart;\n };\n\n chart.yRange = function(_) {\n if (!arguments.length) return yRange;\n yRange = _;\n return chart;\n };\n\n chart.forceX = function(_) {\n if (!arguments.length) return forceX;\n forceX = _;\n return chart;\n };\n\n chart.forceY = function(_) {\n if (!arguments.length) return forceY;\n forceY = _;\n return chart;\n };\n\n chart.padData = function(_) {\n if (!arguments.length) return padData;\n padData = _;\n return chart;\n };\n\n chart.clipEdge = function(_) {\n if (!arguments.length) return clipEdge;\n clipEdge = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n return chart;\n };\n\n chart.id = function(_) {\n if (!arguments.length) return id;\n id = _;\n return chart;\n };\n\n chart.interactive = function(_) {\n if(!arguments.length) return interactive;\n interactive = false;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.historicalBarChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var bars = nv.models.historicalBar()\n , xAxis = nv.models.axis()\n , yAxis = nv.models.axis()\n , legend = nv.models.legend()\n ;\n\n\n var margin = {top: 30, right: 90, bottom: 50, left: 90}\n , color = nv.utils.defaultColor()\n , width = null\n , height = null\n , showLegend = false\n , showXAxis = true\n , showYAxis = true\n , rightAlignYAxis = false\n , tooltips = true\n , tooltip = function(key, x, y, e, graph) {\n return '<h3>' + key + '</h3>' +\n '<p>' + y + ' at ' + x + '</p>'\n }\n , x\n , y\n , state = {}\n , defaultState = null\n , noData = 'No Data Available.'\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')\n , transitionDuration = 250\n ;\n\n xAxis\n .orient('bottom')\n .tickPadding(7)\n ;\n yAxis\n .orient( (rightAlignYAxis) ? 'right' : 'left')\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var showTooltip = function(e, offsetElement) {\n\n // New addition to calculate position if SVG is scaled with viewBox, may move TODO: consider implementing everywhere else\n if (offsetElement) {\n var svg = d3.select(offsetElement).select('svg');\n var viewBox = (svg.node()) ? svg.attr('viewBox') : null;\n if (viewBox) {\n viewBox = viewBox.split(' ');\n var ratio = parseInt(svg.style('width')) / viewBox[2];\n e.pos[0] = e.pos[0] * ratio;\n e.pos[1] = e.pos[1] * ratio;\n }\n }\n\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n top = e.pos[1] + ( offsetElement.offsetTop || 0),\n x = xAxis.tickFormat()(bars.x()(e.point, e.pointIndex)),\n y = yAxis.tickFormat()(bars.y()(e.point, e.pointIndex)),\n content = tooltip(e.series.key, x, y, e, chart);\n\n nv.tooltip.show([left, top], content, null, null, offsetElement);\n };\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this),\n that = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n\n\n chart.update = function() { container.transition().duration(transitionDuration).call(chart) };\n chart.container = this;\n\n //set state.disabled\n state.disabled = data.map(function(d) { return !!d.disabled });\n\n if (!defaultState) {\n var key;\n defaultState = {};\n for (key in state) {\n if (state[key] instanceof Array)\n defaultState[key] = state[key].slice(0);\n else\n defaultState[key] = state[key];\n }\n }\n\n //------------------------------------------------------------\n // Display noData message if there's nothing to show.\n\n if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x = bars.xScale();\n y = bars.yScale();\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-historicalBarChart').data([data]);\n var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-historicalBarChart').append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-x nv-axis');\n gEnter.append('g').attr('class', 'nv-y nv-axis');\n gEnter.append('g').attr('class', 'nv-barsWrap');\n gEnter.append('g').attr('class', 'nv-legendWrap');\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Legend\n\n if (showLegend) {\n legend.width(availableWidth);\n\n g.select('.nv-legendWrap')\n .datum(data)\n .call(legend);\n\n if ( margin.top != legend.height()) {\n margin.top = legend.height();\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n }\n\n wrap.select('.nv-legendWrap')\n .attr('transform', 'translate(0,' + (-margin.top) +')')\n }\n\n //------------------------------------------------------------\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n if (rightAlignYAxis) {\n g.select(\".nv-y.nv-axis\")\n .attr(\"transform\", \"translate(\" + availableWidth + \",0)\");\n }\n\n\n //------------------------------------------------------------\n // Main Chart Component(s)\n\n bars\n .width(availableWidth)\n .height(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled }));\n\n\n var barsWrap = g.select('.nv-barsWrap')\n .datum(data.filter(function(d) { return !d.disabled }))\n\n barsWrap.transition().call(bars);\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Axes\n\n if (showXAxis) {\n xAxis\n .scale(x)\n .tickSize(-availableHeight, 0);\n\n g.select('.nv-x.nv-axis')\n .attr('transform', 'translate(0,' + y.range()[0] + ')');\n g.select('.nv-x.nv-axis')\n .transition()\n .call(xAxis);\n }\n\n if (showYAxis) {\n yAxis\n .scale(y)\n .ticks( availableHeight / 36 )\n .tickSize( -availableWidth, 0);\n\n g.select('.nv-y.nv-axis')\n .transition()\n .call(yAxis);\n }\n //------------------------------------------------------------\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n legend.dispatch.on('legendClick', function(d,i) {\n d.disabled = !d.disabled;\n\n if (!data.filter(function(d) { return !d.disabled }).length) {\n data.map(function(d) {\n d.disabled = false;\n wrap.selectAll('.nv-series').classed('disabled', false);\n return d;\n });\n }\n\n state.disabled = data.map(function(d) { return !!d.disabled });\n dispatch.stateChange(state);\n\n selection.transition().call(chart);\n });\n\n legend.dispatch.on('legendDblclick', function(d) {\n //Double clicking should always enable current series, and disabled all others.\n data.forEach(function(d) {\n d.disabled = true;\n });\n d.disabled = false;\n\n state.disabled = data.map(function(d) { return !!d.disabled });\n dispatch.stateChange(state);\n chart.update();\n });\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e, that.parentNode);\n });\n\n\n dispatch.on('changeState', function(e) {\n\n if (typeof e.disabled !== 'undefined') {\n data.forEach(function(series,i) {\n series.disabled = e.disabled[i];\n });\n\n state.disabled = e.disabled;\n }\n\n selection.call(chart);\n });\n\n //============================================================\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n bars.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n bars.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.dispatch = dispatch;\n chart.bars = bars;\n chart.legend = legend;\n chart.xAxis = xAxis;\n chart.yAxis = yAxis;\n\n d3.rebind(chart, bars, 'defined', 'isArea', 'x', 'y', 'size', 'xScale', 'yScale',\n 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'interactive', 'clipEdge', 'clipVoronoi', 'id', 'interpolate','highlightPoint','clearHighlights', 'interactive');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n legend.color(color);\n return chart;\n };\n\n chart.showLegend = function(_) {\n if (!arguments.length) return showLegend;\n showLegend = _;\n return chart;\n };\n\n chart.showXAxis = function(_) {\n if (!arguments.length) return showXAxis;\n showXAxis = _;\n return chart;\n };\n\n chart.showYAxis = function(_) {\n if (!arguments.length) return showYAxis;\n showYAxis = _;\n return chart;\n };\n\n chart.rightAlignYAxis = function(_) {\n if(!arguments.length) return rightAlignYAxis;\n rightAlignYAxis = _;\n yAxis.orient( (_) ? 'right' : 'left');\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.state = function(_) {\n if (!arguments.length) return state;\n state = _;\n return chart;\n };\n\n chart.defaultState = function(_) {\n if (!arguments.length) return defaultState;\n defaultState = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n chart.transitionDuration = function(_) {\n if (!arguments.length) return transitionDuration;\n transitionDuration = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\nnv.models.indentedTree = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 0, right: 0, bottom: 0, left: 0} //TODO: implement, maybe as margin on the containing div\n , width = 960\n , height = 500\n , color = nv.utils.defaultColor()\n , id = Math.floor(Math.random() * 10000)\n , header = true\n , filterZero = false\n , noData = \"No Data Available.\"\n , childIndent = 20\n , columns = [{key:'key', label: 'Name', type:'text'}] //TODO: consider functions like chart.addColumn, chart.removeColumn, instead of a block like this\n , tableClass = null\n , iconOpen = 'images/grey-plus.png' //TODO: consider removing this and replacing with a '+' or '-' unless user defines images\n , iconClose = 'images/grey-minus.png'\n , dispatch = d3.dispatch('elementClick', 'elementDblclick', 'elementMouseover', 'elementMouseout')\n , getUrl = function(d) { return d.url }\n ;\n\n //============================================================\n\n var idx = 0;\n\n function chart(selection) {\n selection.each(function(data) {\n var depth = 1,\n container = d3.select(this);\n\n var tree = d3.layout.tree()\n .children(function(d) { return d.values })\n .size([height, childIndent]); //Not sure if this is needed now that the result is HTML\n\n chart.update = function() { container.transition().duration(600).call(chart) };\n\n\n //------------------------------------------------------------\n // Display No Data message if there's nothing to show.\n if (!data[0]) data[0] = {key: noData};\n\n //------------------------------------------------------------\n\n\n var nodes = tree.nodes(data[0]);\n\n // nodes.map(function(d) {\n // d.id = i++;\n // })\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = d3.select(this).selectAll('div').data([[nodes]]);\n var wrapEnter = wrap.enter().append('div').attr('class', 'nvd3 nv-wrap nv-indentedtree');\n var tableEnter = wrapEnter.append('table');\n var table = wrap.select('table').attr('width', '100%').attr('class', tableClass);\n\n //------------------------------------------------------------\n\n\n if (header) {\n var thead = tableEnter.append('thead');\n\n var theadRow1 = thead.append('tr');\n\n columns.forEach(function(column) {\n theadRow1\n .append('th')\n .attr('width', column.width ? column.width : '10%')\n .style('text-align', column.type == 'numeric' ? 'right' : 'left')\n .append('span')\n .text(column.label);\n });\n }\n\n\n var tbody = table.selectAll('tbody')\n .data(function(d) { return d });\n tbody.enter().append('tbody');\n\n\n\n //compute max generations\n depth = d3.max(nodes, function(node) { return node.depth });\n tree.size([height, depth * childIndent]); //TODO: see if this is necessary at all\n\n\n // Update the nodes…\n var node = tbody.selectAll('tr')\n // .data(function(d) { return d; }, function(d) { return d.id || (d.id == ++i)});\n .data(function(d) { return d.filter(function(d) { return (filterZero && !d.children) ? filterZero(d) : true; } )}, function(d,i) { return d.id || (d.id || ++idx)});\n //.style('display', 'table-row'); //TODO: see if this does anything\n\n node.exit().remove();\n\n node.select('img.nv-treeicon')\n .attr('src', icon)\n .classed('folded', folded);\n\n var nodeEnter = node.enter().append('tr');\n\n\n columns.forEach(function(column, index) {\n\n var nodeName = nodeEnter.append('td')\n .style('padding-left', function(d) { return (index ? 0 : d.depth * childIndent + 12 + (icon(d) ? 0 : 16)) + 'px' }, 'important') //TODO: check why I did the ternary here\n .style('text-align', column.type == 'numeric' ? 'right' : 'left');\n\n\n if (index == 0) {\n nodeName.append('img')\n .classed('nv-treeicon', true)\n .classed('nv-folded', folded)\n .attr('src', icon)\n .style('width', '14px')\n .style('height', '14px')\n .style('padding', '0 1px')\n .style('display', function(d) { return icon(d) ? 'inline-block' : 'none'; })\n .on('click', click);\n }\n\n\n nodeName.each(function(d) {\n if (!index && getUrl(d))\n d3.select(this)\n .append('a')\n .attr('href',getUrl)\n .attr('class', d3.functor(column.classes))\n .append('span')\n else\n d3.select(this)\n .append('span')\n\n d3.select(this).select('span')\n .attr('class', d3.functor(column.classes) )\n .text(function(d) { return column.format ? column.format(d) :\n (d[column.key] || '-') });\n });\n\n if (column.showCount) {\n nodeName.append('span')\n .attr('class', 'nv-childrenCount');\n\n node.selectAll('span.nv-childrenCount').text(function(d) {\n return ((d.values && d.values.length) || (d._values && d._values.length)) ? //If this is a parent\n '(' + ((d.values && (d.values.filter(function(d) { return filterZero ? filterZero(d) : true; }).length)) //If children are in values check its children and filter\n || (d._values && d._values.filter(function(d) { return filterZero ? filterZero(d) : true; }).length) //Otherwise, do the same, but with the other name, _values...\n || 0) + ')' //This is the catch-all in case there are no children after a filter\n : '' //If this is not a parent, just give an empty string\n });\n }\n\n // if (column.click)\n // nodeName.select('span').on('click', column.click);\n\n });\n\n node\n .order()\n .on('click', function(d) {\n dispatch.elementClick({\n row: this, //TODO: decide whether or not this should be consistent with scatter/line events or should be an html link (a href)\n data: d,\n pos: [d.x, d.y]\n });\n })\n .on('dblclick', function(d) {\n dispatch.elementDblclick({\n row: this,\n data: d,\n pos: [d.x, d.y]\n });\n })\n .on('mouseover', function(d) {\n dispatch.elementMouseover({\n row: this,\n data: d,\n pos: [d.x, d.y]\n });\n })\n .on('mouseout', function(d) {\n dispatch.elementMouseout({\n row: this,\n data: d,\n pos: [d.x, d.y]\n });\n });\n\n\n\n\n // Toggle children on click.\n function click(d, _, unshift) {\n d3.event.stopPropagation();\n\n if(d3.event.shiftKey && !unshift) {\n //If you shift-click, it'll toggle fold all the children, instead of itself\n d3.event.shiftKey = false;\n d.values && d.values.forEach(function(node){\n if (node.values || node._values) {\n click(node, 0, true);\n }\n });\n return true;\n }\n if(!hasChildren(d)) {\n //download file\n //window.location.href = d.url;\n return true;\n }\n if (d.values) {\n d._values = d.values;\n d.values = null;\n } else {\n d.values = d._values;\n d._values = null;\n }\n chart.update();\n }\n\n\n function icon(d) {\n return (d._values && d._values.length) ? iconOpen : (d.values && d.values.length) ? iconClose : '';\n }\n\n function folded(d) {\n return (d._values && d._values.length);\n }\n\n function hasChildren(d) {\n var values = d.values || d._values;\n\n return (values && values.length);\n }\n\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n scatter.color(color);\n return chart;\n };\n\n chart.id = function(_) {\n if (!arguments.length) return id;\n id = _;\n return chart;\n };\n\n chart.header = function(_) {\n if (!arguments.length) return header;\n header = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n chart.filterZero = function(_) {\n if (!arguments.length) return filterZero;\n filterZero = _;\n return chart;\n };\n\n chart.columns = function(_) {\n if (!arguments.length) return columns;\n columns = _;\n return chart;\n };\n\n chart.tableClass = function(_) {\n if (!arguments.length) return tableClass;\n tableClass = _;\n return chart;\n };\n\n chart.iconOpen = function(_){\n if (!arguments.length) return iconOpen;\n iconOpen = _;\n return chart;\n }\n\n chart.iconClose = function(_){\n if (!arguments.length) return iconClose;\n iconClose = _;\n return chart;\n }\n\n chart.getUrl = function(_){\n if (!arguments.length) return getUrl;\n getUrl = _;\n return chart;\n }\n\n //============================================================\n\n\n return chart;\n};nv.models.legend = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 5, right: 0, bottom: 5, left: 0}\n , width = 400\n , height = 20\n , getKey = function(d) { return d.key }\n , color = nv.utils.defaultColor()\n , align = true\n , rightAlign = true\n , updateState = true //If true, legend will update data.disabled and trigger a 'stateChange' dispatch.\n , radioButtonMode = false //If true, clicking legend items will cause it to behave like a radio button. (only one can be selected at a time)\n , dispatch = d3.dispatch('legendClick', 'legendDblclick', 'legendMouseover', 'legendMouseout', 'stateChange')\n ;\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var availableWidth = width - margin.left - margin.right,\n container = d3.select(this);\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-legend').data([data]);\n var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-legend').append('g');\n var g = wrap.select('g');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n //------------------------------------------------------------\n\n\n var series = g.selectAll('.nv-series')\n .data(function(d) { return d });\n var seriesEnter = series.enter().append('g').attr('class', 'nv-series')\n .on('mouseover', function(d,i) {\n dispatch.legendMouseover(d,i); //TODO: Make consistent with other event objects\n })\n .on('mouseout', function(d,i) {\n dispatch.legendMouseout(d,i);\n })\n .on('click', function(d,i) {\n dispatch.legendClick(d,i);\n if (updateState) {\n if (radioButtonMode) {\n //Radio button mode: set every series to disabled,\n // and enable the clicked series.\n data.forEach(function(series) { series.disabled = true});\n d.disabled = false;\n }\n else {\n d.disabled = !d.disabled;\n if (data.every(function(series) { return series.disabled})) {\n //the default behavior of NVD3 legends is, if every single series\n // is disabled, turn all series' back on.\n data.forEach(function(series) { series.disabled = false});\n }\n }\n dispatch.stateChange({\n disabled: data.map(function(d) { return !!d.disabled })\n });\n }\n })\n .on('dblclick', function(d,i) {\n dispatch.legendDblclick(d,i);\n if (updateState) {\n //the default behavior of NVD3 legends, when double clicking one,\n // is to set all other series' to false, and make the double clicked series enabled.\n data.forEach(function(series) {\n series.disabled = true;\n });\n d.disabled = false;\n dispatch.stateChange({\n disabled: data.map(function(d) { return !!d.disabled })\n });\n }\n });\n seriesEnter.append('circle')\n .style('stroke-width', 2)\n .attr('class','nv-legend-symbol')\n .attr('r', 5);\n seriesEnter.append('text')\n .attr('text-anchor', 'start')\n .attr('class','nv-legend-text')\n .attr('dy', '.32em')\n .attr('dx', '8');\n series.classed('disabled', function(d) { return d.disabled });\n series.exit().remove();\n series.select('circle')\n .style('fill', function(d,i) { return d.color || color(d,i)})\n .style('stroke', function(d,i) { return d.color || color(d, i) });\n series.select('text').text(getKey);\n\n\n //TODO: implement fixed-width and max-width options (max-width is especially useful with the align option)\n\n // NEW ALIGNING CODE, TODO: clean up\n if (align) {\n\n var seriesWidths = [];\n series.each(function(d,i) {\n var legendText = d3.select(this).select('text');\n var nodeTextLength;\n try {\n nodeTextLength = legendText.node().getComputedTextLength();\n }\n catch(e) {\n nodeTextLength = nv.utils.calcApproxTextWidth(legendText);\n }\n\n seriesWidths.push(nodeTextLength + 28); // 28 is ~ the width of the circle plus some padding\n });\n\n var seriesPerRow = 0;\n var legendWidth = 0;\n var columnWidths = [];\n\n while ( legendWidth < availableWidth && seriesPerRow < seriesWidths.length) {\n columnWidths[seriesPerRow] = seriesWidths[seriesPerRow];\n legendWidth += seriesWidths[seriesPerRow++];\n }\n if (seriesPerRow === 0) seriesPerRow = 1; //minimum of one series per row\n\n\n while ( legendWidth > availableWidth && seriesPerRow > 1 ) {\n columnWidths = [];\n seriesPerRow--;\n\n for (var k = 0; k < seriesWidths.length; k++) {\n if (seriesWidths[k] > (columnWidths[k % seriesPerRow] || 0) )\n columnWidths[k % seriesPerRow] = seriesWidths[k];\n }\n\n legendWidth = columnWidths.reduce(function(prev, cur, index, array) {\n return prev + cur;\n });\n }\n\n var xPositions = [];\n for (var i = 0, curX = 0; i < seriesPerRow; i++) {\n xPositions[i] = curX;\n curX += columnWidths[i];\n }\n\n series\n .attr('transform', function(d, i) {\n return 'translate(' + xPositions[i % seriesPerRow] + ',' + (5 + Math.floor(i / seriesPerRow) * 20) + ')';\n });\n\n //position legend as far right as possible within the total width\n if (rightAlign) {\n g.attr('transform', 'translate(' + (width - margin.right - legendWidth) + ',' + margin.top + ')');\n }\n else {\n g.attr('transform', 'translate(0' + ',' + margin.top + ')');\n }\n\n height = margin.top + margin.bottom + (Math.ceil(seriesWidths.length / seriesPerRow) * 20);\n\n } else {\n\n var ypos = 5,\n newxpos = 5,\n maxwidth = 0,\n xpos;\n series\n .attr('transform', function(d, i) {\n var length = d3.select(this).select('text').node().getComputedTextLength() + 28;\n xpos = newxpos;\n\n if (width < margin.left + margin.right + xpos + length) {\n newxpos = xpos = 5;\n ypos += 20;\n }\n\n newxpos += length;\n if (newxpos > maxwidth) maxwidth = newxpos;\n\n return 'translate(' + xpos + ',' + ypos + ')';\n });\n\n //position legend as far right as possible within the total width\n g.attr('transform', 'translate(' + (width - margin.right - maxwidth) + ',' + margin.top + ')');\n\n height = margin.top + margin.bottom + ypos + 15;\n\n }\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n chart.dispatch = dispatch;\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.key = function(_) {\n if (!arguments.length) return getKey;\n getKey = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n return chart;\n };\n\n chart.align = function(_) {\n if (!arguments.length) return align;\n align = _;\n return chart;\n };\n\n chart.rightAlign = function(_) {\n if (!arguments.length) return rightAlign;\n rightAlign = _;\n return chart;\n };\n\n chart.updateState = function(_) {\n if (!arguments.length) return updateState;\n updateState = _;\n return chart;\n };\n\n chart.radioButtonMode = function(_) {\n if (!arguments.length) return radioButtonMode;\n radioButtonMode = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.line = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var scatter = nv.models.scatter()\n ;\n\n var margin = {top: 0, right: 0, bottom: 0, left: 0}\n , width = 960\n , height = 500\n , color = nv.utils.defaultColor() // a function that returns a color\n , getX = function(d) { return d.x } // accessor to get the x value from a data point\n , getY = function(d) { return d.y } // accessor to get the y value from a data point\n , defined = function(d,i) { return !isNaN(getY(d,i)) && getY(d,i) !== null } // allows a line to be not continuous when it is not defined\n , isArea = function(d) { return d.area } // decides if a line is an area or just a line\n , clipEdge = false // if true, masks lines within x and y scale\n , x //can be accessed via chart.xScale()\n , y //can be accessed via chart.yScale()\n , interpolate = \"linear\" // controls the line interpolation\n ;\n\n scatter\n .size(16) // default size\n .sizeDomain([16,256]) //set to speed up calculation, needs to be unset if there is a custom size accessor\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var x0, y0 //used to store previous scales\n ;\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var availableWidth = width - margin.left - margin.right,\n availableHeight = height - margin.top - margin.bottom,\n container = d3.select(this);\n\n //------------------------------------------------------------\n // Setup Scales\n\n x = scatter.xScale();\n y = scatter.yScale();\n\n x0 = x0 || x;\n y0 = y0 || y;\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-line').data([data]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-line');\n var defsEnter = wrapEnter.append('defs');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g')\n\n gEnter.append('g').attr('class', 'nv-groups');\n gEnter.append('g').attr('class', 'nv-scatterWrap');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n //------------------------------------------------------------\n\n\n\n\n scatter\n .width(availableWidth)\n .height(availableHeight)\n\n var scatterWrap = wrap.select('.nv-scatterWrap');\n //.datum(data); // Data automatically trickles down from the wrap\n\n scatterWrap.transition().call(scatter);\n\n\n\n defsEnter.append('clipPath')\n .attr('id', 'nv-edge-clip-' + scatter.id())\n .append('rect');\n\n wrap.select('#nv-edge-clip-' + scatter.id() + ' rect')\n .attr('width', availableWidth)\n .attr('height', availableHeight);\n\n g .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + scatter.id() + ')' : '');\n scatterWrap\n .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + scatter.id() + ')' : '');\n\n\n\n\n var groups = wrap.select('.nv-groups').selectAll('.nv-group')\n .data(function(d) { return d }, function(d) { return d.key });\n groups.enter().append('g')\n .style('stroke-opacity', 1e-6)\n .style('fill-opacity', 1e-6);\n groups.exit()\n .transition()\n .style('stroke-opacity', 1e-6)\n .style('fill-opacity', 1e-6)\n .remove();\n groups\n .attr('class', function(d,i) { return 'nv-group nv-series-' + i })\n .classed('hover', function(d) { return d.hover })\n .style('fill', function(d,i){ return color(d, i) })\n .style('stroke', function(d,i){ return color(d, i)});\n groups\n .transition()\n .style('stroke-opacity', 1)\n .style('fill-opacity', .5);\n\n\n\n var areaPaths = groups.selectAll('path.nv-area')\n .data(function(d) { return isArea(d) ? [d] : [] }); // this is done differently than lines because I need to check if series is an area\n areaPaths.enter().append('path')\n .attr('class', 'nv-area')\n .attr('d', function(d) {\n return d3.svg.area()\n .interpolate(interpolate)\n .defined(defined)\n .x(function(d,i) { return nv.utils.NaNtoZero(x0(getX(d,i))) })\n .y0(function(d,i) { return nv.utils.NaNtoZero(y0(getY(d,i))) })\n .y1(function(d,i) { return y0( y.domain()[0] <= 0 ? y.domain()[1] >= 0 ? 0 : y.domain()[1] : y.domain()[0] ) })\n //.y1(function(d,i) { return y0(0) }) //assuming 0 is within y domain.. may need to tweak this\n .apply(this, [d.values])\n });\n groups.exit().selectAll('path.nv-area')\n .remove();\n\n areaPaths\n .transition()\n .attr('d', function(d) {\n return d3.svg.area()\n .interpolate(interpolate)\n .defined(defined)\n .x(function(d,i) { return nv.utils.NaNtoZero(x(getX(d,i))) })\n .y0(function(d,i) { return nv.utils.NaNtoZero(y(getY(d,i))) })\n .y1(function(d,i) { return y( y.domain()[0] <= 0 ? y.domain()[1] >= 0 ? 0 : y.domain()[1] : y.domain()[0] ) })\n //.y1(function(d,i) { return y0(0) }) //assuming 0 is within y domain.. may need to tweak this\n .apply(this, [d.values])\n });\n\n\n\n var linePaths = groups.selectAll('path.nv-line')\n .data(function(d) { return [d.values] });\n linePaths.enter().append('path')\n .attr('class', 'nv-line')\n .attr('d',\n d3.svg.line()\n .interpolate(interpolate)\n .defined(defined)\n .x(function(d,i) { return nv.utils.NaNtoZero(x0(getX(d,i))) })\n .y(function(d,i) { return nv.utils.NaNtoZero(y0(getY(d,i))) })\n );\n groups.exit().selectAll('path.nv-line')\n .transition()\n .attr('d',\n d3.svg.line()\n .interpolate(interpolate)\n .defined(defined)\n .x(function(d,i) { return nv.utils.NaNtoZero(x(getX(d,i))) })\n .y(function(d,i) { return nv.utils.NaNtoZero(y(getY(d,i))) })\n );\n linePaths\n .transition()\n .attr('d',\n d3.svg.line()\n .interpolate(interpolate)\n .defined(defined)\n .x(function(d,i) { return nv.utils.NaNtoZero(x(getX(d,i))) })\n .y(function(d,i) { return nv.utils.NaNtoZero(y(getY(d,i))) })\n );\n\n\n\n //store old scales for use in transitions on update\n x0 = x.copy();\n y0 = y.copy();\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n chart.dispatch = scatter.dispatch;\n chart.scatter = scatter;\n\n d3.rebind(chart, scatter, 'id', 'interactive', 'size', 'xScale', 'yScale', 'zScale', 'xDomain', 'yDomain', 'xRange', 'yRange',\n 'sizeDomain', 'forceX', 'forceY', 'forceSize', 'clipVoronoi', 'useVoronoi', 'clipRadius', 'padData','highlightPoint','clearHighlights');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.x = function(_) {\n if (!arguments.length) return getX;\n getX = _;\n scatter.x(_);\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return getY;\n getY = _;\n scatter.y(_);\n return chart;\n };\n\n chart.clipEdge = function(_) {\n if (!arguments.length) return clipEdge;\n clipEdge = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n scatter.color(color);\n return chart;\n };\n\n chart.interpolate = function(_) {\n if (!arguments.length) return interpolate;\n interpolate = _;\n return chart;\n };\n\n chart.defined = function(_) {\n if (!arguments.length) return defined;\n defined = _;\n return chart;\n };\n\n chart.isArea = function(_) {\n if (!arguments.length) return isArea;\n isArea = d3.functor(_);\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.lineChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var lines = nv.models.line()\n , xAxis = nv.models.axis()\n , yAxis = nv.models.axis()\n , legend = nv.models.legend()\n , interactiveLayer = nv.interactiveGuideline()\n ;\n\n var margin = {top: 30, right: 20, bottom: 50, left: 60}\n , color = nv.utils.defaultColor()\n , width = null\n , height = null\n , showLegend = true\n , showXAxis = true\n , showYAxis = true\n , rightAlignYAxis = false\n , useInteractiveGuideline = false\n , tooltips = true\n , tooltip = function(key, x, y, e, graph) {\n return '<h3>' + key + '</h3>' +\n '<p>' + y + ' at ' + x + '</p>'\n }\n , x\n , y\n , state = {}\n , defaultState = null\n , noData = 'No Data Available.'\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')\n , transitionDuration = 250\n ;\n\n xAxis\n .orient('bottom')\n .tickPadding(7)\n ;\n yAxis\n .orient((rightAlignYAxis) ? 'right' : 'left')\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var showTooltip = function(e, offsetElement) {\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n top = e.pos[1] + ( offsetElement.offsetTop || 0),\n x = xAxis.tickFormat()(lines.x()(e.point, e.pointIndex)),\n y = yAxis.tickFormat()(lines.y()(e.point, e.pointIndex)),\n content = tooltip(e.series.key, x, y, e, chart);\n\n nv.tooltip.show([left, top], content, null, null, offsetElement);\n };\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this),\n that = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n\n\n chart.update = function() { container.transition().duration(transitionDuration).call(chart) };\n chart.container = this;\n\n //set state.disabled\n state.disabled = data.map(function(d) { return !!d.disabled });\n\n\n if (!defaultState) {\n var key;\n defaultState = {};\n for (key in state) {\n if (state[key] instanceof Array)\n defaultState[key] = state[key].slice(0);\n else\n defaultState[key] = state[key];\n }\n }\n\n //------------------------------------------------------------\n // Display noData message if there's nothing to show.\n\n if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x = lines.xScale();\n y = lines.yScale();\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-lineChart').data([data]);\n var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-lineChart').append('g');\n var g = wrap.select('g');\n\n gEnter.append(\"rect\").style(\"opacity\",0);\n gEnter.append('g').attr('class', 'nv-x nv-axis');\n gEnter.append('g').attr('class', 'nv-y nv-axis');\n gEnter.append('g').attr('class', 'nv-linesWrap');\n gEnter.append('g').attr('class', 'nv-legendWrap');\n gEnter.append('g').attr('class', 'nv-interactive');\n\n g.select(\"rect\").attr(\"width\",availableWidth).attr(\"height\",availableHeight);\n //------------------------------------------------------------\n // Legend\n\n if (showLegend) {\n legend.width(availableWidth);\n\n g.select('.nv-legendWrap')\n .datum(data)\n .call(legend);\n\n if ( margin.top != legend.height()) {\n margin.top = legend.height();\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n }\n\n wrap.select('.nv-legendWrap')\n .attr('transform', 'translate(0,' + (-margin.top) +')')\n }\n\n //------------------------------------------------------------\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n if (rightAlignYAxis) {\n g.select(\".nv-y.nv-axis\")\n .attr(\"transform\", \"translate(\" + availableWidth + \",0)\");\n }\n\n //------------------------------------------------------------\n // Main Chart Component(s)\n\n\n //------------------------------------------------------------\n //Set up interactive layer\n if (useInteractiveGuideline) {\n interactiveLayer\n .width(availableWidth)\n .height(availableHeight)\n .margin({left:margin.left, top:margin.top})\n .svgContainer(container)\n .xScale(x);\n wrap.select(\".nv-interactive\").call(interactiveLayer);\n }\n\n\n lines\n .width(availableWidth)\n .height(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled }));\n\n\n var linesWrap = g.select('.nv-linesWrap')\n .datum(data.filter(function(d) { return !d.disabled }))\n\n linesWrap.transition().call(lines);\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Axes\n\n if (showXAxis) {\n xAxis\n .scale(x)\n .ticks( availableWidth / 100 )\n .tickSize(-availableHeight, 0);\n\n g.select('.nv-x.nv-axis')\n .attr('transform', 'translate(0,' + y.range()[0] + ')');\n g.select('.nv-x.nv-axis')\n .transition()\n .call(xAxis);\n }\n\n if (showYAxis) {\n yAxis\n .scale(y)\n .ticks( availableHeight / 36 )\n .tickSize( -availableWidth, 0);\n\n g.select('.nv-y.nv-axis')\n .transition()\n .call(yAxis);\n }\n //------------------------------------------------------------\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n legend.dispatch.on('stateChange', function(newState) {\n state = newState;\n dispatch.stateChange(state);\n chart.update();\n });\n\n interactiveLayer.dispatch.on('elementMousemove', function(e) {\n lines.clearHighlights();\n var singlePoint, pointIndex, pointXLocation, allData = [];\n data\n .filter(function(series, i) {\n series.seriesIndex = i;\n return !series.disabled;\n })\n .forEach(function(series,i) {\n pointIndex = nv.interactiveBisect(series.values, e.pointXValue, chart.x());\n lines.highlightPoint(i, pointIndex, true);\n var point = series.values[pointIndex];\n if (typeof point === 'undefined') return;\n if (typeof singlePoint === 'undefined') singlePoint = point;\n if (typeof pointXLocation === 'undefined') pointXLocation = chart.xScale()(chart.x()(point,pointIndex));\n allData.push({\n key: series.key,\n value: chart.y()(point, pointIndex),\n color: color(series,series.seriesIndex)\n });\n });\n\n var xValue = xAxis.tickFormat()(chart.x()(singlePoint,pointIndex));\n interactiveLayer.tooltip\n .position({left: pointXLocation + margin.left, top: e.mouseY + margin.top})\n .chartContainer(that.parentNode)\n .enabled(tooltips)\n .valueFormatter(function(d,i) {\n return yAxis.tickFormat()(d);\n })\n .data(\n {\n value: xValue,\n series: allData\n }\n )();\n\n interactiveLayer.renderGuideLine(pointXLocation);\n\n });\n\n interactiveLayer.dispatch.on(\"elementMouseout\",function(e) {\n dispatch.tooltipHide();\n lines.clearHighlights();\n });\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e, that.parentNode);\n });\n\n\n dispatch.on('changeState', function(e) {\n\n if (typeof e.disabled !== 'undefined') {\n data.forEach(function(series,i) {\n series.disabled = e.disabled[i];\n });\n\n state.disabled = e.disabled;\n }\n\n chart.update();\n });\n\n //============================================================\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n lines.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n lines.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.dispatch = dispatch;\n chart.lines = lines;\n chart.legend = legend;\n chart.xAxis = xAxis;\n chart.yAxis = yAxis;\n chart.interactiveLayer = interactiveLayer;\n\n d3.rebind(chart, lines, 'defined', 'isArea', 'x', 'y', 'size', 'xScale', 'yScale', 'xDomain', 'yDomain', 'xRange', 'yRange'\n , 'forceX', 'forceY', 'interactive', 'clipEdge', 'clipVoronoi', 'useVoronoi','id', 'interpolate');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n legend.color(color);\n return chart;\n };\n\n chart.showLegend = function(_) {\n if (!arguments.length) return showLegend;\n showLegend = _;\n return chart;\n };\n\n chart.showXAxis = function(_) {\n if (!arguments.length) return showXAxis;\n showXAxis = _;\n return chart;\n };\n\n chart.showYAxis = function(_) {\n if (!arguments.length) return showYAxis;\n showYAxis = _;\n return chart;\n };\n\n chart.rightAlignYAxis = function(_) {\n if(!arguments.length) return rightAlignYAxis;\n rightAlignYAxis = _;\n yAxis.orient( (_) ? 'right' : 'left');\n return chart;\n };\n\n chart.useInteractiveGuideline = function(_) {\n if(!arguments.length) return useInteractiveGuideline;\n useInteractiveGuideline = _;\n if (_ === true) {\n chart.interactive(false);\n chart.useVoronoi(false);\n }\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.state = function(_) {\n if (!arguments.length) return state;\n state = _;\n return chart;\n };\n\n chart.defaultState = function(_) {\n if (!arguments.length) return defaultState;\n defaultState = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n chart.transitionDuration = function(_) {\n if (!arguments.length) return transitionDuration;\n transitionDuration = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.linePlusBarChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var lines = nv.models.line()\n , bars = nv.models.historicalBar()\n , xAxis = nv.models.axis()\n , y1Axis = nv.models.axis()\n , y2Axis = nv.models.axis()\n , legend = nv.models.legend()\n ;\n\n var margin = {top: 30, right: 60, bottom: 50, left: 60}\n , width = null\n , height = null\n , getX = function(d) { return d.x }\n , getY = function(d) { return d.y }\n , color = nv.utils.defaultColor()\n , showLegend = true\n , tooltips = true\n , tooltip = function(key, x, y, e, graph) {\n return '<h3>' + key + '</h3>' +\n '<p>' + y + ' at ' + x + '</p>';\n }\n , x\n , y1\n , y2\n , state = {}\n , defaultState = null\n , noData = \"No Data Available.\"\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')\n ;\n\n bars\n .padData(true)\n ;\n lines\n .clipEdge(false)\n .padData(true)\n ;\n xAxis\n .orient('bottom')\n .tickPadding(7)\n .highlightZero(false)\n ;\n y1Axis\n .orient('left')\n ;\n y2Axis\n .orient('right')\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var showTooltip = function(e, offsetElement) {\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n top = e.pos[1] + ( offsetElement.offsetTop || 0),\n x = xAxis.tickFormat()(lines.x()(e.point, e.pointIndex)),\n y = (e.series.bar ? y1Axis : y2Axis).tickFormat()(lines.y()(e.point, e.pointIndex)),\n content = tooltip(e.series.key, x, y, e, chart);\n\n nv.tooltip.show([left, top], content, e.value < 0 ? 'n' : 's', null, offsetElement);\n }\n ;\n\n //------------------------------------------------------------\n\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this),\n that = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n\n chart.update = function() { container.transition().call(chart); };\n // chart.container = this;\n\n //set state.disabled\n state.disabled = data.map(function(d) { return !!d.disabled });\n\n if (!defaultState) {\n var key;\n defaultState = {};\n for (key in state) {\n if (state[key] instanceof Array)\n defaultState[key] = state[key].slice(0);\n else\n defaultState[key] = state[key];\n }\n }\n\n //------------------------------------------------------------\n // Display No Data message if there's nothing to show.\n\n if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n var dataBars = data.filter(function(d) { return !d.disabled && d.bar });\n var dataLines = data.filter(function(d) { return !d.bar }); // removed the !d.disabled clause here to fix Issue #240\n\n //x = xAxis.scale();\n x = dataLines.filter(function(d) { return !d.disabled; }).length && dataLines.filter(function(d) { return !d.disabled; })[0].values.length ? lines.xScale() : bars.xScale();\n //x = dataLines.filter(function(d) { return !d.disabled; }).length ? lines.xScale() : bars.xScale(); //old code before change above\n y1 = bars.yScale();\n y2 = lines.yScale();\n\n //------------------------------------------------------------\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = d3.select(this).selectAll('g.nv-wrap.nv-linePlusBar').data([data]);\n var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-linePlusBar').append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-x nv-axis');\n gEnter.append('g').attr('class', 'nv-y1 nv-axis');\n gEnter.append('g').attr('class', 'nv-y2 nv-axis');\n gEnter.append('g').attr('class', 'nv-barsWrap');\n gEnter.append('g').attr('class', 'nv-linesWrap');\n gEnter.append('g').attr('class', 'nv-legendWrap');\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Legend\n\n if (showLegend) {\n legend.width( availableWidth / 2 );\n\n g.select('.nv-legendWrap')\n .datum(data.map(function(series) {\n series.originalKey = series.originalKey === undefined ? series.key : series.originalKey;\n series.key = series.originalKey + (series.bar ? ' (left axis)' : ' (right axis)');\n return series;\n }))\n .call(legend);\n\n if ( margin.top != legend.height()) {\n margin.top = legend.height();\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n }\n\n g.select('.nv-legendWrap')\n .attr('transform', 'translate(' + ( availableWidth / 2 ) + ',' + (-margin.top) +')');\n }\n\n //------------------------------------------------------------\n\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n\n //------------------------------------------------------------\n // Main Chart Component(s)\n\n\n lines\n .width(availableWidth)\n .height(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled && !data[i].bar }))\n\n bars\n .width(availableWidth)\n .height(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled && data[i].bar }))\n\n\n\n var barsWrap = g.select('.nv-barsWrap')\n .datum(dataBars.length ? dataBars : [{values:[]}])\n\n var linesWrap = g.select('.nv-linesWrap')\n .datum(dataLines[0] && !dataLines[0].disabled ? dataLines : [{values:[]}] );\n //.datum(!dataLines[0].disabled ? dataLines : [{values:dataLines[0].values.map(function(d) { return [d[0], null] }) }] );\n\n d3.transition(barsWrap).call(bars);\n d3.transition(linesWrap).call(lines);\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Axes\n\n xAxis\n .scale(x)\n .ticks( availableWidth / 100 )\n .tickSize(-availableHeight, 0);\n\n g.select('.nv-x.nv-axis')\n .attr('transform', 'translate(0,' + y1.range()[0] + ')');\n d3.transition(g.select('.nv-x.nv-axis'))\n .call(xAxis);\n\n\n y1Axis\n .scale(y1)\n .ticks( availableHeight / 36 )\n .tickSize(-availableWidth, 0);\n\n d3.transition(g.select('.nv-y1.nv-axis'))\n .style('opacity', dataBars.length ? 1 : 0)\n .call(y1Axis);\n\n\n y2Axis\n .scale(y2)\n .ticks( availableHeight / 36 )\n .tickSize(dataBars.length ? 0 : -availableWidth, 0); // Show the y2 rules only if y1 has none\n\n g.select('.nv-y2.nv-axis')\n .style('opacity', dataLines.length ? 1 : 0)\n .attr('transform', 'translate(' + availableWidth + ',0)');\n //.attr('transform', 'translate(' + x.range()[1] + ',0)');\n\n d3.transition(g.select('.nv-y2.nv-axis'))\n .call(y2Axis);\n\n //------------------------------------------------------------\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n legend.dispatch.on('stateChange', function(newState) {\n state = newState;\n dispatch.stateChange(state);\n chart.update();\n });\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e, that.parentNode);\n });\n\n\n // Update chart from a state object passed to event handler\n dispatch.on('changeState', function(e) {\n\n if (typeof e.disabled !== 'undefined') {\n data.forEach(function(series,i) {\n series.disabled = e.disabled[i];\n });\n\n state.disabled = e.disabled;\n }\n\n chart.update();\n });\n\n //============================================================\n\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n lines.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n lines.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n bars.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n bars.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.dispatch = dispatch;\n chart.legend = legend;\n chart.lines = lines;\n chart.bars = bars;\n chart.xAxis = xAxis;\n chart.y1Axis = y1Axis;\n chart.y2Axis = y2Axis;\n\n d3.rebind(chart, lines, 'defined', 'size', 'clipVoronoi', 'interpolate');\n //TODO: consider rebinding x, y and some other stuff, and simply do soemthign lile bars.x(lines.x()), etc.\n //d3.rebind(chart, lines, 'x', 'y', 'size', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'interactive', 'clipEdge', 'clipVoronoi', 'id');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.x = function(_) {\n if (!arguments.length) return getX;\n getX = _;\n lines.x(_);\n bars.x(_);\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return getY;\n getY = _;\n lines.y(_);\n bars.y(_);\n return chart;\n };\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n legend.color(color);\n return chart;\n };\n\n chart.showLegend = function(_) {\n if (!arguments.length) return showLegend;\n showLegend = _;\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.state = function(_) {\n if (!arguments.length) return state;\n state = _;\n return chart;\n };\n\n chart.defaultState = function(_) {\n if (!arguments.length) return defaultState;\n defaultState = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\nnv.models.lineWithFocusChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var lines = nv.models.line()\n , lines2 = nv.models.line()\n , xAxis = nv.models.axis()\n , yAxis = nv.models.axis()\n , x2Axis = nv.models.axis()\n , y2Axis = nv.models.axis()\n , legend = nv.models.legend()\n , brush = d3.svg.brush()\n ;\n\n var margin = {top: 30, right: 30, bottom: 30, left: 60}\n , margin2 = {top: 0, right: 30, bottom: 20, left: 60}\n , color = nv.utils.defaultColor()\n , width = null\n , height = null\n , height2 = 100\n , x\n , y\n , x2\n , y2\n , showLegend = true\n , brushExtent = null\n , tooltips = true\n , tooltip = function(key, x, y, e, graph) {\n return '<h3>' + key + '</h3>' +\n '<p>' + y + ' at ' + x + '</p>'\n }\n , noData = \"No Data Available.\"\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'brush')\n , transitionDuration = 250\n ;\n\n lines\n .clipEdge(true)\n ;\n lines2\n .interactive(false)\n ;\n xAxis\n .orient('bottom')\n .tickPadding(5)\n ;\n yAxis\n .orient('left')\n ;\n x2Axis\n .orient('bottom')\n .tickPadding(5)\n ;\n y2Axis\n .orient('left')\n ;\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var showTooltip = function(e, offsetElement) {\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n top = e.pos[1] + ( offsetElement.offsetTop || 0),\n x = xAxis.tickFormat()(lines.x()(e.point, e.pointIndex)),\n y = yAxis.tickFormat()(lines.y()(e.point, e.pointIndex)),\n content = tooltip(e.series.key, x, y, e, chart);\n\n nv.tooltip.show([left, top], content, null, null, offsetElement);\n };\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this),\n that = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight1 = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom - height2,\n availableHeight2 = height2 - margin2.top - margin2.bottom;\n\n chart.update = function() { container.transition().duration(transitionDuration).call(chart) };\n chart.container = this;\n\n\n //------------------------------------------------------------\n // Display No Data message if there's nothing to show.\n\n if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight1 / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x = lines.xScale();\n y = lines.yScale();\n x2 = lines2.xScale();\n y2 = lines2.yScale();\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-lineWithFocusChart').data([data]);\n var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-lineWithFocusChart').append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-legendWrap');\n\n var focusEnter = gEnter.append('g').attr('class', 'nv-focus');\n focusEnter.append('g').attr('class', 'nv-x nv-axis');\n focusEnter.append('g').attr('class', 'nv-y nv-axis');\n focusEnter.append('g').attr('class', 'nv-linesWrap');\n\n var contextEnter = gEnter.append('g').attr('class', 'nv-context');\n contextEnter.append('g').attr('class', 'nv-x nv-axis');\n contextEnter.append('g').attr('class', 'nv-y nv-axis');\n contextEnter.append('g').attr('class', 'nv-linesWrap');\n contextEnter.append('g').attr('class', 'nv-brushBackground');\n contextEnter.append('g').attr('class', 'nv-x nv-brush');\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Legend\n\n if (showLegend) {\n legend.width(availableWidth);\n\n g.select('.nv-legendWrap')\n .datum(data)\n .call(legend);\n\n if ( margin.top != legend.height()) {\n margin.top = legend.height();\n availableHeight1 = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom - height2;\n }\n\n g.select('.nv-legendWrap')\n .attr('transform', 'translate(0,' + (-margin.top) +')')\n }\n\n //------------------------------------------------------------\n\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n\n //------------------------------------------------------------\n // Main Chart Component(s)\n\n lines\n .width(availableWidth)\n .height(availableHeight1)\n .color(\n data\n .map(function(d,i) {\n return d.color || color(d, i);\n })\n .filter(function(d,i) {\n return !data[i].disabled;\n })\n );\n\n lines2\n .defined(lines.defined())\n .width(availableWidth)\n .height(availableHeight2)\n .color(\n data\n .map(function(d,i) {\n return d.color || color(d, i);\n })\n .filter(function(d,i) {\n return !data[i].disabled;\n })\n );\n\n g.select('.nv-context')\n .attr('transform', 'translate(0,' + ( availableHeight1 + margin.bottom + margin2.top) + ')')\n\n var contextLinesWrap = g.select('.nv-context .nv-linesWrap')\n .datum(data.filter(function(d) { return !d.disabled }))\n\n d3.transition(contextLinesWrap).call(lines2);\n\n //------------------------------------------------------------\n\n\n /*\n var focusLinesWrap = g.select('.nv-focus .nv-linesWrap')\n .datum(data.filter(function(d) { return !d.disabled }))\n\n d3.transition(focusLinesWrap).call(lines);\n */\n\n\n //------------------------------------------------------------\n // Setup Main (Focus) Axes\n\n xAxis\n .scale(x)\n .ticks( availableWidth / 100 )\n .tickSize(-availableHeight1, 0);\n\n yAxis\n .scale(y)\n .ticks( availableHeight1 / 36 )\n .tickSize( -availableWidth, 0);\n\n g.select('.nv-focus .nv-x.nv-axis')\n .attr('transform', 'translate(0,' + availableHeight1 + ')');\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Brush\n\n brush\n .x(x2)\n .on('brush', function() {\n //When brushing, turn off transitions because chart needs to change immediately.\n var oldTransition = chart.transitionDuration();\n chart.transitionDuration(0);\n onBrush();\n chart.transitionDuration(oldTransition);\n });\n\n if (brushExtent) brush.extent(brushExtent);\n\n var brushBG = g.select('.nv-brushBackground').selectAll('g')\n .data([brushExtent || brush.extent()])\n\n var brushBGenter = brushBG.enter()\n .append('g');\n\n brushBGenter.append('rect')\n .attr('class', 'left')\n .attr('x', 0)\n .attr('y', 0)\n .attr('height', availableHeight2);\n\n brushBGenter.append('rect')\n .attr('class', 'right')\n .attr('x', 0)\n .attr('y', 0)\n .attr('height', availableHeight2);\n\n var gBrush = g.select('.nv-x.nv-brush')\n .call(brush);\n gBrush.selectAll('rect')\n //.attr('y', -5)\n .attr('height', availableHeight2);\n gBrush.selectAll('.resize').append('path').attr('d', resizePath);\n\n onBrush();\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Secondary (Context) Axes\n\n x2Axis\n .scale(x2)\n .ticks( availableWidth / 100 )\n .tickSize(-availableHeight2, 0);\n\n g.select('.nv-context .nv-x.nv-axis')\n .attr('transform', 'translate(0,' + y2.range()[0] + ')');\n d3.transition(g.select('.nv-context .nv-x.nv-axis'))\n .call(x2Axis);\n\n\n y2Axis\n .scale(y2)\n .ticks( availableHeight2 / 36 )\n .tickSize( -availableWidth, 0);\n\n d3.transition(g.select('.nv-context .nv-y.nv-axis'))\n .call(y2Axis);\n\n g.select('.nv-context .nv-x.nv-axis')\n .attr('transform', 'translate(0,' + y2.range()[0] + ')');\n\n //------------------------------------------------------------\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n legend.dispatch.on('stateChange', function(newState) {\n chart.update();\n });\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e, that.parentNode);\n });\n\n //============================================================\n\n\n //============================================================\n // Functions\n //------------------------------------------------------------\n\n // Taken from crossfilter (http://square.github.com/crossfilter/)\n function resizePath(d) {\n var e = +(d == 'e'),\n x = e ? 1 : -1,\n y = availableHeight2 / 3;\n return 'M' + (.5 * x) + ',' + y\n + 'A6,6 0 0 ' + e + ' ' + (6.5 * x) + ',' + (y + 6)\n + 'V' + (2 * y - 6)\n + 'A6,6 0 0 ' + e + ' ' + (.5 * x) + ',' + (2 * y)\n + 'Z'\n + 'M' + (2.5 * x) + ',' + (y + 8)\n + 'V' + (2 * y - 8)\n + 'M' + (4.5 * x) + ',' + (y + 8)\n + 'V' + (2 * y - 8);\n }\n\n\n function updateBrushBG() {\n if (!brush.empty()) brush.extent(brushExtent);\n brushBG\n .data([brush.empty() ? x2.domain() : brushExtent])\n .each(function(d,i) {\n var leftWidth = x2(d[0]) - x.range()[0],\n rightWidth = x.range()[1] - x2(d[1]);\n d3.select(this).select('.left')\n .attr('width', leftWidth < 0 ? 0 : leftWidth);\n\n d3.select(this).select('.right')\n .attr('x', x2(d[1]))\n .attr('width', rightWidth < 0 ? 0 : rightWidth);\n });\n }\n\n\n function onBrush() {\n brushExtent = brush.empty() ? null : brush.extent();\n var extent = brush.empty() ? x2.domain() : brush.extent();\n\n //The brush extent cannot be less than one. If it is, don't update the line chart.\n if (Math.abs(extent[0] - extent[1]) <= 1) {\n return;\n }\n\n dispatch.brush({extent: extent, brush: brush});\n\n\n updateBrushBG();\n\n // Update Main (Focus)\n var focusLinesWrap = g.select('.nv-focus .nv-linesWrap')\n .datum(\n data\n .filter(function(d) { return !d.disabled })\n .map(function(d,i) {\n return {\n key: d.key,\n values: d.values.filter(function(d,i) {\n return lines.x()(d,i) >= extent[0] && lines.x()(d,i) <= extent[1];\n })\n }\n })\n );\n focusLinesWrap.transition().duration(transitionDuration).call(lines);\n\n\n // Update Main (Focus) Axes\n g.select('.nv-focus .nv-x.nv-axis').transition().duration(transitionDuration)\n .call(xAxis);\n g.select('.nv-focus .nv-y.nv-axis').transition().duration(transitionDuration)\n .call(yAxis);\n }\n\n //============================================================\n\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n lines.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n lines.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.dispatch = dispatch;\n chart.legend = legend;\n chart.lines = lines;\n chart.lines2 = lines2;\n chart.xAxis = xAxis;\n chart.yAxis = yAxis;\n chart.x2Axis = x2Axis;\n chart.y2Axis = y2Axis;\n\n d3.rebind(chart, lines, 'defined', 'isArea', 'size', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'interactive', 'clipEdge', 'clipVoronoi', 'id');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.x = function(_) {\n if (!arguments.length) return lines.x;\n lines.x(_);\n lines2.x(_);\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return lines.y;\n lines.y(_);\n lines2.y(_);\n return chart;\n };\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.margin2 = function(_) {\n if (!arguments.length) return margin2;\n margin2 = _;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.height2 = function(_) {\n if (!arguments.length) return height2;\n height2 = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color =nv.utils.getColor(_);\n legend.color(color);\n return chart;\n };\n\n chart.showLegend = function(_) {\n if (!arguments.length) return showLegend;\n showLegend = _;\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.interpolate = function(_) {\n if (!arguments.length) return lines.interpolate();\n lines.interpolate(_);\n lines2.interpolate(_);\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n // Chart has multiple similar Axes, to prevent code duplication, probably need to link all axis functions manually like below\n chart.xTickFormat = function(_) {\n if (!arguments.length) return xAxis.tickFormat();\n xAxis.tickFormat(_);\n x2Axis.tickFormat(_);\n return chart;\n };\n\n chart.yTickFormat = function(_) {\n if (!arguments.length) return yAxis.tickFormat();\n yAxis.tickFormat(_);\n y2Axis.tickFormat(_);\n return chart;\n };\n\n chart.brushExtent = function(_) {\n if (!arguments.length) return brushExtent;\n brushExtent = _;\n return chart;\n };\n\n chart.transitionDuration = function(_) {\n if (!arguments.length) return transitionDuration;\n transitionDuration = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.linePlusBarWithFocusChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var lines = nv.models.line()\n , lines2 = nv.models.line()\n , bars = nv.models.historicalBar()\n , bars2 = nv.models.historicalBar()\n , xAxis = nv.models.axis()\n , x2Axis = nv.models.axis()\n , y1Axis = nv.models.axis()\n , y2Axis = nv.models.axis()\n , y3Axis = nv.models.axis()\n , y4Axis = nv.models.axis()\n , legend = nv.models.legend()\n , brush = d3.svg.brush()\n ;\n\n var margin = {top: 30, right: 30, bottom: 30, left: 60}\n , margin2 = {top: 0, right: 30, bottom: 20, left: 60}\n , width = null\n , height = null\n , height2 = 100\n , getX = function(d) { return d.x }\n , getY = function(d) { return d.y }\n , color = nv.utils.defaultColor()\n , showLegend = true\n , extent\n , brushExtent = null\n , tooltips = true\n , tooltip = function(key, x, y, e, graph) {\n return '<h3>' + key + '</h3>' +\n '<p>' + y + ' at ' + x + '</p>';\n }\n , x\n , x2\n , y1\n , y2\n , y3\n , y4\n , noData = \"No Data Available.\"\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'brush')\n , transitionDuration = 0\n ;\n\n lines\n .clipEdge(true)\n ;\n lines2\n .interactive(false)\n ;\n xAxis\n .orient('bottom')\n .tickPadding(5)\n ;\n y1Axis\n .orient('left')\n ;\n y2Axis\n .orient('right')\n ;\n x2Axis\n .orient('bottom')\n .tickPadding(5)\n ;\n y3Axis\n .orient('left')\n ;\n y4Axis\n .orient('right')\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var showTooltip = function(e, offsetElement) {\n if (extent) {\n e.pointIndex += Math.ceil(extent[0]);\n }\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n top = e.pos[1] + ( offsetElement.offsetTop || 0),\n x = xAxis.tickFormat()(lines.x()(e.point, e.pointIndex)),\n y = (e.series.bar ? y1Axis : y2Axis).tickFormat()(lines.y()(e.point, e.pointIndex)),\n content = tooltip(e.series.key, x, y, e, chart);\n\n nv.tooltip.show([left, top], content, e.value < 0 ? 'n' : 's', null, offsetElement);\n };\n\n //------------------------------------------------------------\n\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this),\n that = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight1 = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom - height2,\n availableHeight2 = height2 - margin2.top - margin2.bottom;\n\n chart.update = function() { container.transition().duration(transitionDuration).call(chart); };\n chart.container = this;\n\n\n //------------------------------------------------------------\n // Display No Data message if there's nothing to show.\n\n if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight1 / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n var dataBars = data.filter(function(d) { return !d.disabled && d.bar });\n var dataLines = data.filter(function(d) { return !d.bar }); // removed the !d.disabled clause here to fix Issue #240\n\n x = bars.xScale();\n x2 = x2Axis.scale();\n y1 = bars.yScale();\n y2 = lines.yScale();\n y3 = bars2.yScale();\n y4 = lines2.yScale();\n\n var series1 = data\n .filter(function(d) { return !d.disabled && d.bar })\n .map(function(d) {\n return d.values.map(function(d,i) {\n return { x: getX(d,i), y: getY(d,i) }\n })\n });\n\n var series2 = data\n .filter(function(d) { return !d.disabled && !d.bar })\n .map(function(d) {\n return d.values.map(function(d,i) {\n return { x: getX(d,i), y: getY(d,i) }\n })\n });\n\n x .range([0, availableWidth]);\n\n x2 .domain(d3.extent(d3.merge(series1.concat(series2)), function(d) { return d.x } ))\n .range([0, availableWidth]);\n\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-linePlusBar').data([data]);\n var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-linePlusBar').append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-legendWrap');\n\n var focusEnter = gEnter.append('g').attr('class', 'nv-focus');\n focusEnter.append('g').attr('class', 'nv-x nv-axis');\n focusEnter.append('g').attr('class', 'nv-y1 nv-axis');\n focusEnter.append('g').attr('class', 'nv-y2 nv-axis');\n focusEnter.append('g').attr('class', 'nv-barsWrap');\n focusEnter.append('g').attr('class', 'nv-linesWrap');\n\n var contextEnter = gEnter.append('g').attr('class', 'nv-context');\n contextEnter.append('g').attr('class', 'nv-x nv-axis');\n contextEnter.append('g').attr('class', 'nv-y1 nv-axis');\n contextEnter.append('g').attr('class', 'nv-y2 nv-axis');\n contextEnter.append('g').attr('class', 'nv-barsWrap');\n contextEnter.append('g').attr('class', 'nv-linesWrap');\n contextEnter.append('g').attr('class', 'nv-brushBackground');\n contextEnter.append('g').attr('class', 'nv-x nv-brush');\n\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Legend\n\n if (showLegend) {\n legend.width( availableWidth / 2 );\n\n g.select('.nv-legendWrap')\n .datum(data.map(function(series) {\n series.originalKey = series.originalKey === undefined ? series.key : series.originalKey;\n series.key = series.originalKey + (series.bar ? ' (left axis)' : ' (right axis)');\n return series;\n }))\n .call(legend);\n\n if ( margin.top != legend.height()) {\n margin.top = legend.height();\n availableHeight1 = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom - height2;\n }\n\n g.select('.nv-legendWrap')\n .attr('transform', 'translate(' + ( availableWidth / 2 ) + ',' + (-margin.top) +')');\n }\n\n //------------------------------------------------------------\n\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n\n //------------------------------------------------------------\n // Context Components\n\n bars2\n .width(availableWidth)\n .height(availableHeight2)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled && data[i].bar }));\n\n lines2\n .width(availableWidth)\n .height(availableHeight2)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled && !data[i].bar }));\n\n var bars2Wrap = g.select('.nv-context .nv-barsWrap')\n .datum(dataBars.length ? dataBars : [{values:[]}]);\n\n var lines2Wrap = g.select('.nv-context .nv-linesWrap')\n .datum(!dataLines[0].disabled ? dataLines : [{values:[]}]);\n\n g.select('.nv-context')\n .attr('transform', 'translate(0,' + ( availableHeight1 + margin.bottom + margin2.top) + ')')\n\n bars2Wrap.transition().call(bars2);\n lines2Wrap.transition().call(lines2);\n\n //------------------------------------------------------------\n\n\n\n //------------------------------------------------------------\n // Setup Brush\n\n brush\n .x(x2)\n .on('brush', onBrush);\n\n if (brushExtent) brush.extent(brushExtent);\n\n var brushBG = g.select('.nv-brushBackground').selectAll('g')\n .data([brushExtent || brush.extent()])\n\n var brushBGenter = brushBG.enter()\n .append('g');\n\n brushBGenter.append('rect')\n .attr('class', 'left')\n .attr('x', 0)\n .attr('y', 0)\n .attr('height', availableHeight2);\n\n brushBGenter.append('rect')\n .attr('class', 'right')\n .attr('x', 0)\n .attr('y', 0)\n .attr('height', availableHeight2);\n\n var gBrush = g.select('.nv-x.nv-brush')\n .call(brush);\n gBrush.selectAll('rect')\n //.attr('y', -5)\n .attr('height', availableHeight2);\n gBrush.selectAll('.resize').append('path').attr('d', resizePath);\n\n //------------------------------------------------------------\n\n //------------------------------------------------------------\n // Setup Secondary (Context) Axes\n\n x2Axis\n .ticks( availableWidth / 100 )\n .tickSize(-availableHeight2, 0);\n\n g.select('.nv-context .nv-x.nv-axis')\n .attr('transform', 'translate(0,' + y3.range()[0] + ')');\n g.select('.nv-context .nv-x.nv-axis').transition()\n .call(x2Axis);\n\n\n y3Axis\n .scale(y3)\n .ticks( availableHeight2 / 36 )\n .tickSize( -availableWidth, 0);\n\n g.select('.nv-context .nv-y1.nv-axis')\n .style('opacity', dataBars.length ? 1 : 0)\n .attr('transform', 'translate(0,' + x2.range()[0] + ')');\n\n g.select('.nv-context .nv-y1.nv-axis').transition()\n .call(y3Axis);\n\n\n y4Axis\n .scale(y4)\n .ticks( availableHeight2 / 36 )\n .tickSize(dataBars.length ? 0 : -availableWidth, 0); // Show the y2 rules only if y1 has none\n\n g.select('.nv-context .nv-y2.nv-axis')\n .style('opacity', dataLines.length ? 1 : 0)\n .attr('transform', 'translate(' + x2.range()[1] + ',0)');\n\n g.select('.nv-context .nv-y2.nv-axis').transition()\n .call(y4Axis);\n\n //------------------------------------------------------------\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n legend.dispatch.on('stateChange', function(newState) {\n chart.update();\n });\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e, that.parentNode);\n });\n\n //============================================================\n\n\n //============================================================\n // Functions\n //------------------------------------------------------------\n\n // Taken from crossfilter (http://square.github.com/crossfilter/)\n function resizePath(d) {\n var e = +(d == 'e'),\n x = e ? 1 : -1,\n y = availableHeight2 / 3;\n return 'M' + (.5 * x) + ',' + y\n + 'A6,6 0 0 ' + e + ' ' + (6.5 * x) + ',' + (y + 6)\n + 'V' + (2 * y - 6)\n + 'A6,6 0 0 ' + e + ' ' + (.5 * x) + ',' + (2 * y)\n + 'Z'\n + 'M' + (2.5 * x) + ',' + (y + 8)\n + 'V' + (2 * y - 8)\n + 'M' + (4.5 * x) + ',' + (y + 8)\n + 'V' + (2 * y - 8);\n }\n\n\n function updateBrushBG() {\n if (!brush.empty()) brush.extent(brushExtent);\n brushBG\n .data([brush.empty() ? x2.domain() : brushExtent])\n .each(function(d,i) {\n var leftWidth = x2(d[0]) - x2.range()[0],\n rightWidth = x2.range()[1] - x2(d[1]);\n d3.select(this).select('.left')\n .attr('width', leftWidth < 0 ? 0 : leftWidth);\n\n d3.select(this).select('.right')\n .attr('x', x2(d[1]))\n .attr('width', rightWidth < 0 ? 0 : rightWidth);\n });\n }\n\n\n function onBrush() {\n brushExtent = brush.empty() ? null : brush.extent();\n extent = brush.empty() ? x2.domain() : brush.extent();\n\n\n dispatch.brush({extent: extent, brush: brush});\n\n updateBrushBG();\n\n\n //------------------------------------------------------------\n // Prepare Main (Focus) Bars and Lines\n\n bars\n .width(availableWidth)\n .height(availableHeight1)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled && data[i].bar }));\n\n\n lines\n .width(availableWidth)\n .height(availableHeight1)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled && !data[i].bar }));\n\n var focusBarsWrap = g.select('.nv-focus .nv-barsWrap')\n .datum(!dataBars.length ? [{values:[]}] :\n dataBars\n .map(function(d,i) {\n return {\n key: d.key,\n values: d.values.filter(function(d,i) {\n return bars.x()(d,i) >= extent[0] && bars.x()(d,i) <= extent[1];\n })\n }\n })\n );\n\n var focusLinesWrap = g.select('.nv-focus .nv-linesWrap')\n .datum(dataLines[0].disabled ? [{values:[]}] :\n dataLines\n .map(function(d,i) {\n return {\n key: d.key,\n values: d.values.filter(function(d,i) {\n return lines.x()(d,i) >= extent[0] && lines.x()(d,i) <= extent[1];\n })\n }\n })\n );\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Update Main (Focus) X Axis\n\n if (dataBars.length) {\n x = bars.xScale();\n } else {\n x = lines.xScale();\n }\n\n xAxis\n .scale(x)\n .ticks( availableWidth / 100 )\n .tickSize(-availableHeight1, 0);\n\n xAxis.domain([Math.ceil(extent[0]), Math.floor(extent[1])]);\n\n g.select('.nv-x.nv-axis').transition().duration(transitionDuration)\n .call(xAxis);\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Update Main (Focus) Bars and Lines\n\n focusBarsWrap.transition().duration(transitionDuration).call(bars);\n focusLinesWrap.transition().duration(transitionDuration).call(lines);\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup and Update Main (Focus) Y Axes\n\n g.select('.nv-focus .nv-x.nv-axis')\n .attr('transform', 'translate(0,' + y1.range()[0] + ')');\n\n\n y1Axis\n .scale(y1)\n .ticks( availableHeight1 / 36 )\n .tickSize(-availableWidth, 0);\n\n g.select('.nv-focus .nv-y1.nv-axis')\n .style('opacity', dataBars.length ? 1 : 0);\n\n\n y2Axis\n .scale(y2)\n .ticks( availableHeight1 / 36 )\n .tickSize(dataBars.length ? 0 : -availableWidth, 0); // Show the y2 rules only if y1 has none\n\n g.select('.nv-focus .nv-y2.nv-axis')\n .style('opacity', dataLines.length ? 1 : 0)\n .attr('transform', 'translate(' + x.range()[1] + ',0)');\n\n g.select('.nv-focus .nv-y1.nv-axis').transition().duration(transitionDuration)\n .call(y1Axis);\n g.select('.nv-focus .nv-y2.nv-axis').transition().duration(transitionDuration)\n .call(y2Axis);\n }\n\n //============================================================\n\n onBrush();\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n lines.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n lines.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n bars.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n bars.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.dispatch = dispatch;\n chart.legend = legend;\n chart.lines = lines;\n chart.lines2 = lines2;\n chart.bars = bars;\n chart.bars2 = bars2;\n chart.xAxis = xAxis;\n chart.x2Axis = x2Axis;\n chart.y1Axis = y1Axis;\n chart.y2Axis = y2Axis;\n chart.y3Axis = y3Axis;\n chart.y4Axis = y4Axis;\n\n d3.rebind(chart, lines, 'defined', 'size', 'clipVoronoi', 'interpolate');\n //TODO: consider rebinding x, y and some other stuff, and simply do soemthign lile bars.x(lines.x()), etc.\n //d3.rebind(chart, lines, 'x', 'y', 'size', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'interactive', 'clipEdge', 'clipVoronoi', 'id');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.x = function(_) {\n if (!arguments.length) return getX;\n getX = _;\n lines.x(_);\n bars.x(_);\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return getY;\n getY = _;\n lines.y(_);\n bars.y(_);\n return chart;\n };\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n legend.color(color);\n return chart;\n };\n\n chart.showLegend = function(_) {\n if (!arguments.length) return showLegend;\n showLegend = _;\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n chart.brushExtent = function(_) {\n if (!arguments.length) return brushExtent;\n brushExtent = _;\n return chart;\n };\n\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.multiBar = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 0, right: 0, bottom: 0, left: 0}\n , width = 960\n , height = 500\n , x = d3.scale.ordinal()\n , y = d3.scale.linear()\n , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one\n , getX = function(d) { return d.x }\n , getY = function(d) { return d.y }\n , forceY = [0] // 0 is forced by default.. this makes sense for the majority of bar graphs... user can always do chart.forceY([]) to remove\n , clipEdge = true\n , stacked = false\n , color = nv.utils.defaultColor()\n , hideable = false\n , barColor = null // adding the ability to set the color for each rather than the whole group\n , disabled // used in conjunction with barColor to communicate from multiBarHorizontalChart what series are disabled\n , delay = 1200\n , xDomain\n , yDomain\n , xRange\n , yRange\n , groupSpacing = 0.1\n , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout')\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var x0, y0 //used to store previous scales\n ;\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var availableWidth = width - margin.left - margin.right,\n availableHeight = height - margin.top - margin.bottom,\n container = d3.select(this);\n\n if(hideable && data.length) hideable = [{\n values: data[0].values.map(function(d) {\n return {\n x: d.x,\n y: 0,\n series: d.series,\n size: 0.01\n };}\n )}];\n\n if (stacked)\n data = d3.layout.stack()\n .offset('zero')\n .values(function(d){ return d.values })\n .y(getY)\n (!data.length && hideable ? hideable : data);\n\n\n //add series index to each data point for reference\n data = data.map(function(series, i) {\n series.values = series.values.map(function(point) {\n point.series = i;\n return point;\n });\n return series;\n });\n\n\n //------------------------------------------------------------\n // HACK for negative value stacking\n if (stacked)\n data[0].values.map(function(d,i) {\n var posBase = 0, negBase = 0;\n data.map(function(d) {\n var f = d.values[i]\n f.size = Math.abs(f.y);\n if (f.y<0) {\n f.y1 = negBase;\n negBase = negBase - f.size;\n } else\n {\n f.y1 = f.size + posBase;\n posBase = posBase + f.size;\n }\n });\n });\n\n //------------------------------------------------------------\n // Setup Scales\n\n // remap and flatten the data for use in calculating the scales' domains\n var seriesData = (xDomain && yDomain) ? [] : // if we know xDomain and yDomain, no need to calculate\n data.map(function(d) {\n return d.values.map(function(d,i) {\n return { x: getX(d,i), y: getY(d,i), y0: d.y0, y1: d.y1 }\n })\n });\n\n x .domain(xDomain || d3.merge(seriesData).map(function(d) { return d.x }))\n .rangeBands(xRange || [0, availableWidth], groupSpacing);\n\n //y .domain(yDomain || d3.extent(d3.merge(seriesData).map(function(d) { return d.y + (stacked ? d.y1 : 0) }).concat(forceY)))\n y .domain(yDomain || d3.extent(d3.merge(seriesData).map(function(d) { return stacked ? (d.y > 0 ? d.y1 : d.y1 + d.y ) : d.y }).concat(forceY)))\n .range(yRange || [availableHeight, 0]);\n\n // If scale's domain don't have a range, slightly adjust to make one... so a chart can show a single data point\n if (x.domain()[0] === x.domain()[1])\n x.domain()[0] ?\n x.domain([x.domain()[0] - x.domain()[0] * 0.01, x.domain()[1] + x.domain()[1] * 0.01])\n : x.domain([-1,1]);\n\n if (y.domain()[0] === y.domain()[1])\n y.domain()[0] ?\n y.domain([y.domain()[0] + y.domain()[0] * 0.01, y.domain()[1] - y.domain()[1] * 0.01])\n : y.domain([-1,1]);\n\n\n x0 = x0 || x;\n y0 = y0 || y;\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-multibar').data([data]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-multibar');\n var defsEnter = wrapEnter.append('defs');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g')\n\n gEnter.append('g').attr('class', 'nv-groups');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n //------------------------------------------------------------\n\n\n\n defsEnter.append('clipPath')\n .attr('id', 'nv-edge-clip-' + id)\n .append('rect');\n wrap.select('#nv-edge-clip-' + id + ' rect')\n .attr('width', availableWidth)\n .attr('height', availableHeight);\n\n g .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + id + ')' : '');\n\n\n\n var groups = wrap.select('.nv-groups').selectAll('.nv-group')\n .data(function(d) { return d }, function(d,i) { return i });\n groups.enter().append('g')\n .style('stroke-opacity', 1e-6)\n .style('fill-opacity', 1e-6);\n groups.exit()\n .transition()\n .selectAll('rect.nv-bar')\n .delay(function(d,i) {\n return i * delay/ data[0].values.length;\n })\n .attr('y', function(d) { return stacked ? y0(d.y0) : y0(0) })\n .attr('height', 0)\n .remove();\n groups\n .attr('class', function(d,i) { return 'nv-group nv-series-' + i })\n .classed('hover', function(d) { return d.hover })\n .style('fill', function(d,i){ return color(d, i) })\n .style('stroke', function(d,i){ return color(d, i) });\n groups\n .transition()\n .style('stroke-opacity', 1)\n .style('fill-opacity', .75);\n\n\n var bars = groups.selectAll('rect.nv-bar')\n .data(function(d) { return (hideable && !data.length) ? hideable.values : d.values });\n\n bars.exit().remove();\n\n\n var barsEnter = bars.enter().append('rect')\n .attr('class', function(d,i) { return getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive'})\n .attr('x', function(d,i,j) {\n return stacked ? 0 : (j * x.rangeBand() / data.length )\n })\n .attr('y', function(d) { return y0(stacked ? d.y0 : 0) })\n .attr('height', 0)\n .attr('width', x.rangeBand() / (stacked ? 1 : data.length) )\n .attr('transform', function(d,i) { return 'translate(' + x(getX(d,i)) + ',0)'; })\n ;\n bars\n .style('fill', function(d,i,j){ return color(d, j, i); })\n .style('stroke', function(d,i,j){ return color(d, j, i); })\n .on('mouseover', function(d,i) { //TODO: figure out why j works above, but not here\n d3.select(this).classed('hover', true);\n dispatch.elementMouseover({\n value: getY(d,i),\n point: d,\n series: data[d.series],\n pos: [x(getX(d,i)) + (x.rangeBand() * (stacked ? data.length / 2 : d.series + .5) / data.length), y(getY(d,i) + (stacked ? d.y0 : 0))], // TODO: Figure out why the value appears to be shifted\n pointIndex: i,\n seriesIndex: d.series,\n e: d3.event\n });\n })\n .on('mouseout', function(d,i) {\n d3.select(this).classed('hover', false);\n dispatch.elementMouseout({\n value: getY(d,i),\n point: d,\n series: data[d.series],\n pointIndex: i,\n seriesIndex: d.series,\n e: d3.event\n });\n })\n .on('click', function(d,i) {\n dispatch.elementClick({\n value: getY(d,i),\n point: d,\n series: data[d.series],\n pos: [x(getX(d,i)) + (x.rangeBand() * (stacked ? data.length / 2 : d.series + .5) / data.length), y(getY(d,i) + (stacked ? d.y0 : 0))], // TODO: Figure out why the value appears to be shifted\n pointIndex: i,\n seriesIndex: d.series,\n e: d3.event\n });\n d3.event.stopPropagation();\n })\n .on('dblclick', function(d,i) {\n dispatch.elementDblClick({\n value: getY(d,i),\n point: d,\n series: data[d.series],\n pos: [x(getX(d,i)) + (x.rangeBand() * (stacked ? data.length / 2 : d.series + .5) / data.length), y(getY(d,i) + (stacked ? d.y0 : 0))], // TODO: Figure out why the value appears to be shifted\n pointIndex: i,\n seriesIndex: d.series,\n e: d3.event\n });\n d3.event.stopPropagation();\n });\n bars\n .attr('class', function(d,i) { return getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive'})\n .transition()\n .attr('transform', function(d,i) { return 'translate(' + x(getX(d,i)) + ',0)'; })\n\n if (barColor) {\n if (!disabled) disabled = data.map(function() { return true });\n bars\n .style('fill', function(d,i,j) { return d3.rgb(barColor(d,i)).darker( disabled.map(function(d,i) { return i }).filter(function(d,i){ return !disabled[i] })[j] ).toString(); })\n .style('stroke', function(d,i,j) { return d3.rgb(barColor(d,i)).darker( disabled.map(function(d,i) { return i }).filter(function(d,i){ return !disabled[i] })[j] ).toString(); });\n }\n\n\n if (stacked)\n bars.transition()\n .delay(function(d,i) {\n\n return i * delay / data[0].values.length;\n })\n .attr('y', function(d,i) {\n\n return y((stacked ? d.y1 : 0));\n })\n .attr('height', function(d,i) {\n return Math.max(Math.abs(y(d.y + (stacked ? d.y0 : 0)) - y((stacked ? d.y0 : 0))),1);\n })\n .attr('x', function(d,i) {\n return stacked ? 0 : (d.series * x.rangeBand() / data.length )\n })\n .attr('width', x.rangeBand() / (stacked ? 1 : data.length) );\n else\n bars.transition()\n .delay(function(d,i) {\n return i * delay/ data[0].values.length;\n })\n .attr('x', function(d,i) {\n return d.series * x.rangeBand() / data.length\n })\n .attr('width', x.rangeBand() / data.length)\n .attr('y', function(d,i) {\n return getY(d,i) < 0 ?\n y(0) :\n y(0) - y(getY(d,i)) < 1 ?\n y(0) - 1 :\n y(getY(d,i)) || 0;\n })\n .attr('height', function(d,i) {\n return Math.max(Math.abs(y(getY(d,i)) - y(0)),1) || 0;\n });\n\n\n\n //store old scales for use in transitions on update\n x0 = x.copy();\n y0 = y.copy();\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n chart.dispatch = dispatch;\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.x = function(_) {\n if (!arguments.length) return getX;\n getX = _;\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return getY;\n getY = _;\n return chart;\n };\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.xScale = function(_) {\n if (!arguments.length) return x;\n x = _;\n return chart;\n };\n\n chart.yScale = function(_) {\n if (!arguments.length) return y;\n y = _;\n return chart;\n };\n\n chart.xDomain = function(_) {\n if (!arguments.length) return xDomain;\n xDomain = _;\n return chart;\n };\n\n chart.yDomain = function(_) {\n if (!arguments.length) return yDomain;\n yDomain = _;\n return chart;\n };\n\n chart.xRange = function(_) {\n if (!arguments.length) return xRange;\n xRange = _;\n return chart;\n };\n\n chart.yRange = function(_) {\n if (!arguments.length) return yRange;\n yRange = _;\n return chart;\n };\n\n chart.forceY = function(_) {\n if (!arguments.length) return forceY;\n forceY = _;\n return chart;\n };\n\n chart.stacked = function(_) {\n if (!arguments.length) return stacked;\n stacked = _;\n return chart;\n };\n\n chart.clipEdge = function(_) {\n if (!arguments.length) return clipEdge;\n clipEdge = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n return chart;\n };\n\n chart.barColor = function(_) {\n if (!arguments.length) return barColor;\n barColor = nv.utils.getColor(_);\n return chart;\n };\n\n chart.disabled = function(_) {\n if (!arguments.length) return disabled;\n disabled = _;\n return chart;\n };\n\n chart.id = function(_) {\n if (!arguments.length) return id;\n id = _;\n return chart;\n };\n\n chart.hideable = function(_) {\n if (!arguments.length) return hideable;\n hideable = _;\n return chart;\n };\n\n chart.delay = function(_) {\n if (!arguments.length) return delay;\n delay = _;\n return chart;\n };\n\n chart.groupSpacing = function(_) {\n if (!arguments.length) return groupSpacing;\n groupSpacing = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.multiBarChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var multibar = nv.models.multiBar()\n , xAxis = nv.models.axis()\n , yAxis = nv.models.axis()\n , legend = nv.models.legend()\n , controls = nv.models.legend()\n ;\n\n var margin = {top: 30, right: 20, bottom: 50, left: 60}\n , width = null\n , height = null\n , color = nv.utils.defaultColor()\n , showControls = true\n , showLegend = true\n , showXAxis = true\n , showYAxis = true\n , rightAlignYAxis = false\n , reduceXTicks = true // if false a tick will show for every data point\n , staggerLabels = false\n , rotateLabels = 0\n , tooltips = true\n , tooltip = function(key, x, y, e, graph) {\n return '<h3>' + key + '</h3>' +\n '<p>' + y + ' on ' + x + '</p>'\n }\n , x //can be accessed via chart.xScale()\n , y //can be accessed via chart.yScale()\n , state = { stacked: false }\n , defaultState = null\n , noData = \"No Data Available.\"\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')\n , controlWidth = function() { return showControls ? 180 : 0 }\n , transitionDuration = 250\n ;\n\n multibar\n .stacked(false)\n ;\n xAxis\n .orient('bottom')\n .tickPadding(7)\n .highlightZero(true)\n .showMaxMin(false)\n .tickFormat(function(d) { return d })\n ;\n yAxis\n .orient((rightAlignYAxis) ? 'right' : 'left')\n .tickFormat(d3.format(',.1f'))\n ;\n\n controls.updateState(false);\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var showTooltip = function(e, offsetElement) {\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n top = e.pos[1] + ( offsetElement.offsetTop || 0),\n x = xAxis.tickFormat()(multibar.x()(e.point, e.pointIndex)),\n y = yAxis.tickFormat()(multibar.y()(e.point, e.pointIndex)),\n content = tooltip(e.series.key, x, y, e, chart);\n\n nv.tooltip.show([left, top], content, e.value < 0 ? 'n' : 's', null, offsetElement);\n };\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this),\n that = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n\n chart.update = function() { container.transition().duration(transitionDuration).call(chart) };\n chart.container = this;\n\n //set state.disabled\n state.disabled = data.map(function(d) { return !!d.disabled });\n\n if (!defaultState) {\n var key;\n defaultState = {};\n for (key in state) {\n if (state[key] instanceof Array)\n defaultState[key] = state[key].slice(0);\n else\n defaultState[key] = state[key];\n }\n }\n //------------------------------------------------------------\n // Display noData message if there's nothing to show.\n\n if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x = multibar.xScale();\n y = multibar.yScale();\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-multiBarWithLegend').data([data]);\n var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-multiBarWithLegend').append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-x nv-axis');\n gEnter.append('g').attr('class', 'nv-y nv-axis');\n gEnter.append('g').attr('class', 'nv-barsWrap');\n gEnter.append('g').attr('class', 'nv-legendWrap');\n gEnter.append('g').attr('class', 'nv-controlsWrap');\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Legend\n\n if (showLegend) {\n legend.width(availableWidth - controlWidth());\n\n if (multibar.barColor())\n data.forEach(function(series,i) {\n series.color = d3.rgb('#ccc').darker(i * 1.5).toString();\n })\n\n g.select('.nv-legendWrap')\n .datum(data)\n .call(legend);\n\n if ( margin.top != legend.height()) {\n margin.top = legend.height();\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n }\n\n g.select('.nv-legendWrap')\n .attr('transform', 'translate(' + controlWidth() + ',' + (-margin.top) +')');\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Controls\n\n if (showControls) {\n var controlsData = [\n { key: 'Grouped', disabled: multibar.stacked() },\n { key: 'Stacked', disabled: !multibar.stacked() }\n ];\n\n controls.width(controlWidth()).color(['#444', '#444', '#444']);\n g.select('.nv-controlsWrap')\n .datum(controlsData)\n .attr('transform', 'translate(0,' + (-margin.top) +')')\n .call(controls);\n }\n\n //------------------------------------------------------------\n\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n if (rightAlignYAxis) {\n g.select(\".nv-y.nv-axis\")\n .attr(\"transform\", \"translate(\" + availableWidth + \",0)\");\n }\n\n //------------------------------------------------------------\n // Main Chart Component(s)\n\n multibar\n .disabled(data.map(function(series) { return series.disabled }))\n .width(availableWidth)\n .height(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled }))\n\n\n var barsWrap = g.select('.nv-barsWrap')\n .datum(data.filter(function(d) { return !d.disabled }))\n\n barsWrap.transition().call(multibar);\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Axes\n\n if (showXAxis) {\n xAxis\n .scale(x)\n .ticks( availableWidth / 100 )\n .tickSize(-availableHeight, 0);\n\n g.select('.nv-x.nv-axis')\n .attr('transform', 'translate(0,' + y.range()[0] + ')');\n g.select('.nv-x.nv-axis').transition()\n .call(xAxis);\n\n var xTicks = g.select('.nv-x.nv-axis > g').selectAll('g');\n\n xTicks\n .selectAll('line, text')\n .style('opacity', 1)\n\n if (staggerLabels) {\n var getTranslate = function(x,y) {\n return \"translate(\" + x + \",\" + y + \")\";\n };\n\n var staggerUp = 5, staggerDown = 17; //pixels to stagger by\n // Issue #140\n xTicks\n .selectAll(\"text\")\n .attr('transform', function(d,i,j) {\n return getTranslate(0, (j % 2 == 0 ? staggerUp : staggerDown));\n });\n\n var totalInBetweenTicks = d3.selectAll(\".nv-x.nv-axis .nv-wrap g g text\")[0].length;\n g.selectAll(\".nv-x.nv-axis .nv-axisMaxMin text\")\n .attr(\"transform\", function(d,i) {\n return getTranslate(0, (i === 0 || totalInBetweenTicks % 2 !== 0) ? staggerDown : staggerUp);\n });\n }\n\n if (reduceXTicks)\n xTicks\n .filter(function(d,i) {\n return i % Math.ceil(data[0].values.length / (availableWidth / 100)) !== 0;\n })\n .selectAll('text, line')\n .style('opacity', 0);\n\n if(rotateLabels)\n xTicks\n .selectAll('.tick text')\n .attr('transform', 'rotate(' + rotateLabels + ' 0,0)')\n .style('text-anchor', rotateLabels > 0 ? 'start' : 'end');\n\n g.select('.nv-x.nv-axis').selectAll('g.nv-axisMaxMin text')\n .style('opacity', 1);\n }\n\n\n if (showYAxis) {\n yAxis\n .scale(y)\n .ticks( availableHeight / 36 )\n .tickSize( -availableWidth, 0);\n\n g.select('.nv-y.nv-axis').transition()\n .call(yAxis);\n }\n\n\n //------------------------------------------------------------\n\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n legend.dispatch.on('stateChange', function(newState) {\n state = newState;\n dispatch.stateChange(state);\n chart.update();\n });\n\n controls.dispatch.on('legendClick', function(d,i) {\n if (!d.disabled) return;\n controlsData = controlsData.map(function(s) {\n s.disabled = true;\n return s;\n });\n d.disabled = false;\n\n switch (d.key) {\n case 'Grouped':\n multibar.stacked(false);\n break;\n case 'Stacked':\n multibar.stacked(true);\n break;\n }\n\n state.stacked = multibar.stacked();\n dispatch.stateChange(state);\n\n chart.update();\n });\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e, that.parentNode)\n });\n\n // Update chart from a state object passed to event handler\n dispatch.on('changeState', function(e) {\n\n if (typeof e.disabled !== 'undefined') {\n data.forEach(function(series,i) {\n series.disabled = e.disabled[i];\n });\n\n state.disabled = e.disabled;\n }\n\n if (typeof e.stacked !== 'undefined') {\n multibar.stacked(e.stacked);\n state.stacked = e.stacked;\n }\n\n chart.update();\n });\n\n //============================================================\n\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n multibar.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n multibar.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.dispatch = dispatch;\n chart.multibar = multibar;\n chart.legend = legend;\n chart.xAxis = xAxis;\n chart.yAxis = yAxis;\n\n d3.rebind(chart, multibar, 'x', 'y', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'clipEdge',\n 'id', 'stacked', 'delay', 'barColor','groupSpacing');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n legend.color(color);\n return chart;\n };\n\n chart.showControls = function(_) {\n if (!arguments.length) return showControls;\n showControls = _;\n return chart;\n };\n\n chart.showLegend = function(_) {\n if (!arguments.length) return showLegend;\n showLegend = _;\n return chart;\n };\n\n chart.showXAxis = function(_) {\n if (!arguments.length) return showXAxis;\n showXAxis = _;\n return chart;\n };\n\n chart.showYAxis = function(_) {\n if (!arguments.length) return showYAxis;\n showYAxis = _;\n return chart;\n };\n\n chart.rightAlignYAxis = function(_) {\n if(!arguments.length) return rightAlignYAxis;\n rightAlignYAxis = _;\n yAxis.orient( (_) ? 'right' : 'left');\n return chart;\n };\n\n chart.reduceXTicks= function(_) {\n if (!arguments.length) return reduceXTicks;\n reduceXTicks = _;\n return chart;\n };\n\n chart.rotateLabels = function(_) {\n if (!arguments.length) return rotateLabels;\n rotateLabels = _;\n return chart;\n }\n\n chart.staggerLabels = function(_) {\n if (!arguments.length) return staggerLabels;\n staggerLabels = _;\n return chart;\n };\n\n chart.tooltip = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.state = function(_) {\n if (!arguments.length) return state;\n state = _;\n return chart;\n };\n\n chart.defaultState = function(_) {\n if (!arguments.length) return defaultState;\n defaultState = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n chart.transitionDuration = function(_) {\n if (!arguments.length) return transitionDuration;\n transitionDuration = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.multiBarHorizontal = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 0, right: 0, bottom: 0, left: 0}\n , width = 960\n , height = 500\n , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one\n , x = d3.scale.ordinal()\n , y = d3.scale.linear()\n , getX = function(d) { return d.x }\n , getY = function(d) { return d.y }\n , forceY = [0] // 0 is forced by default.. this makes sense for the majority of bar graphs... user can always do chart.forceY([]) to remove\n , color = nv.utils.defaultColor()\n , barColor = null // adding the ability to set the color for each rather than the whole group\n , disabled // used in conjunction with barColor to communicate from multiBarHorizontalChart what series are disabled\n , stacked = false\n , showValues = false\n , valuePadding = 60\n , valueFormat = d3.format(',.2f')\n , delay = 1200\n , xDomain\n , yDomain\n , xRange\n , yRange\n , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout')\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var x0, y0 //used to store previous scales\n ;\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var availableWidth = width - margin.left - margin.right,\n availableHeight = height - margin.top - margin.bottom,\n container = d3.select(this);\n\n\n if (stacked)\n data = d3.layout.stack()\n .offset('zero')\n .values(function(d){ return d.values })\n .y(getY)\n (data);\n\n\n //add series index to each data point for reference\n data = data.map(function(series, i) {\n series.values = series.values.map(function(point) {\n point.series = i;\n return point;\n });\n return series;\n });\n\n\n\n //------------------------------------------------------------\n // HACK for negative value stacking\n if (stacked)\n data[0].values.map(function(d,i) {\n var posBase = 0, negBase = 0;\n data.map(function(d) {\n var f = d.values[i]\n f.size = Math.abs(f.y);\n if (f.y<0) {\n f.y1 = negBase - f.size;\n negBase = negBase - f.size;\n } else\n {\n f.y1 = posBase;\n posBase = posBase + f.size;\n }\n });\n });\n\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n // remap and flatten the data for use in calculating the scales' domains\n var seriesData = (xDomain && yDomain) ? [] : // if we know xDomain and yDomain, no need to calculate\n data.map(function(d) {\n return d.values.map(function(d,i) {\n return { x: getX(d,i), y: getY(d,i), y0: d.y0, y1: d.y1 }\n })\n });\n\n x .domain(xDomain || d3.merge(seriesData).map(function(d) { return d.x }))\n .rangeBands(xRange || [0, availableHeight], .1);\n\n //y .domain(yDomain || d3.extent(d3.merge(seriesData).map(function(d) { return d.y + (stacked ? d.y0 : 0) }).concat(forceY)))\n y .domain(yDomain || d3.extent(d3.merge(seriesData).map(function(d) { return stacked ? (d.y > 0 ? d.y1 + d.y : d.y1 ) : d.y }).concat(forceY)))\n\n if (showValues && !stacked)\n y.range(yRange || [(y.domain()[0] < 0 ? valuePadding : 0), availableWidth - (y.domain()[1] > 0 ? valuePadding : 0) ]);\n else\n y.range(yRange || [0, availableWidth]);\n\n x0 = x0 || x;\n y0 = y0 || d3.scale.linear().domain(y.domain()).range([y(0),y(0)]);\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = d3.select(this).selectAll('g.nv-wrap.nv-multibarHorizontal').data([data]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-multibarHorizontal');\n var defsEnter = wrapEnter.append('defs');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-groups');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n //------------------------------------------------------------\n\n\n\n var groups = wrap.select('.nv-groups').selectAll('.nv-group')\n .data(function(d) { return d }, function(d,i) { return i });\n groups.enter().append('g')\n .style('stroke-opacity', 1e-6)\n .style('fill-opacity', 1e-6);\n groups.exit().transition()\n .style('stroke-opacity', 1e-6)\n .style('fill-opacity', 1e-6)\n .remove();\n groups\n .attr('class', function(d,i) { return 'nv-group nv-series-' + i })\n .classed('hover', function(d) { return d.hover })\n .style('fill', function(d,i){ return color(d, i) })\n .style('stroke', function(d,i){ return color(d, i) });\n groups.transition()\n .style('stroke-opacity', 1)\n .style('fill-opacity', .75);\n\n\n var bars = groups.selectAll('g.nv-bar')\n .data(function(d) { return d.values });\n\n bars.exit().remove();\n\n\n var barsEnter = bars.enter().append('g')\n .attr('transform', function(d,i,j) {\n return 'translate(' + y0(stacked ? d.y0 : 0) + ',' + (stacked ? 0 : (j * x.rangeBand() / data.length ) + x(getX(d,i))) + ')'\n });\n\n barsEnter.append('rect')\n .attr('width', 0)\n .attr('height', x.rangeBand() / (stacked ? 1 : data.length) )\n\n bars\n .on('mouseover', function(d,i) { //TODO: figure out why j works above, but not here\n d3.select(this).classed('hover', true);\n dispatch.elementMouseover({\n value: getY(d,i),\n point: d,\n series: data[d.series],\n pos: [ y(getY(d,i) + (stacked ? d.y0 : 0)), x(getX(d,i)) + (x.rangeBand() * (stacked ? data.length / 2 : d.series + .5) / data.length) ],\n pointIndex: i,\n seriesIndex: d.series,\n e: d3.event\n });\n })\n .on('mouseout', function(d,i) {\n d3.select(this).classed('hover', false);\n dispatch.elementMouseout({\n value: getY(d,i),\n point: d,\n series: data[d.series],\n pointIndex: i,\n seriesIndex: d.series,\n e: d3.event\n });\n })\n .on('click', function(d,i) {\n dispatch.elementClick({\n value: getY(d,i),\n point: d,\n series: data[d.series],\n pos: [x(getX(d,i)) + (x.rangeBand() * (stacked ? data.length / 2 : d.series + .5) / data.length), y(getY(d,i) + (stacked ? d.y0 : 0))], // TODO: Figure out why the value appears to be shifted\n pointIndex: i,\n seriesIndex: d.series,\n e: d3.event\n });\n d3.event.stopPropagation();\n })\n .on('dblclick', function(d,i) {\n dispatch.elementDblClick({\n value: getY(d,i),\n point: d,\n series: data[d.series],\n pos: [x(getX(d,i)) + (x.rangeBand() * (stacked ? data.length / 2 : d.series + .5) / data.length), y(getY(d,i) + (stacked ? d.y0 : 0))], // TODO: Figure out why the value appears to be shifted\n pointIndex: i,\n seriesIndex: d.series,\n e: d3.event\n });\n d3.event.stopPropagation();\n });\n\n\n barsEnter.append('text');\n\n if (showValues && !stacked) {\n bars.select('text')\n .attr('text-anchor', function(d,i) { return getY(d,i) < 0 ? 'end' : 'start' })\n .attr('y', x.rangeBand() / (data.length * 2))\n .attr('dy', '.32em')\n .text(function(d,i) { return valueFormat(getY(d,i)) })\n bars.transition()\n .select('text')\n .attr('x', function(d,i) { return getY(d,i) < 0 ? -4 : y(getY(d,i)) - y(0) + 4 })\n } else {\n bars.selectAll('text').text('');\n }\n\n bars\n .attr('class', function(d,i) { return getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive'})\n\n if (barColor) {\n if (!disabled) disabled = data.map(function() { return true });\n bars\n .style('fill', function(d,i,j) { return d3.rgb(barColor(d,i)).darker( disabled.map(function(d,i) { return i }).filter(function(d,i){ return !disabled[i] })[j] ).toString(); })\n .style('stroke', function(d,i,j) { return d3.rgb(barColor(d,i)).darker( disabled.map(function(d,i) { return i }).filter(function(d,i){ return !disabled[i] })[j] ).toString(); });\n }\n\n if (stacked)\n bars.transition()\n .attr('transform', function(d,i) {\n return 'translate(' + y(d.y1) + ',' + x(getX(d,i)) + ')'\n })\n .select('rect')\n .attr('width', function(d,i) {\n return Math.abs(y(getY(d,i) + d.y0) - y(d.y0))\n })\n .attr('height', x.rangeBand() );\n else\n bars.transition()\n .attr('transform', function(d,i) {\n //TODO: stacked must be all positive or all negative, not both?\n return 'translate(' +\n (getY(d,i) < 0 ? y(getY(d,i)) : y(0))\n + ',' +\n (d.series * x.rangeBand() / data.length\n +\n x(getX(d,i)) )\n + ')'\n })\n .select('rect')\n .attr('height', x.rangeBand() / data.length )\n .attr('width', function(d,i) {\n return Math.max(Math.abs(y(getY(d,i)) - y(0)),1)\n });\n\n\n //store old scales for use in transitions on update\n x0 = x.copy();\n y0 = y.copy();\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n chart.dispatch = dispatch;\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.x = function(_) {\n if (!arguments.length) return getX;\n getX = _;\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return getY;\n getY = _;\n return chart;\n };\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.xScale = function(_) {\n if (!arguments.length) return x;\n x = _;\n return chart;\n };\n\n chart.yScale = function(_) {\n if (!arguments.length) return y;\n y = _;\n return chart;\n };\n\n chart.xDomain = function(_) {\n if (!arguments.length) return xDomain;\n xDomain = _;\n return chart;\n };\n\n chart.yDomain = function(_) {\n if (!arguments.length) return yDomain;\n yDomain = _;\n return chart;\n };\n\n chart.xRange = function(_) {\n if (!arguments.length) return xRange;\n xRange = _;\n return chart;\n };\n\n chart.yRange = function(_) {\n if (!arguments.length) return yRange;\n yRange = _;\n return chart;\n };\n\n chart.forceY = function(_) {\n if (!arguments.length) return forceY;\n forceY = _;\n return chart;\n };\n\n chart.stacked = function(_) {\n if (!arguments.length) return stacked;\n stacked = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n return chart;\n };\n\n chart.barColor = function(_) {\n if (!arguments.length) return barColor;\n barColor = nv.utils.getColor(_);\n return chart;\n };\n\n chart.disabled = function(_) {\n if (!arguments.length) return disabled;\n disabled = _;\n return chart;\n };\n\n chart.id = function(_) {\n if (!arguments.length) return id;\n id = _;\n return chart;\n };\n\n chart.delay = function(_) {\n if (!arguments.length) return delay;\n delay = _;\n return chart;\n };\n\n chart.showValues = function(_) {\n if (!arguments.length) return showValues;\n showValues = _;\n return chart;\n };\n\n chart.valueFormat= function(_) {\n if (!arguments.length) return valueFormat;\n valueFormat = _;\n return chart;\n };\n\n chart.valuePadding = function(_) {\n if (!arguments.length) return valuePadding;\n valuePadding = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.multiBarHorizontalChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var multibar = nv.models.multiBarHorizontal()\n , xAxis = nv.models.axis()\n , yAxis = nv.models.axis()\n , legend = nv.models.legend().height(30)\n , controls = nv.models.legend().height(30)\n ;\n\n var margin = {top: 30, right: 20, bottom: 50, left: 60}\n , width = null\n , height = null\n , color = nv.utils.defaultColor()\n , showControls = true\n , showLegend = true\n , stacked = false\n , tooltips = true\n , tooltip = function(key, x, y, e, graph) {\n\n return '<span style=\"color:#004a7c;\">' + key + ' - ' + x + '</span>' +\n '<p>' + y + '</p>'\n }\n , x //can be accessed via chart.xScale()\n , y //can be accessed via chart.yScale()\n , state = { stacked: stacked }\n , defaultState = null\n , noData = 'No Data Available.'\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')\n , controlWidth = function() { return showControls ? 180 : 0 }\n , transitionDuration = 250\n ;\n\n multibar\n .stacked(stacked)\n ;\n xAxis\n .orient('left')\n .tickPadding(5)\n .highlightZero(false)\n .showMaxMin(false)\n .tickFormat(function(d) { return d })\n ;\n yAxis\n .orient('bottom')\n .tickFormat(d3.format(',.1f'))\n ;\n\n controls.updateState(false);\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var showTooltip = function(e, offsetElement) {\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n top = e.pos[1] + ( offsetElement.offsetTop || 0),\n x = xAxis.tickFormat()(multibar.x()(e.point, e.pointIndex)),\n y = yAxis.tickFormat()(multibar.y()(e.point, e.pointIndex)),\n content = tooltip(e.series.key, x, y, e, chart);\n\n nv.tooltip.show([mouseX, mouseY], content, e.value < 0 ? 'e' : 'w', null, offsetElement);\n };\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this),\n that = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n\n chart.update = function() { container.transition().duration(transitionDuration).call(chart) };\n chart.container = this;\n\n //set state.disabled\n state.disabled = data.map(function(d) { return !!d.disabled });\n\n if (!defaultState) {\n var key;\n defaultState = {};\n for (key in state) {\n if (state[key] instanceof Array)\n defaultState[key] = state[key].slice(0);\n else\n defaultState[key] = state[key];\n }\n }\n\n //------------------------------------------------------------\n // Display No Data message if there's nothing to show.\n\n if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x = multibar.xScale();\n y = multibar.yScale();\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-multiBarHorizontalChart').data([data]);\n var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-multiBarHorizontalChart').append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-x nv-axis');\n gEnter.append('g').attr('class', 'nv-y nv-axis');\n gEnter.append('g').attr('class', 'nv-barsWrap');\n gEnter.append('g').attr('class', 'nv-legendWrap');\n gEnter.append('g').attr('class', 'nv-controlsWrap');\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Legend\n\n if (showLegend) {\n legend.width(availableWidth - controlWidth());\n\n if (multibar.barColor())\n data.forEach(function(series,i) {\n series.color = d3.rgb('#ccc').darker(i * 1.5).toString();\n })\n\n g.select('.nv-legendWrap')\n .datum(data)\n .call(legend);\n\n if ( margin.top != legend.height()) {\n margin.top = legend.height();\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n }\n\n g.select('.nv-legendWrap')\n .attr('transform', 'translate(' + controlWidth() + ',' + (-margin.top) +')');\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Controls\n\n if (showControls) {\n var controlsData = [\n { key: 'Grouped', disabled: multibar.stacked() },\n { key: 'Stacked', disabled: !multibar.stacked() }\n ];\n\n controls.width(controlWidth()).color(['#444', '#444', '#444']);\n g.select('.nv-controlsWrap')\n .datum(controlsData)\n .attr('transform', 'translate(0,' + (-margin.top) +')')\n .call(controls);\n }\n\n //------------------------------------------------------------\n\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n\n //------------------------------------------------------------\n // Main Chart Component(s)\n\n multibar\n .disabled(data.map(function(series) { return series.disabled }))\n .width(availableWidth)\n .height(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled }))\n\n\n var barsWrap = g.select('.nv-barsWrap')\n .datum(data.filter(function(d) { return !d.disabled }))\n\n barsWrap.transition().call(multibar);\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Axes\n\n xAxis\n .scale(x)\n .ticks( availableHeight / 24 )\n .tickSize(-availableWidth, 0);\n\n g.select('.nv-x.nv-axis').transition()\n .call(xAxis);\n\n var xTicks = g.select('.nv-x.nv-axis').selectAll('g');\n\n xTicks\n .selectAll('line, text')\n .style('opacity', 1)\n\n\n yAxis\n .scale(y)\n .ticks( availableWidth / 100 )\n .tickSize( -availableHeight, 0);\n\n g.select('.nv-y.nv-axis')\n .attr('transform', 'translate(0,' + availableHeight + ')');\n g.select('.nv-y.nv-axis').transition()\n .call(yAxis);\n\n //------------------------------------------------------------\n\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n legend.dispatch.on('stateChange', function(newState) {\n state = newState;\n dispatch.stateChange(state);\n chart.update();\n });\n\n controls.dispatch.on('legendClick', function(d,i) {\n if (!d.disabled) return;\n controlsData = controlsData.map(function(s) {\n s.disabled = true;\n return s;\n });\n d.disabled = false;\n\n switch (d.key) {\n case 'Grouped':\n multibar.stacked(false);\n break;\n case 'Stacked':\n multibar.stacked(true);\n break;\n }\n\n state.stacked = multibar.stacked();\n dispatch.stateChange(state);\n\n chart.update();\n });\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e, that.parentNode);\n });\n\n // Update chart from a state object passed to event handler\n dispatch.on('changeState', function(e) {\n\n if (typeof e.disabled !== 'undefined') {\n data.forEach(function(series,i) {\n series.disabled = e.disabled[i];\n });\n\n state.disabled = e.disabled;\n }\n\n if (typeof e.stacked !== 'undefined') {\n multibar.stacked(e.stacked);\n state.stacked = e.stacked;\n }\n\n selection.call(chart);\n });\n //============================================================\n\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n multibar.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n multibar.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.dispatch = dispatch;\n chart.multibar = multibar;\n chart.legend = legend;\n chart.xAxis = xAxis;\n chart.yAxis = yAxis;\n\n d3.rebind(chart, multibar, 'x', 'y', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'clipEdge', 'id', 'delay', 'showValues', 'valueFormat', 'stacked', 'barColor');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n legend.color(color);\n return chart;\n };\n\n chart.showControls = function(_) {\n if (!arguments.length) return showControls;\n showControls = _;\n return chart;\n };\n\n chart.showLegend = function(_) {\n if (!arguments.length) return showLegend;\n showLegend = _;\n return chart;\n };\n\n chart.tooltip = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.state = function(_) {\n if (!arguments.length) return state;\n state = _;\n return chart;\n };\n\n chart.defaultState = function(_) {\n if (!arguments.length) return defaultState;\n defaultState = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n chart.transitionDuration = function(_) {\n if (!arguments.length) return transitionDuration;\n transitionDuration = _;\n return chart;\n };\n //============================================================\n\n\n return chart;\n}\nnv.models.multiChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 30, right: 20, bottom: 50, left: 60},\n color = d3.scale.category20().range(),\n width = null,\n height = null,\n showLegend = true,\n tooltips = true,\n tooltip = function(key, x, y, e, graph) {\n return '<h3>' + key + '</h3>' +\n '<p>' + y + ' at ' + x + '</p>'\n },\n x,\n y,\n yDomain1,\n yDomain2\n ; //can be accessed via chart.lines.[x/y]Scale()\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var x = d3.scale.linear(),\n yScale1 = d3.scale.linear(),\n yScale2 = d3.scale.linear(),\n\n lines1 = nv.models.line().yScale(yScale1),\n lines2 = nv.models.line().yScale(yScale2),\n\n bars1 = nv.models.multiBar().stacked(false).yScale(yScale1),\n bars2 = nv.models.multiBar().stacked(false).yScale(yScale2),\n\n stack1 = nv.models.stackedArea().yScale(yScale1),\n stack2 = nv.models.stackedArea().yScale(yScale2),\n\n xAxis = nv.models.axis().scale(x).orient('bottom').tickPadding(5),\n yAxis1 = nv.models.axis().scale(yScale1).orient('left'),\n yAxis2 = nv.models.axis().scale(yScale2).orient('right'),\n\n legend = nv.models.legend().height(30),\n dispatch = d3.dispatch('tooltipShow', 'tooltipHide');\n\n var showTooltip = function(e, offsetElement) {\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n top = e.pos[1] + ( offsetElement.offsetTop || 0),\n x = xAxis.tickFormat()(lines1.x()(e.point, e.pointIndex)),\n y = ((e.series.yAxis == 2) ? yAxis2 : yAxis1).tickFormat()(lines1.y()(e.point, e.pointIndex)),\n content = tooltip(e.series.key, x, y, e, chart);\n\n nv.tooltip.show([left, top], content, undefined, undefined, offsetElement.offsetParent);\n };\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this),\n that = this;\n\n chart.update = function() { container.transition().call(chart); };\n chart.container = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n\n var dataLines1 = data.filter(function(d) {return !d.disabled && d.type == 'line' && d.yAxis == 1})\n var dataLines2 = data.filter(function(d) {return !d.disabled && d.type == 'line' && d.yAxis == 2})\n var dataBars1 = data.filter(function(d) {return !d.disabled && d.type == 'bar' && d.yAxis == 1})\n var dataBars2 = data.filter(function(d) {return !d.disabled && d.type == 'bar' && d.yAxis == 2})\n var dataStack1 = data.filter(function(d) {return !d.disabled && d.type == 'area' && d.yAxis == 1})\n var dataStack2 = data.filter(function(d) {return !d.disabled && d.type == 'area' && d.yAxis == 2})\n\n var series1 = data.filter(function(d) {return !d.disabled && d.yAxis == 1})\n .map(function(d) {\n return d.values.map(function(d,i) {\n return { x: d.x, y: d.y }\n })\n })\n\n var series2 = data.filter(function(d) {return !d.disabled && d.yAxis == 2})\n .map(function(d) {\n return d.values.map(function(d,i) {\n return { x: d.x, y: d.y }\n })\n })\n\n x .domain(d3.extent(d3.merge(series1.concat(series2)), function(d) { return d.x } ))\n .range([0, availableWidth]);\n\n var wrap = container.selectAll('g.wrap.multiChart').data([data]);\n var gEnter = wrap.enter().append('g').attr('class', 'wrap nvd3 multiChart').append('g');\n\n gEnter.append('g').attr('class', 'x axis');\n gEnter.append('g').attr('class', 'y1 axis');\n gEnter.append('g').attr('class', 'y2 axis');\n gEnter.append('g').attr('class', 'lines1Wrap');\n gEnter.append('g').attr('class', 'lines2Wrap');\n gEnter.append('g').attr('class', 'bars1Wrap');\n gEnter.append('g').attr('class', 'bars2Wrap');\n gEnter.append('g').attr('class', 'stack1Wrap');\n gEnter.append('g').attr('class', 'stack2Wrap');\n gEnter.append('g').attr('class', 'legendWrap');\n\n var g = wrap.select('g');\n\n if (showLegend) {\n legend.width( availableWidth / 2 );\n\n g.select('.legendWrap')\n .datum(data.map(function(series) {\n series.originalKey = series.originalKey === undefined ? series.key : series.originalKey;\n series.key = series.originalKey + (series.yAxis == 1 ? '' : ' (right axis)');\n return series;\n }))\n .call(legend);\n\n if ( margin.top != legend.height()) {\n margin.top = legend.height();\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n }\n\n g.select('.legendWrap')\n .attr('transform', 'translate(' + ( availableWidth / 2 ) + ',' + (-margin.top) +')');\n }\n\n\n lines1\n .width(availableWidth)\n .height(availableHeight)\n .interpolate(\"monotone\")\n .color(data.map(function(d,i) {\n return d.color || color[i % color.length];\n }).filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 1 && data[i].type == 'line'}));\n\n lines2\n .width(availableWidth)\n .height(availableHeight)\n .interpolate(\"monotone\")\n .color(data.map(function(d,i) {\n return d.color || color[i % color.length];\n }).filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 2 && data[i].type == 'line'}));\n\n bars1\n .width(availableWidth)\n .height(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color[i % color.length];\n }).filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 1 && data[i].type == 'bar'}));\n\n bars2\n .width(availableWidth)\n .height(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color[i % color.length];\n }).filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 2 && data[i].type == 'bar'}));\n\n stack1\n .width(availableWidth)\n .height(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color[i % color.length];\n }).filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 1 && data[i].type == 'area'}));\n\n stack2\n .width(availableWidth)\n .height(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color[i % color.length];\n }).filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 2 && data[i].type == 'area'}));\n\n g.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n\n var lines1Wrap = g.select('.lines1Wrap')\n .datum(dataLines1)\n var bars1Wrap = g.select('.bars1Wrap')\n .datum(dataBars1)\n var stack1Wrap = g.select('.stack1Wrap')\n .datum(dataStack1)\n\n var lines2Wrap = g.select('.lines2Wrap')\n .datum(dataLines2)\n var bars2Wrap = g.select('.bars2Wrap')\n .datum(dataBars2)\n var stack2Wrap = g.select('.stack2Wrap')\n .datum(dataStack2)\n\n var extraValue1 = dataStack1.length ? dataStack1.map(function(a){return a.values}).reduce(function(a,b){\n return a.map(function(aVal,i){return {x: aVal.x, y: aVal.y + b[i].y}})\n }).concat([{x:0, y:0}]) : []\n var extraValue2 = dataStack2.length ? dataStack2.map(function(a){return a.values}).reduce(function(a,b){\n return a.map(function(aVal,i){return {x: aVal.x, y: aVal.y + b[i].y}})\n }).concat([{x:0, y:0}]) : []\n\n yScale1 .domain(yDomain1 || d3.extent(d3.merge(series1).concat(extraValue1), function(d) { return d.y } ))\n .range([0, availableHeight])\n\n yScale2 .domain(yDomain2 || d3.extent(d3.merge(series2).concat(extraValue2), function(d) { return d.y } ))\n .range([0, availableHeight])\n\n lines1.yDomain(yScale1.domain())\n bars1.yDomain(yScale1.domain())\n stack1.yDomain(yScale1.domain())\n\n lines2.yDomain(yScale2.domain())\n bars2.yDomain(yScale2.domain())\n stack2.yDomain(yScale2.domain())\n\n if(dataStack1.length){d3.transition(stack1Wrap).call(stack1);}\n if(dataStack2.length){d3.transition(stack2Wrap).call(stack2);}\n\n if(dataBars1.length){d3.transition(bars1Wrap).call(bars1);}\n if(dataBars2.length){d3.transition(bars2Wrap).call(bars2);}\n\n if(dataLines1.length){d3.transition(lines1Wrap).call(lines1);}\n if(dataLines2.length){d3.transition(lines2Wrap).call(lines2);}\n\n\n\n xAxis\n .ticks( availableWidth / 100 )\n .tickSize(-availableHeight, 0);\n\n g.select('.x.axis')\n .attr('transform', 'translate(0,' + availableHeight + ')');\n d3.transition(g.select('.x.axis'))\n .call(xAxis);\n\n yAxis1\n .ticks( availableHeight / 36 )\n .tickSize( -availableWidth, 0);\n\n\n d3.transition(g.select('.y1.axis'))\n .call(yAxis1);\n\n yAxis2\n .ticks( availableHeight / 36 )\n .tickSize( -availableWidth, 0);\n\n d3.transition(g.select('.y2.axis'))\n .call(yAxis2);\n\n g.select('.y2.axis')\n .style('opacity', series2.length ? 1 : 0)\n .attr('transform', 'translate(' + x.range()[1] + ',0)');\n\n legend.dispatch.on('stateChange', function(newState) {\n chart.update();\n });\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e, that.parentNode);\n });\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n lines1.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n lines1.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n lines2.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n lines2.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n bars1.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n bars1.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n bars2.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n bars2.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n stack1.dispatch.on('tooltipShow', function(e) {\n //disable tooltips when value ~= 0\n //// TODO: consider removing points from voronoi that have 0 value instead of this hack\n if (!Math.round(stack1.y()(e.point) * 100)) { // 100 will not be good for very small numbers... will have to think about making this valu dynamic, based on data range\n setTimeout(function() { d3.selectAll('.point.hover').classed('hover', false) }, 0);\n return false;\n }\n\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top],\n dispatch.tooltipShow(e);\n });\n\n stack1.dispatch.on('tooltipHide', function(e) {\n dispatch.tooltipHide(e);\n });\n\n stack2.dispatch.on('tooltipShow', function(e) {\n //disable tooltips when value ~= 0\n //// TODO: consider removing points from voronoi that have 0 value instead of this hack\n if (!Math.round(stack2.y()(e.point) * 100)) { // 100 will not be good for very small numbers... will have to think about making this valu dynamic, based on data range\n setTimeout(function() { d3.selectAll('.point.hover').classed('hover', false) }, 0);\n return false;\n }\n\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top],\n dispatch.tooltipShow(e);\n });\n\n stack2.dispatch.on('tooltipHide', function(e) {\n dispatch.tooltipHide(e);\n });\n\n lines1.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n lines1.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n lines2.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n lines2.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n\n\n //============================================================\n // Global getters and setters\n //------------------------------------------------------------\n\n chart.dispatch = dispatch;\n chart.lines1 = lines1;\n chart.lines2 = lines2;\n chart.bars1 = bars1;\n chart.bars2 = bars2;\n chart.stack1 = stack1;\n chart.stack2 = stack2;\n chart.xAxis = xAxis;\n chart.yAxis1 = yAxis1;\n chart.yAxis2 = yAxis2;\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.x = function(_) {\n if (!arguments.length) return getX;\n getX = _;\n lines1.x(_);\n bars1.x(_);\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return getY;\n getY = _;\n lines1.y(_);\n bars1.y(_);\n return chart;\n };\n\n chart.yDomain1 = function(_) {\n if (!arguments.length) return yDomain1;\n yDomain1 = _;\n return chart;\n };\n\n chart.yDomain2 = function(_) {\n if (!arguments.length) return yDomain2;\n yDomain2 = _;\n return chart;\n };\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin = _;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = _;\n legend.color(_);\n return chart;\n };\n\n chart.showLegend = function(_) {\n if (!arguments.length) return showLegend;\n showLegend = _;\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n return chart;\n}\n\n\nnv.models.ohlcBar = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 0, right: 0, bottom: 0, left: 0}\n , width = 960\n , height = 500\n , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one\n , x = d3.scale.linear()\n , y = d3.scale.linear()\n , getX = function(d) { return d.x }\n , getY = function(d) { return d.y }\n , getOpen = function(d) { return d.open }\n , getClose = function(d) { return d.close }\n , getHigh = function(d) { return d.high }\n , getLow = function(d) { return d.low }\n , forceX = []\n , forceY = []\n , padData = false // If true, adds half a data points width to front and back, for lining up a line chart with a bar chart\n , clipEdge = true\n , color = nv.utils.defaultColor()\n , xDomain\n , yDomain\n , xRange\n , yRange\n , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout')\n ;\n\n //============================================================\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n //TODO: store old scales for transitions\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var availableWidth = width - margin.left - margin.right,\n availableHeight = height - margin.top - margin.bottom,\n container = d3.select(this);\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x .domain(xDomain || d3.extent(data[0].values.map(getX).concat(forceX) ));\n\n if (padData)\n x.range(xRange || [availableWidth * .5 / data[0].values.length, availableWidth * (data[0].values.length - .5) / data[0].values.length ]);\n else\n x.range(xRange || [0, availableWidth]);\n\n y .domain(yDomain || [\n d3.min(data[0].values.map(getLow).concat(forceY)),\n d3.max(data[0].values.map(getHigh).concat(forceY))\n ])\n .range(yRange || [availableHeight, 0]);\n\n // If scale's domain don't have a range, slightly adjust to make one... so a chart can show a single data point\n if (x.domain()[0] === x.domain()[1] || y.domain()[0] === y.domain()[1]) singlePoint = true;\n if (x.domain()[0] === x.domain()[1])\n x.domain()[0] ?\n x.domain([x.domain()[0] - x.domain()[0] * 0.01, x.domain()[1] + x.domain()[1] * 0.01])\n : x.domain([-1,1]);\n\n if (y.domain()[0] === y.domain()[1])\n y.domain()[0] ?\n y.domain([y.domain()[0] + y.domain()[0] * 0.01, y.domain()[1] - y.domain()[1] * 0.01])\n : y.domain([-1,1]);\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = d3.select(this).selectAll('g.nv-wrap.nv-ohlcBar').data([data[0].values]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-ohlcBar');\n var defsEnter = wrapEnter.append('defs');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-ticks');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n //------------------------------------------------------------\n\n\n container\n .on('click', function(d,i) {\n dispatch.chartClick({\n data: d,\n index: i,\n pos: d3.event,\n id: id\n });\n });\n\n\n defsEnter.append('clipPath')\n .attr('id', 'nv-chart-clip-path-' + id)\n .append('rect');\n\n wrap.select('#nv-chart-clip-path-' + id + ' rect')\n .attr('width', availableWidth)\n .attr('height', availableHeight);\n\n g .attr('clip-path', clipEdge ? 'url(#nv-chart-clip-path-' + id + ')' : '');\n\n\n\n var ticks = wrap.select('.nv-ticks').selectAll('.nv-tick')\n .data(function(d) { return d });\n\n ticks.exit().remove();\n\n\n var ticksEnter = ticks.enter().append('path')\n .attr('class', function(d,i,j) { return (getOpen(d,i) > getClose(d,i) ? 'nv-tick negative' : 'nv-tick positive') + ' nv-tick-' + j + '-' + i })\n .attr('d', function(d,i) {\n var w = (availableWidth / data[0].values.length) * .9;\n return 'm0,0l0,'\n + (y(getOpen(d,i))\n - y(getHigh(d,i)))\n + 'l'\n + (-w/2)\n + ',0l'\n + (w/2)\n + ',0l0,'\n + (y(getLow(d,i)) - y(getOpen(d,i)))\n + 'l0,'\n + (y(getClose(d,i))\n - y(getLow(d,i)))\n + 'l'\n + (w/2)\n + ',0l'\n + (-w/2)\n + ',0z';\n })\n .attr('transform', function(d,i) { return 'translate(' + x(getX(d,i)) + ',' + y(getHigh(d,i)) + ')'; })\n //.attr('fill', function(d,i) { return color[0]; })\n //.attr('stroke', function(d,i) { return color[0]; })\n //.attr('x', 0 )\n //.attr('y', function(d,i) { return y(Math.max(0, getY(d,i))) })\n //.attr('height', function(d,i) { return Math.abs(y(getY(d,i)) - y(0)) })\n .on('mouseover', function(d,i) {\n d3.select(this).classed('hover', true);\n dispatch.elementMouseover({\n point: d,\n series: data[0],\n pos: [x(getX(d,i)), y(getY(d,i))], // TODO: Figure out why the value appears to be shifted\n pointIndex: i,\n seriesIndex: 0,\n e: d3.event\n });\n\n })\n .on('mouseout', function(d,i) {\n d3.select(this).classed('hover', false);\n dispatch.elementMouseout({\n point: d,\n series: data[0],\n pointIndex: i,\n seriesIndex: 0,\n e: d3.event\n });\n })\n .on('click', function(d,i) {\n dispatch.elementClick({\n //label: d[label],\n value: getY(d,i),\n data: d,\n index: i,\n pos: [x(getX(d,i)), y(getY(d,i))],\n e: d3.event,\n id: id\n });\n d3.event.stopPropagation();\n })\n .on('dblclick', function(d,i) {\n dispatch.elementDblClick({\n //label: d[label],\n value: getY(d,i),\n data: d,\n index: i,\n pos: [x(getX(d,i)), y(getY(d,i))],\n e: d3.event,\n id: id\n });\n d3.event.stopPropagation();\n });\n\n ticks\n .attr('class', function(d,i,j) { return (getOpen(d,i) > getClose(d,i) ? 'nv-tick negative' : 'nv-tick positive') + ' nv-tick-' + j + '-' + i })\n d3.transition(ticks)\n .attr('transform', function(d,i) { return 'translate(' + x(getX(d,i)) + ',' + y(getHigh(d,i)) + ')'; })\n .attr('d', function(d,i) {\n var w = (availableWidth / data[0].values.length) * .9;\n return 'm0,0l0,'\n + (y(getOpen(d,i))\n - y(getHigh(d,i)))\n + 'l'\n + (-w/2)\n + ',0l'\n + (w/2)\n + ',0l0,'\n + (y(getLow(d,i))\n - y(getOpen(d,i)))\n + 'l0,'\n + (y(getClose(d,i))\n - y(getLow(d,i)))\n + 'l'\n + (w/2)\n + ',0l'\n + (-w/2)\n + ',0z';\n })\n //.attr('width', (availableWidth / data[0].values.length) * .9 )\n\n\n //d3.transition(ticks)\n //.attr('y', function(d,i) { return y(Math.max(0, getY(d,i))) })\n //.attr('height', function(d,i) { return Math.abs(y(getY(d,i)) - y(0)) });\n //.order(); // not sure if this makes any sense for this model\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n chart.dispatch = dispatch;\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.x = function(_) {\n if (!arguments.length) return getX;\n getX = _;\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return getY;\n getY = _;\n return chart;\n };\n\n chart.open = function(_) {\n if (!arguments.length) return getOpen;\n getOpen = _;\n return chart;\n };\n\n chart.close = function(_) {\n if (!arguments.length) return getClose;\n getClose = _;\n return chart;\n };\n\n chart.high = function(_) {\n if (!arguments.length) return getHigh;\n getHigh = _;\n return chart;\n };\n\n chart.low = function(_) {\n if (!arguments.length) return getLow;\n getLow = _;\n return chart;\n };\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.xScale = function(_) {\n if (!arguments.length) return x;\n x = _;\n return chart;\n };\n\n chart.yScale = function(_) {\n if (!arguments.length) return y;\n y = _;\n return chart;\n };\n\n chart.xDomain = function(_) {\n if (!arguments.length) return xDomain;\n xDomain = _;\n return chart;\n };\n\n chart.yDomain = function(_) {\n if (!arguments.length) return yDomain;\n yDomain = _;\n return chart;\n };\n\n chart.xRange = function(_) {\n if (!arguments.length) return xRange;\n xRange = _;\n return chart;\n };\n\n chart.yRange = function(_) {\n if (!arguments.length) return yRange;\n yRange = _;\n return chart;\n };\n\n chart.forceX = function(_) {\n if (!arguments.length) return forceX;\n forceX = _;\n return chart;\n };\n\n chart.forceY = function(_) {\n if (!arguments.length) return forceY;\n forceY = _;\n return chart;\n };\n\n chart.padData = function(_) {\n if (!arguments.length) return padData;\n padData = _;\n return chart;\n };\n\n chart.clipEdge = function(_) {\n if (!arguments.length) return clipEdge;\n clipEdge = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n return chart;\n };\n\n chart.id = function(_) {\n if (!arguments.length) return id;\n id = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\nnv.models.pie = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 0, right: 0, bottom: 0, left: 0}\n , width = 500\n , height = 500\n , getX = function(d) { return d.x }\n , getY = function(d) { return d.y }\n , getDescription = function(d) { return d.description }\n , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one\n , color = nv.utils.defaultColor()\n , valueFormat = d3.format(',.2f')\n , showLabels = true\n , pieLabelsOutside = true\n , donutLabelsOutside = false\n , labelType = \"key\"\n , labelThreshold = .02 //if slice percentage is under this, don't show label\n , donut = false\n , labelSunbeamLayout = false\n , startAngle = false\n , endAngle = false\n , donutRatio = 0.5\n , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout')\n ;\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var availableWidth = width - margin.left - margin.right,\n availableHeight = height - margin.top - margin.bottom,\n radius = Math.min(availableWidth, availableHeight) / 2,\n arcRadius = radius-(radius / 5),\n container = d3.select(this);\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n //var wrap = container.selectAll('.nv-wrap.nv-pie').data([data]);\n var wrap = container.selectAll('.nv-wrap.nv-pie').data(data);\n var wrapEnter = wrap.enter().append('g').attr('class','nvd3 nv-wrap nv-pie nv-chart-' + id);\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-pie');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n g.select('.nv-pie').attr('transform', 'translate(' + availableWidth / 2 + ',' + availableHeight / 2 + ')');\n\n //------------------------------------------------------------\n\n\n container\n .on('click', function(d,i) {\n dispatch.chartClick({\n data: d,\n index: i,\n pos: d3.event,\n id: id\n });\n });\n\n\n var arc = d3.svg.arc()\n .outerRadius(arcRadius);\n\n if (startAngle) arc.startAngle(startAngle)\n if (endAngle) arc.endAngle(endAngle);\n if (donut) arc.innerRadius(radius * donutRatio);\n\n // Setup the Pie chart and choose the data element\n var pie = d3.layout.pie()\n .sort(null)\n .value(function(d) { return d.disabled ? 0 : getY(d) });\n\n var slices = wrap.select('.nv-pie').selectAll('.nv-slice')\n .data(pie);\n\n slices.exit().remove();\n\n var ae = slices.enter().append('g')\n .attr('class', 'nv-slice')\n .on('mouseover', function(d,i){\n d3.select(this).classed('hover', true);\n dispatch.elementMouseover({\n label: getX(d.data),\n value: getY(d.data),\n point: d.data,\n pointIndex: i,\n pos: [d3.event.pageX, d3.event.pageY],\n id: id\n });\n })\n .on('mouseout', function(d,i){\n d3.select(this).classed('hover', false);\n dispatch.elementMouseout({\n label: getX(d.data),\n value: getY(d.data),\n point: d.data,\n index: i,\n id: id\n });\n })\n .on('click', function(d,i) {\n dispatch.elementClick({\n label: getX(d.data),\n value: getY(d.data),\n point: d.data,\n index: i,\n pos: d3.event,\n id: id\n });\n d3.event.stopPropagation();\n })\n .on('dblclick', function(d,i) {\n dispatch.elementDblClick({\n label: getX(d.data),\n value: getY(d.data),\n point: d.data,\n index: i,\n pos: d3.event,\n id: id\n });\n d3.event.stopPropagation();\n });\n\n slices\n .attr('fill', function(d,i) { return color(d, i); })\n .attr('stroke', function(d,i) { return color(d, i); });\n\n var paths = ae.append('path')\n .each(function(d) { this._current = d; });\n //.attr('d', arc);\n\n d3.transition(slices.select('path'))\n .attr('d', arc)\n .attrTween('d', arcTween);\n\n if (showLabels) {\n // This does the normal label\n var labelsArc = d3.svg.arc().innerRadius(0);\n\n if (pieLabelsOutside){ labelsArc = arc; }\n\n if (donutLabelsOutside) { labelsArc = d3.svg.arc().outerRadius(arc.outerRadius()); }\n\n ae.append(\"g\").classed(\"nv-label\", true)\n .each(function(d, i) {\n var group = d3.select(this);\n\n group\n .attr('transform', function(d) {\n if (labelSunbeamLayout) {\n d.outerRadius = arcRadius + 10; // Set Outer Coordinate\n d.innerRadius = arcRadius + 15; // Set Inner Coordinate\n var rotateAngle = (d.startAngle + d.endAngle) / 2 * (180 / Math.PI);\n if ((d.startAngle+d.endAngle)/2 < Math.PI) {\n \t rotateAngle -= 90;\n } else {\n \t rotateAngle += 90;\n }\n return 'translate(' + labelsArc.centroid(d) + ') rotate(' + rotateAngle + ')';\n } else {\n d.outerRadius = radius + 10; // Set Outer Coordinate\n d.innerRadius = radius + 15; // Set Inner Coordinate\n return 'translate(' + labelsArc.centroid(d) + ')'\n }\n });\n\n group.append('rect')\n .style('stroke', '#fff')\n .style('fill', '#fff')\n .attr(\"rx\", 3)\n .attr(\"ry\", 3);\n\n group.append('text')\n .style('text-anchor', labelSunbeamLayout ? ((d.startAngle + d.endAngle) / 2 < Math.PI ? 'start' : 'end') : 'middle') //center the text on it's origin or begin/end if orthogonal aligned\n .style('fill', '#000')\n\n\n });\n\n slices.select(\".nv-label\").transition()\n .attr('transform', function(d) {\n \tif (labelSunbeamLayout) {\n d.outerRadius = arcRadius + 10; // Set Outer Coordinate\n d.innerRadius = arcRadius + 15; // Set Inner Coordinate\n var rotateAngle = (d.startAngle + d.endAngle) / 2 * (180 / Math.PI);\n if ((d.startAngle+d.endAngle)/2 < Math.PI) {\n rotateAngle -= 90;\n } else {\n rotateAngle += 90;\n }\n return 'translate(' + labelsArc.centroid(d) + ') rotate(' + rotateAngle + ')';\n } else {\n d.outerRadius = radius + 10; // Set Outer Coordinate\n d.innerRadius = radius + 15; // Set Inner Coordinate\n return 'translate(' + labelsArc.centroid(d) + ')'\n }\n });\n\n slices.each(function(d, i) {\n var slice = d3.select(this);\n\n slice\n .select(\".nv-label text\")\n .style('text-anchor', labelSunbeamLayout ? ((d.startAngle + d.endAngle) / 2 < Math.PI ? 'start' : 'end') : 'middle') //center the text on it's origin or begin/end if orthogonal aligned\n .text(function(d, i) {\n var percent = (d.endAngle - d.startAngle) / (2 * Math.PI);\n var labelTypes = {\n \"key\" : getX(d.data),\n \"value\": getY(d.data),\n \"percent\": d3.format('%')(percent)\n };\n return (d.value && percent > labelThreshold) ? labelTypes[labelType] : '';\n });\n\n var textBox = slice.select('text').node().getBBox();\n slice.select(\".nv-label rect\")\n .attr(\"width\", textBox.width + 10)\n .attr(\"height\", textBox.height + 10)\n .attr(\"transform\", function() {\n return \"translate(\" + [textBox.x - 5, textBox.y - 5] + \")\";\n });\n });\n }\n\n\n // Computes the angle of an arc, converting from radians to degrees.\n function angle(d) {\n var a = (d.startAngle + d.endAngle) * 90 / Math.PI - 90;\n return a > 90 ? a - 180 : a;\n }\n\n function arcTween(a) {\n a.endAngle = isNaN(a.endAngle) ? 0 : a.endAngle;\n a.startAngle = isNaN(a.startAngle) ? 0 : a.startAngle;\n if (!donut) a.innerRadius = 0;\n var i = d3.interpolate(this._current, a);\n this._current = i(0);\n return function(t) {\n return arc(i(t));\n };\n }\n\n function tweenPie(b) {\n b.innerRadius = 0;\n var i = d3.interpolate({startAngle: 0, endAngle: 0}, b);\n return function(t) {\n return arc(i(t));\n };\n }\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n chart.dispatch = dispatch;\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.values = function(_) {\n nv.log(\"pie.values() is no longer supported.\");\n return chart;\n };\n\n chart.x = function(_) {\n if (!arguments.length) return getX;\n getX = _;\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return getY;\n getY = d3.functor(_);\n return chart;\n };\n\n chart.description = function(_) {\n if (!arguments.length) return getDescription;\n getDescription = _;\n return chart;\n };\n\n chart.showLabels = function(_) {\n if (!arguments.length) return showLabels;\n showLabels = _;\n return chart;\n };\n\n chart.labelSunbeamLayout = function(_) {\n if (!arguments.length) return labelSunbeamLayout;\n labelSunbeamLayout = _;\n return chart;\n };\n\n chart.donutLabelsOutside = function(_) {\n if (!arguments.length) return donutLabelsOutside;\n donutLabelsOutside = _;\n return chart;\n };\n\n chart.pieLabelsOutside = function(_) {\n if (!arguments.length) return pieLabelsOutside;\n pieLabelsOutside = _;\n return chart;\n };\n\n chart.labelType = function(_) {\n if (!arguments.length) return labelType;\n labelType = _;\n labelType = labelType || \"key\";\n return chart;\n };\n\n chart.donut = function(_) {\n if (!arguments.length) return donut;\n donut = _;\n return chart;\n };\n\n chart.donutRatio = function(_) {\n if (!arguments.length) return donutRatio;\n donutRatio = _;\n return chart;\n };\n\n chart.startAngle = function(_) {\n if (!arguments.length) return startAngle;\n startAngle = _;\n return chart;\n };\n\n chart.endAngle = function(_) {\n if (!arguments.length) return endAngle;\n endAngle = _;\n return chart;\n };\n\n chart.id = function(_) {\n if (!arguments.length) return id;\n id = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n return chart;\n };\n\n chart.valueFormat = function(_) {\n if (!arguments.length) return valueFormat;\n valueFormat = _;\n return chart;\n };\n\n chart.labelThreshold = function(_) {\n if (!arguments.length) return labelThreshold;\n labelThreshold = _;\n return chart;\n };\n //============================================================\n\n\n return chart;\n}\nnv.models.pieChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var pie = nv.models.pie()\n , legend = nv.models.legend()\n ;\n\n var margin = {top: 30, right: 20, bottom: 20, left: 20}\n , width = null\n , height = null\n , showLegend = true\n , color = nv.utils.defaultColor()\n , tooltips = true\n , tooltip = function(key, y, e, graph) {\n return '<span style=\"color:#004a7c;\">' + key + '</span>' +\n '<p>' + parseInt(y) + '</p>'\n }\n , state = {}\n , defaultState = null\n , noData = \"No Data Available.\"\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var showTooltip = function(e, offsetElement) {\n var tooltipLabel = pie.description()(e.point) || pie.x()(e.point)\n var left = e.pos[0] + ( (offsetElement && offsetElement.offsetLeft) || 0 ),\n top = e.pos[1] + ( (offsetElement && offsetElement.offsetTop) || 0),\n y = pie.valueFormat()(pie.y()(e.point)),\n content = tooltip(tooltipLabel, y, e, chart);\n\n nv.tooltip.show([left, top], content, e.value < 0 ? 'n' : 's', null, offsetElement);\n };\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this),\n that = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n\n chart.update = function() { container.transition().call(chart); };\n chart.container = this;\n\n //set state.disabled\n state.disabled = data.map(function(d) { return !!d.disabled });\n\n if (!defaultState) {\n var key;\n defaultState = {};\n for (key in state) {\n if (state[key] instanceof Array)\n defaultState[key] = state[key].slice(0);\n else\n defaultState[key] = state[key];\n }\n }\n\n //------------------------------------------------------------\n // Display No Data message if there's nothing to show.\n\n if (!data || !data.length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-pieChart').data([data]);\n var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-pieChart').append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-pieWrap');\n gEnter.append('g').attr('class', 'nv-legendWrap');\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Legend\n\n if (showLegend) {\n legend\n .width( availableWidth )\n .key(pie.x());\n\n wrap.select('.nv-legendWrap')\n .datum(data)\n .call(legend);\n\n if ( margin.top != legend.height()) {\n margin.top = legend.height();\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n }\n\n wrap.select('.nv-legendWrap')\n .attr('transform', 'translate(0,' + (-margin.top) +')');\n }\n\n //------------------------------------------------------------\n\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n\n //------------------------------------------------------------\n // Main Chart Component(s)\n\n pie\n .width(availableWidth)\n .height(availableHeight);\n\n\n var pieWrap = g.select('.nv-pieWrap')\n .datum([data]);\n\n d3.transition(pieWrap).call(pie);\n\n //------------------------------------------------------------\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n legend.dispatch.on('stateChange', function(newState) {\n state = newState;\n dispatch.stateChange(state);\n chart.update();\n });\n\n pie.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n // Update chart from a state object passed to event handler\n dispatch.on('changeState', function(e) {\n\n if (typeof e.disabled !== 'undefined') {\n data.forEach(function(series,i) {\n series.disabled = e.disabled[i];\n });\n\n state.disabled = e.disabled;\n }\n\n chart.update();\n });\n\n //============================================================\n\n\n });\n\n return chart;\n }\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n pie.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e);\n });\n\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.legend = legend;\n chart.dispatch = dispatch;\n chart.pie = pie;\n\n d3.rebind(chart, pie, 'valueFormat', 'values', 'x', 'y', 'description', 'id', 'showLabels', 'donutLabelsOutside', 'pieLabelsOutside', 'labelType', 'donut', 'donutRatio', 'labelThreshold');\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n legend.color(color);\n pie.color(color);\n return chart;\n };\n\n chart.showLegend = function(_) {\n if (!arguments.length) return showLegend;\n showLegend = _;\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.state = function(_) {\n if (!arguments.length) return state;\n state = _;\n return chart;\n };\n\n chart.defaultState = function(_) {\n if (!arguments.length) return defaultState;\n defaultState = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.scatter = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 0, right: 0, bottom: 0, left: 0}\n , width = 960\n , height = 500\n , color = nv.utils.defaultColor() // chooses color\n , id = Math.floor(Math.random() * 100000) //Create semi-unique ID incase user doesn't select one\n , x = d3.scale.linear()\n , y = d3.scale.linear()\n , z = d3.scale.linear() //linear because d3.svg.shape.size is treated as area\n , getX = function(d) { return d.x } // accessor to get the x value\n , getY = function(d) { return d.y } // accessor to get the y value\n , getSize = function(d) { return d.size || 1} // accessor to get the point size\n , getShape = function(d) { return d.shape || 'circle' } // accessor to get point shape\n , onlyCircles = true // Set to false to use shapes\n , forceX = [] // List of numbers to Force into the X scale (ie. 0, or a max / min, etc.)\n , forceY = [] // List of numbers to Force into the Y scale\n , forceSize = [] // List of numbers to Force into the Size scale\n , interactive = true // If true, plots a voronoi overlay for advanced point intersection\n , pointKey = null\n , pointActive = function(d) { return !d.notActive } // any points that return false will be filtered out\n , padData = false // If true, adds half a data points width to front and back, for lining up a line chart with a bar chart\n , padDataOuter = .1 //outerPadding to imitate ordinal scale outer padding\n , clipEdge = false // if true, masks points within x and y scale\n , clipVoronoi = true // if true, masks each point with a circle... can turn off to slightly increase performance\n , clipRadius = function() { return 25 } // function to get the radius for voronoi point clips\n , xDomain = null // Override x domain (skips the calculation from data)\n , yDomain = null // Override y domain\n , xRange = null // Override x range\n , yRange = null // Override y range\n , sizeDomain = null // Override point size domain\n , sizeRange = null\n , singlePoint = false\n , dispatch = d3.dispatch('elementClick', 'elementMouseover', 'elementMouseout')\n , useVoronoi = true\n ;\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var x0, y0, z0 // used to store previous scales\n , timeoutID\n , needsUpdate = false // Flag for when the points are visually updating, but the interactive layer is behind, to disable tooltips\n ;\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var availableWidth = width - margin.left - margin.right,\n availableHeight = height - margin.top - margin.bottom,\n container = d3.select(this);\n\n //add series index to each data point for reference\n data = data.map(function(series, i) {\n series.values = series.values.map(function(point) {\n point.series = i;\n return point;\n });\n return series;\n });\n\n //------------------------------------------------------------\n // Setup Scales\n\n // remap and flatten the data for use in calculating the scales' domains\n var seriesData = (xDomain && yDomain && sizeDomain) ? [] : // if we know xDomain and yDomain and sizeDomain, no need to calculate.... if Size is constant remember to set sizeDomain to speed up performance\n d3.merge(\n data.map(function(d) {\n return d.values.map(function(d,i) {\n return { x: getX(d,i), y: getY(d,i), size: getSize(d,i) }\n })\n })\n );\n\n x .domain(xDomain || d3.extent(seriesData.map(function(d) { return d.x; }).concat(forceX)))\n\n if (padData && data[0])\n x.range(xRange || [(availableWidth * padDataOuter + availableWidth) / (2 *data[0].values.length), availableWidth - availableWidth * (1 + padDataOuter) / (2 * data[0].values.length) ]);\n //x.range([availableWidth * .5 / data[0].values.length, availableWidth * (data[0].values.length - .5) / data[0].values.length ]);\n else\n x.range(xRange || [0, availableWidth]);\n\n y .domain(yDomain || d3.extent(seriesData.map(function(d) { return d.y }).concat(forceY)))\n .range(yRange || [availableHeight, 0]);\n\n z .domain(sizeDomain || d3.extent(seriesData.map(function(d) { return d.size }).concat(forceSize)))\n .range(sizeRange || [16, 256]);\n\n // If scale's domain don't have a range, slightly adjust to make one... so a chart can show a single data point\n if (x.domain()[0] === x.domain()[1] || y.domain()[0] === y.domain()[1]) singlePoint = true;\n if (x.domain()[0] === x.domain()[1])\n x.domain()[0] ?\n x.domain([x.domain()[0] - x.domain()[0] * 0.01, x.domain()[1] + x.domain()[1] * 0.01])\n : x.domain([-1,1]);\n\n if (y.domain()[0] === y.domain()[1])\n y.domain()[0] ?\n y.domain([y.domain()[0] - y.domain()[0] * 0.01, y.domain()[1] + y.domain()[1] * 0.01])\n : y.domain([-1,1]);\n\n if ( isNaN(x.domain()[0])) {\n x.domain([-1,1]);\n }\n\n if ( isNaN(y.domain()[0])) {\n y.domain([-1,1]);\n }\n\n\n x0 = x0 || x;\n y0 = y0 || y;\n z0 = z0 || z;\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-scatter').data([data]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-scatter nv-chart-' + id + (singlePoint ? ' nv-single-point' : ''));\n var defsEnter = wrapEnter.append('defs');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-groups');\n gEnter.append('g').attr('class', 'nv-point-paths');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n //------------------------------------------------------------\n\n\n defsEnter.append('clipPath')\n .attr('id', 'nv-edge-clip-' + id)\n .append('rect');\n\n wrap.select('#nv-edge-clip-' + id + ' rect')\n .attr('width', availableWidth)\n .attr('height', availableHeight);\n\n g .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + id + ')' : '');\n\n\n function updateInteractiveLayer() {\n\n if (!interactive) return false;\n\n var eventElements;\n\n var vertices = d3.merge(data.map(function(group, groupIndex) {\n return group.values\n .map(function(point, pointIndex) {\n // *Adding noise to make duplicates very unlikely\n // *Injecting series and point index for reference\n /* *Adding a 'jitter' to the points, because there's an issue in d3.geom.voronoi.\n */\n var pX = getX(point,pointIndex);\n var pY = getY(point,pointIndex);\n\n return [x(pX)+ Math.random() * 1e-7,\n y(pY)+ Math.random() * 1e-7,\n groupIndex,\n pointIndex, point]; //temp hack to add noise untill I think of a better way so there are no duplicates\n })\n .filter(function(pointArray, pointIndex) {\n return pointActive(pointArray[4], pointIndex); // Issue #237.. move filter to after map, so pointIndex is correct!\n })\n })\n );\n\n\n\n //inject series and point index for reference into voronoi\n if (useVoronoi === true) {\n\n if (clipVoronoi) {\n var pointClipsEnter = wrap.select('defs').selectAll('.nv-point-clips')\n .data([id])\n .enter();\n\n pointClipsEnter.append('clipPath')\n .attr('class', 'nv-point-clips')\n .attr('id', 'nv-points-clip-' + id);\n\n var pointClips = wrap.select('#nv-points-clip-' + id).selectAll('circle')\n .data(vertices);\n pointClips.enter().append('circle')\n .attr('r', clipRadius);\n pointClips.exit().remove();\n pointClips\n .attr('cx', function(d) { return d[0] })\n .attr('cy', function(d) { return d[1] });\n\n wrap.select('.nv-point-paths')\n .attr('clip-path', 'url(#nv-points-clip-' + id + ')');\n }\n\n\n if(vertices.length) {\n // Issue #283 - Adding 2 dummy points to the voronoi b/c voronoi requires min 3 points to work\n vertices.push([x.range()[0] - 20, y.range()[0] - 20, null, null]);\n vertices.push([x.range()[1] + 20, y.range()[1] + 20, null, null]);\n vertices.push([x.range()[0] - 20, y.range()[0] + 20, null, null]);\n vertices.push([x.range()[1] + 20, y.range()[1] - 20, null, null]);\n }\n\n var bounds = d3.geom.polygon([\n [-10,-10],\n [-10,height + 10],\n [width + 10,height + 10],\n [width + 10,-10]\n ]);\n\n var voronoi = d3.geom.voronoi(vertices).map(function(d, i) {\n return {\n 'data': bounds.clip(d),\n 'series': vertices[i][2],\n 'point': vertices[i][3]\n }\n });\n\n\n var pointPaths = wrap.select('.nv-point-paths').selectAll('path')\n .data(voronoi);\n pointPaths.enter().append('path')\n .attr('class', function(d,i) { return 'nv-path-'+i; });\n pointPaths.exit().remove();\n pointPaths\n .attr('d', function(d) {\n if (d.data.length === 0)\n return 'M 0 0'\n else\n return 'M' + d.data.join('L') + 'Z';\n });\n\n var mouseEventCallback = function(d,mDispatch) {\n if (needsUpdate) return 0;\n var series = data[d.series];\n if (typeof series === 'undefined') return;\n\n var point = series.values[d.point];\n\n mDispatch({\n point: point,\n series: series,\n pos: [x(getX(point, d.point)) + margin.left, y(getY(point, d.point)) + margin.top],\n seriesIndex: d.series,\n pointIndex: d.point\n });\n };\n\n pointPaths\n .on('click', function(d) {\n mouseEventCallback(d, dispatch.elementClick);\n })\n .on('mouseover', function(d) {\n mouseEventCallback(d, dispatch.elementMouseover);\n })\n .on('mouseout', function(d, i) {\n mouseEventCallback(d, dispatch.elementMouseout);\n });\n\n\n } else {\n /*\n // bring data in form needed for click handlers\n var dataWithPoints = vertices.map(function(d, i) {\n return {\n 'data': d,\n 'series': vertices[i][2],\n 'point': vertices[i][3]\n }\n });\n */\n\n // add event handlers to points instead voronoi paths\n wrap.select('.nv-groups').selectAll('.nv-group')\n .selectAll('.nv-point')\n //.data(dataWithPoints)\n //.style('pointer-events', 'auto') // recativate events, disabled by css\n .on('click', function(d,i) {\n //nv.log('test', d, i);\n if (needsUpdate || !data[d.series]) return 0; //check if this is a dummy point\n var series = data[d.series],\n point = series.values[i];\n\n dispatch.elementClick({\n point: point,\n series: series,\n pos: [x(getX(point, i)) + margin.left, y(getY(point, i)) + margin.top],\n seriesIndex: d.series,\n pointIndex: i\n });\n })\n .on('mouseover', function(d,i) {\n if (needsUpdate || !data[d.series]) return 0; //check if this is a dummy point\n var series = data[d.series],\n point = series.values[i];\n\n dispatch.elementMouseover({\n point: point,\n series: series,\n pos: [x(getX(point, i)) + margin.left, y(getY(point, i)) + margin.top],\n seriesIndex: d.series,\n pointIndex: i\n });\n })\n .on('mouseout', function(d,i) {\n if (needsUpdate || !data[d.series]) return 0; //check if this is a dummy point\n var series = data[d.series],\n point = series.values[i];\n\n dispatch.elementMouseout({\n point: point,\n series: series,\n seriesIndex: d.series,\n pointIndex: i\n });\n });\n }\n\n needsUpdate = false;\n }\n\n needsUpdate = true;\n\n var groups = wrap.select('.nv-groups').selectAll('.nv-group')\n .data(function(d) { return d }, function(d) { return d.key });\n groups.enter().append('g')\n .style('stroke-opacity', 1e-6)\n .style('fill-opacity', 1e-6);\n groups.exit()\n .remove();\n groups\n .attr('class', function(d,i) { return 'nv-group nv-series-' + i })\n .classed('hover', function(d) { return d.hover });\n groups\n .transition()\n .style('fill', function(d,i) { return color(d, i) })\n .style('stroke', function(d,i) { return color(d, i) })\n .style('stroke-opacity', 1)\n .style('fill-opacity', .5);\n\n\n if (onlyCircles) {\n\n var points = groups.selectAll('circle.nv-point')\n .data(function(d) { return d.values }, pointKey);\n points.enter().append('circle')\n .style('fill', function (d,i) { return d.color })\n .style('stroke', function (d,i) { return d.color })\n .attr('cx', function(d,i) { return nv.utils.NaNtoZero(x0(getX(d,i))) })\n .attr('cy', function(d,i) { return nv.utils.NaNtoZero(y0(getY(d,i))) })\n .attr('r', function(d,i) { return Math.sqrt(z(getSize(d,i))/Math.PI) });\n points.exit().remove();\n groups.exit().selectAll('path.nv-point').transition()\n .attr('cx', function(d,i) { return nv.utils.NaNtoZero(x(getX(d,i))) })\n .attr('cy', function(d,i) { return nv.utils.NaNtoZero(y(getY(d,i))) })\n .remove();\n points.each(function(d,i) {\n d3.select(this)\n .classed('nv-point', true)\n .classed('nv-point-' + i, true)\n .classed('hover',false)\n ;\n });\n points.transition()\n .attr('cx', function(d,i) { return nv.utils.NaNtoZero(x(getX(d,i))) })\n .attr('cy', function(d,i) { return nv.utils.NaNtoZero(y(getY(d,i))) })\n .attr('r', function(d,i) { return Math.sqrt(z(getSize(d,i))/Math.PI) });\n\n } else {\n\n var points = groups.selectAll('path.nv-point')\n .data(function(d) { return d.values });\n points.enter().append('path')\n .style('fill', function (d,i) { return d.color })\n .style('stroke', function (d,i) { return d.color })\n .attr('transform', function(d,i) {\n return 'translate(' + x0(getX(d,i)) + ',' + y0(getY(d,i)) + ')'\n })\n .attr('d',\n d3.svg.symbol()\n .type(getShape)\n .size(function(d,i) { return z(getSize(d,i)) })\n );\n points.exit().remove();\n groups.exit().selectAll('path.nv-point')\n .transition()\n .attr('transform', function(d,i) {\n return 'translate(' + x(getX(d,i)) + ',' + y(getY(d,i)) + ')'\n })\n .remove();\n points.each(function(d,i) {\n d3.select(this)\n .classed('nv-point', true)\n .classed('nv-point-' + i, true)\n .classed('hover',false)\n ;\n });\n points.transition()\n .attr('transform', function(d,i) {\n //nv.log(d,i,getX(d,i), x(getX(d,i)));\n return 'translate(' + x(getX(d,i)) + ',' + y(getY(d,i)) + ')'\n })\n .attr('d',\n d3.svg.symbol()\n .type(getShape)\n .size(function(d,i) { return z(getSize(d,i)) })\n );\n }\n\n\n // Delay updating the invisible interactive layer for smoother animation\n clearTimeout(timeoutID); // stop repeat calls to updateInteractiveLayer\n timeoutID = setTimeout(updateInteractiveLayer, 300);\n //updateInteractiveLayer();\n\n //store old scales for use in transitions on update\n x0 = x.copy();\n y0 = y.copy();\n z0 = z.copy();\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n chart.clearHighlights = function() {\n //Remove the 'hover' class from all highlighted points.\n d3.selectAll(\".nv-chart-\" + id + \" .nv-point.hover\").classed(\"hover\",false);\n };\n\n chart.highlightPoint = function(seriesIndex,pointIndex,isHoverOver) {\n d3.select(\".nv-chart-\" + id + \" .nv-series-\" + seriesIndex + \" .nv-point-\" + pointIndex)\n .classed(\"hover\",isHoverOver);\n };\n\n\n dispatch.on('elementMouseover.point', function(d) {\n if (interactive) chart.highlightPoint(d.seriesIndex,d.pointIndex,true);\n });\n\n dispatch.on('elementMouseout.point', function(d) {\n if (interactive) chart.highlightPoint(d.seriesIndex,d.pointIndex,false);\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n chart.dispatch = dispatch;\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.x = function(_) {\n if (!arguments.length) return getX;\n getX = d3.functor(_);\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return getY;\n getY = d3.functor(_);\n return chart;\n };\n\n chart.size = function(_) {\n if (!arguments.length) return getSize;\n getSize = d3.functor(_);\n return chart;\n };\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.xScale = function(_) {\n if (!arguments.length) return x;\n x = _;\n return chart;\n };\n\n chart.yScale = function(_) {\n if (!arguments.length) return y;\n y = _;\n return chart;\n };\n\n chart.zScale = function(_) {\n if (!arguments.length) return z;\n z = _;\n return chart;\n };\n\n chart.xDomain = function(_) {\n if (!arguments.length) return xDomain;\n xDomain = _;\n return chart;\n };\n\n chart.yDomain = function(_) {\n if (!arguments.length) return yDomain;\n yDomain = _;\n return chart;\n };\n\n chart.sizeDomain = function(_) {\n if (!arguments.length) return sizeDomain;\n sizeDomain = _;\n return chart;\n };\n\n chart.xRange = function(_) {\n if (!arguments.length) return xRange;\n xRange = _;\n return chart;\n };\n\n chart.yRange = function(_) {\n if (!arguments.length) return yRange;\n yRange = _;\n return chart;\n };\n\n chart.sizeRange = function(_) {\n if (!arguments.length) return sizeRange;\n sizeRange = _;\n return chart;\n };\n\n chart.forceX = function(_) {\n if (!arguments.length) return forceX;\n forceX = _;\n return chart;\n };\n\n chart.forceY = function(_) {\n if (!arguments.length) return forceY;\n forceY = _;\n return chart;\n };\n\n chart.forceSize = function(_) {\n if (!arguments.length) return forceSize;\n forceSize = _;\n return chart;\n };\n\n chart.interactive = function(_) {\n if (!arguments.length) return interactive;\n interactive = _;\n return chart;\n };\n\n chart.pointKey = function(_) {\n if (!arguments.length) return pointKey;\n pointKey = _;\n return chart;\n };\n\n chart.pointActive = function(_) {\n if (!arguments.length) return pointActive;\n pointActive = _;\n return chart;\n };\n\n chart.padData = function(_) {\n if (!arguments.length) return padData;\n padData = _;\n return chart;\n };\n\n chart.padDataOuter = function(_) {\n if (!arguments.length) return padDataOuter;\n padDataOuter = _;\n return chart;\n };\n\n chart.clipEdge = function(_) {\n if (!arguments.length) return clipEdge;\n clipEdge = _;\n return chart;\n };\n\n chart.clipVoronoi= function(_) {\n if (!arguments.length) return clipVoronoi;\n clipVoronoi = _;\n return chart;\n };\n\n chart.useVoronoi= function(_) {\n if (!arguments.length) return useVoronoi;\n useVoronoi = _;\n if (useVoronoi === false) {\n clipVoronoi = false;\n }\n return chart;\n };\n\n chart.clipRadius = function(_) {\n if (!arguments.length) return clipRadius;\n clipRadius = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n return chart;\n };\n\n chart.shape = function(_) {\n if (!arguments.length) return getShape;\n getShape = _;\n return chart;\n };\n\n chart.onlyCircles = function(_) {\n if (!arguments.length) return onlyCircles;\n onlyCircles = _;\n return chart;\n };\n\n chart.id = function(_) {\n if (!arguments.length) return id;\n id = _;\n return chart;\n };\n\n chart.singlePoint = function(_) {\n if (!arguments.length) return singlePoint;\n singlePoint = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\nnv.models.scatterChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var scatter = nv.models.scatter()\n , xAxis = nv.models.axis()\n , yAxis = nv.models.axis()\n , legend = nv.models.legend()\n , controls = nv.models.legend()\n , distX = nv.models.distribution()\n , distY = nv.models.distribution()\n ;\n\n var margin = {top: 30, right: 20, bottom: 50, left: 75}\n , width = null\n , height = null\n , color = nv.utils.defaultColor()\n , x = d3.fisheye ? d3.fisheye.scale(d3.scale.linear).distortion(0) : scatter.xScale()\n , y = d3.fisheye ? d3.fisheye.scale(d3.scale.linear).distortion(0) : scatter.yScale()\n , xPadding = 0\n , yPadding = 0\n , showDistX = false\n , showDistY = false\n , showLegend = true\n , showXAxis = true\n , showYAxis = true\n , rightAlignYAxis = false\n , showControls = !!d3.fisheye\n , fisheye = 0\n , pauseFisheye = false\n , tooltips = true\n , tooltipX = function(key, x, y) { return '<strong>' + x + '</strong>' }\n , tooltipY = function(key, x, y) { return '<strong>' + y + '</strong>' }\n , tooltip = null\n , state = {}\n , defaultState = null\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')\n , noData = \"No Data Available.\"\n , transitionDuration = 250\n ;\n\n scatter\n .xScale(x)\n .yScale(y)\n ;\n xAxis\n .orient('bottom')\n .tickPadding(10)\n ;\n yAxis\n .orient((rightAlignYAxis) ? 'right' : 'left')\n .tickPadding(10)\n ;\n distX\n .axis('x')\n ;\n distY\n .axis('y')\n ;\n\n controls.updateState(false);\n\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var x0, y0;\n\n var showTooltip = function(e, offsetElement) {\n //TODO: make tooltip style an option between single or dual on axes (maybe on all charts with axes?)\n\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n top = e.pos[1] + ( offsetElement.offsetTop || 0),\n leftX = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n topX = y.range()[0] + margin.top + ( offsetElement.offsetTop || 0),\n leftY = x.range()[0] + margin.left + ( offsetElement.offsetLeft || 0 ),\n topY = e.pos[1] + ( offsetElement.offsetTop || 0),\n xVal = xAxis.tickFormat()(scatter.x()(e.point, e.pointIndex)),\n yVal = yAxis.tickFormat()(scatter.y()(e.point, e.pointIndex));\n\n if( tooltipX != null )\n nv.tooltip.show([leftX, topX], tooltipX(e.series.key, xVal, yVal, e, chart), 'n', 1, offsetElement, 'x-nvtooltip');\n if( tooltipY != null )\n nv.tooltip.show([leftY, topY], tooltipY(e.series.key, xVal, yVal, e, chart), 'e', 1, offsetElement, 'y-nvtooltip');\n if( tooltip != null )\n nv.tooltip.show([left, top], tooltip(e.series.key, xVal, yVal, e, chart), e.value < 0 ? 'n' : 's', null, offsetElement);\n };\n\n var controlsData = [\n { key: 'Magnify', disabled: true }\n ];\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this),\n that = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n\n chart.update = function() { container.transition().duration(transitionDuration).call(chart); };\n chart.container = this;\n\n //set state.disabled\n state.disabled = data.map(function(d) { return !!d.disabled });\n\n if (!defaultState) {\n var key;\n defaultState = {};\n for (key in state) {\n if (state[key] instanceof Array)\n defaultState[key] = state[key].slice(0);\n else\n defaultState[key] = state[key];\n }\n }\n\n //------------------------------------------------------------\n // Display noData message if there's nothing to show.\n\n if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x0 = x0 || x;\n y0 = y0 || y;\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-scatterChart').data([data]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-scatterChart nv-chart-' + scatter.id());\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g');\n\n // background for pointer events\n gEnter.append('rect').attr('class', 'nvd3 nv-background');\n\n gEnter.append('g').attr('class', 'nv-x nv-axis');\n gEnter.append('g').attr('class', 'nv-y nv-axis');\n gEnter.append('g').attr('class', 'nv-scatterWrap');\n gEnter.append('g').attr('class', 'nv-distWrap');\n gEnter.append('g').attr('class', 'nv-legendWrap');\n gEnter.append('g').attr('class', 'nv-controlsWrap');\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Legend\n\n if (showLegend) {\n var legendWidth = (showControls) ? availableWidth / 2 : availableWidth;\n legend.width(legendWidth);\n\n wrap.select('.nv-legendWrap')\n .datum(data)\n .call(legend);\n\n if ( margin.top != legend.height()) {\n margin.top = legend.height();\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n }\n\n wrap.select('.nv-legendWrap')\n .attr('transform', 'translate(' + (availableWidth - legendWidth) + ',' + (-margin.top) +')');\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Controls\n\n if (showControls) {\n controls.width(180).color(['#444']);\n g.select('.nv-controlsWrap')\n .datum(controlsData)\n .attr('transform', 'translate(0,' + (-margin.top) +')')\n .call(controls);\n }\n\n //------------------------------------------------------------\n\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n if (rightAlignYAxis) {\n g.select(\".nv-y.nv-axis\")\n .attr(\"transform\", \"translate(\" + availableWidth + \",0)\");\n }\n\n //------------------------------------------------------------\n // Main Chart Component(s)\n\n scatter\n .width(availableWidth)\n .height(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled }));\n\n if (xPadding !== 0)\n scatter.xDomain(null);\n\n if (yPadding !== 0)\n scatter.yDomain(null);\n\n wrap.select('.nv-scatterWrap')\n .datum(data.filter(function(d) { return !d.disabled }))\n .call(scatter);\n\n //Adjust for x and y padding\n if (xPadding !== 0) {\n var xRange = x.domain()[1] - x.domain()[0];\n scatter.xDomain([x.domain()[0] - (xPadding * xRange), x.domain()[1] + (xPadding * xRange)]);\n }\n\n if (yPadding !== 0) {\n var yRange = y.domain()[1] - y.domain()[0];\n scatter.yDomain([y.domain()[0] - (yPadding * yRange), y.domain()[1] + (yPadding * yRange)]);\n }\n\n //Only need to update the scatter again if x/yPadding changed the domain.\n if (yPadding !== 0 || xPadding !== 0) {\n wrap.select('.nv-scatterWrap')\n .datum(data.filter(function(d) { return !d.disabled }))\n .call(scatter);\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Axes\n if (showXAxis) {\n xAxis\n .scale(x)\n .ticks( xAxis.ticks() && xAxis.ticks().length ? xAxis.ticks() : availableWidth / 100 )\n .tickSize( -availableHeight , 0);\n\n g.select('.nv-x.nv-axis')\n .attr('transform', 'translate(0,' + y.range()[0] + ')')\n .call(xAxis);\n\n }\n\n if (showYAxis) {\n yAxis\n .scale(y)\n .ticks( yAxis.ticks() && yAxis.ticks().length ? yAxis.ticks() : availableHeight / 36 )\n .tickSize( -availableWidth, 0);\n\n g.select('.nv-y.nv-axis')\n .call(yAxis);\n }\n\n\n if (showDistX) {\n distX\n .getData(scatter.x())\n .scale(x)\n .width(availableWidth)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled }));\n gEnter.select('.nv-distWrap').append('g')\n .attr('class', 'nv-distributionX');\n g.select('.nv-distributionX')\n .attr('transform', 'translate(0,' + y.range()[0] + ')')\n .datum(data.filter(function(d) { return !d.disabled }))\n .call(distX);\n }\n\n if (showDistY) {\n distY\n .getData(scatter.y())\n .scale(y)\n .width(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled }));\n gEnter.select('.nv-distWrap').append('g')\n .attr('class', 'nv-distributionY');\n g.select('.nv-distributionY')\n .attr('transform',\n 'translate(' + (rightAlignYAxis ? availableWidth : -distY.size() ) + ',0)')\n .datum(data.filter(function(d) { return !d.disabled }))\n .call(distY);\n }\n\n //------------------------------------------------------------\n\n\n\n\n if (d3.fisheye) {\n g.select('.nv-background')\n .attr('width', availableWidth)\n .attr('height', availableHeight);\n\n g.select('.nv-background').on('mousemove', updateFisheye);\n g.select('.nv-background').on('click', function() { pauseFisheye = !pauseFisheye;});\n scatter.dispatch.on('elementClick.freezeFisheye', function() {\n pauseFisheye = !pauseFisheye;\n });\n }\n\n\n function updateFisheye() {\n if (pauseFisheye) {\n g.select('.nv-point-paths').style('pointer-events', 'all');\n return false;\n }\n\n g.select('.nv-point-paths').style('pointer-events', 'none' );\n\n var mouse = d3.mouse(this);\n x.distortion(fisheye).focus(mouse[0]);\n y.distortion(fisheye).focus(mouse[1]);\n\n g.select('.nv-scatterWrap')\n .call(scatter);\n\n if (showXAxis)\n g.select('.nv-x.nv-axis').call(xAxis);\n\n if (showYAxis)\n g.select('.nv-y.nv-axis').call(yAxis);\n\n g.select('.nv-distributionX')\n .datum(data.filter(function(d) { return !d.disabled }))\n .call(distX);\n g.select('.nv-distributionY')\n .datum(data.filter(function(d) { return !d.disabled }))\n .call(distY);\n }\n\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n controls.dispatch.on('legendClick', function(d,i) {\n d.disabled = !d.disabled;\n\n fisheye = d.disabled ? 0 : 2.5;\n g.select('.nv-background') .style('pointer-events', d.disabled ? 'none' : 'all');\n g.select('.nv-point-paths').style('pointer-events', d.disabled ? 'all' : 'none' );\n\n if (d.disabled) {\n x.distortion(fisheye).focus(0);\n y.distortion(fisheye).focus(0);\n\n g.select('.nv-scatterWrap').call(scatter);\n g.select('.nv-x.nv-axis').call(xAxis);\n g.select('.nv-y.nv-axis').call(yAxis);\n } else {\n pauseFisheye = false;\n }\n\n chart.update();\n });\n\n legend.dispatch.on('stateChange', function(newState) {\n state.disabled = newState.disabled;\n dispatch.stateChange(state);\n chart.update();\n });\n\n scatter.dispatch.on('elementMouseover.tooltip', function(e) {\n d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-distx-' + e.pointIndex)\n .attr('y1', function(d,i) { return e.pos[1] - availableHeight;});\n d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-disty-' + e.pointIndex)\n .attr('x2', e.pos[0] + distX.size());\n\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e, that.parentNode);\n });\n\n // Update chart from a state object passed to event handler\n dispatch.on('changeState', function(e) {\n\n if (typeof e.disabled !== 'undefined') {\n data.forEach(function(series,i) {\n series.disabled = e.disabled[i];\n });\n\n state.disabled = e.disabled;\n }\n\n chart.update();\n });\n\n //============================================================\n\n\n //store old scales for use in transitions on update\n x0 = x.copy();\n y0 = y.copy();\n\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n scatter.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n\n d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-distx-' + e.pointIndex)\n .attr('y1', 0);\n d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-disty-' + e.pointIndex)\n .attr('x2', distY.size());\n });\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.dispatch = dispatch;\n chart.scatter = scatter;\n chart.legend = legend;\n chart.controls = controls;\n chart.xAxis = xAxis;\n chart.yAxis = yAxis;\n chart.distX = distX;\n chart.distY = distY;\n\n d3.rebind(chart, scatter, 'id', 'interactive', 'pointActive', 'x', 'y', 'shape', 'size', 'xScale', 'yScale', 'zScale', 'xDomain', 'yDomain', 'xRange', 'yRange', 'sizeDomain', 'sizeRange', 'forceX', 'forceY', 'forceSize', 'clipVoronoi', 'clipRadius', 'useVoronoi');\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n legend.color(color);\n distX.color(color);\n distY.color(color);\n return chart;\n };\n\n chart.showDistX = function(_) {\n if (!arguments.length) return showDistX;\n showDistX = _;\n return chart;\n };\n\n chart.showDistY = function(_) {\n if (!arguments.length) return showDistY;\n showDistY = _;\n return chart;\n };\n\n chart.showControls = function(_) {\n if (!arguments.length) return showControls;\n showControls = _;\n return chart;\n };\n\n chart.showLegend = function(_) {\n if (!arguments.length) return showLegend;\n showLegend = _;\n return chart;\n };\n\n chart.showXAxis = function(_) {\n if (!arguments.length) return showXAxis;\n showXAxis = _;\n return chart;\n };\n\n chart.showYAxis = function(_) {\n if (!arguments.length) return showYAxis;\n showYAxis = _;\n return chart;\n };\n\n chart.rightAlignYAxis = function(_) {\n if(!arguments.length) return rightAlignYAxis;\n rightAlignYAxis = _;\n yAxis.orient( (_) ? 'right' : 'left');\n return chart;\n };\n\n\n chart.fisheye = function(_) {\n if (!arguments.length) return fisheye;\n fisheye = _;\n return chart;\n };\n\n chart.xPadding = function(_) {\n if (!arguments.length) return xPadding;\n xPadding = _;\n return chart;\n };\n\n chart.yPadding = function(_) {\n if (!arguments.length) return yPadding;\n yPadding = _;\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.tooltipXContent = function(_) {\n if (!arguments.length) return tooltipX;\n tooltipX = _;\n return chart;\n };\n\n chart.tooltipYContent = function(_) {\n if (!arguments.length) return tooltipY;\n tooltipY = _;\n return chart;\n };\n\n chart.state = function(_) {\n if (!arguments.length) return state;\n state = _;\n return chart;\n };\n\n chart.defaultState = function(_) {\n if (!arguments.length) return defaultState;\n defaultState = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n chart.transitionDuration = function(_) {\n if (!arguments.length) return transitionDuration;\n transitionDuration = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.scatterPlusLineChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var scatter = nv.models.scatter()\n , xAxis = nv.models.axis()\n , yAxis = nv.models.axis()\n , legend = nv.models.legend()\n , controls = nv.models.legend()\n , distX = nv.models.distribution()\n , distY = nv.models.distribution()\n ;\n\n var margin = {top: 30, right: 20, bottom: 50, left: 75}\n , width = null\n , height = null\n , color = nv.utils.defaultColor()\n , x = d3.fisheye ? d3.fisheye.scale(d3.scale.linear).distortion(0) : scatter.xScale()\n , y = d3.fisheye ? d3.fisheye.scale(d3.scale.linear).distortion(0) : scatter.yScale()\n , showDistX = false\n , showDistY = false\n , showLegend = true\n , showXAxis = true\n , showYAxis = true\n , rightAlignYAxis = false\n , showControls = !!d3.fisheye\n , fisheye = 0\n , pauseFisheye = false\n , tooltips = true\n , tooltipX = function(key, x, y) { return '<strong>' + x + '</strong>' }\n , tooltipY = function(key, x, y) { return '<strong>' + y + '</strong>' }\n , tooltip = function(key, x, y, date) { return '<h3>' + key + '</h3>'\n + '<p>' + date + '</p>' }\n , state = {}\n , defaultState = null\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')\n , noData = \"No Data Available.\"\n , transitionDuration = 250\n ;\n\n scatter\n .xScale(x)\n .yScale(y)\n ;\n xAxis\n .orient('bottom')\n .tickPadding(10)\n ;\n yAxis\n .orient((rightAlignYAxis) ? 'right' : 'left')\n .tickPadding(10)\n ;\n distX\n .axis('x')\n ;\n distY\n .axis('y')\n ;\n\n controls.updateState(false);\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var x0, y0;\n\n var showTooltip = function(e, offsetElement) {\n //TODO: make tooltip style an option between single or dual on axes (maybe on all charts with axes?)\n\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n top = e.pos[1] + ( offsetElement.offsetTop || 0),\n leftX = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n topX = y.range()[0] + margin.top + ( offsetElement.offsetTop || 0),\n leftY = x.range()[0] + margin.left + ( offsetElement.offsetLeft || 0 ),\n topY = e.pos[1] + ( offsetElement.offsetTop || 0),\n xVal = xAxis.tickFormat()(scatter.x()(e.point, e.pointIndex)),\n yVal = yAxis.tickFormat()(scatter.y()(e.point, e.pointIndex));\n\n if( tooltipX != null )\n nv.tooltip.show([leftX, topX], tooltipX(e.series.key, xVal, yVal, e, chart), 'n', 1, offsetElement, 'x-nvtooltip');\n if( tooltipY != null )\n nv.tooltip.show([leftY, topY], tooltipY(e.series.key, xVal, yVal, e, chart), 'e', 1, offsetElement, 'y-nvtooltip');\n if( tooltip != null )\n nv.tooltip.show([left, top], tooltip(e.series.key, xVal, yVal, e.point.tooltip, e, chart), e.value < 0 ? 'n' : 's', null, offsetElement);\n };\n\n var controlsData = [\n { key: 'Magnify', disabled: true }\n ];\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this),\n that = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n\n chart.update = function() { container.transition().duration(transitionDuration).call(chart); };\n chart.container = this;\n\n //set state.disabled\n state.disabled = data.map(function(d) { return !!d.disabled });\n\n if (!defaultState) {\n var key;\n defaultState = {};\n for (key in state) {\n if (state[key] instanceof Array)\n defaultState[key] = state[key].slice(0);\n else\n defaultState[key] = state[key];\n }\n }\n\n //------------------------------------------------------------\n // Display noData message if there's nothing to show.\n\n if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x = scatter.xScale();\n y = scatter.yScale();\n\n x0 = x0 || x;\n y0 = y0 || y;\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-scatterChart').data([data]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-scatterChart nv-chart-' + scatter.id());\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g')\n\n // background for pointer events\n gEnter.append('rect').attr('class', 'nvd3 nv-background').style(\"pointer-events\",\"none\");\n\n gEnter.append('g').attr('class', 'nv-x nv-axis');\n gEnter.append('g').attr('class', 'nv-y nv-axis');\n gEnter.append('g').attr('class', 'nv-scatterWrap');\n gEnter.append('g').attr('class', 'nv-regressionLinesWrap');\n gEnter.append('g').attr('class', 'nv-distWrap');\n gEnter.append('g').attr('class', 'nv-legendWrap');\n gEnter.append('g').attr('class', 'nv-controlsWrap');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n if (rightAlignYAxis) {\n g.select(\".nv-y.nv-axis\")\n .attr(\"transform\", \"translate(\" + availableWidth + \",0)\");\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Legend\n\n if (showLegend) {\n legend.width( availableWidth / 2 );\n\n wrap.select('.nv-legendWrap')\n .datum(data)\n .call(legend);\n\n if ( margin.top != legend.height()) {\n margin.top = legend.height();\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n }\n\n wrap.select('.nv-legendWrap')\n .attr('transform', 'translate(' + (availableWidth / 2) + ',' + (-margin.top) +')');\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Controls\n\n if (showControls) {\n controls.width(180).color(['#444']);\n g.select('.nv-controlsWrap')\n .datum(controlsData)\n .attr('transform', 'translate(0,' + (-margin.top) +')')\n .call(controls);\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Main Chart Component(s)\n\n scatter\n .width(availableWidth)\n .height(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled }))\n\n wrap.select('.nv-scatterWrap')\n .datum(data.filter(function(d) { return !d.disabled }))\n .call(scatter);\n\n wrap.select('.nv-regressionLinesWrap')\n .attr('clip-path', 'url(#nv-edge-clip-' + scatter.id() + ')');\n\n var regWrap = wrap.select('.nv-regressionLinesWrap').selectAll('.nv-regLines')\n .data(function(d) {return d });\n\n regWrap.enter().append('g').attr('class', 'nv-regLines');\n\n var regLine = regWrap.selectAll('.nv-regLine').data(function(d){return [d]});\n var regLineEnter = regLine.enter()\n .append('line').attr('class', 'nv-regLine')\n .style('stroke-opacity', 0);\n\n regLine\n .transition()\n .attr('x1', x.range()[0])\n .attr('x2', x.range()[1])\n .attr('y1', function(d,i) {return y(x.domain()[0] * d.slope + d.intercept) })\n .attr('y2', function(d,i) { return y(x.domain()[1] * d.slope + d.intercept) })\n .style('stroke', function(d,i,j) { return color(d,j) })\n .style('stroke-opacity', function(d,i) {\n return (d.disabled || typeof d.slope === 'undefined' || typeof d.intercept === 'undefined') ? 0 : 1\n });\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Axes\n\n if (showXAxis) {\n xAxis\n .scale(x)\n .ticks( xAxis.ticks() ? xAxis.ticks() : availableWidth / 100 )\n .tickSize( -availableHeight , 0);\n\n g.select('.nv-x.nv-axis')\n .attr('transform', 'translate(0,' + y.range()[0] + ')')\n .call(xAxis);\n }\n\n if (showYAxis) {\n yAxis\n .scale(y)\n .ticks( yAxis.ticks() ? yAxis.ticks() : availableHeight / 36 )\n .tickSize( -availableWidth, 0);\n\n g.select('.nv-y.nv-axis')\n .call(yAxis);\n }\n\n\n if (showDistX) {\n distX\n .getData(scatter.x())\n .scale(x)\n .width(availableWidth)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled }));\n gEnter.select('.nv-distWrap').append('g')\n .attr('class', 'nv-distributionX');\n g.select('.nv-distributionX')\n .attr('transform', 'translate(0,' + y.range()[0] + ')')\n .datum(data.filter(function(d) { return !d.disabled }))\n .call(distX);\n }\n\n if (showDistY) {\n distY\n .getData(scatter.y())\n .scale(y)\n .width(availableHeight)\n .color(data.map(function(d,i) {\n return d.color || color(d, i);\n }).filter(function(d,i) { return !data[i].disabled }));\n gEnter.select('.nv-distWrap').append('g')\n .attr('class', 'nv-distributionY');\n g.select('.nv-distributionY')\n .attr('transform', 'translate(' + (rightAlignYAxis ? availableWidth : -distY.size() ) + ',0)')\n .datum(data.filter(function(d) { return !d.disabled }))\n .call(distY);\n }\n\n //------------------------------------------------------------\n\n\n\n\n if (d3.fisheye) {\n g.select('.nv-background')\n .attr('width', availableWidth)\n .attr('height', availableHeight)\n ;\n\n g.select('.nv-background').on('mousemove', updateFisheye);\n g.select('.nv-background').on('click', function() { pauseFisheye = !pauseFisheye;});\n scatter.dispatch.on('elementClick.freezeFisheye', function() {\n pauseFisheye = !pauseFisheye;\n });\n }\n\n\n function updateFisheye() {\n if (pauseFisheye) {\n g.select('.nv-point-paths').style('pointer-events', 'all');\n return false;\n }\n\n g.select('.nv-point-paths').style('pointer-events', 'none' );\n\n var mouse = d3.mouse(this);\n x.distortion(fisheye).focus(mouse[0]);\n y.distortion(fisheye).focus(mouse[1]);\n\n g.select('.nv-scatterWrap')\n .datum(data.filter(function(d) { return !d.disabled }))\n .call(scatter);\n\n if (showXAxis)\n g.select('.nv-x.nv-axis').call(xAxis);\n\n if (showYAxis)\n g.select('.nv-y.nv-axis').call(yAxis);\n\n g.select('.nv-distributionX')\n .datum(data.filter(function(d) { return !d.disabled }))\n .call(distX);\n g.select('.nv-distributionY')\n .datum(data.filter(function(d) { return !d.disabled }))\n .call(distY);\n }\n\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n controls.dispatch.on('legendClick', function(d,i) {\n d.disabled = !d.disabled;\n\n fisheye = d.disabled ? 0 : 2.5;\n g.select('.nv-background') .style('pointer-events', d.disabled ? 'none' : 'all');\n g.select('.nv-point-paths').style('pointer-events', d.disabled ? 'all' : 'none' );\n\n if (d.disabled) {\n x.distortion(fisheye).focus(0);\n y.distortion(fisheye).focus(0);\n\n g.select('.nv-scatterWrap').call(scatter);\n g.select('.nv-x.nv-axis').call(xAxis);\n g.select('.nv-y.nv-axis').call(yAxis);\n } else {\n pauseFisheye = false;\n }\n\n chart.update();\n });\n\n legend.dispatch.on('stateChange', function(newState) {\n state = newState;\n dispatch.stateChange(state);\n chart.update();\n });\n\n\n scatter.dispatch.on('elementMouseover.tooltip', function(e) {\n d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-distx-' + e.pointIndex)\n .attr('y1', e.pos[1] - availableHeight);\n d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-disty-' + e.pointIndex)\n .attr('x2', e.pos[0] + distX.size());\n\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];\n dispatch.tooltipShow(e);\n });\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e, that.parentNode);\n });\n\n // Update chart from a state object passed to event handler\n dispatch.on('changeState', function(e) {\n\n if (typeof e.disabled !== 'undefined') {\n data.forEach(function(series,i) {\n series.disabled = e.disabled[i];\n });\n\n state.disabled = e.disabled;\n }\n\n chart.update();\n });\n\n //============================================================\n\n\n //store old scales for use in transitions on update\n x0 = x.copy();\n y0 = y.copy();\n\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n scatter.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n\n d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-distx-' + e.pointIndex)\n .attr('y1', 0);\n d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-disty-' + e.pointIndex)\n .attr('x2', distY.size());\n });\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.dispatch = dispatch;\n chart.scatter = scatter;\n chart.legend = legend;\n chart.controls = controls;\n chart.xAxis = xAxis;\n chart.yAxis = yAxis;\n chart.distX = distX;\n chart.distY = distY;\n\n d3.rebind(chart, scatter, 'id', 'interactive', 'pointActive', 'x', 'y', 'shape', 'size', 'xScale', 'yScale', 'zScale', 'xDomain', 'yDomain', 'xRange', 'yRange', 'sizeDomain', 'sizeRange', 'forceX', 'forceY', 'forceSize', 'clipVoronoi', 'clipRadius', 'useVoronoi');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n legend.color(color);\n distX.color(color);\n distY.color(color);\n return chart;\n };\n\n chart.showDistX = function(_) {\n if (!arguments.length) return showDistX;\n showDistX = _;\n return chart;\n };\n\n chart.showDistY = function(_) {\n if (!arguments.length) return showDistY;\n showDistY = _;\n return chart;\n };\n\n chart.showControls = function(_) {\n if (!arguments.length) return showControls;\n showControls = _;\n return chart;\n };\n\n chart.showLegend = function(_) {\n if (!arguments.length) return showLegend;\n showLegend = _;\n return chart;\n };\n\n chart.showXAxis = function(_) {\n if (!arguments.length) return showXAxis;\n showXAxis = _;\n return chart;\n };\n\n chart.showYAxis = function(_) {\n if (!arguments.length) return showYAxis;\n showYAxis = _;\n return chart;\n };\n\n chart.rightAlignYAxis = function(_) {\n if(!arguments.length) return rightAlignYAxis;\n rightAlignYAxis = _;\n yAxis.orient( (_) ? 'right' : 'left');\n return chart;\n };\n\n chart.fisheye = function(_) {\n if (!arguments.length) return fisheye;\n fisheye = _;\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.tooltipXContent = function(_) {\n if (!arguments.length) return tooltipX;\n tooltipX = _;\n return chart;\n };\n\n chart.tooltipYContent = function(_) {\n if (!arguments.length) return tooltipY;\n tooltipY = _;\n return chart;\n };\n\n chart.state = function(_) {\n if (!arguments.length) return state;\n state = _;\n return chart;\n };\n\n chart.defaultState = function(_) {\n if (!arguments.length) return defaultState;\n defaultState = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n chart.transitionDuration = function(_) {\n if (!arguments.length) return transitionDuration;\n transitionDuration = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.sparkline = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 2, right: 0, bottom: 2, left: 0}\n , width = 400\n , height = 32\n , animate = true\n , x = d3.scale.linear()\n , y = d3.scale.linear()\n , getX = function(d) { return d.x }\n , getY = function(d) { return d.y }\n , color = nv.utils.getColor(['#000'])\n , xDomain\n , yDomain\n , xRange\n , yRange\n ;\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var availableWidth = width - margin.left - margin.right,\n availableHeight = height - margin.top - margin.bottom,\n container = d3.select(this);\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x .domain(xDomain || d3.extent(data, getX ))\n .range(xRange || [0, availableWidth]);\n\n y .domain(yDomain || d3.extent(data, getY ))\n .range(yRange || [availableHeight, 0]);\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-sparkline').data([data]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-sparkline');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')\n\n //------------------------------------------------------------\n\n\n var paths = wrap.selectAll('path')\n .data(function(d) { return [d] });\n paths.enter().append('path');\n paths.exit().remove();\n paths\n .style('stroke', function(d,i) { return d.color || color(d, i) })\n .attr('d', d3.svg.line()\n .x(function(d,i) { return x(getX(d,i)) })\n .y(function(d,i) { return y(getY(d,i)) })\n );\n\n\n // TODO: Add CURRENT data point (Need Min, Mac, Current / Most recent)\n var points = wrap.selectAll('circle.nv-point')\n .data(function(data) {\n var yValues = data.map(function(d, i) { return getY(d,i); });\n function pointIndex(index) {\n if (index != -1) {\n\t var result = data[index];\n result.pointIndex = index;\n return result;\n } else {\n return null;\n }\n }\n var maxPoint = pointIndex(yValues.lastIndexOf(y.domain()[1])),\n minPoint = pointIndex(yValues.indexOf(y.domain()[0])),\n currentPoint = pointIndex(yValues.length - 1);\n return [minPoint, maxPoint, currentPoint].filter(function (d) {return d != null;});\n });\n points.enter().append('circle');\n points.exit().remove();\n points\n .attr('cx', function(d,i) { return x(getX(d,d.pointIndex)) })\n .attr('cy', function(d,i) { return y(getY(d,d.pointIndex)) })\n .attr('r', 2)\n .attr('class', function(d,i) {\n return getX(d, d.pointIndex) == x.domain()[1] ? 'nv-point nv-currentValue' :\n getY(d, d.pointIndex) == y.domain()[0] ? 'nv-point nv-minValue' : 'nv-point nv-maxValue'\n });\n });\n\n return chart;\n }\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.x = function(_) {\n if (!arguments.length) return getX;\n getX = d3.functor(_);\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return getY;\n getY = d3.functor(_);\n return chart;\n };\n\n chart.xScale = function(_) {\n if (!arguments.length) return x;\n x = _;\n return chart;\n };\n\n chart.yScale = function(_) {\n if (!arguments.length) return y;\n y = _;\n return chart;\n };\n\n chart.xDomain = function(_) {\n if (!arguments.length) return xDomain;\n xDomain = _;\n return chart;\n };\n\n chart.yDomain = function(_) {\n if (!arguments.length) return yDomain;\n yDomain = _;\n return chart;\n };\n\n chart.xRange = function(_) {\n if (!arguments.length) return xRange;\n xRange = _;\n return chart;\n };\n\n chart.yRange = function(_) {\n if (!arguments.length) return yRange;\n yRange = _;\n return chart;\n };\n\n chart.animate = function(_) {\n if (!arguments.length) return animate;\n animate = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.sparklinePlus = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var sparkline = nv.models.sparkline();\n\n var margin = {top: 15, right: 100, bottom: 10, left: 50}\n , width = null\n , height = null\n , x\n , y\n , index = []\n , paused = false\n , xTickFormat = d3.format(',r')\n , yTickFormat = d3.format(',.2f')\n , showValue = true\n , alignValue = true\n , rightAlignValue = false\n , noData = \"No Data Available.\"\n ;\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this);\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n\n\n\n chart.update = function() { chart(selection) };\n chart.container = this;\n\n\n //------------------------------------------------------------\n // Display No Data message if there's nothing to show.\n\n if (!data || !data.length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n var currentValue = sparkline.y()(data[data.length-1], data.length-1);\n\n //------------------------------------------------------------\n\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x = sparkline.xScale();\n y = sparkline.yScale();\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-sparklineplus').data([data]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-sparklineplus');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-sparklineWrap');\n gEnter.append('g').attr('class', 'nv-valueWrap');\n gEnter.append('g').attr('class', 'nv-hoverArea');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Main Chart Component(s)\n\n var sparklineWrap = g.select('.nv-sparklineWrap');\n\n sparkline\n .width(availableWidth)\n .height(availableHeight);\n\n sparklineWrap\n .call(sparkline);\n\n //------------------------------------------------------------\n\n\n var valueWrap = g.select('.nv-valueWrap');\n\n var value = valueWrap.selectAll('.nv-currentValue')\n .data([currentValue]);\n\n value.enter().append('text').attr('class', 'nv-currentValue')\n .attr('dx', rightAlignValue ? -8 : 8)\n .attr('dy', '.9em')\n .style('text-anchor', rightAlignValue ? 'end' : 'start');\n\n value\n .attr('x', availableWidth + (rightAlignValue ? margin.right : 0))\n .attr('y', alignValue ? function(d) { return y(d) } : 0)\n .style('fill', sparkline.color()(data[data.length-1], data.length-1))\n .text(yTickFormat(currentValue));\n\n\n\n gEnter.select('.nv-hoverArea').append('rect')\n .on('mousemove', sparklineHover)\n .on('click', function() { paused = !paused })\n .on('mouseout', function() { index = []; updateValueLine(); });\n //.on('mouseout', function() { index = null; updateValueLine(); });\n\n g.select('.nv-hoverArea rect')\n .attr('transform', function(d) { return 'translate(' + -margin.left + ',' + -margin.top + ')' })\n .attr('width', availableWidth + margin.left + margin.right)\n .attr('height', availableHeight + margin.top);\n\n\n\n function updateValueLine() { //index is currently global (within the chart), may or may not keep it that way\n if (paused) return;\n\n var hoverValue = g.selectAll('.nv-hoverValue').data(index)\n\n var hoverEnter = hoverValue.enter()\n .append('g').attr('class', 'nv-hoverValue')\n .style('stroke-opacity', 0)\n .style('fill-opacity', 0);\n\n hoverValue.exit()\n .transition().duration(250)\n .style('stroke-opacity', 0)\n .style('fill-opacity', 0)\n .remove();\n\n hoverValue\n .attr('transform', function(d) { return 'translate(' + x(sparkline.x()(data[d],d)) + ',0)' })\n .transition().duration(250)\n .style('stroke-opacity', 1)\n .style('fill-opacity', 1);\n\n if (!index.length) return;\n\n hoverEnter.append('line')\n .attr('x1', 0)\n .attr('y1', -margin.top)\n .attr('x2', 0)\n .attr('y2', availableHeight);\n\n\n hoverEnter.append('text').attr('class', 'nv-xValue')\n .attr('x', -6)\n .attr('y', -margin.top)\n .attr('text-anchor', 'end')\n .attr('dy', '.9em')\n\n\n g.select('.nv-hoverValue .nv-xValue')\n .text(xTickFormat(sparkline.x()(data[index[0]], index[0])));\n\n hoverEnter.append('text').attr('class', 'nv-yValue')\n .attr('x', 6)\n .attr('y', -margin.top)\n .attr('text-anchor', 'start')\n .attr('dy', '.9em')\n\n g.select('.nv-hoverValue .nv-yValue')\n .text(yTickFormat(sparkline.y()(data[index[0]], index[0])));\n\n }\n\n\n function sparklineHover() {\n if (paused) return;\n\n var pos = d3.mouse(this)[0] - margin.left;\n\n function getClosestIndex(data, x) {\n var distance = Math.abs(sparkline.x()(data[0], 0) - x);\n var closestIndex = 0;\n for (var i = 0; i < data.length; i++){\n if (Math.abs(sparkline.x()(data[i], i) - x) < distance) {\n distance = Math.abs(sparkline.x()(data[i], i) - x);\n closestIndex = i;\n }\n }\n return closestIndex;\n }\n\n index = [getClosestIndex(data, Math.round(x.invert(pos)))];\n\n updateValueLine();\n }\n\n });\n\n return chart;\n }\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.sparkline = sparkline;\n\n d3.rebind(chart, sparkline, 'x', 'y', 'xScale', 'yScale', 'color');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.xTickFormat = function(_) {\n if (!arguments.length) return xTickFormat;\n xTickFormat = _;\n return chart;\n };\n\n chart.yTickFormat = function(_) {\n if (!arguments.length) return yTickFormat;\n yTickFormat = _;\n return chart;\n };\n\n chart.showValue = function(_) {\n if (!arguments.length) return showValue;\n showValue = _;\n return chart;\n };\n\n chart.alignValue = function(_) {\n if (!arguments.length) return alignValue;\n alignValue = _;\n return chart;\n };\n\n chart.rightAlignValue = function(_) {\n if (!arguments.length) return rightAlignValue;\n rightAlignValue = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n //============================================================\n\n\n return chart;\n}\n\nnv.models.stackedArea = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var margin = {top: 0, right: 0, bottom: 0, left: 0}\n , width = 960\n , height = 500\n , color = nv.utils.defaultColor() // a function that computes the color\n , id = Math.floor(Math.random() * 100000) //Create semi-unique ID incase user doesn't selet one\n , getX = function(d) { return d.x } // accessor to get the x value from a data point\n , getY = function(d) { return d.y } // accessor to get the y value from a data point\n , style = 'stack'\n , offset = 'zero'\n , order = 'default'\n , interpolate = 'linear' // controls the line interpolation\n , clipEdge = false // if true, masks lines within x and y scale\n , x //can be accessed via chart.xScale()\n , y //can be accessed via chart.yScale()\n , scatter = nv.models.scatter()\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'areaClick', 'areaMouseover', 'areaMouseout')\n ;\n\n scatter\n .size(2.2) // default size\n .sizeDomain([2.2,2.2]) // all the same size by default\n ;\n\n /************************************\n * offset:\n * 'wiggle' (stream)\n * 'zero' (stacked)\n * 'expand' (normalize to 100%)\n * 'silhouette' (simple centered)\n *\n * order:\n * 'inside-out' (stream)\n * 'default' (input order)\n ************************************/\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var availableWidth = width - margin.left - margin.right,\n availableHeight = height - margin.top - margin.bottom,\n container = d3.select(this);\n\n //------------------------------------------------------------\n // Setup Scales\n\n x = scatter.xScale();\n y = scatter.yScale();\n\n //------------------------------------------------------------\n\n\n // Injecting point index into each point because d3.layout.stack().out does not give index\n data = data.map(function(aseries, i) {\n aseries.seriesIndex = i;\n aseries.values = aseries.values.map(function(d, j) {\n d.index = j;\n d.seriesIndex = i;\n return d;\n })\n return aseries;\n });\n\n var dataFiltered = data.filter(function(series) {\n return !series.disabled;\n });\n\n data = d3.layout.stack()\n .order(order)\n .offset(offset)\n .values(function(d) { return d.values }) //TODO: make values customizeable in EVERY model in this fashion\n .x(getX)\n .y(getY)\n .out(function(d, y0, y) {\n var yHeight = (getY(d) === 0) ? 0 : y;\n d.display = {\n y: yHeight,\n y0: y0\n };\n })\n (dataFiltered);\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-stackedarea').data([data]);\n var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-stackedarea');\n var defsEnter = wrapEnter.append('defs');\n var gEnter = wrapEnter.append('g');\n var g = wrap.select('g');\n\n gEnter.append('g').attr('class', 'nv-areaWrap');\n gEnter.append('g').attr('class', 'nv-scatterWrap');\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n //------------------------------------------------------------\n\n\n scatter\n .width(availableWidth)\n .height(availableHeight)\n .x(getX)\n .y(function(d) { return d.display.y + d.display.y0 })\n .forceY([0])\n .color(data.map(function(d,i) {\n return d.color || color(d, d.seriesIndex);\n }));\n\n\n var scatterWrap = g.select('.nv-scatterWrap')\n .datum(data);\n\n scatterWrap.call(scatter);\n\n defsEnter.append('clipPath')\n .attr('id', 'nv-edge-clip-' + id)\n .append('rect');\n\n wrap.select('#nv-edge-clip-' + id + ' rect')\n .attr('width', availableWidth)\n .attr('height', availableHeight);\n\n g .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + id + ')' : '');\n\n var area = d3.svg.area()\n .x(function(d,i) { return x(getX(d,i)) })\n .y0(function(d) {\n return y(d.display.y0)\n })\n .y1(function(d) {\n return y(d.display.y + d.display.y0)\n })\n .interpolate(interpolate);\n\n var zeroArea = d3.svg.area()\n .x(function(d,i) { return x(getX(d,i)) })\n .y0(function(d) { return y(d.display.y0) })\n .y1(function(d) { return y(d.display.y0) });\n\n\n var path = g.select('.nv-areaWrap').selectAll('path.nv-area')\n .data(function(d) { return d });\n\n path.enter().append('path').attr('class', function(d,i) { return 'nv-area nv-area-' + i })\n .attr('d', function(d,i){\n return zeroArea(d.values, d.seriesIndex);\n })\n .on('mouseover', function(d,i) {\n d3.select(this).classed('hover', true);\n dispatch.areaMouseover({\n point: d,\n series: d.key,\n pos: [d3.event.pageX, d3.event.pageY],\n seriesIndex: i\n });\n })\n .on('mouseout', function(d,i) {\n d3.select(this).classed('hover', false);\n dispatch.areaMouseout({\n point: d,\n series: d.key,\n pos: [d3.event.pageX, d3.event.pageY],\n seriesIndex: i\n });\n })\n .on('click', function(d,i) {\n d3.select(this).classed('hover', false);\n dispatch.areaClick({\n point: d,\n series: d.key,\n pos: [d3.event.pageX, d3.event.pageY],\n seriesIndex: i\n });\n })\n path.exit().transition()\n .attr('d', function(d,i) { return zeroArea(d.values,i) })\n .remove();\n path\n .style('fill', function(d,i){\n return d.color || color(d, d.seriesIndex)\n })\n .style('stroke', function(d,i){ return d.color || color(d, d.seriesIndex) });\n path.transition()\n .attr('d', function(d,i) {\n return area(d.values,i)\n });\n\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n scatter.dispatch.on('elementMouseover.area', function(e) {\n g.select('.nv-chart-' + id + ' .nv-area-' + e.seriesIndex).classed('hover', true);\n });\n scatter.dispatch.on('elementMouseout.area', function(e) {\n g.select('.nv-chart-' + id + ' .nv-area-' + e.seriesIndex).classed('hover', false);\n });\n\n //============================================================\n\n });\n\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n scatter.dispatch.on('elementClick.area', function(e) {\n dispatch.areaClick(e);\n })\n scatter.dispatch.on('elementMouseover.tooltip', function(e) {\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top],\n dispatch.tooltipShow(e);\n });\n scatter.dispatch.on('elementMouseout.tooltip', function(e) {\n dispatch.tooltipHide(e);\n });\n\n //============================================================\n\n\n //============================================================\n // Global getters and setters\n //------------------------------------------------------------\n\n chart.dispatch = dispatch;\n chart.scatter = scatter;\n\n d3.rebind(chart, scatter, 'interactive', 'size', 'xScale', 'yScale', 'zScale', 'xDomain', 'yDomain', 'xRange', 'yRange',\n 'sizeDomain', 'forceX', 'forceY', 'forceSize', 'clipVoronoi', 'useVoronoi','clipRadius','highlightPoint','clearHighlights');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.x = function(_) {\n if (!arguments.length) return getX;\n getX = d3.functor(_);\n return chart;\n };\n\n chart.y = function(_) {\n if (!arguments.length) return getY;\n getY = d3.functor(_);\n return chart;\n }\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\n margin.right = typeof _.right != 'undefined' ? _.right : margin.right;\n margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\n margin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.clipEdge = function(_) {\n if (!arguments.length) return clipEdge;\n clipEdge = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n return chart;\n };\n\n chart.offset = function(_) {\n if (!arguments.length) return offset;\n offset = _;\n return chart;\n };\n\n chart.order = function(_) {\n if (!arguments.length) return order;\n order = _;\n return chart;\n };\n\n //shortcut for offset + order\n chart.style = function(_) {\n if (!arguments.length) return style;\n style = _;\n\n switch (style) {\n case 'stack':\n chart.offset('zero');\n chart.order('default');\n break;\n case 'stream':\n chart.offset('wiggle');\n chart.order('inside-out');\n break;\n case 'stream-center':\n chart.offset('silhouette');\n chart.order('inside-out');\n break;\n case 'expand':\n chart.offset('expand');\n chart.order('default');\n break;\n }\n\n return chart;\n };\n\n chart.interpolate = function(_) {\n\t if (!arguments.length) return interpolate;\n\t interpolate = _;\n\t return chart;\n };\n //============================================================\n\n\n return chart;\n}\n\nnv.models.stackedAreaChart = function() {\n \"use strict\";\n //============================================================\n // Public Variables with Default Settings\n //------------------------------------------------------------\n\n var stacked = nv.models.stackedArea()\n , xAxis = nv.models.axis()\n , yAxis = nv.models.axis()\n , legend = nv.models.legend()\n , controls = nv.models.legend()\n , interactiveLayer = nv.interactiveGuideline()\n ;\n\n var margin = {top: 30, right: 25, bottom: 50, left: 60}\n , width = null\n , height = null\n , color = nv.utils.defaultColor() // a function that takes in d, i and returns color\n , showControls = true\n , showLegend = true\n , showXAxis = true\n , showYAxis = true\n , rightAlignYAxis = false\n , useInteractiveGuideline = false\n , tooltips = true\n , tooltip = function(key, x, y, e, graph) {\n return '<h3>' + key + '</h3>' +\n '<p>' + y + ' on ' + x + '</p>'\n }\n , x //can be accessed via chart.xScale()\n , y //can be accessed via chart.yScale()\n , yAxisTickFormat = d3.format(',.2f')\n , state = { style: stacked.style() }\n , defaultState = null\n , noData = 'No Data Available.'\n , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')\n , controlWidth = 250\n , cData = ['Stacked','Stream','Expanded']\n , transitionDuration = 250\n ;\n\n xAxis\n .orient('bottom')\n .tickPadding(7)\n ;\n yAxis\n .orient((rightAlignYAxis) ? 'right' : 'left')\n ;\n\n controls.updateState(false);\n //============================================================\n\n\n //============================================================\n // Private Variables\n //------------------------------------------------------------\n\n var showTooltip = function(e, offsetElement) {\n var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),\n top = e.pos[1] + ( offsetElement.offsetTop || 0),\n x = xAxis.tickFormat()(stacked.x()(e.point, e.pointIndex)),\n y = yAxis.tickFormat()(stacked.y()(e.point, e.pointIndex)),\n content = tooltip(e.series.key, x, y, e, chart);\n\n nv.tooltip.show([left, top], content, e.value < 0 ? 'n' : 's', null, offsetElement);\n };\n\n //============================================================\n\n\n function chart(selection) {\n selection.each(function(data) {\n var container = d3.select(this),\n that = this;\n\n var availableWidth = (width || parseInt(container.style('width')) || 960)\n - margin.left - margin.right,\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n\n chart.update = function() { container.transition().duration(transitionDuration).call(chart); };\n chart.container = this;\n\n //set state.disabled\n state.disabled = data.map(function(d) { return !!d.disabled });\n\n if (!defaultState) {\n var key;\n defaultState = {};\n for (key in state) {\n if (state[key] instanceof Array)\n defaultState[key] = state[key].slice(0);\n else\n defaultState[key] = state[key];\n }\n }\n\n //------------------------------------------------------------\n // Display No Data message if there's nothing to show.\n\n if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {\n var noDataText = container.selectAll('.nv-noData').data([noData]);\n\n noDataText.enter().append('text')\n .attr('class', 'nvd3 nv-noData')\n .attr('dy', '-.7em')\n .style('text-anchor', 'middle');\n\n noDataText\n .attr('x', margin.left + availableWidth / 2)\n .attr('y', margin.top + availableHeight / 2)\n .text(function(d) { return d });\n\n return chart;\n } else {\n container.selectAll('.nv-noData').remove();\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Scales\n\n x = stacked.xScale();\n y = stacked.yScale();\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup containers and skeleton of chart\n\n var wrap = container.selectAll('g.nv-wrap.nv-stackedAreaChart').data([data]);\n var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-stackedAreaChart').append('g');\n var g = wrap.select('g');\n\n gEnter.append(\"rect\").style(\"opacity\",0);\n gEnter.append('g').attr('class', 'nv-x nv-axis');\n gEnter.append('g').attr('class', 'nv-y nv-axis');\n gEnter.append('g').attr('class', 'nv-stackedWrap');\n gEnter.append('g').attr('class', 'nv-legendWrap');\n gEnter.append('g').attr('class', 'nv-controlsWrap');\n gEnter.append('g').attr('class', 'nv-interactive');\n\n g.select(\"rect\").attr(\"width\",availableWidth).attr(\"height\",availableHeight);\n //------------------------------------------------------------\n // Legend\n\n if (showLegend) {\n var legendWidth = (showControls) ? availableWidth - controlWidth : availableWidth;\n legend\n .width(legendWidth);\n\n g.select('.nv-legendWrap')\n .datum(data)\n .call(legend);\n\n if ( margin.top != legend.height()) {\n margin.top = legend.height();\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n }\n\n g.select('.nv-legendWrap')\n .attr('transform', 'translate(' + (availableWidth-legendWidth) + ',' + (-margin.top) +')');\n }\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Controls\n\n if (showControls) {\n var controlsData = [\n { key: 'Stacked', disabled: stacked.offset() != 'zero' },\n { key: 'Stream', disabled: stacked.offset() != 'wiggle' },\n { key: 'Expanded', disabled: stacked.offset() != 'expand' }\n ];\n\n controlWidth = (cData.length/3) * 260;\n\n controlsData = controlsData.filter(function(d) {\n return cData.indexOf(d.key) > -1;\n })\n\n controls\n .width( controlWidth )\n .color(['#444', '#444', '#444']);\n\n g.select('.nv-controlsWrap')\n .datum(controlsData)\n .call(controls);\n\n\n if ( margin.top != Math.max(controls.height(), legend.height()) ) {\n margin.top = Math.max(controls.height(), legend.height());\n availableHeight = (height || parseInt(container.style('height')) || 400)\n - margin.top - margin.bottom;\n }\n\n\n g.select('.nv-controlsWrap')\n .attr('transform', 'translate(0,' + (-margin.top) +')');\n }\n\n //------------------------------------------------------------\n\n\n wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n if (rightAlignYAxis) {\n g.select(\".nv-y.nv-axis\")\n .attr(\"transform\", \"translate(\" + availableWidth + \",0)\");\n }\n\n //------------------------------------------------------------\n // Main Chart Component(s)\n\n //------------------------------------------------------------\n //Set up interactive layer\n if (useInteractiveGuideline) {\n interactiveLayer\n .width(availableWidth)\n .height(availableHeight)\n .margin({left: margin.left, top: margin.top})\n .svgContainer(container)\n .xScale(x);\n wrap.select(\".nv-interactive\").call(interactiveLayer);\n }\n\n stacked\n .width(availableWidth)\n .height(availableHeight)\n\n var stackedWrap = g.select('.nv-stackedWrap')\n .datum(data);\n\n stackedWrap.transition().call(stacked);\n\n //------------------------------------------------------------\n\n\n //------------------------------------------------------------\n // Setup Axes\n\n if (showXAxis) {\n xAxis\n .scale(x)\n .ticks( availableWidth / 100 )\n .tickSize( -availableHeight, 0);\n\n g.select('.nv-x.nv-axis')\n .attr('transform', 'translate(0,' + availableHeight + ')');\n\n g.select('.nv-x.nv-axis')\n .transition().duration(0)\n .call(xAxis);\n }\n\n if (showYAxis) {\n yAxis\n .scale(y)\n .ticks(stacked.offset() == 'wiggle' ? 0 : availableHeight / 36)\n .tickSize(-availableWidth, 0)\n .setTickFormat(stacked.offset() == 'expand' ? d3.format('%') : yAxisTickFormat);\n\n g.select('.nv-y.nv-axis')\n .transition().duration(0)\n .call(yAxis);\n }\n\n //------------------------------------------------------------\n\n\n //============================================================\n // Event Handling/Dispatching (in chart's scope)\n //------------------------------------------------------------\n\n stacked.dispatch.on('areaClick.toggle', function(e) {\n if (data.filter(function(d) { return !d.disabled }).length === 1)\n data = data.map(function(d) {\n d.disabled = false;\n return d\n });\n else\n data = data.map(function(d,i) {\n d.disabled = (i != e.seriesIndex);\n return d\n });\n\n state.disabled = data.map(function(d) { return !!d.disabled });\n dispatch.stateChange(state);\n\n chart.update();\n });\n\n legend.dispatch.on('stateChange', function(newState) {\n state.disabled = newState.disabled;\n dispatch.stateChange(state);\n chart.update();\n });\n\n controls.dispatch.on('legendClick', function(d,i) {\n if (!d.disabled) return;\n\n controlsData = controlsData.map(function(s) {\n s.disabled = true;\n return s;\n });\n d.disabled = false;\n\n switch (d.key) {\n case 'Stacked':\n stacked.style('stack');\n break;\n case 'Stream':\n stacked.style('stream');\n break;\n case 'Expanded':\n stacked.style('expand');\n break;\n }\n\n state.style = stacked.style();\n dispatch.stateChange(state);\n\n chart.update();\n });\n\n\n interactiveLayer.dispatch.on('elementMousemove', function(e) {\n stacked.clearHighlights();\n var singlePoint, pointIndex, pointXLocation, allData = [];\n data\n .filter(function(series, i) {\n series.seriesIndex = i;\n return !series.disabled;\n })\n .forEach(function(series,i) {\n pointIndex = nv.interactiveBisect(series.values, e.pointXValue, chart.x());\n stacked.highlightPoint(i, pointIndex, true);\n var point = series.values[pointIndex];\n if (typeof point === 'undefined') return;\n if (typeof singlePoint === 'undefined') singlePoint = point;\n if (typeof pointXLocation === 'undefined') pointXLocation = chart.xScale()(chart.x()(point,pointIndex));\n allData.push({\n key: series.key,\n value: chart.y()(point, pointIndex),\n color: color(series,series.seriesIndex)\n });\n });\n\n var xValue = xAxis.tickFormat()(chart.x()(singlePoint,pointIndex));\n interactiveLayer.tooltip\n .position({left: pointXLocation + margin.left, top: e.mouseY + margin.top})\n .chartContainer(that.parentNode)\n .enabled(tooltips)\n .valueFormatter(function(d,i) {\n return yAxis.tickFormat()(d);\n })\n .data(\n {\n value: xValue,\n series: allData\n }\n )();\n\n interactiveLayer.renderGuideLine(pointXLocation);\n\n });\n\n interactiveLayer.dispatch.on(\"elementMouseout\",function(e) {\n dispatch.tooltipHide();\n stacked.clearHighlights();\n });\n\n\n dispatch.on('tooltipShow', function(e) {\n if (tooltips) showTooltip(e, that.parentNode);\n });\n\n // Update chart from a state object passed to event handler\n dispatch.on('changeState', function(e) {\n\n if (typeof e.disabled !== 'undefined') {\n data.forEach(function(series,i) {\n series.disabled = e.disabled[i];\n });\n\n state.disabled = e.disabled;\n }\n\n if (typeof e.style !== 'undefined') {\n stacked.style(e.style);\n }\n\n chart.update();\n });\n\n });\n\n\n return chart;\n }\n\n\n //============================================================\n // Event Handling/Dispatching (out of chart's scope)\n //------------------------------------------------------------\n\n stacked.dispatch.on('tooltipShow', function(e) {\n//disable tooltips when value ~= 0\n//// TODO: consider removing points from voronoi that have 0 value instead of this hack\n/*\n if (!Math.round(stacked.y()(e.point) * 100)) { // 100 will not be good for very small numbers... will have to think about making this valu dynamic, based on data range\n setTimeout(function() { d3.selectAll('.point.hover').classed('hover', false) }, 0);\n return false;\n }\n */\n\n e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top],\n dispatch.tooltipShow(e);\n });\n\n stacked.dispatch.on('tooltipHide', function(e) {\n dispatch.tooltipHide(e);\n });\n\n dispatch.on('tooltipHide', function() {\n if (tooltips) nv.tooltip.cleanup();\n });\n\n //============================================================\n\n\n //============================================================\n // Expose Public Variables\n //------------------------------------------------------------\n\n // expose chart's sub-components\n chart.dispatch = dispatch;\n chart.stacked = stacked;\n chart.legend = legend;\n chart.controls = controls;\n chart.xAxis = xAxis;\n chart.yAxis = yAxis;\n chart.interactiveLayer = interactiveLayer;\n\n d3.rebind(chart, stacked, 'x', 'y', 'size', 'xScale', 'yScale', 'xDomain', 'yDomain', 'xRange', 'yRange', 'sizeDomain', 'interactive', 'useVoronoi', 'offset', 'order', 'style', 'clipEdge', 'forceX', 'forceY', 'forceSize', 'interpolate');\n\n chart.options = nv.utils.optionsFunc.bind(chart);\n\n chart.margin = function(_) {\n if (!arguments.length) return margin;\n margin.top = typeof _.top != 'undefined' ? _.top : margin.top;\nmargin.right = typeof _.right != 'undefined' ? _.right : margin.right;\nmargin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;\nmargin.left = typeof _.left != 'undefined' ? _.left : margin.left;\n return chart;\n };\n\n chart.width = function(_) {\n if (!arguments.length) return width;\n width = _;\n return chart;\n };\n\n chart.height = function(_) {\n if (!arguments.length) return height;\n height = _;\n return chart;\n };\n\n chart.color = function(_) {\n if (!arguments.length) return color;\n color = nv.utils.getColor(_);\n legend.color(color);\n stacked.color(color);\n return chart;\n };\n\n chart.showControls = function(_) {\n if (!arguments.length) return showControls;\n showControls = _;\n return chart;\n };\n\n chart.showLegend = function(_) {\n if (!arguments.length) return showLegend;\n showLegend = _;\n return chart;\n };\n\n chart.showXAxis = function(_) {\n if (!arguments.length) return showXAxis;\n showXAxis = _;\n return chart;\n };\n\n chart.showYAxis = function(_) {\n if (!arguments.length) return showYAxis;\n showYAxis = _;\n return chart;\n };\n\n chart.rightAlignYAxis = function(_) {\n if(!arguments.length) return rightAlignYAxis;\n rightAlignYAxis = _;\n yAxis.orient( (_) ? 'right' : 'left');\n return chart;\n };\n\n chart.useInteractiveGuideline = function(_) {\n if(!arguments.length) return useInteractiveGuideline;\n useInteractiveGuideline = _;\n if (_ === true) {\n chart.interactive(false);\n chart.useVoronoi(false);\n }\n return chart;\n };\n\n chart.tooltip = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.tooltips = function(_) {\n if (!arguments.length) return tooltips;\n tooltips = _;\n return chart;\n };\n\n chart.tooltipContent = function(_) {\n if (!arguments.length) return tooltip;\n tooltip = _;\n return chart;\n };\n\n chart.state = function(_) {\n if (!arguments.length) return state;\n state = _;\n return chart;\n };\n\n chart.defaultState = function(_) {\n if (!arguments.length) return defaultState;\n defaultState = _;\n return chart;\n };\n\n chart.noData = function(_) {\n if (!arguments.length) return noData;\n noData = _;\n return chart;\n };\n\n chart.transitionDuration = function(_) {\n if (!arguments.length) return transitionDuration;\n transitionDuration = _;\n return chart;\n };\n\n chart.controlsData = function(_) {\n if (!arguments.length) return cData;\n cData = _;\n return chart;\n };\n\n yAxis.setTickFormat = yAxis.tickFormat;\n\n yAxis.tickFormat = function(_) {\n if (!arguments.length) return yAxisTickFormat;\n yAxisTickFormat = _;\n return yAxis;\n };\n\n\n //============================================================\n\n return chart;\n}\n})();\n\n\treturn d3;\n\n});\n","import 'angular/core/services';\nimport 'angular/core/services/repositories.service';\nimport 'angular/rest/monitoring.rest.service';\nimport 'lib/nvd3/nv.d3';\n\nconst modules = [\n 'ui.bootstrap',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.rest.monitoring.service',\n 'toastr'\n];\n\nconst resourcesCtrl = angular.module('graphdb.framework.jmx.resources.controllers', modules);\n\nresourcesCtrl.controller('ResourcesCtrl', ['$scope', 'toastr', '$interval', '$timeout', 'MonitoringRestService', '$translate',\n function ($scope, toastr, $interval, $timeout, MonitoringRestService, $translate) {\n $scope.data = {\n classCount: [{\n key: $translate.instant('resource.classes'),\n values: []\n }],\n cpuLoad: [{\n key: $translate.instant('resource.system.cpu.load'),\n values: []\n }],\n memoryUsage: [{\n key: $translate.instant('resource.used.memory'),\n values: []\n }],\n threadCount: [{\n key: $translate.instant('resource.thread.count'),\n values: []\n }]\n };\n $scope.firstLoad = true;\n $scope.activeTab = 'memory';\n $scope.error = '';\n $scope.loader = true;\n $scope.garbadgeCollectorLoader = false;\n $scope.getResourcesData = function () {\n if ($scope.error) {\n return;\n }\n MonitoringRestService.monitorResources().success(function (data) {\n if (data) {\n if ($scope.data.classCount[0].values.length === 100) {\n $scope.clearData();\n }\n\n const timestamp = new Date();\n\n if ($scope.firstLoad) {\n $scope.firstLoad = false;\n $scope.data.classCount[0].values.push([timestamp, data.classCount * 2]);\n $scope.data.cpuLoad[0].values.push([timestamp, (parseFloat(data.cpuLoad)).toFixed(2) * 2]);\n $scope.data.memoryUsage[0].values.push([timestamp, (data.heapMemoryUsage.used / 1000000000).toFixed(2) * 2]);\n $scope.data.threadCount[0].values.push([timestamp, data.threadCount * 2]);\n const timer = $timeout(function () {\n $scope.loader = false;\n }, 500);\n $scope.$on('$destroy', function () {\n $timeout.cancel(timer);\n });\n }\n\n if (!$scope.firstLoad) {\n if (data.classCount > $scope.data.classCount[0].values[0][1]) {\n $scope.data.classCount[0].values[0][1] = data.classCount * 2;\n }\n if (parseFloat(data.cpuLoad) > $scope.data.cpuLoad[0].values[0][1]) {\n if (parseFloat(data.cpuLoad) > 50) {\n $scope.data.cpuLoad[0].values[0][1] = 100;\n } else {\n $scope.data.cpuLoad[0].values[0][1] = (parseFloat(data.cpuLoad)).toFixed(2) * 2;\n }\n }\n if ((data.heapMemoryUsage.used / 1000000000) > $scope.data.memoryUsage[0].values[0][1]) {\n $scope.data.memoryUsage[0].values[0][1] = (data.heapMemoryUsage.used / 1000000000).toFixed(2) * 2;\n }\n if (data.threadCount > $scope.data.threadCount[0].values[0][1]) {\n $scope.data.threadCount[0].values[0][1] = data.threadCount * 2;\n }\n }\n $scope.data.classCount[0].values.push([timestamp, data.classCount]);\n $scope.data.cpuLoad[0].values.push([timestamp, (parseFloat(data.cpuLoad)).toFixed(4)]);\n $scope.data.memoryUsage[0].values.push([timestamp, (data.heapMemoryUsage.used / 1000000000).toFixed(4)]);\n $scope.data.threadCount[0].values.push([timestamp, data.threadCount]);\n }\n\n }).error(function (data) {\n $scope.error = getError(data);\n $scope.loader = false;\n });\n };\n\n $scope.clearData = function () {\n $scope.data.classCount[0].values = $scope.data.classCount[0].values.slice(50);\n $scope.data.classCount[0].values[0][0] = $scope.data.classCount[0].values[1][0];\n $scope.data.classCount[0].values[0][1] = $scope.data.classCount[0].values[1][1] * 2;\n\n $scope.data.cpuLoad[0].values = $scope.data.cpuLoad[0].values.slice(50);\n $scope.data.cpuLoad[0].values[0][0] = $scope.data.cpuLoad[0].values[1][0];\n $scope.data.cpuLoad[0].values[0][1] = (parseFloat($scope.data.cpuLoad[0].values[1][1])).toFixed(2) * 2;\n\n $scope.data.memoryUsage[0].values = $scope.data.memoryUsage[0].values.slice(50);\n $scope.data.memoryUsage[0].values[0][0] = $scope.data.memoryUsage[0].values[1][0];\n $scope.data.memoryUsage[0].values[0][1] = (parseFloat($scope.data.memoryUsage[0].values[1][1])).toFixed(2) * 2;\n\n $scope.data.threadCount[0].values = $scope.data.threadCount[0].values.slice(50);\n $scope.data.threadCount[0].values[0][0] = $scope.data.threadCount[0].values[1][0];\n $scope.data.threadCount[0].values[0][1] = $scope.data.threadCount[0].values[1][1] * 2;\n };\n\n const timer = $interval(function () {\n $scope.getResourcesData();\n }, 2000);\n\n $scope.$on('$destroy', function () {\n $interval.cancel(timer);\n });\n\n $scope.chartConfig = {refreshDataOnly: true};\n $scope.chartOptions = {\n chart: {\n type: 'stackedAreaChart',\n height: 500,\n width: 1000,\n margin: {\n top: 40,\n right: 40,\n bottom: 60,\n left: 100\n },\n x: function (d) {\n return d[0];\n },\n y: function (d) {\n return d[1];\n },\n clipEdge: true,\n noData: 'No Data Available.',\n showControls: false,\n rightAlignYAxis: false,\n transitionDuration: 500,\n useVoronoi: false,\n useInteractiveGuideline: true,\n xAxis: {\n showMaxMin: false,\n tickFormat: function (d) {\n return d3.time.format('%X')(new Date(d));\n }\n },\n yAxis: {\n showMaxMin: false,\n tickFormat: function (d) {\n return d;\n }\n }\n }\n };\n $scope.chartMemoryOptions = angular.copy($scope.chartOptions);\n $scope.chartMemoryOptions.chart.yAxis.tickFormat = function (d) {\n return d + ' GB';\n };\n $scope.chartCPUOptions = angular.copy($scope.chartOptions);\n $scope.chartCPUOptions.chart.yAxis.tickFormat = function (d) {\n return d + '%';\n };\n\n $scope.garbadgeCollector = function () {\n\n $scope.garbadgeCollectorLoader = true;\n MonitoringRestService.monitorGC().success(function () {\n toastr.success($translate.instant('resources.garbage.collection.done'));\n $scope.garbadgeCollectorLoader = false;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n $scope.garbadgeCollectorLoader = false;\n });\n };\n }]);\n"],"sourceRoot":""}
|