From fba0c3af5835e4f06e1969e74daee753f9891d06 Mon Sep 17 00:00:00 2001 From: Andrew Kostka Date: Tue, 5 Nov 2024 09:52:48 +0000 Subject: [PATCH 1/2] Remove graph extension --- .../wbstack/src/Settings/LocalSettings.php | 1 - dist/wbstack/src/Settings/LocalSettings.php | 1 - pacman.yaml | 22 ------------------- wikiman.yaml | 2 -- 4 files changed, 26 deletions(-) diff --git a/dist-persist/wbstack/src/Settings/LocalSettings.php b/dist-persist/wbstack/src/Settings/LocalSettings.php index 54d2c05a2..ce9301684 100644 --- a/dist-persist/wbstack/src/Settings/LocalSettings.php +++ b/dist-persist/wbstack/src/Settings/LocalSettings.php @@ -350,7 +350,6 @@ wfLoadExtension( 'SecureLinkFixer' ); wfLoadExtension( 'Echo' ); wfLoadExtension( 'Thanks' ); -wfLoadExtension( 'Graph' ); wfLoadExtension( 'Poem' ); wfLoadExtension( 'TemplateData' ); wfLoadExtension( 'AdvancedSearch' ); diff --git a/dist/wbstack/src/Settings/LocalSettings.php b/dist/wbstack/src/Settings/LocalSettings.php index 54d2c05a2..ce9301684 100644 --- a/dist/wbstack/src/Settings/LocalSettings.php +++ b/dist/wbstack/src/Settings/LocalSettings.php @@ -350,7 +350,6 @@ wfLoadExtension( 'SecureLinkFixer' ); wfLoadExtension( 'Echo' ); wfLoadExtension( 'Thanks' ); -wfLoadExtension( 'Graph' ); wfLoadExtension( 'Poem' ); wfLoadExtension( 'TemplateData' ); wfLoadExtension( 'AdvancedSearch' ); diff --git a/pacman.yaml b/pacman.yaml index adde03534..ff9920464 100644 --- a/pacman.yaml +++ b/pacman.yaml @@ -754,28 +754,6 @@ - .rubocop_todo.yml - Gruntfile.js - Doxyfile -- name: Graph - artifactUrl: https://codeload.github.com/wikimedia/mediawiki-extensions-Graph/zip/c42809e2aeb89e4ce6907fabbdefba2142cd93ff - artifactLevel: 1 - destination: ./dist/extensions/Graph - remove: - - tests - - .github - - .stylelintignore - - .nvmrc - - .eslintignore - - .phan - - .storybook - - .vscode - - .gitignore - - .eslintrc.json - - .gitreview - - .phpcs.xml - - .stylelintrc.json - - .rubocop.yml - - .rubocop_todo.yml - - Gruntfile.js - - Doxyfile - name: Poem artifactUrl: https://codeload.github.com/wikimedia/mediawiki-extensions-Poem/zip/0363845b702ae141289f284c25f1e3c173c9843c artifactLevel: 1 diff --git a/wikiman.yaml b/wikiman.yaml index 2aa014c75..2ebda6d8f 100644 --- a/wikiman.yaml +++ b/wikiman.yaml @@ -92,8 +92,6 @@ extensions: repoName: wikimedia/mediawiki-extensions-SecureLinkFixer - name: Echo repoName: wikimedia/mediawiki-extensions-Echo - - name: Graph - repoName: wikimedia/mediawiki-extensions-Graph - name: Poem repoName: wikimedia/mediawiki-extensions-Poem - name: TemplateData From 5d10cf0ee12827351c69ce1e0a2e3fc6b961d666 Mon Sep 17 00:00:00 2001 From: Andrew Kostka Date: Tue, 5 Nov 2024 10:17:02 +0000 Subject: [PATCH 2/2] Run sync script --- dist/extensions/Graph/CODE_OF_CONDUCT.md | 1 - dist/extensions/Graph/Graph.alias.php | 33 - dist/extensions/Graph/LICENSE | 22 - dist/extensions/Graph/README.md | 2 - dist/extensions/Graph/composer.json | 22 - dist/extensions/Graph/extension.json | 211 - dist/extensions/Graph/i18n/af.json | 30 - dist/extensions/Graph/i18n/api/af.json | 8 - dist/extensions/Graph/i18n/api/ar.json | 17 - dist/extensions/Graph/i18n/api/as.json | 8 - dist/extensions/Graph/i18n/api/ast.json | 17 - dist/extensions/Graph/i18n/api/bn.json | 8 - dist/extensions/Graph/i18n/api/cs.json | 11 - dist/extensions/Graph/i18n/api/cv.json | 8 - dist/extensions/Graph/i18n/api/da.json | 9 - dist/extensions/Graph/i18n/api/de.json | 19 - dist/extensions/Graph/i18n/api/en.json | 20 - dist/extensions/Graph/i18n/api/es.json | 18 - dist/extensions/Graph/i18n/api/eu.json | 8 - dist/extensions/Graph/i18n/api/fa.json | 13 - dist/extensions/Graph/i18n/api/fr.json | 22 - dist/extensions/Graph/i18n/api/gl.json | 18 - dist/extensions/Graph/i18n/api/he.json | 18 - dist/extensions/Graph/i18n/api/hsb.json | 8 - dist/extensions/Graph/i18n/api/hu.json | 13 - dist/extensions/Graph/i18n/api/ia.json | 17 - dist/extensions/Graph/i18n/api/id.json | 18 - dist/extensions/Graph/i18n/api/ilo.json | 12 - dist/extensions/Graph/i18n/api/it.json | 9 - dist/extensions/Graph/i18n/api/ja.json | 18 - dist/extensions/Graph/i18n/api/ko.json | 15 - dist/extensions/Graph/i18n/api/lb.json | 9 - dist/extensions/Graph/i18n/api/lt.json | 10 - dist/extensions/Graph/i18n/api/mk.json | 17 - dist/extensions/Graph/i18n/api/ml.json | 9 - dist/extensions/Graph/i18n/api/mr.json | 8 - dist/extensions/Graph/i18n/api/nb.json | 17 - dist/extensions/Graph/i18n/api/nl.json | 16 - dist/extensions/Graph/i18n/api/pl.json | 19 - dist/extensions/Graph/i18n/api/pt-br.json | 19 - dist/extensions/Graph/i18n/api/pt.json | 17 - dist/extensions/Graph/i18n/api/qqq.json | 21 - dist/extensions/Graph/i18n/api/ro.json | 10 - dist/extensions/Graph/i18n/api/roa-tara.json | 17 - dist/extensions/Graph/i18n/api/ru.json | 18 - dist/extensions/Graph/i18n/api/sh-latn.json | 9 - dist/extensions/Graph/i18n/api/sh.json | 10 - dist/extensions/Graph/i18n/api/sl.json | 17 - dist/extensions/Graph/i18n/api/sr-ec.json | 9 - dist/extensions/Graph/i18n/api/sr-el.json | 7 - dist/extensions/Graph/i18n/api/sv.json | 19 - dist/extensions/Graph/i18n/api/th.json | 9 - dist/extensions/Graph/i18n/api/tr.json | 19 - dist/extensions/Graph/i18n/api/uk.json | 19 - dist/extensions/Graph/i18n/api/zh-hans.json | 18 - dist/extensions/Graph/i18n/api/zh-hant.json | 18 - dist/extensions/Graph/i18n/ar.json | 46 - dist/extensions/Graph/i18n/as.json | 12 - dist/extensions/Graph/i18n/ast.json | 44 - dist/extensions/Graph/i18n/av.json | 13 - dist/extensions/Graph/i18n/az.json | 10 - dist/extensions/Graph/i18n/be-tarask.json | 29 - dist/extensions/Graph/i18n/be.json | 17 - dist/extensions/Graph/i18n/bg.json | 19 - dist/extensions/Graph/i18n/bn.json | 44 - dist/extensions/Graph/i18n/bs.json | 40 - dist/extensions/Graph/i18n/ca.json | 36 - dist/extensions/Graph/i18n/ce.json | 21 - dist/extensions/Graph/i18n/ceb.json | 8 - dist/extensions/Graph/i18n/ckb.json | 9 - dist/extensions/Graph/i18n/cs.json | 47 - dist/extensions/Graph/i18n/da.json | 24 - dist/extensions/Graph/i18n/de.json | 48 - dist/extensions/Graph/i18n/diq.json | 12 - dist/extensions/Graph/i18n/dty.json | 15 - dist/extensions/Graph/i18n/el.json | 42 - dist/extensions/Graph/i18n/en-gb.json | 8 - dist/extensions/Graph/i18n/en.json | 46 - dist/extensions/Graph/i18n/eo.json | 10 - dist/extensions/Graph/i18n/es.json | 48 - dist/extensions/Graph/i18n/et.json | 39 - dist/extensions/Graph/i18n/eu.json | 16 - dist/extensions/Graph/i18n/fa.json | 44 - dist/extensions/Graph/i18n/fi.json | 19 - dist/extensions/Graph/i18n/fr.json | 54 - dist/extensions/Graph/i18n/fy.json | 8 - dist/extensions/Graph/i18n/ga.json | 8 - dist/extensions/Graph/i18n/gl.json | 44 - dist/extensions/Graph/i18n/gu.json | 10 - dist/extensions/Graph/i18n/he.json | 44 - dist/extensions/Graph/i18n/hr.json | 36 - dist/extensions/Graph/i18n/hu.json | 43 - dist/extensions/Graph/i18n/hy.json | 32 - dist/extensions/Graph/i18n/hyw.json | 12 - dist/extensions/Graph/i18n/ia.json | 43 - dist/extensions/Graph/i18n/id.json | 43 - dist/extensions/Graph/i18n/ilo.json | 41 - dist/extensions/Graph/i18n/io.json | 12 - dist/extensions/Graph/i18n/is.json | 26 - dist/extensions/Graph/i18n/it.json | 43 - dist/extensions/Graph/i18n/ja.json | 50 - dist/extensions/Graph/i18n/ka.json | 21 - dist/extensions/Graph/i18n/kk-cyrl.json | 17 - dist/extensions/Graph/i18n/km.json | 27 - dist/extensions/Graph/i18n/kn.json | 8 - dist/extensions/Graph/i18n/ko.json | 48 - dist/extensions/Graph/i18n/ks-arab.json | 8 - dist/extensions/Graph/i18n/ksh.json | 22 - dist/extensions/Graph/i18n/ku-latn.json | 10 - dist/extensions/Graph/i18n/ky.json | 10 - dist/extensions/Graph/i18n/lb.json | 37 - dist/extensions/Graph/i18n/lez.json | 8 - dist/extensions/Graph/i18n/lfn.json | 9 - dist/extensions/Graph/i18n/lij.json | 8 - dist/extensions/Graph/i18n/lld.json | 8 - dist/extensions/Graph/i18n/lmo.json | 8 - dist/extensions/Graph/i18n/lt.json | 35 - dist/extensions/Graph/i18n/lv.json | 19 - dist/extensions/Graph/i18n/mk.json | 43 - dist/extensions/Graph/i18n/ml.json | 30 - dist/extensions/Graph/i18n/mn.json | 8 - dist/extensions/Graph/i18n/mr.json | 23 - dist/extensions/Graph/i18n/mt.json | 8 - dist/extensions/Graph/i18n/mwl.json | 12 - dist/extensions/Graph/i18n/my.json | 28 - dist/extensions/Graph/i18n/nb.json | 44 - dist/extensions/Graph/i18n/nds-nl.json | 9 - dist/extensions/Graph/i18n/ne.json | 10 - dist/extensions/Graph/i18n/nl.json | 46 - dist/extensions/Graph/i18n/nn.json | 13 - dist/extensions/Graph/i18n/oc.json | 10 - dist/extensions/Graph/i18n/or.json | 9 - dist/extensions/Graph/i18n/pam.json | 10 - dist/extensions/Graph/i18n/pl.json | 49 - dist/extensions/Graph/i18n/pnb.json | 9 - dist/extensions/Graph/i18n/ps.json | 20 - dist/extensions/Graph/i18n/pt-br.json | 45 - dist/extensions/Graph/i18n/pt.json | 47 - dist/extensions/Graph/i18n/qqq.json | 48 - dist/extensions/Graph/i18n/ro.json | 43 - dist/extensions/Graph/i18n/roa-tara.json | 43 - dist/extensions/Graph/i18n/ru.json | 48 - dist/extensions/Graph/i18n/scn.json | 11 - dist/extensions/Graph/i18n/sco.json | 10 - dist/extensions/Graph/i18n/sd.json | 21 - dist/extensions/Graph/i18n/se.json | 8 - dist/extensions/Graph/i18n/shn.json | 15 - dist/extensions/Graph/i18n/sk.json | 14 - dist/extensions/Graph/i18n/sl.json | 43 - dist/extensions/Graph/i18n/smn.json | 8 - dist/extensions/Graph/i18n/sms.json | 10 - dist/extensions/Graph/i18n/sq.json | 41 - dist/extensions/Graph/i18n/sr-ec.json | 43 - dist/extensions/Graph/i18n/sr-el.json | 42 - dist/extensions/Graph/i18n/sv.json | 49 - dist/extensions/Graph/i18n/sw.json | 9 - dist/extensions/Graph/i18n/szy.json | 9 - dist/extensions/Graph/i18n/ta.json | 23 - dist/extensions/Graph/i18n/tcy.json | 12 - dist/extensions/Graph/i18n/te.json | 12 - dist/extensions/Graph/i18n/th.json | 16 - dist/extensions/Graph/i18n/tl.json | 13 - dist/extensions/Graph/i18n/tr.json | 50 - dist/extensions/Graph/i18n/tt-cyrl.json | 27 - dist/extensions/Graph/i18n/uk.json | 49 - dist/extensions/Graph/i18n/ur.json | 8 - dist/extensions/Graph/i18n/uz.json | 23 - dist/extensions/Graph/i18n/vec.json | 8 - dist/extensions/Graph/i18n/vi.json | 43 - dist/extensions/Graph/i18n/xmf.json | 11 - dist/extensions/Graph/i18n/yo.json | 8 - dist/extensions/Graph/i18n/yue-hant.json | 8 - dist/extensions/Graph/i18n/yue.json | 8 - dist/extensions/Graph/i18n/zh-hans.json | 45 - dist/extensions/Graph/i18n/zh-hant.json | 45 - dist/extensions/Graph/includes/ApiGraph.php | 186 - dist/extensions/Graph/includes/DataModule.php | 37 - dist/extensions/Graph/includes/Hooks.php | 39 - dist/extensions/Graph/includes/ParserTag.php | 267 - dist/extensions/Graph/includes/Sandbox.php | 50 - .../extensions/Graph/includes/ajax-loader.gif | Bin 2214 -> 0 bytes dist/extensions/Graph/lib/d3-global.js | 2 - dist/extensions/Graph/lib/d3.js | 9554 ------- dist/extensions/Graph/lib/d3.layout.cloud.js | 505 - dist/extensions/Graph/lib/graph2.compiled.js | 692 - .../lib/jquery.splitter/jquery.splitter.css | 57 - .../lib/jquery.splitter/jquery.splitter.js | 307 - dist/extensions/Graph/lib/vega1/vega.js | 11003 -------- dist/extensions/Graph/lib/vega2/vega.js | 22092 ---------------- dist/extensions/Graph/modules/.eslintrc.json | 12 - dist/extensions/Graph/modules/graph-loader.js | 45 - .../extensions/Graph/modules/graph.sandbox.js | 75 - dist/extensions/Graph/modules/graph1.js | 26 - dist/extensions/Graph/modules/graph2.js | 108 - .../Graph/modules/ve-graph/.eslintrc.json | 5 - .../Graph/modules/ve-graph/graph.svg | 7 - .../modules/ve-graph/tests/.eslintrc.json | 9 - .../tests/ext.graph.visualEditor.test.js | 522 - .../modules/ve-graph/ve.ce.MWGraphNode.css | 16 - .../modules/ve-graph/ve.ce.MWGraphNode.js | 184 - .../modules/ve-graph/ve.dm.MWGraphModel.js | 532 - .../modules/ve-graph/ve.dm.MWGraphNode.js | 266 - .../modules/ve-graph/ve.ui.MWGraphDialog.js | 584 - .../ve-graph/ve.ui.MWGraphDialogTool.js | 39 - .../modules/ve-graph/ve.ui.MWGraphIcons.css | 11 - dist/extensions/Graph/package-lock.json | 10824 -------- dist/extensions/Graph/package.json | 24 - dist/extensions/Graph/styles/common.less | 39 - dist/extensions/Graph/styles/sandbox.css | 13 - 209 files changed, 62161 deletions(-) delete mode 100644 dist/extensions/Graph/CODE_OF_CONDUCT.md delete mode 100644 dist/extensions/Graph/Graph.alias.php delete mode 100644 dist/extensions/Graph/LICENSE delete mode 100644 dist/extensions/Graph/README.md delete mode 100644 dist/extensions/Graph/composer.json delete mode 100644 dist/extensions/Graph/extension.json delete mode 100644 dist/extensions/Graph/i18n/af.json delete mode 100644 dist/extensions/Graph/i18n/api/af.json delete mode 100644 dist/extensions/Graph/i18n/api/ar.json delete mode 100644 dist/extensions/Graph/i18n/api/as.json delete mode 100644 dist/extensions/Graph/i18n/api/ast.json delete mode 100644 dist/extensions/Graph/i18n/api/bn.json delete mode 100644 dist/extensions/Graph/i18n/api/cs.json delete mode 100644 dist/extensions/Graph/i18n/api/cv.json delete mode 100644 dist/extensions/Graph/i18n/api/da.json delete mode 100644 dist/extensions/Graph/i18n/api/de.json delete mode 100644 dist/extensions/Graph/i18n/api/en.json delete mode 100644 dist/extensions/Graph/i18n/api/es.json delete mode 100644 dist/extensions/Graph/i18n/api/eu.json delete mode 100644 dist/extensions/Graph/i18n/api/fa.json delete mode 100644 dist/extensions/Graph/i18n/api/fr.json delete mode 100644 dist/extensions/Graph/i18n/api/gl.json delete mode 100644 dist/extensions/Graph/i18n/api/he.json delete mode 100644 dist/extensions/Graph/i18n/api/hsb.json delete mode 100644 dist/extensions/Graph/i18n/api/hu.json delete mode 100644 dist/extensions/Graph/i18n/api/ia.json delete mode 100644 dist/extensions/Graph/i18n/api/id.json delete mode 100644 dist/extensions/Graph/i18n/api/ilo.json delete mode 100644 dist/extensions/Graph/i18n/api/it.json delete mode 100644 dist/extensions/Graph/i18n/api/ja.json delete mode 100644 dist/extensions/Graph/i18n/api/ko.json delete mode 100644 dist/extensions/Graph/i18n/api/lb.json delete mode 100644 dist/extensions/Graph/i18n/api/lt.json delete mode 100644 dist/extensions/Graph/i18n/api/mk.json delete mode 100644 dist/extensions/Graph/i18n/api/ml.json delete mode 100644 dist/extensions/Graph/i18n/api/mr.json delete mode 100644 dist/extensions/Graph/i18n/api/nb.json delete mode 100644 dist/extensions/Graph/i18n/api/nl.json delete mode 100644 dist/extensions/Graph/i18n/api/pl.json delete mode 100644 dist/extensions/Graph/i18n/api/pt-br.json delete mode 100644 dist/extensions/Graph/i18n/api/pt.json delete mode 100644 dist/extensions/Graph/i18n/api/qqq.json delete mode 100644 dist/extensions/Graph/i18n/api/ro.json delete mode 100644 dist/extensions/Graph/i18n/api/roa-tara.json delete mode 100644 dist/extensions/Graph/i18n/api/ru.json delete mode 100644 dist/extensions/Graph/i18n/api/sh-latn.json delete mode 100644 dist/extensions/Graph/i18n/api/sh.json delete mode 100644 dist/extensions/Graph/i18n/api/sl.json delete mode 100644 dist/extensions/Graph/i18n/api/sr-ec.json delete mode 100644 dist/extensions/Graph/i18n/api/sr-el.json delete mode 100644 dist/extensions/Graph/i18n/api/sv.json delete mode 100644 dist/extensions/Graph/i18n/api/th.json delete mode 100644 dist/extensions/Graph/i18n/api/tr.json delete mode 100644 dist/extensions/Graph/i18n/api/uk.json delete mode 100644 dist/extensions/Graph/i18n/api/zh-hans.json delete mode 100644 dist/extensions/Graph/i18n/api/zh-hant.json delete mode 100644 dist/extensions/Graph/i18n/ar.json delete mode 100644 dist/extensions/Graph/i18n/as.json delete mode 100644 dist/extensions/Graph/i18n/ast.json delete mode 100644 dist/extensions/Graph/i18n/av.json delete mode 100644 dist/extensions/Graph/i18n/az.json delete mode 100644 dist/extensions/Graph/i18n/be-tarask.json delete mode 100644 dist/extensions/Graph/i18n/be.json delete mode 100644 dist/extensions/Graph/i18n/bg.json delete mode 100644 dist/extensions/Graph/i18n/bn.json delete mode 100644 dist/extensions/Graph/i18n/bs.json delete mode 100644 dist/extensions/Graph/i18n/ca.json delete mode 100644 dist/extensions/Graph/i18n/ce.json delete mode 100644 dist/extensions/Graph/i18n/ceb.json delete mode 100644 dist/extensions/Graph/i18n/ckb.json delete mode 100644 dist/extensions/Graph/i18n/cs.json delete mode 100644 dist/extensions/Graph/i18n/da.json delete mode 100644 dist/extensions/Graph/i18n/de.json delete mode 100644 dist/extensions/Graph/i18n/diq.json delete mode 100644 dist/extensions/Graph/i18n/dty.json delete mode 100644 dist/extensions/Graph/i18n/el.json delete mode 100644 dist/extensions/Graph/i18n/en-gb.json delete mode 100644 dist/extensions/Graph/i18n/en.json delete mode 100644 dist/extensions/Graph/i18n/eo.json delete mode 100644 dist/extensions/Graph/i18n/es.json delete mode 100644 dist/extensions/Graph/i18n/et.json delete mode 100644 dist/extensions/Graph/i18n/eu.json delete mode 100644 dist/extensions/Graph/i18n/fa.json delete mode 100644 dist/extensions/Graph/i18n/fi.json delete mode 100644 dist/extensions/Graph/i18n/fr.json delete mode 100644 dist/extensions/Graph/i18n/fy.json delete mode 100644 dist/extensions/Graph/i18n/ga.json delete mode 100644 dist/extensions/Graph/i18n/gl.json delete mode 100644 dist/extensions/Graph/i18n/gu.json delete mode 100644 dist/extensions/Graph/i18n/he.json delete mode 100644 dist/extensions/Graph/i18n/hr.json delete mode 100644 dist/extensions/Graph/i18n/hu.json delete mode 100644 dist/extensions/Graph/i18n/hy.json delete mode 100644 dist/extensions/Graph/i18n/hyw.json delete mode 100644 dist/extensions/Graph/i18n/ia.json delete mode 100644 dist/extensions/Graph/i18n/id.json delete mode 100644 dist/extensions/Graph/i18n/ilo.json delete mode 100644 dist/extensions/Graph/i18n/io.json delete mode 100644 dist/extensions/Graph/i18n/is.json delete mode 100644 dist/extensions/Graph/i18n/it.json delete mode 100644 dist/extensions/Graph/i18n/ja.json delete mode 100644 dist/extensions/Graph/i18n/ka.json delete mode 100644 dist/extensions/Graph/i18n/kk-cyrl.json delete mode 100644 dist/extensions/Graph/i18n/km.json delete mode 100644 dist/extensions/Graph/i18n/kn.json delete mode 100644 dist/extensions/Graph/i18n/ko.json delete mode 100644 dist/extensions/Graph/i18n/ks-arab.json delete mode 100644 dist/extensions/Graph/i18n/ksh.json delete mode 100644 dist/extensions/Graph/i18n/ku-latn.json delete mode 100644 dist/extensions/Graph/i18n/ky.json delete mode 100644 dist/extensions/Graph/i18n/lb.json delete mode 100644 dist/extensions/Graph/i18n/lez.json delete mode 100644 dist/extensions/Graph/i18n/lfn.json delete mode 100644 dist/extensions/Graph/i18n/lij.json delete mode 100644 dist/extensions/Graph/i18n/lld.json delete mode 100644 dist/extensions/Graph/i18n/lmo.json delete mode 100644 dist/extensions/Graph/i18n/lt.json delete mode 100644 dist/extensions/Graph/i18n/lv.json delete mode 100644 dist/extensions/Graph/i18n/mk.json delete mode 100644 dist/extensions/Graph/i18n/ml.json delete mode 100644 dist/extensions/Graph/i18n/mn.json delete mode 100644 dist/extensions/Graph/i18n/mr.json delete mode 100644 dist/extensions/Graph/i18n/mt.json delete mode 100644 dist/extensions/Graph/i18n/mwl.json delete mode 100644 dist/extensions/Graph/i18n/my.json delete mode 100644 dist/extensions/Graph/i18n/nb.json delete mode 100644 dist/extensions/Graph/i18n/nds-nl.json delete mode 100644 dist/extensions/Graph/i18n/ne.json delete mode 100644 dist/extensions/Graph/i18n/nl.json delete mode 100644 dist/extensions/Graph/i18n/nn.json delete mode 100644 dist/extensions/Graph/i18n/oc.json delete mode 100644 dist/extensions/Graph/i18n/or.json delete mode 100644 dist/extensions/Graph/i18n/pam.json delete mode 100644 dist/extensions/Graph/i18n/pl.json delete mode 100644 dist/extensions/Graph/i18n/pnb.json delete mode 100644 dist/extensions/Graph/i18n/ps.json delete mode 100644 dist/extensions/Graph/i18n/pt-br.json delete mode 100644 dist/extensions/Graph/i18n/pt.json delete mode 100644 dist/extensions/Graph/i18n/qqq.json delete mode 100644 dist/extensions/Graph/i18n/ro.json delete mode 100644 dist/extensions/Graph/i18n/roa-tara.json delete mode 100644 dist/extensions/Graph/i18n/ru.json delete mode 100644 dist/extensions/Graph/i18n/scn.json delete mode 100644 dist/extensions/Graph/i18n/sco.json delete mode 100644 dist/extensions/Graph/i18n/sd.json delete mode 100644 dist/extensions/Graph/i18n/se.json delete mode 100644 dist/extensions/Graph/i18n/shn.json delete mode 100644 dist/extensions/Graph/i18n/sk.json delete mode 100644 dist/extensions/Graph/i18n/sl.json delete mode 100644 dist/extensions/Graph/i18n/smn.json delete mode 100644 dist/extensions/Graph/i18n/sms.json delete mode 100644 dist/extensions/Graph/i18n/sq.json delete mode 100644 dist/extensions/Graph/i18n/sr-ec.json delete mode 100644 dist/extensions/Graph/i18n/sr-el.json delete mode 100644 dist/extensions/Graph/i18n/sv.json delete mode 100644 dist/extensions/Graph/i18n/sw.json delete mode 100644 dist/extensions/Graph/i18n/szy.json delete mode 100644 dist/extensions/Graph/i18n/ta.json delete mode 100644 dist/extensions/Graph/i18n/tcy.json delete mode 100644 dist/extensions/Graph/i18n/te.json delete mode 100644 dist/extensions/Graph/i18n/th.json delete mode 100644 dist/extensions/Graph/i18n/tl.json delete mode 100644 dist/extensions/Graph/i18n/tr.json delete mode 100644 dist/extensions/Graph/i18n/tt-cyrl.json delete mode 100644 dist/extensions/Graph/i18n/uk.json delete mode 100644 dist/extensions/Graph/i18n/ur.json delete mode 100644 dist/extensions/Graph/i18n/uz.json delete mode 100644 dist/extensions/Graph/i18n/vec.json delete mode 100644 dist/extensions/Graph/i18n/vi.json delete mode 100644 dist/extensions/Graph/i18n/xmf.json delete mode 100644 dist/extensions/Graph/i18n/yo.json delete mode 100644 dist/extensions/Graph/i18n/yue-hant.json delete mode 100644 dist/extensions/Graph/i18n/yue.json delete mode 100644 dist/extensions/Graph/i18n/zh-hans.json delete mode 100644 dist/extensions/Graph/i18n/zh-hant.json delete mode 100644 dist/extensions/Graph/includes/ApiGraph.php delete mode 100644 dist/extensions/Graph/includes/DataModule.php delete mode 100644 dist/extensions/Graph/includes/Hooks.php delete mode 100644 dist/extensions/Graph/includes/ParserTag.php delete mode 100644 dist/extensions/Graph/includes/Sandbox.php delete mode 100644 dist/extensions/Graph/includes/ajax-loader.gif delete mode 100644 dist/extensions/Graph/lib/d3-global.js delete mode 100644 dist/extensions/Graph/lib/d3.js delete mode 100644 dist/extensions/Graph/lib/d3.layout.cloud.js delete mode 100644 dist/extensions/Graph/lib/graph2.compiled.js delete mode 100644 dist/extensions/Graph/lib/jquery.splitter/jquery.splitter.css delete mode 100644 dist/extensions/Graph/lib/jquery.splitter/jquery.splitter.js delete mode 100644 dist/extensions/Graph/lib/vega1/vega.js delete mode 100644 dist/extensions/Graph/lib/vega2/vega.js delete mode 100644 dist/extensions/Graph/modules/.eslintrc.json delete mode 100644 dist/extensions/Graph/modules/graph-loader.js delete mode 100644 dist/extensions/Graph/modules/graph.sandbox.js delete mode 100644 dist/extensions/Graph/modules/graph1.js delete mode 100644 dist/extensions/Graph/modules/graph2.js delete mode 100644 dist/extensions/Graph/modules/ve-graph/.eslintrc.json delete mode 100644 dist/extensions/Graph/modules/ve-graph/graph.svg delete mode 100644 dist/extensions/Graph/modules/ve-graph/tests/.eslintrc.json delete mode 100644 dist/extensions/Graph/modules/ve-graph/tests/ext.graph.visualEditor.test.js delete mode 100644 dist/extensions/Graph/modules/ve-graph/ve.ce.MWGraphNode.css delete mode 100644 dist/extensions/Graph/modules/ve-graph/ve.ce.MWGraphNode.js delete mode 100644 dist/extensions/Graph/modules/ve-graph/ve.dm.MWGraphModel.js delete mode 100644 dist/extensions/Graph/modules/ve-graph/ve.dm.MWGraphNode.js delete mode 100644 dist/extensions/Graph/modules/ve-graph/ve.ui.MWGraphDialog.js delete mode 100644 dist/extensions/Graph/modules/ve-graph/ve.ui.MWGraphDialogTool.js delete mode 100644 dist/extensions/Graph/modules/ve-graph/ve.ui.MWGraphIcons.css delete mode 100644 dist/extensions/Graph/package-lock.json delete mode 100644 dist/extensions/Graph/package.json delete mode 100644 dist/extensions/Graph/styles/common.less delete mode 100644 dist/extensions/Graph/styles/sandbox.css diff --git a/dist/extensions/Graph/CODE_OF_CONDUCT.md b/dist/extensions/Graph/CODE_OF_CONDUCT.md deleted file mode 100644 index 498acf76f..000000000 --- a/dist/extensions/Graph/CODE_OF_CONDUCT.md +++ /dev/null @@ -1 +0,0 @@ -The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct). diff --git a/dist/extensions/Graph/Graph.alias.php b/dist/extensions/Graph/Graph.alias.php deleted file mode 100644 index f5dedd7e5..000000000 --- a/dist/extensions/Graph/Graph.alias.php +++ /dev/null @@ -1,33 +0,0 @@ - [ 'GraphSandbox' ], -]; - -/** Czech (čeština) */ -$specialPageAliases['cs'] = [ - 'GraphSandbox' => [ 'Pískoviště_grafů' ], -]; - -/** Serbian Cyrillic (српски (ћирилица)) */ -$specialPageAliases['sr-ec'] = [ - 'GraphSandbox' => [ 'ПесакЗаГрафиконе' ], -]; - -/** Serbian Latin (srpski (latinica)) */ -$specialPageAliases['sr-el'] = [ - 'GraphSandbox' => [ 'PesakZaGrafikone' ], -]; - -/** Urdu (اردو) */ -$specialPageAliases['ur'] = [ - 'GraphSandbox' => [ 'گراف_کا_تختہ_مشق' ], -]; diff --git a/dist/extensions/Graph/LICENSE b/dist/extensions/Graph/LICENSE deleted file mode 100644 index e6f27c7ca..000000000 --- a/dist/extensions/Graph/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Dan Andreescu -Copyright (c) 2015 Yuri Astrakhan - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/dist/extensions/Graph/README.md b/dist/extensions/Graph/README.md deleted file mode 100644 index 0ca289314..000000000 --- a/dist/extensions/Graph/README.md +++ /dev/null @@ -1,2 +0,0 @@ -Graph is a MediaWiki extension that uses Vega JS to visualize almost arbitrary data in almost arbitrary ways. -See https://www.mediawiki.org/wiki/Extension:Graph diff --git a/dist/extensions/Graph/composer.json b/dist/extensions/Graph/composer.json deleted file mode 100644 index 22c8e117d..000000000 --- a/dist/extensions/Graph/composer.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "require-dev": { - "mediawiki/mediawiki-codesniffer": "39.0.0", - "mediawiki/mediawiki-phan-config": "0.11.1", - "mediawiki/minus-x": "1.1.1", - "php-parallel-lint/php-console-highlighter": "1.0.0", - "php-parallel-lint/php-parallel-lint": "1.3.2" - }, - "scripts": { - "fix": [ - "minus-x fix .", - "phpcbf" - ], - "test": [ - "parallel-lint . --exclude vendor --exclude node_modules", - "@phpcs", - "minus-x check ." - ], - "phan": "phan -d . --long-progress-bar", - "phpcs": "phpcs -sp --cache" - } -} diff --git a/dist/extensions/Graph/extension.json b/dist/extensions/Graph/extension.json deleted file mode 100644 index b1a43f088..000000000 --- a/dist/extensions/Graph/extension.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "name": "Graph", - "author": [ - "Dan Andreescu", - "Yuri Astrakhan", - "Frédéric Bolduc" - ], - "url": "https://www.mediawiki.org/wiki/Extension:Graph", - "descriptionmsg": "graph-desc", - "license-name": "MIT", - "type": "parserhook", - "requires": { - "MediaWiki": ">= 1.39.0" - }, - "MessagesDirs": { - "Graph": [ - "i18n", - "i18n/api" - ] - }, - "AutoloadNamespaces": { - "Graph\\": "includes/" - }, - "APIModules": { - "graph": { - "class": "Graph\\ApiGraph", - "services": [ - "Parser", - "MainWANObjectCache", - "WikiPageFactory" - ] - } - }, - "ResourceModules": { - "ext.graph.styles": { - "styles": [ - "styles/common.less" - ], - "targets": [ - "mobile", - "desktop" - ] - }, - "ext.graph.data": { - "class": "Graph\\DataModule" - }, - "ext.graph.loader": { - "scripts": [ - "modules/graph-loader.js" - ], - "dependencies": [ - "mediawiki.api" - ], - "targets": [ - "mobile", - "desktop" - ] - }, - "ext.graph.vega1": { - "scripts": [ - "lib/d3.js", - "lib/d3-global.js", - "lib/vega1/vega.js", - "modules/graph1.js" - ], - "dependencies": [ - "ext.graph.data", - "mediawiki.Uri" - ], - "targets": [ - "mobile", - "desktop" - ] - }, - "ext.graph.vega2": { - "scripts": [ - "lib/d3.js", - "lib/d3-global.js", - "lib/d3.layout.cloud.js", - "lib/vega2/vega.js", - "lib/graph2.compiled.js" - ], - "dependencies": [ - "ext.graph.data", - "mediawiki.Uri" - ], - "targets": [ - "mobile", - "desktop" - ] - }, - "ext.graph.sandbox": { - "scripts": [ - "lib/jquery.splitter/jquery.splitter.js", - "modules/graph.sandbox.js" - ], - "styles": [ - "lib/jquery.splitter/jquery.splitter.css", - "styles/sandbox.css" - ], - "dependencies": [ - "oojs-ui-core", - "mediawiki.confirmCloseWindow", - "ext.codeEditor", - "ext.graph.vega2" - ], - "targets": [ - "desktop" - ] - }, - "ext.graph.visualEditor": { - "scripts": [ - "modules/ve-graph/ve.ce.MWGraphNode.js", - "modules/ve-graph/ve.dm.MWGraphModel.js", - "modules/ve-graph/ve.dm.MWGraphNode.js", - "modules/ve-graph/ve.ui.MWGraphDialog.js", - "modules/ve-graph/ve.ui.MWGraphDialogTool.js" - ], - "styles": [ - "modules/ve-graph/ve.ce.MWGraphNode.css", - "modules/ve-graph/ve.ui.MWGraphIcons.css" - ], - "dependencies": [ - "oojs-ui.styles.icons-editing-advanced", - "ext.graph.data", - "ext.visualEditor.mwcore", - "ext.visualEditor.mwimage.core", - "mediawiki.widgets.Table" - ], - "messages": [ - "graph-ve-dialog-button-tooltip", - "graph-ve-dialog-edit-field-graph-type", - "graph-ve-dialog-edit-field-raw-json", - "graph-ve-dialog-edit-height", - "graph-ve-dialog-edit-json-invalid", - "graph-ve-dialog-edit-padding-auto", - "graph-ve-dialog-edit-padding-bottom", - "graph-ve-dialog-edit-padding-left", - "graph-ve-dialog-edit-padding-right", - "graph-ve-dialog-edit-padding-top", - "graph-ve-dialog-edit-page-data", - "graph-ve-dialog-edit-page-general", - "graph-ve-dialog-edit-page-raw", - "graph-ve-dialog-edit-size-field", - "graph-ve-dialog-edit-size-table-unit", - "graph-ve-dialog-edit-title", - "graph-ve-dialog-edit-type-area", - "graph-ve-dialog-edit-type-bar", - "graph-ve-dialog-edit-type-line", - "graph-ve-dialog-edit-type-unknown", - "graph-ve-dialog-edit-width", - "graph-ve-dialog-edit-unknown-graph-type-warning", - "graph-ve-empty-graph", - "graph-ve-no-spec", - "graph-ve-vega-error", - "graph-ve-vega-error-no-render" - ], - "targets": [ - "mobile", - "desktop" - ] - } - }, - "ResourceFileModulePaths": { - "localBasePath": "", - "remoteExtPath": "Graph" - }, - "QUnitTestModule": { - "localBasePath": "", - "remoteExtPath": "Graph", - "scripts": [ - "modules/ve-graph/tests/ext.graph.visualEditor.test.js" - ], - "dependencies": [ - "ext.graph.visualEditor", - "ext.graph.vega1", - "test.VisualEditor" - ] - }, - "Hooks": { - "ParserFirstCallInit": "Graph\\Hooks::onParserFirstCallInit", - "OutputPageParserOutput": "Graph\\Hooks::onOutputPageParserOutput" - }, - "attributes": { - "VisualEditor": { - "PluginModules": [ - "ext.graph.visualEditor" - ] - } - }, - "config": { - "GraphAllowedDomains": { - "value": [] - }, - "GraphDefaultVegaVer": { - "value": 2 - } - }, - "TrackingCategories": [ - "graph-tracking-category", - "graph-obsolete-category", - "graph-broken-category" - ], - "SpecialPages": { - "GraphSandbox": "Graph\\Sandbox" - }, - "ExtensionMessagesFiles": { - "GraphAliases": "Graph.alias.php" - }, - "manifest_version": 2 -} diff --git a/dist/extensions/Graph/i18n/af.json b/dist/extensions/Graph/i18n/af.json deleted file mode 100644 index 7e31ac893..000000000 --- a/dist/extensions/Graph/i18n/af.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Fwolff" - ] - }, - "graph-tracking-category": "Bladsye met grafieke", - "graph-tracking-category-desc": "Dié bladsy bevat 'n -etiket.", - "graph-broken-category": "Bladsye met gebreekte grafieke", - "graph-broken-category-desc": "Dié bladsy bevat 'n -etiket wat verkeerd gebruik is.", - "graph-obsolete-category-desc": "Dié bladsy bevat 'n -etiket wat bygewerk moet word na weergawe 2.", - "graph-error-empty-json": "Leë grafiekdata. Niks om te wys nie.", - "graph-ve-dialog-button-tooltip": "Grafiek", - "graph-ve-dialog-edit-field-graph-type": "Tipe grafiek", - "graph-ve-dialog-edit-height": "Hoogte", - "graph-ve-dialog-edit-padding-auto": "Outomatiese opvulling", - "graph-ve-dialog-edit-padding-bottom": "Onderaan", - "graph-ve-dialog-edit-padding-left": "Links", - "graph-ve-dialog-edit-padding-right": "Regs", - "graph-ve-dialog-edit-padding-top": "Boaan", - "graph-ve-dialog-edit-page-data": "Data", - "graph-ve-dialog-edit-page-general": "Algemeen", - "graph-ve-dialog-edit-page-raw": "Rou data", - "graph-ve-dialog-edit-size-field": "Grootte", - "graph-ve-dialog-edit-title": "Redigeer grafiek", - "graph-ve-dialog-edit-type-area": "Vlakdiagram", - "graph-ve-dialog-edit-type-bar": "Staafgrafiek", - "graph-ve-dialog-edit-type-line": "Lyngrafiek", - "graph-ve-dialog-edit-type-unknown": "Onbekende grafiektipe" -} diff --git a/dist/extensions/Graph/i18n/api/af.json b/dist/extensions/Graph/i18n/api/af.json deleted file mode 100644 index a2e92666e..000000000 --- a/dist/extensions/Graph/i18n/api/af.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Fwolff" - ] - }, - "apierror-graph-invalid": "Grafiek is nie geldig nie." -} diff --git a/dist/extensions/Graph/i18n/api/ar.json b/dist/extensions/Graph/i18n/api/ar.json deleted file mode 100644 index fa4654b3e..000000000 --- a/dist/extensions/Graph/i18n/api/ar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "@metadata": { - "authors": [ - "ديفيد" - ] - }, - "apihelp-graph-description": "وظيفة وسم الوصول إلى الرسوم البيانية.", - "apihelp-graph-summary": "وظيفة وسم الوصول إلى الرسوم البيانية.", - "apihelp-graph-example": "الحصول على الرسم البياني JSON بواسطة رمز الرقم والعنوان", - "apihelp-graph-param-hash": "قيمة رمز الرقم للرسم البياني", - "apihelp-graph-param-oldid": "معرف لمراجعة الصفحة مع الرسم البياني", - "apihelp-graph-param-title": "عنوان الصفحة مع الرسم البياني", - "apihelp-graph-param-text": "نص الرسم البياني ليتم تحويله إلى JSON، يجب نشره واستخدامه بدون وسائط العنوان ورمز الرقم", - "apierror-graph-mustposttext": "يجب أن يتم POSTed الطلب عندما يتم استخدام الوسيط text.", - "apierror-graph-invalid": "الرسم البياني غير صالح.", - "apierror-graph-missing": "لم يتم العثور على رسم بياني." -} diff --git a/dist/extensions/Graph/i18n/api/as.json b/dist/extensions/Graph/i18n/api/as.json deleted file mode 100644 index 232fd4a37..000000000 --- a/dist/extensions/Graph/i18n/api/as.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Simbu123" - ] - }, - "apierror-graph-invalid": "গ্ৰাফ বৈধ নহয়।" -} diff --git a/dist/extensions/Graph/i18n/api/ast.json b/dist/extensions/Graph/i18n/api/ast.json deleted file mode 100644 index bc1e9f1f9..000000000 --- a/dist/extensions/Graph/i18n/api/ast.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Xuacu" - ] - }, - "apihelp-graph-description": "Accesu a la función de la etiqueta graph.", - "apihelp-graph-summary": "Accesu a la función de la etiqueta graph.", - "apihelp-graph-example": "Algamar el JSON de la gráfica por función hash y títulu", - "apihelp-graph-param-hash": "Valor hash de la gráfica", - "apihelp-graph-param-oldid": "ID de la revisión de la páxina cola gráfica", - "apihelp-graph-param-title": "Títulu de la páxina cola gráfica", - "apihelp-graph-param-text": "Testu de la gráfica a convertir a JSON. Tien d'espublizase y usase sin títulu y parámetros hash", - "apierror-graph-mustposttext": "El pidimientu tien d'unviase pol métodu POST si s'utiliza el parámetru text.", - "apierror-graph-invalid": "La gráfica nun ye válida.", - "apierror-graph-missing": "Nun s'alcontró nenguna gráfica." -} diff --git a/dist/extensions/Graph/i18n/api/bn.json b/dist/extensions/Graph/i18n/api/bn.json deleted file mode 100644 index 52493cf82..000000000 --- a/dist/extensions/Graph/i18n/api/bn.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "আফতাবুজ্জামান" - ] - }, - "apihelp-graph-param-title": "গ্রাফসহ পাতার শিরোনাম" -} diff --git a/dist/extensions/Graph/i18n/api/cs.json b/dist/extensions/Graph/i18n/api/cs.json deleted file mode 100644 index e18c48f91..000000000 --- a/dist/extensions/Graph/i18n/api/cs.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Meliganai", - "Walter Klosse" - ] - }, - "apihelp-graph-param-title": "Titulek stránky s grafem", - "apierror-graph-invalid": "Graf není platný.", - "apierror-graph-missing": "Nenalezen žádný graf." -} diff --git a/dist/extensions/Graph/i18n/api/cv.json b/dist/extensions/Graph/i18n/api/cv.json deleted file mode 100644 index 92af3b811..000000000 --- a/dist/extensions/Graph/i18n/api/cv.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Chuvash" - ] - }, - "apierror-graph-missing": "Графикĕ тупăнмарĕ." -} diff --git a/dist/extensions/Graph/i18n/api/da.json b/dist/extensions/Graph/i18n/api/da.json deleted file mode 100644 index 27e89f54e..000000000 --- a/dist/extensions/Graph/i18n/api/da.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Saederup92" - ] - }, - "apierror-graph-invalid": "Grafen er ugyldig.", - "apierror-graph-missing": "Ingen graf blev fundet." -} diff --git a/dist/extensions/Graph/i18n/api/de.json b/dist/extensions/Graph/i18n/api/de.json deleted file mode 100644 index 618bf2809..000000000 --- a/dist/extensions/Graph/i18n/api/de.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Hwboehm", - "Metalhead64", - "Justman10000" - ] - }, - "apihelp-graph-description": "Greift auf die Funktionalität des Graph-Tags zu.", - "apihelp-graph-summary": "Greift auf die Funktionalität des Graph-Tags zu.", - "apihelp-graph-example": "Ruft das Grafik-JSON nach Prüfsumme und Titel ab", - "apihelp-graph-param-hash": "Prüfsummenwert des Diagramms", - "apihelp-graph-param-oldid": "ID der Revision der Seite mit der Grafik", - "apihelp-graph-param-title": "Titel der Seite mit dem Diagramm", - "apihelp-graph-param-text": "Text des Graphen, der in JSON umgewandelt werden soll. Muss ohne Titel und Hash-Parameter gepostet und verwendet werden.", - "apierror-graph-mustposttext": "Die Anfrage muss gePOSTet werden, wenn der Parameter text verwendet wird.", - "apierror-graph-invalid": "Das Diagramm ist nicht gültig.", - "apierror-graph-missing": "Keine Grafik gefunden." -} diff --git a/dist/extensions/Graph/i18n/api/en.json b/dist/extensions/Graph/i18n/api/en.json deleted file mode 100644 index 5e067a740..000000000 --- a/dist/extensions/Graph/i18n/api/en.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Dan Andreescu", - "Yuri Astrakhan", - "Frédéric Bolduc", - "Max Semenik" - ] - }, - "apihelp-graph-description": "Access graph tag functionality.", - "apihelp-graph-summary": "Access graph tag functionality.", - "apihelp-graph-example": "Get the graph JSON by hash and title", - "apihelp-graph-param-hash": "Hash value of the graph", - "apihelp-graph-param-oldid": "ID of the revision of the page with the graph", - "apihelp-graph-param-title": "Title of the page with the graph", - "apihelp-graph-param-text": "Text of the graph to be converted to JSON. Must be posted and used without title and hash parameters", - "apierror-graph-mustposttext": "Request must be POSTed when the text parameter is used.", - "apierror-graph-invalid": "Graph is not valid.", - "apierror-graph-missing": "No graph found." -} diff --git a/dist/extensions/Graph/i18n/api/es.json b/dist/extensions/Graph/i18n/api/es.json deleted file mode 100644 index fb6cc57b8..000000000 --- a/dist/extensions/Graph/i18n/api/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Dgstranz", - "Fitoschido", - "Macofe", - "McDutchie" - ] - }, - "apihelp-graph-description": "Acceso a la funcionalidad de la etiqueta «graph».", - "apihelp-graph-example": "Obtener el JSON del gráfico por «hash» y título", - "apihelp-graph-param-hash": "Valor de hash del gráfico", - "apihelp-graph-param-title": "Título de la página con el gráfico", - "apihelp-graph-param-text": "El texto del gráfico que se convertirá en JSON. Debe publicarse y utilizarse sin los parámetros de título y «hash»", - "apierror-graph-mustposttext": "La petición debe enviarse por el método POST si se ha utilizado el parámetro text.", - "apierror-graph-invalid": "El gráfico no es válido.", - "apierror-graph-missing": "No se encontró ningún gráfico." -} diff --git a/dist/extensions/Graph/i18n/api/eu.json b/dist/extensions/Graph/i18n/api/eu.json deleted file mode 100644 index 2e114c534..000000000 --- a/dist/extensions/Graph/i18n/api/eu.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Mikel Ibaiba" - ] - }, - "apihelp-graph-param-title": "Grafikodun orriaren izena" -} diff --git a/dist/extensions/Graph/i18n/api/fa.json b/dist/extensions/Graph/i18n/api/fa.json deleted file mode 100644 index 626b3906a..000000000 --- a/dist/extensions/Graph/i18n/api/fa.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Ladsgroup" - ] - }, - "apihelp-graph-description": "قابلیت دسترسی به تگ گراف.", - "apihelp-graph-summary": "قابلیت دسترسی به تگ گراف.", - "apihelp-graph-param-hash": "مقدار هش گراف", - "apihelp-graph-param-title": "عنوان صفحه با گراف", - "apierror-graph-invalid": "گراف معتبر نیست", - "apierror-graph-missing": "هیچ گرافی پیدا نشد" -} diff --git a/dist/extensions/Graph/i18n/api/fr.json b/dist/extensions/Graph/i18n/api/fr.json deleted file mode 100644 index a1d1dabf8..000000000 --- a/dist/extensions/Graph/i18n/api/fr.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Djiboun", - "Gomoko", - "Thibaut120094", - "Urhixidur", - "Wladek92", - "Verdy p" - ] - }, - "apihelp-graph-description": "Accéder à la fonctionnalité de balise graphique.", - "apihelp-graph-summary": "Accéder à la fonctionnalité de balise graphique.", - "apihelp-graph-example": "Obtenir le JSON du graphique par hachage et titre", - "apihelp-graph-param-hash": "Valeur de hachage du graphique", - "apihelp-graph-param-oldid": "Identifiant de révision de la page avec le graphe", - "apihelp-graph-param-title": "Titre de la page avec le graphique", - "apihelp-graph-param-text": "Texte du graphique à convertir en JSON. Doit être publié et utilisé sans les paramètres de titre ou de hachage.", - "apierror-graph-mustposttext": "La requête doit être effectuée avec la méthode POST quand le paramètre text est utilisé.", - "apierror-graph-invalid": "Le graphique n’est pas valide.", - "apierror-graph-missing": "Aucun graphique trouvé." -} diff --git a/dist/extensions/Graph/i18n/api/gl.json b/dist/extensions/Graph/i18n/api/gl.json deleted file mode 100644 index 610250385..000000000 --- a/dist/extensions/Graph/i18n/api/gl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Elisardojm", - "Toliño" - ] - }, - "apihelp-graph-description": "Acceder á funcionalidade de etiquetado de gráficos.", - "apihelp-graph-summary": "Acceder á funcionalidade de etiquetado de gráficos.", - "apihelp-graph-example": "Obter o JSON do gráfico por función hash e título", - "apihelp-graph-param-hash": "Valor hash do gráfico", - "apihelp-graph-param-oldid": "Identificador da revisión da páxina co gráfico", - "apihelp-graph-param-title": "Título da páxina co gráfico", - "apihelp-graph-param-text": "Texto do gráfico a converter a JSON. Debe ser enviado e usado sen título nin parámetros de resumo (hash)", - "apierror-graph-mustposttext": "A petición debe enviarse polo método POST se se usa o parámetro text.", - "apierror-graph-invalid": "O gráfico non é válido.", - "apierror-graph-missing": "Non se atopou ningún gráfico." -} diff --git a/dist/extensions/Graph/i18n/api/he.json b/dist/extensions/Graph/i18n/api/he.json deleted file mode 100644 index 32ea7b219..000000000 --- a/dist/extensions/Graph/i18n/api/he.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Amire80", - "Guycn2" - ] - }, - "apihelp-graph-description": "גישה לפונקצינליות של תגי graph.", - "apihelp-graph-summary": "גישה לפונקצינליות של תגי graph.", - "apihelp-graph-example": "קבלת ה־JSON של התרשים באמצעות גיבוב וכותרת", - "apihelp-graph-param-hash": "ערך הגיבוב של התרשים", - "apihelp-graph-param-oldid": "המזהה של גרסת הדף עם התרשים", - "apihelp-graph-param-title": "כותרת הדף עם התרשים", - "apihelp-graph-param-text": "טקסט התרשים שיומר ל־JSON. צריך להישלח ב־POST ולשמש בלי הפרמטרים title ו־hash", - "apierror-graph-mustposttext": "יש לשלוח את הבקשה כ־POST כאשר משמש הפרמטר text.", - "apierror-graph-invalid": "התרשים אינו תקין.", - "apierror-graph-missing": "לא נמצא תרשים." -} diff --git a/dist/extensions/Graph/i18n/api/hsb.json b/dist/extensions/Graph/i18n/api/hsb.json deleted file mode 100644 index 0a56ddd50..000000000 --- a/dist/extensions/Graph/i18n/api/hsb.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "J budissin" - ] - }, - "apierror-graph-missing": "Žana grafika namakana." -} diff --git a/dist/extensions/Graph/i18n/api/hu.json b/dist/extensions/Graph/i18n/api/hu.json deleted file mode 100644 index ade6085f9..000000000 --- a/dist/extensions/Graph/i18n/api/hu.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Tacsipacsi" - ] - }, - "apihelp-graph-description": "A graph címke funkcióinak elérése.", - "apihelp-graph-summary": "A graph címke funkcióinak elérése.", - "apihelp-graph-param-title": "A grafikont tartalmazó lap címe", - "apierror-graph-mustposttext": "A kérést POST-tal kell küldeni a text paraméter használatakor.", - "apierror-graph-invalid": "A grafikon nem érvényes.", - "apierror-graph-missing": "Nem található grafikon." -} diff --git a/dist/extensions/Graph/i18n/api/ia.json b/dist/extensions/Graph/i18n/api/ia.json deleted file mode 100644 index 68207b8dd..000000000 --- a/dist/extensions/Graph/i18n/api/ia.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "@metadata": { - "authors": [ - "McDutchie" - ] - }, - "apihelp-graph-description": "Acceder a functionalitate de etiquetta de graphico.", - "apihelp-graph-summary": "Acceder a functionalitate de etiquetta de graphico.", - "apihelp-graph-example": "Obtener le JSON del graphico per hash e titulo", - "apihelp-graph-param-hash": "Valor hash del graphico", - "apihelp-graph-param-oldid": "ID del version del pagina con le graphico", - "apihelp-graph-param-title": "Titulo del pagina con le graphico", - "apihelp-graph-param-text": "Texto del graphico a converter in JSON. Debe esser publicate e usate sin parametros de titulo e hash", - "apierror-graph-mustposttext": "Le requesta debe esser inviate con le methodo POST si le parametro text es usate.", - "apierror-graph-invalid": "Le graphico non es valide.", - "apierror-graph-missing": "Nulle graphic trovate." -} diff --git a/dist/extensions/Graph/i18n/api/id.json b/dist/extensions/Graph/i18n/api/id.json deleted file mode 100644 index 203899dd6..000000000 --- a/dist/extensions/Graph/i18n/api/id.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Daud I.F. Argana", - "William Surya Permana" - ] - }, - "apihelp-graph-description": "Akses fungsionalitas tag graph.", - "apihelp-graph-summary": "Akses fungsionalitas tag graph.", - "apihelp-graph-example": "Mengambil JSON bagan berdasarkan hash dan judul", - "apihelp-graph-param-hash": "Nilai hash dari bagan", - "apihelp-graph-param-oldid": "ID revisi halaman yang memiliki graf", - "apihelp-graph-param-title": "Judul halaman dengan bagan", - "apihelp-graph-param-text": "Teks dari bagan yang ingin dikonversi ke JSON. Harus dikirimkan dan digunakan tanpa parameter judul dan hash", - "apierror-graph-mustposttext": "Permintaan harus dikirimkan dengan metode POST saat parameter text digunakan.", - "apierror-graph-invalid": "Bagan tidak sah.", - "apierror-graph-missing": "Tidak ada bagan." -} diff --git a/dist/extensions/Graph/i18n/api/ilo.json b/dist/extensions/Graph/i18n/api/ilo.json deleted file mode 100644 index af8f4c108..000000000 --- a/dist/extensions/Graph/i18n/api/ilo.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Lam-ang" - ] - }, - "apihelp-graph-description": "Serrekan ti pagannongan ti etiketa ti grapo.", - "apihelp-graph-example": "Alaen ti grapo ti JSON babaen ti hash ken titulo", - "apihelp-graph-param-hash": "Pateg ti hash iti grapo", - "apihelp-graph-param-title": "Titulo ti panid nga agraman iti grapo", - "apihelp-graph-param-text": "Teksto ti grapo a mabaliwanto iti JSON. Nasken a maipablaak ken mausar nga awanan iti titulo ken dagiti parametro ti hash" -} diff --git a/dist/extensions/Graph/i18n/api/it.json b/dist/extensions/Graph/i18n/api/it.json deleted file mode 100644 index 43c5b95ed..000000000 --- a/dist/extensions/Graph/i18n/api/it.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Beta16" - ] - }, - "apihelp-graph-param-title": "Titolo della pagina con il grafico", - "apihelp-graph-param-text": "Testo del grafico da convertire in JSON. Deve essere pubblicato e utilizzato senza titolo e parametri hash" -} diff --git a/dist/extensions/Graph/i18n/api/ja.json b/dist/extensions/Graph/i18n/api/ja.json deleted file mode 100644 index dcbf16cab..000000000 --- a/dist/extensions/Graph/i18n/api/ja.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Higa4", - "Yusuke1109" - ] - }, - "apihelp-graph-description": "グラフタグの機能にアクセス。", - "apihelp-graph-summary": "グラフタグの機能にアクセス。", - "apihelp-graph-example": "グラフのJSONをハッシュとタイトルで取得", - "apihelp-graph-param-hash": "グラフのハッシュ値", - "apihelp-graph-param-oldid": "グラフがあるページの版のID", - "apihelp-graph-param-title": "グラフがあるページのタイトル", - "apihelp-graph-param-text": "JSONに変換されるべきグラフのテキスト。タイトルやハッシュパラメータは無しでポストして使います。", - "apierror-graph-mustposttext": "リクエストはテキストパラメータが使用された際にポストされなければなりません。", - "apierror-graph-invalid": "グラフが無効です。", - "apierror-graph-missing": "グラフが見つかりません。" -} diff --git a/dist/extensions/Graph/i18n/api/ko.json b/dist/extensions/Graph/i18n/api/ko.json deleted file mode 100644 index 0c907d361..000000000 --- a/dist/extensions/Graph/i18n/api/ko.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Ykhwong" - ] - }, - "apihelp-graph-description": "그래프 태그 기능에 접근합니다.", - "apihelp-graph-summary": "그래프 태그 기능에 접근합니다.", - "apihelp-graph-example": "hash와 title로 그래프 JSON을 가져옵니다", - "apihelp-graph-param-hash": "그래프의 해시값", - "apihelp-graph-param-title": "그래프가 있는 문서의 제목", - "apihelp-graph-param-text": "JSON으로 변환할 그래프의 텍스트입니다. 제목과 해시 변수 없이 게시하여 사용되어야 합니다", - "apierror-graph-invalid": "그래프가 유효하지 않습니다.", - "apierror-graph-missing": "그래프가 없습니다." -} diff --git a/dist/extensions/Graph/i18n/api/lb.json b/dist/extensions/Graph/i18n/api/lb.json deleted file mode 100644 index ab9dbd65c..000000000 --- a/dist/extensions/Graph/i18n/api/lb.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Robby" - ] - }, - "apihelp-graph-param-title": "Titel vun der Säit mam Grafik", - "apierror-graph-missing": "Keng Grafik fonnt." -} diff --git a/dist/extensions/Graph/i18n/api/lt.json b/dist/extensions/Graph/i18n/api/lt.json deleted file mode 100644 index 53ee17e3b..000000000 --- a/dist/extensions/Graph/i18n/api/lt.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Eitvys200" - ] - }, - "apihelp-graph-param-title": "Puslapio su grafiku pavadinimas", - "apierror-graph-invalid": "Grafikas negalimas.", - "apierror-graph-missing": "Grafikas nerastas." -} diff --git a/dist/extensions/Graph/i18n/api/mk.json b/dist/extensions/Graph/i18n/api/mk.json deleted file mode 100644 index 2fd36bdb4..000000000 --- a/dist/extensions/Graph/i18n/api/mk.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Bjankuloski06" - ] - }, - "apihelp-graph-description": "Пристап до функцијата за ознаки за графикони.", - "apihelp-graph-summary": "Пристап до функцијата за ознаки за графикони.", - "apihelp-graph-example": "Дај JSON за графикон по тараба и наслов", - "apihelp-graph-param-hash": "Тарабна вредност на графиконот", - "apihelp-graph-param-oldid": "Назнака на преработката на страницата со графиконот", - "apihelp-graph-param-title": "Наслов на страницата со графиконот", - "apihelp-graph-param-text": "Текст на графиконот што треба да се претвори во JSON. Мора да биде објавено и да се користи без параметри за наслов и тарабни параметри", - "apierror-graph-mustposttext": "Барањето мора да биде објавено кога се користи параметарот text.", - "apierror-graph-invalid": "Графиконот е неважечки.", - "apierror-graph-missing": "Не пронајдов ниеден графикон." -} diff --git a/dist/extensions/Graph/i18n/api/ml.json b/dist/extensions/Graph/i18n/api/ml.json deleted file mode 100644 index b8c5fe7bc..000000000 --- a/dist/extensions/Graph/i18n/api/ml.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Praveenp" - ] - }, - "apierror-graph-invalid": "ഗ്രാഫ് സാധുതയുള്ളതല്ല.", - "apierror-graph-missing": "ഗ്രാഫ് കണ്ടെത്താനായില്ല." -} diff --git a/dist/extensions/Graph/i18n/api/mr.json b/dist/extensions/Graph/i18n/api/mr.json deleted file mode 100644 index eb5e5f7ac..000000000 --- a/dist/extensions/Graph/i18n/api/mr.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Rupalichinchure" - ] - }, - "apihelp-graph-param-title": "आलेखासह पृष्ठाचे शीर्षक" -} diff --git a/dist/extensions/Graph/i18n/api/nb.json b/dist/extensions/Graph/i18n/api/nb.json deleted file mode 100644 index 9990597f1..000000000 --- a/dist/extensions/Graph/i18n/api/nb.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Jon Harald Søby" - ] - }, - "apihelp-graph-description": "Få tilgang til graftaggfunksjonalitet.", - "apihelp-graph-summary": "Få tilgang til graftaggfunksjonalitet.", - "apihelp-graph-example": "Hent graf-JSON-en med hash og tittel", - "apihelp-graph-param-hash": "Hash-verdien til grafen", - "apihelp-graph-param-oldid": "ID-en til sideversjonen av siden med grafen", - "apihelp-graph-param-title": "Tittelen til siden med grafen", - "apihelp-graph-param-text": "Tekst i grafen som skal konverteres til JSON. Måpostes og brukes uten tittel- og hash-parameterne.", - "apierror-graph-mustposttext": "Forespørselen må POSTes når text-parameteren brukes.", - "apierror-graph-invalid": "Grafen er ugyldig.", - "apierror-graph-missing": "Ingen graf funnet." -} diff --git a/dist/extensions/Graph/i18n/api/nl.json b/dist/extensions/Graph/i18n/api/nl.json deleted file mode 100644 index edf354eac..000000000 --- a/dist/extensions/Graph/i18n/api/nl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "@metadata": { - "authors": [ - "McDutchie" - ] - }, - "apihelp-graph-summary": "Toegang tot grafieklabel-functionaliteit.", - "apihelp-graph-example": "De JSON-grafiek ophalen aan de hand van hash en titel", - "apihelp-graph-param-hash": "Hashwaarde van de grafiek", - "apihelp-graph-param-oldid": "ID van de versie van de pagina met de grafiek", - "apihelp-graph-param-title": "Titel van de pagina met de grafiek", - "apihelp-graph-param-text": "Tekst van de grafiek die naar JSON moet worden omgezet. Moet worden gePOST en gebruikt zonder de parameters ‘title’ en ‘hash’", - "apierror-graph-mustposttext": "Het verzoek moet worden gePOST wanneer de parameter text wordt gebruikt.", - "apierror-graph-invalid": "Grafiek is niet geldig.", - "apierror-graph-missing": "Geen grafiek gevonden." -} diff --git a/dist/extensions/Graph/i18n/api/pl.json b/dist/extensions/Graph/i18n/api/pl.json deleted file mode 100644 index ed4ba27da..000000000 --- a/dist/extensions/Graph/i18n/api/pl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Chrumps", - "Rail", - "Woytecr" - ] - }, - "apihelp-graph-description": "Dostęp do funkcjonalności znacznika graph.", - "apihelp-graph-summary": "Dostęp do funkcjonalności znacznika graph.", - "apihelp-graph-example": "Pobierz JSON wykresu według tytułu i hasha", - "apihelp-graph-param-hash": "Wartość hash grafu", - "apihelp-graph-param-oldid": "ID wersji strony zawierającej graf.", - "apihelp-graph-param-title": "Tytuł strony z wykresem", - "apihelp-graph-param-text": "Tekst graph to przekonwertowania na JSON. Musi zostać zapisane i używany bez tytułu ani parametrów hash", - "apierror-graph-mustposttext": "Żądanie musi być wysłane metodą POST, jeżeli używany jest parametr text.", - "apierror-graph-invalid": "Wykres jest nieprawidłowy.", - "apierror-graph-missing": "Nie znaleziono wykresu." -} diff --git a/dist/extensions/Graph/i18n/api/pt-br.json b/dist/extensions/Graph/i18n/api/pt-br.json deleted file mode 100644 index 7caf7c02c..000000000 --- a/dist/extensions/Graph/i18n/api/pt-br.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Eduardo Addad de Oliveira", - "Eduardoaddad", - "Felipe L. Ewald" - ] - }, - "apihelp-graph-description": "Acesse a funcionalidade da tag gráfica.", - "apihelp-graph-summary": "Acesse a funcionalidade da tag gráfica.", - "apihelp-graph-example": "Obter o gráfico JSON por hash e título", - "apihelp-graph-param-hash": "Valor de hash do gráfico", - "apihelp-graph-param-oldid": "ID da revisão da página com o gráfico", - "apihelp-graph-param-title": "Título da página com o gráfico", - "apihelp-graph-param-text": "Texto do gráfico a ser convertido em JSON. Deve ser postado e usado sem título e parâmetros de hash", - "apierror-graph-mustposttext": "O pedido deve ser POST quando o parâmetro text é usado.", - "apierror-graph-invalid": "Gráfico não é válido.", - "apierror-graph-missing": "Nenhum gráfico encontrado." -} diff --git a/dist/extensions/Graph/i18n/api/pt.json b/dist/extensions/Graph/i18n/api/pt.json deleted file mode 100644 index e902114c6..000000000 --- a/dist/extensions/Graph/i18n/api/pt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Hamilton Abreu" - ] - }, - "apihelp-graph-description": "Aceder à funcionalidade do elemento graph.", - "apihelp-graph-summary": "Aceder à funcionalidade do elemento graph.", - "apihelp-graph-example": "Obter o JSON do gráfico por resumo criptográfico e título", - "apihelp-graph-param-hash": "Valor do resumo criptográfico do gráfico", - "apihelp-graph-param-oldid": "Identificador da revisão da página com o gráfico", - "apihelp-graph-param-title": "Título da página com o gráfico", - "apihelp-graph-param-text": "Texto do gráfico a ser convertido para JSON. Tem de ser publicado e usado sem os parâmetros título e resumo criptográfico", - "apierror-graph-mustposttext": "O pedido deve ser enviado pelo método POST quando o parâmetro text for usado.", - "apierror-graph-invalid": "O gráfico não é válido.", - "apierror-graph-missing": "Não foi encontrado nenhum gráfico." -} diff --git a/dist/extensions/Graph/i18n/api/qqq.json b/dist/extensions/Graph/i18n/api/qqq.json deleted file mode 100644 index f351685b1..000000000 --- a/dist/extensions/Graph/i18n/api/qqq.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Liuxinyu970226", - "Mormegil", - "Raimond Spekking", - "Raymond", - "Robby" - ] - }, - "apihelp-graph-description": "{{doc-apihelp-description|graph}}", - "apihelp-graph-summary": "{{doc-apihelp-summary|graph}}", - "apihelp-graph-example": "{{doc-apihelp-example|graph}}", - "apihelp-graph-param-hash": "{{doc-apihelp-param|graph|hash}}", - "apihelp-graph-param-oldid": "{{doc-apihelp-param|graph|oldid}}", - "apihelp-graph-param-title": "{{doc-apihelp-param|graph|title}}", - "apihelp-graph-param-text": "{{doc-apihelp-param|graph|text}}", - "apierror-graph-mustposttext": "{{doc-apierror}}", - "apierror-graph-invalid": "{{doc-apierror}}", - "apierror-graph-missing": "{{doc-apierror}}" -} diff --git a/dist/extensions/Graph/i18n/api/ro.json b/dist/extensions/Graph/i18n/api/ro.json deleted file mode 100644 index 1c3542927..000000000 --- a/dist/extensions/Graph/i18n/api/ro.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "@metadata": { - "authors": [ - "NGC 54" - ] - }, - "apihelp-graph-param-title": "Titlul pagini cu graficul", - "apierror-graph-invalid": "Graficul nu este valid.", - "apierror-graph-missing": "Niciun grafic găsit." -} diff --git a/dist/extensions/Graph/i18n/api/roa-tara.json b/dist/extensions/Graph/i18n/api/roa-tara.json deleted file mode 100644 index e6c6ce956..000000000 --- a/dist/extensions/Graph/i18n/api/roa-tara.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Joetaras" - ] - }, - "apihelp-graph-description": "Ause 'a funzione d'u tag grafeche.", - "apihelp-graph-summary": "Ause 'a funzione d'u tag grafeche.", - "apihelp-graph-example": "Pigghie 'u grafeche JSON pe hash e titole", - "apihelp-graph-param-hash": "Valore hash d'u grafeche", - "apihelp-graph-param-oldid": "ID d'a versione d'a pàgene cu 'u grafeche", - "apihelp-graph-param-title": "Titole d'a pàgene cu 'u grafeche", - "apihelp-graph-param-text": "Teste d'u grafeche da convertì jndr'à 'u JSON. Adda essere pubblecate e ausate senza titole e parametre hash", - "apierror-graph-mustposttext": "'A richieste adda essere POSTed quanne 'u parametre text jè ausate.", - "apierror-graph-invalid": "'U grafeche non g'è valide.", - "apierror-graph-missing": "Nisciune grafeche acchiate." -} diff --git a/dist/extensions/Graph/i18n/api/ru.json b/dist/extensions/Graph/i18n/api/ru.json deleted file mode 100644 index f353315da..000000000 --- a/dist/extensions/Graph/i18n/api/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Facenapalm", - "Movses" - ] - }, - "apihelp-graph-description": "Получение доступа к функциональности тега graph.", - "apihelp-graph-summary": "Получение доступа к функциональности тега graph.", - "apihelp-graph-example": "Получить JSON графика по его хэшу и названию", - "apihelp-graph-param-hash": "Хэш-значение графика", - "apihelp-graph-param-oldid": "ID версии страницы с графиком", - "apihelp-graph-param-title": "Название страницы с графиком", - "apihelp-graph-param-text": "Текст преобразовываемого в JSON графика. Должно быть отправлено запросом POST и использовано без параметров title и hash", - "apierror-graph-mustposttext": "Запросом должен быть POST при использовании параметра text.", - "apierror-graph-invalid": "График некорректен.", - "apierror-graph-missing": "График не найден." -} diff --git a/dist/extensions/Graph/i18n/api/sh-latn.json b/dist/extensions/Graph/i18n/api/sh-latn.json deleted file mode 100644 index 76b591ade..000000000 --- a/dist/extensions/Graph/i18n/api/sh-latn.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Winston Sung" - ] - }, - "apihelp-graph-summary": "Pristup funkciji oznake grafikona.", - "apihelp-graph-example": "Nabavi graf JSON prema hash-u i naslovu" -} diff --git a/dist/extensions/Graph/i18n/api/sh.json b/dist/extensions/Graph/i18n/api/sh.json deleted file mode 100644 index 2893d91a5..000000000 --- a/dist/extensions/Graph/i18n/api/sh.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Vlad5250" - ] - }, - "apihelp-graph-description": "Pristup funkciji oznake grafikona.", - "apihelp-graph-summary": "Pristup funkciji oznake grafikona.", - "apihelp-graph-example": "Nabavi graf JSON prema hash-u i naslovu" -} diff --git a/dist/extensions/Graph/i18n/api/sl.json b/dist/extensions/Graph/i18n/api/sl.json deleted file mode 100644 index c8d35566e..000000000 --- a/dist/extensions/Graph/i18n/api/sl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Eleassar" - ] - }, - "apihelp-graph-description": "Dostop do funkcije značk za grafikone.", - "apihelp-graph-summary": "Dostop do funkcije oznak za grafikone.", - "apihelp-graph-example": "Pridobitev grafikona JSON po zgoščeni vrednosti in naslovu.", - "apihelp-graph-param-hash": "Zgoščena vrednost grafikona", - "apihelp-graph-param-oldid": "ID redakcije strani z grafikonom", - "apihelp-graph-param-title": "Naslov strani z grafikonom", - "apihelp-graph-param-text": "Besedilo grafikona za pretvorbo v obliko JSON. Biti mora objavljeno in uporabljati se mora brez naslova in parametrov zgoščene vrednosti.", - "apierror-graph-mustposttext": "Pri uporabi parametra text je treba zahtevek poslati z uporabo ukaza POST.", - "apierror-graph-invalid": "Grafikon ni veljaven.", - "apierror-graph-missing": "Najti ni mogoče nobenega grafikona." -} diff --git a/dist/extensions/Graph/i18n/api/sr-ec.json b/dist/extensions/Graph/i18n/api/sr-ec.json deleted file mode 100644 index bd85d86bc..000000000 --- a/dist/extensions/Graph/i18n/api/sr-ec.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "BadDog" - ] - }, - "apierror-graph-invalid": "Графикон није валидан.", - "apierror-graph-missing": "Није пронађен графикон." -} diff --git a/dist/extensions/Graph/i18n/api/sr-el.json b/dist/extensions/Graph/i18n/api/sr-el.json deleted file mode 100644 index 53c072979..000000000 --- a/dist/extensions/Graph/i18n/api/sr-el.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "@metadata": { - "authors": [] - }, - "apierror-graph-invalid": "Grafikon nije validan.", - "apierror-graph-missing": "Nije pronađen grafikon." -} diff --git a/dist/extensions/Graph/i18n/api/sv.json b/dist/extensions/Graph/i18n/api/sv.json deleted file mode 100644 index ca9fe6c16..000000000 --- a/dist/extensions/Graph/i18n/api/sv.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Ainali", - "Ayaibrahim", - "WikiPhoenix" - ] - }, - "apihelp-graph-description": "Få tillgång till graftagg funktionen", - "apihelp-graph-summary": "Få tillgång till graftagg funktionen.", - "apihelp-graph-example": "Få JSON för grafen genom hash och titel", - "apihelp-graph-param-hash": "Hash-värde på grafen", - "apihelp-graph-param-oldid": "ID för översynen av sidan med diagrammet.", - "apihelp-graph-param-title": "Titel på sidan med diagrammet", - "apihelp-graph-param-text": "Text i grafen som ska konverteras till JSON. Måste läggas upp och användas utan titel- och tagg parametrar.", - "apierror-graph-mustposttext": "Förfrågan måste postas när text parametern används.", - "apierror-graph-invalid": "Grafen är ogiltig.", - "apierror-graph-missing": "Ingen graf hittades." -} diff --git a/dist/extensions/Graph/i18n/api/th.json b/dist/extensions/Graph/i18n/api/th.json deleted file mode 100644 index e6dfed980..000000000 --- a/dist/extensions/Graph/i18n/api/th.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Patsagorn Y." - ] - }, - "apihelp-graph-description": "เข้าถึงการใช้งานกราฟ", - "apihelp-graph-summary": "เช้าถึงการใช้งานแท็กกราฟ" -} diff --git a/dist/extensions/Graph/i18n/api/tr.json b/dist/extensions/Graph/i18n/api/tr.json deleted file mode 100644 index 1bc37693a..000000000 --- a/dist/extensions/Graph/i18n/api/tr.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "@metadata": { - "authors": [ - "BaRaN6161 TURK", - "Incelemeelemani", - "Sezgin İbiş" - ] - }, - "apihelp-graph-description": "Erişim grafik etiketi işlevselliği.", - "apihelp-graph-summary": "Erişim grafik etiketi işlevselliği.", - "apihelp-graph-example": "JSON grafiğini karma ve başlığa göre alın", - "apihelp-graph-param-hash": "Grafiğin karma değeri", - "apihelp-graph-param-oldid": "Sayfanın grafikle birlikte revizyonunun kimliği", - "apihelp-graph-param-title": "Grafikli sayfanın başlığı", - "apihelp-graph-param-text": "JSON'a dönüştürülecek grafiğin metni. Başlık ve karma parametreler olmadan kaydedilmeli ve kullanılmalıdır", - "apierror-graph-mustposttext": "text parametresi kullanıldığında, istek gönderilmiş edilmelidir.", - "apierror-graph-invalid": "Grafik geçerli değil.", - "apierror-graph-missing": "Hiçbir grafik bulunamadı" -} diff --git a/dist/extensions/Graph/i18n/api/uk.json b/dist/extensions/Graph/i18n/api/uk.json deleted file mode 100644 index 827fb3019..000000000 --- a/dist/extensions/Graph/i18n/api/uk.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Base", - "Movses", - "Piramidion" - ] - }, - "apihelp-graph-description": "Отримати доступ до функціоналу тегів graph.", - "apihelp-graph-summary": "Отримати доступ до функціоналу тегів graph.", - "apihelp-graph-example": "Отримати графік у JSON-форматі за хешем та назвою", - "apihelp-graph-param-hash": "Хеш-значення графіка", - "apihelp-graph-param-oldid": "ID ревізії сторінки з графіком", - "apihelp-graph-param-title": "Назва сторінки з графіком", - "apihelp-graph-param-text": "Текст графіка, який має бути переведений у JSON. Має бути опублікований та використовуватись без параметрів назви та хешу.", - "apierror-graph-mustposttext": "Потрібно надсилати як POST-запит коли використовується параметр text", - "apierror-graph-invalid": "Графік не є правильним.", - "apierror-graph-missing": "Не знайдено графік." -} diff --git a/dist/extensions/Graph/i18n/api/zh-hans.json b/dist/extensions/Graph/i18n/api/zh-hans.json deleted file mode 100644 index 00bacb018..000000000 --- a/dist/extensions/Graph/i18n/api/zh-hans.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Liuxinyu970226", - "Anterdc99" - ] - }, - "apihelp-graph-description": "访问图表标签功能。", - "apihelp-graph-summary": "访问图表标签功能。", - "apihelp-graph-example": "通过哈希值和标题获取图表JSON", - "apihelp-graph-param-hash": "图表的哈希值", - "apihelp-graph-param-oldid": "带图表的页面修订ID", - "apihelp-graph-param-title": "带图表的页面标题", - "apihelp-graph-param-text": "要转换为JSON的图表文本。必须在没有标题和哈希值参数的情况下发布并使用", - "apierror-graph-mustposttext": "当text参数被使用时,请求必须POST。", - "apierror-graph-invalid": "图表无效。", - "apierror-graph-missing": "找不到图表。" -} diff --git a/dist/extensions/Graph/i18n/api/zh-hant.json b/dist/extensions/Graph/i18n/api/zh-hant.json deleted file mode 100644 index 1fbb07e6c..000000000 --- a/dist/extensions/Graph/i18n/api/zh-hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Cwlin0416", - "Kly" - ] - }, - "apihelp-graph-description": "存取圖表標籤功能。", - "apihelp-graph-summary": "存取圖表標籤功能。", - "apihelp-graph-example": "由 Hash 與標題取得圖表 JSON", - "apihelp-graph-param-hash": "此圖表的 Hash 值", - "apihelp-graph-param-oldid": "帶圖表的頁面修訂 ID", - "apihelp-graph-param-title": "此圖表的頁面標題", - "apihelp-graph-param-text": "要轉換成 JSON 的圖形文字。必須在沒有使用標題和雜湊參數下傳遞", - "apierror-graph-mustposttext": "當使用 text 參數時,請求必須以 POST 方式。", - "apierror-graph-invalid": "圖表無效。", - "apierror-graph-missing": "查無圖表。" -} diff --git a/dist/extensions/Graph/i18n/ar.json b/dist/extensions/Graph/i18n/ar.json deleted file mode 100644 index 71f65ecaa..000000000 --- a/dist/extensions/Graph/i18n/ar.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Meno25", - "Shbib Al-Subaie", - "ديفيد", - "زكريا" - ] - }, - "graph-desc": "يسمح بوسوم <graph> أو صفحات كاملة لتصبح رسومات بيانية قائمة على [http://vega.github.io/ Vega]", - "graphsandbox": "ملعب الرسومات", - "graph-tracking-category": "صفحات بها مخططات", - "graph-tracking-category-desc": "تتضمن هذه الصفحة وسم .", - "graph-broken-category": "صفحات بها مخططات معطوبة", - "graph-broken-category-desc": "تتضمن هذه الصفحة وسم باستخدام غير صالح.", - "graph-obsolete-category": "صفحات بها مخططات Vega 1.0 مهملة", - "graph-obsolete-category-desc": "تتضمن هذه الصفحة وسم يجب تحديثه للإصدار 2.", - "graph-error-empty-json": "بيانات الرسم البياني فارغة; لا شيء لإظهاره", - "graph-error-not-vega": "JSON المقدم ليس Vega JSON صالحا", - "graph-ve-dialog-button-tooltip": "مخطط", - "graph-ve-dialog-edit-field-graph-type": "نوع المخطط", - "graph-ve-dialog-edit-field-raw-json": "تخصيص JSON الخام", - "graph-ve-dialog-edit-height": "الارتفاع", - "graph-ve-dialog-edit-json-invalid": "نص JSON غير صالح", - "graph-ve-dialog-edit-padding-auto": "حشو تلقائي", - "graph-ve-dialog-edit-padding-bottom": "أسفل", - "graph-ve-dialog-edit-padding-left": "يسار", - "graph-ve-dialog-edit-padding-right": "يمين", - "graph-ve-dialog-edit-padding-top": "أعلى", - "graph-ve-dialog-edit-page-data": "البيانات", - "graph-ve-dialog-edit-page-general": "عام", - "graph-ve-dialog-edit-page-raw": "بيانات خام", - "graph-ve-dialog-edit-size-field": "الحجم", - "graph-ve-dialog-edit-size-table-unit": "بكسلات", - "graph-ve-dialog-edit-title": "تعديل المخطط", - "graph-ve-dialog-edit-type-area": "الرسم البياني للمنطقة", - "graph-ve-dialog-edit-type-bar": "مخطط شريطي", - "graph-ve-dialog-edit-type-line": "رسم بياني خطي", - "graph-ve-dialog-edit-type-unknown": "نوع المخطط غير معروف", - "graph-ve-dialog-edit-width": "العرض", - "graph-ve-dialog-edit-unknown-graph-type-warning": "نوع هذا الرسم البياني غير معتمد، وقد تؤدي أية تعديلات يتم إجراؤها عليه إلى قطع عرضه; يُرجَى تعديل الرسم البياني من خلال مواصفات البيانات الأولية في علامة التبويب \"{{int:graph-ve-dialog-edit-page-raw}}\".", - "graph-ve-empty-graph": "مخطط فارغ", - "graph-ve-no-spec": "لم يتم العثور على مواصفات الرسم البياني", - "graph-ve-vega-error": "واجه Vega خطأ في عرض هذا الرسم البياني", - "graph-ve-vega-error-no-render": "لم يتمكن Vega من عرض هذا الرسم البياني" -} diff --git a/dist/extensions/Graph/i18n/as.json b/dist/extensions/Graph/i18n/as.json deleted file mode 100644 index 0cb45db49..000000000 --- a/dist/extensions/Graph/i18n/as.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Simbu123" - ] - }, - "graph-tracking-category": "গ্ৰাফ থকা পৃষ্ঠা", - "graph-ve-dialog-button-tooltip": "গ্ৰাফ", - "graph-ve-dialog-edit-title": "গ্ৰাফ সম্পাদনা কৰক", - "graph-ve-dialog-edit-type-bar": "দণ্ড গ্ৰাফ", - "graph-ve-dialog-edit-type-unknown": "গ্ৰাফৰ প্ৰকাৰ অজ্ঞাত" -} diff --git a/dist/extensions/Graph/i18n/ast.json b/dist/extensions/Graph/i18n/ast.json deleted file mode 100644 index 7fe6a19c4..000000000 --- a/dist/extensions/Graph/i18n/ast.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Enolp", - "Xuacu" - ] - }, - "graph-desc": "Permite convertir etiquetes <graph> o páxines completes en gráfiques basaes en [http://vega.github.io/ Vega]", - "graphsandbox": "Zona de pruebes de Gráfiques", - "graph-tracking-category": "Páxines con gráfiques", - "graph-tracking-category-desc": "La páxina incluye una etiqueta .", - "graph-broken-category": "Páxines con gráfiques frañaes", - "graph-broken-category-desc": "La páxina incluye una etiqueta con usu inválidu.", - "graph-obsolete-category": "Páxines con gráfiques Vega 1.0 anticuaes", - "graph-obsolete-category-desc": "La páxina incluye una etiqueta que tendría d'anovase a la versión 2.", - "graph-error-empty-json": "Datos de la gráfica baleros, nada qu'amosar", - "graph-error-not-vega": "El JSON proporcionáu nun ye un JSON Vega válidu", - "graph-ve-dialog-button-tooltip": "Gráfica", - "graph-ve-dialog-edit-field-graph-type": "Tipu de gráfica", - "graph-ve-dialog-edit-field-raw-json": "Especificación JSON en bruto", - "graph-ve-dialog-edit-height": "Altor", - "graph-ve-dialog-edit-json-invalid": "Cadena JSON inválida", - "graph-ve-dialog-edit-padding-auto": "Rellenu automáticu", - "graph-ve-dialog-edit-padding-bottom": "Abaxo", - "graph-ve-dialog-edit-padding-left": "Izquierda", - "graph-ve-dialog-edit-padding-right": "Drecha", - "graph-ve-dialog-edit-padding-top": "Arriba", - "graph-ve-dialog-edit-page-data": "Datos", - "graph-ve-dialog-edit-page-general": "Xeneral", - "graph-ve-dialog-edit-page-raw": "Datos ensin procesar", - "graph-ve-dialog-edit-size-field": "Tamañu", - "graph-ve-dialog-edit-size-table-unit": "Pixels", - "graph-ve-dialog-edit-title": "Editar gráfica", - "graph-ve-dialog-edit-type-area": "Gráfica d'árees", - "graph-ve-dialog-edit-type-bar": "Gráfica de barres", - "graph-ve-dialog-edit-type-line": "Gráfica de llinies", - "graph-ve-dialog-edit-type-unknown": "Tipu de gráfica desconocida", - "graph-ve-dialog-edit-width": "Anchor", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Nun hai encontu pa esti tipu de gráfica, y cualquier cambéu que se-y faiga puede frañar la so vista. Edita la gráfica por aciu de la especificación de datos ensin procesar na llingüeta «{{int:graph-ve-dialog-edit-page-raw}}».", - "graph-ve-empty-graph": "Gráfica vacía", - "graph-ve-no-spec": "No s'alcontró nenguna especificación de gráficos", - "graph-ve-vega-error": "Vega atopó un error al representar esta gráfica", - "graph-ve-vega-error-no-render": "Vega nun pudo representar esta gráfica" -} diff --git a/dist/extensions/Graph/i18n/av.json b/dist/extensions/Graph/i18n/av.json deleted file mode 100644 index 1176e5815..000000000 --- a/dist/extensions/Graph/i18n/av.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Gazimagomedov", - "Omarov M." - ] - }, - "graph-tracking-category": "Графикалгун гьумерал", - "graph-ve-dialog-button-tooltip": "График", - "graph-ve-dialog-edit-field-graph-type": "Графалъул тайпа", - "graph-ve-dialog-edit-height": "Борхалъи", - "graph-ve-dialog-edit-page-general": "ГӀаммал" -} diff --git a/dist/extensions/Graph/i18n/az.json b/dist/extensions/Graph/i18n/az.json deleted file mode 100644 index 5d0e603a3..000000000 --- a/dist/extensions/Graph/i18n/az.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Toghrul Rahimli", - "Wertuose" - ] - }, - "graph-ve-dialog-button-tooltip": "Qrafik", - "graph-ve-dialog-edit-page-general": "Ümumi" -} diff --git a/dist/extensions/Graph/i18n/be-tarask.json b/dist/extensions/Graph/i18n/be-tarask.json deleted file mode 100644 index ede0df61f..000000000 --- a/dist/extensions/Graph/i18n/be-tarask.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Red Winged Duck", - "Renessaince" - ] - }, - "graph-desc": "Дазваляе цэтлікам <graph> ці старонкам цалкам станавіцца графамі на аснове [http://vega.github.io/ Vega]", - "graphsandbox": "Пясочніца для графікаў", - "graph-tracking-category": "Старонкі з графікамі", - "graph-tracking-category-desc": "Старонка ўтрымлівае тэг .", - "graph-broken-category": "Старонкі з сапсаванымі графікамі", - "graph-broken-category-desc": "На гэтай старонцы няслушна выкарыстаны тэг .", - "graph-ve-dialog-button-tooltip": "Графік", - "graph-ve-dialog-edit-field-graph-type": "Тып графіку", - "graph-ve-dialog-edit-field-raw-json": "Крынічны код JSON", - "graph-ve-dialog-edit-height": "Вышыня", - "graph-ve-dialog-edit-json-invalid": "Памылковы радок JSON", - "graph-ve-dialog-edit-padding-auto": "Аўтаматычны водступ", - "graph-ve-dialog-edit-padding-bottom": "Унізе", - "graph-ve-dialog-edit-padding-left": "Зьлева", - "graph-ve-dialog-edit-padding-right": "Справа", - "graph-ve-dialog-edit-padding-top": "Уверсе", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Тып гэтага графіку не падтрымліваецца, і любыя зробленыя ў ім зьмены могуць сапсаваць ягонае выяўленьне. Калі ласка, рэдагуйце крынічны код графіку на закладцы „{{int:graph-ve-dialog-edit-page-raw}}“.", - "graph-ve-empty-graph": "Пусты графік", - "graph-ve-no-spec": "На знойдзена спэцыфікацыі графіку", - "graph-ve-vega-error": "Адбылася памылка Vega пры маляваньні гэтага графіку", - "graph-ve-vega-error-no-render": "Vega не змагла намаляваць гэты графік" -} diff --git a/dist/extensions/Graph/i18n/be.json b/dist/extensions/Graph/i18n/be.json deleted file mode 100644 index 03d082569..000000000 --- a/dist/extensions/Graph/i18n/be.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Amire80", - "Artsiom91", - "Дзяніс Тутэйшы" - ] - }, - "graphsandbox": "Пясочніца Graph", - "graph-tracking-category": "Старонкі з тэгам graph", - "graph-tracking-category-desc": "Старонка змяшчае тэг .", - "graph-broken-category": "Старонкі з няслушна ўжытым тэгам graph", - "graph-obsolete-category": "Старонкі з састарэлымі Vega 1.0 графікамі", - "graph-ve-dialog-button-tooltip": "Дыяграму", - "graph-ve-dialog-edit-field-graph-type": "Тып дыяграмы", - "graph-ve-dialog-edit-padding-left": "Злева" -} diff --git a/dist/extensions/Graph/i18n/bg.json b/dist/extensions/Graph/i18n/bg.json deleted file mode 100644 index 19e862b84..000000000 --- a/dist/extensions/Graph/i18n/bg.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Iliev", - "StanProg", - "Ted Masters", - "Лорд Бъмбъри" - ] - }, - "graphsandbox": "Пясъчник за графики", - "graph-tracking-category": "Страници с графики", - "graph-tracking-category-desc": "Страницата съдържа таг.", - "graph-broken-category": "Страници с повредени графики", - "graph-broken-category-desc": "Страницата съдържа таг, използван по неправилен начин.", - "graph-obsolete-category": "Страници с остарели Vega 1.0 графики", - "graph-obsolete-category-desc": "Страницата съдържа таг, който трябва да бъде обновен до версия 2.", - "graph-ve-dialog-button-tooltip": "Графика", - "graph-ve-dialog-edit-type-line": "Линейна графика" -} diff --git a/dist/extensions/Graph/i18n/bn.json b/dist/extensions/Graph/i18n/bn.json deleted file mode 100644 index 308e482c2..000000000 --- a/dist/extensions/Graph/i18n/bn.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Aftabuzzaman", - "আফতাবুজ্জামান", - "Aishik Rehman" - ] - }, - "graphsandbox": "গ্রাফের খেলাঘর", - "graph-tracking-category": "গ্রাফসহ পাতা", - "graph-tracking-category-desc": "পাতাটি একটি ট্যাগ অন্তর্ভুক্ত করে।", - "graph-broken-category": "ভাঙা গ্রাফসহ পাতা", - "graph-broken-category-desc": "পাতাটি একটি ট্যাগ অন্তর্ভুক্ত করে যেখানে এটি ভুলভাবে ব্যবহার করা হয়েছে।", - "graph-obsolete-category": "অপ্রচলিত ভেগা ১.০ গ্রাফসহ পাতা", - "graph-obsolete-category-desc": "পাতাটি একটি ট্যাগ অন্তর্ভুক্ত করে যেটি সংস্করণ ২-এ হালনাগাদ করা উচিত।", - "graph-error-empty-json": "গ্রাফের উপাত্ত খালি, দেখানোর মত কিছু নেই", - "graph-error-not-vega": "প্রদত্ত JSON একটি বৈধ ভেগা JSON নয়", - "graph-ve-dialog-button-tooltip": "গ্রাফ", - "graph-ve-dialog-edit-field-graph-type": "গ্রাফের ধরন", - "graph-ve-dialog-edit-field-raw-json": "সারির JSON নির্দিষ্টকরণ", - "graph-ve-dialog-edit-height": "উচ্চতা", - "graph-ve-dialog-edit-json-invalid": "অবৈধ JSON স্ট্রিং", - "graph-ve-dialog-edit-padding-auto": "স্বয়ংক্রিয় প্যাডিং", - "graph-ve-dialog-edit-padding-bottom": "নিচে", - "graph-ve-dialog-edit-padding-left": "বামে", - "graph-ve-dialog-edit-padding-right": "ডানে", - "graph-ve-dialog-edit-padding-top": "উপরে", - "graph-ve-dialog-edit-page-data": "উপাত্ত", - "graph-ve-dialog-edit-page-general": "সাধারণ", - "graph-ve-dialog-edit-page-raw": "সারির উপাত্ত", - "graph-ve-dialog-edit-size-field": "আকার", - "graph-ve-dialog-edit-size-table-unit": "পিক্সেল", - "graph-ve-dialog-edit-title": "গ্রাফ সম্পাদনা করুন", - "graph-ve-dialog-edit-type-area": "এলাকা গ্রাফ", - "graph-ve-dialog-edit-type-bar": "দণ্ড গ্রাফ", - "graph-ve-dialog-edit-type-line": "রেখা গ্রাফ", - "graph-ve-dialog-edit-type-unknown": "গ্রাফের ধরন অজানা", - "graph-ve-dialog-edit-width": "প্রস্থ", - "graph-ve-dialog-edit-unknown-graph-type-warning": "এই গ্রাফের ধরণ অসমর্থিত, এবং এটিতে কোন পরিবর্তন করলে এটি প্রদর্শনের ভেঙ্গে যেতে পারে। দয়া করে \"{{int:graph-ve-dialog-edit-page-raw}}\" ট্যাবে সারির উপাত্ত নির্দিষ্টকরণের মাধ্যমে গ্রাফ সম্পাদনা করুন।", - "graph-ve-empty-graph": "গ্রাফ খালি", - "graph-ve-no-spec": "কোনো গ্রাফ নির্দিষ্টকরণ পাওয়া যায়নি", - "graph-ve-vega-error": "ভেগা এই গ্রাফ রেন্ডারিং করার সময় একটি ত্রুটির সম্মুখীন হয়েছে", - "graph-ve-vega-error-no-render": "ভেগা এই গ্রাফ রেন্ডার করতে অক্ষম" -} diff --git a/dist/extensions/Graph/i18n/bs.json b/dist/extensions/Graph/i18n/bs.json deleted file mode 100644 index c27a835c5..000000000 --- a/dist/extensions/Graph/i18n/bs.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Srdjan m", - "Srđan" - ] - }, - "graph-desc": "Dozvoljava <graph> oznake ili da cijele stranice postanu grafikoni zasnovani na [http://trifacta.github.io/vega/ Vega]-i", - "graphsandbox": "Pješčanik za grafikone", - "graph-tracking-category": "Stranice s grafikonima", - "graph-tracking-category-desc": "Ova stranica sadrži oznaku .", - "graph-broken-category": "Stranice s pokvarenim grafikonima", - "graph-broken-category-desc": "Ova stranica sadrži neispravno iskorištenu oznaku .", - "graph-obsolete-category": "Stranice sa zastarjelim Vega 1.0 grafikonima", - "graph-ve-dialog-button-tooltip": "Grafikon", - "graph-ve-dialog-edit-field-graph-type": "Vrsta grafikona", - "graph-ve-dialog-edit-field-raw-json": "Izvorni JSON", - "graph-ve-dialog-edit-height": "Visina", - "graph-ve-dialog-edit-json-invalid": "Neispravan JSON kôd", - "graph-ve-dialog-edit-padding-auto": "Automatske margine", - "graph-ve-dialog-edit-padding-bottom": "Donja", - "graph-ve-dialog-edit-padding-left": "Lijeva", - "graph-ve-dialog-edit-padding-right": "Desna", - "graph-ve-dialog-edit-padding-top": "Gornja", - "graph-ve-dialog-edit-page-data": "Podaci", - "graph-ve-dialog-edit-page-general": "Općenito", - "graph-ve-dialog-edit-page-raw": "Izvorni podaci", - "graph-ve-dialog-edit-size-field": "Veličina", - "graph-ve-dialog-edit-size-table-unit": "Piksela", - "graph-ve-dialog-edit-title": "Uredi grafikon", - "graph-ve-dialog-edit-type-area": "Površinski grafikon", - "graph-ve-dialog-edit-type-bar": "Stupčasti grafikon", - "graph-ve-dialog-edit-type-line": "Linijski grafikon", - "graph-ve-dialog-edit-type-unknown": "Nepoznata vrsta grafikona", - "graph-ve-dialog-edit-width": "Širina", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Ova vrsta grafikona nije podržava i bilo kakve izmjene mogu pokvariti prikaz istog. Molimo da koristite karticu \"{{int:graph-ve-dialog-edit-page-raw}}\" kako biste grafikon uredili pomoću izvornog kôda.", - "graph-ve-no-spec": "Nije pronađena specifikacija grafikona", - "graph-ve-vega-error": "Vega je naišla na grešku pri iscrtavanju ovog grafikona", - "graph-ve-vega-error-no-render": "Vega nije mogla iscrtati ovaj grafikon" -} diff --git a/dist/extensions/Graph/i18n/ca.json b/dist/extensions/Graph/i18n/ca.json deleted file mode 100644 index 0bcbd94c0..000000000 --- a/dist/extensions/Graph/i18n/ca.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Macofe", - "Mguix", - "Paucabot", - "Vriullop" - ] - }, - "graphsandbox": "Proves de gràfics", - "graph-tracking-category": "Pàgines amb gràfics", - "graph-tracking-category-desc": "La pàgina inclou una etiqueta .", - "graph-broken-category": "Pàgines amb gràfics que no funcionen", - "graph-broken-category-desc": "La pàgina inclou una etiqueta usada de forma no vàlida.", - "graph-obsolete-category": "Pàgines amb gràfics Vega 1.0 obsolets", - "graph-obsolete-category-desc": "La pàgina inclou una etiqueta que s'hauria d'actualitzar a la versió 2.", - "graph-ve-dialog-button-tooltip": "Gràfic", - "graph-ve-dialog-edit-field-graph-type": "Tipus de gràfic", - "graph-ve-dialog-edit-height": "Alçària", - "graph-ve-dialog-edit-padding-auto": "Farciment automàtic", - "graph-ve-dialog-edit-padding-bottom": "Avall", - "graph-ve-dialog-edit-padding-left": "Esquerra", - "graph-ve-dialog-edit-padding-right": "Dreta", - "graph-ve-dialog-edit-padding-top": "Amunt", - "graph-ve-dialog-edit-page-data": "Dades", - "graph-ve-dialog-edit-page-general": "General", - "graph-ve-dialog-edit-page-raw": "Dades sense tractar", - "graph-ve-dialog-edit-size-field": "Mida", - "graph-ve-dialog-edit-size-table-unit": "Píxels", - "graph-ve-dialog-edit-type-area": "Gràfic d'àrees", - "graph-ve-dialog-edit-type-bar": "Gràfic de barres", - "graph-ve-dialog-edit-type-line": "Gràfic de línies", - "graph-ve-dialog-edit-type-unknown": "Tipus de gràfic desconegut", - "graph-ve-dialog-edit-width": "Amplada", - "graph-ve-empty-graph": "Gràfic buit" -} diff --git a/dist/extensions/Graph/i18n/ce.json b/dist/extensions/Graph/i18n/ce.json deleted file mode 100644 index c27728106..000000000 --- a/dist/extensions/Graph/i18n/ce.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Умар" - ] - }, - "graph-desc": "Таро ло тегашна <graph> йа дийнна агӀонашна бӀогӀам хила [http://vega.github.io/ Vega]-н бух тӀехь", - "graphsandbox": "Ловзаран майда Graph", - "graph-tracking-category": "Графикаш йолу агӀонаш", - "graph-tracking-category-desc": "АгӀонан чохь йу тег.", - "graph-broken-category": "Йоьхна графикаш йолу агӀонаш", - "graph-broken-category-desc": "ХӀокху агӀонгахь нийса лелош йац тег .", - "graph-obsolete-category": "Ширйелла Vega 1.0 графикаш йолу агӀонаш", - "graph-obsolete-category-desc": "АгӀонан чохь йу тег, иза карлайаккха йезаш йу 2 версин тӀе.", - "graph-ve-dialog-edit-padding-auto": "Автоматически дӀахилор", - "graph-ve-dialog-edit-padding-bottom": "Лахахь", - "graph-ve-dialog-edit-padding-left": "Аьрру", - "graph-ve-dialog-edit-padding-right": "Аьтту", - "graph-ve-dialog-edit-padding-top": "Лакхахь", - "graph-ve-dialog-edit-page-general": "Йукъара" -} diff --git a/dist/extensions/Graph/i18n/ceb.json b/dist/extensions/Graph/i18n/ceb.json deleted file mode 100644 index 87263ffa4..000000000 --- a/dist/extensions/Graph/i18n/ceb.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Leeheonjin" - ] - }, - "graph-ve-dialog-edit-height": "Gitas-on" -} diff --git a/dist/extensions/Graph/i18n/ckb.json b/dist/extensions/Graph/i18n/ckb.json deleted file mode 100644 index d082565b4..000000000 --- a/dist/extensions/Graph/i18n/ckb.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Sarchia" - ] - }, - "graph-ve-dialog-button-tooltip": "ھێڵکاری", - "graph-ve-dialog-edit-title": "دەستکاریکردنی ھێڵکاری" -} diff --git a/dist/extensions/Graph/i18n/cs.json b/dist/extensions/Graph/i18n/cs.json deleted file mode 100644 index 1ce8b4360..000000000 --- a/dist/extensions/Graph/i18n/cs.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Dvorapa", - "Matěj Suchánek", - "Meliganai", - "Mormegil", - "Walter Klosse" - ] - }, - "graph-desc": "Vytváří ze značek <graph> nebo celých stránek grafy pomocí [http://vega.github.io/ Vega]", - "graphsandbox": "Pískoviště grafů", - "graph-tracking-category": "Stránky s grafy", - "graph-tracking-category-desc": "Tato stránka obsahuje značku .", - "graph-broken-category": "Stránky s rozbitými grafy", - "graph-broken-category-desc": "Tato stránka obsahuje chybně použitou značku .", - "graph-obsolete-category": "Stránky se zastaralými grafy Vega 1.0", - "graph-obsolete-category-desc": "Stránka obsahuje značku , která by měla být aktualizována na verzi 2.", - "graph-error-empty-json": "Prázdná data grafu, není co zobrazit", - "graph-error-not-vega": "Poskytnutý JSON není platný Vega JSON", - "graph-ve-dialog-button-tooltip": "Graf", - "graph-ve-dialog-edit-field-graph-type": "Typ grafu", - "graph-ve-dialog-edit-field-raw-json": "Surová specifikace JSON", - "graph-ve-dialog-edit-height": "Výška", - "graph-ve-dialog-edit-json-invalid": "Neplatný řetězec JSON", - "graph-ve-dialog-edit-padding-auto": "Automatické odsazení", - "graph-ve-dialog-edit-padding-bottom": "Dole", - "graph-ve-dialog-edit-padding-left": "Vlevo", - "graph-ve-dialog-edit-padding-right": "Vpravo", - "graph-ve-dialog-edit-padding-top": "Nahoře", - "graph-ve-dialog-edit-page-data": "Data", - "graph-ve-dialog-edit-page-general": "Obecné", - "graph-ve-dialog-edit-page-raw": "Surová data", - "graph-ve-dialog-edit-size-field": "Velikost", - "graph-ve-dialog-edit-size-table-unit": "Pixelů", - "graph-ve-dialog-edit-title": "Editovat graf", - "graph-ve-dialog-edit-type-area": "Plošný graf", - "graph-ve-dialog-edit-type-bar": "Sloupcový graf", - "graph-ve-dialog-edit-type-line": "Čárový graf", - "graph-ve-dialog-edit-type-unknown": "Neznámý typ grafu", - "graph-ve-dialog-edit-width": "Šířka", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Typ tohoto grafu není podporován a jakékoli provedené změny mohou jeho zobrazování rozbít. Graf prosím editujte pomocí surového datové specifikace na záložce „{{int:graph-ve-dialog-edit-page-raw}}“.", - "graph-ve-empty-graph": "Prázdný graf", - "graph-ve-no-spec": "Nenalezena žádná specifikace grafu", - "graph-ve-vega-error": "Při vykreslování tohoto grafu narazila Vega na chybu", - "graph-ve-vega-error-no-render": "Vega nebyla schopna vykreslit tento graf" -} diff --git a/dist/extensions/Graph/i18n/da.json b/dist/extensions/Graph/i18n/da.json deleted file mode 100644 index 01adf59d9..000000000 --- a/dist/extensions/Graph/i18n/da.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Saederup92", - "Steenth" - ] - }, - "graphsandbox": "Graf-sandkasse", - "graph-tracking-category": "Sider med grafer", - "graph-broken-category": "Sider med defekte grafer", - "graph-obsolete-category": "Sider med forældet Vega 1.0 grafer", - "graph-ve-dialog-button-tooltip": "Graf", - "graph-ve-dialog-edit-field-graph-type": "Graftype", - "graph-ve-dialog-edit-height": "Højde", - "graph-ve-dialog-edit-padding-bottom": "Bund", - "graph-ve-dialog-edit-padding-left": "Venstre", - "graph-ve-dialog-edit-padding-right": "Højre", - "graph-ve-dialog-edit-padding-top": "Top", - "graph-ve-dialog-edit-page-data": "Data", - "graph-ve-dialog-edit-size-field": "Størrelse", - "graph-ve-dialog-edit-title": "Rediger graf", - "graph-ve-dialog-edit-width": "Bredde", - "graph-ve-empty-graph": "Tomt diagram" -} diff --git a/dist/extensions/Graph/i18n/de.json b/dist/extensions/Graph/i18n/de.json deleted file mode 100644 index 96327568d..000000000 --- a/dist/extensions/Graph/i18n/de.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Hwboehm", - "Kghbln", - "Metalhead64", - "Predatorix", - "Purodha", - "Umherirrender" - ] - }, - "graph-desc": "Ergänzt das Tag <graph> oder wandelt den gesamten Inhalt von Seiten in [http://vega.github.io/ Vega]-gestützte Diagramme um", - "graphsandbox": "Grafikspielwiese", - "graph-tracking-category": "Seiten mit Diagrammen", - "graph-tracking-category-desc": "Die Seite enthält eine -Markierung.", - "graph-broken-category": "Seiten mit defekten Diagrammen", - "graph-broken-category-desc": "Die Seite enthält eine -Markierung mit einer ungültigen Verwendung.", - "graph-obsolete-category": "Seiten mit veralteten Vega-1.0-Grafiken", - "graph-obsolete-category-desc": "Die Seite enthält eine -Markierung, die auf die Version 2 aktualisiert werden sollte.", - "graph-error-empty-json": "Leere Diagrammdaten, nichts anzuzeigen", - "graph-error-not-vega": "Das angegebene JSON ist kein gültiges Vega-JSON", - "graph-ve-dialog-button-tooltip": "Diagramm", - "graph-ve-dialog-edit-field-graph-type": "Diagrammtyp", - "graph-ve-dialog-edit-field-raw-json": "Unverarbeitete JSON-Spezifikation", - "graph-ve-dialog-edit-height": "Höhe", - "graph-ve-dialog-edit-json-invalid": "Ungültige JSON-Zeichenfolge", - "graph-ve-dialog-edit-padding-auto": "Automatische Auffüllung", - "graph-ve-dialog-edit-padding-bottom": "Unten", - "graph-ve-dialog-edit-padding-left": "Links", - "graph-ve-dialog-edit-padding-right": "Rechts", - "graph-ve-dialog-edit-padding-top": "Oben", - "graph-ve-dialog-edit-page-data": "Daten", - "graph-ve-dialog-edit-page-general": "Allgemein", - "graph-ve-dialog-edit-page-raw": "Rohdaten", - "graph-ve-dialog-edit-size-field": "Größe", - "graph-ve-dialog-edit-size-table-unit": "Pixel", - "graph-ve-dialog-edit-title": "Diagramm bearbeiten", - "graph-ve-dialog-edit-type-area": "Flächendiagramm", - "graph-ve-dialog-edit-type-bar": "Balkendiagramm", - "graph-ve-dialog-edit-type-line": "Kurvendiagramm", - "graph-ve-dialog-edit-type-unknown": "Unbekannter Diagrammtyp", - "graph-ve-dialog-edit-width": "Breite", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Der Typ dieses Diagramms wird nicht unterstützt und Veränderungen am Diagramm zerstören die Anzeige. Bitte bearbeite das Diagramm mithilfe der Rohdatenangabe in der Registerkarte „{{int:graph-ve-dialog-edit-page-raw}}“.", - "graph-ve-empty-graph": "Leere Grafik", - "graph-ve-no-spec": "Keine Diagramm-Spezifikation gefunden", - "graph-ve-vega-error": "Vega hat einen Fehler beim Rendern dieses Diagramms entdeckt", - "graph-ve-vega-error-no-render": "Vega konnte dieses Diagramm nicht darstellen" -} diff --git a/dist/extensions/Graph/i18n/diq.json b/dist/extensions/Graph/i18n/diq.json deleted file mode 100644 index a388e79fe..000000000 --- a/dist/extensions/Graph/i18n/diq.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Mirzali", - "Orbot707" - ] - }, - "graph-tracking-category-desc": "Pele etiketê ihtıwa kena.", - "graph-ve-dialog-edit-height": "Berziye", - "graph-ve-dialog-edit-page-data": "Melumat", - "graph-ve-dialog-edit-width": "Herayiye" -} diff --git a/dist/extensions/Graph/i18n/dty.json b/dist/extensions/Graph/i18n/dty.json deleted file mode 100644 index 31f81af5e..000000000 --- a/dist/extensions/Graph/i18n/dty.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "@metadata": { - "authors": [ - "जनक राज भट्ट" - ] - }, - "graph-ve-dialog-button-tooltip": " ग्राफ", - "graph-ve-dialog-edit-field-graph-type": "ग्राफको प्रकार", - "graph-ve-dialog-edit-page-general": "साधारण", - "graph-ve-dialog-edit-page-raw": "कच्चा डाटा", - "graph-ve-dialog-edit-type-area": "क्षेत्रफल ग्राफ", - "graph-ve-dialog-edit-type-bar": "बार ग्राफ", - "graph-ve-dialog-edit-type-line": "लाइन ग्राफ", - "graph-ve-dialog-edit-type-unknown": "थानभया ग्राफ प्रकार" -} diff --git a/dist/extensions/Graph/i18n/el.json b/dist/extensions/Graph/i18n/el.json deleted file mode 100644 index 00caac143..000000000 --- a/dist/extensions/Graph/i18n/el.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Geraki", - "NikosLikomitros", - "Nikosgranturismogt" - ] - }, - "graph-desc": "Επιτρέπει ετικέτες <graph> ή ολόκληρες σελίδες να γίνονται γραφήματα με βάση το [http://vega.github.io/ Vega]", - "graphsandbox": "Πρόχειρο γραφημάτων", - "graph-tracking-category": "Σελίδες με γραφήματα", - "graph-tracking-category-desc": "Η σελίδα περιλαμβάνει μια ετικέτα .", - "graph-broken-category": "Σελίδες με σπασμένα γραφήματα", - "graph-broken-category-desc": "Η σελίδα περιλαμβάνει μια ετικέτα με μη έγκυρη χρήση.", - "graph-error-empty-json": "Κενά δεδομένα γραφήματος, τίποτα για εμφάνιση", - "graph-ve-dialog-button-tooltip": "Γράφημα", - "graph-ve-dialog-edit-field-graph-type": "Τύπος γραφήματος", - "graph-ve-dialog-edit-field-raw-json": "Προδιαγραφή πρωτογενούς JSON", - "graph-ve-dialog-edit-height": "Ύψος", - "graph-ve-dialog-edit-json-invalid": "Μη έγκυρο JSON string", - "graph-ve-dialog-edit-padding-auto": "Αυτόματη αναπλήρωση", - "graph-ve-dialog-edit-padding-bottom": "Κάτω", - "graph-ve-dialog-edit-padding-left": "Αριστερά", - "graph-ve-dialog-edit-padding-right": "Δεξιά", - "graph-ve-dialog-edit-padding-top": "Κορυφή", - "graph-ve-dialog-edit-page-data": "Δεδομένα", - "graph-ve-dialog-edit-page-general": "Γενικά", - "graph-ve-dialog-edit-page-raw": "Ανεπεξέργαστα δεδομένα", - "graph-ve-dialog-edit-size-field": "Μέγεθος", - "graph-ve-dialog-edit-size-table-unit": "Pixels", - "graph-ve-dialog-edit-title": "Επεξεργασία γραφήματος", - "graph-ve-dialog-edit-type-area": "Γράφημα περιοχής", - "graph-ve-dialog-edit-type-bar": "Ραβδόγραμμα", - "graph-ve-dialog-edit-type-line": "Γραμμικό γράφημα", - "graph-ve-dialog-edit-type-unknown": "Άγνωστος τύπος γραφήματος", - "graph-ve-dialog-edit-width": "Πλάτος", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Το είδος αυτό το γράφημα δεν υποστηρίζεται, και οποιαδήποτε τροποποίηση μπορεί να σπάσει την εμφάνισή του. Παρακαλούμε επεξεργαστείτε το γράφημα με την προδιαγραφή πρωτογενών δεδομένων στην καρτέλα \"{{int:graph-ve-dialog-edit-page-raw}}\".", - "graph-ve-empty-graph": "Κενό γράφημα", - "graph-ve-no-spec": "Δεν βρέθηκε προδιαγραφή γραφήματος", - "graph-ve-vega-error": "Το Vega αντιμετώπισε ένα σφάλμα στη δημιουργία αυτού του γραφήματος", - "graph-ve-vega-error-no-render": "Το Vega δεν μπόρεσε να δημιουργήσει αυτό το γράφημα" -} diff --git a/dist/extensions/Graph/i18n/en-gb.json b/dist/extensions/Graph/i18n/en-gb.json deleted file mode 100644 index b20de57d5..000000000 --- a/dist/extensions/Graph/i18n/en-gb.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Piano1forte2" - ] - }, - "graph-ve-dialog-edit-unknown-graph-type-warning": "The type of this graph is unsupported, and any modifications made to it may break its display. Please edit the graph through the raw data specification on the '{{int:graph-ve-dialog-edit-page-raw}}' tab." -} diff --git a/dist/extensions/Graph/i18n/en.json b/dist/extensions/Graph/i18n/en.json deleted file mode 100644 index 11a7622a4..000000000 --- a/dist/extensions/Graph/i18n/en.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Dan Andreescu", - "Yuri Astrakhan", - "Frédéric Bolduc", - "Max Semenik" - ] - }, - "graph-desc": "Allows <graph> tags or entire pages to become [http://vega.github.io/ Vega]-based graphs", - "graphsandbox": "Graph sandbox", - "graph-tracking-category": "Pages with graphs", - "graph-tracking-category-desc": "The page includes a tag.", - "graph-broken-category": "Pages with broken graphs", - "graph-broken-category-desc": "The page includes a tag with invalid usage.", - "graph-obsolete-category": "Pages with obsolete Vega 1.0 graphs", - "graph-obsolete-category-desc": "The page includes a tag that should be updated to version 2.", - "graph-error-empty-json": "Empty graph data, nothing to show", - "graph-error-not-vega": "The JSON provided is not a valid Vega JSON", - "graph-ve-dialog-button-tooltip": "Graph", - "graph-ve-dialog-edit-field-graph-type": "Graph type", - "graph-ve-dialog-edit-field-raw-json": "Raw JSON specification", - "graph-ve-dialog-edit-height": "Height", - "graph-ve-dialog-edit-json-invalid": "Invalid JSON string", - "graph-ve-dialog-edit-padding-auto": "Automatic padding", - "graph-ve-dialog-edit-padding-bottom": "Bottom", - "graph-ve-dialog-edit-padding-left": "Left", - "graph-ve-dialog-edit-padding-right": "Right", - "graph-ve-dialog-edit-padding-top": "Top", - "graph-ve-dialog-edit-page-data": "Data", - "graph-ve-dialog-edit-page-general": "General", - "graph-ve-dialog-edit-page-raw": "Raw data", - "graph-ve-dialog-edit-size-field": "Size", - "graph-ve-dialog-edit-size-table-unit": "Pixels", - "graph-ve-dialog-edit-title": "Edit graph", - "graph-ve-dialog-edit-type-area": "Area graph", - "graph-ve-dialog-edit-type-bar": "Bar graph", - "graph-ve-dialog-edit-type-line": "Line graph", - "graph-ve-dialog-edit-type-unknown": "Unknown graph type", - "graph-ve-dialog-edit-width": "Width", - "graph-ve-dialog-edit-unknown-graph-type-warning": "The type of this graph is unsupported, and any modifications made to it may break its display. Please edit the graph through the raw data specification on the \"{{int:graph-ve-dialog-edit-page-raw}}\" tab.", - "graph-ve-empty-graph": "Empty graph", - "graph-ve-no-spec": "No graph specification found", - "graph-ve-vega-error": "Vega has encountered an error rendering this graph", - "graph-ve-vega-error-no-render": "Vega was unable to render this graph" -} diff --git a/dist/extensions/Graph/i18n/eo.json b/dist/extensions/Graph/i18n/eo.json deleted file mode 100644 index 454137b16..000000000 --- a/dist/extensions/Graph/i18n/eo.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Robin van der Vliet", - "Zciric", - 1490493253 - ] - }, - "graph-ve-dialog-edit-size-field": "Grandeco" -} diff --git a/dist/extensions/Graph/i18n/es.json b/dist/extensions/Graph/i18n/es.json deleted file mode 100644 index 313a6d3ed..000000000 --- a/dist/extensions/Graph/i18n/es.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Dgstranz", - "Fitoschido", - "Luan", - "Macofe", - "SinNovedades", - "MarcoAurelio" - ] - }, - "graph-desc": "Permite transformar etiquetas <graph> o páginas enteras en gráficos basados en [http://vega.github.io/ Vega]", - "graphsandbox": "Zona de pruebas para gráficos", - "graph-tracking-category": "Páginas con gráficos", - "graph-tracking-category-desc": "La página incluye una etiqueta .", - "graph-broken-category": "Páginas con gráficos mal implementados", - "graph-broken-category-desc": "La página incluye una etiqueta con uso no válido.", - "graph-obsolete-category": "Páginas con gráficos de Vega 1.0 obsoletos", - "graph-obsolete-category-desc": "La página incluye una etiqueta que debería actualizarse a la versión 2.", - "graph-error-empty-json": "El gráfico no tiene datos. Nada que mostrar.", - "graph-error-not-vega": "El JSON proporcionado no es un JSON válido para Vega", - "graph-ve-dialog-button-tooltip": "Gráfico", - "graph-ve-dialog-edit-field-graph-type": "Tipo de gráfico", - "graph-ve-dialog-edit-field-raw-json": "Especificación JSON en bruto", - "graph-ve-dialog-edit-height": "Altura", - "graph-ve-dialog-edit-json-invalid": "Cadena JSON no válida", - "graph-ve-dialog-edit-padding-auto": "Relleno automático", - "graph-ve-dialog-edit-padding-bottom": "Abajo", - "graph-ve-dialog-edit-padding-left": "Izquierda", - "graph-ve-dialog-edit-padding-right": "Derecha", - "graph-ve-dialog-edit-padding-top": "Arriba", - "graph-ve-dialog-edit-page-data": "Datos", - "graph-ve-dialog-edit-page-general": "General", - "graph-ve-dialog-edit-page-raw": "Datos sin procesar", - "graph-ve-dialog-edit-size-field": "Tamaño", - "graph-ve-dialog-edit-size-table-unit": "Píxeles", - "graph-ve-dialog-edit-title": "Editar gráfico", - "graph-ve-dialog-edit-type-area": "Gráfico de áreas", - "graph-ve-dialog-edit-type-bar": "Gráfico de barras", - "graph-ve-dialog-edit-type-line": "Gráfico de líneas", - "graph-ve-dialog-edit-type-unknown": "Tipo de gráfico desconocido", - "graph-ve-dialog-edit-width": "Anchura", - "graph-ve-dialog-edit-unknown-graph-type-warning": "No se admite este tipo de gráfico. Cualquier modificación que se le haga puede arruinar su visualización. Edita el gráfico mediante la especificación de datos sin procesar en la pestaña \"{{int:graph-ve-dialog-edit-page-raw}}\".", - "graph-ve-empty-graph": "Gráfico vacío", - "graph-ve-no-spec": "No se encontró ninguna especificación de gráficos", - "graph-ve-vega-error": "Vega ha encontrado un error al representar este gráfico", - "graph-ve-vega-error-no-render": "Vega fue incapaz de representar este gráfico" -} diff --git a/dist/extensions/Graph/i18n/et.json b/dist/extensions/Graph/i18n/et.json deleted file mode 100644 index 44fb5a598..000000000 --- a/dist/extensions/Graph/i18n/et.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Pikne" - ] - }, - "graph-desc": "Võimaldab teha <graph>-siltidest või tervetest lehekülgedest [http://vega.github.io/ Vega]-põhiseid diagramme.", - "graphsandbox": "Diagrammide liivakast", - "graph-tracking-category": "Diagrammidega leheküljed", - "graph-tracking-category-desc": "Leheküljel on silt .", - "graph-broken-category": "Katkiste diagrammidega leheküljed", - "graph-broken-category-desc": "Leheküljel on kasutatud silti vigaselt.", - "graph-obsolete-category": "Vananenud Vega 1.0 diagrammidega leheküljed", - "graph-obsolete-category-desc": "Lehekülg sisaldab silti , mis tuleks uuendada versioonile 2.", - "graph-ve-dialog-button-tooltip": "Diagramm", - "graph-ve-dialog-edit-field-graph-type": "Diagrammitüüp", - "graph-ve-dialog-edit-field-raw-json": "Toorkujul JSON", - "graph-ve-dialog-edit-height": "Kõrgus", - "graph-ve-dialog-edit-json-invalid": "Vigane JSON-sõne", - "graph-ve-dialog-edit-padding-auto": "Automaatne vooderdus", - "graph-ve-dialog-edit-padding-bottom": "All", - "graph-ve-dialog-edit-padding-left": "Vasakul", - "graph-ve-dialog-edit-padding-right": "Paremal", - "graph-ve-dialog-edit-padding-top": "Ülal", - "graph-ve-dialog-edit-page-data": "Andmed", - "graph-ve-dialog-edit-page-general": "Üldine", - "graph-ve-dialog-edit-page-raw": "Toorandmed", - "graph-ve-dialog-edit-size-field": "Suurus", - "graph-ve-dialog-edit-title": "Diagrammi muutmine", - "graph-ve-dialog-edit-type-area": "Kihtdiagramm", - "graph-ve-dialog-edit-type-bar": "Tulpdiagramm", - "graph-ve-dialog-edit-type-line": "Joondiagramm", - "graph-ve-dialog-edit-type-unknown": "Tundmatu diagrammitüüp", - "graph-ve-dialog-edit-width": "Laius", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Selle diagrammitüübi tugi puudub. Muudatused võivad rikkuda diagrammi väljanägemise. Palun muuda diagrammi toorandmete kujul kaardil \"{{int:graph-ve-dialog-edit-page-raw}}\".", - "graph-ve-no-spec": "Diagrammi spetsifikatsiooni ei leitud", - "graph-ve-vega-error": "Vahendil Vega esines selle diagrammi viimistlemisel tõrge.", - "graph-ve-vega-error-no-render": "Vahendil Vega ei õnnestunud seda diagrammi viimistleda." -} diff --git a/dist/extensions/Graph/i18n/eu.json b/dist/extensions/Graph/i18n/eu.json deleted file mode 100644 index 8e81280c7..000000000 --- a/dist/extensions/Graph/i18n/eu.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "@metadata": { - "authors": [ - "An13sa", - "Mikel Ibaiba", - "Sator", - "Subi" - ] - }, - "graph-ve-dialog-button-tooltip": "Grafikoa", - "graph-ve-dialog-edit-height": "Altuera", - "graph-ve-dialog-edit-padding-left": "Ezkerrera", - "graph-ve-dialog-edit-size-field": "Tamaina", - "graph-ve-dialog-edit-size-table-unit": "Pixelak", - "graph-ve-dialog-edit-width": "Zabalera" -} diff --git a/dist/extensions/Graph/i18n/fa.json b/dist/extensions/Graph/i18n/fa.json deleted file mode 100644 index 9e8ae6c4b..000000000 --- a/dist/extensions/Graph/i18n/fa.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Beginneruser", - "Ebraminio", - "Jeeputer", - "Ladsgroup", - "Reza1615" - ] - }, - "graph-desc": "به برچسب‌های <graph> یا کل صفحه‌ها اجازه می‌دهد تا به گراف‌های مبتنی بر [http://vega.github.io/ وگا] تبدیل شوند", - "graphsandbox": "صفحهٔ تمرین گراف", - "graph-tracking-category": "صفحه‌های دارای گراف", - "graph-tracking-category-desc": "این صفحه شامل تگ است", - "graph-broken-category": "صفحه‌های دارای گراف شکسته", - "graph-broken-category-desc": "این صفحه تگ با کاربرد نادرست دارد.", - "graph-obsolete-category": "صفحه‌های با گراف منسوخ وگا ۱.۰", - "graph-error-empty-json": "اطلاعات گراف خالی، چیزی برای نمایش وجود ندارد", - "graph-error-not-vega": "JSON داده شده یک JSON معتبر وگا نیست", - "graph-ve-dialog-button-tooltip": "گراف", - "graph-ve-dialog-edit-field-graph-type": "نوع گراف", - "graph-ve-dialog-edit-field-raw-json": "توصیف خام JSON", - "graph-ve-dialog-edit-height": "ارتفاع", - "graph-ve-dialog-edit-json-invalid": "رشته نامعتبر JSON", - "graph-ve-dialog-edit-padding-bottom": "پایین", - "graph-ve-dialog-edit-padding-left": "چپ", - "graph-ve-dialog-edit-padding-right": "راست", - "graph-ve-dialog-edit-padding-top": "بالا", - "graph-ve-dialog-edit-page-data": "داده‌ها", - "graph-ve-dialog-edit-page-general": "عمومی", - "graph-ve-dialog-edit-page-raw": "اطلاعات خام", - "graph-ve-dialog-edit-size-field": "اندازه", - "graph-ve-dialog-edit-size-table-unit": "پیکسل", - "graph-ve-dialog-edit-title": "ویرایش گراف", - "graph-ve-dialog-edit-type-area": "گراف سطح", - "graph-ve-dialog-edit-type-bar": "گراف میله‌ای", - "graph-ve-dialog-edit-type-line": "گراف خطی", - "graph-ve-dialog-edit-type-unknown": "نوع گراف ناشناخته", - "graph-ve-dialog-edit-width": "عرض", - "graph-ve-empty-graph": "گراف خالی", - "graph-ve-no-spec": "نوع گرافی یافت نشد", - "graph-ve-vega-error": "وگا در رندر کردن این گراف به خطا خورد", - "graph-ve-vega-error-no-render": "وگا قادر به رندر این گراف نیست" -} diff --git a/dist/extensions/Graph/i18n/fi.json b/dist/extensions/Graph/i18n/fi.json deleted file mode 100644 index 34dd1e1e3..000000000 --- a/dist/extensions/Graph/i18n/fi.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Nike", - "Pyscowicz", - "Silvonen", - "Stryn" - ] - }, - "graphsandbox": "Graph-hiekkalaatikko", - "graph-tracking-category": "Sivut, joissa on kaavioita", - "graph-ve-dialog-button-tooltip": "Kaavio", - "graph-ve-dialog-edit-height": "Korkeus", - "graph-ve-dialog-edit-padding-left": "Vasen", - "graph-ve-dialog-edit-padding-right": "Oikea", - "graph-ve-dialog-edit-size-field": "Koko", - "graph-ve-dialog-edit-size-table-unit": "Pikseliä", - "graph-ve-dialog-edit-title": "Muokkaa kuvaajaa" -} diff --git a/dist/extensions/Graph/i18n/fr.json b/dist/extensions/Graph/i18n/fr.json deleted file mode 100644 index eedfd9491..000000000 --- a/dist/extensions/Graph/i18n/fr.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Djiboun", - "Gomoko", - "Macofe", - "Mattho69", - "Orlodrim", - "PifyZ", - "The RedBurn", - "Thibaut120094", - "Titip1995", - "Urhixidur", - "Wladek92", - "Verdy p" - ] - }, - "graph-desc": "Permet aux balises <graph> ou aux pages complètes de devenir des graphiques basés sur [http://vega.github.io/ Vega]", - "graphsandbox": "Bac à sable de Graph", - "graph-tracking-category": "Pages avec des graphiques", - "graph-tracking-category-desc": "La page contient une balise .", - "graph-broken-category": "Pages avec des graphiques contenant des erreurs", - "graph-broken-category-desc": "La page utilise la balise avec un contenu non valide.", - "graph-obsolete-category": "Pages avec des graphiques Vega 1.0 désuets", - "graph-obsolete-category-desc": "Cette page contient une balise qui doit être mise à jour vers la version 2.", - "graph-error-empty-json": "Aucune donnée de graphique, rien à afficher", - "graph-error-not-vega": "Le JSON fourni n’est pas un JSON Vega valide", - "graph-ve-dialog-button-tooltip": "Graphique", - "graph-ve-dialog-edit-field-graph-type": "Type de graphique", - "graph-ve-dialog-edit-field-raw-json": "Spécification JSON brute", - "graph-ve-dialog-edit-height": "Hauteur", - "graph-ve-dialog-edit-json-invalid": "Chaîne JSON non valide", - "graph-ve-dialog-edit-padding-auto": "Rembourrage automatique", - "graph-ve-dialog-edit-padding-bottom": "Bas", - "graph-ve-dialog-edit-padding-left": "Gauche", - "graph-ve-dialog-edit-padding-right": "Droite", - "graph-ve-dialog-edit-padding-top": "Haut", - "graph-ve-dialog-edit-page-data": "Données", - "graph-ve-dialog-edit-page-general": "Général", - "graph-ve-dialog-edit-page-raw": "Données brutes", - "graph-ve-dialog-edit-size-field": "Taille", - "graph-ve-dialog-edit-size-table-unit": "Pixels", - "graph-ve-dialog-edit-title": "Modifier le graphique", - "graph-ve-dialog-edit-type-area": "Graphique en aires", - "graph-ve-dialog-edit-type-bar": "Graphique en barres", - "graph-ve-dialog-edit-type-line": "Graphique en lignes", - "graph-ve-dialog-edit-type-unknown": "Type de graphique inconnu", - "graph-ve-dialog-edit-width": "Largeur", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Le type de ce graphique n’est pas pris en charge et toute modification qui y sera apportée pourrait casser son affichage. Veuillez modifier le graphique via la spécification de données brutes dans l’onglet « {{int:graph-ve-dialog-edit-page-raw}} ».", - "graph-ve-empty-graph": "Graphique vide", - "graph-ve-no-spec": "Spécification de graphique introuvable", - "graph-ve-vega-error": "Une erreur s’est produite lors du rendu de ce graphique par Vega", - "graph-ve-vega-error-no-render": "Vega n’a pas pu effectuer le rendu de ce graphique" -} diff --git a/dist/extensions/Graph/i18n/fy.json b/dist/extensions/Graph/i18n/fy.json deleted file mode 100644 index eec2b2d13..000000000 --- a/dist/extensions/Graph/i18n/fy.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "PiefPafPier" - ] - }, - "graph-ve-dialog-button-tooltip": "Grafyk" -} diff --git a/dist/extensions/Graph/i18n/ga.json b/dist/extensions/Graph/i18n/ga.json deleted file mode 100644 index fbc3bf8f8..000000000 --- a/dist/extensions/Graph/i18n/ga.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Nmacu" - ] - }, - "graphsandbox": "Graif: bosca gainimh" -} diff --git a/dist/extensions/Graph/i18n/gl.json b/dist/extensions/Graph/i18n/gl.json deleted file mode 100644 index 66b694c31..000000000 --- a/dist/extensions/Graph/i18n/gl.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Banjo", - "Elisardojm" - ] - }, - "graph-desc": "Permite que as etiquetas <graph> ou páxinas enteiras se convirtan en gráficos basados en [http://vega.github.io/ Vega]", - "graphsandbox": "Zona de probas do gráfico", - "graph-tracking-category": "Páxinas con gráficos", - "graph-tracking-category-desc": "A páxina inclúe unha etiqueta .", - "graph-broken-category": "Páxinas con gráficos rotos", - "graph-broken-category-desc": "A páxina inclúe unha etiqueta con uso non válido.", - "graph-obsolete-category": "Páxinas con gráficos obsoletos Vega 1.0", - "graph-obsolete-category-desc": "A páxina inclúe unha etiqueta que ten que ser actualizada á versión 2.", - "graph-error-empty-json": "Datos de gráfico baleiros, nada que amosar", - "graph-error-not-vega": "O JSON proporcionada non é un JSON Vega válido", - "graph-ve-dialog-button-tooltip": "Gráfico", - "graph-ve-dialog-edit-field-graph-type": "Tipo de gráfico", - "graph-ve-dialog-edit-field-raw-json": "Especificación de JSON cru", - "graph-ve-dialog-edit-height": "Altura", - "graph-ve-dialog-edit-json-invalid": "Cadea JSON non válida", - "graph-ve-dialog-edit-padding-auto": "Recheo automático", - "graph-ve-dialog-edit-padding-bottom": "Abaixo", - "graph-ve-dialog-edit-padding-left": "Esquerda", - "graph-ve-dialog-edit-padding-right": "Dereita", - "graph-ve-dialog-edit-padding-top": "Arriba", - "graph-ve-dialog-edit-page-data": "Datos", - "graph-ve-dialog-edit-page-general": "Xeral", - "graph-ve-dialog-edit-page-raw": "Datos sen procesar", - "graph-ve-dialog-edit-size-field": "Tamaño", - "graph-ve-dialog-edit-size-table-unit": "Píxeles", - "graph-ve-dialog-edit-title": "Editar gráfico", - "graph-ve-dialog-edit-type-area": "Gráfico de áreas", - "graph-ve-dialog-edit-type-bar": "Gráfico de barras", - "graph-ve-dialog-edit-type-line": "Gráfico de liñas", - "graph-ve-dialog-edit-type-unknown": "Tipo de gráfico descoñecido", - "graph-ve-dialog-edit-width": "Ancho", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Non se admite este tipo de gráfico. Calquera modificación que se lle faga pode arruinar a súa visualización. Edite o gráfico mediante a especificación de datos sen procesar na lapela \"{{int:graph-ve-dialog-edit-page-raw}}\".", - "graph-ve-empty-graph": "Gráfico baleiro", - "graph-ve-no-spec": "Non se atopou ningunha especificación de gráficos", - "graph-ve-vega-error": "Vega atopou un erro renderizando este gráfico", - "graph-ve-vega-error-no-render": "Vega non foi capaz de renderizar este gráfico" -} diff --git a/dist/extensions/Graph/i18n/gu.json b/dist/extensions/Graph/i18n/gu.json deleted file mode 100644 index b1d4169b1..000000000 --- a/dist/extensions/Graph/i18n/gu.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Nisargjhaveri" - ] - }, - "graph-ve-dialog-button-tooltip": "આલેખ", - "graph-ve-dialog-edit-json-invalid": "અમાન્ય JSON સ્ટ્રિંગ", - "graph-ve-dialog-edit-title": "આલેખ સંપાદિત કરો" -} diff --git a/dist/extensions/Graph/i18n/he.json b/dist/extensions/Graph/i18n/he.json deleted file mode 100644 index e0e379430..000000000 --- a/dist/extensions/Graph/i18n/he.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Amire80", - "Guycn2" - ] - }, - "graph-desc": "מאפשרת לתגי <graph> או לדפים שלמים להיות תרשים שמבוססים על [http://vega.github.io/ Vega]", - "graphsandbox": "ארגז חול לתרשימים", - "graph-tracking-category": "דפים עם תרשימים", - "graph-tracking-category-desc": "הדף הזה מכיל תג .", - "graph-broken-category": "דפים עם תרשימים מקולקלים", - "graph-broken-category-desc": "הדף הזה מכיל תג עם שימוש בלתי־תקין.", - "graph-obsolete-category": "דפים עם תרשימים מיושנים של Vega 1.0", - "graph-obsolete-category-desc": "הדף הזה מכיל תג שצריך לעדכן לגרסה 2.", - "graph-error-empty-json": "נתוני גרף ריקים, אין מה להציג", - "graph-error-not-vega": "ה־JSON שסופק הוא לא JSON תקין של Vega", - "graph-ve-dialog-button-tooltip": "תרשים", - "graph-ve-dialog-edit-field-graph-type": "סוג התרשים", - "graph-ve-dialog-edit-field-raw-json": "הגדרה ב־JSON גולמי", - "graph-ve-dialog-edit-height": "גובה", - "graph-ve-dialog-edit-json-invalid": "מחרוזת JSON בלתי־תקינה", - "graph-ve-dialog-edit-padding-auto": "ריפוד אוטומטי", - "graph-ve-dialog-edit-padding-bottom": "למטה", - "graph-ve-dialog-edit-padding-left": "משמאל", - "graph-ve-dialog-edit-padding-right": "מימין", - "graph-ve-dialog-edit-padding-top": "למעלה", - "graph-ve-dialog-edit-page-data": "נתונים", - "graph-ve-dialog-edit-page-general": "כללי", - "graph-ve-dialog-edit-page-raw": "נתונים גולמיים", - "graph-ve-dialog-edit-size-field": "גודל", - "graph-ve-dialog-edit-size-table-unit": "פיקסלים", - "graph-ve-dialog-edit-title": "עריכת תרשים", - "graph-ve-dialog-edit-type-area": "תרשים שטח", - "graph-ve-dialog-edit-type-bar": "תרשים עמודות", - "graph-ve-dialog-edit-type-line": "תרשים קווים", - "graph-ve-dialog-edit-type-unknown": "סוג תרשים בלתי־ידוע", - "graph-ve-dialog-edit-width": "רוחב", - "graph-ve-dialog-edit-unknown-graph-type-warning": "אין תמיכה בסוג התרשים הזה, וכל שינוי עלול לקלקל את התצוגה שלו. נא לערוך את התרשים דרך מפרט הנתונים הגולמיים או דרך לשונית \"{{int:graph-ve-dialog-edit-page-raw}}\".", - "graph-ve-empty-graph": "תרשים ריק", - "graph-ve-no-spec": "לא נמצאו הגדרות תרשים", - "graph-ve-vega-error": "וגה מצאה שגיאה בתיצוג התרשים הזה", - "graph-ve-vega-error-no-render": "וגה לא הצליחה לתצג את התרשים הזה" -} diff --git a/dist/extensions/Graph/i18n/hr.json b/dist/extensions/Graph/i18n/hr.json deleted file mode 100644 index 229e1f46d..000000000 --- a/dist/extensions/Graph/i18n/hr.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "@metadata": { - "authors": [ - "MaGa" - ] - }, - "graphsandbox": "Vježbalište za grafikone", - "graph-tracking-category": "Stranice koje sadrže grafikone", - "graph-tracking-category-desc": "Stranica s oznakom .", - "graph-ve-dialog-button-tooltip": "Grafikon", - "graph-ve-dialog-edit-field-graph-type": "Vrsta grafikona", - "graph-ve-dialog-edit-field-raw-json": "Neobrađena JSON specifikacija", - "graph-ve-dialog-edit-height": "Visina", - "graph-ve-dialog-edit-json-invalid": "Krivi JSON niz", - "graph-ve-dialog-edit-padding-auto": "Automatske margine", - "graph-ve-dialog-edit-padding-bottom": "Dno", - "graph-ve-dialog-edit-padding-left": "Lijevo", - "graph-ve-dialog-edit-padding-right": "Desno", - "graph-ve-dialog-edit-padding-top": "Vrh", - "graph-ve-dialog-edit-page-data": "Podatci", - "graph-ve-dialog-edit-page-general": "Opće", - "graph-ve-dialog-edit-page-raw": "Neobrađeni podatci", - "graph-ve-dialog-edit-size-field": "Veličina", - "graph-ve-dialog-edit-size-table-unit": "Piksela", - "graph-ve-dialog-edit-title": "Uredi grafikon", - "graph-ve-dialog-edit-type-area": "Površinski grafikon", - "graph-ve-dialog-edit-type-bar": "Stupčasti grafikon", - "graph-ve-dialog-edit-type-line": "Linijski grafikon", - "graph-ve-dialog-edit-type-unknown": "Nepoznata vrsta grafikona", - "graph-ve-dialog-edit-width": "Širina", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Ova vrsta grafikona nije podržana, i izmjene mogu rezultirati krivim prikazom. Molimo uredite grafikon preko specifikacije neobrađenih podataka na kartici '{{int:graph-ve-dialog-edit-page-raw}}'.", - "graph-ve-empty-graph": "Prazan grafikon", - "graph-ve-no-spec": "Grafikon nema specifikacija", - "graph-ve-vega-error": "Vega je naišla na grešku pri iscrtavanju ovog grafikona", - "graph-ve-vega-error-no-render": "Vega nije mogla iscrtati ovaj grafikon" -} diff --git a/dist/extensions/Graph/i18n/hu.json b/dist/extensions/Graph/i18n/hu.json deleted file mode 100644 index da0d2ec0f..000000000 --- a/dist/extensions/Graph/i18n/hu.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Tacsipacsi" - ] - }, - "graph-desc": "Lehetővé teszi <graph> címkék vagy teljes lapok [http://vega.github.io/ Vega]-alapú grafikonokká alakítását", - "graphsandbox": "Graph-homokozó", - "graph-tracking-category": "Lapok grafikonokkal", - "graph-tracking-category-desc": "A lap tartalmaz egy elemet.", - "graph-broken-category": "Lapok hibás grafikonokkal", - "graph-broken-category-desc": "A lap tartalmaz egy hibásan használt elemet.", - "graph-obsolete-category": "Lapok elavult Vega 1.0-grafikonokkal", - "graph-obsolete-category-desc": "A lap tartalmaz egy elemet, amit 2-es verzióra kellene frissíteni.", - "graph-error-empty-json": "Üres grafikonadatok, nincs mit megjeleníteni", - "graph-error-not-vega": "A megadott JSON nem érvényes Vega-JSON", - "graph-ve-dialog-button-tooltip": "Grafikon", - "graph-ve-dialog-edit-field-graph-type": "Grafikontípus", - "graph-ve-dialog-edit-field-raw-json": "Nyers JSON specifikáció", - "graph-ve-dialog-edit-height": "Magasság", - "graph-ve-dialog-edit-json-invalid": "Érvénytelen JSON", - "graph-ve-dialog-edit-padding-auto": "Automatikus belső margó", - "graph-ve-dialog-edit-padding-bottom": "Alsó", - "graph-ve-dialog-edit-padding-left": "Bal", - "graph-ve-dialog-edit-padding-right": "Jobb", - "graph-ve-dialog-edit-padding-top": "Felső", - "graph-ve-dialog-edit-page-data": "Adatok", - "graph-ve-dialog-edit-page-general": "Általános", - "graph-ve-dialog-edit-page-raw": "Nyers adatok", - "graph-ve-dialog-edit-size-field": "Méret", - "graph-ve-dialog-edit-size-table-unit": "Képpont", - "graph-ve-dialog-edit-title": "Grafikon szerkesztése", - "graph-ve-dialog-edit-type-area": "Területdiagram", - "graph-ve-dialog-edit-type-bar": "Oszlopdiagram", - "graph-ve-dialog-edit-type-line": "Vonaldiagram", - "graph-ve-dialog-edit-type-unknown": "Ismeretlen diagramtípus", - "graph-ve-dialog-edit-width": "Szélesség", - "graph-ve-dialog-edit-unknown-graph-type-warning": "A diagram típusa nem támogatott, bármilyen módosítás tönkreteheti a kinézetét. A nem kívánt módosítások elkerüléséhez a nyers adatokat szerkeszd.", - "graph-ve-empty-graph": "Üres diagram", - "graph-ve-no-spec": "Nem található specifikáció", - "graph-ve-vega-error": "A Vega hibát észlelt a grafikon feldolgozásakor", - "graph-ve-vega-error-no-render": "A Vega nem tudta feldolgozni a grafikont" -} diff --git a/dist/extensions/Graph/i18n/hy.json b/dist/extensions/Graph/i18n/hy.json deleted file mode 100644 index 9b618fcd9..000000000 --- a/dist/extensions/Graph/i18n/hy.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Դավիթ Սարոյան" - ] - }, - "graph-tracking-category": "Գրաֆիկներով էջեր", - "graph-tracking-category-desc": "Էջում կա թեգ", - "graph-broken-category": "Կոտրված գրաֆիկներով էջեր", - "graph-broken-category-desc": "Էջը պարունակում է սխալ կիրառմամբ թեգ", - "graph-ve-dialog-button-tooltip": "Գրաֆիկ", - "graph-ve-dialog-edit-field-graph-type": "Գրաֆիկի տեսակ", - "graph-ve-dialog-edit-field-raw-json": "Հում JSON կարգավորումներ", - "graph-ve-dialog-edit-height": "Բարձրություն", - "graph-ve-dialog-edit-json-invalid": "Սխալ JSON հաջորդականություն", - "graph-ve-dialog-edit-padding-auto": "Ավտոմատ հեռավորություն", - "graph-ve-dialog-edit-padding-bottom": "Վերև", - "graph-ve-dialog-edit-padding-left": "Ձախ", - "graph-ve-dialog-edit-padding-right": "Աջ", - "graph-ve-dialog-edit-padding-top": "Վերև", - "graph-ve-dialog-edit-page-data": "Տվյալներ", - "graph-ve-dialog-edit-page-general": "Ընդհանուր", - "graph-ve-dialog-edit-page-raw": "Ելակետային տվյալներ", - "graph-ve-dialog-edit-size-field": "Չափս", - "graph-ve-dialog-edit-size-table-unit": "Պիքսելներ", - "graph-ve-dialog-edit-title": "Խմբագրել գրաֆիկը", - "graph-ve-dialog-edit-type-area": "Մակերեսային գրաֆիկ", - "graph-ve-dialog-edit-type-bar": "Սյունակներով գրաֆիկ", - "graph-ve-dialog-edit-type-line": "Գծային գրաֆիկ", - "graph-ve-dialog-edit-type-unknown": "Գրաֆիկի անհայտ տեսակ", - "graph-ve-dialog-edit-width": "Լայնություն" -} diff --git a/dist/extensions/Graph/i18n/hyw.json b/dist/extensions/Graph/i18n/hyw.json deleted file mode 100644 index 8fdf633e6..000000000 --- a/dist/extensions/Graph/i18n/hyw.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Azniv Stepanian", - "Kareyac", - "Դավիթ Սարոյան" - ] - }, - "graph-ve-dialog-button-tooltip": "Գծանկար", - "graph-ve-dialog-edit-padding-left": "Ձախ", - "graph-ve-dialog-edit-width": "Լայնութիւն" -} diff --git a/dist/extensions/Graph/i18n/ia.json b/dist/extensions/Graph/i18n/ia.json deleted file mode 100644 index 970bcbb23..000000000 --- a/dist/extensions/Graph/i18n/ia.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "@metadata": { - "authors": [ - "McDutchie" - ] - }, - "graph-desc": "Permitte que etiquettas <graph> o mesmo paginas complete deveni graphicos basate sur [http://vega.github.io/ Vega]", - "graphsandbox": "Sabliera de Graph", - "graph-tracking-category": "Paginas con graphicos", - "graph-tracking-category-desc": "Le pagina include un etiquetta .", - "graph-broken-category": "Paginas con graphicos rupte", - "graph-broken-category-desc": "Le pagina include un etiquetta con uso non valide.", - "graph-obsolete-category": "Paginas con graphicos Vega 1.0 obsolete", - "graph-obsolete-category-desc": "Le pagina include un etiquetta que debe esser actualisate al version 2.", - "graph-error-empty-json": "Datos de graphico vacue, nihil a monstrar", - "graph-error-not-vega": "Le JSON fornite non es un JSON valide de Vega", - "graph-ve-dialog-button-tooltip": "Graphico", - "graph-ve-dialog-edit-field-graph-type": "Typo de graphico", - "graph-ve-dialog-edit-field-raw-json": "Specification JSON brute", - "graph-ve-dialog-edit-height": "Altitude", - "graph-ve-dialog-edit-json-invalid": "Catena JSON non valide", - "graph-ve-dialog-edit-padding-auto": "Impletion automatic", - "graph-ve-dialog-edit-padding-bottom": "Basso", - "graph-ve-dialog-edit-padding-left": "Sinistra", - "graph-ve-dialog-edit-padding-right": "Dextra", - "graph-ve-dialog-edit-padding-top": "Alto", - "graph-ve-dialog-edit-page-data": "Datos", - "graph-ve-dialog-edit-page-general": "General", - "graph-ve-dialog-edit-page-raw": "Datos brute", - "graph-ve-dialog-edit-size-field": "Dimension", - "graph-ve-dialog-edit-size-table-unit": "Pixels", - "graph-ve-dialog-edit-title": "Modificar graphico", - "graph-ve-dialog-edit-type-area": "Graphico de areas", - "graph-ve-dialog-edit-type-bar": "Graphico de barras", - "graph-ve-dialog-edit-type-line": "Graphico de lineas", - "graph-ve-dialog-edit-type-unknown": "Typo de graphico incognite", - "graph-ve-dialog-edit-width": "Latitude", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Le typo de iste graphico non es supportate. Omne modification apportate a illo pote rumper su visualisation. Per favor modifica le graphico usante le specification de datos crude sur le scheda \"{{int:graph-ve-dialog-edit-page-raw}}\".", - "graph-ve-empty-graph": "Graphico vacue", - "graph-ve-no-spec": "Nulle specification de graphico trovate", - "graph-ve-vega-error": "Vega ha incontrate un error rendente iste graphico", - "graph-ve-vega-error-no-render": "Vega non ha potite render iste graphico" -} diff --git a/dist/extensions/Graph/i18n/id.json b/dist/extensions/Graph/i18n/id.json deleted file mode 100644 index 0a9a68353..000000000 --- a/dist/extensions/Graph/i18n/id.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "@metadata": { - "authors": [ - "William Surya Permana" - ] - }, - "graph-desc": "Memungkinkan tag <graph> atau keseluruhan halaman menjadi bagan berbasis [http://vega.github.io/ Vega]", - "graphsandbox": "Bak pasir bagan", - "graph-tracking-category": "Halaman dengan bagan", - "graph-tracking-category-desc": "Halaman yang menyertakan tag .", - "graph-broken-category": "Halaman dengan bagan rusak", - "graph-broken-category-desc": "Halaman yang menyertakan tag dengan penggunaan yang tidak sah.", - "graph-obsolete-category": "Halaman dengan bagan Vega 1.0 usang", - "graph-obsolete-category-desc": "Halaman yang menyertakan tag yang harus diperbarui ke versi 2.", - "graph-error-empty-json": "Data bagan kosong, tidak ada yang bisa ditampilkan", - "graph-error-not-vega": "JSON yang disediakan bukan merupakan JSON Vega yang sah", - "graph-ve-dialog-button-tooltip": "Bagan", - "graph-ve-dialog-edit-field-graph-type": "Jenis bagan", - "graph-ve-dialog-edit-field-raw-json": "Spesifikasi JSON mentah", - "graph-ve-dialog-edit-height": "Tinggi", - "graph-ve-dialog-edit-json-invalid": "Teks JSON tidak sah", - "graph-ve-dialog-edit-padding-auto": "Beri jarak otomatis", - "graph-ve-dialog-edit-padding-bottom": "Bawah", - "graph-ve-dialog-edit-padding-left": "Kiri", - "graph-ve-dialog-edit-padding-right": "Kanan", - "graph-ve-dialog-edit-padding-top": "Atas", - "graph-ve-dialog-edit-page-data": "Data", - "graph-ve-dialog-edit-page-general": "Umum", - "graph-ve-dialog-edit-page-raw": "Data mentah", - "graph-ve-dialog-edit-size-field": "Ukuran", - "graph-ve-dialog-edit-size-table-unit": "Piksel", - "graph-ve-dialog-edit-title": "Sunting bagan", - "graph-ve-dialog-edit-type-area": "Bagan area", - "graph-ve-dialog-edit-type-bar": "Bagan batang", - "graph-ve-dialog-edit-type-line": "Bagan garis", - "graph-ve-dialog-edit-type-unknown": "Jenis bagan tak dikenal", - "graph-ve-dialog-edit-width": "Lebar", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Jenis bagan ini tidak didukung, dan perubahan apa pun yang dibuat kepadanya mungkin akan merusak tampilan. Silakan sunting bagan ini melalui spesifikasi data mentah pada tab \"{{int:graph-ve-dialog-edit-page-raw}}\".", - "graph-ve-empty-graph": "Bagan kosong", - "graph-ve-no-spec": "Spesifikasi bagan tidak ditemukan", - "graph-ve-vega-error": "Vega telah menemui galat saat menampilkan bagan ini", - "graph-ve-vega-error-no-render": "Vega tidak dapat menampilkan bagan ini" -} diff --git a/dist/extensions/Graph/i18n/ilo.json b/dist/extensions/Graph/i18n/ilo.json deleted file mode 100644 index 5d811e1c6..000000000 --- a/dist/extensions/Graph/i18n/ilo.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Lam-ang" - ] - }, - "graph-desc": "Mangipalubos kadagiti etiketa ti <graph> wenno dagiti intero a panid nga agbalin kadagiti grapo a naibatay iti [http://vega.github.io/ Vega]", - "graphsandbox": "Pagipadasan ti grapo", - "graph-tracking-category": "Pampanid nga agraman kadagiti grapo", - "graph-tracking-category-desc": "Ti panid ket mangiraman iti etiketa ti .", - "graph-broken-category": "Pampanid nga agraman kadagiti nadadael a grapo", - "graph-broken-category-desc": "Ti panid ket mangiraman iti etiketa ti nga agraman iti imbalido a panagusar.", - "graph-obsolete-category": "Pampanid nga agraman kadagiti daan a grapo ti Vega 1.0", - "graph-obsolete-category-desc": "Ti panid ket mangiraman ti etiketa ti a nasken a mapabaro iti bersion 2.", - "graph-ve-dialog-button-tooltip": "Grapo", - "graph-ve-dialog-edit-field-graph-type": "Kita ti grapo", - "graph-ve-dialog-edit-field-raw-json": "Espesipikasion ti naata a JSON", - "graph-ve-dialog-edit-height": "Katayag", - "graph-ve-dialog-edit-json-invalid": "Imbalido a kuerdas ti JSON", - "graph-ve-dialog-edit-padding-auto": "Automatiko a tapar", - "graph-ve-dialog-edit-padding-bottom": "Baba", - "graph-ve-dialog-edit-padding-left": "Kanigid", - "graph-ve-dialog-edit-padding-right": "Kanawan", - "graph-ve-dialog-edit-padding-top": "Ngato", - "graph-ve-dialog-edit-page-data": "Datos", - "graph-ve-dialog-edit-page-general": "Sapasap", - "graph-ve-dialog-edit-page-raw": "Naata datos", - "graph-ve-dialog-edit-size-field": "Kadakkel", - "graph-ve-dialog-edit-size-table-unit": "Dagiti piksel", - "graph-ve-dialog-edit-title": "Urnosen ti grapo", - "graph-ve-dialog-edit-type-area": "Grapo ti kalawa", - "graph-ve-dialog-edit-type-bar": "Grapo ti baras", - "graph-ve-dialog-edit-type-line": "Grapo ti linia", - "graph-ve-dialog-edit-type-unknown": "Di ammo a kita ti grapo", - "graph-ve-dialog-edit-width": "Kaakaba", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Saan a nasuportaran daytoy a kita ti grapo, ken ti ania man a panagbaliw iti dayta ken mabalin a mangdadael iti pannakaiparangna. Pangngaasi nga urnosen ti grapo babaen ti espesipikasion ti naata a datos iti tab ti \"{{int:graph-ve-dialog-edit-page-raw}}\".", - "graph-ve-empty-graph": "Awan linaon a grapo", - "graph-ve-no-spec": "Awan ti nabirukan nga espesipikasion ti grapo", - "graph-ve-vega-error": "Nakasarak ti Vega ti maysa a panangipakita a biddut iti daytoy a grapo", - "graph-ve-vega-error-no-render": "Saan a napakabaelan ti Vega a mangipakita iti daytoy a grapo" -} diff --git a/dist/extensions/Graph/i18n/io.json b/dist/extensions/Graph/i18n/io.json deleted file mode 100644 index 99e1765b2..000000000 --- a/dist/extensions/Graph/i18n/io.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Joao Xavier" - ] - }, - "graph-ve-dialog-edit-height": "Altajo", - "graph-ve-dialog-edit-padding-left": "Sinistre", - "graph-ve-dialog-edit-padding-right": "Dextre", - "graph-ve-dialog-edit-page-general": "Ordinara pagino", - "graph-ve-dialog-edit-width": "Larjeso" -} diff --git a/dist/extensions/Graph/i18n/is.json b/dist/extensions/Graph/i18n/is.json deleted file mode 100644 index de843ed31..000000000 --- a/dist/extensions/Graph/i18n/is.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Sveinn í Felli", - "Stefán Örvar Sigmundsson" - ] - }, - "graph-tracking-category": "Síður með gröf", - "graph-tracking-category-desc": "Síðan innifelur -merki.", - "graph-broken-category-desc": "Síðan innifelur -merki með ógildri notkun.", - "graph-ve-dialog-button-tooltip": "Graf", - "graph-ve-dialog-edit-field-graph-type": "Tegund grafs:", - "graph-ve-dialog-edit-height": "Hæð", - "graph-ve-dialog-edit-padding-bottom": "Neðst", - "graph-ve-dialog-edit-padding-left": "Vinstri", - "graph-ve-dialog-edit-padding-right": "Hægri", - "graph-ve-dialog-edit-padding-top": "Efst", - "graph-ve-dialog-edit-page-data": "Gögn", - "graph-ve-dialog-edit-page-general": "Almennt", - "graph-ve-dialog-edit-page-raw": "Hrá gögn", - "graph-ve-dialog-edit-size-field": "Stærð", - "graph-ve-dialog-edit-size-table-unit": "Mynddílar", - "graph-ve-dialog-edit-type-bar": "Stöplarit", - "graph-ve-dialog-edit-type-line": "Línurit", - "graph-ve-dialog-edit-width": "Breidd" -} diff --git a/dist/extensions/Graph/i18n/it.json b/dist/extensions/Graph/i18n/it.json deleted file mode 100644 index 7e1cef1f1..000000000 --- a/dist/extensions/Graph/i18n/it.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Alexmar983", - "Beta16", - "Fringio", - "Lucas2", - "Macofe", - "Mannivu", - "Statix64" - ] - }, - "graph-desc": "Permette il tag <graph> o intere pagine di diventare grafici basati su [http://vega.github.io/ Vega]", - "graphsandbox": "Pagina per le prove sui grafici", - "graph-tracking-category": "Pagine con grafici", - "graph-tracking-category-desc": "La pagina include un tag .", - "graph-broken-category": "Pagine con errori nei grafici", - "graph-broken-category-desc": "La pagina include un tag con utilizzo non valido.", - "graph-obsolete-category": "Pagine con grafici obsoleti Vega 1.0", - "graph-obsolete-category-desc": "La pagina include un tag che dovrebbe essere aggiornato alla versione 2.", - "graph-error-empty-json": "Dati del grafico vuoti, nulla da mostrare", - "graph-error-not-vega": "Il JSON fornito non è un Vega JSON valido", - "graph-ve-dialog-button-tooltip": "Grafico", - "graph-ve-dialog-edit-field-graph-type": "Tipo di grafico", - "graph-ve-dialog-edit-height": "Altezza", - "graph-ve-dialog-edit-json-invalid": "Stringa JSON non valida", - "graph-ve-dialog-edit-padding-bottom": "In fondo", - "graph-ve-dialog-edit-padding-left": "Sinistra", - "graph-ve-dialog-edit-padding-right": "Destra", - "graph-ve-dialog-edit-padding-top": "In alto", - "graph-ve-dialog-edit-page-data": "Dati", - "graph-ve-dialog-edit-page-general": "Generale", - "graph-ve-dialog-edit-size-field": "Dimensione", - "graph-ve-dialog-edit-size-table-unit": "Pixel", - "graph-ve-dialog-edit-title": "Modifica grafico", - "graph-ve-dialog-edit-type-area": "Grafico ad area", - "graph-ve-dialog-edit-type-bar": "Grafico a barre", - "graph-ve-dialog-edit-type-line": "Grafico a linee", - "graph-ve-dialog-edit-type-unknown": "Tipo di grafico sconosciuto", - "graph-ve-dialog-edit-width": "Larghezza", - "graph-ve-empty-graph": "Grafico vuoto", - "graph-ve-no-spec": "Nessuna specifica grafica è stata trovata" -} diff --git a/dist/extensions/Graph/i18n/ja.json b/dist/extensions/Graph/i18n/ja.json deleted file mode 100644 index 21cd830f5..000000000 --- a/dist/extensions/Graph/i18n/ja.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Delim", - "Higa4", - "Kkairri", - "Otokoume", - "Shirayuki", - "Sujiniku", - "Suyama", - "Yusuke1109" - ] - }, - "graph-desc": "<graph>タグまたはページ全体を[http://vega.github.io/ Vega]ベースのグラフにする", - "graphsandbox": "グラフの下書き", - "graph-tracking-category": "グラフのあるページ", - "graph-tracking-category-desc": "そのページは タグを含んでいます。", - "graph-broken-category": "破損したグラフのあるページ", - "graph-broken-category-desc": "そのページは タグを含んでおり、使用法が無効です。", - "graph-obsolete-category": "廃止されたVega 1.0のグラフを使用するページ", - "graph-obsolete-category-desc": "このページには、バージョン 2 へ更新すべき タグが含まれています。", - "graph-error-empty-json": "空のグラフデータ、表示するものはありません", - "graph-error-not-vega": "提供されたJSONは有効なVega JSONではありません", - "graph-ve-dialog-button-tooltip": "グラフ", - "graph-ve-dialog-edit-field-graph-type": "グラフの種類", - "graph-ve-dialog-edit-field-raw-json": "生のJSONデータ", - "graph-ve-dialog-edit-height": "高さ", - "graph-ve-dialog-edit-json-invalid": "無効な JSON 文字列", - "graph-ve-dialog-edit-padding-auto": "余白の幅の自動決定", - "graph-ve-dialog-edit-padding-bottom": "下", - "graph-ve-dialog-edit-padding-left": "左", - "graph-ve-dialog-edit-padding-right": "右", - "graph-ve-dialog-edit-padding-top": "上", - "graph-ve-dialog-edit-page-data": "データ", - "graph-ve-dialog-edit-page-general": "全般", - "graph-ve-dialog-edit-page-raw": "生データ", - "graph-ve-dialog-edit-size-field": "サイズ", - "graph-ve-dialog-edit-size-table-unit": "ピクセル", - "graph-ve-dialog-edit-title": "グラフの編集", - "graph-ve-dialog-edit-type-area": "面グラフ", - "graph-ve-dialog-edit-type-bar": "棒グラフ", - "graph-ve-dialog-edit-type-line": "線グラフ", - "graph-ve-dialog-edit-type-unknown": "不明なグラフ種別", - "graph-ve-dialog-edit-width": "幅", - "graph-ve-dialog-edit-unknown-graph-type-warning": "この種類のグラフは未サポートで、修正を入れると表示が崩れます。グラフは\"{{int:graph-ve-dialog-edit-page-raw}}\"タブにある生データ仕様に沿って編集してください。", - "graph-ve-empty-graph": "カラのグラフ", - "graph-ve-no-spec": "グラフの仕様が見つかりません", - "graph-ve-vega-error": "このグラフの描画中にVegaにエラーが発生しました", - "graph-ve-vega-error-no-render": "Vegaはこのgraphを描画できませんでした" -} diff --git a/dist/extensions/Graph/i18n/ka.json b/dist/extensions/Graph/i18n/ka.json deleted file mode 100644 index c87f248ca..000000000 --- a/dist/extensions/Graph/i18n/ka.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "@metadata": { - "authors": [ - "David1010", - "Otogi" - ] - }, - "graphsandbox": "დიაგრამის სენდბოქსი", - "graph-ve-dialog-button-tooltip": "გრაფიკი", - "graph-ve-dialog-edit-field-graph-type": "გრაფიკის ტიპი", - "graph-ve-dialog-edit-field-raw-json": "დაუმუშავებელი JSON მახასიათებლები", - "graph-ve-dialog-edit-padding-auto": "ავტომატური დაშორება", - "graph-ve-dialog-edit-page-data": "მონაცემი", - "graph-ve-dialog-edit-page-general": "მთავარი", - "graph-ve-dialog-edit-page-raw": "დაუმუშავებელი მონაცემები", - "graph-ve-dialog-edit-size-field": "ზომა", - "graph-ve-dialog-edit-title": "გრაფიკის რედაქტირება", - "graph-ve-dialog-edit-type-area": "ფართობის გრაფიკი", - "graph-ve-dialog-edit-type-bar": "ჰისტოგრამა", - "graph-ve-dialog-edit-type-line": "ხაზოვანი გრაფიკი" -} diff --git a/dist/extensions/Graph/i18n/kk-cyrl.json b/dist/extensions/Graph/i18n/kk-cyrl.json deleted file mode 100644 index 873caec30..000000000 --- a/dist/extensions/Graph/i18n/kk-cyrl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Arystanbek" - ] - }, - "graph-desc": "<graph> тегіне рұқсат етеді немесе [http://vega.github.io/ Vega] негізіндегі гафиктерді беттерге енгізу", - "graph-tracking-category": "Графигі бар беттер", - "graph-ve-dialog-button-tooltip": "График", - "graph-ve-dialog-edit-field-graph-type": "График түрі", - "graph-ve-dialog-edit-page-general": "Негізгі", - "graph-ve-dialog-edit-title": "Графикті өңдеу", - "graph-ve-dialog-edit-type-area": "Аумақ график", - "graph-ve-dialog-edit-type-bar": "Бағана график", - "graph-ve-dialog-edit-type-line": "Сызықтық график", - "graph-ve-dialog-edit-type-unknown": "Белгісіз график түрі" -} diff --git a/dist/extensions/Graph/i18n/km.json b/dist/extensions/Graph/i18n/km.json deleted file mode 100644 index 1cb8d9c99..000000000 --- a/dist/extensions/Graph/i18n/km.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "@metadata": { - "authors": [ - "គីមស៊្រុន" - ] - }, - "graph-ve-dialog-button-tooltip": "ក្រាហ្វ", - "graph-ve-dialog-edit-field-graph-type": "ប្រភេទក្រាហ្វ", - "graph-ve-dialog-edit-height": "កម្ពស់", - "graph-ve-dialog-edit-padding-auto": "ដាក់ជាយដោយស្វ័យប្រវត្តិ", - "graph-ve-dialog-edit-padding-bottom": "ក្រោម", - "graph-ve-dialog-edit-padding-left": "ឆ្វេង", - "graph-ve-dialog-edit-padding-right": "ស្ដាំ", - "graph-ve-dialog-edit-padding-top": "លើ", - "graph-ve-dialog-edit-page-data": "ទិន្នន័យ", - "graph-ve-dialog-edit-page-general": "ទូទៅ​", - "graph-ve-dialog-edit-page-raw": "ទិន្នន័យឆៅ", - "graph-ve-dialog-edit-size-field": "ទំហំ​", - "graph-ve-dialog-edit-size-table-unit": "ភីចសែល", - "graph-ve-dialog-edit-title": "កែប្រែក្រាហ្វ", - "graph-ve-dialog-edit-type-area": "ក្រាហ្វផ្ទៃ", - "graph-ve-dialog-edit-type-bar": "ក្រាហ្វសសរ", - "graph-ve-dialog-edit-type-line": "ក្រាហ្វខ្សែ", - "graph-ve-dialog-edit-type-unknown": "មិនស្គាល់ប្រភេទក្រាហ្វ", - "graph-ve-dialog-edit-width": "ទទឹង", - "graph-ve-empty-graph": "ក្រាហ្វទទេ" -} diff --git a/dist/extensions/Graph/i18n/kn.json b/dist/extensions/Graph/i18n/kn.json deleted file mode 100644 index 8f45fa9c2..000000000 --- a/dist/extensions/Graph/i18n/kn.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Ananth subray" - ] - }, - "graph-ve-dialog-edit-size-field": "ಗಾತ್ರ" -} diff --git a/dist/extensions/Graph/i18n/ko.json b/dist/extensions/Graph/i18n/ko.json deleted file mode 100644 index 444e36dbc..000000000 --- a/dist/extensions/Graph/i18n/ko.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Hwangjy9", - "Jerrykim306", - "Priviet", - "Revi", - "SeoJeongHo", - "Yearning", - "Ykhwong", - "렌즈" - ] - }, - "graphsandbox": "그래프 연습장", - "graph-tracking-category": "그래프가 있는 문서", - "graph-tracking-category-desc": "이 문서는 태그를 포함하고 있습니다.", - "graph-broken-category": "손상된 그래프가 포함된 문서", - "graph-broken-category-desc": "이 문서는 잘못된 용도로 태그를 포함하고 있습니다.", - "graph-obsolete-category": "없어진 Vega 1.0 그래프를 사용하는 문서", - "graph-obsolete-category-desc": "이 문서는 버전 2로 업데이트해야 하는 태그를 포함하고 있습니다.", - "graph-error-empty-json": "비어있는 그래프 데이터이므로 표시할 것이 없습니다", - "graph-error-not-vega": "입력된 JSON이 올바른 Vega JSON이 아닙니다", - "graph-ve-dialog-button-tooltip": "그래프", - "graph-ve-dialog-edit-field-graph-type": "그래프 종류", - "graph-ve-dialog-edit-field-raw-json": "순수 JSON 사양", - "graph-ve-dialog-edit-height": "높이", - "graph-ve-dialog-edit-json-invalid": "유효하지 않은 JSON 문자열", - "graph-ve-dialog-edit-padding-auto": "자동으로 간격 주기", - "graph-ve-dialog-edit-padding-bottom": "아래", - "graph-ve-dialog-edit-padding-left": "왼쪽", - "graph-ve-dialog-edit-padding-right": "오른쪽", - "graph-ve-dialog-edit-padding-top": "위", - "graph-ve-dialog-edit-page-data": "데이터", - "graph-ve-dialog-edit-page-general": "일반", - "graph-ve-dialog-edit-page-raw": "미가공 데이터", - "graph-ve-dialog-edit-size-field": "크기", - "graph-ve-dialog-edit-size-table-unit": "픽셀", - "graph-ve-dialog-edit-title": "그래프 편집", - "graph-ve-dialog-edit-type-area": "영역 그래프", - "graph-ve-dialog-edit-type-bar": "막대 그래프", - "graph-ve-dialog-edit-type-line": "선 그래프", - "graph-ve-dialog-edit-type-unknown": "알 수 없는 그래프 종류", - "graph-ve-dialog-edit-width": "너비", - "graph-ve-empty-graph": "빈 그래프", - "graph-ve-no-spec": "그래프 사양이 없습니다", - "graph-ve-vega-error": "베가가 이 그래프를 렌더링하던 도중 오류가 발생하였습니다", - "graph-ve-vega-error-no-render": "Vega가 이 그래프를 렌더링하지 못했습니다" -} diff --git a/dist/extensions/Graph/i18n/ks-arab.json b/dist/extensions/Graph/i18n/ks-arab.json deleted file mode 100644 index 6647367ae..000000000 --- a/dist/extensions/Graph/i18n/ks-arab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Iflaq" - ] - }, - "graph-ve-dialog-button-tooltip": "گرٛاف" -} diff --git a/dist/extensions/Graph/i18n/ksh.json b/dist/extensions/Graph/i18n/ksh.json deleted file mode 100644 index b74ff9505..000000000 --- a/dist/extensions/Graph/i18n/ksh.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Purodha" - ] - }, - "graph-desc": "Mähd uß <graph>-Befähle udder jannze Sigge em Wikki Jraffike op dä Basis vum [http://vega.github.io/ Vega].", - "graphsandbox": "Schpillwiß för Dijajramme", - "graph-tracking-category": "Sigge met Dijajramme.", - "graph-tracking-category-desc": "en dä Sigg es ene Befähl dren.", - "graph-broken-category": "Sigge met kappodde Jraffike", - "graph-broken-category-desc": "en dä Sigg es ene Befähl dren, wi hä ävver nit jebruch wähde kann.", - "graph-ve-dialog-button-tooltip": "Dijajramm", - "graph-ve-dialog-edit-padding-bottom": "Onge", - "graph-ve-dialog-edit-padding-left": "Lengks", - "graph-ve-dialog-edit-padding-right": "Rääschs", - "graph-ve-dialog-edit-padding-top": "Bovve", - "graph-ve-dialog-edit-page-data": "Dahte", - "graph-ve-empty-graph": "Läddesch Diajajramm", - "graph-ve-vega-error": "Et Vega hädd ene Fähler jefonge beim Ußjävve vun heh dämm Dijajramm.", - "graph-ve-vega-error-no-render": "Et Vega kunnt dat Dijajramm nid ußjävve." -} diff --git a/dist/extensions/Graph/i18n/ku-latn.json b/dist/extensions/Graph/i18n/ku-latn.json deleted file mode 100644 index 8b79dca52..000000000 --- a/dist/extensions/Graph/i18n/ku-latn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Bikarhêner" - ] - }, - "graph-ve-dialog-edit-padding-left": "Çep", - "graph-ve-dialog-edit-padding-right": "Rast", - "graph-ve-dialog-edit-padding-top": "Jor" -} diff --git a/dist/extensions/Graph/i18n/ky.json b/dist/extensions/Graph/i18n/ky.json deleted file mode 100644 index 29cf1d0b5..000000000 --- a/dist/extensions/Graph/i18n/ky.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Bosogo" - ] - }, - "graph-ve-dialog-edit-padding-bottom": "Баскыч", - "graph-ve-dialog-edit-padding-right": "Укук", - "graph-ve-dialog-edit-page-data": "Маалымат" -} diff --git a/dist/extensions/Graph/i18n/lb.json b/dist/extensions/Graph/i18n/lb.json deleted file mode 100644 index 93aa7d931..000000000 --- a/dist/extensions/Graph/i18n/lb.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Robby" - ] - }, - "graphsandbox": "Sandkëscht fir Graphiken", - "graph-tracking-category": "Säite mat Graphiken", - "graph-tracking-category-desc": "An dëser Säit ass eng Markéierung dran.", - "graph-broken-category": "Säite mat futtisse Graphiken", - "graph-obsolete-category": "Säite mat vereelste Vega 1.0 Graphiken", - "graph-obsolete-category-desc": "An dëser Säit ass e Tag deen op d'Versioun 2 aktualiséiert gi soll.", - "graph-error-empty-json": "Eidel Graph-Donnéeën, et kann näischt gewise ginn", - "graph-ve-dialog-button-tooltip": "Graphik", - "graph-ve-dialog-edit-field-graph-type": "Grafiktyp", - "graph-ve-dialog-edit-height": "Héicht", - "graph-ve-dialog-edit-padding-auto": "Atomatesch Opfëllen", - "graph-ve-dialog-edit-padding-bottom": "Ënnen", - "graph-ve-dialog-edit-padding-left": "Lenks", - "graph-ve-dialog-edit-padding-right": "Riets", - "graph-ve-dialog-edit-padding-top": "Uewen", - "graph-ve-dialog-edit-page-data": "Donnéeën", - "graph-ve-dialog-edit-page-general": "Allgemeng", - "graph-ve-dialog-edit-page-raw": "Réidaten", - "graph-ve-dialog-edit-size-field": "Gréisst", - "graph-ve-dialog-edit-size-table-unit": "Pixelen", - "graph-ve-dialog-edit-title": "Graphik änneren", - "graph-ve-dialog-edit-type-area": "Flächegrafik", - "graph-ve-dialog-edit-type-bar": "Balkegraphik", - "graph-ve-dialog-edit-type-line": "Kurvendiagramm", - "graph-ve-dialog-edit-type-unknown": "Onbekannten Grafiktyp", - "graph-ve-dialog-edit-width": "Breet", - "graph-ve-empty-graph": "Eidel Graphik", - "graph-ve-no-spec": "Keng Spezifikatioun fir d'Graphik fonnt", - "graph-ve-vega-error": "Vega hat e Feeler beim Duerstelle vun dëser Grafik", - "graph-ve-vega-error-no-render": "Vega konnt dës Graphik net duerstellen" -} diff --git a/dist/extensions/Graph/i18n/lez.json b/dist/extensions/Graph/i18n/lez.json deleted file mode 100644 index 6043eb4f9..000000000 --- a/dist/extensions/Graph/i18n/lez.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Soul Train" - ] - }, - "graph-tracking-category": "Графикар авай чинар" -} diff --git a/dist/extensions/Graph/i18n/lfn.json b/dist/extensions/Graph/i18n/lfn.json deleted file mode 100644 index 820e28258..000000000 --- a/dist/extensions/Graph/i18n/lfn.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Mafcadio" - ] - }, - "graph-ve-dialog-edit-padding-left": "Sinistra", - "graph-ve-dialog-edit-padding-right": "Destra" -} diff --git a/dist/extensions/Graph/i18n/lij.json b/dist/extensions/Graph/i18n/lij.json deleted file mode 100644 index b59fc8594..000000000 --- a/dist/extensions/Graph/i18n/lij.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Giromin Cangiaxo" - ] - }, - "graphsandbox": "Paggina pe-e proeuve in scî graffichi" -} diff --git a/dist/extensions/Graph/i18n/lld.json b/dist/extensions/Graph/i18n/lld.json deleted file mode 100644 index 6537e772b..000000000 --- a/dist/extensions/Graph/i18n/lld.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Starladin" - ] - }, - "graphsandbox": "Plata dles proes cun i grafics" -} diff --git a/dist/extensions/Graph/i18n/lmo.json b/dist/extensions/Graph/i18n/lmo.json deleted file mode 100644 index 95838b546..000000000 --- a/dist/extensions/Graph/i18n/lmo.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Salvemm el lombard" - ] - }, - "graphsandbox": "Pagina per i proeuve in sui grafich" -} diff --git a/dist/extensions/Graph/i18n/lt.json b/dist/extensions/Graph/i18n/lt.json deleted file mode 100644 index 1accd56ef..000000000 --- a/dist/extensions/Graph/i18n/lt.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Eitvys200", - "Zygimantus", - "Nokeoo" - ] - }, - "graphsandbox": "Grafiko smėlio dėžė", - "graph-tracking-category": "Puslapiai su grafikais", - "graph-tracking-category-desc": "Puslapyje yra žyma.", - "graph-broken-category": "Puslapiai su sugedusiais grafikais", - "graph-broken-category-desc": "Puslapyje yra žyma su netinkamu naudojimu.", - "graph-error-empty-json": "Tušti diagramos duomenys, nėra ką rodyti", - "graph-ve-dialog-button-tooltip": "Grafikas", - "graph-ve-dialog-edit-field-graph-type": "Grafiko tipas", - "graph-ve-dialog-edit-field-raw-json": "Neapdorota JSON specifikacija", - "graph-ve-dialog-edit-height": "Aukštis", - "graph-ve-dialog-edit-padding-bottom": "Apačioje", - "graph-ve-dialog-edit-padding-left": "Kairėje", - "graph-ve-dialog-edit-padding-right": "Dešinėje", - "graph-ve-dialog-edit-padding-top": "Viršuje", - "graph-ve-dialog-edit-page-data": "Duomenys", - "graph-ve-dialog-edit-page-general": "Bendra", - "graph-ve-dialog-edit-page-raw": "Neapdoroti duomenys", - "graph-ve-dialog-edit-size-field": "Dydis", - "graph-ve-dialog-edit-size-table-unit": "Pikseliai", - "graph-ve-dialog-edit-title": "Redaguoti grafiką", - "graph-ve-dialog-edit-type-bar": "Juostinė diagrama", - "graph-ve-dialog-edit-type-line": "Linijinė diagrama", - "graph-ve-dialog-edit-type-unknown": "Nežinomas grafiko tipas", - "graph-ve-dialog-edit-width": "Plotis", - "graph-ve-empty-graph": "Tuščias grafikas", - "graph-ve-no-spec": "Nerasta grafiko specifikacijų" -} diff --git a/dist/extensions/Graph/i18n/lv.json b/dist/extensions/Graph/i18n/lv.json deleted file mode 100644 index d7e17a7f0..000000000 --- a/dist/extensions/Graph/i18n/lv.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Papuass", - "Silraks", - "Stryn" - ] - }, - "graphsandbox": "Diagrammu smilškaste", - "graph-tracking-category": "Lapas ar diagrammām", - "graph-broken-category": "Lapas ar bojātām diagrammām", - "graph-ve-dialog-button-tooltip": "Diagramma", - "graph-ve-dialog-edit-height": "Augstums", - "graph-ve-dialog-edit-size-field": "Izmērs", - "graph-ve-dialog-edit-title": "Labot diagrammu", - "graph-ve-dialog-edit-type-unknown": "Nezināms diagrammas veids", - "graph-ve-dialog-edit-width": "Platums", - "graph-ve-empty-graph": "Tukša diagramma" -} diff --git a/dist/extensions/Graph/i18n/mk.json b/dist/extensions/Graph/i18n/mk.json deleted file mode 100644 index 9fbde4d08..000000000 --- a/dist/extensions/Graph/i18n/mk.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Bjankuloski06" - ] - }, - "graph-desc": "Одозможува ознаки <graph> или цели страници да станат графикони на основа на [http://vega.github.io/ Вега]", - "graphsandbox": "Песочник за графикони", - "graph-tracking-category": "Страници со графикони", - "graph-tracking-category-desc": "Страницава содржи ознака .", - "graph-broken-category": "Страници со расипани графикони", - "graph-broken-category-desc": "Страницава содржи ознака која се употребува неправилно.", - "graph-obsolete-category": "Страници со застарени графикони од Вега 1.0", - "graph-obsolete-category-desc": "Оваа страница содржи ознака што треба да се поднови на верзија 2.", - "graph-error-empty-json": "Податоците за градикот се празни. Нема што да се прикаже.", - "graph-error-not-vega": "Укажаниот JSON не претставува важечки Vega-JSON", - "graph-ve-dialog-button-tooltip": "Графикон", - "graph-ve-dialog-edit-field-graph-type": "Вид на графикон", - "graph-ve-dialog-edit-field-raw-json": "Уредба за сиров JSON", - "graph-ve-dialog-edit-height": "Висина", - "graph-ve-dialog-edit-json-invalid": "Неважечка JSON-низа", - "graph-ve-dialog-edit-padding-auto": "Автоматска потполнка", - "graph-ve-dialog-edit-padding-bottom": "најдолу", - "graph-ve-dialog-edit-padding-left": "лево", - "graph-ve-dialog-edit-padding-right": "десно", - "graph-ve-dialog-edit-padding-top": "најгоре", - "graph-ve-dialog-edit-page-data": "Податоци", - "graph-ve-dialog-edit-page-general": "Општо", - "graph-ve-dialog-edit-page-raw": "Сирови податоци", - "graph-ve-dialog-edit-size-field": "Големина", - "graph-ve-dialog-edit-size-table-unit": "Пиксели", - "graph-ve-dialog-edit-title": "Уреди графикон", - "graph-ve-dialog-edit-type-area": "Површински графикон", - "graph-ve-dialog-edit-type-bar": "Столбен графикон", - "graph-ve-dialog-edit-type-line": "Линиски графикон", - "graph-ve-dialog-edit-type-unknown": "непознат вид на графикон", - "graph-ve-dialog-edit-width": "Ширина", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Овој тип на графикон не е поддржан, па така сите измени во него можат да го расипат исписот. Менувајте го преку одредниците во сировите податоци во јазичето „{{int:graph-ve-dialog-edit-page-raw}}“.", - "graph-ve-empty-graph": "Празен графикон", - "graph-ve-no-spec": "Не пронајдов определба за графикот", - "graph-ve-vega-error": "Вега наиде на грешка при исцртувањето на графиконов", - "graph-ve-vega-error-no-render": "Вега не можеше да го исцрта графиконов" -} diff --git a/dist/extensions/Graph/i18n/ml.json b/dist/extensions/Graph/i18n/ml.json deleted file mode 100644 index 6c51bc1c9..000000000 --- a/dist/extensions/Graph/i18n/ml.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Nesi", - "Praveenp" - ] - }, - "graph-desc": "<graph> ടാഗുകൾ അനുവദിക്കുന്നു അഥവാ താളുകളെ [http://vega.github.io/ വേഗാ]-അധിഷ്ഠിത ഗ്രാഫുകളാക്കുന്നു", - "graphsandbox": "ഗ്രാഫ് കളരി", - "graph-tracking-category": "ഗ്രാഫുകൾ ഉപയോഗിക്കുന്ന താളുകൾ", - "graph-tracking-category-desc": " റ്റാഗ് ഉൾക്കൊള്ളുന്ന താൾ.", - "graph-broken-category": "പൊട്ടിയ ഗ്രാഫുകളുള്ള താളുകൾ", - "graph-broken-category-desc": "ഈ താളിൽ അസാധുവായ ഉപയോഗമുള്ള റ്റാഗ് ഉണ്ട്.", - "graph-obsolete-category": "കാലഹരണപ്പെട്ട വേഗ 1.0 ഗ്രാഫ് ഉൾക്കൊള്ളുന്ന താളുകൾ", - "graph-obsolete-category-desc": "ഈ താളിൽ ഉള്ള റ്റാഗ് പതിപ്പ് 2-ലേക്ക് പുതുക്കേണ്ടാതാണ്.", - "graph-ve-dialog-button-tooltip": "ഗ്രാഫ്", - "graph-ve-dialog-edit-field-graph-type": "ഗ്രാഫിന്റെ തരം", - "graph-ve-dialog-edit-height": "ഉയരം", - "graph-ve-dialog-edit-padding-bottom": "താഴെ", - "graph-ve-dialog-edit-padding-left": "ഇടത്", - "graph-ve-dialog-edit-padding-right": "വലത്", - "graph-ve-dialog-edit-padding-top": "മുകളിൽ", - "graph-ve-dialog-edit-page-data": "വിവരം", - "graph-ve-dialog-edit-page-raw": "അസംസ്കൃത ഡേറ്റ", - "graph-ve-dialog-edit-size-field": "വലിപ്പം", - "graph-ve-dialog-edit-size-table-unit": "പിക്സലുകൾ", - "graph-ve-dialog-edit-title": "ഗ്രാഫ് തിരുത്തുക", - "graph-ve-dialog-edit-type-area": "വിസ്തീർണ്ണ ഗ്രാഫ്", - "graph-ve-dialog-edit-width": "വീതി" -} diff --git a/dist/extensions/Graph/i18n/mn.json b/dist/extensions/Graph/i18n/mn.json deleted file mode 100644 index 56d444484..000000000 --- a/dist/extensions/Graph/i18n/mn.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Munkhzaya.E" - ] - }, - "graph-ve-empty-graph": "Хоосон график" -} diff --git a/dist/extensions/Graph/i18n/mr.json b/dist/extensions/Graph/i18n/mr.json deleted file mode 100644 index c98330f80..000000000 --- a/dist/extensions/Graph/i18n/mr.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Rupalichinchure", - "V.narsikar" - ] - }, - "graphsandbox": "आलेख धूळपाटी", - "graph-tracking-category-desc": "या पानात ही खूणपताका अंतर्भूत आहे.", - "graph-broken-category-desc": "या पानात अयोग्य रितीने वापरलेली ही खूणपताका अंतर्भूत आहे.", - "graph-obsolete-category": "अप्रचलित Vega 1.0 आलेख असणारी पाने", - "graph-obsolete-category-desc": "या पानात अशी खूणपताका अंतर्भूत आहे,जी version 2 ला अद्यतन करावयास हवी.", - "graph-error-empty-json": "रिकामी ग्राफ माहिती, दाखविण्यास काहीही नाही", - "graph-ve-dialog-button-tooltip": "आलेख", - "graph-ve-dialog-edit-height": "उंची", - "graph-ve-dialog-edit-padding-bottom": "खाली", - "graph-ve-dialog-edit-padding-left": "डावीकडे", - "graph-ve-dialog-edit-padding-right": "उजवीकडे", - "graph-ve-dialog-edit-padding-top": "वर", - "graph-ve-dialog-edit-size-field": "आकार", - "graph-ve-dialog-edit-size-table-unit": "पिक्सेल्स", - "graph-ve-dialog-edit-width": "रूंदी" -} diff --git a/dist/extensions/Graph/i18n/mt.json b/dist/extensions/Graph/i18n/mt.json deleted file mode 100644 index b1682fd4a..000000000 --- a/dist/extensions/Graph/i18n/mt.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "ToniSant" - ] - }, - "graph-ve-dialog-edit-page-general": "Ġenerali" -} diff --git a/dist/extensions/Graph/i18n/mwl.json b/dist/extensions/Graph/i18n/mwl.json deleted file mode 100644 index ccbaadb7b..000000000 --- a/dist/extensions/Graph/i18n/mwl.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Athena in Wonderland", - "MokaAkashiyaPT" - ] - }, - "graphsandbox": "Testes de gráficos", - "graph-tracking-category": "Páiginas cun gráficos", - "graph-broken-category": "Páiginas cun gráficos scachados", - "graph-obsolete-category": "Páiginas cun gráficos Vega 1.0 obsoletos" -} diff --git a/dist/extensions/Graph/i18n/my.json b/dist/extensions/Graph/i18n/my.json deleted file mode 100644 index 9d1e7d39d..000000000 --- a/dist/extensions/Graph/i18n/my.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Dr Lotus Black", - "Ninjastrikers" - ] - }, - "graphsandbox": "သရုပ်ပြဇယား သဲပုံး", - "graph-tracking-category": "ဂရပ်များပါဝင်သည့် စာမျက်နှာများ", - "graph-broken-category": "ကျိုးပျက်နေသော သရုပ်ပြဇယားများနှင့်စာမျက်နှာများ", - "graph-ve-dialog-button-tooltip": "သရုပ်ပြဇယား", - "graph-ve-dialog-edit-field-graph-type": "သရုပ်ပြဇယား အမျိုးစား", - "graph-ve-dialog-edit-height": "အမြင့်", - "graph-ve-dialog-edit-padding-bottom": "အောက်ခြေ", - "graph-ve-dialog-edit-padding-left": "ဘယ်", - "graph-ve-dialog-edit-padding-right": "ညာ", - "graph-ve-dialog-edit-padding-top": "ထိပ်", - "graph-ve-dialog-edit-page-data": "ဒေတာ", - "graph-ve-dialog-edit-page-general": "အထွေထွေ", - "graph-ve-dialog-edit-page-raw": "အကြမ်းထည် ဒေတာ", - "graph-ve-dialog-edit-size-field": "အရွယ်အစား", - "graph-ve-dialog-edit-title": "သရုပ်ပြဇယား ပြင်ဆင်ရန်", - "graph-ve-dialog-edit-type-area": "ဧရိယာသရုပ်ပြဇယား", - "graph-ve-dialog-edit-type-unknown": "အမျိုးအမည်မသိ သရုပ်ပြဇယားအမျိုးအစား", - "graph-ve-dialog-edit-width": "အကျယ်", - "graph-ve-empty-graph": "သရုပ်ပြဇယားကို ဗလာလုပ်ရန်", - "graph-ve-no-spec": "သရုပ်ပြဇယားအသေးစိတ် မတွေ့ရှိပါ" -} diff --git a/dist/extensions/Graph/i18n/nb.json b/dist/extensions/Graph/i18n/nb.json deleted file mode 100644 index 93da0ea80..000000000 --- a/dist/extensions/Graph/i18n/nb.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Danmichaelo", - "Jon Harald Søby" - ] - }, - "graph-desc": "Tillater [http://trifacta.github.io/vega/ Vega]-baserte diagrammer i <graph>-tagger eller som hele sider.", - "graphsandbox": "Diagramsandkasse", - "graph-tracking-category": "Sider med diagrammer", - "graph-tracking-category-desc": "Denne siden inkluderer en -tagg.", - "graph-broken-category": "Sider med defekte diagrammer", - "graph-broken-category-desc": "Denne siden inkluderer en -tagg med feil.", - "graph-obsolete-category": "Sider med utdaterte Vega 1.0-diagram", - "graph-obsolete-category-desc": "Denne siden inneholder en -tag that som bør oppgraderes til versjon 2.", - "graph-error-empty-json": "Tomme grafdata, ingenting å vise", - "graph-error-not-vega": "Den angitte JSON-en er ikke gyldig Vega-JSON", - "graph-ve-dialog-button-tooltip": "Graf", - "graph-ve-dialog-edit-field-graph-type": "Graftype", - "graph-ve-dialog-edit-field-raw-json": "Rå JSON-spesifikasjon", - "graph-ve-dialog-edit-height": "Høyde", - "graph-ve-dialog-edit-json-invalid": "Ugyldig JSON-streng", - "graph-ve-dialog-edit-padding-auto": "Automatisk padding", - "graph-ve-dialog-edit-padding-bottom": "Bunn", - "graph-ve-dialog-edit-padding-left": "Venstre", - "graph-ve-dialog-edit-padding-right": "Høyre", - "graph-ve-dialog-edit-padding-top": "Topp", - "graph-ve-dialog-edit-page-data": "Data", - "graph-ve-dialog-edit-page-general": "Generelt", - "graph-ve-dialog-edit-page-raw": "Rådata", - "graph-ve-dialog-edit-size-field": "Størrelse", - "graph-ve-dialog-edit-size-table-unit": "Piksler", - "graph-ve-dialog-edit-title": "Rediger graf", - "graph-ve-dialog-edit-type-area": "Overflatediagram", - "graph-ve-dialog-edit-type-bar": "Søylediagram", - "graph-ve-dialog-edit-type-line": "Linjediagram", - "graph-ve-dialog-edit-type-unknown": "Ukjent diagramtype", - "graph-ve-dialog-edit-width": "Bredde", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Denne diagramtypen er ikke støttet, så redigering av den kan føre til at den går i stykker. Du kan fremdeles redigere rådataene under fanen «{{int:graph-ve-dialog-edit-page-raw}}».", - "graph-ve-empty-graph": "Tomt diagram", - "graph-ve-no-spec": "Ingen diagramspesifikasjon ble funnet", - "graph-ve-vega-error": "Vega støtte på et problem under opptegning av diagrammet", - "graph-ve-vega-error-no-render": "Vega klarte ikke å tegne opp diagrammet" -} diff --git a/dist/extensions/Graph/i18n/nds-nl.json b/dist/extensions/Graph/i18n/nds-nl.json deleted file mode 100644 index f7babad8b..000000000 --- a/dist/extensions/Graph/i18n/nds-nl.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Servien" - ] - }, - "graphsandbox": "Grafiksandküle", - "graph-ve-dialog-button-tooltip": "Grafik" -} diff --git a/dist/extensions/Graph/i18n/ne.json b/dist/extensions/Graph/i18n/ne.json deleted file mode 100644 index 009b0987a..000000000 --- a/dist/extensions/Graph/i18n/ne.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Nirmal Dulal", - "जनक राज भट्ट", - "सरोज कुमार ढकाल" - ] - }, - "graph-ve-empty-graph": "खाली ग्राफ" -} diff --git a/dist/extensions/Graph/i18n/nl.json b/dist/extensions/Graph/i18n/nl.json deleted file mode 100644 index 94d93c098..000000000 --- a/dist/extensions/Graph/i18n/nl.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Bdijkstra", - "Mar(c)", - "Siebrand", - "Sjoerddebruin", - "McDutchie" - ] - }, - "graph-desc": "Maakt het mogelijk om het label <graph> of hele pagina's op [http://vega.github.io/ Vega] gebaseerde grafieken te laten worden", - "graphsandbox": "Grafiekzandbak", - "graph-tracking-category": "Pagina's met grafieken", - "graph-tracking-category-desc": "De pagina bevat een -tag.", - "graph-broken-category": "Pagina's met niet-werkende grafieken", - "graph-broken-category-desc": "De pagina bevat een -tag die onjuist wordt gebruikt.", - "graph-obsolete-category": "Pagina's met verouderde Vega 1.0-grafieken", - "graph-error-empty-json": "Lege grafiekgegevens. Er is niets om te laten zien.", - "graph-error-not-vega": "De opgegeven JSON is geen geldige Vega-JSON", - "graph-ve-dialog-button-tooltip": "Grafiek", - "graph-ve-dialog-edit-field-graph-type": "Soort grafiek", - "graph-ve-dialog-edit-field-raw-json": "Ruwe JSON-specificatie", - "graph-ve-dialog-edit-height": "Hoogte", - "graph-ve-dialog-edit-json-invalid": "Ongeldige JSON-tekenreeks", - "graph-ve-dialog-edit-padding-auto": "Automatische opvulling", - "graph-ve-dialog-edit-padding-bottom": "Onderaan", - "graph-ve-dialog-edit-padding-left": "Links", - "graph-ve-dialog-edit-padding-right": "Rechts", - "graph-ve-dialog-edit-padding-top": "Bovenaan", - "graph-ve-dialog-edit-page-data": "Gegevens", - "graph-ve-dialog-edit-page-general": "Algemeen", - "graph-ve-dialog-edit-page-raw": "Ruwe gegevens", - "graph-ve-dialog-edit-size-field": "Grootte", - "graph-ve-dialog-edit-size-table-unit": "Pixels", - "graph-ve-dialog-edit-title": "Grafiek bewerken", - "graph-ve-dialog-edit-type-area": "Vlakdiagram", - "graph-ve-dialog-edit-type-bar": "Staafgrafiek", - "graph-ve-dialog-edit-type-line": "Lijngrafiek", - "graph-ve-dialog-edit-type-unknown": "Onbekend soort grafiek", - "graph-ve-dialog-edit-width": "Breedte", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Het type van deze grafiek wordt niet ondersteund en eventuele wijzigingen erin kunnen de weergave ervan verstoren. Bewerk de grafiek via de onbewerkte gegevensspecificatie op het tabblad “{{int:graph-ve-dialog-edit-page-raw}}”.", - "graph-ve-empty-graph": "Lege grafiek", - "graph-ve-no-spec": "Geen grafiekspecificatie gevonden", - "graph-ve-vega-error": "Vega heeft een fout aangetroffen bij het weergeven van deze grafiek", - "graph-ve-vega-error-no-render": "Vega kon deze grafiek niet weergeven" -} diff --git a/dist/extensions/Graph/i18n/nn.json b/dist/extensions/Graph/i18n/nn.json deleted file mode 100644 index 3f936d6eb..000000000 --- a/dist/extensions/Graph/i18n/nn.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Njardarlogar" - ] - }, - "graph-tracking-category": "Sider med diagram", - "graph-tracking-category-desc": "Sida nyttar eit -merke", - "graph-broken-category": "Sider med uverksame diagram", - "graph-broken-category-desc": "Sida nyttar eit -merke med feil.", - "graph-obsolete-category": "Sider med utdaterte Vega 1.0-diagram", - "graph-obsolete-category-desc": "Sida nyttar eit -merke som bør oppdaterast til versjon 2." -} diff --git a/dist/extensions/Graph/i18n/oc.json b/dist/extensions/Graph/i18n/oc.json deleted file mode 100644 index 1d0f4eddf..000000000 --- a/dist/extensions/Graph/i18n/oc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Cedric31" - ] - }, - "graphsandbox": "Nauc de sabla grafic", - "graph-tracking-category": "Paginas amb de grafics", - "graph-broken-category": "Paginas amb de grafics que contenon d'errors" -} diff --git a/dist/extensions/Graph/i18n/or.json b/dist/extensions/Graph/i18n/or.json deleted file mode 100644 index 7d7e9174e..000000000 --- a/dist/extensions/Graph/i18n/or.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Nistha.aslp", - "Psubhashish" - ] - }, - "graph-ve-no-spec": "କୌଣସି ଗ୍ରାଫ ବିବରଣୀ ମିଳୁନାହିଁ" -} diff --git a/dist/extensions/Graph/i18n/pam.json b/dist/extensions/Graph/i18n/pam.json deleted file mode 100644 index 62d9dadc7..000000000 --- a/dist/extensions/Graph/i18n/pam.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Amiel Guanlao", - "Leeheonjin" - ] - }, - "graph-ve-dialog-edit-height": "Katas", - "graph-ve-dialog-edit-size-field": "Dagul" -} diff --git a/dist/extensions/Graph/i18n/pl.json b/dist/extensions/Graph/i18n/pl.json deleted file mode 100644 index f117fd793..000000000 --- a/dist/extensions/Graph/i18n/pl.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Chrumps", - "Michał Sobkowski", - "Pietrasagh", - "Rail", - "Railfail536", - "The Polish", - "Woytecr" - ] - }, - "graph-desc": "Umożliwia znacznikom <graph> lub całym stronom stworzenie wykresów bazujących na [http://vega.github.io/ Vega]", - "graphsandbox": "Brudnopis wykresów", - "graph-tracking-category": "Strony z diagramami", - "graph-tracking-category-desc": "Strona zawiera znacznik .", - "graph-broken-category": "Strony z zepsutymi diagramami", - "graph-broken-category-desc": "Strona zawiera nieprawidłowo zastosowany znacznik .", - "graph-obsolete-category": "Strony z przestarzałymi diagramami Vega 1.0", - "graph-obsolete-category-desc": "Strona zawiera znacznik , który powinien zostać zaktualizowany do wersji 2.", - "graph-error-empty-json": "Puste dane wykresu, nie ma nic do pokazania", - "graph-error-not-vega": "Podany JSON nie jest prawidłowym JSON Vega", - "graph-ve-dialog-button-tooltip": "Wykres", - "graph-ve-dialog-edit-field-graph-type": "Rodzaj wykresu", - "graph-ve-dialog-edit-field-raw-json": "Kod źródłowy w formacie JSON", - "graph-ve-dialog-edit-height": "Wysokość", - "graph-ve-dialog-edit-json-invalid": "Nieprawidłowy ciąg znaków JSON", - "graph-ve-dialog-edit-padding-auto": "Automatyczne wcięcie", - "graph-ve-dialog-edit-padding-bottom": "Z dołu", - "graph-ve-dialog-edit-padding-left": "Od lewej", - "graph-ve-dialog-edit-padding-right": "Od prawej", - "graph-ve-dialog-edit-padding-top": "Od góry", - "graph-ve-dialog-edit-page-data": "Dane", - "graph-ve-dialog-edit-page-general": "Ogólne", - "graph-ve-dialog-edit-page-raw": "Surowe dane", - "graph-ve-dialog-edit-size-field": "Rozmiar", - "graph-ve-dialog-edit-size-table-unit": "Piksele", - "graph-ve-dialog-edit-title": "Edytuj wykres", - "graph-ve-dialog-edit-type-area": "Wykres zakreślony", - "graph-ve-dialog-edit-type-bar": "Wykres słupkowy", - "graph-ve-dialog-edit-type-line": "Wykres liniowy", - "graph-ve-dialog-edit-type-unknown": "Nieznany typ wykresu", - "graph-ve-dialog-edit-width": "Szerokość", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Ten typ wykresu nie jest obsługiwany, a wszelkie jego zmiany mogą zepsuć jego wyświetlanie. Edytuj wykres poprzez edycję kodu źródłowego w zakładce \"{{int:graph-ve-dialog-edit-page-raw}}\".", - "graph-ve-empty-graph": "Pusty wykres", - "graph-ve-no-spec": "Nie znaleziono specyfikacji wykresu", - "graph-ve-vega-error": "Vega nie mógł wyrenderować wykresu z powodu błędu", - "graph-ve-vega-error-no-render": "Vega nie mógł wyrenderować tego wykresu" -} diff --git a/dist/extensions/Graph/i18n/pnb.json b/dist/extensions/Graph/i18n/pnb.json deleted file mode 100644 index 0d7d1f527..000000000 --- a/dist/extensions/Graph/i18n/pnb.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Abbas dhothar" - ] - }, - "graph-ve-dialog-edit-padding-left": "کھبے", - "graph-ve-dialog-edit-padding-right": "سجے" -} diff --git a/dist/extensions/Graph/i18n/ps.json b/dist/extensions/Graph/i18n/ps.json deleted file mode 100644 index 5fc7529af..000000000 --- a/dist/extensions/Graph/i18n/ps.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Ahmed-Najib-Biabani-Ibrahimkhel" - ] - }, - "graph-ve-dialog-button-tooltip": "گراف", - "graph-ve-dialog-edit-field-graph-type": "د گراف ډول", - "graph-ve-dialog-edit-height": "لوړوالی", - "graph-ve-dialog-edit-padding-bottom": "لاندې", - "graph-ve-dialog-edit-padding-left": "کيڼ", - "graph-ve-dialog-edit-padding-right": "ښي", - "graph-ve-dialog-edit-padding-top": "سر", - "graph-ve-dialog-edit-page-data": "اومتوک", - "graph-ve-dialog-edit-page-general": "ټولگړی", - "graph-ve-dialog-edit-size-field": "کچه", - "graph-ve-dialog-edit-size-table-unit": "پېکسلونه", - "graph-ve-dialog-edit-width": "سوروالی", - "graph-ve-empty-graph": "تش گراف" -} diff --git a/dist/extensions/Graph/i18n/pt-br.json b/dist/extensions/Graph/i18n/pt-br.json deleted file mode 100644 index 4c80810ea..000000000 --- a/dist/extensions/Graph/i18n/pt-br.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Felipe L. Ewald", - "Jefersonmoraes", - "Luan" - ] - }, - "graph-desc": "Permite transformar etiquetas <graph> ou páginas todas em gráficos basados em [http://vega.github.io/ Vega]", - "graphsandbox": "Zona de testes de gráficos", - "graph-tracking-category": "Páginas com gráficos", - "graph-tracking-category-desc": "A página inclui uma marca .", - "graph-broken-category": "Páginas com mapas quebrados", - "graph-broken-category-desc": "A página inclui uma marca > com uso inválido.", - "graph-obsolete-category": "Páginas com gráficos Vega 1.0 obsoletos", - "graph-obsolete-category-desc": "A página inclui uma marca que deve ser atualizada para a versão 2.", - "graph-error-empty-json": "Dados vazios do gráfico, nada a mostrar", - "graph-error-not-vega": "O JSON fornecido não é um Vega JSON válido", - "graph-ve-dialog-button-tooltip": "Gráfico", - "graph-ve-dialog-edit-field-graph-type": "Tipo de gráfico", - "graph-ve-dialog-edit-field-raw-json": "Especificação Raw JSON", - "graph-ve-dialog-edit-height": "Altura", - "graph-ve-dialog-edit-json-invalid": "String JSON inválida", - "graph-ve-dialog-edit-padding-auto": "Padding automático", - "graph-ve-dialog-edit-padding-bottom": "Em baixo", - "graph-ve-dialog-edit-padding-left": "Esquerda", - "graph-ve-dialog-edit-padding-right": "Direita", - "graph-ve-dialog-edit-padding-top": "Topo", - "graph-ve-dialog-edit-page-data": "Dado", - "graph-ve-dialog-edit-page-general": "General", - "graph-ve-dialog-edit-page-raw": "Dados brutos", - "graph-ve-dialog-edit-size-field": "Tamanho", - "graph-ve-dialog-edit-size-table-unit": "Pixels", - "graph-ve-dialog-edit-title": "Editar gráfico", - "graph-ve-dialog-edit-type-area": "Gráfico da área", - "graph-ve-dialog-edit-type-bar": "Gráfico de barras", - "graph-ve-dialog-edit-type-line": "Gráfico de linhas", - "graph-ve-dialog-edit-type-unknown": "Tipo de gráfico desconhecido", - "graph-ve-dialog-edit-width": "Largura", - "graph-ve-dialog-edit-unknown-graph-type-warning": "O tipo deste gráfico não é suportado, e quaisquer modificações feitas podem quebrar sua exibição. Edite o gráfico através da especificação de dados brutos na guia \"{{int: gráfico-ve-dialog-edit-page-raw}}\".", - "graph-ve-empty-graph": "Gráfico vazio", - "graph-ve-no-spec": "Nenhuma especificação de gráfico encontrada", - "graph-ve-vega-error": "Vega encontrou um erro ao renderizar este gráfico", - "graph-ve-vega-error-no-render": "Vega não pôde renderizar este gráfico" -} diff --git a/dist/extensions/Graph/i18n/pt.json b/dist/extensions/Graph/i18n/pt.json deleted file mode 100644 index e614a94e7..000000000 --- a/dist/extensions/Graph/i18n/pt.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Hamilton Abreu", - "Jkb8", - "Luan", - "Macofe", - "Vitorvicentevalente" - ] - }, - "graph-desc": "Permite transformar elementos <graph> ou páginas completas em gráficos baseados no formato declarativo [http://vega.github.io/ Vega]", - "graphsandbox": "Testes de gráficos", - "graph-tracking-category": "Páginas com gráficos", - "graph-tracking-category-desc": "A página inclui um elemento .", - "graph-broken-category": "Páginas com gráficos quebrados", - "graph-broken-category-desc": "A página inclui um elemento com utilização inválida.", - "graph-obsolete-category": "Páginas com gráficos Vega 1.0 obsoletos", - "graph-obsolete-category-desc": "A página inclui um elemento que deve ser atualizado para a versão 2.", - "graph-error-empty-json": "Dados de gráfico vazios, nada a apresentar", - "graph-error-not-vega": "O JSON fornecido não é JSON Vega válido", - "graph-ve-dialog-button-tooltip": "Gráfico", - "graph-ve-dialog-edit-field-graph-type": "Tipo de gráfico", - "graph-ve-dialog-edit-field-raw-json": "Especificação em JSON em bruto", - "graph-ve-dialog-edit-height": "Altura", - "graph-ve-dialog-edit-json-invalid": "''String'' JSON inválida", - "graph-ve-dialog-edit-padding-auto": "Preenchimento automático", - "graph-ve-dialog-edit-padding-bottom": "Fundo", - "graph-ve-dialog-edit-padding-left": "Esquerda", - "graph-ve-dialog-edit-padding-right": "Direita", - "graph-ve-dialog-edit-padding-top": "Topo", - "graph-ve-dialog-edit-page-data": "Dados", - "graph-ve-dialog-edit-page-general": "Geral", - "graph-ve-dialog-edit-page-raw": "Dados em bruto", - "graph-ve-dialog-edit-size-field": "Tamanho", - "graph-ve-dialog-edit-size-table-unit": "Píxeis", - "graph-ve-dialog-edit-title": "Editar gráfico", - "graph-ve-dialog-edit-type-area": "Gráfico de áreas", - "graph-ve-dialog-edit-type-bar": "Gráfico de barras", - "graph-ve-dialog-edit-type-line": "Gráfico de linhas", - "graph-ve-dialog-edit-type-unknown": "Tipo de gráfico desconhecido", - "graph-ve-dialog-edit-width": "Largura", - "graph-ve-dialog-edit-unknown-graph-type-warning": "O tipo deste gráfico não é suportado e quaisquer modificações que lhe sejam feitas podem impedir que seja apresentado. Edite o gráfico através da especificação por dados em bruto, no separador \"{{int:graph-ve-dialog-edit-page-raw}}\", por favor.", - "graph-ve-empty-graph": "Gráfico vazio", - "graph-ve-no-spec": "Não foi encontrada uma especificação de gráfico", - "graph-ve-vega-error": "Ocorreu um problema no Vega ao compor este gráfico", - "graph-ve-vega-error-no-render": "O Vega não conseguiu compor este gráfico" -} diff --git a/dist/extensions/Graph/i18n/qqq.json b/dist/extensions/Graph/i18n/qqq.json deleted file mode 100644 index cf0cbb856..000000000 --- a/dist/extensions/Graph/i18n/qqq.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Jon Harald Søby", - "Liuxinyu970226", - "Mormegil", - "Raimond Spekking", - "Raymond", - "Robby" - ] - }, - "graph-desc": "{{desc|name=Graph|url=https://www.mediawiki.org/wiki/Extension:Graph}}", - "graphsandbox": "Page title of [[Special:GraphSandbox]].", - "graph-tracking-category": "{{tracking category name}}\nName of the tracking category", - "graph-tracking-category-desc": "Description on [[Special:TrackingCategories]] for the {{msg-mw|graph-tracking-category}} tracking category.", - "graph-broken-category": "{{tracking category name}}\nName of the tracking category", - "graph-broken-category-desc": "Description on [[Special:TrackingCategories]] for the {{msg-mw|graph-broken-category}} tracking category.", - "graph-obsolete-category": "{{tracking category name}}\nName of the tracking category", - "graph-obsolete-category-desc": "Description on [[Special:TrackingCategories]] for the {{msg-mw|graph-obsolete-category}} tracking category.", - "graph-error-empty-json": "Shown by <graph> when used without any data in it, e.g. <graph></graph>", - "graph-error-not-vega": "Shown by <graph> when used with invalid data, e.g. <graph>[]</graph>", - "graph-ve-dialog-button-tooltip": "Tooltip for the graph editing dialog button\n{{Identical|Graph}}", - "graph-ve-dialog-edit-field-graph-type": "Label for graph type", - "graph-ve-dialog-edit-field-raw-json": "Label for the raw JSON specification in the graph editing dialog", - "graph-ve-dialog-edit-height": "Label for graph height field\n{{Identical|Height}}", - "graph-ve-dialog-edit-json-invalid": "Validation label for the JSON specification string", - "graph-ve-dialog-edit-padding-auto": "Label for automatic padding checkbox", - "graph-ve-dialog-edit-padding-bottom": "Label for bottom padding user config in graph editing tool\n{{Identical|Bottom}}", - "graph-ve-dialog-edit-padding-left": "Label for left padding user config in graph editing tool\n{{Identical|Left}}", - "graph-ve-dialog-edit-padding-right": "Label for right padding user config in graph editing tool\n{{Identical|Right}}", - "graph-ve-dialog-edit-padding-top": "Label for top padding user config in graph editing tool\n{{Identical|Top}}", - "graph-ve-dialog-edit-page-data": "Label for the graph dialog data entry page\n{{Identical|Data}}", - "graph-ve-dialog-edit-page-general": "Label for the general page in the graph edit dialog\n{{Identical|General}}", - "graph-ve-dialog-edit-page-raw": "Label for the raw data page in the graph edit dialog", - "graph-ve-dialog-edit-size-field": "Label for graph edit dialog size field\n{{Identical|Size}}", - "graph-ve-dialog-edit-size-table-unit": "Label for size measuring unit in graph editing tool\n{{Identical|Pixel}}", - "graph-ve-dialog-edit-title": "Title for the graph editing dialog", - "graph-ve-dialog-edit-type-area": "Label for area graph", - "graph-ve-dialog-edit-type-bar": "Label for bar graph", - "graph-ve-dialog-edit-type-line": "Label for line graph", - "graph-ve-dialog-edit-type-unknown": "Label for unknown graph type", - "graph-ve-dialog-edit-width": "Label for graph width field\n{{Identical|Width}}", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Warning label about unsupported graph types", - "graph-ve-empty-graph": "Message shown to editors in place of an empty graph", - "graph-ve-no-spec": "Label to display on a graph node when no spec is found", - "graph-ve-vega-error": "Label to display on a graph node when Vega encounters an unknown error", - "graph-ve-vega-error-no-render": "Label to display on a graph node when Vega is unable to render" -} diff --git a/dist/extensions/Graph/i18n/ro.json b/dist/extensions/Graph/i18n/ro.json deleted file mode 100644 index 06d87ab5b..000000000 --- a/dist/extensions/Graph/i18n/ro.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "@metadata": { - "authors": [ - "NGC 54", - "XXN" - ] - }, - "graph-desc": "Permite ca etichetele <graph> sau pagini întregi să devină grafice bazate pe [http://vega.github.io/ Vega]", - "graphsandbox": "Cutie cu nisip pentru grafice", - "graph-tracking-category": "Pagini cu grafice", - "graph-tracking-category-desc": "Pagina include o etichetă .", - "graph-broken-category": "Pagini cu grafice defecte", - "graph-broken-category-desc": "Pagina include o etichetă cu utilizare invalidă.", - "graph-obsolete-category-desc": "Pagina include o etichetă care ar trebui actualizată la versiunea 2.", - "graph-error-empty-json": "Date de grafic goale, nu este nimic de afișat", - "graph-error-not-vega": "JSON-ul furnizat nu este un JSON Vega valid.", - "graph-ve-dialog-button-tooltip": "Grafic", - "graph-ve-dialog-edit-field-graph-type": "Tipul graficului", - "graph-ve-dialog-edit-field-raw-json": "Specificație JSON brută", - "graph-ve-dialog-edit-height": "Înălțime", - "graph-ve-dialog-edit-json-invalid": "Șir JSON invalid", - "graph-ve-dialog-edit-padding-auto": "Umplutură automată", - "graph-ve-dialog-edit-padding-bottom": "Jos", - "graph-ve-dialog-edit-padding-left": "Stânga", - "graph-ve-dialog-edit-padding-right": "Dreapta", - "graph-ve-dialog-edit-padding-top": "Sus", - "graph-ve-dialog-edit-page-data": "Date", - "graph-ve-dialog-edit-page-general": "General", - "graph-ve-dialog-edit-page-raw": "Date brute", - "graph-ve-dialog-edit-size-field": "Mărime", - "graph-ve-dialog-edit-size-table-unit": "Pixeli", - "graph-ve-dialog-edit-title": "Editare grafic", - "graph-ve-dialog-edit-type-area": "Grafic pe arie", - "graph-ve-dialog-edit-type-bar": "Grafic cu bare", - "graph-ve-dialog-edit-type-line": "Grafic cu linie", - "graph-ve-dialog-edit-type-unknown": "Tip necunoscut de grafic", - "graph-ve-dialog-edit-width": "Lățime", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Tipul acestui grafic nu este suportat, iar orice modificare la el poate să îi strice afișarea. Vă rugăm să editați graficul prin specificația de date brute în fereastra „{{int:graph-ve-dialog-edit-page-raw}}”.", - "graph-ve-empty-graph": "Grafic gol", - "graph-ve-no-spec": "Nicio specificație de grafic găsită", - "graph-ve-vega-error": "Vega a întâmpinat o eroare la redarea acestui grafic.", - "graph-ve-vega-error-no-render": "Vega nu a reușit să ruleze acest grafic" -} diff --git a/dist/extensions/Graph/i18n/roa-tara.json b/dist/extensions/Graph/i18n/roa-tara.json deleted file mode 100644 index 93369a59b..000000000 --- a/dist/extensions/Graph/i18n/roa-tara.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Joetaras" - ] - }, - "graph-desc": "Permette le tag <graph> o pàggene indere de devendà grafece basate sus a [http://vega.github.io/ Vega]", - "graphsandbox": "Pàgene de prove pe le grafece", - "graph-tracking-category": "Pàggene cu le grafece", - "graph-tracking-category-desc": "Sta pàgene tène'nu tag .", - "graph-broken-category": "Pàggene cu le grafece scuasciate", - "graph-broken-category-desc": "'A pàgene 'nglude 'nu tag cu ause non valide.", - "graph-obsolete-category": "Pàggene cu grafece Vega 1.0 vicchie", - "graph-obsolete-category-desc": "'A pàgene 'nglude 'nu tag ca avessa essere aggiornate a 'a versione 2.", - "graph-error-empty-json": "Date d'u grafeche vacande, ninde da fà 'ndrucà", - "graph-error-not-vega": "'U JSON date non g'è 'nu JSON Vega valide", - "graph-ve-dialog-button-tooltip": "Grafeche", - "graph-ve-dialog-edit-field-graph-type": "Tipe de grafeche", - "graph-ve-dialog-edit-field-raw-json": "Specifiche d'u JSON grezze", - "graph-ve-dialog-edit-height": "Altezze", - "graph-ve-dialog-edit-json-invalid": "Stringhe JSON non valide", - "graph-ve-dialog-edit-padding-auto": "Jenghiemende automateche", - "graph-ve-dialog-edit-padding-bottom": "Sotte", - "graph-ve-dialog-edit-padding-left": "Sinistre", - "graph-ve-dialog-edit-padding-right": "Destre", - "graph-ve-dialog-edit-padding-top": "Sus", - "graph-ve-dialog-edit-page-data": "Date", - "graph-ve-dialog-edit-page-general": "Generale", - "graph-ve-dialog-edit-page-raw": "Date grezze", - "graph-ve-dialog-edit-size-field": "Dimenzione", - "graph-ve-dialog-edit-size-table-unit": "Pixel", - "graph-ve-dialog-edit-title": "Cange 'u grafeche", - "graph-ve-dialog-edit-type-area": "Grafeche a arèe", - "graph-ve-dialog-edit-type-bar": "Grafeche a barre", - "graph-ve-dialog-edit-type-line": "Grafeche a linèe", - "graph-ve-dialog-edit-type-unknown": "Tipe de grafeche scanusciute", - "graph-ve-dialog-edit-width": "Larghezze", - "graph-ve-dialog-edit-unknown-graph-type-warning": "'U tipe de stu grafeche non g'è supportate, e ogne cangiamende fatte pò scuascià 'u 'ndrucamende. Pe piacere cnage 'u grafeche ausanne 'a specifeche de date grezze sus 'a schede \"{{int:graph-ve-dialog-edit-page-raw}}\".", - "graph-ve-empty-graph": "Grafeche vacande", - "graph-ve-no-spec": "Nisciuna specifiche de grafeche ha state acchiate", - "graph-ve-vega-error": "Vega ave acchiate 'n'errore mendre ca renderizzave stu grafeche", - "graph-ve-vega-error-no-render": "Vega non ge riesce a renderizzà stu grafeche" -} diff --git a/dist/extensions/Graph/i18n/ru.json b/dist/extensions/Graph/i18n/ru.json deleted file mode 100644 index 032d68ab3..000000000 --- a/dist/extensions/Graph/i18n/ru.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Facenapalm", - "Frhdkazan", - "INS Pirat", - "Mailman", - "Okras", - "Putnik" - ] - }, - "graph-desc": "Позволяет тегам <graph> или целым страницам становиться графами на основе [http://vega.github.io/ Vega]", - "graphsandbox": "Песочница Graph", - "graph-tracking-category": "Страницы с графиками", - "graph-tracking-category-desc": "Страница включает в себя тег .", - "graph-broken-category": "Страницы со сломанными графиками", - "graph-broken-category-desc": "На этой странице неверно используется тег .", - "graph-obsolete-category": "Страницы с устаревшими графиками Vega 1.0", - "graph-obsolete-category-desc": "Страница включает в себя тег , который должен быть обновлён до версии 2.", - "graph-error-empty-json": "Данные графика пусты, нечего отображать.", - "graph-error-not-vega": "Некорректный JSON.", - "graph-ve-dialog-button-tooltip": "График", - "graph-ve-dialog-edit-field-graph-type": "Тип графа", - "graph-ve-dialog-edit-field-raw-json": "Исходный код в JSON", - "graph-ve-dialog-edit-height": "Высота", - "graph-ve-dialog-edit-json-invalid": "Некорректная JSON-строка", - "graph-ve-dialog-edit-padding-auto": "Автоматический отступ", - "graph-ve-dialog-edit-padding-bottom": "Снизу", - "graph-ve-dialog-edit-padding-left": "Слева", - "graph-ve-dialog-edit-padding-right": "Справа", - "graph-ve-dialog-edit-padding-top": "Сверху", - "graph-ve-dialog-edit-page-data": "Данные", - "graph-ve-dialog-edit-page-general": "Общие", - "graph-ve-dialog-edit-page-raw": "Исходные данные", - "graph-ve-dialog-edit-size-field": "Размер", - "graph-ve-dialog-edit-size-table-unit": "Пиксели", - "graph-ve-dialog-edit-title": "Редактировать граф", - "graph-ve-dialog-edit-type-area": "Площадной график", - "graph-ve-dialog-edit-type-bar": "Гистограмма", - "graph-ve-dialog-edit-type-line": "Линейный график", - "graph-ve-dialog-edit-type-unknown": "Неизвестный тип графика", - "graph-ve-dialog-edit-width": "Ширина", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Тип этого графика не поддерживается, и любые вносимые изменения могут нарушить его отображение. Пожалуйста, отредактируйте исходные данные графика напрямую на вкладке «{{int:graph-ve-dialog-edit-page-raw}}».", - "graph-ve-empty-graph": "Пустой график", - "graph-ve-no-spec": "Не найдена спецификация графика", - "graph-ve-vega-error": "В Vega произошла ошибка при отрисовке этого графика", - "graph-ve-vega-error-no-render": "Vega не смог построить этот график" -} diff --git a/dist/extensions/Graph/i18n/scn.json b/dist/extensions/Graph/i18n/scn.json deleted file mode 100644 index 6799beddc..000000000 --- a/dist/extensions/Graph/i18n/scn.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Ajeje Brazorf" - ] - }, - "graph-ve-dialog-edit-json-invalid": "Stringa JSON nun vàlida", - "graph-ve-dialog-edit-padding-left": "Manca", - "graph-ve-dialog-edit-page-general": "Ginirali", - "graph-ve-empty-graph": "Gràficu vacanti" -} diff --git a/dist/extensions/Graph/i18n/sco.json b/dist/extensions/Graph/i18n/sco.json deleted file mode 100644 index 31da9ecd1..000000000 --- a/dist/extensions/Graph/i18n/sco.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "@metadata": { - "authors": [ - "AmaryllisGardener" - ] - }, - "graph-tracking-category": "Pages wi graphs", - "graph-broken-category": "Pages wi broken graphs", - "graph-obsolete-category": "Pages wi obsolete Vega 1.0 graphs" -} diff --git a/dist/extensions/Graph/i18n/sd.json b/dist/extensions/Graph/i18n/sd.json deleted file mode 100644 index fef9e0e5b..000000000 --- a/dist/extensions/Graph/i18n/sd.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Aursani", - "Mehtab ahmed" - ] - }, - "graphsandbox": "گراف مشق-پٽي", - "graph-ve-dialog-button-tooltip": "گراف", - "graph-ve-dialog-edit-field-graph-type": "گراف جو قسم", - "graph-ve-dialog-edit-padding-bottom": "تَرو", - "graph-ve-dialog-edit-padding-left": "کاٻو", - "graph-ve-dialog-edit-padding-right": "ساڄو", - "graph-ve-dialog-edit-padding-top": "چوٽي", - "graph-ve-dialog-edit-page-general": "عام", - "graph-ve-dialog-edit-title": "گراف سنواريو", - "graph-ve-dialog-edit-type-area": "ايراضيءَ جو گراف", - "graph-ve-dialog-edit-type-bar": "بار گراف", - "graph-ve-dialog-edit-type-line": "ليڪ گراف", - "graph-ve-empty-graph": "خالي گراف" -} diff --git a/dist/extensions/Graph/i18n/se.json b/dist/extensions/Graph/i18n/se.json deleted file mode 100644 index 687fdc586..000000000 --- a/dist/extensions/Graph/i18n/se.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Jon Harald Søby (WMNO)" - ] - }, - "graph-ve-dialog-button-tooltip": "Gráfa" -} diff --git a/dist/extensions/Graph/i18n/shn.json b/dist/extensions/Graph/i18n/shn.json deleted file mode 100644 index 8db6f3ef1..000000000 --- a/dist/extensions/Graph/i18n/shn.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Saosukham" - ] - }, - "graph-ve-dialog-button-tooltip": "လွၵ်းသဵၼ်ႈ", - "graph-ve-dialog-edit-page-general": "ၵူႈလွင်ႈလွင်ႈ", - "graph-ve-dialog-edit-page-raw": "ၶေႃႈမုၼ်းပိူင်လိူင်း", - "graph-ve-dialog-edit-title": "ထတ်းလွၵ်းသဵၼ်ႈ", - "graph-ve-dialog-edit-type-area": "ဢွင်ႈတီႈ သဵၼ်ႈသၢႆ", - "graph-ve-dialog-edit-type-bar": "ႁၢဝ်း သဵၼ်ႈသၢႆ", - "graph-ve-dialog-edit-type-line": "သဵၼ်ႈတႅမ်ႈၸၼ်", - "graph-ve-dialog-edit-type-unknown": "ဢမ်ႇႁူႉၸၵ်း သဵၼ်ႈသၢႆ ဢၼ်ပေႃႉ" -} diff --git a/dist/extensions/Graph/i18n/sk.json b/dist/extensions/Graph/i18n/sk.json deleted file mode 100644 index 06219e16d..000000000 --- a/dist/extensions/Graph/i18n/sk.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "@metadata": { - "authors": [ - "LacoR", - "Luky001", - "Robert Važan" - ] - }, - "graph-desc": "Vytvára zo značiek <graph> alebo celých stránok grafy pomocou [http://vega.github.io/ Vega]", - "graphsandbox": "Pieskovisko grafov", - "graph-tracking-category": "Stránky s grafmi", - "graph-tracking-category-desc": "Stránka obsahuje tag ", - "graph-broken-category": "Stránky s chybou v grafe" -} diff --git a/dist/extensions/Graph/i18n/sl.json b/dist/extensions/Graph/i18n/sl.json deleted file mode 100644 index 0bcd8da96..000000000 --- a/dist/extensions/Graph/i18n/sl.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Eleassar" - ] - }, - "graph-desc": "Omogoča pretvorbo značk <graph> ali celotnih strani v grafikone [http://vega.github.io/ Vega]", - "graphsandbox": "Peskovnik za grafikone", - "graph-tracking-category": "Strani z grafikoni", - "graph-tracking-category-desc": "Stran vključuje značko .", - "graph-broken-category": "Strani z grafikoni z napakami", - "graph-broken-category-desc": "Stran vključuje nepravilno uporabljeno značko .", - "graph-obsolete-category": "Strani z zastarelimi grafikoni Vega 1.0", - "graph-obsolete-category-desc": "Stran vključuje značko , ki jo je treba posodobiti na različico 2.", - "graph-error-empty-json": "Prazni podatki grafikona, ničesar ni za prikaz", - "graph-error-not-vega": "Predloženi JSON ni veljaven Vega JSON", - "graph-ve-dialog-button-tooltip": "Grafikon", - "graph-ve-dialog-edit-field-graph-type": "Vrsta grafikona", - "graph-ve-dialog-edit-field-raw-json": "Neobdelana specifikacija JSON", - "graph-ve-dialog-edit-height": "Višina", - "graph-ve-dialog-edit-json-invalid": "Neveljaven niz JSON", - "graph-ve-dialog-edit-padding-auto": "Samodejni odmik", - "graph-ve-dialog-edit-padding-bottom": "Dno", - "graph-ve-dialog-edit-padding-left": "Levo", - "graph-ve-dialog-edit-padding-right": "Desno", - "graph-ve-dialog-edit-padding-top": "Vrh", - "graph-ve-dialog-edit-page-data": "Podatki", - "graph-ve-dialog-edit-page-general": "Splošno", - "graph-ve-dialog-edit-page-raw": "Neobdelani podatki", - "graph-ve-dialog-edit-size-field": "Velikost", - "graph-ve-dialog-edit-size-table-unit": "Piksli", - "graph-ve-dialog-edit-title": "Uredi grafikon", - "graph-ve-dialog-edit-type-area": "Površina grafikona", - "graph-ve-dialog-edit-type-bar": "Palični grafikon", - "graph-ve-dialog-edit-type-line": "Črtni grafikon", - "graph-ve-dialog-edit-type-unknown": "Neznana vrsta grafikona", - "graph-ve-dialog-edit-width": "Širina", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Ta vrsta grafikona ni podprta in kakršna koli sprememba bi lahko preprečila njegov pravilni prikaz. Grafikon uredite v specifikaciji neobdelanih podatkov na zavihku »{{int:graph-ve-dialog-edit-page-raw}}«.", - "graph-ve-empty-graph": "Prazen grafikon", - "graph-ve-no-spec": "Specifikacije grafikona ni mogoče najti", - "graph-ve-vega-error": "Vega je pri prikazu tega grafikona naletela na neznano napako", - "graph-ve-vega-error-no-render": "Vega ni mogla prikazati tega grafikona" -} diff --git a/dist/extensions/Graph/i18n/smn.json b/dist/extensions/Graph/i18n/smn.json deleted file mode 100644 index 41c84039a..000000000 --- a/dist/extensions/Graph/i18n/smn.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Muotâ" - ] - }, - "graph-tracking-category": "Siijđoh, main láá kaavioh" -} diff --git a/dist/extensions/Graph/i18n/sms.json b/dist/extensions/Graph/i18n/sms.json deleted file mode 100644 index 525677484..000000000 --- a/dist/extensions/Graph/i18n/sms.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Yupik" - ] - }, - "graph-ve-dialog-edit-height": "Õllâdvuõtt", - "graph-ve-dialog-edit-size-field": "Šorradvuõtt", - "graph-ve-dialog-edit-width": "Kobddâdvuõtt" -} diff --git a/dist/extensions/Graph/i18n/sq.json b/dist/extensions/Graph/i18n/sq.json deleted file mode 100644 index 148b5fda6..000000000 --- a/dist/extensions/Graph/i18n/sq.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Ritam" - ] - }, - "graph-desc": "Lejon <graph> etiketat ose faqet e plota të bëhen grafikë me bazë[http://vega.github.io/ Vega]", - "graph-tracking-category": "Faqet me grafikë", - "graph-tracking-category-desc": "Faqja përfshin një etiketë.", - "graph-broken-category": "Faqet me grafikë të prishur", - "graph-broken-category-desc": "Faqja përfshin një etiketë me përdorim të pavlefshëm.", - "graph-obsolete-category": "Faqet me grafikë të vjetëruar Vega 1.0", - "graph-obsolete-category-desc": "Faqja përfshin një etiketë që duhet të azhurnohet në versionin 2.", - "graph-error-empty-json": "Të dhëna grafike bosh, asgjë për të treguar", - "graph-error-not-vega": "JSON i dhënë nuk është Vega JSON i vlefshëm", - "graph-ve-dialog-button-tooltip": "Grafik", - "graph-ve-dialog-edit-field-graph-type": "Lloji i grafikut", - "graph-ve-dialog-edit-field-raw-json": "Specifikim i papërpunuar JSON", - "graph-ve-dialog-edit-height": "Lartësia", - "graph-ve-dialog-edit-json-invalid": "Varg i pavlefshëm JSON", - "graph-ve-dialog-edit-padding-auto": "Mbushje automatike", - "graph-ve-dialog-edit-padding-bottom": "Fund", - "graph-ve-dialog-edit-padding-left": "Majtas", - "graph-ve-dialog-edit-padding-right": "Djathtas", - "graph-ve-dialog-edit-padding-top": "Sipër", - "graph-ve-dialog-edit-page-data": "Të dhënat", - "graph-ve-dialog-edit-page-general": "Të përgjithshme", - "graph-ve-dialog-edit-page-raw": "Të dhëna të papërpunuara", - "graph-ve-dialog-edit-size-field": "Madhësia", - "graph-ve-dialog-edit-title": "Redakto grafikun", - "graph-ve-dialog-edit-type-area": "Grafiku i zonës", - "graph-ve-dialog-edit-type-bar": "Grafiku i shiritave", - "graph-ve-dialog-edit-type-line": "Grafiku i rreshtit", - "graph-ve-dialog-edit-type-unknown": "Lloji i panjohur i grafikut", - "graph-ve-dialog-edit-width": "Gjerësia", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Lloji i këtij grafiku nuk mbështetet, dhe çdo modifikim i bërë në të mund të prishë shfaqjen e tij. Ju lutemi redaktoni grafikun përmes specifikimit të të dhënave të papërpunuara në skedën \"{{int:graph-ve-dialog-edit-page-raw}}\" .", - "graph-ve-empty-graph": "Grafik bosh", - "graph-ve-no-spec": "Nuk u gjet asnjë specifikim i grafikut", - "graph-ve-vega-error": "Vega ka hasur në një gabim në krijimin e këtij grafiku", - "graph-ve-vega-error-no-render": "Vega nuk ishte në gjendje ta krijontr këtë grafik" -} diff --git a/dist/extensions/Graph/i18n/sr-ec.json b/dist/extensions/Graph/i18n/sr-ec.json deleted file mode 100644 index 7ab9a431c..000000000 --- a/dist/extensions/Graph/i18n/sr-ec.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "@metadata": { - "authors": [ - "BadDog", - "Milicevic01" - ] - }, - "graph-desc": "Омогућава ознаке <graph> или да целе странице постану графикони засновани на [http://vega.github.io/ Vega-и]", - "graphsandbox": "Песак за графиконе", - "graph-tracking-category": "Странице са графиконима", - "graph-tracking-category-desc": "Странице које укључују ознаку .", - "graph-broken-category": "Странице са поквареним графиконима", - "graph-broken-category-desc": "Странице које укључују ознаку са невалидном употребом.", - "graph-obsolete-category": "Странице са застарелим Вега 1.0 графиконима", - "graph-obsolete-category-desc": "Странице које укључују ознаку коју треба ажурирати на верзију 2.", - "graph-error-empty-json": "Празни подаци о графикону, ништа за приказ", - "graph-error-not-vega": "Пружен JSON није валидан Вега JSON", - "graph-ve-dialog-button-tooltip": "Графикон", - "graph-ve-dialog-edit-field-graph-type": "Тип графикона", - "graph-ve-dialog-edit-field-raw-json": "Сирова JSON спецификација", - "graph-ve-dialog-edit-height": "Висина", - "graph-ve-dialog-edit-json-invalid": "Неважећи JSON стринг", - "graph-ve-dialog-edit-padding-auto": "Аутоматске маргине", - "graph-ve-dialog-edit-padding-bottom": "Доња", - "graph-ve-dialog-edit-padding-left": "Лева", - "graph-ve-dialog-edit-padding-right": "Десна", - "graph-ve-dialog-edit-padding-top": "Горња", - "graph-ve-dialog-edit-page-data": "Подаци", - "graph-ve-dialog-edit-page-general": "Опште", - "graph-ve-dialog-edit-page-raw": "Сирови подаци", - "graph-ve-dialog-edit-size-field": "Величина", - "graph-ve-dialog-edit-size-table-unit": "Пиксели", - "graph-ve-dialog-edit-title": "Уређивање графикона", - "graph-ve-dialog-edit-type-area": "Површински графикон", - "graph-ve-dialog-edit-type-bar": "Тракасти графикон", - "graph-ve-dialog-edit-type-line": "Линијски графикон", - "graph-ve-dialog-edit-type-unknown": "Непозната врста графикона", - "graph-ve-dialog-edit-width": "Ширина", - "graph-ve-empty-graph": "Празан графикон", - "graph-ve-no-spec": "Није пронађена спецификација графикона", - "graph-ve-vega-error": "Вега је наишла на грешку при рендеровању овог графикона", - "graph-ve-vega-error-no-render": "Вега није могла да рендерује овај графикон" -} diff --git a/dist/extensions/Graph/i18n/sr-el.json b/dist/extensions/Graph/i18n/sr-el.json deleted file mode 100644 index 2e494221a..000000000 --- a/dist/extensions/Graph/i18n/sr-el.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Milicevic01" - ] - }, - "graph-desc": "Omogućava oznake <graph> ili da cele stranice postanu grafikoni zasnovani na [http://vega.github.io/ Vega-i]", - "graphsandbox": "Pesak za grafikone", - "graph-tracking-category": "Stranice sa grafikonima", - "graph-tracking-category-desc": "Stranice koje uključuju oznaku .", - "graph-broken-category": "Stranice sa pokvarenim grafikonima", - "graph-broken-category-desc": "Stranice koje uključuju oznaku sa nevalidnom upotrebom.", - "graph-obsolete-category": "Stranice sa zastarelim Vega 1.0 grafikonima", - "graph-obsolete-category-desc": "Stranice koje uključuju oznaku koju treba ažurirati na verziju 2.", - "graph-error-empty-json": "Prazni podaci o grafikonu, ništa za prikaz", - "graph-error-not-vega": "Pružen JSON nije validan Vega JSON", - "graph-ve-dialog-button-tooltip": "Grafikon", - "graph-ve-dialog-edit-field-graph-type": "Tip grafikona", - "graph-ve-dialog-edit-field-raw-json": "Sirova JSON specifikacija", - "graph-ve-dialog-edit-height": "Visina", - "graph-ve-dialog-edit-json-invalid": "Nevažeći JSON string", - "graph-ve-dialog-edit-padding-auto": "Automatske margine", - "graph-ve-dialog-edit-padding-bottom": "Donja", - "graph-ve-dialog-edit-padding-left": "Leva", - "graph-ve-dialog-edit-padding-right": "Desna", - "graph-ve-dialog-edit-padding-top": "Gornja", - "graph-ve-dialog-edit-page-data": "Podaci", - "graph-ve-dialog-edit-page-general": "Opšte", - "graph-ve-dialog-edit-page-raw": "Sirovi podaci", - "graph-ve-dialog-edit-size-field": "Veličina", - "graph-ve-dialog-edit-size-table-unit": "Pikseli", - "graph-ve-dialog-edit-title": "Uređivanje grafikona", - "graph-ve-dialog-edit-type-area": "Površinski grafikon", - "graph-ve-dialog-edit-type-bar": "Trakasti grafikon", - "graph-ve-dialog-edit-type-line": "Linijski grafikon", - "graph-ve-dialog-edit-type-unknown": "Nepoznata vrsta grafikona", - "graph-ve-dialog-edit-width": "Širina", - "graph-ve-empty-graph": "Prazan grafikon", - "graph-ve-no-spec": "Nije pronađena specifikacija grafikona", - "graph-ve-vega-error": "Vega je naišla na grešku pri renderovanju ovog grafikona", - "graph-ve-vega-error-no-render": "Vega nije mogla da renderuje ovaj grafikon" -} diff --git a/dist/extensions/Graph/i18n/sv.json b/dist/extensions/Graph/i18n/sv.json deleted file mode 100644 index 3a68c24b3..000000000 --- a/dist/extensions/Graph/i18n/sv.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Ainali", - "Ayaibrahim", - "GameOn", - "Josve05a", - "Lokal Profil", - "MagnusA", - "WikiPhoenix" - ] - }, - "graph-desc": "Tillåter taggen <graph> eller hela sidor att bli [http://vega.github.io/ Vega]-baserade grafer", - "graphsandbox": "Diagramsandlåda", - "graph-tracking-category": "Sidor med grafer", - "graph-tracking-category-desc": "Den här sidan innehåller en -tagg.", - "graph-broken-category": "Sidor med trasiga grafer", - "graph-broken-category-desc": "Den är sidan innehåller en -tagg som används felaktigt.", - "graph-obsolete-category": "Sidor med föråldrade Vega 1.0 grafer", - "graph-obsolete-category-desc": "Sidan innehåller en tagg som bör uppdateras till version 2.", - "graph-error-empty-json": "Tomma grafdator, ingenting att visa", - "graph-error-not-vega": "Den angivna JSON är inte gilltig Vega-JSON", - "graph-ve-dialog-button-tooltip": "Diagram", - "graph-ve-dialog-edit-field-graph-type": "Diagramtyp", - "graph-ve-dialog-edit-field-raw-json": "Rå JSON-specifikation", - "graph-ve-dialog-edit-height": "Höjd", - "graph-ve-dialog-edit-json-invalid": "Ogiltig JSON-sträng", - "graph-ve-dialog-edit-padding-auto": "Automatisk utfyllnad", - "graph-ve-dialog-edit-padding-bottom": "Nederkant", - "graph-ve-dialog-edit-padding-left": "Vänster", - "graph-ve-dialog-edit-padding-right": "Höger", - "graph-ve-dialog-edit-padding-top": "Överkant", - "graph-ve-dialog-edit-page-data": "Data", - "graph-ve-dialog-edit-page-general": "Allmänt", - "graph-ve-dialog-edit-page-raw": "Rådata", - "graph-ve-dialog-edit-size-field": "Storlek", - "graph-ve-dialog-edit-size-table-unit": "Bildpunkter", - "graph-ve-dialog-edit-title": "Redigera diagram", - "graph-ve-dialog-edit-type-area": "Ytdiagram", - "graph-ve-dialog-edit-type-bar": "Stapeldiagram", - "graph-ve-dialog-edit-type-line": "Linjediagram", - "graph-ve-dialog-edit-type-unknown": "Okänd diagramtyp", - "graph-ve-dialog-edit-width": "Bredd", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Typen av den här grafen stöds inte och alla ändringar som görs av den kan medföra att den går i bitar. Redigera diagrammet genom rådata-specifikationen på fliken «{{int:graph-värk-dialog-edit-page-raw}}».", - "graph-ve-empty-graph": "Tom graf", - "graph-ve-no-spec": "Ingen graf-specifikation hittades", - "graph-ve-vega-error": "Det uppstod ett fel när Vega renderade denna graf", - "graph-ve-vega-error-no-render": "Vega kunde inte rendera denna graf" -} diff --git a/dist/extensions/Graph/i18n/sw.json b/dist/extensions/Graph/i18n/sw.json deleted file mode 100644 index 712c5961b..000000000 --- a/dist/extensions/Graph/i18n/sw.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Yasen igra" - ] - }, - "graph-ve-dialog-edit-height": "Urefu", - "graph-ve-dialog-edit-width": "Upana" -} diff --git a/dist/extensions/Graph/i18n/szy.json b/dist/extensions/Graph/i18n/szy.json deleted file mode 100644 index 8d2d1d92b..000000000 --- a/dist/extensions/Graph/i18n/szy.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Benel" - ] - }, - "graph-ve-dialog-edit-padding-right": "pakawanan", - "graph-ve-dialog-edit-width": "hicica-ahebal" -} diff --git a/dist/extensions/Graph/i18n/ta.json b/dist/extensions/Graph/i18n/ta.json deleted file mode 100644 index b6c901551..000000000 --- a/dist/extensions/Graph/i18n/ta.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Timbaaa", - "Fahimrazick" - ] - }, - "graphsandbox": "வரைபட மணல்தொட்டி", - "graph-ve-dialog-button-tooltip": "வரைபடம்", - "graph-ve-dialog-edit-field-graph-type": "வரைபட வகை", - "graph-ve-dialog-edit-height": "உயரம்", - "graph-ve-dialog-edit-padding-bottom": "கீழ்", - "graph-ve-dialog-edit-padding-left": "இடது", - "graph-ve-dialog-edit-padding-right": "வலது", - "graph-ve-dialog-edit-padding-top": "மேல்", - "graph-ve-dialog-edit-page-data": "தரவு", - "graph-ve-dialog-edit-page-general": "பொது", - "graph-ve-dialog-edit-page-raw": "மூலத்தரவு", - "graph-ve-dialog-edit-size-field": "அளவு", - "graph-ve-dialog-edit-title": "வரைப்படத்தை தொகு", - "graph-ve-dialog-edit-width": "அகலம்", - "graph-ve-no-spec": "வரப்படத்தின் விவரங்கள் ஏதுமில்லை" -} diff --git a/dist/extensions/Graph/i18n/tcy.json b/dist/extensions/Graph/i18n/tcy.json deleted file mode 100644 index 838203f27..000000000 --- a/dist/extensions/Graph/i18n/tcy.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Bharathesha Alasandemajalu", - "రహ్మానుద్దీన్" - ] - }, - "graph-ve-dialog-edit-padding-bottom": "ತಿರ್‍ತ್ತ್", - "graph-ve-dialog-edit-padding-left": "ಎಡ", - "graph-ve-dialog-edit-padding-right": "ಬಲ", - "graph-ve-dialog-edit-padding-top": "ಮಿತ್ತ್" -} diff --git a/dist/extensions/Graph/i18n/te.json b/dist/extensions/Graph/i18n/te.json deleted file mode 100644 index 20fb82f2d..000000000 --- a/dist/extensions/Graph/i18n/te.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Chaduvari", - "Veeven" - ] - }, - "graph-ve-dialog-button-tooltip": "గ్రాఫు", - "graph-ve-dialog-edit-height": "ఎత్తు", - "graph-ve-dialog-edit-size-field": "పరిమాణం", - "graph-ve-dialog-edit-width": "వెడల్పు" -} diff --git a/dist/extensions/Graph/i18n/th.json b/dist/extensions/Graph/i18n/th.json deleted file mode 100644 index 55f095af7..000000000 --- a/dist/extensions/Graph/i18n/th.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Aefgh39622", - "Geonuch", - "Horus", - "Patsagorn Y." - ] - }, - "graphsandbox": "กระบะทรายกราฟ", - "graph-tracking-category": "หน้าที่มีกราฟ", - "graph-ve-dialog-button-tooltip": "กราฟ", - "graph-ve-dialog-edit-field-graph-type": "ชนิดของกราฟ", - "graph-ve-dialog-edit-field-raw-json": "เนื้อหาที่เป็น JSON", - "graph-ve-dialog-edit-height": "ความสูง" -} diff --git a/dist/extensions/Graph/i18n/tl.json b/dist/extensions/Graph/i18n/tl.json deleted file mode 100644 index 8f343132f..000000000 --- a/dist/extensions/Graph/i18n/tl.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Emem.calist", - "Leeheonjin" - ] - }, - "graph-error-empty-json": "Walang lamang datos, walang maipapakita", - "graph-ve-dialog-edit-height": "Taas", - "graph-ve-dialog-edit-size-field": "Sukat", - "graph-ve-dialog-edit-size-table-unit": "Mga pixel", - "graph-ve-dialog-edit-width": "Lapad" -} diff --git a/dist/extensions/Graph/i18n/tr.json b/dist/extensions/Graph/i18n/tr.json deleted file mode 100644 index 6ee8ce917..000000000 --- a/dist/extensions/Graph/i18n/tr.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "@metadata": { - "authors": [ - "BaRaN6161 TURK", - "HakanIST", - "Incelemeelemani", - "Mavrikant", - "McAang", - "Rapsar", - "Sayginer", - "Sezgin İbiş" - ] - }, - "graph-desc": "<graph> etiketlerinin veya tüm sayfaların [http://vega.github.io/ Vega] tabanlı grafik olmasına izin verir", - "graphsandbox": "Grafik deneme tahtası", - "graph-tracking-category": "Grafikli sayfalar", - "graph-tracking-category-desc": "Sayfa bir etiketi içerir.", - "graph-broken-category": "Grafikleri bozuk sayfalar", - "graph-broken-category-desc": "Sayfa, geçersiz kullanıma sahip bir etiketi içeriyor.", - "graph-obsolete-category": "Eski Vega 1.0 grafikleri olan sayfalar", - "graph-obsolete-category-desc": "Sayfa, sürüm 2'ye güncellenmesi gereken bir etiketi içerir.", - "graph-error-empty-json": "Boş grafik verileri, gösterilecek bir şey yok", - "graph-error-not-vega": "Sağlanan JSON geçerli bir Vega JSON değil", - "graph-ve-dialog-button-tooltip": "Grafik", - "graph-ve-dialog-edit-field-graph-type": "Grafik türü", - "graph-ve-dialog-edit-field-raw-json": "Ham JSON özellikleri", - "graph-ve-dialog-edit-height": "Yükseklik", - "graph-ve-dialog-edit-json-invalid": "Geçersiz JSON dizesi", - "graph-ve-dialog-edit-padding-auto": "Otomatik dolgu", - "graph-ve-dialog-edit-padding-bottom": "Alt", - "graph-ve-dialog-edit-padding-left": "Sol", - "graph-ve-dialog-edit-padding-right": "Sağ", - "graph-ve-dialog-edit-padding-top": "Üst", - "graph-ve-dialog-edit-page-data": "Veri", - "graph-ve-dialog-edit-page-general": "Genel", - "graph-ve-dialog-edit-page-raw": "Ham verisi", - "graph-ve-dialog-edit-size-field": "Boyut", - "graph-ve-dialog-edit-size-table-unit": "Pikseller", - "graph-ve-dialog-edit-title": "Grafiği düzenle", - "graph-ve-dialog-edit-type-area": "Alan grafiği", - "graph-ve-dialog-edit-type-bar": "Çubuk grafiği", - "graph-ve-dialog-edit-type-line": "Çizgi grafiği", - "graph-ve-dialog-edit-type-unknown": "Bilinmeyen grafik türü", - "graph-ve-dialog-edit-width": "Genişlik", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Bu grafiğin türü desteklenmiyor ve üzerinde yapılan değişiklikler görüntüyü kırabilir. Lütfen grafiği \"{{int:graph-ve-dialog-edit-page-raw}}\" sekmesindeki ham veri spesifikasyonu aracılığıyla düzenleyin.", - "graph-ve-empty-graph": "Boş grafik", - "graph-ve-no-spec": "Grafik belirtimi bulunamadı", - "graph-ve-vega-error": "Vega bu grafiği görüntülerken bir hata ile karşılaştı", - "graph-ve-vega-error-no-render": "Vega bu grafiği gösteremedi" -} diff --git a/dist/extensions/Graph/i18n/tt-cyrl.json b/dist/extensions/Graph/i18n/tt-cyrl.json deleted file mode 100644 index 6bb1bf2ef..000000000 --- a/dist/extensions/Graph/i18n/tt-cyrl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Ерней", - "Blackisnewyellow" - ] - }, - "graph-tracking-category": "Графиклы битләр", - "graph-ve-dialog-button-tooltip": "График", - "graph-ve-dialog-edit-field-graph-type": "График төре", - "graph-ve-dialog-edit-height": "Биеклек", - "graph-ve-dialog-edit-padding-bottom": "Аста", - "graph-ve-dialog-edit-padding-left": "Сулда", - "graph-ve-dialog-edit-padding-right": "Уңда", - "graph-ve-dialog-edit-padding-top": "Өстә", - "graph-ve-dialog-edit-page-data": "Мәгълүматлар", - "graph-ve-dialog-edit-page-general": "Гомуми", - "graph-ve-dialog-edit-size-field": "Зурлык", - "graph-ve-dialog-edit-size-table-unit": "Нокталар", - "graph-ve-dialog-edit-title": "Графикны үзгәртү", - "graph-ve-dialog-edit-type-area": "Мәйданлы диаграмма", - "graph-ve-dialog-edit-type-bar": "Баганалы диаграмма", - "graph-ve-dialog-edit-type-line": "Сызыклы диаграмма", - "graph-ve-dialog-edit-type-unknown": "Билгесез диаграмма төре", - "graph-ve-dialog-edit-width": "Киңлек", - "graph-ve-empty-graph": "Буш график" -} diff --git a/dist/extensions/Graph/i18n/uk.json b/dist/extensions/Graph/i18n/uk.json deleted file mode 100644 index b93e6e47e..000000000 --- a/dist/extensions/Graph/i18n/uk.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Andriykopanytsia", - "Base", - "DDPAT", - "Dars", - "Ice bulldog", - "Piramidion", - "Ата" - ] - }, - "graph-desc": "Дозволяє тегам <graph> або цілим сторінкам стати графіками на основі [http://vega.github.io/ Vega]", - "graphsandbox": "Пісочниця для графіків", - "graph-tracking-category": "Сторінки з графіками", - "graph-tracking-category-desc": "Сторінка включає тег .", - "graph-broken-category": "Сторінки зі зламаними графіками", - "graph-broken-category-desc": "Сторінка включає неправильно використаний тег .", - "graph-obsolete-category": "Сторінки з застарілими графіками Vega 1.0", - "graph-obsolete-category-desc": "Ця сторінка містить тег , який треба оновити до версії 2.", - "graph-error-empty-json": "Порожні дані графіка, нема що показувати", - "graph-error-not-vega": "Наданий JSON не є дійсним Vega JSON", - "graph-ve-dialog-button-tooltip": "Графік", - "graph-ve-dialog-edit-field-graph-type": "Тип графіка", - "graph-ve-dialog-edit-field-raw-json": "Специфікація сирого JSON", - "graph-ve-dialog-edit-height": "Висота", - "graph-ve-dialog-edit-json-invalid": "Неправильний рядок JSON", - "graph-ve-dialog-edit-padding-auto": "Автоматичний відступ", - "graph-ve-dialog-edit-padding-bottom": "Знизу", - "graph-ve-dialog-edit-padding-left": "Зліва", - "graph-ve-dialog-edit-padding-right": "Справа", - "graph-ve-dialog-edit-padding-top": "Зверху", - "graph-ve-dialog-edit-page-data": "Дані", - "graph-ve-dialog-edit-page-general": "Загальні", - "graph-ve-dialog-edit-page-raw": "Необроблені дані", - "graph-ve-dialog-edit-size-field": "Розмір", - "graph-ve-dialog-edit-size-table-unit": "Пікселі", - "graph-ve-dialog-edit-title": "Редагувати діаграму", - "graph-ve-dialog-edit-type-area": "Площа графіка", - "graph-ve-dialog-edit-type-bar": "Гістограма", - "graph-ve-dialog-edit-type-line": "Лінійний графік", - "graph-ve-dialog-edit-type-unknown": "Невідомий тип графіка", - "graph-ve-dialog-edit-width": "Ширина", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Тип цього графіку не підтримується й будь-які зроблені зміни можуть пошкодити його відображення. Будь ласка, редагуйте графік через вказання сирих даних за допомогою вкладки «{{int:graph-ve-dialog-edit-page-raw}}».", - "graph-ve-empty-graph": "Порожній графік", - "graph-ve-no-spec": "Не знайдено специфікації графів", - "graph-ve-vega-error": "У Веги сталася помилка під час візуалізації цього графіка", - "graph-ve-vega-error-no-render": "Вега не в змозі відобразити цей графік" -} diff --git a/dist/extensions/Graph/i18n/ur.json b/dist/extensions/Graph/i18n/ur.json deleted file mode 100644 index b6c33ddd7..000000000 --- a/dist/extensions/Graph/i18n/ur.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Muhammad Shuaib" - ] - }, - "graphsandbox": "گراف کا تختہ مشق" -} diff --git a/dist/extensions/Graph/i18n/uz.json b/dist/extensions/Graph/i18n/uz.json deleted file mode 100644 index 54c4faa78..000000000 --- a/dist/extensions/Graph/i18n/uz.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Malikxan" - ] - }, - "graphsandbox": "Grafiklar uchun qumloq", - "graph-tracking-category": "Grafikli sahifalar", - "graph-broken-category": "Buzuq grafikli sahifalar", - "graph-obsolete-category": "Eski Vega 1.0 grafiklari boʻlgan sahifalar", - "graph-ve-dialog-button-tooltip": "Grafik", - "graph-ve-dialog-edit-height": "Boʻyi", - "graph-ve-dialog-edit-padding-bottom": "Past", - "graph-ve-dialog-edit-padding-left": "Chap", - "graph-ve-dialog-edit-padding-right": "Oʻng", - "graph-ve-dialog-edit-padding-top": "Yuqori", - "graph-ve-dialog-edit-page-general": "Umumiy", - "graph-ve-dialog-edit-size-field": "Oʻlchami", - "graph-ve-dialog-edit-size-table-unit": "Piksellar", - "graph-ve-dialog-edit-type-bar": "Gistogramma", - "graph-ve-dialog-edit-type-line": "Chiziqli grafik", - "graph-ve-dialog-edit-width": "Eni" -} diff --git a/dist/extensions/Graph/i18n/vec.json b/dist/extensions/Graph/i18n/vec.json deleted file mode 100644 index f76ba59ca..000000000 --- a/dist/extensions/Graph/i18n/vec.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Fierodelveneto" - ] - }, - "graph-tracking-category": "Pàjine co gràfeghi" -} diff --git a/dist/extensions/Graph/i18n/vi.json b/dist/extensions/Graph/i18n/vi.json deleted file mode 100644 index 89cc7d52f..000000000 --- a/dist/extensions/Graph/i18n/vi.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Minh Nguyen" - ] - }, - "graph-desc": "Cho phép các thẻ <graph> hoặc toàn bộ trang trở thành biểu đồ dùng [http://vega.github.io/ Vega]", - "graphsandbox": "Chỗ thử biểu đồ", - "graph-tracking-category": "Trang có biểu đồ", - "graph-tracking-category-desc": "Các trang này có thẻ .", - "graph-broken-category": "Trang có biểu đồ hỏng", - "graph-broken-category-desc": "Các trang này có thẻ được sử dụng một cách không hợp lệ.", - "graph-obsolete-category": "Trang có biểu đồ Vega 1.0 lỗi thời", - "graph-obsolete-category-desc": "Trang này có thẻ cần được nâng cấp đến phiên bản 2.", - "graph-error-empty-json": "Dữ liệu biểu đồ trống; không có gì để hiển thị", - "graph-error-not-vega": "Mã nguồn JSON được cung cấp không phải là JSON Vego hợp lệ", - "graph-ve-dialog-button-tooltip": "Biểu đồ", - "graph-ve-dialog-edit-field-graph-type": "Loại biểu đồ", - "graph-ve-dialog-edit-field-raw-json": "Mã nguồn JSON", - "graph-ve-dialog-edit-height": "Chiều cao", - "graph-ve-dialog-edit-json-invalid": "Chuỗi JSON không hợp lệ", - "graph-ve-dialog-edit-padding-auto": "Đệm tự động", - "graph-ve-dialog-edit-padding-bottom": "Dưới", - "graph-ve-dialog-edit-padding-left": "Trái", - "graph-ve-dialog-edit-padding-right": "Phải", - "graph-ve-dialog-edit-padding-top": "Trên", - "graph-ve-dialog-edit-page-data": "Dữ liệu", - "graph-ve-dialog-edit-page-general": "Tổng quát", - "graph-ve-dialog-edit-page-raw": "Dữ liệu gốc", - "graph-ve-dialog-edit-size-field": "Kích thước", - "graph-ve-dialog-edit-size-table-unit": "Điểm ảnh", - "graph-ve-dialog-edit-title": "Sửa đổi biểu đồ", - "graph-ve-dialog-edit-type-area": "Biểu đồ khu vực", - "graph-ve-dialog-edit-type-bar": "Biểu đồ thanh", - "graph-ve-dialog-edit-type-line": "Biểu đồ tuyến tính", - "graph-ve-dialog-edit-type-unknown": "Loại biểu đồ không rõ", - "graph-ve-dialog-edit-width": "Chiều ngang", - "graph-ve-dialog-edit-unknown-graph-type-warning": "Loại biểu đồ này không được hỗ trợ. Việc sửa đổi nó có thể làm nó hư khi được hiển thị. Xin hãy sửa đổi mã nguồn gốc của biểu đồ dùng thẻ “{{int:graph-ve-dialog-edit-page-raw}}”.", - "graph-ve-empty-graph": "Biểu đồ trống", - "graph-ve-no-spec": "Không tìm thấy bản định rõ biểu đồ", - "graph-ve-vega-error": "Vega đã gặp lỗi khi kết xuất biểu đồ này", - "graph-ve-vega-error-no-render": "Vega không thể kết xuất biểu đồ này" -} diff --git a/dist/extensions/Graph/i18n/xmf.json b/dist/extensions/Graph/i18n/xmf.json deleted file mode 100644 index 0b0ad91bd..000000000 --- a/dist/extensions/Graph/i18n/xmf.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Narazeni", - "Silovan" - ] - }, - "graph-ve-dialog-edit-page-general": "თარი", - "graph-ve-dialog-edit-page-raw": "უდუმუშებუ მუნაჩემეფი", - "graph-ve-empty-graph": "ცაიორი ვე" -} diff --git a/dist/extensions/Graph/i18n/yo.json b/dist/extensions/Graph/i18n/yo.json deleted file mode 100644 index 2c7c0361a..000000000 --- a/dist/extensions/Graph/i18n/yo.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Demmy" - ] - }, - "graph-error-not-vega": "JSON tó gbé já de kìí ṣe Vega JSON tí a gbà láàyè" -} diff --git a/dist/extensions/Graph/i18n/yue-hant.json b/dist/extensions/Graph/i18n/yue-hant.json deleted file mode 100644 index 8c1cb42a1..000000000 --- a/dist/extensions/Graph/i18n/yue-hant.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Winston Sung" - ] - }, - "graph-ve-dialog-edit-size-field": "嘥士" -} diff --git a/dist/extensions/Graph/i18n/yue.json b/dist/extensions/Graph/i18n/yue.json deleted file mode 100644 index 87e5aa762..000000000 --- a/dist/extensions/Graph/i18n/yue.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Moon0319" - ] - }, - "graph-ve-dialog-edit-size-field": "嘥士" -} diff --git a/dist/extensions/Graph/i18n/zh-hans.json b/dist/extensions/Graph/i18n/zh-hans.json deleted file mode 100644 index 3a307cc5c..000000000 --- a/dist/extensions/Graph/i18n/zh-hans.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Liuxinyu970226", - "CrownedWharf566", - "LittlePaw365" - ] - }, - "graph-desc": "允许<graph>标签或全部页面成为基于[http://vega.github.io/ Vega]的图形", - "graphsandbox": "图表沙盒", - "graph-tracking-category": "有图表的页面", - "graph-tracking-category-desc": "页面包含标签。", - "graph-broken-category": "有损坏图表的页面", - "graph-broken-category-desc": "页面包含无效用法的标签。", - "graph-obsolete-category": "有过时的Vega 1.0图表的页面", - "graph-obsolete-category-desc": "页面包含应更新至版本2的标签。", - "graph-error-empty-json": "图形数据为空,没有任何内容可显示", - "graph-error-not-vega": "提供的JSON不是有效的Vega JSON", - "graph-ve-dialog-button-tooltip": "图表", - "graph-ve-dialog-edit-field-graph-type": "图表类型", - "graph-ve-dialog-edit-field-raw-json": "原始JSON规范", - "graph-ve-dialog-edit-height": "高度", - "graph-ve-dialog-edit-json-invalid": "无效的JSON字符串", - "graph-ve-dialog-edit-padding-auto": "自动填充", - "graph-ve-dialog-edit-padding-bottom": "底部", - "graph-ve-dialog-edit-padding-left": "左", - "graph-ve-dialog-edit-padding-right": "右", - "graph-ve-dialog-edit-padding-top": "顶部", - "graph-ve-dialog-edit-page-data": "数据", - "graph-ve-dialog-edit-page-general": "一般", - "graph-ve-dialog-edit-page-raw": "原始数据", - "graph-ve-dialog-edit-size-field": "大小", - "graph-ve-dialog-edit-size-table-unit": "像素", - "graph-ve-dialog-edit-title": "编辑图表", - "graph-ve-dialog-edit-type-area": "面积图", - "graph-ve-dialog-edit-type-bar": "条形图", - "graph-ve-dialog-edit-type-line": "折线图", - "graph-ve-dialog-edit-type-unknown": "未知图表类型", - "graph-ve-dialog-edit-width": "宽度", - "graph-ve-dialog-edit-unknown-graph-type-warning": "此图表的类型不受支持,任何对此的修改将破坏其显示效果。请通过在“{{int:graph-ve-dialog-edit-page-raw}}”标签上的原始数据规范编辑图表。", - "graph-ve-empty-graph": "空的图表", - "graph-ve-no-spec": "找不到图表规范", - "graph-ve-vega-error": "Vega在渲染此图表时遇到错误", - "graph-ve-vega-error-no-render": "Vega无法渲染此图表" -} diff --git a/dist/extensions/Graph/i18n/zh-hant.json b/dist/extensions/Graph/i18n/zh-hant.json deleted file mode 100644 index 0bf6df461..000000000 --- a/dist/extensions/Graph/i18n/zh-hant.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Cwlin0416", - "Kly", - "Liuxinyu970226" - ] - }, - "graph-desc": "允許 <graph> 標籤或整個頁面使用 [http://vega.github.io/ Vega] 為基礎的圖型。", - "graphsandbox": "圖表沙盒", - "graph-tracking-category": "有圖表的頁面", - "graph-tracking-category-desc": "含有 標籤的頁面。", - "graph-broken-category": "有損壞圖表的頁面", - "graph-broken-category-desc": "含有 標籤且有無效用法的頁面。", - "graph-obsolete-category": "有過時 Vega 1.0 圖表的頁面", - "graph-obsolete-category-desc": "含有 標籤且應更新為 2 版的頁面。", - "graph-error-empty-json": "空的圖表資料,沒有可顯示的東西", - "graph-error-not-vega": "提供的 JSON 不是有效的 Vega JSON", - "graph-ve-dialog-button-tooltip": "圖表", - "graph-ve-dialog-edit-field-graph-type": "圖表類型", - "graph-ve-dialog-edit-field-raw-json": "原始 JSON 描述", - "graph-ve-dialog-edit-height": "高度", - "graph-ve-dialog-edit-json-invalid": "無效的 JSON 字串", - "graph-ve-dialog-edit-padding-auto": "自動填空", - "graph-ve-dialog-edit-padding-bottom": "下方", - "graph-ve-dialog-edit-padding-left": "左方", - "graph-ve-dialog-edit-padding-right": "右方", - "graph-ve-dialog-edit-padding-top": "上方", - "graph-ve-dialog-edit-page-data": "資料", - "graph-ve-dialog-edit-page-general": "一般", - "graph-ve-dialog-edit-page-raw": "原始資料", - "graph-ve-dialog-edit-size-field": "尺寸", - "graph-ve-dialog-edit-size-table-unit": "像素", - "graph-ve-dialog-edit-title": "編輯圖表", - "graph-ve-dialog-edit-type-area": "面積圖", - "graph-ve-dialog-edit-type-bar": "條狀圖", - "graph-ve-dialog-edit-type-line": "折線圖", - "graph-ve-dialog-edit-type-unknown": "無效的圖表類型", - "graph-ve-dialog-edit-width": "寬度", - "graph-ve-dialog-edit-unknown-graph-type-warning": "不支援此圖形類型,任何修改動作都會造成顯示中斷。請透過「{{int:graph-ve-dialog-edit-page-raw}}」分頁上的原始資料規格來編輯圖形。", - "graph-ve-empty-graph": "空圖表", - "graph-ve-no-spec": "查無圖型規格", - "graph-ve-vega-error": "Vega 在呈現此圖形時發生錯誤", - "graph-ve-vega-error-no-render": "Vega 無法呈現此圖形" -} diff --git a/dist/extensions/Graph/includes/ApiGraph.php b/dist/extensions/Graph/includes/ApiGraph.php deleted file mode 100644 index fe28cec42..000000000 --- a/dist/extensions/Graph/includes/ApiGraph.php +++ /dev/null @@ -1,186 +0,0 @@ -parser = $parser; - $this->cache = $cache; - $this->wikiPageFactory = $wikiPageFactory; - } - - public function execute() { - $params = $this->extractRequestParams(); - - $this->requireOnlyOneParameter( $params, 'title', 'text' ); - - if ( $params['title'] !== null ) { - if ( $params['hash'] === null ) { - $this->dieWithError( [ 'apierror-invalidparammix-mustusewith', 'title', 'hash' ], - 'missingparam' ); - } - $graph = $this->getGraphSpec( $params['title'], $params['oldid'], $params['hash'] ); - } else { - if ( !$this->getRequest()->wasPosted() ) { - $this->dieWithError( 'apierror-graph-mustposttext', 'mustposttext' ); - } - if ( $params['hash'] !== null ) { - $this->dieWithError( [ 'apierror-invalidparammix-cannotusewith', 'hash', 'text' ], - 'invalidparammix' ); - } - $graph = $this->preprocess( $params['text'] ); - } - - $this->getMain()->setCacheMode( 'public' ); - $this->getResult()->addValue( null, $this->getModuleName(), $graph ); - } - - /** - * @inheritDoc - */ - public function getAllowedParams() { - return [ - 'hash' => [ - ParamValidator::PARAM_TYPE => 'string', - ], - 'title' => [ - ParamValidator::PARAM_TYPE => 'string', - ], - 'text' => [ - ParamValidator::PARAM_TYPE => 'string', - ], - 'oldid' => [ - ParamValidator::PARAM_TYPE => 'integer', - ParamValidator::PARAM_DEFAULT => 0 - ], - ]; - } - - /** - * @inheritDoc - */ - protected function getExamplesMessages() { - return [ - 'formatversion=2&action=graph&title=Extension%3AGraph%2FDemo' . - '&hash=1533aaad45c733dcc7e07614b54cbae4119a6747' => 'apihelp-graph-example', - ]; - } - - /** - * Parse graph definition that may contain wiki markup into pure json - * @param string $text - * @return string - */ - private function preprocess( $text ) { - $title = Title::makeTitle( NS_SPECIAL, Sandbox::PAGENAME )->fixSpecialName(); - $text = $this->parser->getFreshParser() - ->preprocess( $text, $title, new ParserOptions( $this->getUser() ) ); - $st = FormatJson::parse( $text ); - if ( !$st->isOK() ) { - // Sometimes we get {...} as input. Try to strip tags - $count = 0; - $text = preg_replace( '/^\s*]*>(.*)<\/graph>\s*$/s', '$1', $text, 1, $count ); - if ( $count === 1 ) { - $st = FormatJson::parse( $text ); - } - if ( !$st->isOK() ) { - $this->dieWithError( 'apierror-graph-invalid', 'invalidtext' ); - } - } - return $st->getValue(); - } - - /** - * Get graph definition with title and hash - * @param string $titleText - * @param int $revId - * @param string $hash - * @return mixed Decoded graph spec from the DB or the stash - */ - private function getGraphSpec( $titleText, $revId, $hash ) { - $title = Title::newFromText( $titleText ); - if ( !$title ) { - $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $titleText ) ] ); - } - - // @phan-suppress-next-line PhanTypeMismatchArgumentNullable T240141 - $page = $this->wikiPageFactory->newFromTitle( $title ); - if ( !$page->exists() ) { - $this->dieWithError( 'apierror-missingtitle' ); - } - - // @phan-suppress-next-line PhanTypeMismatchArgumentNullable T240141 - $this->checkTitleUserPermissions( $title, 'read' ); - - // Use caching to avoid parses for old revisions and I/O for current revisions - $graph = $this->cache->getWithSetCallback( - $this->cache->makeKey( 'graph-data', $hash, $page->getTouched() ), - $this->cache::TTL_DAY, - static function ( $oldValue, &$ttl ) use ( $page, $revId, $hash ) { - $value = false; - $parserOptions = ParserOptions::newFromAnon(); - $parserOutput = $page->getParserOutput( $parserOptions, $revId ); - - if ( $parserOutput !== false ) { - $allGraphs = $parserOutput->getExtensionData( 'graph_specs_index' ); - if ( is_array( $allGraphs ) && array_key_exists( $hash, $allGraphs ) ) { - $value = $parserOutput->getExtensionData( 'graph_specs[' . $hash . ']' ); - } - } - - return $value; - } - ); - - if ( !$graph ) { - $this->dieWithError( 'apierror-graph-missing', 'invalidhash' ); - } - - return $graph; - } -} diff --git a/dist/extensions/Graph/includes/DataModule.php b/dist/extensions/Graph/includes/DataModule.php deleted file mode 100644 index 4a8ed2ee6..000000000 --- a/dist/extensions/Graph/includes/DataModule.php +++ /dev/null @@ -1,37 +0,0 @@ -getConfig(); - return ResourceLoader::makeConfigSetScript( [ - 'wgGraphAllowedDomains' => $config->get( 'GraphAllowedDomains' ), - ] ); - } - - /** - * @inheritDoc - */ - public function enableModuleContentVersion() { - return true; - } -} diff --git a/dist/extensions/Graph/includes/Hooks.php b/dist/extensions/Graph/includes/Hooks.php deleted file mode 100644 index 08524acd3..000000000 --- a/dist/extensions/Graph/includes/Hooks.php +++ /dev/null @@ -1,39 +0,0 @@ - tag - * - * @param Parser $parser - * @return bool - */ - public static function onParserFirstCallInit( Parser $parser ) { - $parser->setHook( 'graph', 'Graph\ParserTag::onGraphTag' ); - return true; - } - - /** - * OutputPageParserOutput hook handler - * @param OutputPage $outputPage - * @param ParserOutput $parserOutput ParserOutput instance being added in $outputPage - */ - public static function onOutputPageParserOutput( - OutputPage $outputPage, ParserOutput $parserOutput - ): void { - ParserTag::finalizeParserOutput( $outputPage, $parserOutput ); - } -} diff --git a/dist/extensions/Graph/includes/ParserTag.php b/dist/extensions/Graph/includes/ParserTag.php deleted file mode 100644 index b5f55f0fd..000000000 --- a/dist/extensions/Graph/includes/ParserTag.php +++ /dev/null @@ -1,267 +0,0 @@ -parserOptions = $parserOptions; - $this->parserOutput = $parserOutput; - $this->language = $parser->getTargetLanguage(); - } - - /** - * @param string|null $input - * @param array $args - * @param Parser $parser - * @param PPFrame $frame - * @return string - */ - public static function onGraphTag( $input, array $args, Parser $parser, PPFrame $frame ) { - $tag = new self( $parser, $parser->getOptions(), $parser->getOutput() ); - $html = $tag->buildHtml( (string)$input, $parser->getTitle(), $parser->getRevisionId(), $args ); - self::addTagMetadata( $parser->getOutput(), $parser->getPage(), $parser->getOptions()->getIsPreview() ); - return $html; - } - - /** - * @param ParserOutput $parserOutput - * @param ?PageReference $pageRef - * @param bool $isPreview - */ - public static function addTagMetadata( - ParserOutput $parserOutput, ?PageReference $pageRef, bool $isPreview - ): void { - $tc = MediaWikiServices::getInstance()->getTrackingCategories(); - if ( $parserOutput->getExtensionData( 'graph_specs_broken' ) ) { - $tc->addTrackingCategory( $parserOutput, 'graph-broken-category', $pageRef ); - } - if ( $parserOutput->getExtensionData( 'graph_specs_obsolete' ) ) { - $tc->addTrackingCategory( $parserOutput, 'graph-obsolete-category', $pageRef ); - } - $specs = $parserOutput->getExtensionData( 'graph_specs_index' ); - if ( $specs === null ) { - return; - } - $tc->addTrackingCategory( $parserOutput, 'graph-tracking-category', $pageRef ); - - if ( $isPreview ) { - // Preview generates HTML that is different from normal - $parserOutput->updateCacheExpiry( 0 ); - } - } - - /** - * @param OutputPage $outputPage - * @param ParserOutput $parserOutput - */ - public static function finalizeParserOutput( - OutputPage $outputPage, ParserOutput $parserOutput - ): void { - $specs = $parserOutput->getExtensionData( 'graph_specs_index' ); - if ( $specs === null ) { - return; - } - - $outputPage->addModuleStyles( [ 'ext.graph.styles' ] ); - // We can only load one version of vega lib - either 1 or 2 - // If the default version is 1, and if any of the graphs need Vega2, - // we treat all graphs as Vega2 and load corresponding libraries. - // All this should go away once we drop Vega1 support. - $liveSpecsIndex = $parserOutput->getExtensionData( 'graph_live_specs_index' ); - if ( !$liveSpecsIndex ) { - // Not in live mode - $outputPage->addModules( [ 'ext.graph.loader', 'ext.graph.vega2' ] ); - return; - } - // Module: ext.graph.vega1, ext.graph.vega2 - $outputPage->addModules( [ 'ext.graph.vega' . - ( $parserOutput->getExtensionData( 'graph_vega2' ) ? 2 : 1 ) ] ); - $liveSpecs = []; - foreach ( $liveSpecsIndex as $hash => $ignore ) { - $liveSpecs[$hash] = - $parserOutput->getExtensionData( 'graph_live_specs[' . $hash . ']' ); - } - $outputPage->addJsConfigVars( 'wgGraphSpecs', $liveSpecs ); - } - - /** - * @param string $mode lazyload|interactable(click to load)|always(live)|'' - * @param mixed $data - * @param string $hash - * @return array - */ - public static function buildDivAttributes( $mode = '', $data = false, $hash = '' ) { - $attribs = [ 'class' => 'mw-graph' ]; - - if ( is_object( $data ) ) { - $width = property_exists( $data, 'width' ) && is_int( $data->width ) ? $data->width : 0; - $height = - property_exists( $data, 'height' ) && is_int( $data->height ) ? $data->height : 0; - if ( $width && $height ) { - $attribs['style'] = "min-width:{$width}px;min-height:{$height}px"; - } - } - if ( $mode ) { - $attribs['class'] .= ' mw-graph-' . $mode; - } - if ( $hash ) { - $attribs['data-graph-id'] = $hash; - } - - return $attribs; - } - - /** - * @param Message $msg - * @return string - */ - private function formatError( Message $msg ) { - $this->parserOutput->setExtensionData( 'graph_specs_broken', true ); - $error = $msg->inLanguage( $this->language )->parse(); - return "{$error}"; - } - - /** - * @param Status $status - * @return string - */ - private function formatStatus( Status $status ) { - return $this->formatError( $status->getMessage( false, false, $this->language ) ); - } - - /** - * @param string $jsonText - * @param Title $title - * @param int $revid - * @param array|null $args - * title: no longer used? - * fallback: title of a fallback image for noscript - * fallbackWidth: width of the fallback image - * fallbackHeight: height of the fallback image - * @return string - */ - public function buildHtml( $jsonText, Title $title, $revid, $args = null ) { - $jsonText = trim( $jsonText ); - if ( $jsonText === '' ) { - return $this->formatError( wfMessage( 'graph-error-empty-json' ) ); - } - $status = FormatJson::parse( $jsonText, FormatJson::TRY_FIXING | FormatJson::STRIP_COMMENTS ); - if ( !$status->isOK() ) { - return $this->formatStatus( $status ); - } - - $data = $status->getValue(); - if ( !is_object( $data ) ) { - return $this->formatError( wfMessage( 'graph-error-not-vega' ) ); - } - - // Figure out which vega version to use - global $wgGraphDefaultVegaVer; - if ( property_exists( $data, 'version' ) && is_numeric( $data->version ) ) { - $data->version = $data->version < 2 ? 1 : 2; - } else { - $data->version = $wgGraphDefaultVegaVer; - } - if ( $data->version === 2 ) { - $this->parserOutput->setExtensionData( 'graph_vega2', true ); - } else { - $this->parserOutput->setExtensionData( 'graph_specs_obsolete', true ); - } - - // Make sure that multiple json blobs that only differ in spacing hash the same - $hash = sha1( FormatJson::encode( $data, false, FormatJson::ALL_OK ) ); - - // graph_specs is used in ApiGraph; graph_specs_index is also used to set up the - // graph tracking category and to gate finalizeParserOutput (we only check whether it's - // null or not in those two instances) - // TODO: consider merging graph_specs and graph_live_specs to a unique "array" instead of 2 - $this->parserOutput->appendExtensionData( 'graph_specs_index', $hash ); - $this->parserOutput->setExtensionData( 'graph_specs[' . $hash . ']', $data ); - - // Switching this to false (lazyload), will break cache - $alwaysMode = true; - /* @phan-suppress-next-line PhanRedundantCondition */ - if ( $this->parserOptions->getIsPreview() || $alwaysMode ) { - $this->parserOutput->appendExtensionData( 'graph_live_specs_index', $hash ); - $this->parserOutput->setExtensionData( 'graph_live_specs[' . $hash . ']', $data ); - $attribs = self::buildDivAttributes( 'always', $data, $hash ); - } else { - $attribs = self::buildDivAttributes( 'lazyload', $data, $hash ); - } - - $isFallback = isset( $args[ 'fallback' ] ) && $args[ 'fallback' ] !== ''; - if ( $isFallback ) { - global $wgThumbLimits, $wgDefaultUserOptions; - /* @phan-suppress-next-line PhanTypeArraySuspiciousNullable */ - $fallbackArgTitle = $args[ 'fallback' ]; - $services = MediaWikiServices::getInstance(); - $fallbackParser = $services->getParser(); - $title = Title::makeTitle( NS_FILE, $fallbackArgTitle ); - $file = $services->getRepoGroup()->findFile( $title ); - $imgFallbackParams = []; - - if ( isset( $args[ 'fallbackWidth' ] ) && $args[ 'fallbackWidth' ] > 0 ) { - $width = $args[ 'fallbackWidth' ]; - $imgFallbackParams[ 'width' ] = $width; - - } elseif ( property_exists( $data, 'width' ) ) { - $width = is_int( $data->width ) ? $data->width : 0; - - $imgFallbackParams[ 'width' ] = $width; - } else { - $imgFallbackParams[ 'width' ] = $wgThumbLimits[ $wgDefaultUserOptions[ 'thumbsize' ] ]; - } - - $imgFallback = Linker::makeImageLink( $fallbackParser, $title, $file, [ '' ], $imgFallbackParams ); - - $noSriptAttrs = [ - 'class' => 'mw-graph-noscript', - ]; - // $html will be injected with a tag - $html = Html::rawElement( 'noscript', $noSriptAttrs, $imgFallback ); - } else { - $attribs[ 'class' ] .= ' mw-graph-nofallback'; - $html = ''; - } - - return Html::rawElement( 'div', $attribs, $html ); - } -} diff --git a/dist/extensions/Graph/includes/Sandbox.php b/dist/extensions/Graph/includes/Sandbox.php deleted file mode 100644 index edbd1413f..000000000 --- a/dist/extensions/Graph/includes/Sandbox.php +++ /dev/null @@ -1,50 +0,0 @@ -getContext()->getOutput(); - - $this->setHeaders(); - $this->addHelpLink( 'Extension:Graph/Guide' ); - $out->addModules( 'ext.graph.sandbox' ); - // Tell CodeEditor that this page is JSON (T143165) - $out->addJsConfigVars( 'wgCodeEditorCurrentLanguage', 'json' ); - - $attr = ParserTag::buildDivAttributes( 'always' ); - $attr['id'] = 'mw-graph-image'; - $graphHtml = Html::rawElement( 'div', $attr, '' ); - - // FIXME: make this textarea readonly (but text should be selectable) - $specHtml = '
' . - '
'; - $jsonHtml = '
'; - - $out->addHTML( Html::rawElement( 'div', [ 'id' => 'mw-graph-sandbox' ], - Html::rawElement( 'div', [ 'id' => 'mw-graph-left' ], $graphHtml . $jsonHtml ) . - Html::rawElement( 'div', [ 'id' => 'mw-graph-right' ], $specHtml ) ) ); - } -} diff --git a/dist/extensions/Graph/includes/ajax-loader.gif b/dist/extensions/Graph/includes/ajax-loader.gif deleted file mode 100644 index c5191550a8ec3207a842eb15c292af898d4e3c0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2214 zcmY+_c{G&!9|!P9Gg<~mmYb;bBTHqtBy%nI%2hNpRMf91(Ta+UeI3R!w%PYF`zzv&W5T4f9TRKbVTvJPnNs zi^+1)m*z#mvWIXu)F9%!g+pDhhTP%ry=n5(1a;h} zXj_xU`EDqz~yV9+cu=q@ANUU`_$)6T=h zfTJn25Z6Gv%T1riy6yExKet#A&i(Rq!thwrs^g8gX5(jdQ(x$)EMNWScC<(1(MIDv z>|<_m@CZLy-AWGXUS9tjNry_HuSLwl7s}?zZ7Hc~G3oJ%Ss7<@^6>;BiADAc`gVQgKdkNmdyjUoNaH7RkvK)HOe>Du62B2pEFae9-z{(z-1}W2f)x zYv%nQQig5MiDS;oZtN)i9R8xA84>V@4Re2aOW9m6`b4vFRgC9$(>rGGZVZR=XxNVr zW>M9H5fw>Z*rq?x!Maq@C}cwCD|2x?Mxi0>o1DhDfnPyFX8N)0JkaU@fL1C|hsL5Y zG}t_#K%LJPs)<>JQW?1zw#>Jbr6XVr`tp{tG|t;Azj?^B!>ONQPF#x=7}|?3%W9`) z?$_+-pC(-YO#JAqZN1e%+sS=h&?j5|ithW7F#AwJH$21hH^-~WM&{55T+`|Iv+?f5 zk5R{m-lkQCM!mgvqCH8O5@vD+8)O-mbz;d!G=YFw(n#ubHk}FM@F85NfFqKyMPeBR zx{Rj@#%H}$EeIZ2a02n!vp5CB<`_e9L@xzwnxqP4eChkkymYkc1vtGmb-?u!cZl*!-i99zH@7s zkKE%lyvlI5f6^Nw&pCZ-it+v@>J%a&mOA>xtPBsRUXs z15afKu{oYX0l$!TS}HF2wanpiIcej+kgDK_myk4Y$Wx+L54}vg{)L+0<8vv`kj!)I z+)MLndtsL*)%$Aiy_oLW#}Y;$;Rd7@X=Llg?a=O$Lylbk;wt%n$s_)X6Wi_Iz`vz9 zqFx7iFgJuK(Oe%n*AX80{DWn3OnfRfJu?B9tdSaFmL8WAxs9w%AZ0Uiw=fF0hI~QP zW-(r9AS+6fa`u$&s;o+JU*^;VG`|;{4m!V*vHEg?ZAN=}U%)`JFoY^=6_-w2p)0ON zBKtSx3a8&KHi~{Y9aX!{quY4?s%>(+(woMLr(4*A>)ESr*)Y-0i;XW3iCQJAj{Dap zdshveJp)ThPQk>vWT@k^opbYWIY}D%yNDzVBT|#@#AK!N3%F!)*jk<}lP2{n@u)yn zT@g7ggQ^0XzPCDa2|9)KxInPKa7r-}G)`~{IVX*)@cDdY>Q5hZ*l2u(aQE%8n@Xjg z4lEZwrls#=z}fIhr+~7u^q_o8qedDuNCowIJl5`6M5I3=$u@LqKo1@D5N-4D>-`6F zv4IJ@lFbql9kPtF9rJJ*_EK{UrR!tLlbRBIkT7!hi;45so8wp3>VvU=DH{0GU) ztrYEwex;IdM)&;LK|W`~A3oC+y#yQm{Whf0|I+#v6%wFF3E5+~Z=YFL?(80x*F<&X zy@{GGkGMKo+I2Ge%0=gW^%vFV-yUA`E?w{No1|ycwjmCwap;}kq%oO!`Kbh}9C9q4 zW=dt6usMcY-bR6NomiqPm1!53Xpw&Tmr(P2qlw6}-UU$Tr?9(_xGW-xuuZFEBAx+Sfi)Jin@lJs6DDN{z?8{2Lt*rXHFtbM+*QEgw zjg=#P&11hh4q;eBvq}0X5w>aJ8!|B4ahEbI@J6}$X{Jjv41LDDPisa27tF-6;3&ktFY`vnEho|#m6 zInl7`jq93~!Oaqixi6g5SzP5o_Tjg`zFTq@rTB+fljx;Y*YvK=#ex<1I#&PI*TES- z4B87Dm5~&k`ZJIZz|y_&_#jF?jn1U7sR48Xk0s=Yx&HhDMq!CeB$pI|MyJ03N+bB% diff --git a/dist/extensions/Graph/lib/d3-global.js b/dist/extensions/Graph/lib/d3-global.js deleted file mode 100644 index cbf642a48..000000000 --- a/dist/extensions/Graph/lib/d3-global.js +++ /dev/null @@ -1,2 +0,0 @@ -// Back-compat: Export module as global -window.d3 = module.exports; diff --git a/dist/extensions/Graph/lib/d3.js b/dist/extensions/Graph/lib/d3.js deleted file mode 100644 index aded45c44..000000000 --- a/dist/extensions/Graph/lib/d3.js +++ /dev/null @@ -1,9554 +0,0 @@ -!function() { - var d3 = { - version: "3.5.17" - }; - var d3_arraySlice = [].slice, d3_array = function(list) { - return d3_arraySlice.call(list); - }; - var d3_document = this.document; - function d3_documentElement(node) { - return node && (node.ownerDocument || node.document || node).documentElement; - } - function d3_window(node) { - return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView); - } - if (d3_document) { - try { - d3_array(d3_document.documentElement.childNodes)[0].nodeType; - } catch (e) { - d3_array = function(list) { - var i = list.length, array = new Array(i); - while (i--) array[i] = list[i]; - return array; - }; - } - } - if (!Date.now) Date.now = function() { - return +new Date(); - }; - if (d3_document) { - try { - d3_document.createElement("DIV").style.setProperty("opacity", 0, ""); - } catch (error) { - var d3_element_prototype = this.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = this.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty; - d3_element_prototype.setAttribute = function(name, value) { - d3_element_setAttribute.call(this, name, value + ""); - }; - d3_element_prototype.setAttributeNS = function(space, local, value) { - d3_element_setAttributeNS.call(this, space, local, value + ""); - }; - d3_style_prototype.setProperty = function(name, value, priority) { - d3_style_setProperty.call(this, name, value + "", priority); - }; - } - } - d3.ascending = d3_ascending; - function d3_ascending(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; - } - d3.descending = function(a, b) { - return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; - }; - d3.min = function(array, f) { - var i = -1, n = array.length, a, b; - if (arguments.length === 1) { - while (++i < n) if ((b = array[i]) != null && b >= b) { - a = b; - break; - } - while (++i < n) if ((b = array[i]) != null && a > b) a = b; - } else { - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { - a = b; - break; - } - while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; - } - return a; - }; - d3.max = function(array, f) { - var i = -1, n = array.length, a, b; - if (arguments.length === 1) { - while (++i < n) if ((b = array[i]) != null && b >= b) { - a = b; - break; - } - while (++i < n) if ((b = array[i]) != null && b > a) a = b; - } else { - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { - a = b; - break; - } - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; - } - return a; - }; - d3.extent = function(array, f) { - var i = -1, n = array.length, a, b, c; - if (arguments.length === 1) { - while (++i < n) if ((b = array[i]) != null && b >= b) { - a = c = b; - break; - } - while (++i < n) if ((b = array[i]) != null) { - if (a > b) a = b; - if (c < b) c = b; - } - } else { - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { - a = c = b; - break; - } - while (++i < n) if ((b = f.call(array, array[i], i)) != null) { - if (a > b) a = b; - if (c < b) c = b; - } - } - return [ a, c ]; - }; - function d3_number(x) { - return x === null ? NaN : +x; - } - function d3_numeric(x) { - return !isNaN(x); - } - d3.sum = function(array, f) { - var s = 0, n = array.length, a, i = -1; - if (arguments.length === 1) { - while (++i < n) if (d3_numeric(a = +array[i])) s += a; - } else { - while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a; - } - return s; - }; - d3.mean = function(array, f) { - var s = 0, n = array.length, a, i = -1, j = n; - if (arguments.length === 1) { - while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j; - } else { - while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j; - } - if (j) return s / j; - }; - d3.quantile = function(values, p) { - var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h; - return e ? v + e * (values[h] - v) : v; - }; - d3.median = function(array, f) { - var numbers = [], n = array.length, a, i = -1; - if (arguments.length === 1) { - while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a); - } else { - while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a); - } - if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5); - }; - d3.variance = function(array, f) { - var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0; - if (arguments.length === 1) { - while (++i < n) { - if (d3_numeric(a = d3_number(array[i]))) { - d = a - m; - m += d / ++j; - s += d * (a - m); - } - } - } else { - while (++i < n) { - if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) { - d = a - m; - m += d / ++j; - s += d * (a - m); - } - } - } - if (j > 1) return s / (j - 1); - }; - d3.deviation = function() { - var v = d3.variance.apply(this, arguments); - return v ? Math.sqrt(v) : v; - }; - function d3_bisector(compare) { - return { - left: function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1; - } - return lo; - } - }; - } - var d3_bisect = d3_bisector(d3_ascending); - d3.bisectLeft = d3_bisect.left; - d3.bisect = d3.bisectRight = d3_bisect.right; - d3.bisector = function(f) { - return d3_bisector(f.length === 1 ? function(d, x) { - return d3_ascending(f(d), x); - } : f); - }; - d3.shuffle = function(array, i0, i1) { - if ((m = arguments.length) < 3) { - i1 = array.length; - if (m < 2) i0 = 0; - } - var m = i1 - i0, t, i; - while (m) { - i = Math.random() * m-- | 0; - t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t; - } - return array; - }; - d3.permute = function(array, indexes) { - var i = indexes.length, permutes = new Array(i); - while (i--) permutes[i] = array[indexes[i]]; - return permutes; - }; - d3.pairs = function(array) { - var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n); - while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ]; - return pairs; - }; - d3.transpose = function(matrix) { - if (!(n = matrix.length)) return []; - for (var i = -1, m = d3.min(matrix, d3_transposeLength), transpose = new Array(m); ++i < m; ) { - for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n; ) { - row[j] = matrix[j][i]; - } - } - return transpose; - }; - function d3_transposeLength(d) { - return d.length; - } - d3.zip = function() { - return d3.transpose(arguments); - }; - d3.keys = function(map) { - var keys = []; - for (var key in map) keys.push(key); - return keys; - }; - d3.values = function(map) { - var values = []; - for (var key in map) values.push(map[key]); - return values; - }; - d3.entries = function(map) { - var entries = []; - for (var key in map) entries.push({ - key: key, - value: map[key] - }); - return entries; - }; - d3.merge = function(arrays) { - var n = arrays.length, m, i = -1, j = 0, merged, array; - while (++i < n) j += arrays[i].length; - merged = new Array(j); - while (--n >= 0) { - array = arrays[n]; - m = array.length; - while (--m >= 0) { - merged[--j] = array[m]; - } - } - return merged; - }; - var abs = Math.abs; - d3.range = function(start, stop, step) { - if (arguments.length < 3) { - step = 1; - if (arguments.length < 2) { - stop = start; - start = 0; - } - } - if ((stop - start) / step === Infinity) throw new Error("infinite range"); - var range = [], k = d3_range_integerScale(abs(step)), i = -1, j; - start *= k, stop *= k, step *= k; - if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k); - return range; - }; - function d3_range_integerScale(x) { - var k = 1; - while (x * k % 1) k *= 10; - return k; - } - function d3_class(ctor, properties) { - for (var key in properties) { - Object.defineProperty(ctor.prototype, key, { - value: properties[key], - enumerable: false - }); - } - } - d3.map = function(object, f) { - var map = new d3_Map(); - if (object instanceof d3_Map) { - object.forEach(function(key, value) { - map.set(key, value); - }); - } else if (Array.isArray(object)) { - var i = -1, n = object.length, o; - if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o); - } else { - for (var key in object) map.set(key, object[key]); - } - return map; - }; - function d3_Map() { - this._ = Object.create(null); - } - var d3_map_proto = "__proto__", d3_map_zero = "\x00"; - d3_class(d3_Map, { - has: d3_map_has, - get: function(key) { - return this._[d3_map_escape(key)]; - }, - set: function(key, value) { - return this._[d3_map_escape(key)] = value; - }, - remove: d3_map_remove, - keys: d3_map_keys, - values: function() { - var values = []; - for (var key in this._) values.push(this._[key]); - return values; - }, - entries: function() { - var entries = []; - for (var key in this._) entries.push({ - key: d3_map_unescape(key), - value: this._[key] - }); - return entries; - }, - size: d3_map_size, - empty: d3_map_empty, - forEach: function(f) { - for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]); - } - }); - function d3_map_escape(key) { - return (key += "") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key; - } - function d3_map_unescape(key) { - return (key += "")[0] === d3_map_zero ? key.slice(1) : key; - } - function d3_map_has(key) { - return d3_map_escape(key) in this._; - } - function d3_map_remove(key) { - return (key = d3_map_escape(key)) in this._ && delete this._[key]; - } - function d3_map_keys() { - var keys = []; - for (var key in this._) keys.push(d3_map_unescape(key)); - return keys; - } - function d3_map_size() { - var size = 0; - for (var key in this._) ++size; - return size; - } - function d3_map_empty() { - for (var key in this._) return false; - return true; - } - d3.nest = function() { - var nest = {}, keys = [], sortKeys = [], sortValues, rollup; - function map(mapType, array, depth) { - if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array; - var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values; - while (++i < n) { - if (values = valuesByKey.get(keyValue = key(object = array[i]))) { - values.push(object); - } else { - valuesByKey.set(keyValue, [ object ]); - } - } - if (mapType) { - object = mapType(); - setter = function(keyValue, values) { - object.set(keyValue, map(mapType, values, depth)); - }; - } else { - object = {}; - setter = function(keyValue, values) { - object[keyValue] = map(mapType, values, depth); - }; - } - valuesByKey.forEach(setter); - return object; - } - function entries(map, depth) { - if (depth >= keys.length) return map; - var array = [], sortKey = sortKeys[depth++]; - map.forEach(function(key, keyMap) { - array.push({ - key: key, - values: entries(keyMap, depth) - }); - }); - return sortKey ? array.sort(function(a, b) { - return sortKey(a.key, b.key); - }) : array; - } - nest.map = function(array, mapType) { - return map(mapType, array, 0); - }; - nest.entries = function(array) { - return entries(map(d3.map, array, 0), 0); - }; - nest.key = function(d) { - keys.push(d); - return nest; - }; - nest.sortKeys = function(order) { - sortKeys[keys.length - 1] = order; - return nest; - }; - nest.sortValues = function(order) { - sortValues = order; - return nest; - }; - nest.rollup = function(f) { - rollup = f; - return nest; - }; - return nest; - }; - d3.set = function(array) { - var set = new d3_Set(); - if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]); - return set; - }; - function d3_Set() { - this._ = Object.create(null); - } - d3_class(d3_Set, { - has: d3_map_has, - add: function(key) { - this._[d3_map_escape(key += "")] = true; - return key; - }, - remove: d3_map_remove, - values: d3_map_keys, - size: d3_map_size, - empty: d3_map_empty, - forEach: function(f) { - for (var key in this._) f.call(this, d3_map_unescape(key)); - } - }); - d3.behavior = {}; - function d3_identity(d) { - return d; - } - d3.rebind = function(target, source) { - var i = 1, n = arguments.length, method; - while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]); - return target; - }; - function d3_rebind(target, source, method) { - return function() { - var value = method.apply(source, arguments); - return value === source ? target : value; - }; - } - function d3_vendorSymbol(object, name) { - if (name in object) return name; - name = name.charAt(0).toUpperCase() + name.slice(1); - for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) { - var prefixName = d3_vendorPrefixes[i] + name; - if (prefixName in object) return prefixName; - } - } - var d3_vendorPrefixes = [ "webkit", "ms", "moz", "Moz", "o", "O" ]; - function d3_noop() {} - d3.dispatch = function() { - var dispatch = new d3_dispatch(), i = -1, n = arguments.length; - while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); - return dispatch; - }; - function d3_dispatch() {} - d3_dispatch.prototype.on = function(type, listener) { - var i = type.indexOf("."), name = ""; - if (i >= 0) { - name = type.slice(i + 1); - type = type.slice(0, i); - } - if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener); - if (arguments.length === 2) { - if (listener == null) for (type in this) { - if (this.hasOwnProperty(type)) this[type].on(name, null); - } - return this; - } - }; - function d3_dispatch_event(dispatch) { - var listeners = [], listenerByName = new d3_Map(); - function event() { - var z = listeners, i = -1, n = z.length, l; - while (++i < n) if (l = z[i].on) l.apply(this, arguments); - return dispatch; - } - event.on = function(name, listener) { - var l = listenerByName.get(name), i; - if (arguments.length < 2) return l && l.on; - if (l) { - l.on = null; - listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1)); - listenerByName.remove(name); - } - if (listener) listeners.push(listenerByName.set(name, { - on: listener - })); - return dispatch; - }; - return event; - } - d3.event = null; - function d3_eventPreventDefault() { - d3.event.preventDefault(); - } - function d3_eventSource() { - var e = d3.event, s; - while (s = e.sourceEvent) e = s; - return e; - } - function d3_eventDispatch(target) { - var dispatch = new d3_dispatch(), i = 0, n = arguments.length; - while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); - dispatch.of = function(thiz, argumentz) { - return function(e1) { - try { - var e0 = e1.sourceEvent = d3.event; - e1.target = target; - d3.event = e1; - dispatch[e1.type].apply(thiz, argumentz); - } finally { - d3.event = e0; - } - }; - }; - return dispatch; - } - d3.requote = function(s) { - return s.replace(d3_requote_re, "\\$&"); - }; - var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; - var d3_subclass = {}.__proto__ ? function(object, prototype) { - object.__proto__ = prototype; - } : function(object, prototype) { - for (var property in prototype) object[property] = prototype[property]; - }; - function d3_selection(groups) { - d3_subclass(groups, d3_selectionPrototype); - return groups; - } - var d3_select = function(s, n) { - return n.querySelector(s); - }, d3_selectAll = function(s, n) { - return n.querySelectorAll(s); - }, d3_selectMatches = function(n, s) { - var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, "matchesSelector")]; - d3_selectMatches = function(n, s) { - return d3_selectMatcher.call(n, s); - }; - return d3_selectMatches(n, s); - }; - if (typeof Sizzle === "function") { - d3_select = function(s, n) { - return Sizzle(s, n)[0] || null; - }; - d3_selectAll = Sizzle; - d3_selectMatches = Sizzle.matchesSelector; - } - d3.selection = function() { - return d3.select(d3_document.documentElement); - }; - var d3_selectionPrototype = d3.selection.prototype = []; - d3_selectionPrototype.select = function(selector) { - var subgroups = [], subgroup, subnode, group, node; - selector = d3_selection_selector(selector); - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroup.push(subnode = selector.call(node, node.__data__, i, j)); - if (subnode && "__data__" in node) subnode.__data__ = node.__data__; - } else { - subgroup.push(null); - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_selector(selector) { - return typeof selector === "function" ? selector : function() { - return d3_select(selector, this); - }; - } - d3_selectionPrototype.selectAll = function(selector) { - var subgroups = [], subgroup, node; - selector = d3_selection_selectorAll(selector); - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j))); - subgroup.parentNode = node; - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_selectorAll(selector) { - return typeof selector === "function" ? selector : function() { - return d3_selectAll(selector, this); - }; - } - var d3_nsXhtml = "http://www.w3.org/1999/xhtml"; - var d3_nsPrefix = { - svg: "http://www.w3.org/2000/svg", - xhtml: d3_nsXhtml, - xlink: "http://www.w3.org/1999/xlink", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/" - }; - d3.ns = { - prefix: d3_nsPrefix, - qualify: function(name) { - var i = name.indexOf(":"), prefix = name; - if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); - return d3_nsPrefix.hasOwnProperty(prefix) ? { - space: d3_nsPrefix[prefix], - local: name - } : name; - } - }; - d3_selectionPrototype.attr = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") { - var node = this.node(); - name = d3.ns.qualify(name); - return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name); - } - for (value in name) this.each(d3_selection_attr(value, name[value])); - return this; - } - return this.each(d3_selection_attr(name, value)); - }; - function d3_selection_attr(name, value) { - name = d3.ns.qualify(name); - function attrNull() { - this.removeAttribute(name); - } - function attrNullNS() { - this.removeAttributeNS(name.space, name.local); - } - function attrConstant() { - this.setAttribute(name, value); - } - function attrConstantNS() { - this.setAttributeNS(name.space, name.local, value); - } - function attrFunction() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttribute(name); else this.setAttribute(name, x); - } - function attrFunctionNS() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x); - } - return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant; - } - function d3_collapse(s) { - return s.trim().replace(/\s+/g, " "); - } - d3_selectionPrototype.classed = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") { - var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1; - if (value = node.classList) { - while (++i < n) if (!value.contains(name[i])) return false; - } else { - value = node.getAttribute("class"); - while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false; - } - return true; - } - for (value in name) this.each(d3_selection_classed(value, name[value])); - return this; - } - return this.each(d3_selection_classed(name, value)); - }; - function d3_selection_classedRe(name) { - return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g"); - } - function d3_selection_classes(name) { - return (name + "").trim().split(/^|\s+/); - } - function d3_selection_classed(name, value) { - name = d3_selection_classes(name).map(d3_selection_classedName); - var n = name.length; - function classedConstant() { - var i = -1; - while (++i < n) name[i](this, value); - } - function classedFunction() { - var i = -1, x = value.apply(this, arguments); - while (++i < n) name[i](this, x); - } - return typeof value === "function" ? classedFunction : classedConstant; - } - function d3_selection_classedName(name) { - var re = d3_selection_classedRe(name); - return function(node, value) { - if (c = node.classList) return value ? c.add(name) : c.remove(name); - var c = node.getAttribute("class") || ""; - if (value) { - re.lastIndex = 0; - if (!re.test(c)) node.setAttribute("class", d3_collapse(c + " " + name)); - } else { - node.setAttribute("class", d3_collapse(c.replace(re, " "))); - } - }; - } - d3_selectionPrototype.style = function(name, value, priority) { - var n = arguments.length; - if (n < 3) { - if (typeof name !== "string") { - if (n < 2) value = ""; - for (priority in name) this.each(d3_selection_style(priority, name[priority], value)); - return this; - } - if (n < 2) { - var node = this.node(); - return d3_window(node).getComputedStyle(node, null).getPropertyValue(name); - } - priority = ""; - } - return this.each(d3_selection_style(name, value, priority)); - }; - function d3_selection_style(name, value, priority) { - function styleNull() { - this.style.removeProperty(name); - } - function styleConstant() { - this.style.setProperty(name, value, priority); - } - function styleFunction() { - var x = value.apply(this, arguments); - if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority); - } - return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant; - } - d3_selectionPrototype.property = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") return this.node()[name]; - for (value in name) this.each(d3_selection_property(value, name[value])); - return this; - } - return this.each(d3_selection_property(name, value)); - }; - function d3_selection_property(name, value) { - function propertyNull() { - delete this[name]; - } - function propertyConstant() { - this[name] = value; - } - function propertyFunction() { - var x = value.apply(this, arguments); - if (x == null) delete this[name]; else this[name] = x; - } - return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant; - } - d3_selectionPrototype.text = function(value) { - return arguments.length ? this.each(typeof value === "function" ? function() { - var v = value.apply(this, arguments); - this.textContent = v == null ? "" : v; - } : value == null ? function() { - this.textContent = ""; - } : function() { - this.textContent = value; - }) : this.node().textContent; - }; - d3_selectionPrototype.html = function(value) { - return arguments.length ? this.each(typeof value === "function" ? function() { - var v = value.apply(this, arguments); - this.innerHTML = v == null ? "" : v; - } : value == null ? function() { - this.innerHTML = ""; - } : function() { - this.innerHTML = value; - }) : this.node().innerHTML; - }; - d3_selectionPrototype.append = function(name) { - name = d3_selection_creator(name); - return this.select(function() { - return this.appendChild(name.apply(this, arguments)); - }); - }; - function d3_selection_creator(name) { - function create() { - var document = this.ownerDocument, namespace = this.namespaceURI; - return namespace === d3_nsXhtml && document.documentElement.namespaceURI === d3_nsXhtml ? document.createElement(name) : document.createElementNS(namespace, name); - } - function createNS() { - return this.ownerDocument.createElementNS(name.space, name.local); - } - return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? createNS : create; - } - d3_selectionPrototype.insert = function(name, before) { - name = d3_selection_creator(name); - before = d3_selection_selector(before); - return this.select(function() { - return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null); - }); - }; - d3_selectionPrototype.remove = function() { - return this.each(d3_selectionRemove); - }; - function d3_selectionRemove() { - var parent = this.parentNode; - if (parent) parent.removeChild(this); - } - d3_selectionPrototype.data = function(value, key) { - var i = -1, n = this.length, group, node; - if (!arguments.length) { - value = new Array(n = (group = this[0]).length); - while (++i < n) { - if (node = group[i]) { - value[i] = node.__data__; - } - } - return value; - } - function bind(group, groupData) { - var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData; - if (key) { - var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue; - for (i = -1; ++i < n; ) { - if (node = group[i]) { - if (nodeByKeyValue.has(keyValue = key.call(node, node.__data__, i))) { - exitNodes[i] = node; - } else { - nodeByKeyValue.set(keyValue, node); - } - keyValues[i] = keyValue; - } - } - for (i = -1; ++i < m; ) { - if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) { - enterNodes[i] = d3_selection_dataNode(nodeData); - } else if (node !== true) { - updateNodes[i] = node; - node.__data__ = nodeData; - } - nodeByKeyValue.set(keyValue, true); - } - for (i = -1; ++i < n; ) { - if (i in keyValues && nodeByKeyValue.get(keyValues[i]) !== true) { - exitNodes[i] = group[i]; - } - } - } else { - for (i = -1; ++i < n0; ) { - node = group[i]; - nodeData = groupData[i]; - if (node) { - node.__data__ = nodeData; - updateNodes[i] = node; - } else { - enterNodes[i] = d3_selection_dataNode(nodeData); - } - } - for (;i < m; ++i) { - enterNodes[i] = d3_selection_dataNode(groupData[i]); - } - for (;i < n; ++i) { - exitNodes[i] = group[i]; - } - } - enterNodes.update = updateNodes; - enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode; - enter.push(enterNodes); - update.push(updateNodes); - exit.push(exitNodes); - } - var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]); - if (typeof value === "function") { - while (++i < n) { - bind(group = this[i], value.call(group, group.parentNode.__data__, i)); - } - } else { - while (++i < n) { - bind(group = this[i], value); - } - } - update.enter = function() { - return enter; - }; - update.exit = function() { - return exit; - }; - return update; - }; - function d3_selection_dataNode(data) { - return { - __data__: data - }; - } - d3_selectionPrototype.datum = function(value) { - return arguments.length ? this.property("__data__", value) : this.property("__data__"); - }; - d3_selectionPrototype.filter = function(filter) { - var subgroups = [], subgroup, group, node; - if (typeof filter !== "function") filter = d3_selection_filter(filter); - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = 0, n = group.length; i < n; i++) { - if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { - subgroup.push(node); - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_filter(selector) { - return function() { - return d3_selectMatches(this, selector); - }; - } - d3_selectionPrototype.order = function() { - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) { - if (node = group[i]) { - if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); - next = node; - } - } - } - return this; - }; - d3_selectionPrototype.sort = function(comparator) { - comparator = d3_selection_sortComparator.apply(this, arguments); - for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator); - return this.order(); - }; - function d3_selection_sortComparator(comparator) { - if (!arguments.length) comparator = d3_ascending; - return function(a, b) { - return a && b ? comparator(a.__data__, b.__data__) : !a - !b; - }; - } - d3_selectionPrototype.each = function(callback) { - return d3_selection_each(this, function(node, i, j) { - callback.call(node, node.__data__, i, j); - }); - }; - function d3_selection_each(groups, callback) { - for (var j = 0, m = groups.length; j < m; j++) { - for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) { - if (node = group[i]) callback(node, i, j); - } - } - return groups; - } - d3_selectionPrototype.call = function(callback) { - var args = d3_array(arguments); - callback.apply(args[0] = this, args); - return this; - }; - d3_selectionPrototype.empty = function() { - return !this.node(); - }; - d3_selectionPrototype.node = function() { - for (var j = 0, m = this.length; j < m; j++) { - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - var node = group[i]; - if (node) return node; - } - } - return null; - }; - d3_selectionPrototype.size = function() { - var n = 0; - d3_selection_each(this, function() { - ++n; - }); - return n; - }; - function d3_selection_enter(selection) { - d3_subclass(selection, d3_selection_enterPrototype); - return selection; - } - var d3_selection_enterPrototype = []; - d3.selection.enter = d3_selection_enter; - d3.selection.enter.prototype = d3_selection_enterPrototype; - d3_selection_enterPrototype.append = d3_selectionPrototype.append; - d3_selection_enterPrototype.empty = d3_selectionPrototype.empty; - d3_selection_enterPrototype.node = d3_selectionPrototype.node; - d3_selection_enterPrototype.call = d3_selectionPrototype.call; - d3_selection_enterPrototype.size = d3_selectionPrototype.size; - d3_selection_enterPrototype.select = function(selector) { - var subgroups = [], subgroup, subnode, upgroup, group, node; - for (var j = -1, m = this.length; ++j < m; ) { - upgroup = (group = this[j]).update; - subgroups.push(subgroup = []); - subgroup.parentNode = group.parentNode; - for (var i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j)); - subnode.__data__ = node.__data__; - } else { - subgroup.push(null); - } - } - } - return d3_selection(subgroups); - }; - d3_selection_enterPrototype.insert = function(name, before) { - if (arguments.length < 2) before = d3_selection_enterInsertBefore(this); - return d3_selectionPrototype.insert.call(this, name, before); - }; - function d3_selection_enterInsertBefore(enter) { - var i0, j0; - return function(d, i, j) { - var group = enter[j].update, n = group.length, node; - if (j != j0) j0 = j, i0 = 0; - if (i >= i0) i0 = i + 1; - while (!(node = group[i0]) && ++i0 < n) ; - return node; - }; - } - d3.select = function(node) { - var group; - if (typeof node === "string") { - group = [ d3_select(node, d3_document) ]; - group.parentNode = d3_document.documentElement; - } else { - group = [ node ]; - group.parentNode = d3_documentElement(node); - } - return d3_selection([ group ]); - }; - d3.selectAll = function(nodes) { - var group; - if (typeof nodes === "string") { - group = d3_array(d3_selectAll(nodes, d3_document)); - group.parentNode = d3_document.documentElement; - } else { - group = d3_array(nodes); - group.parentNode = null; - } - return d3_selection([ group ]); - }; - d3_selectionPrototype.on = function(type, listener, capture) { - var n = arguments.length; - if (n < 3) { - if (typeof type !== "string") { - if (n < 2) listener = false; - for (capture in type) this.each(d3_selection_on(capture, type[capture], listener)); - return this; - } - if (n < 2) return (n = this.node()["__on" + type]) && n._; - capture = false; - } - return this.each(d3_selection_on(type, listener, capture)); - }; - function d3_selection_on(type, listener, capture) { - var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener; - if (i > 0) type = type.slice(0, i); - var filter = d3_selection_onFilters.get(type); - if (filter) type = filter, wrap = d3_selection_onFilter; - function onRemove() { - var l = this[name]; - if (l) { - this.removeEventListener(type, l, l.$); - delete this[name]; - } - } - function onAdd() { - var l = wrap(listener, d3_array(arguments)); - onRemove.call(this); - this.addEventListener(type, this[name] = l, l.$ = capture); - l._ = listener; - } - function removeAll() { - var re = new RegExp("^__on([^.]+)" + d3.requote(type) + "$"), match; - for (var name in this) { - if (match = name.match(re)) { - var l = this[name]; - this.removeEventListener(match[1], l, l.$); - delete this[name]; - } - } - } - return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll; - } - var d3_selection_onFilters = d3.map({ - mouseenter: "mouseover", - mouseleave: "mouseout" - }); - if (d3_document) { - d3_selection_onFilters.forEach(function(k) { - if ("on" + k in d3_document) d3_selection_onFilters.remove(k); - }); - } - function d3_selection_onListener(listener, argumentz) { - return function(e) { - var o = d3.event; - d3.event = e; - argumentz[0] = this.__data__; - try { - listener.apply(this, argumentz); - } finally { - d3.event = o; - } - }; - } - function d3_selection_onFilter(listener, argumentz) { - var l = d3_selection_onListener(listener, argumentz); - return function(e) { - var target = this, related = e.relatedTarget; - if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) { - l.call(target, e); - } - }; - } - var d3_event_dragSelect, d3_event_dragId = 0; - function d3_event_dragSuppress(node) { - var name = ".dragsuppress-" + ++d3_event_dragId, click = "click" + name, w = d3.select(d3_window(node)).on("touchmove" + name, d3_eventPreventDefault).on("dragstart" + name, d3_eventPreventDefault).on("selectstart" + name, d3_eventPreventDefault); - if (d3_event_dragSelect == null) { - d3_event_dragSelect = "onselectstart" in node ? false : d3_vendorSymbol(node.style, "userSelect"); - } - if (d3_event_dragSelect) { - var style = d3_documentElement(node).style, select = style[d3_event_dragSelect]; - style[d3_event_dragSelect] = "none"; - } - return function(suppressClick) { - w.on(name, null); - if (d3_event_dragSelect) style[d3_event_dragSelect] = select; - if (suppressClick) { - var off = function() { - w.on(click, null); - }; - w.on(click, function() { - d3_eventPreventDefault(); - off(); - }, true); - setTimeout(off, 0); - } - }; - } - d3.mouse = function(container) { - return d3_mousePoint(container, d3_eventSource()); - }; - var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0; - function d3_mousePoint(container, e) { - if (e.changedTouches) e = e.changedTouches[0]; - var svg = container.ownerSVGElement || container; - if (svg.createSVGPoint) { - var point = svg.createSVGPoint(); - if (d3_mouse_bug44083 < 0) { - var window = d3_window(container); - if (window.scrollX || window.scrollY) { - svg = d3.select("body").append("svg").style({ - position: "absolute", - top: 0, - left: 0, - margin: 0, - padding: 0, - border: "none" - }, "important"); - var ctm = svg[0][0].getScreenCTM(); - d3_mouse_bug44083 = !(ctm.f || ctm.e); - svg.remove(); - } - } - if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, - point.y = e.clientY; - point = point.matrixTransform(container.getScreenCTM().inverse()); - return [ point.x, point.y ]; - } - var rect = container.getBoundingClientRect(); - return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ]; - } - d3.touch = function(container, touches, identifier) { - if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches; - if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) { - if ((touch = touches[i]).identifier === identifier) { - return d3_mousePoint(container, touch); - } - } - }; - d3.behavior.drag = function() { - var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, "mousemove", "mouseup"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, "touchmove", "touchend"); - function drag() { - this.on("mousedown.drag", mousedown).on("touchstart.drag", touchstart); - } - function dragstart(id, position, subject, move, end) { - return function() { - var that = this, target = d3.event.target.correspondingElement || d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = ".drag" + (dragId == null ? "" : "-" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId); - if (origin) { - dragOffset = origin.apply(that, arguments); - dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ]; - } else { - dragOffset = [ 0, 0 ]; - } - dispatch({ - type: "dragstart" - }); - function moved() { - var position1 = position(parent, dragId), dx, dy; - if (!position1) return; - dx = position1[0] - position0[0]; - dy = position1[1] - position0[1]; - dragged |= dx | dy; - position0 = position1; - dispatch({ - type: "drag", - x: position1[0] + dragOffset[0], - y: position1[1] + dragOffset[1], - dx: dx, - dy: dy - }); - } - function ended() { - if (!position(parent, dragId)) return; - dragSubject.on(move + dragName, null).on(end + dragName, null); - dragRestore(dragged); - dispatch({ - type: "dragend" - }); - } - }; - } - drag.origin = function(x) { - if (!arguments.length) return origin; - origin = x; - return drag; - }; - return d3.rebind(drag, event, "on"); - }; - function d3_behavior_dragTouchId() { - return d3.event.changedTouches[0].identifier; - } - d3.touches = function(container, touches) { - if (arguments.length < 2) touches = d3_eventSource().touches; - return touches ? d3_array(touches).map(function(touch) { - var point = d3_mousePoint(container, touch); - point.identifier = touch.identifier; - return point; - }) : []; - }; - var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π; - function d3_sgn(x) { - return x > 0 ? 1 : x < 0 ? -1 : 0; - } - function d3_cross2d(a, b, c) { - return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); - } - function d3_acos(x) { - return x > 1 ? 0 : x < -1 ? π : Math.acos(x); - } - function d3_asin(x) { - return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x); - } - function d3_sinh(x) { - return ((x = Math.exp(x)) - 1 / x) / 2; - } - function d3_cosh(x) { - return ((x = Math.exp(x)) + 1 / x) / 2; - } - function d3_tanh(x) { - return ((x = Math.exp(2 * x)) - 1) / (x + 1); - } - function d3_haversin(x) { - return (x = Math.sin(x / 2)) * x; - } - var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4; - d3.interpolateZoom = function(p0, p1) { - var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i, S; - if (d2 < ε2) { - S = Math.log(w1 / w0) / ρ; - i = function(t) { - return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * t * S) ]; - }; - } else { - var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); - S = (r1 - r0) / ρ; - i = function(t) { - var s = t * S, coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0)); - return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ]; - }; - } - i.duration = S * 1e3; - return i; - }; - d3.behavior.zoom = function() { - var view = { - x: 0, - y: 0, - k: 1 - }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1; - if (!d3_behavior_zoomWheel) { - d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() { - return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1); - }, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() { - return d3.event.wheelDelta; - }, "mousewheel") : (d3_behavior_zoomDelta = function() { - return -d3.event.detail; - }, "MozMousePixelScroll"); - } - function zoom(g) { - g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted); - } - zoom.event = function(g) { - g.each(function() { - var dispatch = event.of(this, arguments), view1 = view; - if (d3_transitionInheritId) { - d3.select(this).transition().each("start.zoom", function() { - view = this.__chart__ || { - x: 0, - y: 0, - k: 1 - }; - zoomstarted(dispatch); - }).tween("zoom:zoom", function() { - var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]); - return function(t) { - var l = i(t), k = dx / l[2]; - this.__chart__ = view = { - x: cx - l[0] * k, - y: cy - l[1] * k, - k: k - }; - zoomed(dispatch); - }; - }).each("interrupt.zoom", function() { - zoomended(dispatch); - }).each("end.zoom", function() { - zoomended(dispatch); - }); - } else { - this.__chart__ = view; - zoomstarted(dispatch); - zoomed(dispatch); - zoomended(dispatch); - } - }); - }; - zoom.translate = function(_) { - if (!arguments.length) return [ view.x, view.y ]; - view = { - x: +_[0], - y: +_[1], - k: view.k - }; - rescale(); - return zoom; - }; - zoom.scale = function(_) { - if (!arguments.length) return view.k; - view = { - x: view.x, - y: view.y, - k: null - }; - scaleTo(+_); - rescale(); - return zoom; - }; - zoom.scaleExtent = function(_) { - if (!arguments.length) return scaleExtent; - scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ]; - return zoom; - }; - zoom.center = function(_) { - if (!arguments.length) return center; - center = _ && [ +_[0], +_[1] ]; - return zoom; - }; - zoom.size = function(_) { - if (!arguments.length) return size; - size = _ && [ +_[0], +_[1] ]; - return zoom; - }; - zoom.duration = function(_) { - if (!arguments.length) return duration; - duration = +_; - return zoom; - }; - zoom.x = function(z) { - if (!arguments.length) return x1; - x1 = z; - x0 = z.copy(); - view = { - x: 0, - y: 0, - k: 1 - }; - return zoom; - }; - zoom.y = function(z) { - if (!arguments.length) return y1; - y1 = z; - y0 = z.copy(); - view = { - x: 0, - y: 0, - k: 1 - }; - return zoom; - }; - function location(p) { - return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ]; - } - function point(l) { - return [ l[0] * view.k + view.x, l[1] * view.k + view.y ]; - } - function scaleTo(s) { - view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s)); - } - function translateTo(p, l) { - l = point(l); - view.x += p[0] - l[0]; - view.y += p[1] - l[1]; - } - function zoomTo(that, p, l, k) { - that.__chart__ = { - x: view.x, - y: view.y, - k: view.k - }; - scaleTo(Math.pow(2, k)); - translateTo(center0 = p, l); - that = d3.select(that); - if (duration > 0) that = that.transition().duration(duration); - that.call(zoom.event); - } - function rescale() { - if (x1) x1.domain(x0.range().map(function(x) { - return (x - view.x) / view.k; - }).map(x0.invert)); - if (y1) y1.domain(y0.range().map(function(y) { - return (y - view.y) / view.k; - }).map(y0.invert)); - } - function zoomstarted(dispatch) { - if (!zooming++) dispatch({ - type: "zoomstart" - }); - } - function zoomed(dispatch) { - rescale(); - dispatch({ - type: "zoom", - scale: view.k, - translate: [ view.x, view.y ] - }); - } - function zoomended(dispatch) { - if (!--zooming) dispatch({ - type: "zoomend" - }), center0 = null; - } - function mousedowned() { - var that = this, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that); - d3_selection_interrupt.call(that); - zoomstarted(dispatch); - function moved() { - dragged = 1; - translateTo(d3.mouse(that), location0); - zoomed(dispatch); - } - function ended() { - subject.on(mousemove, null).on(mouseup, null); - dragRestore(dragged); - zoomended(dispatch); - } - } - function touchstarted() { - var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that); - started(); - zoomstarted(dispatch); - subject.on(mousedown, null).on(touchstart, started); - function relocate() { - var touches = d3.touches(that); - scale0 = view.k; - touches.forEach(function(t) { - if (t.identifier in locations0) locations0[t.identifier] = location(t); - }); - return touches; - } - function started() { - var target = d3.event.target; - d3.select(target).on(touchmove, moved).on(touchend, ended); - targets.push(target); - var changed = d3.event.changedTouches; - for (var i = 0, n = changed.length; i < n; ++i) { - locations0[changed[i].identifier] = null; - } - var touches = relocate(), now = Date.now(); - if (touches.length === 1) { - if (now - touchtime < 500) { - var p = touches[0]; - zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1); - d3_eventPreventDefault(); - } - touchtime = now; - } else if (touches.length > 1) { - var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1]; - distance0 = dx * dx + dy * dy; - } - } - function moved() { - var touches = d3.touches(that), p0, l0, p1, l1; - d3_selection_interrupt.call(that); - for (var i = 0, n = touches.length; i < n; ++i, l1 = null) { - p1 = touches[i]; - if (l1 = locations0[p1.identifier]) { - if (l0) break; - p0 = p1, l0 = l1; - } - } - if (l1) { - var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0); - p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ]; - l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ]; - scaleTo(scale1 * scale0); - } - touchtime = null; - translateTo(p0, l0); - zoomed(dispatch); - } - function ended() { - if (d3.event.touches.length) { - var changed = d3.event.changedTouches; - for (var i = 0, n = changed.length; i < n; ++i) { - delete locations0[changed[i].identifier]; - } - for (var identifier in locations0) { - return void relocate(); - } - } - d3.selectAll(targets).on(zoomName, null); - subject.on(mousedown, mousedowned).on(touchstart, touchstarted); - dragRestore(); - zoomended(dispatch); - } - } - function mousewheeled() { - var dispatch = event.of(this, arguments); - if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), - translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch); - mousewheelTimer = setTimeout(function() { - mousewheelTimer = null; - zoomended(dispatch); - }, 50); - d3_eventPreventDefault(); - scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k); - translateTo(center0, translate0); - zoomed(dispatch); - } - function dblclicked() { - var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2; - zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1); - } - return d3.rebind(zoom, event, "on"); - }; - var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel; - d3.color = d3_color; - function d3_color() {} - d3_color.prototype.toString = function() { - return this.rgb() + ""; - }; - d3.hsl = d3_hsl; - function d3_hsl(h, s, l) { - return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l); - } - var d3_hslPrototype = d3_hsl.prototype = new d3_color(); - d3_hslPrototype.brighter = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_hsl(this.h, this.s, this.l / k); - }; - d3_hslPrototype.darker = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_hsl(this.h, this.s, k * this.l); - }; - d3_hslPrototype.rgb = function() { - return d3_hsl_rgb(this.h, this.s, this.l); - }; - function d3_hsl_rgb(h, s, l) { - var m1, m2; - h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h; - s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s; - l = l < 0 ? 0 : l > 1 ? 1 : l; - m2 = l <= .5 ? l * (1 + s) : l + s - l * s; - m1 = 2 * l - m2; - function v(h) { - if (h > 360) h -= 360; else if (h < 0) h += 360; - if (h < 60) return m1 + (m2 - m1) * h / 60; - if (h < 180) return m2; - if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; - return m1; - } - function vv(h) { - return Math.round(v(h) * 255); - } - return new d3_rgb(vv(h + 120), vv(h), vv(h - 120)); - } - d3.hcl = d3_hcl; - function d3_hcl(h, c, l) { - return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l); - } - var d3_hclPrototype = d3_hcl.prototype = new d3_color(); - d3_hclPrototype.brighter = function(k) { - return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1))); - }; - d3_hclPrototype.darker = function(k) { - return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1))); - }; - d3_hclPrototype.rgb = function() { - return d3_hcl_lab(this.h, this.c, this.l).rgb(); - }; - function d3_hcl_lab(h, c, l) { - if (isNaN(h)) h = 0; - if (isNaN(c)) c = 0; - return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c); - } - d3.lab = d3_lab; - function d3_lab(l, a, b) { - return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b); - } - var d3_lab_K = 18; - var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883; - var d3_labPrototype = d3_lab.prototype = new d3_color(); - d3_labPrototype.brighter = function(k) { - return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); - }; - d3_labPrototype.darker = function(k) { - return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); - }; - d3_labPrototype.rgb = function() { - return d3_lab_rgb(this.l, this.a, this.b); - }; - function d3_lab_rgb(l, a, b) { - var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200; - x = d3_lab_xyz(x) * d3_lab_X; - y = d3_lab_xyz(y) * d3_lab_Y; - z = d3_lab_xyz(z) * d3_lab_Z; - return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z)); - } - function d3_lab_hcl(l, a, b) { - return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l); - } - function d3_lab_xyz(x) { - return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037; - } - function d3_xyz_lab(x) { - return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29; - } - function d3_xyz_rgb(r) { - return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055)); - } - d3.rgb = d3_rgb; - function d3_rgb(r, g, b) { - return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b); - } - function d3_rgbNumber(value) { - return new d3_rgb(value >> 16, value >> 8 & 255, value & 255); - } - function d3_rgbString(value) { - return d3_rgbNumber(value) + ""; - } - var d3_rgbPrototype = d3_rgb.prototype = new d3_color(); - d3_rgbPrototype.brighter = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - var r = this.r, g = this.g, b = this.b, i = 30; - if (!r && !g && !b) return new d3_rgb(i, i, i); - if (r && r < i) r = i; - if (g && g < i) g = i; - if (b && b < i) b = i; - return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k)); - }; - d3_rgbPrototype.darker = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_rgb(k * this.r, k * this.g, k * this.b); - }; - d3_rgbPrototype.hsl = function() { - return d3_rgb_hsl(this.r, this.g, this.b); - }; - d3_rgbPrototype.toString = function() { - return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b); - }; - function d3_rgb_hex(v) { - return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16); - } - function d3_rgb_parse(format, rgb, hsl) { - var r = 0, g = 0, b = 0, m1, m2, color; - m1 = /([a-z]+)\((.*)\)/.exec(format = format.toLowerCase()); - if (m1) { - m2 = m1[2].split(","); - switch (m1[1]) { - case "hsl": - { - return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100); - } - - case "rgb": - { - return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2])); - } - } - } - if (color = d3_rgb_names.get(format)) { - return rgb(color.r, color.g, color.b); - } - if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.slice(1), 16))) { - if (format.length === 4) { - r = (color & 3840) >> 4; - r = r >> 4 | r; - g = color & 240; - g = g >> 4 | g; - b = color & 15; - b = b << 4 | b; - } else if (format.length === 7) { - r = (color & 16711680) >> 16; - g = (color & 65280) >> 8; - b = color & 255; - } - } - return rgb(r, g, b); - } - function d3_rgb_hsl(r, g, b) { - var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2; - if (d) { - s = l < .5 ? d / (max + min) : d / (2 - max - min); - if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4; - h *= 60; - } else { - h = NaN; - s = l > 0 && l < 1 ? 0 : h; - } - return new d3_hsl(h, s, l); - } - function d3_rgb_lab(r, g, b) { - r = d3_rgb_xyz(r); - g = d3_rgb_xyz(g); - b = d3_rgb_xyz(b); - var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z); - return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z)); - } - function d3_rgb_xyz(r) { - return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4); - } - function d3_rgb_parseNumber(c) { - var f = parseFloat(c); - return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f; - } - var d3_rgb_names = d3.map({ - aliceblue: 15792383, - antiquewhite: 16444375, - aqua: 65535, - aquamarine: 8388564, - azure: 15794175, - beige: 16119260, - bisque: 16770244, - black: 0, - blanchedalmond: 16772045, - blue: 255, - blueviolet: 9055202, - brown: 10824234, - burlywood: 14596231, - cadetblue: 6266528, - chartreuse: 8388352, - chocolate: 13789470, - coral: 16744272, - cornflowerblue: 6591981, - cornsilk: 16775388, - crimson: 14423100, - cyan: 65535, - darkblue: 139, - darkcyan: 35723, - darkgoldenrod: 12092939, - darkgray: 11119017, - darkgreen: 25600, - darkgrey: 11119017, - darkkhaki: 12433259, - darkmagenta: 9109643, - darkolivegreen: 5597999, - darkorange: 16747520, - darkorchid: 10040012, - darkred: 9109504, - darksalmon: 15308410, - darkseagreen: 9419919, - darkslateblue: 4734347, - darkslategray: 3100495, - darkslategrey: 3100495, - darkturquoise: 52945, - darkviolet: 9699539, - deeppink: 16716947, - deepskyblue: 49151, - dimgray: 6908265, - dimgrey: 6908265, - dodgerblue: 2003199, - firebrick: 11674146, - floralwhite: 16775920, - forestgreen: 2263842, - fuchsia: 16711935, - gainsboro: 14474460, - ghostwhite: 16316671, - gold: 16766720, - goldenrod: 14329120, - gray: 8421504, - green: 32768, - greenyellow: 11403055, - grey: 8421504, - honeydew: 15794160, - hotpink: 16738740, - indianred: 13458524, - indigo: 4915330, - ivory: 16777200, - khaki: 15787660, - lavender: 15132410, - lavenderblush: 16773365, - lawngreen: 8190976, - lemonchiffon: 16775885, - lightblue: 11393254, - lightcoral: 15761536, - lightcyan: 14745599, - lightgoldenrodyellow: 16448210, - lightgray: 13882323, - lightgreen: 9498256, - lightgrey: 13882323, - lightpink: 16758465, - lightsalmon: 16752762, - lightseagreen: 2142890, - lightskyblue: 8900346, - lightslategray: 7833753, - lightslategrey: 7833753, - lightsteelblue: 11584734, - lightyellow: 16777184, - lime: 65280, - limegreen: 3329330, - linen: 16445670, - magenta: 16711935, - maroon: 8388608, - mediumaquamarine: 6737322, - mediumblue: 205, - mediumorchid: 12211667, - mediumpurple: 9662683, - mediumseagreen: 3978097, - mediumslateblue: 8087790, - mediumspringgreen: 64154, - mediumturquoise: 4772300, - mediumvioletred: 13047173, - midnightblue: 1644912, - mintcream: 16121850, - mistyrose: 16770273, - moccasin: 16770229, - navajowhite: 16768685, - navy: 128, - oldlace: 16643558, - olive: 8421376, - olivedrab: 7048739, - orange: 16753920, - orangered: 16729344, - orchid: 14315734, - palegoldenrod: 15657130, - palegreen: 10025880, - paleturquoise: 11529966, - palevioletred: 14381203, - papayawhip: 16773077, - peachpuff: 16767673, - peru: 13468991, - pink: 16761035, - plum: 14524637, - powderblue: 11591910, - purple: 8388736, - rebeccapurple: 6697881, - red: 16711680, - rosybrown: 12357519, - royalblue: 4286945, - saddlebrown: 9127187, - salmon: 16416882, - sandybrown: 16032864, - seagreen: 3050327, - seashell: 16774638, - sienna: 10506797, - silver: 12632256, - skyblue: 8900331, - slateblue: 6970061, - slategray: 7372944, - slategrey: 7372944, - snow: 16775930, - springgreen: 65407, - steelblue: 4620980, - tan: 13808780, - teal: 32896, - thistle: 14204888, - tomato: 16737095, - turquoise: 4251856, - violet: 15631086, - wheat: 16113331, - white: 16777215, - whitesmoke: 16119285, - yellow: 16776960, - yellowgreen: 10145074 - }); - d3_rgb_names.forEach(function(key, value) { - d3_rgb_names.set(key, d3_rgbNumber(value)); - }); - function d3_functor(v) { - return typeof v === "function" ? v : function() { - return v; - }; - } - d3.functor = d3_functor; - d3.xhr = d3_xhrType(d3_identity); - function d3_xhrType(response) { - return function(url, mimeType, callback) { - if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType, - mimeType = null; - return d3_xhr(url, mimeType, response, callback); - }; - } - function d3_xhr(url, mimeType, response, callback) { - var xhr = {}, dispatch = d3.dispatch("beforesend", "progress", "load", "error"), headers = {}, request = new XMLHttpRequest(), responseType = null; - if (this.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest(); - "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() { - request.readyState > 3 && respond(); - }; - function respond() { - var status = request.status, result; - if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) { - try { - result = response.call(xhr, request); - } catch (e) { - dispatch.error.call(xhr, e); - return; - } - dispatch.load.call(xhr, result); - } else { - dispatch.error.call(xhr, request); - } - } - request.onprogress = function(event) { - var o = d3.event; - d3.event = event; - try { - dispatch.progress.call(xhr, request); - } finally { - d3.event = o; - } - }; - xhr.header = function(name, value) { - name = (name + "").toLowerCase(); - if (arguments.length < 2) return headers[name]; - if (value == null) delete headers[name]; else headers[name] = value + ""; - return xhr; - }; - xhr.mimeType = function(value) { - if (!arguments.length) return mimeType; - mimeType = value == null ? null : value + ""; - return xhr; - }; - xhr.responseType = function(value) { - if (!arguments.length) return responseType; - responseType = value; - return xhr; - }; - xhr.response = function(value) { - response = value; - return xhr; - }; - [ "get", "post" ].forEach(function(method) { - xhr[method] = function() { - return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments))); - }; - }); - xhr.send = function(method, data, callback) { - if (arguments.length === 2 && typeof data === "function") callback = data, data = null; - request.open(method, url, true); - if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*"; - if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]); - if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType); - if (responseType != null) request.responseType = responseType; - if (callback != null) xhr.on("error", callback).on("load", function(request) { - callback(null, request); - }); - dispatch.beforesend.call(xhr, request); - request.send(data == null ? null : data); - return xhr; - }; - xhr.abort = function() { - request.abort(); - return xhr; - }; - d3.rebind(xhr, dispatch, "on"); - return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback)); - } - function d3_xhr_fixCallback(callback) { - return callback.length === 1 ? function(error, request) { - callback(error == null ? request : null); - } : callback; - } - function d3_xhrHasResponse(request) { - var type = request.responseType; - return type && type !== "text" ? request.response : request.responseText; - } - d3.dsv = function(delimiter, mimeType) { - var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0); - function dsv(url, row, callback) { - if (arguments.length < 3) callback = row, row = null; - var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback); - xhr.row = function(_) { - return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row; - }; - return xhr; - } - function response(request) { - return dsv.parse(request.responseText); - } - function typedResponse(f) { - return function(request) { - return dsv.parse(request.responseText, f); - }; - } - dsv.parse = function(text, f) { - var o; - return dsv.parseRows(text, function(row, i) { - if (o) return o(row, i - 1); - var a = new Function("d", "return {" + row.map(function(name, i) { - return JSON.stringify(name) + ": d[" + i + "]"; - }).join(",") + "}"); - o = f ? function(row, i) { - return f(a(row), i); - } : a; - }); - }; - dsv.parseRows = function(text, f) { - var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol; - function token() { - if (I >= N) return EOF; - if (eol) return eol = false, EOL; - var j = I; - if (text.charCodeAt(j) === 34) { - var i = j; - while (i++ < N) { - if (text.charCodeAt(i) === 34) { - if (text.charCodeAt(i + 1) !== 34) break; - ++i; - } - } - I = i + 2; - var c = text.charCodeAt(i + 1); - if (c === 13) { - eol = true; - if (text.charCodeAt(i + 2) === 10) ++I; - } else if (c === 10) { - eol = true; - } - return text.slice(j + 1, i).replace(/""/g, '"'); - } - while (I < N) { - var c = text.charCodeAt(I++), k = 1; - if (c === 10) eol = true; else if (c === 13) { - eol = true; - if (text.charCodeAt(I) === 10) ++I, ++k; - } else if (c !== delimiterCode) continue; - return text.slice(j, I - k); - } - return text.slice(j); - } - while ((t = token()) !== EOF) { - var a = []; - while (t !== EOL && t !== EOF) { - a.push(t); - t = token(); - } - if (f && (a = f(a, n++)) == null) continue; - rows.push(a); - } - return rows; - }; - dsv.format = function(rows) { - if (Array.isArray(rows[0])) return dsv.formatRows(rows); - var fieldSet = new d3_Set(), fields = []; - rows.forEach(function(row) { - for (var field in row) { - if (!fieldSet.has(field)) { - fields.push(fieldSet.add(field)); - } - } - }); - return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) { - return fields.map(function(field) { - return formatValue(row[field]); - }).join(delimiter); - })).join("\n"); - }; - dsv.formatRows = function(rows) { - return rows.map(formatRow).join("\n"); - }; - function formatRow(row) { - return row.map(formatValue).join(delimiter); - } - function formatValue(text) { - return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text; - } - return dsv; - }; - d3.csv = d3.dsv(",", "text/csv"); - d3.tsv = d3.dsv(" ", "text/tab-separated-values"); - var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_frame = this[d3_vendorSymbol(this, "requestAnimationFrame")] || function(callback) { - setTimeout(callback, 17); - }; - d3.timer = function() { - d3_timer.apply(this, arguments); - }; - function d3_timer(callback, delay, then) { - var n = arguments.length; - if (n < 2) delay = 0; - if (n < 3) then = Date.now(); - var time = then + delay, timer = { - c: callback, - t: time, - n: null - }; - if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer; - d3_timer_queueTail = timer; - if (!d3_timer_interval) { - d3_timer_timeout = clearTimeout(d3_timer_timeout); - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } - return timer; - } - function d3_timer_step() { - var now = d3_timer_mark(), delay = d3_timer_sweep() - now; - if (delay > 24) { - if (isFinite(delay)) { - clearTimeout(d3_timer_timeout); - d3_timer_timeout = setTimeout(d3_timer_step, delay); - } - d3_timer_interval = 0; - } else { - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } - } - d3.timer.flush = function() { - d3_timer_mark(); - d3_timer_sweep(); - }; - function d3_timer_mark() { - var now = Date.now(), timer = d3_timer_queueHead; - while (timer) { - if (now >= timer.t && timer.c(now - timer.t)) timer.c = null; - timer = timer.n; - } - return now; - } - function d3_timer_sweep() { - var t0, t1 = d3_timer_queueHead, time = Infinity; - while (t1) { - if (t1.c) { - if (t1.t < time) time = t1.t; - t1 = (t0 = t1).n; - } else { - t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n; - } - } - d3_timer_queueTail = t0; - return time; - } - function d3_format_precision(x, p) { - return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1); - } - d3.round = function(x, n) { - return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x); - }; - var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix); - d3.formatPrefix = function(value, precision) { - var i = 0; - if (value = +value) { - if (value < 0) value *= -1; - if (precision) value = d3.round(value, d3_format_precision(value, precision)); - i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10); - i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3)); - } - return d3_formatPrefixes[8 + i / 3]; - }; - function d3_formatPrefix(d, i) { - var k = Math.pow(10, abs(8 - i) * 3); - return { - scale: i > 8 ? function(d) { - return d / k; - } : function(d) { - return d * k; - }, - symbol: d - }; - } - function d3_locale_numberFormat(locale) { - var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) { - var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0; - while (i > 0 && g > 0) { - if (length + g + 1 > width) g = Math.max(1, width - length); - t.push(value.substring(i -= g, i + g)); - if ((length += g + 1) > width) break; - g = locale_grouping[j = (j + 1) % locale_grouping.length]; - } - return t.reverse().join(locale_thousands); - } : d3_identity; - return function(specifier) { - var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "-", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false, exponent = true; - if (precision) precision = +precision.substring(1); - if (zfill || fill === "0" && align === "=") { - zfill = fill = "0"; - align = "="; - } - switch (type) { - case "n": - comma = true; - type = "g"; - break; - - case "%": - scale = 100; - suffix = "%"; - type = "f"; - break; - - case "p": - scale = 100; - suffix = "%"; - type = "r"; - break; - - case "b": - case "o": - case "x": - case "X": - if (symbol === "#") prefix = "0" + type.toLowerCase(); - - case "c": - exponent = false; - - case "d": - integer = true; - precision = 0; - break; - - case "s": - scale = -1; - type = "r"; - break; - } - if (symbol === "$") prefix = locale_currency[0], suffix = locale_currency[1]; - if (type == "r" && !precision) type = "g"; - if (precision != null) { - if (type == "g") precision = Math.max(1, Math.min(21, precision)); else if (type == "e" || type == "f") precision = Math.max(0, Math.min(20, precision)); - } - type = d3_format_types.get(type) || d3_format_typeDefault; - var zcomma = zfill && comma; - return function(value) { - var fullSuffix = suffix; - if (integer && value % 1) return ""; - var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign === "-" ? "" : sign; - if (scale < 0) { - var unit = d3.formatPrefix(value, precision); - value = unit.scale(value); - fullSuffix = unit.symbol + suffix; - } else { - value *= scale; - } - value = type(value, precision); - var i = value.lastIndexOf("."), before, after; - if (i < 0) { - var j = exponent ? value.lastIndexOf("e") : -1; - if (j < 0) before = value, after = ""; else before = value.substring(0, j), after = value.substring(j); - } else { - before = value.substring(0, i); - after = locale_decimal + value.substring(i + 1); - } - if (!zfill && comma) before = formatGroup(before, Infinity); - var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : ""; - if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity); - negative += prefix; - value = before + after; - return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix; - }; - }; - } - var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i; - var d3_format_types = d3.map({ - b: function(x) { - return x.toString(2); - }, - c: function(x) { - return String.fromCharCode(x); - }, - o: function(x) { - return x.toString(8); - }, - x: function(x) { - return x.toString(16); - }, - X: function(x) { - return x.toString(16).toUpperCase(); - }, - g: function(x, p) { - return x.toPrecision(p); - }, - e: function(x, p) { - return x.toExponential(p); - }, - f: function(x, p) { - return x.toFixed(p); - }, - r: function(x, p) { - return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p)))); - } - }); - function d3_format_typeDefault(x) { - return x + ""; - } - var d3_time = d3.time = {}, d3_date = Date; - function d3_date_utc() { - this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]); - } - d3_date_utc.prototype = { - getDate: function() { - return this._.getUTCDate(); - }, - getDay: function() { - return this._.getUTCDay(); - }, - getFullYear: function() { - return this._.getUTCFullYear(); - }, - getHours: function() { - return this._.getUTCHours(); - }, - getMilliseconds: function() { - return this._.getUTCMilliseconds(); - }, - getMinutes: function() { - return this._.getUTCMinutes(); - }, - getMonth: function() { - return this._.getUTCMonth(); - }, - getSeconds: function() { - return this._.getUTCSeconds(); - }, - getTime: function() { - return this._.getTime(); - }, - getTimezoneOffset: function() { - return 0; - }, - valueOf: function() { - return this._.valueOf(); - }, - setDate: function() { - d3_time_prototype.setUTCDate.apply(this._, arguments); - }, - setDay: function() { - d3_time_prototype.setUTCDay.apply(this._, arguments); - }, - setFullYear: function() { - d3_time_prototype.setUTCFullYear.apply(this._, arguments); - }, - setHours: function() { - d3_time_prototype.setUTCHours.apply(this._, arguments); - }, - setMilliseconds: function() { - d3_time_prototype.setUTCMilliseconds.apply(this._, arguments); - }, - setMinutes: function() { - d3_time_prototype.setUTCMinutes.apply(this._, arguments); - }, - setMonth: function() { - d3_time_prototype.setUTCMonth.apply(this._, arguments); - }, - setSeconds: function() { - d3_time_prototype.setUTCSeconds.apply(this._, arguments); - }, - setTime: function() { - d3_time_prototype.setTime.apply(this._, arguments); - } - }; - var d3_time_prototype = Date.prototype; - function d3_time_interval(local, step, number) { - function round(date) { - var d0 = local(date), d1 = offset(d0, 1); - return date - d0 < d1 - date ? d0 : d1; - } - function ceil(date) { - step(date = local(new d3_date(date - 1)), 1); - return date; - } - function offset(date, k) { - step(date = new d3_date(+date), k); - return date; - } - function range(t0, t1, dt) { - var time = ceil(t0), times = []; - if (dt > 1) { - while (time < t1) { - if (!(number(time) % dt)) times.push(new Date(+time)); - step(time, 1); - } - } else { - while (time < t1) times.push(new Date(+time)), step(time, 1); - } - return times; - } - function range_utc(t0, t1, dt) { - try { - d3_date = d3_date_utc; - var utc = new d3_date_utc(); - utc._ = t0; - return range(utc, t1, dt); - } finally { - d3_date = Date; - } - } - local.floor = local; - local.round = round; - local.ceil = ceil; - local.offset = offset; - local.range = range; - var utc = local.utc = d3_time_interval_utc(local); - utc.floor = utc; - utc.round = d3_time_interval_utc(round); - utc.ceil = d3_time_interval_utc(ceil); - utc.offset = d3_time_interval_utc(offset); - utc.range = range_utc; - return local; - } - function d3_time_interval_utc(method) { - return function(date, k) { - try { - d3_date = d3_date_utc; - var utc = new d3_date_utc(); - utc._ = date; - return method(utc, k)._; - } finally { - d3_date = Date; - } - }; - } - d3_time.year = d3_time_interval(function(date) { - date = d3_time.day(date); - date.setMonth(0, 1); - return date; - }, function(date, offset) { - date.setFullYear(date.getFullYear() + offset); - }, function(date) { - return date.getFullYear(); - }); - d3_time.years = d3_time.year.range; - d3_time.years.utc = d3_time.year.utc.range; - d3_time.day = d3_time_interval(function(date) { - var day = new d3_date(2e3, 0); - day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); - return day; - }, function(date, offset) { - date.setDate(date.getDate() + offset); - }, function(date) { - return date.getDate() - 1; - }); - d3_time.days = d3_time.day.range; - d3_time.days.utc = d3_time.day.utc.range; - d3_time.dayOfYear = function(date) { - var year = d3_time.year(date); - return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5); - }; - [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ].forEach(function(day, i) { - i = 7 - i; - var interval = d3_time[day] = d3_time_interval(function(date) { - (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7); - return date; - }, function(date, offset) { - date.setDate(date.getDate() + Math.floor(offset) * 7); - }, function(date) { - var day = d3_time.year(date).getDay(); - return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i); - }); - d3_time[day + "s"] = interval.range; - d3_time[day + "s"].utc = interval.utc.range; - d3_time[day + "OfYear"] = function(date) { - var day = d3_time.year(date).getDay(); - return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7); - }; - }); - d3_time.week = d3_time.sunday; - d3_time.weeks = d3_time.sunday.range; - d3_time.weeks.utc = d3_time.sunday.utc.range; - d3_time.weekOfYear = d3_time.sundayOfYear; - function d3_locale_timeFormat(locale) { - var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths; - function d3_time_format(template) { - var n = template.length; - function format(date) { - var string = [], i = -1, j = 0, c, p, f; - while (++i < n) { - if (template.charCodeAt(i) === 37) { - string.push(template.slice(j, i)); - if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i); - if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p); - string.push(c); - j = i + 1; - } - } - string.push(template.slice(j, i)); - return string.join(""); - } - format.parse = function(string) { - var d = { - y: 1900, - m: 0, - d: 1, - H: 0, - M: 0, - S: 0, - L: 0, - Z: null - }, i = d3_time_parse(d, template, string, 0); - if (i != string.length) return null; - if ("p" in d) d.H = d.H % 12 + d.p * 12; - var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)(); - if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("W" in d || "U" in d) { - if (!("w" in d)) d.w = "W" in d ? 1 : 0; - date.setFullYear(d.y, 0, 1); - date.setFullYear(d.y, 0, "W" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7); - } else date.setFullYear(d.y, d.m, d.d); - date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L); - return localZ ? date._ : date; - }; - format.toString = function() { - return template; - }; - return format; - } - function d3_time_parse(date, template, string, j) { - var c, p, t, i = 0, n = template.length, m = string.length; - while (i < n) { - if (j >= m) return -1; - c = template.charCodeAt(i++); - if (c === 37) { - t = template.charAt(i++); - p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t]; - if (!p || (j = p(date, string, j)) < 0) return -1; - } else if (c != string.charCodeAt(j++)) { - return -1; - } - } - return j; - } - d3_time_format.utc = function(template) { - var local = d3_time_format(template); - function format(date) { - try { - d3_date = d3_date_utc; - var utc = new d3_date(); - utc._ = date; - return local(utc); - } finally { - d3_date = Date; - } - } - format.parse = function(string) { - try { - d3_date = d3_date_utc; - var date = local.parse(string); - return date && date._; - } finally { - d3_date = Date; - } - }; - format.toString = local.toString; - return format; - }; - d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti; - var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths); - locale_periods.forEach(function(p, i) { - d3_time_periodLookup.set(p.toLowerCase(), i); - }); - var d3_time_formats = { - a: function(d) { - return locale_shortDays[d.getDay()]; - }, - A: function(d) { - return locale_days[d.getDay()]; - }, - b: function(d) { - return locale_shortMonths[d.getMonth()]; - }, - B: function(d) { - return locale_months[d.getMonth()]; - }, - c: d3_time_format(locale_dateTime), - d: function(d, p) { - return d3_time_formatPad(d.getDate(), p, 2); - }, - e: function(d, p) { - return d3_time_formatPad(d.getDate(), p, 2); - }, - H: function(d, p) { - return d3_time_formatPad(d.getHours(), p, 2); - }, - I: function(d, p) { - return d3_time_formatPad(d.getHours() % 12 || 12, p, 2); - }, - j: function(d, p) { - return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3); - }, - L: function(d, p) { - return d3_time_formatPad(d.getMilliseconds(), p, 3); - }, - m: function(d, p) { - return d3_time_formatPad(d.getMonth() + 1, p, 2); - }, - M: function(d, p) { - return d3_time_formatPad(d.getMinutes(), p, 2); - }, - p: function(d) { - return locale_periods[+(d.getHours() >= 12)]; - }, - S: function(d, p) { - return d3_time_formatPad(d.getSeconds(), p, 2); - }, - U: function(d, p) { - return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2); - }, - w: function(d) { - return d.getDay(); - }, - W: function(d, p) { - return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2); - }, - x: d3_time_format(locale_date), - X: d3_time_format(locale_time), - y: function(d, p) { - return d3_time_formatPad(d.getFullYear() % 100, p, 2); - }, - Y: function(d, p) { - return d3_time_formatPad(d.getFullYear() % 1e4, p, 4); - }, - Z: d3_time_zone, - "%": function() { - return "%"; - } - }; - var d3_time_parsers = { - a: d3_time_parseWeekdayAbbrev, - A: d3_time_parseWeekday, - b: d3_time_parseMonthAbbrev, - B: d3_time_parseMonth, - c: d3_time_parseLocaleFull, - d: d3_time_parseDay, - e: d3_time_parseDay, - H: d3_time_parseHour24, - I: d3_time_parseHour24, - j: d3_time_parseDayOfYear, - L: d3_time_parseMilliseconds, - m: d3_time_parseMonthNumber, - M: d3_time_parseMinutes, - p: d3_time_parseAmPm, - S: d3_time_parseSeconds, - U: d3_time_parseWeekNumberSunday, - w: d3_time_parseWeekdayNumber, - W: d3_time_parseWeekNumberMonday, - x: d3_time_parseLocaleDate, - X: d3_time_parseLocaleTime, - y: d3_time_parseYear, - Y: d3_time_parseFullYear, - Z: d3_time_parseZone, - "%": d3_time_parseLiteralPercent - }; - function d3_time_parseWeekdayAbbrev(date, string, i) { - d3_time_dayAbbrevRe.lastIndex = 0; - var n = d3_time_dayAbbrevRe.exec(string.slice(i)); - return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseWeekday(date, string, i) { - d3_time_dayRe.lastIndex = 0; - var n = d3_time_dayRe.exec(string.slice(i)); - return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseMonthAbbrev(date, string, i) { - d3_time_monthAbbrevRe.lastIndex = 0; - var n = d3_time_monthAbbrevRe.exec(string.slice(i)); - return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseMonth(date, string, i) { - d3_time_monthRe.lastIndex = 0; - var n = d3_time_monthRe.exec(string.slice(i)); - return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseLocaleFull(date, string, i) { - return d3_time_parse(date, d3_time_formats.c.toString(), string, i); - } - function d3_time_parseLocaleDate(date, string, i) { - return d3_time_parse(date, d3_time_formats.x.toString(), string, i); - } - function d3_time_parseLocaleTime(date, string, i) { - return d3_time_parse(date, d3_time_formats.X.toString(), string, i); - } - function d3_time_parseAmPm(date, string, i) { - var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase()); - return n == null ? -1 : (date.p = n, i); - } - return d3_time_format; - } - var d3_time_formatPads = { - "-": "", - _: " ", - "0": "0" - }, d3_time_numberRe = /^\s*\d+/, d3_time_percentRe = /^%/; - function d3_time_formatPad(value, fill, width) { - var sign = value < 0 ? "-" : "", string = (sign ? -value : value) + "", length = string.length; - return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); - } - function d3_time_formatRe(names) { - return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i"); - } - function d3_time_formatLookup(names) { - var map = new d3_Map(), i = -1, n = names.length; - while (++i < n) map.set(names[i].toLowerCase(), i); - return map; - } - function d3_time_parseWeekdayNumber(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 1)); - return n ? (date.w = +n[0], i + n[0].length) : -1; - } - function d3_time_parseWeekNumberSunday(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i)); - return n ? (date.U = +n[0], i + n[0].length) : -1; - } - function d3_time_parseWeekNumberMonday(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i)); - return n ? (date.W = +n[0], i + n[0].length) : -1; - } - function d3_time_parseFullYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 4)); - return n ? (date.y = +n[0], i + n[0].length) : -1; - } - function d3_time_parseYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1; - } - function d3_time_parseZone(date, string, i) { - return /^[+-]\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, - i + 5) : -1; - } - function d3_time_expandYear(d) { - return d + (d > 68 ? 1900 : 2e3); - } - function d3_time_parseMonthNumber(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.m = n[0] - 1, i + n[0].length) : -1; - } - function d3_time_parseDay(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.d = +n[0], i + n[0].length) : -1; - } - function d3_time_parseDayOfYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 3)); - return n ? (date.j = +n[0], i + n[0].length) : -1; - } - function d3_time_parseHour24(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.H = +n[0], i + n[0].length) : -1; - } - function d3_time_parseMinutes(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.M = +n[0], i + n[0].length) : -1; - } - function d3_time_parseSeconds(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.S = +n[0], i + n[0].length) : -1; - } - function d3_time_parseMilliseconds(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 3)); - return n ? (date.L = +n[0], i + n[0].length) : -1; - } - function d3_time_zone(d) { - var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = abs(z) / 60 | 0, zm = abs(z) % 60; - return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2); - } - function d3_time_parseLiteralPercent(date, string, i) { - d3_time_percentRe.lastIndex = 0; - var n = d3_time_percentRe.exec(string.slice(i, i + 1)); - return n ? i + n[0].length : -1; - } - function d3_time_formatMulti(formats) { - var n = formats.length, i = -1; - while (++i < n) formats[i][0] = this(formats[i][0]); - return function(date) { - var i = 0, f = formats[i]; - while (!f[1](date)) f = formats[++i]; - return f[0](date); - }; - } - d3.locale = function(locale) { - return { - numberFormat: d3_locale_numberFormat(locale), - timeFormat: d3_locale_timeFormat(locale) - }; - }; - var d3_locale_enUS = d3.locale({ - decimal: ".", - thousands: ",", - grouping: [ 3 ], - currency: [ "$", "" ], - dateTime: "%a %b %e %X %Y", - date: "%m/%d/%Y", - time: "%H:%M:%S", - periods: [ "AM", "PM" ], - days: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], - shortDays: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], - months: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], - shortMonths: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ] - }); - d3.format = d3_locale_enUS.numberFormat; - d3.geo = {}; - function d3_adder() {} - d3_adder.prototype = { - s: 0, - t: 0, - add: function(y) { - d3_adderSum(y, this.t, d3_adderTemp); - d3_adderSum(d3_adderTemp.s, this.s, this); - if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t; - }, - reset: function() { - this.s = this.t = 0; - }, - valueOf: function() { - return this.s; - } - }; - var d3_adderTemp = new d3_adder(); - function d3_adderSum(a, b, o) { - var x = o.s = a + b, bv = x - a, av = x - bv; - o.t = a - av + (b - bv); - } - d3.geo.stream = function(object, listener) { - if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) { - d3_geo_streamObjectType[object.type](object, listener); - } else { - d3_geo_streamGeometry(object, listener); - } - }; - function d3_geo_streamGeometry(geometry, listener) { - if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) { - d3_geo_streamGeometryType[geometry.type](geometry, listener); - } - } - var d3_geo_streamObjectType = { - Feature: function(feature, listener) { - d3_geo_streamGeometry(feature.geometry, listener); - }, - FeatureCollection: function(object, listener) { - var features = object.features, i = -1, n = features.length; - while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener); - } - }; - var d3_geo_streamGeometryType = { - Sphere: function(object, listener) { - listener.sphere(); - }, - Point: function(object, listener) { - object = object.coordinates; - listener.point(object[0], object[1], object[2]); - }, - MultiPoint: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]); - }, - LineString: function(object, listener) { - d3_geo_streamLine(object.coordinates, listener, 0); - }, - MultiLineString: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0); - }, - Polygon: function(object, listener) { - d3_geo_streamPolygon(object.coordinates, listener); - }, - MultiPolygon: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) d3_geo_streamPolygon(coordinates[i], listener); - }, - GeometryCollection: function(object, listener) { - var geometries = object.geometries, i = -1, n = geometries.length; - while (++i < n) d3_geo_streamGeometry(geometries[i], listener); - } - }; - function d3_geo_streamLine(coordinates, listener, closed) { - var i = -1, n = coordinates.length - closed, coordinate; - listener.lineStart(); - while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]); - listener.lineEnd(); - } - function d3_geo_streamPolygon(coordinates, listener) { - var i = -1, n = coordinates.length; - listener.polygonStart(); - while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1); - listener.polygonEnd(); - } - d3.geo.area = function(object) { - d3_geo_areaSum = 0; - d3.geo.stream(object, d3_geo_area); - return d3_geo_areaSum; - }; - var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder(); - var d3_geo_area = { - sphere: function() { - d3_geo_areaSum += 4 * π; - }, - point: d3_noop, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: function() { - d3_geo_areaRingSum.reset(); - d3_geo_area.lineStart = d3_geo_areaRingStart; - }, - polygonEnd: function() { - var area = 2 * d3_geo_areaRingSum; - d3_geo_areaSum += area < 0 ? 4 * π + area : area; - d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop; - } - }; - function d3_geo_areaRingStart() { - var λ00, φ00, λ0, cosφ0, sinφ0; - d3_geo_area.point = function(λ, φ) { - d3_geo_area.point = nextPoint; - λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), - sinφ0 = Math.sin(φ); - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - φ = φ * d3_radians / 2 + π / 4; - var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ); - d3_geo_areaRingSum.add(Math.atan2(v, u)); - λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ; - } - d3_geo_area.lineEnd = function() { - nextPoint(λ00, φ00); - }; - } - function d3_geo_cartesian(spherical) { - var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ); - return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ]; - } - function d3_geo_cartesianDot(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; - } - function d3_geo_cartesianCross(a, b) { - return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ]; - } - function d3_geo_cartesianAdd(a, b) { - a[0] += b[0]; - a[1] += b[1]; - a[2] += b[2]; - } - function d3_geo_cartesianScale(vector, k) { - return [ vector[0] * k, vector[1] * k, vector[2] * k ]; - } - function d3_geo_cartesianNormalize(d) { - var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); - d[0] /= l; - d[1] /= l; - d[2] /= l; - } - function d3_geo_spherical(cartesian) { - return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ]; - } - function d3_geo_sphericalEqual(a, b) { - return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε; - } - d3.geo.bounds = function() { - var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range; - var bound = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - bound.point = ringPoint; - bound.lineStart = ringStart; - bound.lineEnd = ringEnd; - dλSum = 0; - d3_geo_area.polygonStart(); - }, - polygonEnd: function() { - d3_geo_area.polygonEnd(); - bound.point = point; - bound.lineStart = lineStart; - bound.lineEnd = lineEnd; - if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90; - range[0] = λ0, range[1] = λ1; - } - }; - function point(λ, φ) { - ranges.push(range = [ λ0 = λ, λ1 = λ ]); - if (φ < φ0) φ0 = φ; - if (φ > φ1) φ1 = φ; - } - function linePoint(λ, φ) { - var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]); - if (p0) { - var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal); - d3_geo_cartesianNormalize(inflection); - inflection = d3_geo_spherical(inflection); - var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180; - if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) { - var φi = inflection[1] * d3_degrees; - if (φi > φ1) φ1 = φi; - } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) { - var φi = -inflection[1] * d3_degrees; - if (φi < φ0) φ0 = φi; - } else { - if (φ < φ0) φ0 = φ; - if (φ > φ1) φ1 = φ; - } - if (antimeridian) { - if (λ < λ_) { - if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; - } else { - if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; - } - } else { - if (λ1 >= λ0) { - if (λ < λ0) λ0 = λ; - if (λ > λ1) λ1 = λ; - } else { - if (λ > λ_) { - if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; - } else { - if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; - } - } - } - } else { - point(λ, φ); - } - p0 = p, λ_ = λ; - } - function lineStart() { - bound.point = linePoint; - } - function lineEnd() { - range[0] = λ0, range[1] = λ1; - bound.point = point; - p0 = null; - } - function ringPoint(λ, φ) { - if (p0) { - var dλ = λ - λ_; - dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ; - } else λ__ = λ, φ__ = φ; - d3_geo_area.point(λ, φ); - linePoint(λ, φ); - } - function ringStart() { - d3_geo_area.lineStart(); - } - function ringEnd() { - ringPoint(λ__, φ__); - d3_geo_area.lineEnd(); - if (abs(dλSum) > ε) λ0 = -(λ1 = 180); - range[0] = λ0, range[1] = λ1; - p0 = null; - } - function angle(λ0, λ1) { - return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1; - } - function compareRanges(a, b) { - return a[0] - b[0]; - } - function withinRange(x, range) { - return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; - } - return function(feature) { - φ1 = λ1 = -(λ0 = φ0 = Infinity); - ranges = []; - d3.geo.stream(feature, bound); - var n = ranges.length; - if (n) { - ranges.sort(compareRanges); - for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) { - b = ranges[i]; - if (withinRange(b[0], a) || withinRange(b[1], a)) { - if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; - if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; - } else { - merged.push(a = b); - } - } - var best = -Infinity, dλ; - for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) { - b = merged[i]; - if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1]; - } - } - ranges = range = null; - return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ]; - }; - }(); - d3.geo.centroid = function(object) { - d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0; - d3.geo.stream(object, d3_geo_centroid); - var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z; - if (m < ε2) { - x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1; - if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0; - m = x * x + y * y + z * z; - if (m < ε2) return [ NaN, NaN ]; - } - return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ]; - }; - var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2; - var d3_geo_centroid = { - sphere: d3_noop, - point: d3_geo_centroidPoint, - lineStart: d3_geo_centroidLineStart, - lineEnd: d3_geo_centroidLineEnd, - polygonStart: function() { - d3_geo_centroid.lineStart = d3_geo_centroidRingStart; - }, - polygonEnd: function() { - d3_geo_centroid.lineStart = d3_geo_centroidLineStart; - } - }; - function d3_geo_centroidPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ)); - } - function d3_geo_centroidPointXYZ(x, y, z) { - ++d3_geo_centroidW0; - d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0; - d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0; - d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0; - } - function d3_geo_centroidLineStart() { - var x0, y0, z0; - d3_geo_centroid.point = function(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - x0 = cosφ * Math.cos(λ); - y0 = cosφ * Math.sin(λ); - z0 = Math.sin(φ); - d3_geo_centroid.point = nextPoint; - d3_geo_centroidPointXYZ(x0, y0, z0); - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); - d3_geo_centroidW1 += w; - d3_geo_centroidX1 += w * (x0 + (x0 = x)); - d3_geo_centroidY1 += w * (y0 + (y0 = y)); - d3_geo_centroidZ1 += w * (z0 + (z0 = z)); - d3_geo_centroidPointXYZ(x0, y0, z0); - } - } - function d3_geo_centroidLineEnd() { - d3_geo_centroid.point = d3_geo_centroidPoint; - } - function d3_geo_centroidRingStart() { - var λ00, φ00, x0, y0, z0; - d3_geo_centroid.point = function(λ, φ) { - λ00 = λ, φ00 = φ; - d3_geo_centroid.point = nextPoint; - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - x0 = cosφ * Math.cos(λ); - y0 = cosφ * Math.sin(λ); - z0 = Math.sin(φ); - d3_geo_centroidPointXYZ(x0, y0, z0); - }; - d3_geo_centroid.lineEnd = function() { - nextPoint(λ00, φ00); - d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd; - d3_geo_centroid.point = d3_geo_centroidPoint; - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u); - d3_geo_centroidX2 += v * cx; - d3_geo_centroidY2 += v * cy; - d3_geo_centroidZ2 += v * cz; - d3_geo_centroidW1 += w; - d3_geo_centroidX1 += w * (x0 + (x0 = x)); - d3_geo_centroidY1 += w * (y0 + (y0 = y)); - d3_geo_centroidZ1 += w * (z0 + (z0 = z)); - d3_geo_centroidPointXYZ(x0, y0, z0); - } - } - function d3_geo_compose(a, b) { - function compose(x, y) { - return x = a(x, y), b(x[0], x[1]); - } - if (a.invert && b.invert) compose.invert = function(x, y) { - return x = b.invert(x, y), x && a.invert(x[0], x[1]); - }; - return compose; - } - function d3_true() { - return true; - } - function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) { - var subject = [], clip = []; - segments.forEach(function(segment) { - if ((n = segment.length - 1) <= 0) return; - var n, p0 = segment[0], p1 = segment[n]; - if (d3_geo_sphericalEqual(p0, p1)) { - listener.lineStart(); - for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]); - listener.lineEnd(); - return; - } - var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false); - a.o = b; - subject.push(a); - clip.push(b); - a = new d3_geo_clipPolygonIntersection(p1, segment, null, false); - b = new d3_geo_clipPolygonIntersection(p1, null, a, true); - a.o = b; - subject.push(a); - clip.push(b); - }); - clip.sort(compare); - d3_geo_clipPolygonLinkCircular(subject); - d3_geo_clipPolygonLinkCircular(clip); - if (!subject.length) return; - for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) { - clip[i].e = entry = !entry; - } - var start = subject[0], points, point; - while (1) { - var current = start, isSubject = true; - while (current.v) if ((current = current.n) === start) return; - points = current.z; - listener.lineStart(); - do { - current.v = current.o.v = true; - if (current.e) { - if (isSubject) { - for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.n.x, 1, listener); - } - current = current.n; - } else { - if (isSubject) { - points = current.p.z; - for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.p.x, -1, listener); - } - current = current.p; - } - current = current.o; - points = current.z; - isSubject = !isSubject; - } while (!current.v); - listener.lineEnd(); - } - } - function d3_geo_clipPolygonLinkCircular(array) { - if (!(n = array.length)) return; - var n, i = 0, a = array[0], b; - while (++i < n) { - a.n = b = array[i]; - b.p = a; - a = b; - } - a.n = b = array[0]; - b.p = a; - } - function d3_geo_clipPolygonIntersection(point, points, other, entry) { - this.x = point; - this.z = points; - this.o = other; - this.e = entry; - this.v = false; - this.n = this.p = null; - } - function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) { - return function(rotate, listener) { - var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]); - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - clip.point = pointRing; - clip.lineStart = ringStart; - clip.lineEnd = ringEnd; - segments = []; - polygon = []; - }, - polygonEnd: function() { - clip.point = point; - clip.lineStart = lineStart; - clip.lineEnd = lineEnd; - segments = d3.merge(segments); - var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon); - if (segments.length) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener); - } else if (clipStartInside) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - } - if (polygonStarted) listener.polygonEnd(), polygonStarted = false; - segments = polygon = null; - }, - sphere: function() { - listener.polygonStart(); - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - listener.polygonEnd(); - } - }; - function point(λ, φ) { - var point = rotate(λ, φ); - if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ); - } - function pointLine(λ, φ) { - var point = rotate(λ, φ); - line.point(point[0], point[1]); - } - function lineStart() { - clip.point = pointLine; - line.lineStart(); - } - function lineEnd() { - clip.point = point; - line.lineEnd(); - } - var segments; - var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring; - function pointRing(λ, φ) { - ring.push([ λ, φ ]); - var point = rotate(λ, φ); - ringListener.point(point[0], point[1]); - } - function ringStart() { - ringListener.lineStart(); - ring = []; - } - function ringEnd() { - pointRing(ring[0][0], ring[0][1]); - ringListener.lineEnd(); - var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length; - ring.pop(); - polygon.push(ring); - ring = null; - if (!n) return; - if (clean & 1) { - segment = ringSegments[0]; - var n = segment.length - 1, i = -1, point; - if (n > 0) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - listener.lineStart(); - while (++i < n) listener.point((point = segment[i])[0], point[1]); - listener.lineEnd(); - } - return; - } - if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); - segments.push(ringSegments.filter(d3_geo_clipSegmentLength1)); - } - return clip; - }; - } - function d3_geo_clipSegmentLength1(segment) { - return segment.length > 1; - } - function d3_geo_clipBufferListener() { - var lines = [], line; - return { - lineStart: function() { - lines.push(line = []); - }, - point: function(λ, φ) { - line.push([ λ, φ ]); - }, - lineEnd: d3_noop, - buffer: function() { - var buffer = lines; - lines = []; - line = null; - return buffer; - }, - rejoin: function() { - if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); - } - }; - } - function d3_geo_clipSort(a, b) { - return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]); - } - var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]); - function d3_geo_clipAntimeridianLine(listener) { - var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean; - return { - lineStart: function() { - listener.lineStart(); - clean = 1; - }, - point: function(λ1, φ1) { - var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0); - if (abs(dλ - π) < ε) { - listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ); - listener.point(sλ0, φ0); - listener.lineEnd(); - listener.lineStart(); - listener.point(sλ1, φ0); - listener.point(λ1, φ0); - clean = 0; - } else if (sλ0 !== sλ1 && dλ >= π) { - if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε; - if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε; - φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1); - listener.point(sλ0, φ0); - listener.lineEnd(); - listener.lineStart(); - listener.point(sλ1, φ0); - clean = 0; - } - listener.point(λ0 = λ1, φ0 = φ1); - sλ0 = sλ1; - }, - lineEnd: function() { - listener.lineEnd(); - λ0 = φ0 = NaN; - }, - clean: function() { - return 2 - clean; - } - }; - } - function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) { - var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1); - return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2; - } - function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) { - var φ; - if (from == null) { - φ = direction * halfπ; - listener.point(-π, φ); - listener.point(0, φ); - listener.point(π, φ); - listener.point(π, 0); - listener.point(π, -φ); - listener.point(0, -φ); - listener.point(-π, -φ); - listener.point(-π, 0); - listener.point(-π, φ); - } else if (abs(from[0] - to[0]) > ε) { - var s = from[0] < to[0] ? π : -π; - φ = direction * s / 2; - listener.point(-s, φ); - listener.point(0, φ); - listener.point(s, φ); - } else { - listener.point(to[0], to[1]); - } - } - function d3_geo_pointInPolygon(point, polygon) { - var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0; - d3_geo_areaRingSum.reset(); - for (var i = 0, n = polygon.length; i < n; ++i) { - var ring = polygon[i], m = ring.length; - if (!m) continue; - var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1; - while (true) { - if (j === m) j = 0; - point = ring[j]; - var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ; - d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ))); - polarAngle += antimeridian ? dλ + sdλ * τ : dλ; - if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) { - var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point)); - d3_geo_cartesianNormalize(arc); - var intersection = d3_geo_cartesianCross(meridianNormal, arc); - d3_geo_cartesianNormalize(intersection); - var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]); - if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) { - winding += antimeridian ^ dλ >= 0 ? 1 : -1; - } - } - if (!j++) break; - λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point; - } - } - return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < -ε) ^ winding & 1; - } - function d3_geo_clipCircle(radius) { - var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians); - return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]); - function visible(λ, φ) { - return Math.cos(λ) * Math.cos(φ) > cr; - } - function clipLine(listener) { - var point0, c0, v0, v00, clean; - return { - lineStart: function() { - v00 = v0 = false; - clean = 1; - }, - point: function(λ, φ) { - var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0; - if (!point0 && (v00 = v0 = v)) listener.lineStart(); - if (v !== v0) { - point2 = intersect(point0, point1); - if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) { - point1[0] += ε; - point1[1] += ε; - v = visible(point1[0], point1[1]); - } - } - if (v !== v0) { - clean = 0; - if (v) { - listener.lineStart(); - point2 = intersect(point1, point0); - listener.point(point2[0], point2[1]); - } else { - point2 = intersect(point0, point1); - listener.point(point2[0], point2[1]); - listener.lineEnd(); - } - point0 = point2; - } else if (notHemisphere && point0 && smallRadius ^ v) { - var t; - if (!(c & c0) && (t = intersect(point1, point0, true))) { - clean = 0; - if (smallRadius) { - listener.lineStart(); - listener.point(t[0][0], t[0][1]); - listener.point(t[1][0], t[1][1]); - listener.lineEnd(); - } else { - listener.point(t[1][0], t[1][1]); - listener.lineEnd(); - listener.lineStart(); - listener.point(t[0][0], t[0][1]); - } - } - } - if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) { - listener.point(point1[0], point1[1]); - } - point0 = point1, v0 = v, c0 = c; - }, - lineEnd: function() { - if (v0) listener.lineEnd(); - point0 = null; - }, - clean: function() { - return clean | (v00 && v0) << 1; - } - }; - } - function intersect(a, b, two) { - var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b); - var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2; - if (!determinant) return !two && a; - var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2); - d3_geo_cartesianAdd(A, B); - var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1); - if (t2 < 0) return; - var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu); - d3_geo_cartesianAdd(q, A); - q = d3_geo_spherical(q); - if (!two) return q; - var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z; - if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z; - var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε; - if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z; - if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) { - var q1 = d3_geo_cartesianScale(u, (-w + t) / uu); - d3_geo_cartesianAdd(q1, A); - return [ q, d3_geo_spherical(q1) ]; - } - } - function code(λ, φ) { - var r = smallRadius ? radius : π - radius, code = 0; - if (λ < -r) code |= 1; else if (λ > r) code |= 2; - if (φ < -r) code |= 4; else if (φ > r) code |= 8; - return code; - } - } - function d3_geom_clipLine(x0, y0, x1, y1) { - return function(line) { - var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r; - r = x0 - ax; - if (!dx && r > 0) return; - r /= dx; - if (dx < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dx > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - r = x1 - ax; - if (!dx && r < 0) return; - r /= dx; - if (dx < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dx > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - r = y0 - ay; - if (!dy && r > 0) return; - r /= dy; - if (dy < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dy > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - r = y1 - ay; - if (!dy && r < 0) return; - r /= dy; - if (dy < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dy > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - if (t0 > 0) line.a = { - x: ax + t0 * dx, - y: ay + t0 * dy - }; - if (t1 < 1) line.b = { - x: ax + t1 * dx, - y: ay + t1 * dy - }; - return line; - }; - } - var d3_geo_clipExtentMAX = 1e9; - d3.geo.clipExtent = function() { - var x0, y0, x1, y1, stream, clip, clipExtent = { - stream: function(output) { - if (stream) stream.valid = false; - stream = clip(output); - stream.valid = true; - return stream; - }, - extent: function(_) { - if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; - clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]); - if (stream) stream.valid = false, stream = null; - return clipExtent; - } - }; - return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]); - }; - function d3_geo_clipExtent(x0, y0, x1, y1) { - return function(listener) { - var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring; - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - listener = bufferListener; - segments = []; - polygon = []; - clean = true; - }, - polygonEnd: function() { - listener = listener_; - segments = d3.merge(segments); - var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length; - if (inside || visible) { - listener.polygonStart(); - if (inside) { - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - } - if (visible) { - d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener); - } - listener.polygonEnd(); - } - segments = polygon = ring = null; - } - }; - function insidePolygon(p) { - var wn = 0, n = polygon.length, y = p[1]; - for (var i = 0; i < n; ++i) { - for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) { - b = v[j]; - if (a[1] <= y) { - if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn; - } else { - if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn; - } - a = b; - } - } - return wn !== 0; - } - function interpolate(from, to, direction, listener) { - var a = 0, a1 = 0; - if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) { - do { - listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); - } while ((a = (a + direction + 4) % 4) !== a1); - } else { - listener.point(to[0], to[1]); - } - } - function pointVisible(x, y) { - return x0 <= x && x <= x1 && y0 <= y && y <= y1; - } - function point(x, y) { - if (pointVisible(x, y)) listener.point(x, y); - } - var x__, y__, v__, x_, y_, v_, first, clean; - function lineStart() { - clip.point = linePoint; - if (polygon) polygon.push(ring = []); - first = true; - v_ = false; - x_ = y_ = NaN; - } - function lineEnd() { - if (segments) { - linePoint(x__, y__); - if (v__ && v_) bufferListener.rejoin(); - segments.push(bufferListener.buffer()); - } - clip.point = point; - if (v_) listener.lineEnd(); - } - function linePoint(x, y) { - x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x)); - y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y)); - var v = pointVisible(x, y); - if (polygon) ring.push([ x, y ]); - if (first) { - x__ = x, y__ = y, v__ = v; - first = false; - if (v) { - listener.lineStart(); - listener.point(x, y); - } - } else { - if (v && v_) listener.point(x, y); else { - var l = { - a: { - x: x_, - y: y_ - }, - b: { - x: x, - y: y - } - }; - if (clipLine(l)) { - if (!v_) { - listener.lineStart(); - listener.point(l.a.x, l.a.y); - } - listener.point(l.b.x, l.b.y); - if (!v) listener.lineEnd(); - clean = false; - } else if (v) { - listener.lineStart(); - listener.point(x, y); - clean = false; - } - } - } - x_ = x, y_ = y, v_ = v; - } - return clip; - }; - function corner(p, direction) { - return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2; - } - function compare(a, b) { - return comparePoints(a.x, b.x); - } - function comparePoints(a, b) { - var ca = corner(a, 1), cb = corner(b, 1); - return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0]; - } - } - function d3_geo_conic(projectAt) { - var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1); - p.parallels = function(_) { - if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ]; - return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180); - }; - return p; - } - function d3_geo_conicEqualArea(φ0, φ1) { - var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n; - function forward(λ, φ) { - var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n; - return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = ρ0 - y; - return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ]; - }; - return forward; - } - (d3.geo.conicEqualArea = function() { - return d3_geo_conic(d3_geo_conicEqualArea); - }).raw = d3_geo_conicEqualArea; - d3.geo.albers = function() { - return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070); - }; - d3.geo.albersUsa = function() { - var lower48 = d3.geo.albers(); - var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]); - var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]); - var point, pointStream = { - point: function(x, y) { - point = [ x, y ]; - } - }, lower48Point, alaskaPoint, hawaiiPoint; - function albersUsa(coordinates) { - var x = coordinates[0], y = coordinates[1]; - point = null; - (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y); - return point; - } - albersUsa.invert = function(coordinates) { - var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k; - return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates); - }; - albersUsa.stream = function(stream) { - var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream); - return { - point: function(x, y) { - lower48Stream.point(x, y); - alaskaStream.point(x, y); - hawaiiStream.point(x, y); - }, - sphere: function() { - lower48Stream.sphere(); - alaskaStream.sphere(); - hawaiiStream.sphere(); - }, - lineStart: function() { - lower48Stream.lineStart(); - alaskaStream.lineStart(); - hawaiiStream.lineStart(); - }, - lineEnd: function() { - lower48Stream.lineEnd(); - alaskaStream.lineEnd(); - hawaiiStream.lineEnd(); - }, - polygonStart: function() { - lower48Stream.polygonStart(); - alaskaStream.polygonStart(); - hawaiiStream.polygonStart(); - }, - polygonEnd: function() { - lower48Stream.polygonEnd(); - alaskaStream.polygonEnd(); - hawaiiStream.polygonEnd(); - } - }; - }; - albersUsa.precision = function(_) { - if (!arguments.length) return lower48.precision(); - lower48.precision(_); - alaska.precision(_); - hawaii.precision(_); - return albersUsa; - }; - albersUsa.scale = function(_) { - if (!arguments.length) return lower48.scale(); - lower48.scale(_); - alaska.scale(_ * .35); - hawaii.scale(_); - return albersUsa.translate(lower48.translate()); - }; - albersUsa.translate = function(_) { - if (!arguments.length) return lower48.translate(); - var k = lower48.scale(), x = +_[0], y = +_[1]; - lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point; - alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point; - hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point; - return albersUsa; - }; - return albersUsa.scale(1070); - }; - var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = { - point: d3_noop, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: function() { - d3_geo_pathAreaPolygon = 0; - d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart; - }, - polygonEnd: function() { - d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop; - d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2); - } - }; - function d3_geo_pathAreaRingStart() { - var x00, y00, x0, y0; - d3_geo_pathArea.point = function(x, y) { - d3_geo_pathArea.point = nextPoint; - x00 = x0 = x, y00 = y0 = y; - }; - function nextPoint(x, y) { - d3_geo_pathAreaPolygon += y0 * x - x0 * y; - x0 = x, y0 = y; - } - d3_geo_pathArea.lineEnd = function() { - nextPoint(x00, y00); - }; - } - var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1; - var d3_geo_pathBounds = { - point: d3_geo_pathBoundsPoint, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: d3_noop, - polygonEnd: d3_noop - }; - function d3_geo_pathBoundsPoint(x, y) { - if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x; - if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x; - if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y; - if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y; - } - function d3_geo_pathBuffer() { - var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = []; - var stream = { - point: point, - lineStart: function() { - stream.point = pointLineStart; - }, - lineEnd: lineEnd, - polygonStart: function() { - stream.lineEnd = lineEndPolygon; - }, - polygonEnd: function() { - stream.lineEnd = lineEnd; - stream.point = point; - }, - pointRadius: function(_) { - pointCircle = d3_geo_pathBufferCircle(_); - return stream; - }, - result: function() { - if (buffer.length) { - var result = buffer.join(""); - buffer = []; - return result; - } - } - }; - function point(x, y) { - buffer.push("M", x, ",", y, pointCircle); - } - function pointLineStart(x, y) { - buffer.push("M", x, ",", y); - stream.point = pointLine; - } - function pointLine(x, y) { - buffer.push("L", x, ",", y); - } - function lineEnd() { - stream.point = point; - } - function lineEndPolygon() { - buffer.push("Z"); - } - return stream; - } - function d3_geo_pathBufferCircle(radius) { - return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z"; - } - var d3_geo_pathCentroid = { - point: d3_geo_pathCentroidPoint, - lineStart: d3_geo_pathCentroidLineStart, - lineEnd: d3_geo_pathCentroidLineEnd, - polygonStart: function() { - d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart; - }, - polygonEnd: function() { - d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; - d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart; - d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd; - } - }; - function d3_geo_pathCentroidPoint(x, y) { - d3_geo_centroidX0 += x; - d3_geo_centroidY0 += y; - ++d3_geo_centroidZ0; - } - function d3_geo_pathCentroidLineStart() { - var x0, y0; - d3_geo_pathCentroid.point = function(x, y) { - d3_geo_pathCentroid.point = nextPoint; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - }; - function nextPoint(x, y) { - var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); - d3_geo_centroidX1 += z * (x0 + x) / 2; - d3_geo_centroidY1 += z * (y0 + y) / 2; - d3_geo_centroidZ1 += z; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - } - } - function d3_geo_pathCentroidLineEnd() { - d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; - } - function d3_geo_pathCentroidRingStart() { - var x00, y00, x0, y0; - d3_geo_pathCentroid.point = function(x, y) { - d3_geo_pathCentroid.point = nextPoint; - d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y); - }; - function nextPoint(x, y) { - var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); - d3_geo_centroidX1 += z * (x0 + x) / 2; - d3_geo_centroidY1 += z * (y0 + y) / 2; - d3_geo_centroidZ1 += z; - z = y0 * x - x0 * y; - d3_geo_centroidX2 += z * (x0 + x); - d3_geo_centroidY2 += z * (y0 + y); - d3_geo_centroidZ2 += z * 3; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - } - d3_geo_pathCentroid.lineEnd = function() { - nextPoint(x00, y00); - }; - } - function d3_geo_pathContext(context) { - var pointRadius = 4.5; - var stream = { - point: point, - lineStart: function() { - stream.point = pointLineStart; - }, - lineEnd: lineEnd, - polygonStart: function() { - stream.lineEnd = lineEndPolygon; - }, - polygonEnd: function() { - stream.lineEnd = lineEnd; - stream.point = point; - }, - pointRadius: function(_) { - pointRadius = _; - return stream; - }, - result: d3_noop - }; - function point(x, y) { - context.moveTo(x + pointRadius, y); - context.arc(x, y, pointRadius, 0, τ); - } - function pointLineStart(x, y) { - context.moveTo(x, y); - stream.point = pointLine; - } - function pointLine(x, y) { - context.lineTo(x, y); - } - function lineEnd() { - stream.point = point; - } - function lineEndPolygon() { - context.closePath(); - } - return stream; - } - function d3_geo_resample(project) { - var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16; - function resample(stream) { - return (maxDepth ? resampleRecursive : resampleNone)(stream); - } - function resampleNone(stream) { - return d3_geo_transformPoint(stream, function(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - }); - } - function resampleRecursive(stream) { - var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0; - var resample = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - stream.polygonStart(); - resample.lineStart = ringStart; - }, - polygonEnd: function() { - stream.polygonEnd(); - resample.lineStart = lineStart; - } - }; - function point(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - } - function lineStart() { - x0 = NaN; - resample.point = linePoint; - stream.lineStart(); - } - function linePoint(λ, φ) { - var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ); - resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); - stream.point(x0, y0); - } - function lineEnd() { - resample.point = point; - stream.lineEnd(); - } - function ringStart() { - lineStart(); - resample.point = ringPoint; - resample.lineEnd = ringEnd; - } - function ringPoint(λ, φ) { - linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; - resample.point = linePoint; - } - function ringEnd() { - resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream); - resample.lineEnd = lineEnd; - lineEnd(); - } - return resample; - } - function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) { - var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy; - if (d2 > 4 * δ2 && depth--) { - var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2; - if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { - resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream); - stream.point(x2, y2); - resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream); - } - } - } - resample.precision = function(_) { - if (!arguments.length) return Math.sqrt(δ2); - maxDepth = (δ2 = _ * _) > 0 && 16; - return resample; - }; - return resample; - } - d3.geo.path = function() { - var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream; - function path(object) { - if (object) { - if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); - if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream); - d3.geo.stream(object, cacheStream); - } - return contextStream.result(); - } - path.area = function(object) { - d3_geo_pathAreaSum = 0; - d3.geo.stream(object, projectStream(d3_geo_pathArea)); - return d3_geo_pathAreaSum; - }; - path.centroid = function(object) { - d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0; - d3.geo.stream(object, projectStream(d3_geo_pathCentroid)); - return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ]; - }; - path.bounds = function(object) { - d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity); - d3.geo.stream(object, projectStream(d3_geo_pathBounds)); - return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ]; - }; - path.projection = function(_) { - if (!arguments.length) return projection; - projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity; - return reset(); - }; - path.context = function(_) { - if (!arguments.length) return context; - contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_); - if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); - return reset(); - }; - path.pointRadius = function(_) { - if (!arguments.length) return pointRadius; - pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); - return path; - }; - function reset() { - cacheStream = null; - return path; - } - return path.projection(d3.geo.albersUsa()).context(null); - }; - function d3_geo_pathProjectStream(project) { - var resample = d3_geo_resample(function(x, y) { - return project([ x * d3_degrees, y * d3_degrees ]); - }); - return function(stream) { - return d3_geo_projectionRadians(resample(stream)); - }; - } - d3.geo.transform = function(methods) { - return { - stream: function(stream) { - var transform = new d3_geo_transform(stream); - for (var k in methods) transform[k] = methods[k]; - return transform; - } - }; - }; - function d3_geo_transform(stream) { - this.stream = stream; - } - d3_geo_transform.prototype = { - point: function(x, y) { - this.stream.point(x, y); - }, - sphere: function() { - this.stream.sphere(); - }, - lineStart: function() { - this.stream.lineStart(); - }, - lineEnd: function() { - this.stream.lineEnd(); - }, - polygonStart: function() { - this.stream.polygonStart(); - }, - polygonEnd: function() { - this.stream.polygonEnd(); - } - }; - function d3_geo_transformPoint(stream, point) { - return { - point: point, - sphere: function() { - stream.sphere(); - }, - lineStart: function() { - stream.lineStart(); - }, - lineEnd: function() { - stream.lineEnd(); - }, - polygonStart: function() { - stream.polygonStart(); - }, - polygonEnd: function() { - stream.polygonEnd(); - } - }; - } - d3.geo.projection = d3_geo_projection; - d3.geo.projectionMutator = d3_geo_projectionMutator; - function d3_geo_projection(project) { - return d3_geo_projectionMutator(function() { - return project; - })(); - } - function d3_geo_projectionMutator(projectAt) { - var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) { - x = project(x, y); - return [ x[0] * k + δx, δy - x[1] * k ]; - }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream; - function projection(point) { - point = projectRotate(point[0] * d3_radians, point[1] * d3_radians); - return [ point[0] * k + δx, δy - point[1] * k ]; - } - function invert(point) { - point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k); - return point && [ point[0] * d3_degrees, point[1] * d3_degrees ]; - } - projection.stream = function(output) { - if (stream) stream.valid = false; - stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output)))); - stream.valid = true; - return stream; - }; - projection.clipAngle = function(_) { - if (!arguments.length) return clipAngle; - preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians); - return invalidate(); - }; - projection.clipExtent = function(_) { - if (!arguments.length) return clipExtent; - clipExtent = _; - postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity; - return invalidate(); - }; - projection.scale = function(_) { - if (!arguments.length) return k; - k = +_; - return reset(); - }; - projection.translate = function(_) { - if (!arguments.length) return [ x, y ]; - x = +_[0]; - y = +_[1]; - return reset(); - }; - projection.center = function(_) { - if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ]; - λ = _[0] % 360 * d3_radians; - φ = _[1] % 360 * d3_radians; - return reset(); - }; - projection.rotate = function(_) { - if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ]; - δλ = _[0] % 360 * d3_radians; - δφ = _[1] % 360 * d3_radians; - δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0; - return reset(); - }; - d3.rebind(projection, projectResample, "precision"); - function reset() { - projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project); - var center = project(λ, φ); - δx = x - center[0] * k; - δy = y + center[1] * k; - return invalidate(); - } - function invalidate() { - if (stream) stream.valid = false, stream = null; - return projection; - } - return function() { - project = projectAt.apply(this, arguments); - projection.invert = project.invert && invert; - return reset(); - }; - } - function d3_geo_projectionRadians(stream) { - return d3_geo_transformPoint(stream, function(x, y) { - stream.point(x * d3_radians, y * d3_radians); - }); - } - function d3_geo_equirectangular(λ, φ) { - return [ λ, φ ]; - } - (d3.geo.equirectangular = function() { - return d3_geo_projection(d3_geo_equirectangular); - }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular; - d3.geo.rotation = function(rotate) { - rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0); - function forward(coordinates) { - coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians); - return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; - } - forward.invert = function(coordinates) { - coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians); - return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; - }; - return forward; - }; - function d3_geo_identityRotation(λ, φ) { - return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; - } - d3_geo_identityRotation.invert = d3_geo_equirectangular; - function d3_geo_rotation(δλ, δφ, δγ) { - return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation; - } - function d3_geo_forwardRotationλ(δλ) { - return function(λ, φ) { - return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; - }; - } - function d3_geo_rotationλ(δλ) { - var rotation = d3_geo_forwardRotationλ(δλ); - rotation.invert = d3_geo_forwardRotationλ(-δλ); - return rotation; - } - function d3_geo_rotationφγ(δφ, δγ) { - var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ); - function rotation(λ, φ) { - var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ; - return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ]; - } - rotation.invert = function(λ, φ) { - var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ; - return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ]; - }; - return rotation; - } - d3.geo.circle = function() { - var origin = [ 0, 0 ], angle, precision = 6, interpolate; - function circle() { - var center = typeof origin === "function" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = []; - interpolate(null, null, 1, { - point: function(x, y) { - ring.push(x = rotate(x, y)); - x[0] *= d3_degrees, x[1] *= d3_degrees; - } - }); - return { - type: "Polygon", - coordinates: [ ring ] - }; - } - circle.origin = function(x) { - if (!arguments.length) return origin; - origin = x; - return circle; - }; - circle.angle = function(x) { - if (!arguments.length) return angle; - interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians); - return circle; - }; - circle.precision = function(_) { - if (!arguments.length) return precision; - interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians); - return circle; - }; - return circle.angle(90); - }; - function d3_geo_circleInterpolate(radius, precision) { - var cr = Math.cos(radius), sr = Math.sin(radius); - return function(from, to, direction, listener) { - var step = direction * precision; - if (from != null) { - from = d3_geo_circleAngle(cr, from); - to = d3_geo_circleAngle(cr, to); - if (direction > 0 ? from < to : from > to) from += direction * τ; - } else { - from = radius + direction * τ; - to = radius - .5 * step; - } - for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) { - listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]); - } - }; - } - function d3_geo_circleAngle(cr, point) { - var a = d3_geo_cartesian(point); - a[0] -= cr; - d3_geo_cartesianNormalize(a); - var angle = d3_acos(-a[1]); - return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI); - } - d3.geo.distance = function(a, b) { - var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t; - return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ); - }; - d3.geo.graticule = function() { - var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5; - function graticule() { - return { - type: "MultiLineString", - coordinates: lines() - }; - } - function lines() { - return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) { - return abs(x % DX) > ε; - }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) { - return abs(y % DY) > ε; - }).map(y)); - } - graticule.lines = function() { - return lines().map(function(coordinates) { - return { - type: "LineString", - coordinates: coordinates - }; - }); - }; - graticule.outline = function() { - return { - type: "Polygon", - coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ] - }; - }; - graticule.extent = function(_) { - if (!arguments.length) return graticule.minorExtent(); - return graticule.majorExtent(_).minorExtent(_); - }; - graticule.majorExtent = function(_) { - if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ]; - X0 = +_[0][0], X1 = +_[1][0]; - Y0 = +_[0][1], Y1 = +_[1][1]; - if (X0 > X1) _ = X0, X0 = X1, X1 = _; - if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; - return graticule.precision(precision); - }; - graticule.minorExtent = function(_) { - if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; - x0 = +_[0][0], x1 = +_[1][0]; - y0 = +_[0][1], y1 = +_[1][1]; - if (x0 > x1) _ = x0, x0 = x1, x1 = _; - if (y0 > y1) _ = y0, y0 = y1, y1 = _; - return graticule.precision(precision); - }; - graticule.step = function(_) { - if (!arguments.length) return graticule.minorStep(); - return graticule.majorStep(_).minorStep(_); - }; - graticule.majorStep = function(_) { - if (!arguments.length) return [ DX, DY ]; - DX = +_[0], DY = +_[1]; - return graticule; - }; - graticule.minorStep = function(_) { - if (!arguments.length) return [ dx, dy ]; - dx = +_[0], dy = +_[1]; - return graticule; - }; - graticule.precision = function(_) { - if (!arguments.length) return precision; - precision = +_; - x = d3_geo_graticuleX(y0, y1, 90); - y = d3_geo_graticuleY(x0, x1, precision); - X = d3_geo_graticuleX(Y0, Y1, 90); - Y = d3_geo_graticuleY(X0, X1, precision); - return graticule; - }; - return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]); - }; - function d3_geo_graticuleX(y0, y1, dy) { - var y = d3.range(y0, y1 - ε, dy).concat(y1); - return function(x) { - return y.map(function(y) { - return [ x, y ]; - }); - }; - } - function d3_geo_graticuleY(x0, x1, dx) { - var x = d3.range(x0, x1 - ε, dx).concat(x1); - return function(y) { - return x.map(function(x) { - return [ x, y ]; - }); - }; - } - function d3_source(d) { - return d.source; - } - function d3_target(d) { - return d.target; - } - d3.geo.greatArc = function() { - var source = d3_source, source_, target = d3_target, target_; - function greatArc() { - return { - type: "LineString", - coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ] - }; - } - greatArc.distance = function() { - return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments)); - }; - greatArc.source = function(_) { - if (!arguments.length) return source; - source = _, source_ = typeof _ === "function" ? null : _; - return greatArc; - }; - greatArc.target = function(_) { - if (!arguments.length) return target; - target = _, target_ = typeof _ === "function" ? null : _; - return greatArc; - }; - greatArc.precision = function() { - return arguments.length ? greatArc : 0; - }; - return greatArc; - }; - d3.geo.interpolate = function(source, target) { - return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians); - }; - function d3_geo_interpolate(x0, y0, x1, y1) { - var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d); - var interpolate = d ? function(t) { - var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1; - return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ]; - } : function() { - return [ x0 * d3_degrees, y0 * d3_degrees ]; - }; - interpolate.distance = d; - return interpolate; - } - d3.geo.length = function(object) { - d3_geo_lengthSum = 0; - d3.geo.stream(object, d3_geo_length); - return d3_geo_lengthSum; - }; - var d3_geo_lengthSum; - var d3_geo_length = { - sphere: d3_noop, - point: d3_noop, - lineStart: d3_geo_lengthLineStart, - lineEnd: d3_noop, - polygonStart: d3_noop, - polygonEnd: d3_noop - }; - function d3_geo_lengthLineStart() { - var λ0, sinφ0, cosφ0; - d3_geo_length.point = function(λ, φ) { - λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ); - d3_geo_length.point = nextPoint; - }; - d3_geo_length.lineEnd = function() { - d3_geo_length.point = d3_geo_length.lineEnd = d3_noop; - }; - function nextPoint(λ, φ) { - var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t); - d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ); - λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ; - } - } - function d3_geo_azimuthal(scale, angle) { - function azimuthal(λ, φ) { - var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ); - return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ]; - } - azimuthal.invert = function(x, y) { - var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c); - return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ]; - }; - return azimuthal; - } - var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) { - return Math.sqrt(2 / (1 + cosλcosφ)); - }, function(ρ) { - return 2 * Math.asin(ρ / 2); - }); - (d3.geo.azimuthalEqualArea = function() { - return d3_geo_projection(d3_geo_azimuthalEqualArea); - }).raw = d3_geo_azimuthalEqualArea; - var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) { - var c = Math.acos(cosλcosφ); - return c && c / Math.sin(c); - }, d3_identity); - (d3.geo.azimuthalEquidistant = function() { - return d3_geo_projection(d3_geo_azimuthalEquidistant); - }).raw = d3_geo_azimuthalEquidistant; - function d3_geo_conicConformal(φ0, φ1) { - var cosφ0 = Math.cos(φ0), t = function(φ) { - return Math.tan(π / 4 + φ / 2); - }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n; - if (!n) return d3_geo_mercator; - function forward(λ, φ) { - if (F > 0) { - if (φ < -halfπ + ε) φ = -halfπ + ε; - } else { - if (φ > halfπ - ε) φ = halfπ - ε; - } - var ρ = F / Math.pow(t(φ), n); - return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y); - return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ]; - }; - return forward; - } - (d3.geo.conicConformal = function() { - return d3_geo_conic(d3_geo_conicConformal); - }).raw = d3_geo_conicConformal; - function d3_geo_conicEquidistant(φ0, φ1) { - var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0; - if (abs(n) < ε) return d3_geo_equirectangular; - function forward(λ, φ) { - var ρ = G - φ; - return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = G - y; - return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ]; - }; - return forward; - } - (d3.geo.conicEquidistant = function() { - return d3_geo_conic(d3_geo_conicEquidistant); - }).raw = d3_geo_conicEquidistant; - var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) { - return 1 / cosλcosφ; - }, Math.atan); - (d3.geo.gnomonic = function() { - return d3_geo_projection(d3_geo_gnomonic); - }).raw = d3_geo_gnomonic; - function d3_geo_mercator(λ, φ) { - return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ]; - } - d3_geo_mercator.invert = function(x, y) { - return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ]; - }; - function d3_geo_mercatorProjection(project) { - var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto; - m.scale = function() { - var v = scale.apply(m, arguments); - return v === m ? clipAuto ? m.clipExtent(null) : m : v; - }; - m.translate = function() { - var v = translate.apply(m, arguments); - return v === m ? clipAuto ? m.clipExtent(null) : m : v; - }; - m.clipExtent = function(_) { - var v = clipExtent.apply(m, arguments); - if (v === m) { - if (clipAuto = _ == null) { - var k = π * scale(), t = translate(); - clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]); - } - } else if (clipAuto) { - v = null; - } - return v; - }; - return m.clipExtent(null); - } - (d3.geo.mercator = function() { - return d3_geo_mercatorProjection(d3_geo_mercator); - }).raw = d3_geo_mercator; - var d3_geo_orthographic = d3_geo_azimuthal(function() { - return 1; - }, Math.asin); - (d3.geo.orthographic = function() { - return d3_geo_projection(d3_geo_orthographic); - }).raw = d3_geo_orthographic; - var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) { - return 1 / (1 + cosλcosφ); - }, function(ρ) { - return 2 * Math.atan(ρ); - }); - (d3.geo.stereographic = function() { - return d3_geo_projection(d3_geo_stereographic); - }).raw = d3_geo_stereographic; - function d3_geo_transverseMercator(λ, φ) { - return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ]; - } - d3_geo_transverseMercator.invert = function(x, y) { - return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ]; - }; - (d3.geo.transverseMercator = function() { - var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate; - projection.center = function(_) { - return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]); - }; - projection.rotate = function(_) { - return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), - [ _[0], _[1], _[2] - 90 ]); - }; - return rotate([ 0, 0, 90 ]); - }).raw = d3_geo_transverseMercator; - d3.geom = {}; - function d3_geom_pointX(d) { - return d[0]; - } - function d3_geom_pointY(d) { - return d[1]; - } - d3.geom.hull = function(vertices) { - var x = d3_geom_pointX, y = d3_geom_pointY; - if (arguments.length) return hull(vertices); - function hull(data) { - if (data.length < 3) return []; - var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = []; - for (i = 0; i < n; i++) { - points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]); - } - points.sort(d3_geom_hullOrder); - for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]); - var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints); - var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = []; - for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]); - for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]); - return polygon; - } - hull.x = function(_) { - return arguments.length ? (x = _, hull) : x; - }; - hull.y = function(_) { - return arguments.length ? (y = _, hull) : y; - }; - return hull; - }; - function d3_geom_hullUpper(points) { - var n = points.length, hull = [ 0, 1 ], hs = 2; - for (var i = 2; i < n; i++) { - while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs; - hull[hs++] = i; - } - return hull.slice(0, hs); - } - function d3_geom_hullOrder(a, b) { - return a[0] - b[0] || a[1] - b[1]; - } - d3.geom.polygon = function(coordinates) { - d3_subclass(coordinates, d3_geom_polygonPrototype); - return coordinates; - }; - var d3_geom_polygonPrototype = d3.geom.polygon.prototype = []; - d3_geom_polygonPrototype.area = function() { - var i = -1, n = this.length, a, b = this[n - 1], area = 0; - while (++i < n) { - a = b; - b = this[i]; - area += a[1] * b[0] - a[0] * b[1]; - } - return area * .5; - }; - d3_geom_polygonPrototype.centroid = function(k) { - var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c; - if (!arguments.length) k = -1 / (6 * this.area()); - while (++i < n) { - a = b; - b = this[i]; - c = a[0] * b[1] - b[0] * a[1]; - x += (a[0] + b[0]) * c; - y += (a[1] + b[1]) * c; - } - return [ x * k, y * k ]; - }; - d3_geom_polygonPrototype.clip = function(subject) { - var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d; - while (++i < n) { - input = subject.slice(); - subject.length = 0; - b = this[i]; - c = input[(m = input.length - closed) - 1]; - j = -1; - while (++j < m) { - d = input[j]; - if (d3_geom_polygonInside(d, a, b)) { - if (!d3_geom_polygonInside(c, a, b)) { - subject.push(d3_geom_polygonIntersect(c, d, a, b)); - } - subject.push(d); - } else if (d3_geom_polygonInside(c, a, b)) { - subject.push(d3_geom_polygonIntersect(c, d, a, b)); - } - c = d; - } - if (closed) subject.push(subject[0]); - a = b; - } - return subject; - }; - function d3_geom_polygonInside(p, a, b) { - return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]); - } - function d3_geom_polygonIntersect(c, d, a, b) { - var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21); - return [ x1 + ua * x21, y1 + ua * y21 ]; - } - function d3_geom_polygonClosed(coordinates) { - var a = coordinates[0], b = coordinates[coordinates.length - 1]; - return !(a[0] - b[0] || a[1] - b[1]); - } - var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = []; - function d3_geom_voronoiBeach() { - d3_geom_voronoiRedBlackNode(this); - this.edge = this.site = this.circle = null; - } - function d3_geom_voronoiCreateBeach(site) { - var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach(); - beach.site = site; - return beach; - } - function d3_geom_voronoiDetachBeach(beach) { - d3_geom_voronoiDetachCircle(beach); - d3_geom_voronoiBeaches.remove(beach); - d3_geom_voronoiBeachPool.push(beach); - d3_geom_voronoiRedBlackNode(beach); - } - function d3_geom_voronoiRemoveBeach(beach) { - var circle = beach.circle, x = circle.x, y = circle.cy, vertex = { - x: x, - y: y - }, previous = beach.P, next = beach.N, disappearing = [ beach ]; - d3_geom_voronoiDetachBeach(beach); - var lArc = previous; - while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) { - previous = lArc.P; - disappearing.unshift(lArc); - d3_geom_voronoiDetachBeach(lArc); - lArc = previous; - } - disappearing.unshift(lArc); - d3_geom_voronoiDetachCircle(lArc); - var rArc = next; - while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) { - next = rArc.N; - disappearing.push(rArc); - d3_geom_voronoiDetachBeach(rArc); - rArc = next; - } - disappearing.push(rArc); - d3_geom_voronoiDetachCircle(rArc); - var nArcs = disappearing.length, iArc; - for (iArc = 1; iArc < nArcs; ++iArc) { - rArc = disappearing[iArc]; - lArc = disappearing[iArc - 1]; - d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex); - } - lArc = disappearing[0]; - rArc = disappearing[nArcs - 1]; - rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - } - function d3_geom_voronoiAddBeach(site) { - var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._; - while (node) { - dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x; - if (dxl > ε) node = node.L; else { - dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix); - if (dxr > ε) { - if (!node.R) { - lArc = node; - break; - } - node = node.R; - } else { - if (dxl > -ε) { - lArc = node.P; - rArc = node; - } else if (dxr > -ε) { - lArc = node; - rArc = node.N; - } else { - lArc = rArc = node; - } - break; - } - } - } - var newArc = d3_geom_voronoiCreateBeach(site); - d3_geom_voronoiBeaches.insert(lArc, newArc); - if (!lArc && !rArc) return; - if (lArc === rArc) { - d3_geom_voronoiDetachCircle(lArc); - rArc = d3_geom_voronoiCreateBeach(lArc.site); - d3_geom_voronoiBeaches.insert(newArc, rArc); - newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - return; - } - if (!rArc) { - newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); - return; - } - d3_geom_voronoiDetachCircle(lArc); - d3_geom_voronoiDetachCircle(rArc); - var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = { - x: (cy * hb - by * hc) / d + ax, - y: (bx * hc - cx * hb) / d + ay - }; - d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex); - newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex); - rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - } - function d3_geom_voronoiLeftBreakPoint(arc, directrix) { - var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix; - if (!pby2) return rfocx; - var lArc = arc.P; - if (!lArc) return -Infinity; - site = lArc.site; - var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix; - if (!plby2) return lfocx; - var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2; - if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; - return (rfocx + lfocx) / 2; - } - function d3_geom_voronoiRightBreakPoint(arc, directrix) { - var rArc = arc.N; - if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix); - var site = arc.site; - return site.y === directrix ? site.x : Infinity; - } - function d3_geom_voronoiCell(site) { - this.site = site; - this.edges = []; - } - d3_geom_voronoiCell.prototype.prepare = function() { - var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge; - while (iHalfEdge--) { - edge = halfEdges[iHalfEdge].edge; - if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1); - } - halfEdges.sort(d3_geom_voronoiHalfEdgeOrder); - return halfEdges.length; - }; - function d3_geom_voronoiCloseCells(extent) { - var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end; - while (iCell--) { - cell = cells[iCell]; - if (!cell || !cell.prepare()) continue; - halfEdges = cell.edges; - nHalfEdges = halfEdges.length; - iHalfEdge = 0; - while (iHalfEdge < nHalfEdges) { - end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y; - start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y; - if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) { - halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? { - x: x0, - y: abs(x2 - x0) < ε ? y2 : y1 - } : abs(y3 - y1) < ε && x1 - x3 > ε ? { - x: abs(y2 - y1) < ε ? x2 : x1, - y: y1 - } : abs(x3 - x1) < ε && y3 - y0 > ε ? { - x: x1, - y: abs(x2 - x1) < ε ? y2 : y0 - } : abs(y3 - y0) < ε && x3 - x0 > ε ? { - x: abs(y2 - y0) < ε ? x2 : x0, - y: y0 - } : null), cell.site, null)); - ++nHalfEdges; - } - } - } - } - function d3_geom_voronoiHalfEdgeOrder(a, b) { - return b.angle - a.angle; - } - function d3_geom_voronoiCircle() { - d3_geom_voronoiRedBlackNode(this); - this.x = this.y = this.arc = this.site = this.cy = null; - } - function d3_geom_voronoiAttachCircle(arc) { - var lArc = arc.P, rArc = arc.N; - if (!lArc || !rArc) return; - var lSite = lArc.site, cSite = arc.site, rSite = rArc.site; - if (lSite === rSite) return; - var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by; - var d = 2 * (ax * cy - ay * cx); - if (d >= -ε2) return; - var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by; - var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle(); - circle.arc = arc; - circle.site = cSite; - circle.x = x + bx; - circle.y = cy + Math.sqrt(x * x + y * y); - circle.cy = cy; - arc.circle = circle; - var before = null, node = d3_geom_voronoiCircles._; - while (node) { - if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) { - if (node.L) node = node.L; else { - before = node.P; - break; - } - } else { - if (node.R) node = node.R; else { - before = node; - break; - } - } - } - d3_geom_voronoiCircles.insert(before, circle); - if (!before) d3_geom_voronoiFirstCircle = circle; - } - function d3_geom_voronoiDetachCircle(arc) { - var circle = arc.circle; - if (circle) { - if (!circle.P) d3_geom_voronoiFirstCircle = circle.N; - d3_geom_voronoiCircles.remove(circle); - d3_geom_voronoiCirclePool.push(circle); - d3_geom_voronoiRedBlackNode(circle); - arc.circle = null; - } - } - function d3_geom_voronoiClipEdges(extent) { - var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e; - while (i--) { - e = edges[i]; - if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) { - e.a = e.b = null; - edges.splice(i, 1); - } - } - } - function d3_geom_voronoiConnectEdge(edge, extent) { - var vb = edge.b; - if (vb) return true; - var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb; - if (ry === ly) { - if (fx < x0 || fx >= x1) return; - if (lx > rx) { - if (!va) va = { - x: fx, - y: y0 - }; else if (va.y >= y1) return; - vb = { - x: fx, - y: y1 - }; - } else { - if (!va) va = { - x: fx, - y: y1 - }; else if (va.y < y0) return; - vb = { - x: fx, - y: y0 - }; - } - } else { - fm = (lx - rx) / (ry - ly); - fb = fy - fm * fx; - if (fm < -1 || fm > 1) { - if (lx > rx) { - if (!va) va = { - x: (y0 - fb) / fm, - y: y0 - }; else if (va.y >= y1) return; - vb = { - x: (y1 - fb) / fm, - y: y1 - }; - } else { - if (!va) va = { - x: (y1 - fb) / fm, - y: y1 - }; else if (va.y < y0) return; - vb = { - x: (y0 - fb) / fm, - y: y0 - }; - } - } else { - if (ly < ry) { - if (!va) va = { - x: x0, - y: fm * x0 + fb - }; else if (va.x >= x1) return; - vb = { - x: x1, - y: fm * x1 + fb - }; - } else { - if (!va) va = { - x: x1, - y: fm * x1 + fb - }; else if (va.x < x0) return; - vb = { - x: x0, - y: fm * x0 + fb - }; - } - } - } - edge.a = va; - edge.b = vb; - return true; - } - function d3_geom_voronoiEdge(lSite, rSite) { - this.l = lSite; - this.r = rSite; - this.a = this.b = null; - } - function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) { - var edge = new d3_geom_voronoiEdge(lSite, rSite); - d3_geom_voronoiEdges.push(edge); - if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va); - if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb); - d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite)); - d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite)); - return edge; - } - function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) { - var edge = new d3_geom_voronoiEdge(lSite, null); - edge.a = va; - edge.b = vb; - d3_geom_voronoiEdges.push(edge); - return edge; - } - function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) { - if (!edge.a && !edge.b) { - edge.a = vertex; - edge.l = lSite; - edge.r = rSite; - } else if (edge.l === rSite) { - edge.b = vertex; - } else { - edge.a = vertex; - } - } - function d3_geom_voronoiHalfEdge(edge, lSite, rSite) { - var va = edge.a, vb = edge.b; - this.edge = edge; - this.site = lSite; - this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y); - } - d3_geom_voronoiHalfEdge.prototype = { - start: function() { - return this.edge.l === this.site ? this.edge.a : this.edge.b; - }, - end: function() { - return this.edge.l === this.site ? this.edge.b : this.edge.a; - } - }; - function d3_geom_voronoiRedBlackTree() { - this._ = null; - } - function d3_geom_voronoiRedBlackNode(node) { - node.U = node.C = node.L = node.R = node.P = node.N = null; - } - d3_geom_voronoiRedBlackTree.prototype = { - insert: function(after, node) { - var parent, grandpa, uncle; - if (after) { - node.P = after; - node.N = after.N; - if (after.N) after.N.P = node; - after.N = node; - if (after.R) { - after = after.R; - while (after.L) after = after.L; - after.L = node; - } else { - after.R = node; - } - parent = after; - } else if (this._) { - after = d3_geom_voronoiRedBlackFirst(this._); - node.P = null; - node.N = after; - after.P = after.L = node; - parent = after; - } else { - node.P = node.N = null; - this._ = node; - parent = null; - } - node.L = node.R = null; - node.U = parent; - node.C = true; - after = node; - while (parent && parent.C) { - grandpa = parent.U; - if (parent === grandpa.L) { - uncle = grandpa.R; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.R) { - d3_geom_voronoiRedBlackRotateLeft(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - d3_geom_voronoiRedBlackRotateRight(this, grandpa); - } - } else { - uncle = grandpa.L; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.L) { - d3_geom_voronoiRedBlackRotateRight(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, grandpa); - } - } - parent = after.U; - } - this._.C = false; - }, - remove: function(node) { - if (node.N) node.N.P = node.P; - if (node.P) node.P.N = node.N; - node.N = node.P = null; - var parent = node.U, sibling, left = node.L, right = node.R, next, red; - if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right); - if (parent) { - if (parent.L === node) parent.L = next; else parent.R = next; - } else { - this._ = next; - } - if (left && right) { - red = next.C; - next.C = node.C; - next.L = left; - left.U = next; - if (next !== right) { - parent = next.U; - next.U = node.U; - node = next.R; - parent.L = node; - next.R = right; - right.U = next; - } else { - next.U = parent; - parent = next; - node = next.R; - } - } else { - red = node.C; - node = next; - } - if (node) node.U = parent; - if (red) return; - if (node && node.C) { - node.C = false; - return; - } - do { - if (node === this._) break; - if (node === parent.L) { - sibling = parent.R; - if (sibling.C) { - sibling.C = false; - parent.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, parent); - sibling = parent.R; - } - if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { - if (!sibling.R || !sibling.R.C) { - sibling.L.C = false; - sibling.C = true; - d3_geom_voronoiRedBlackRotateRight(this, sibling); - sibling = parent.R; - } - sibling.C = parent.C; - parent.C = sibling.R.C = false; - d3_geom_voronoiRedBlackRotateLeft(this, parent); - node = this._; - break; - } - } else { - sibling = parent.L; - if (sibling.C) { - sibling.C = false; - parent.C = true; - d3_geom_voronoiRedBlackRotateRight(this, parent); - sibling = parent.L; - } - if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { - if (!sibling.L || !sibling.L.C) { - sibling.R.C = false; - sibling.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, sibling); - sibling = parent.L; - } - sibling.C = parent.C; - parent.C = sibling.L.C = false; - d3_geom_voronoiRedBlackRotateRight(this, parent); - node = this._; - break; - } - } - sibling.C = true; - node = parent; - parent = parent.U; - } while (!node.C); - if (node) node.C = false; - } - }; - function d3_geom_voronoiRedBlackRotateLeft(tree, node) { - var p = node, q = node.R, parent = p.U; - if (parent) { - if (parent.L === p) parent.L = q; else parent.R = q; - } else { - tree._ = q; - } - q.U = parent; - p.U = q; - p.R = q.L; - if (p.R) p.R.U = p; - q.L = p; - } - function d3_geom_voronoiRedBlackRotateRight(tree, node) { - var p = node, q = node.L, parent = p.U; - if (parent) { - if (parent.L === p) parent.L = q; else parent.R = q; - } else { - tree._ = q; - } - q.U = parent; - p.U = q; - p.L = q.R; - if (p.L) p.L.U = p; - q.R = p; - } - function d3_geom_voronoiRedBlackFirst(node) { - while (node.L) node = node.L; - return node; - } - function d3_geom_voronoi(sites, bbox) { - var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle; - d3_geom_voronoiEdges = []; - d3_geom_voronoiCells = new Array(sites.length); - d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree(); - d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree(); - while (true) { - circle = d3_geom_voronoiFirstCircle; - if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) { - if (site.x !== x0 || site.y !== y0) { - d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site); - d3_geom_voronoiAddBeach(site); - x0 = site.x, y0 = site.y; - } - site = sites.pop(); - } else if (circle) { - d3_geom_voronoiRemoveBeach(circle.arc); - } else { - break; - } - } - if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox); - var diagram = { - cells: d3_geom_voronoiCells, - edges: d3_geom_voronoiEdges - }; - d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null; - return diagram; - } - function d3_geom_voronoiVertexOrder(a, b) { - return b.y - a.y || b.x - a.x; - } - d3.geom.voronoi = function(points) { - var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent; - if (points) return voronoi(points); - function voronoi(data) { - var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1]; - d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) { - var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) { - var s = e.start(); - return [ s.x, s.y ]; - }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : []; - polygon.point = data[i]; - }); - return polygons; - } - function sites(data) { - return data.map(function(d, i) { - return { - x: Math.round(fx(d, i) / ε) * ε, - y: Math.round(fy(d, i) / ε) * ε, - i: i - }; - }); - } - voronoi.links = function(data) { - return d3_geom_voronoi(sites(data)).edges.filter(function(edge) { - return edge.l && edge.r; - }).map(function(edge) { - return { - source: data[edge.l.i], - target: data[edge.r.i] - }; - }); - }; - voronoi.triangles = function(data) { - var triangles = []; - d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) { - var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l; - while (++j < m) { - e0 = e1; - s0 = s1; - e1 = edges[j].edge; - s1 = e1.l === site ? e1.r : e1.l; - if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) { - triangles.push([ data[i], data[s0.i], data[s1.i] ]); - } - } - }); - return triangles; - }; - voronoi.x = function(_) { - return arguments.length ? (fx = d3_functor(x = _), voronoi) : x; - }; - voronoi.y = function(_) { - return arguments.length ? (fy = d3_functor(y = _), voronoi) : y; - }; - voronoi.clipExtent = function(_) { - if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent; - clipExtent = _ == null ? d3_geom_voronoiClipExtent : _; - return voronoi; - }; - voronoi.size = function(_) { - if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1]; - return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]); - }; - return voronoi; - }; - var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ]; - function d3_geom_voronoiTriangleArea(a, b, c) { - return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y); - } - d3.geom.delaunay = function(vertices) { - return d3.geom.voronoi().triangles(vertices); - }; - d3.geom.quadtree = function(points, x1, y1, x2, y2) { - var x = d3_geom_pointX, y = d3_geom_pointY, compat; - if (compat = arguments.length) { - x = d3_geom_quadtreeCompatX; - y = d3_geom_quadtreeCompatY; - if (compat === 3) { - y2 = y1; - x2 = x1; - y1 = x1 = 0; - } - return quadtree(points); - } - function quadtree(data) { - var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_; - if (x1 != null) { - x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2; - } else { - x2_ = y2_ = -(x1_ = y1_ = Infinity); - xs = [], ys = []; - n = data.length; - if (compat) for (i = 0; i < n; ++i) { - d = data[i]; - if (d.x < x1_) x1_ = d.x; - if (d.y < y1_) y1_ = d.y; - if (d.x > x2_) x2_ = d.x; - if (d.y > y2_) y2_ = d.y; - xs.push(d.x); - ys.push(d.y); - } else for (i = 0; i < n; ++i) { - var x_ = +fx(d = data[i], i), y_ = +fy(d, i); - if (x_ < x1_) x1_ = x_; - if (y_ < y1_) y1_ = y_; - if (x_ > x2_) x2_ = x_; - if (y_ > y2_) y2_ = y_; - xs.push(x_); - ys.push(y_); - } - } - var dx = x2_ - x1_, dy = y2_ - y1_; - if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy; - function insert(n, d, x, y, x1, y1, x2, y2) { - if (isNaN(x) || isNaN(y)) return; - if (n.leaf) { - var nx = n.x, ny = n.y; - if (nx != null) { - if (abs(nx - x) + abs(ny - y) < .01) { - insertChild(n, d, x, y, x1, y1, x2, y2); - } else { - var nPoint = n.point; - n.x = n.y = n.point = null; - insertChild(n, nPoint, nx, ny, x1, y1, x2, y2); - insertChild(n, d, x, y, x1, y1, x2, y2); - } - } else { - n.x = x, n.y = y, n.point = d; - } - } else { - insertChild(n, d, x, y, x1, y1, x2, y2); - } - } - function insertChild(n, d, x, y, x1, y1, x2, y2) { - var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right; - n.leaf = false; - n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode()); - if (right) x1 = xm; else x2 = xm; - if (below) y1 = ym; else y2 = ym; - insert(n, d, x, y, x1, y1, x2, y2); - } - var root = d3_geom_quadtreeNode(); - root.add = function(d) { - insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_); - }; - root.visit = function(f) { - d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_); - }; - root.find = function(point) { - return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_); - }; - i = -1; - if (x1 == null) { - while (++i < n) { - insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_); - } - --i; - } else data.forEach(root.add); - xs = ys = data = d = null; - return root; - } - quadtree.x = function(_) { - return arguments.length ? (x = _, quadtree) : x; - }; - quadtree.y = function(_) { - return arguments.length ? (y = _, quadtree) : y; - }; - quadtree.extent = function(_) { - if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ]; - if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], - y2 = +_[1][1]; - return quadtree; - }; - quadtree.size = function(_) { - if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ]; - if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1]; - return quadtree; - }; - return quadtree; - }; - function d3_geom_quadtreeCompatX(d) { - return d.x; - } - function d3_geom_quadtreeCompatY(d) { - return d.y; - } - function d3_geom_quadtreeNode() { - return { - leaf: true, - nodes: [], - point: null, - x: null, - y: null - }; - } - function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) { - if (!f(node, x1, y1, x2, y2)) { - var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes; - if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy); - if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy); - if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2); - if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2); - } - } - function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) { - var minDistance2 = Infinity, closestPoint; - (function find(node, x1, y1, x2, y2) { - if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return; - if (point = node.point) { - var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy; - if (distance2 < minDistance2) { - var distance = Math.sqrt(minDistance2 = distance2); - x0 = x - distance, y0 = y - distance; - x3 = x + distance, y3 = y + distance; - closestPoint = point; - } - } - var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym; - for (var i = below << 1 | right, j = i + 4; i < j; ++i) { - if (node = children[i & 3]) switch (i & 3) { - case 0: - find(node, x1, y1, xm, ym); - break; - - case 1: - find(node, xm, y1, x2, ym); - break; - - case 2: - find(node, x1, ym, xm, y2); - break; - - case 3: - find(node, xm, ym, x2, y2); - break; - } - } - })(root, x0, y0, x3, y3); - return closestPoint; - } - d3.interpolateRgb = d3_interpolateRgb; - function d3_interpolateRgb(a, b) { - a = d3.rgb(a); - b = d3.rgb(b); - var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab; - return function(t) { - return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t)); - }; - } - d3.interpolateObject = d3_interpolateObject; - function d3_interpolateObject(a, b) { - var i = {}, c = {}, k; - for (k in a) { - if (k in b) { - i[k] = d3_interpolate(a[k], b[k]); - } else { - c[k] = a[k]; - } - } - for (k in b) { - if (!(k in a)) { - c[k] = b[k]; - } - } - return function(t) { - for (k in i) c[k] = i[k](t); - return c; - }; - } - d3.interpolateNumber = d3_interpolateNumber; - function d3_interpolateNumber(a, b) { - a = +a, b = +b; - return function(t) { - return a * (1 - t) + b * t; - }; - } - d3.interpolateString = d3_interpolateString; - function d3_interpolateString(a, b) { - var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = []; - a = a + "", b = b + ""; - while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) { - if ((bs = bm.index) > bi) { - bs = b.slice(bi, bs); - if (s[i]) s[i] += bs; else s[++i] = bs; - } - if ((am = am[0]) === (bm = bm[0])) { - if (s[i]) s[i] += bm; else s[++i] = bm; - } else { - s[++i] = null; - q.push({ - i: i, - x: d3_interpolateNumber(am, bm) - }); - } - bi = d3_interpolate_numberB.lastIndex; - } - if (bi < b.length) { - bs = b.slice(bi); - if (s[i]) s[i] += bs; else s[++i] = bs; - } - return s.length < 2 ? q[0] ? (b = q[0].x, function(t) { - return b(t) + ""; - }) : function() { - return b; - } : (b = q.length, function(t) { - for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }); - } - var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g"); - d3.interpolate = d3_interpolate; - function d3_interpolate(a, b) { - var i = d3.interpolators.length, f; - while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ; - return f; - } - d3.interpolators = [ function(a, b) { - var t = typeof b; - return (t === "string" ? d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\(|hsl\()/i.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === "object" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b); - } ]; - d3.interpolateArray = d3_interpolateArray; - function d3_interpolateArray(a, b) { - var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i; - for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i])); - for (;i < na; ++i) c[i] = a[i]; - for (;i < nb; ++i) c[i] = b[i]; - return function(t) { - for (i = 0; i < n0; ++i) c[i] = x[i](t); - return c; - }; - } - var d3_ease_default = function() { - return d3_identity; - }; - var d3_ease = d3.map({ - linear: d3_ease_default, - poly: d3_ease_poly, - quad: function() { - return d3_ease_quad; - }, - cubic: function() { - return d3_ease_cubic; - }, - sin: function() { - return d3_ease_sin; - }, - exp: function() { - return d3_ease_exp; - }, - circle: function() { - return d3_ease_circle; - }, - elastic: d3_ease_elastic, - back: d3_ease_back, - bounce: function() { - return d3_ease_bounce; - } - }); - var d3_ease_mode = d3.map({ - "in": d3_identity, - out: d3_ease_reverse, - "in-out": d3_ease_reflect, - "out-in": function(f) { - return d3_ease_reflect(d3_ease_reverse(f)); - } - }); - d3.ease = function(name) { - var i = name.indexOf("-"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : "in"; - t = d3_ease.get(t) || d3_ease_default; - m = d3_ease_mode.get(m) || d3_identity; - return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1)))); - }; - function d3_ease_clamp(f) { - return function(t) { - return t <= 0 ? 0 : t >= 1 ? 1 : f(t); - }; - } - function d3_ease_reverse(f) { - return function(t) { - return 1 - f(1 - t); - }; - } - function d3_ease_reflect(f) { - return function(t) { - return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t)); - }; - } - function d3_ease_quad(t) { - return t * t; - } - function d3_ease_cubic(t) { - return t * t * t; - } - function d3_ease_cubicInOut(t) { - if (t <= 0) return 0; - if (t >= 1) return 1; - var t2 = t * t, t3 = t2 * t; - return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75); - } - function d3_ease_poly(e) { - return function(t) { - return Math.pow(t, e); - }; - } - function d3_ease_sin(t) { - return 1 - Math.cos(t * halfπ); - } - function d3_ease_exp(t) { - return Math.pow(2, 10 * (t - 1)); - } - function d3_ease_circle(t) { - return 1 - Math.sqrt(1 - t * t); - } - function d3_ease_elastic(a, p) { - var s; - if (arguments.length < 2) p = .45; - if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4; - return function(t) { - return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p); - }; - } - function d3_ease_back(s) { - if (!s) s = 1.70158; - return function(t) { - return t * t * ((s + 1) * t - s); - }; - } - function d3_ease_bounce(t) { - return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; - } - d3.interpolateHcl = d3_interpolateHcl; - function d3_interpolateHcl(a, b) { - a = d3.hcl(a); - b = d3.hcl(b); - var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al; - if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac; - if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; - return function(t) { - return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + ""; - }; - } - d3.interpolateHsl = d3_interpolateHsl; - function d3_interpolateHsl(a, b) { - a = d3.hsl(a); - b = d3.hsl(b); - var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al; - if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as; - if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; - return function(t) { - return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + ""; - }; - } - d3.interpolateLab = d3_interpolateLab; - function d3_interpolateLab(a, b) { - a = d3.lab(a); - b = d3.lab(b); - var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab; - return function(t) { - return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + ""; - }; - } - d3.interpolateRound = d3_interpolateRound; - function d3_interpolateRound(a, b) { - b -= a; - return function(t) { - return Math.round(a + b * t); - }; - } - d3.transform = function(string) { - var g = d3_document.createElementNS(d3.ns.prefix.svg, "g"); - return (d3.transform = function(string) { - if (string != null) { - g.setAttribute("transform", string); - var t = g.transform.baseVal.consolidate(); - } - return new d3_transform(t ? t.matrix : d3_transformIdentity); - })(string); - }; - function d3_transform(m) { - var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0; - if (r0[0] * r1[1] < r1[0] * r0[1]) { - r0[0] *= -1; - r0[1] *= -1; - kx *= -1; - kz *= -1; - } - this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees; - this.translate = [ m.e, m.f ]; - this.scale = [ kx, ky ]; - this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0; - } - d3_transform.prototype.toString = function() { - return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"; - }; - function d3_transformDot(a, b) { - return a[0] * b[0] + a[1] * b[1]; - } - function d3_transformNormalize(a) { - var k = Math.sqrt(d3_transformDot(a, a)); - if (k) { - a[0] /= k; - a[1] /= k; - } - return k; - } - function d3_transformCombine(a, b, k) { - a[0] += k * b[0]; - a[1] += k * b[1]; - return a; - } - var d3_transformIdentity = { - a: 1, - b: 0, - c: 0, - d: 1, - e: 0, - f: 0 - }; - d3.interpolateTransform = d3_interpolateTransform; - function d3_interpolateTransformPop(s) { - return s.length ? s.pop() + "," : ""; - } - function d3_interpolateTranslate(ta, tb, s, q) { - if (ta[0] !== tb[0] || ta[1] !== tb[1]) { - var i = s.push("translate(", null, ",", null, ")"); - q.push({ - i: i - 4, - x: d3_interpolateNumber(ta[0], tb[0]) - }, { - i: i - 2, - x: d3_interpolateNumber(ta[1], tb[1]) - }); - } else if (tb[0] || tb[1]) { - s.push("translate(" + tb + ")"); - } - } - function d3_interpolateRotate(ra, rb, s, q) { - if (ra !== rb) { - if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360; - q.push({ - i: s.push(d3_interpolateTransformPop(s) + "rotate(", null, ")") - 2, - x: d3_interpolateNumber(ra, rb) - }); - } else if (rb) { - s.push(d3_interpolateTransformPop(s) + "rotate(" + rb + ")"); - } - } - function d3_interpolateSkew(wa, wb, s, q) { - if (wa !== wb) { - q.push({ - i: s.push(d3_interpolateTransformPop(s) + "skewX(", null, ")") - 2, - x: d3_interpolateNumber(wa, wb) - }); - } else if (wb) { - s.push(d3_interpolateTransformPop(s) + "skewX(" + wb + ")"); - } - } - function d3_interpolateScale(ka, kb, s, q) { - if (ka[0] !== kb[0] || ka[1] !== kb[1]) { - var i = s.push(d3_interpolateTransformPop(s) + "scale(", null, ",", null, ")"); - q.push({ - i: i - 4, - x: d3_interpolateNumber(ka[0], kb[0]) - }, { - i: i - 2, - x: d3_interpolateNumber(ka[1], kb[1]) - }); - } else if (kb[0] !== 1 || kb[1] !== 1) { - s.push(d3_interpolateTransformPop(s) + "scale(" + kb + ")"); - } - } - function d3_interpolateTransform(a, b) { - var s = [], q = []; - a = d3.transform(a), b = d3.transform(b); - d3_interpolateTranslate(a.translate, b.translate, s, q); - d3_interpolateRotate(a.rotate, b.rotate, s, q); - d3_interpolateSkew(a.skew, b.skew, s, q); - d3_interpolateScale(a.scale, b.scale, s, q); - a = b = null; - return function(t) { - var i = -1, n = q.length, o; - while (++i < n) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; - } - function d3_uninterpolateNumber(a, b) { - b = (b -= a = +a) || 1 / b; - return function(x) { - return (x - a) / b; - }; - } - function d3_uninterpolateClamp(a, b) { - b = (b -= a = +a) || 1 / b; - return function(x) { - return Math.max(0, Math.min(1, (x - a) / b)); - }; - } - d3.layout = {}; - d3.layout.bundle = function() { - return function(links) { - var paths = [], i = -1, n = links.length; - while (++i < n) paths.push(d3_layout_bundlePath(links[i])); - return paths; - }; - }; - function d3_layout_bundlePath(link) { - var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ]; - while (start !== lca) { - start = start.parent; - points.push(start); - } - var k = points.length; - while (end !== lca) { - points.splice(k, 0, end); - end = end.parent; - } - return points; - } - function d3_layout_bundleAncestors(node) { - var ancestors = [], parent = node.parent; - while (parent != null) { - ancestors.push(node); - node = parent; - parent = parent.parent; - } - ancestors.push(node); - return ancestors; - } - function d3_layout_bundleLeastCommonAncestor(a, b) { - if (a === b) return a; - var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null; - while (aNode === bNode) { - sharedNode = aNode; - aNode = aNodes.pop(); - bNode = bNodes.pop(); - } - return sharedNode; - } - d3.layout.chord = function() { - var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords; - function relayout() { - var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j; - chords = []; - groups = []; - k = 0, i = -1; - while (++i < n) { - x = 0, j = -1; - while (++j < n) { - x += matrix[i][j]; - } - groupSums.push(x); - subgroupIndex.push(d3.range(n)); - k += x; - } - if (sortGroups) { - groupIndex.sort(function(a, b) { - return sortGroups(groupSums[a], groupSums[b]); - }); - } - if (sortSubgroups) { - subgroupIndex.forEach(function(d, i) { - d.sort(function(a, b) { - return sortSubgroups(matrix[i][a], matrix[i][b]); - }); - }); - } - k = (τ - padding * n) / k; - x = 0, i = -1; - while (++i < n) { - x0 = x, j = -1; - while (++j < n) { - var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k; - subgroups[di + "-" + dj] = { - index: di, - subindex: dj, - startAngle: a0, - endAngle: a1, - value: v - }; - } - groups[di] = { - index: di, - startAngle: x0, - endAngle: x, - value: groupSums[di] - }; - x += padding; - } - i = -1; - while (++i < n) { - j = i - 1; - while (++j < n) { - var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i]; - if (source.value || target.value) { - chords.push(source.value < target.value ? { - source: target, - target: source - } : { - source: source, - target: target - }); - } - } - } - if (sortChords) resort(); - } - function resort() { - chords.sort(function(a, b) { - return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2); - }); - } - chord.matrix = function(x) { - if (!arguments.length) return matrix; - n = (matrix = x) && matrix.length; - chords = groups = null; - return chord; - }; - chord.padding = function(x) { - if (!arguments.length) return padding; - padding = x; - chords = groups = null; - return chord; - }; - chord.sortGroups = function(x) { - if (!arguments.length) return sortGroups; - sortGroups = x; - chords = groups = null; - return chord; - }; - chord.sortSubgroups = function(x) { - if (!arguments.length) return sortSubgroups; - sortSubgroups = x; - chords = null; - return chord; - }; - chord.sortChords = function(x) { - if (!arguments.length) return sortChords; - sortChords = x; - if (chords) resort(); - return chord; - }; - chord.chords = function() { - if (!chords) relayout(); - return chords; - }; - chord.groups = function() { - if (!groups) relayout(); - return groups; - }; - return chord; - }; - d3.layout.force = function() { - var force = {}, event = d3.dispatch("start", "tick", "end"), timer, size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges; - function repulse(node) { - return function(quad, x1, _, x2) { - if (quad.point !== node) { - var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy; - if (dw * dw / theta2 < dn) { - if (dn < chargeDistance2) { - var k = quad.charge / dn; - node.px -= dx * k; - node.py -= dy * k; - } - return true; - } - if (quad.point && dn && dn < chargeDistance2) { - var k = quad.pointCharge / dn; - node.px -= dx * k; - node.py -= dy * k; - } - } - return !quad.charge; - }; - } - force.tick = function() { - if ((alpha *= .99) < .005) { - timer = null; - event.end({ - type: "end", - alpha: alpha = 0 - }); - return true; - } - var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y; - for (i = 0; i < m; ++i) { - o = links[i]; - s = o.source; - t = o.target; - x = t.x - s.x; - y = t.y - s.y; - if (l = x * x + y * y) { - l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l; - x *= l; - y *= l; - t.x -= x * (k = s.weight + t.weight ? s.weight / (s.weight + t.weight) : .5); - t.y -= y * k; - s.x += x * (k = 1 - k); - s.y += y * k; - } - } - if (k = alpha * gravity) { - x = size[0] / 2; - y = size[1] / 2; - i = -1; - if (k) while (++i < n) { - o = nodes[i]; - o.x += (x - o.x) * k; - o.y += (y - o.y) * k; - } - } - if (charge) { - d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges); - i = -1; - while (++i < n) { - if (!(o = nodes[i]).fixed) { - q.visit(repulse(o)); - } - } - } - i = -1; - while (++i < n) { - o = nodes[i]; - if (o.fixed) { - o.x = o.px; - o.y = o.py; - } else { - o.x -= (o.px - (o.px = o.x)) * friction; - o.y -= (o.py - (o.py = o.y)) * friction; - } - } - event.tick({ - type: "tick", - alpha: alpha - }); - }; - force.nodes = function(x) { - if (!arguments.length) return nodes; - nodes = x; - return force; - }; - force.links = function(x) { - if (!arguments.length) return links; - links = x; - return force; - }; - force.size = function(x) { - if (!arguments.length) return size; - size = x; - return force; - }; - force.linkDistance = function(x) { - if (!arguments.length) return linkDistance; - linkDistance = typeof x === "function" ? x : +x; - return force; - }; - force.distance = force.linkDistance; - force.linkStrength = function(x) { - if (!arguments.length) return linkStrength; - linkStrength = typeof x === "function" ? x : +x; - return force; - }; - force.friction = function(x) { - if (!arguments.length) return friction; - friction = +x; - return force; - }; - force.charge = function(x) { - if (!arguments.length) return charge; - charge = typeof x === "function" ? x : +x; - return force; - }; - force.chargeDistance = function(x) { - if (!arguments.length) return Math.sqrt(chargeDistance2); - chargeDistance2 = x * x; - return force; - }; - force.gravity = function(x) { - if (!arguments.length) return gravity; - gravity = +x; - return force; - }; - force.theta = function(x) { - if (!arguments.length) return Math.sqrt(theta2); - theta2 = x * x; - return force; - }; - force.alpha = function(x) { - if (!arguments.length) return alpha; - x = +x; - if (alpha) { - if (x > 0) { - alpha = x; - } else { - timer.c = null, timer.t = NaN, timer = null; - event.end({ - type: "end", - alpha: alpha = 0 - }); - } - } else if (x > 0) { - event.start({ - type: "start", - alpha: alpha = x - }); - timer = d3_timer(force.tick); - } - return force; - }; - force.start = function() { - var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o; - for (i = 0; i < n; ++i) { - (o = nodes[i]).index = i; - o.weight = 0; - } - for (i = 0; i < m; ++i) { - o = links[i]; - if (typeof o.source == "number") o.source = nodes[o.source]; - if (typeof o.target == "number") o.target = nodes[o.target]; - ++o.source.weight; - ++o.target.weight; - } - for (i = 0; i < n; ++i) { - o = nodes[i]; - if (isNaN(o.x)) o.x = position("x", w); - if (isNaN(o.y)) o.y = position("y", h); - if (isNaN(o.px)) o.px = o.x; - if (isNaN(o.py)) o.py = o.y; - } - distances = []; - if (typeof linkDistance === "function") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance; - strengths = []; - if (typeof linkStrength === "function") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength; - charges = []; - if (typeof charge === "function") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge; - function position(dimension, size) { - if (!neighbors) { - neighbors = new Array(n); - for (j = 0; j < n; ++j) { - neighbors[j] = []; - } - for (j = 0; j < m; ++j) { - var o = links[j]; - neighbors[o.source.index].push(o.target); - neighbors[o.target.index].push(o.source); - } - } - var candidates = neighbors[i], j = -1, l = candidates.length, x; - while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x; - return Math.random() * size; - } - return force.resume(); - }; - force.resume = function() { - return force.alpha(.1); - }; - force.stop = function() { - return force.alpha(0); - }; - force.drag = function() { - if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart.force", d3_layout_forceDragstart).on("drag.force", dragmove).on("dragend.force", d3_layout_forceDragend); - if (!arguments.length) return drag; - this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag); - }; - function dragmove(d) { - d.px = d3.event.x, d.py = d3.event.y; - force.resume(); - } - return d3.rebind(force, event, "on"); - }; - function d3_layout_forceDragstart(d) { - d.fixed |= 2; - } - function d3_layout_forceDragend(d) { - d.fixed &= ~6; - } - function d3_layout_forceMouseover(d) { - d.fixed |= 4; - d.px = d.x, d.py = d.y; - } - function d3_layout_forceMouseout(d) { - d.fixed &= ~4; - } - function d3_layout_forceAccumulate(quad, alpha, charges) { - var cx = 0, cy = 0; - quad.charge = 0; - if (!quad.leaf) { - var nodes = quad.nodes, n = nodes.length, i = -1, c; - while (++i < n) { - c = nodes[i]; - if (c == null) continue; - d3_layout_forceAccumulate(c, alpha, charges); - quad.charge += c.charge; - cx += c.charge * c.cx; - cy += c.charge * c.cy; - } - } - if (quad.point) { - if (!quad.leaf) { - quad.point.x += Math.random() - .5; - quad.point.y += Math.random() - .5; - } - var k = alpha * charges[quad.point.index]; - quad.charge += quad.pointCharge = k; - cx += k * quad.point.x; - cy += k * quad.point.y; - } - quad.cx = cx / quad.charge; - quad.cy = cy / quad.charge; - } - var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity; - d3.layout.hierarchy = function() { - var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue; - function hierarchy(root) { - var stack = [ root ], nodes = [], node; - root.depth = 0; - while ((node = stack.pop()) != null) { - nodes.push(node); - if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) { - var n, childs, child; - while (--n >= 0) { - stack.push(child = childs[n]); - child.parent = node; - child.depth = node.depth + 1; - } - if (value) node.value = 0; - node.children = childs; - } else { - if (value) node.value = +value.call(hierarchy, node, node.depth) || 0; - delete node.children; - } - } - d3_layout_hierarchyVisitAfter(root, function(node) { - var childs, parent; - if (sort && (childs = node.children)) childs.sort(sort); - if (value && (parent = node.parent)) parent.value += node.value; - }); - return nodes; - } - hierarchy.sort = function(x) { - if (!arguments.length) return sort; - sort = x; - return hierarchy; - }; - hierarchy.children = function(x) { - if (!arguments.length) return children; - children = x; - return hierarchy; - }; - hierarchy.value = function(x) { - if (!arguments.length) return value; - value = x; - return hierarchy; - }; - hierarchy.revalue = function(root) { - if (value) { - d3_layout_hierarchyVisitBefore(root, function(node) { - if (node.children) node.value = 0; - }); - d3_layout_hierarchyVisitAfter(root, function(node) { - var parent; - if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0; - if (parent = node.parent) parent.value += node.value; - }); - } - return root; - }; - return hierarchy; - }; - function d3_layout_hierarchyRebind(object, hierarchy) { - d3.rebind(object, hierarchy, "sort", "children", "value"); - object.nodes = object; - object.links = d3_layout_hierarchyLinks; - return object; - } - function d3_layout_hierarchyVisitBefore(node, callback) { - var nodes = [ node ]; - while ((node = nodes.pop()) != null) { - callback(node); - if ((children = node.children) && (n = children.length)) { - var n, children; - while (--n >= 0) nodes.push(children[n]); - } - } - } - function d3_layout_hierarchyVisitAfter(node, callback) { - var nodes = [ node ], nodes2 = []; - while ((node = nodes.pop()) != null) { - nodes2.push(node); - if ((children = node.children) && (n = children.length)) { - var i = -1, n, children; - while (++i < n) nodes.push(children[i]); - } - } - while ((node = nodes2.pop()) != null) { - callback(node); - } - } - function d3_layout_hierarchyChildren(d) { - return d.children; - } - function d3_layout_hierarchyValue(d) { - return d.value; - } - function d3_layout_hierarchySort(a, b) { - return b.value - a.value; - } - function d3_layout_hierarchyLinks(nodes) { - return d3.merge(nodes.map(function(parent) { - return (parent.children || []).map(function(child) { - return { - source: parent, - target: child - }; - }); - })); - } - d3.layout.partition = function() { - var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ]; - function position(node, x, dx, dy) { - var children = node.children; - node.x = x; - node.y = node.depth * dy; - node.dx = dx; - node.dy = dy; - if (children && (n = children.length)) { - var i = -1, n, c, d; - dx = node.value ? dx / node.value : 0; - while (++i < n) { - position(c = children[i], x, d = c.value * dx, dy); - x += d; - } - } - } - function depth(node) { - var children = node.children, d = 0; - if (children && (n = children.length)) { - var i = -1, n; - while (++i < n) d = Math.max(d, depth(children[i])); - } - return 1 + d; - } - function partition(d, i) { - var nodes = hierarchy.call(this, d, i); - position(nodes[0], 0, size[0], size[1] / depth(nodes[0])); - return nodes; - } - partition.size = function(x) { - if (!arguments.length) return size; - size = x; - return partition; - }; - return d3_layout_hierarchyRebind(partition, hierarchy); - }; - d3.layout.pie = function() { - var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0; - function pie(data) { - var n = data.length, values = data.map(function(d, i) { - return +value.call(pie, d, i); - }), a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === "function" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), sum = d3.sum(values), k = sum ? (da - n * pa) / sum : 0, index = d3.range(n), arcs = [], v; - if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) { - return values[j] - values[i]; - } : function(i, j) { - return sort(data[i], data[j]); - }); - index.forEach(function(i) { - arcs[i] = { - data: data[i], - value: v = values[i], - startAngle: a, - endAngle: a += v * k + pa, - padAngle: p - }; - }); - return arcs; - } - pie.value = function(_) { - if (!arguments.length) return value; - value = _; - return pie; - }; - pie.sort = function(_) { - if (!arguments.length) return sort; - sort = _; - return pie; - }; - pie.startAngle = function(_) { - if (!arguments.length) return startAngle; - startAngle = _; - return pie; - }; - pie.endAngle = function(_) { - if (!arguments.length) return endAngle; - endAngle = _; - return pie; - }; - pie.padAngle = function(_) { - if (!arguments.length) return padAngle; - padAngle = _; - return pie; - }; - return pie; - }; - var d3_layout_pieSortByValue = {}; - d3.layout.stack = function() { - var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY; - function stack(data, index) { - if (!(n = data.length)) return data; - var series = data.map(function(d, i) { - return values.call(stack, d, i); - }); - var points = series.map(function(d) { - return d.map(function(v, i) { - return [ x.call(stack, v, i), y.call(stack, v, i) ]; - }); - }); - var orders = order.call(stack, points, index); - series = d3.permute(series, orders); - points = d3.permute(points, orders); - var offsets = offset.call(stack, points, index); - var m = series[0].length, n, i, j, o; - for (j = 0; j < m; ++j) { - out.call(stack, series[0][j], o = offsets[j], points[0][j][1]); - for (i = 1; i < n; ++i) { - out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]); - } - } - return data; - } - stack.values = function(x) { - if (!arguments.length) return values; - values = x; - return stack; - }; - stack.order = function(x) { - if (!arguments.length) return order; - order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault; - return stack; - }; - stack.offset = function(x) { - if (!arguments.length) return offset; - offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero; - return stack; - }; - stack.x = function(z) { - if (!arguments.length) return x; - x = z; - return stack; - }; - stack.y = function(z) { - if (!arguments.length) return y; - y = z; - return stack; - }; - stack.out = function(z) { - if (!arguments.length) return out; - out = z; - return stack; - }; - return stack; - }; - function d3_layout_stackX(d) { - return d.x; - } - function d3_layout_stackY(d) { - return d.y; - } - function d3_layout_stackOut(d, y0, y) { - d.y0 = y0; - d.y = y; - } - var d3_layout_stackOrders = d3.map({ - "inside-out": function(data) { - var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) { - return max[a] - max[b]; - }), top = 0, bottom = 0, tops = [], bottoms = []; - for (i = 0; i < n; ++i) { - j = index[i]; - if (top < bottom) { - top += sums[j]; - tops.push(j); - } else { - bottom += sums[j]; - bottoms.push(j); - } - } - return bottoms.reverse().concat(tops); - }, - reverse: function(data) { - return d3.range(data.length).reverse(); - }, - "default": d3_layout_stackOrderDefault - }); - var d3_layout_stackOffsets = d3.map({ - silhouette: function(data) { - var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = []; - for (j = 0; j < m; ++j) { - for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; - if (o > max) max = o; - sums.push(o); - } - for (j = 0; j < m; ++j) { - y0[j] = (max - sums[j]) / 2; - } - return y0; - }, - wiggle: function(data) { - var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = []; - y0[0] = o = o0 = 0; - for (j = 1; j < m; ++j) { - for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1]; - for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) { - for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) { - s3 += (data[k][j][1] - data[k][j - 1][1]) / dx; - } - s2 += s3 * data[i][j][1]; - } - y0[j] = o -= s1 ? s2 / s1 * dx : 0; - if (o < o0) o0 = o; - } - for (j = 0; j < m; ++j) y0[j] -= o0; - return y0; - }, - expand: function(data) { - var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = []; - for (j = 0; j < m; ++j) { - for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; - if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k; - } - for (j = 0; j < m; ++j) y0[j] = 0; - return y0; - }, - zero: d3_layout_stackOffsetZero - }); - function d3_layout_stackOrderDefault(data) { - return d3.range(data.length); - } - function d3_layout_stackOffsetZero(data) { - var j = -1, m = data[0].length, y0 = []; - while (++j < m) y0[j] = 0; - return y0; - } - function d3_layout_stackMaxIndex(array) { - var i = 1, j = 0, v = array[0][1], k, n = array.length; - for (;i < n; ++i) { - if ((k = array[i][1]) > v) { - j = i; - v = k; - } - } - return j; - } - function d3_layout_stackReduceSum(d) { - return d.reduce(d3_layout_stackSum, 0); - } - function d3_layout_stackSum(p, d) { - return p + d[1]; - } - d3.layout.histogram = function() { - var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges; - function histogram(data, i) { - var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x; - while (++i < m) { - bin = bins[i] = []; - bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]); - bin.y = 0; - } - if (m > 0) { - i = -1; - while (++i < n) { - x = values[i]; - if (x >= range[0] && x <= range[1]) { - bin = bins[d3.bisect(thresholds, x, 1, m) - 1]; - bin.y += k; - bin.push(data[i]); - } - } - } - return bins; - } - histogram.value = function(x) { - if (!arguments.length) return valuer; - valuer = x; - return histogram; - }; - histogram.range = function(x) { - if (!arguments.length) return ranger; - ranger = d3_functor(x); - return histogram; - }; - histogram.bins = function(x) { - if (!arguments.length) return binner; - binner = typeof x === "number" ? function(range) { - return d3_layout_histogramBinFixed(range, x); - } : d3_functor(x); - return histogram; - }; - histogram.frequency = function(x) { - if (!arguments.length) return frequency; - frequency = !!x; - return histogram; - }; - return histogram; - }; - function d3_layout_histogramBinSturges(range, values) { - return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1)); - } - function d3_layout_histogramBinFixed(range, n) { - var x = -1, b = +range[0], m = (range[1] - b) / n, f = []; - while (++x <= n) f[x] = m * x + b; - return f; - } - function d3_layout_histogramRange(values) { - return [ d3.min(values), d3.max(values) ]; - } - d3.layout.pack = function() { - var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius; - function pack(d, i) { - var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === "function" ? radius : function() { - return radius; - }; - root.x = root.y = 0; - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r = +r(d.value); - }); - d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); - if (padding) { - var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2; - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r += dr; - }); - d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r -= dr; - }); - } - d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h)); - return nodes; - } - pack.size = function(_) { - if (!arguments.length) return size; - size = _; - return pack; - }; - pack.radius = function(_) { - if (!arguments.length) return radius; - radius = _ == null || typeof _ === "function" ? _ : +_; - return pack; - }; - pack.padding = function(_) { - if (!arguments.length) return padding; - padding = +_; - return pack; - }; - return d3_layout_hierarchyRebind(pack, hierarchy); - }; - function d3_layout_packSort(a, b) { - return a.value - b.value; - } - function d3_layout_packInsert(a, b) { - var c = a._pack_next; - a._pack_next = b; - b._pack_prev = a; - b._pack_next = c; - c._pack_prev = b; - } - function d3_layout_packSplice(a, b) { - a._pack_next = b; - b._pack_prev = a; - } - function d3_layout_packIntersects(a, b) { - var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r; - return .999 * dr * dr > dx * dx + dy * dy; - } - function d3_layout_packSiblings(node) { - if (!(nodes = node.children) || !(n = nodes.length)) return; - var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n; - function bound(node) { - xMin = Math.min(node.x - node.r, xMin); - xMax = Math.max(node.x + node.r, xMax); - yMin = Math.min(node.y - node.r, yMin); - yMax = Math.max(node.y + node.r, yMax); - } - nodes.forEach(d3_layout_packLink); - a = nodes[0]; - a.x = -a.r; - a.y = 0; - bound(a); - if (n > 1) { - b = nodes[1]; - b.x = b.r; - b.y = 0; - bound(b); - if (n > 2) { - c = nodes[2]; - d3_layout_packPlace(a, b, c); - bound(c); - d3_layout_packInsert(a, c); - a._pack_prev = c; - d3_layout_packInsert(c, b); - b = a._pack_next; - for (i = 3; i < n; i++) { - d3_layout_packPlace(a, b, c = nodes[i]); - var isect = 0, s1 = 1, s2 = 1; - for (j = b._pack_next; j !== b; j = j._pack_next, s1++) { - if (d3_layout_packIntersects(j, c)) { - isect = 1; - break; - } - } - if (isect == 1) { - for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) { - if (d3_layout_packIntersects(k, c)) { - break; - } - } - } - if (isect) { - if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b); - i--; - } else { - d3_layout_packInsert(a, c); - b = c; - bound(c); - } - } - } - } - var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0; - for (i = 0; i < n; i++) { - c = nodes[i]; - c.x -= cx; - c.y -= cy; - cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y)); - } - node.r = cr; - nodes.forEach(d3_layout_packUnlink); - } - function d3_layout_packLink(node) { - node._pack_next = node._pack_prev = node; - } - function d3_layout_packUnlink(node) { - delete node._pack_next; - delete node._pack_prev; - } - function d3_layout_packTransform(node, x, y, k) { - var children = node.children; - node.x = x += k * node.x; - node.y = y += k * node.y; - node.r *= k; - if (children) { - var i = -1, n = children.length; - while (++i < n) d3_layout_packTransform(children[i], x, y, k); - } - } - function d3_layout_packPlace(a, b, c) { - var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y; - if (db && (dx || dy)) { - var da = b.r + c.r, dc = dx * dx + dy * dy; - da *= da; - db *= db; - var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); - c.x = a.x + x * dx + y * dy; - c.y = a.y + x * dy - y * dx; - } else { - c.x = a.x + db; - c.y = a.y; - } - } - d3.layout.tree = function() { - var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null; - function tree(d, i) { - var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0); - d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z; - d3_layout_hierarchyVisitBefore(root1, secondWalk); - if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else { - var left = root0, right = root0, bottom = root0; - d3_layout_hierarchyVisitBefore(root0, function(node) { - if (node.x < left.x) left = node; - if (node.x > right.x) right = node; - if (node.depth > bottom.depth) bottom = node; - }); - var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1); - d3_layout_hierarchyVisitBefore(root0, function(node) { - node.x = (node.x + tx) * kx; - node.y = node.depth * ky; - }); - } - return nodes; - } - function wrapTree(root0) { - var root1 = { - A: null, - children: [ root0 ] - }, queue = [ root1 ], node1; - while ((node1 = queue.pop()) != null) { - for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) { - queue.push((children[i] = child = { - _: children[i], - parent: node1, - children: (child = children[i].children) && child.slice() || [], - A: null, - a: null, - z: 0, - m: 0, - c: 0, - s: 0, - t: null, - i: i - }).a = child); - } - } - return root1.children[0]; - } - function firstWalk(v) { - var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null; - if (children.length) { - d3_layout_treeShift(v); - var midpoint = (children[0].z + children[children.length - 1].z) / 2; - if (w) { - v.z = w.z + separation(v._, w._); - v.m = v.z - midpoint; - } else { - v.z = midpoint; - } - } else if (w) { - v.z = w.z + separation(v._, w._); - } - v.parent.A = apportion(v, w, v.parent.A || siblings[0]); - } - function secondWalk(v) { - v._.x = v.z + v.parent.m; - v.m += v.parent.m; - } - function apportion(v, w, ancestor) { - if (w) { - var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift; - while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) { - vom = d3_layout_treeLeft(vom); - vop = d3_layout_treeRight(vop); - vop.a = v; - shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); - if (shift > 0) { - d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift); - sip += shift; - sop += shift; - } - sim += vim.m; - sip += vip.m; - som += vom.m; - sop += vop.m; - } - if (vim && !d3_layout_treeRight(vop)) { - vop.t = vim; - vop.m += sim - sop; - } - if (vip && !d3_layout_treeLeft(vom)) { - vom.t = vip; - vom.m += sip - som; - ancestor = v; - } - } - return ancestor; - } - function sizeNode(node) { - node.x *= size[0]; - node.y = node.depth * size[1]; - } - tree.separation = function(x) { - if (!arguments.length) return separation; - separation = x; - return tree; - }; - tree.size = function(x) { - if (!arguments.length) return nodeSize ? null : size; - nodeSize = (size = x) == null ? sizeNode : null; - return tree; - }; - tree.nodeSize = function(x) { - if (!arguments.length) return nodeSize ? size : null; - nodeSize = (size = x) == null ? null : sizeNode; - return tree; - }; - return d3_layout_hierarchyRebind(tree, hierarchy); - }; - function d3_layout_treeSeparation(a, b) { - return a.parent == b.parent ? 1 : 2; - } - function d3_layout_treeLeft(v) { - var children = v.children; - return children.length ? children[0] : v.t; - } - function d3_layout_treeRight(v) { - var children = v.children, n; - return (n = children.length) ? children[n - 1] : v.t; - } - function d3_layout_treeMove(wm, wp, shift) { - var change = shift / (wp.i - wm.i); - wp.c -= change; - wp.s += shift; - wm.c += change; - wp.z += shift; - wp.m += shift; - } - function d3_layout_treeShift(v) { - var shift = 0, change = 0, children = v.children, i = children.length, w; - while (--i >= 0) { - w = children[i]; - w.z += shift; - w.m += shift; - shift += w.s + (change += w.c); - } - } - function d3_layout_treeAncestor(vim, v, ancestor) { - return vim.a.parent === v.parent ? vim.a : ancestor; - } - d3.layout.cluster = function() { - var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false; - function cluster(d, i) { - var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0; - d3_layout_hierarchyVisitAfter(root, function(node) { - var children = node.children; - if (children && children.length) { - node.x = d3_layout_clusterX(children); - node.y = d3_layout_clusterY(children); - } else { - node.x = previousNode ? x += separation(node, previousNode) : 0; - node.y = 0; - previousNode = node; - } - }); - var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2; - d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) { - node.x = (node.x - root.x) * size[0]; - node.y = (root.y - node.y) * size[1]; - } : function(node) { - node.x = (node.x - x0) / (x1 - x0) * size[0]; - node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1]; - }); - return nodes; - } - cluster.separation = function(x) { - if (!arguments.length) return separation; - separation = x; - return cluster; - }; - cluster.size = function(x) { - if (!arguments.length) return nodeSize ? null : size; - nodeSize = (size = x) == null; - return cluster; - }; - cluster.nodeSize = function(x) { - if (!arguments.length) return nodeSize ? size : null; - nodeSize = (size = x) != null; - return cluster; - }; - return d3_layout_hierarchyRebind(cluster, hierarchy); - }; - function d3_layout_clusterY(children) { - return 1 + d3.max(children, function(child) { - return child.y; - }); - } - function d3_layout_clusterX(children) { - return children.reduce(function(x, child) { - return x + child.x; - }, 0) / children.length; - } - function d3_layout_clusterLeft(node) { - var children = node.children; - return children && children.length ? d3_layout_clusterLeft(children[0]) : node; - } - function d3_layout_clusterRight(node) { - var children = node.children, n; - return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node; - } - d3.layout.treemap = function() { - var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = "squarify", ratio = .5 * (1 + Math.sqrt(5)); - function scale(children, k) { - var i = -1, n = children.length, child, area; - while (++i < n) { - area = (child = children[i]).value * (k < 0 ? 0 : k); - child.area = isNaN(area) || area <= 0 ? 0 : area; - } - } - function squarify(node) { - var children = node.children; - if (children && children.length) { - var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === "slice" ? rect.dx : mode === "dice" ? rect.dy : mode === "slice-dice" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n; - scale(remaining, rect.dx * rect.dy / node.value); - row.area = 0; - while ((n = remaining.length) > 0) { - row.push(child = remaining[n - 1]); - row.area += child.area; - if (mode !== "squarify" || (score = worst(row, u)) <= best) { - remaining.pop(); - best = score; - } else { - row.area -= row.pop().area; - position(row, u, rect, false); - u = Math.min(rect.dx, rect.dy); - row.length = row.area = 0; - best = Infinity; - } - } - if (row.length) { - position(row, u, rect, true); - row.length = row.area = 0; - } - children.forEach(squarify); - } - } - function stickify(node) { - var children = node.children; - if (children && children.length) { - var rect = pad(node), remaining = children.slice(), child, row = []; - scale(remaining, rect.dx * rect.dy / node.value); - row.area = 0; - while (child = remaining.pop()) { - row.push(child); - row.area += child.area; - if (child.z != null) { - position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length); - row.length = row.area = 0; - } - } - children.forEach(stickify); - } - } - function worst(row, u) { - var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length; - while (++i < n) { - if (!(r = row[i].area)) continue; - if (r < rmin) rmin = r; - if (r > rmax) rmax = r; - } - s *= s; - u *= u; - return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity; - } - function position(row, u, rect, flush) { - var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o; - if (u == rect.dx) { - if (flush || v > rect.dy) v = rect.dy; - while (++i < n) { - o = row[i]; - o.x = x; - o.y = y; - o.dy = v; - x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0); - } - o.z = true; - o.dx += rect.x + rect.dx - x; - rect.y += v; - rect.dy -= v; - } else { - if (flush || v > rect.dx) v = rect.dx; - while (++i < n) { - o = row[i]; - o.x = x; - o.y = y; - o.dx = v; - y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0); - } - o.z = false; - o.dy += rect.y + rect.dy - y; - rect.x += v; - rect.dx -= v; - } - } - function treemap(d) { - var nodes = stickies || hierarchy(d), root = nodes[0]; - root.x = root.y = 0; - if (root.value) root.dx = size[0], root.dy = size[1]; else root.dx = root.dy = 0; - if (stickies) hierarchy.revalue(root); - scale([ root ], root.dx * root.dy / root.value); - (stickies ? stickify : squarify)(root); - if (sticky) stickies = nodes; - return nodes; - } - treemap.size = function(x) { - if (!arguments.length) return size; - size = x; - return treemap; - }; - treemap.padding = function(x) { - if (!arguments.length) return padding; - function padFunction(node) { - var p = x.call(treemap, node, node.depth); - return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p); - } - function padConstant(node) { - return d3_layout_treemapPad(node, x); - } - var type; - pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], - padConstant) : padConstant; - return treemap; - }; - treemap.round = function(x) { - if (!arguments.length) return round != Number; - round = x ? Math.round : Number; - return treemap; - }; - treemap.sticky = function(x) { - if (!arguments.length) return sticky; - sticky = x; - stickies = null; - return treemap; - }; - treemap.ratio = function(x) { - if (!arguments.length) return ratio; - ratio = x; - return treemap; - }; - treemap.mode = function(x) { - if (!arguments.length) return mode; - mode = x + ""; - return treemap; - }; - return d3_layout_hierarchyRebind(treemap, hierarchy); - }; - function d3_layout_treemapPadNull(node) { - return { - x: node.x, - y: node.y, - dx: node.dx, - dy: node.dy - }; - } - function d3_layout_treemapPad(node, padding) { - var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2]; - if (dx < 0) { - x += dx / 2; - dx = 0; - } - if (dy < 0) { - y += dy / 2; - dy = 0; - } - return { - x: x, - y: y, - dx: dx, - dy: dy - }; - } - d3.random = { - normal: function(µ, σ) { - var n = arguments.length; - if (n < 2) σ = 1; - if (n < 1) µ = 0; - return function() { - var x, y, r; - do { - x = Math.random() * 2 - 1; - y = Math.random() * 2 - 1; - r = x * x + y * y; - } while (!r || r > 1); - return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r); - }; - }, - logNormal: function() { - var random = d3.random.normal.apply(d3, arguments); - return function() { - return Math.exp(random()); - }; - }, - bates: function(m) { - var random = d3.random.irwinHall(m); - return function() { - return random() / m; - }; - }, - irwinHall: function(m) { - return function() { - for (var s = 0, j = 0; j < m; j++) s += Math.random(); - return s; - }; - } - }; - d3.scale = {}; - function d3_scaleExtent(domain) { - var start = domain[0], stop = domain[domain.length - 1]; - return start < stop ? [ start, stop ] : [ stop, start ]; - } - function d3_scaleRange(scale) { - return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range()); - } - function d3_scale_bilinear(domain, range, uninterpolate, interpolate) { - var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]); - return function(x) { - return i(u(x)); - }; - } - function d3_scale_nice(domain, nice) { - var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx; - if (x1 < x0) { - dx = i0, i0 = i1, i1 = dx; - dx = x0, x0 = x1, x1 = dx; - } - domain[i0] = nice.floor(x0); - domain[i1] = nice.ceil(x1); - return domain; - } - function d3_scale_niceStep(step) { - return step ? { - floor: function(x) { - return Math.floor(x / step) * step; - }, - ceil: function(x) { - return Math.ceil(x / step) * step; - } - } : d3_scale_niceIdentity; - } - var d3_scale_niceIdentity = { - floor: d3_identity, - ceil: d3_identity - }; - function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { - var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1; - if (domain[k] < domain[0]) { - domain = domain.slice().reverse(); - range = range.slice().reverse(); - } - while (++j <= k) { - u.push(uninterpolate(domain[j - 1], domain[j])); - i.push(interpolate(range[j - 1], range[j])); - } - return function(x) { - var j = d3.bisect(domain, x, 1, k) - 1; - return i[j](u[j](x)); - }; - } - d3.scale.linear = function() { - return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false); - }; - function d3_scale_linear(domain, range, interpolate, clamp) { - var output, input; - function rescale() { - var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber; - output = linear(domain, range, uninterpolate, interpolate); - input = linear(range, domain, uninterpolate, d3_interpolate); - return scale; - } - function scale(x) { - return output(x); - } - scale.invert = function(y) { - return input(y); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.map(Number); - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.rangeRound = function(x) { - return scale.range(x).interpolate(d3_interpolateRound); - }; - scale.clamp = function(x) { - if (!arguments.length) return clamp; - clamp = x; - return rescale(); - }; - scale.interpolate = function(x) { - if (!arguments.length) return interpolate; - interpolate = x; - return rescale(); - }; - scale.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - scale.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - scale.nice = function(m) { - d3_scale_linearNice(domain, m); - return rescale(); - }; - scale.copy = function() { - return d3_scale_linear(domain, range, interpolate, clamp); - }; - return rescale(); - } - function d3_scale_linearRebind(scale, linear) { - return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); - } - function d3_scale_linearNice(domain, m) { - d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2])); - d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2])); - return domain; - } - function d3_scale_linearTickRange(domain, m) { - if (m == null) m = 10; - var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step; - if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2; - extent[0] = Math.ceil(extent[0] / step) * step; - extent[1] = Math.floor(extent[1] / step) * step + step * .5; - extent[2] = step; - return extent; - } - function d3_scale_linearTicks(domain, m) { - return d3.range.apply(d3, d3_scale_linearTickRange(domain, m)); - } - function d3_scale_linearTickFormat(domain, m, format) { - var range = d3_scale_linearTickRange(domain, m); - if (format) { - var match = d3_format_re.exec(format); - match.shift(); - if (match[8] === "s") { - var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1]))); - if (!match[7]) match[7] = "." + d3_scale_linearPrecision(prefix.scale(range[2])); - match[8] = "f"; - format = d3.format(match.join("")); - return function(d) { - return format(prefix.scale(d)) + prefix.symbol; - }; - } - if (!match[7]) match[7] = "." + d3_scale_linearFormatPrecision(match[8], range); - format = match.join(""); - } else { - format = ",." + d3_scale_linearPrecision(range[2]) + "f"; - } - return d3.format(format); - } - var d3_scale_linearFormatSignificant = { - s: 1, - g: 1, - p: 1, - r: 1, - e: 1 - }; - function d3_scale_linearPrecision(value) { - return -Math.floor(Math.log(value) / Math.LN10 + .01); - } - function d3_scale_linearFormatPrecision(type, range) { - var p = d3_scale_linearPrecision(range[2]); - return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== "e") : p - (type === "%") * 2; - } - d3.scale.log = function() { - return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]); - }; - function d3_scale_log(linear, base, positive, domain) { - function log(x) { - return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base); - } - function pow(x) { - return positive ? Math.pow(base, x) : -Math.pow(base, -x); - } - function scale(x) { - return linear(log(x)); - } - scale.invert = function(x) { - return pow(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - positive = x[0] >= 0; - linear.domain((domain = x.map(Number)).map(log)); - return scale; - }; - scale.base = function(_) { - if (!arguments.length) return base; - base = +_; - linear.domain(domain.map(log)); - return scale; - }; - scale.nice = function() { - var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative); - linear.domain(niced); - domain = niced.map(pow); - return scale; - }; - scale.ticks = function() { - var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base; - if (isFinite(j - i)) { - if (positive) { - for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k); - ticks.push(pow(i)); - } else { - ticks.push(pow(i)); - for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k); - } - for (i = 0; ticks[i] < u; i++) {} - for (j = ticks.length; ticks[j - 1] > v; j--) {} - ticks = ticks.slice(i, j); - } - return ticks; - }; - scale.tickFormat = function(n, format) { - if (!arguments.length) return d3_scale_logFormat; - if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== "function") format = d3.format(format); - var k = Math.max(1, base * n / scale.ticks().length); - return function(d) { - var i = d / pow(Math.round(log(d))); - if (i * base < base - .5) i *= base; - return i <= k ? format(d) : ""; - }; - }; - scale.copy = function() { - return d3_scale_log(linear.copy(), base, positive, domain); - }; - return d3_scale_linearRebind(scale, linear); - } - var d3_scale_logFormat = d3.format(".0e"), d3_scale_logNiceNegative = { - floor: function(x) { - return -Math.ceil(-x); - }, - ceil: function(x) { - return -Math.floor(-x); - } - }; - d3.scale.pow = function() { - return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]); - }; - function d3_scale_pow(linear, exponent, domain) { - var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent); - function scale(x) { - return linear(powp(x)); - } - scale.invert = function(x) { - return powb(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - linear.domain((domain = x.map(Number)).map(powp)); - return scale; - }; - scale.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - scale.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - scale.nice = function(m) { - return scale.domain(d3_scale_linearNice(domain, m)); - }; - scale.exponent = function(x) { - if (!arguments.length) return exponent; - powp = d3_scale_powPow(exponent = x); - powb = d3_scale_powPow(1 / exponent); - linear.domain(domain.map(powp)); - return scale; - }; - scale.copy = function() { - return d3_scale_pow(linear.copy(), exponent, domain); - }; - return d3_scale_linearRebind(scale, linear); - } - function d3_scale_powPow(e) { - return function(x) { - return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e); - }; - } - d3.scale.sqrt = function() { - return d3.scale.pow().exponent(.5); - }; - d3.scale.ordinal = function() { - return d3_scale_ordinal([], { - t: "range", - a: [ [] ] - }); - }; - function d3_scale_ordinal(domain, ranger) { - var index, range, rangeBand; - function scale(x) { - return range[((index.get(x) || (ranger.t === "range" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length]; - } - function steps(start, step) { - return d3.range(domain.length).map(function(i) { - return start + step * i; - }); - } - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = []; - index = new d3_Map(); - var i = -1, n = x.length, xi; - while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi)); - return scale[ranger.t].apply(scale, ranger.a); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - rangeBand = 0; - ranger = { - t: "range", - a: arguments - }; - return scale; - }; - scale.rangePoints = function(x, padding) { - if (arguments.length < 2) padding = 0; - var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, - 0) : (stop - start) / (domain.length - 1 + padding); - range = steps(start + step * padding / 2, step); - rangeBand = 0; - ranger = { - t: "rangePoints", - a: arguments - }; - return scale; - }; - scale.rangeRoundPoints = function(x, padding) { - if (arguments.length < 2) padding = 0; - var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), - 0) : (stop - start) / (domain.length - 1 + padding) | 0; - range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step); - rangeBand = 0; - ranger = { - t: "rangeRoundPoints", - a: arguments - }; - return scale; - }; - scale.rangeBands = function(x, padding, outerPadding) { - if (arguments.length < 2) padding = 0; - if (arguments.length < 3) outerPadding = padding; - var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding); - range = steps(start + step * outerPadding, step); - if (reverse) range.reverse(); - rangeBand = step * (1 - padding); - ranger = { - t: "rangeBands", - a: arguments - }; - return scale; - }; - scale.rangeRoundBands = function(x, padding, outerPadding) { - if (arguments.length < 2) padding = 0; - if (arguments.length < 3) outerPadding = padding; - var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)); - range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step); - if (reverse) range.reverse(); - rangeBand = Math.round(step * (1 - padding)); - ranger = { - t: "rangeRoundBands", - a: arguments - }; - return scale; - }; - scale.rangeBand = function() { - return rangeBand; - }; - scale.rangeExtent = function() { - return d3_scaleExtent(ranger.a[0]); - }; - scale.copy = function() { - return d3_scale_ordinal(domain, ranger); - }; - return scale.domain(domain); - } - d3.scale.category10 = function() { - return d3.scale.ordinal().range(d3_category10); - }; - d3.scale.category20 = function() { - return d3.scale.ordinal().range(d3_category20); - }; - d3.scale.category20b = function() { - return d3.scale.ordinal().range(d3_category20b); - }; - d3.scale.category20c = function() { - return d3.scale.ordinal().range(d3_category20c); - }; - var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString); - var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString); - var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString); - var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString); - d3.scale.quantile = function() { - return d3_scale_quantile([], []); - }; - function d3_scale_quantile(domain, range) { - var thresholds; - function rescale() { - var k = 0, q = range.length; - thresholds = []; - while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q); - return scale; - } - function scale(x) { - if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)]; - } - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending); - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.quantiles = function() { - return thresholds; - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ]; - }; - scale.copy = function() { - return d3_scale_quantile(domain, range); - }; - return rescale(); - } - d3.scale.quantize = function() { - return d3_scale_quantize(0, 1, [ 0, 1 ]); - }; - function d3_scale_quantize(x0, x1, range) { - var kx, i; - function scale(x) { - return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))]; - } - function rescale() { - kx = range.length / (x1 - x0); - i = range.length - 1; - return scale; - } - scale.domain = function(x) { - if (!arguments.length) return [ x0, x1 ]; - x0 = +x[0]; - x1 = +x[x.length - 1]; - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - y = y < 0 ? NaN : y / kx + x0; - return [ y, y + 1 / kx ]; - }; - scale.copy = function() { - return d3_scale_quantize(x0, x1, range); - }; - return rescale(); - } - d3.scale.threshold = function() { - return d3_scale_threshold([ .5 ], [ 0, 1 ]); - }; - function d3_scale_threshold(domain, range) { - function scale(x) { - if (x <= x) return range[d3.bisect(domain, x)]; - } - scale.domain = function(_) { - if (!arguments.length) return domain; - domain = _; - return scale; - }; - scale.range = function(_) { - if (!arguments.length) return range; - range = _; - return scale; - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - return [ domain[y - 1], domain[y] ]; - }; - scale.copy = function() { - return d3_scale_threshold(domain, range); - }; - return scale; - } - d3.scale.identity = function() { - return d3_scale_identity([ 0, 1 ]); - }; - function d3_scale_identity(domain) { - function identity(x) { - return +x; - } - identity.invert = identity; - identity.domain = identity.range = function(x) { - if (!arguments.length) return domain; - domain = x.map(identity); - return identity; - }; - identity.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - identity.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - identity.copy = function() { - return d3_scale_identity(domain); - }; - return identity; - } - d3.svg = {}; - function d3_zero() { - return 0; - } - d3.svg.arc = function() { - var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle; - function arc() { - var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1; - if (r1 < r0) rc = r1, r1 = r0, r0 = rc; - if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : "") + "Z"; - var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = []; - if (ap = (+padAngle.apply(this, arguments) || 0) / 2) { - rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments); - if (!cw) p1 *= -1; - if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap)); - if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap)); - } - if (r1) { - x0 = r1 * Math.cos(a0 + p1); - y0 = r1 * Math.sin(a0 + p1); - x1 = r1 * Math.cos(a1 - p1); - y1 = r1 * Math.sin(a1 - p1); - var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1; - if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) { - var h1 = (a0 + a1) / 2; - x0 = r1 * Math.cos(h1); - y0 = r1 * Math.sin(h1); - x1 = y1 = null; - } - } else { - x0 = y0 = 0; - } - if (r0) { - x2 = r0 * Math.cos(a1 - p0); - y2 = r0 * Math.sin(a1 - p0); - x3 = r0 * Math.cos(a0 + p0); - y3 = r0 * Math.sin(a0 + p0); - var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1; - if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) { - var h0 = (a0 + a1) / 2; - x2 = r0 * Math.cos(h0); - y2 = r0 * Math.sin(h0); - x3 = y3 = null; - } - } else { - x2 = y2 = 0; - } - if (da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) { - cr = r0 < r1 ^ cw ? 0 : 1; - var rc1 = rc, rc0 = rc; - if (da < π) { - var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]); - rc0 = Math.min(rc, (r0 - lc) / (kc - 1)); - rc1 = Math.min(rc, (r1 - lc) / (kc + 1)); - } - if (x1 != null) { - var t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw); - if (rc === rc1) { - path.push("M", t30[0], "A", rc1, ",", rc1, " 0 0,", cr, " ", t30[1], "A", r1, ",", r1, " 0 ", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), ",", cw, " ", t12[1], "A", rc1, ",", rc1, " 0 0,", cr, " ", t12[0]); - } else { - path.push("M", t30[0], "A", rc1, ",", rc1, " 0 1,", cr, " ", t12[0]); - } - } else { - path.push("M", x0, ",", y0); - } - if (x3 != null) { - var t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw); - if (rc === rc0) { - path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t21[1], "A", r0, ",", r0, " 0 ", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), ",", 1 - cw, " ", t03[1], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]); - } else { - path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]); - } - } else { - path.push("L", x2, ",", y2); - } - } else { - path.push("M", x0, ",", y0); - if (x1 != null) path.push("A", r1, ",", r1, " 0 ", l1, ",", cw, " ", x1, ",", y1); - path.push("L", x2, ",", y2); - if (x3 != null) path.push("A", r0, ",", r0, " 0 ", l0, ",", 1 - cw, " ", x3, ",", y3); - } - path.push("Z"); - return path.join(""); - } - function circleSegment(r1, cw) { - return "M0," + r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + -r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + r1; - } - arc.innerRadius = function(v) { - if (!arguments.length) return innerRadius; - innerRadius = d3_functor(v); - return arc; - }; - arc.outerRadius = function(v) { - if (!arguments.length) return outerRadius; - outerRadius = d3_functor(v); - return arc; - }; - arc.cornerRadius = function(v) { - if (!arguments.length) return cornerRadius; - cornerRadius = d3_functor(v); - return arc; - }; - arc.padRadius = function(v) { - if (!arguments.length) return padRadius; - padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v); - return arc; - }; - arc.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3_functor(v); - return arc; - }; - arc.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3_functor(v); - return arc; - }; - arc.padAngle = function(v) { - if (!arguments.length) return padAngle; - padAngle = d3_functor(v); - return arc; - }; - arc.centroid = function() { - var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ; - return [ Math.cos(a) * r, Math.sin(a) * r ]; - }; - return arc; - }; - var d3_svg_arcAuto = "auto"; - function d3_svg_arcInnerRadius(d) { - return d.innerRadius; - } - function d3_svg_arcOuterRadius(d) { - return d.outerRadius; - } - function d3_svg_arcStartAngle(d) { - return d.startAngle; - } - function d3_svg_arcEndAngle(d) { - return d.endAngle; - } - function d3_svg_arcPadAngle(d) { - return d && d.padAngle; - } - function d3_svg_arcSweep(x0, y0, x1, y1) { - return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1; - } - function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) { - var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3; - if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; - return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ]; - } - function d3_svg_line(projection) { - var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7; - function line(data) { - var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y); - function segment() { - segments.push("M", interpolate(projection(points), tension)); - } - while (++i < n) { - if (defined.call(this, d = data[i], i)) { - points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]); - } else if (points.length) { - segment(); - points = []; - } - } - if (points.length) segment(); - return segments.length ? segments.join("") : null; - } - line.x = function(_) { - if (!arguments.length) return x; - x = _; - return line; - }; - line.y = function(_) { - if (!arguments.length) return y; - y = _; - return line; - }; - line.defined = function(_) { - if (!arguments.length) return defined; - defined = _; - return line; - }; - line.interpolate = function(_) { - if (!arguments.length) return interpolateKey; - if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; - return line; - }; - line.tension = function(_) { - if (!arguments.length) return tension; - tension = _; - return line; - }; - return line; - } - d3.svg.line = function() { - return d3_svg_line(d3_identity); - }; - var d3_svg_lineInterpolators = d3.map({ - linear: d3_svg_lineLinear, - "linear-closed": d3_svg_lineLinearClosed, - step: d3_svg_lineStep, - "step-before": d3_svg_lineStepBefore, - "step-after": d3_svg_lineStepAfter, - basis: d3_svg_lineBasis, - "basis-open": d3_svg_lineBasisOpen, - "basis-closed": d3_svg_lineBasisClosed, - bundle: d3_svg_lineBundle, - cardinal: d3_svg_lineCardinal, - "cardinal-open": d3_svg_lineCardinalOpen, - "cardinal-closed": d3_svg_lineCardinalClosed, - monotone: d3_svg_lineMonotone - }); - d3_svg_lineInterpolators.forEach(function(key, value) { - value.key = key; - value.closed = /-closed$/.test(key); - }); - function d3_svg_lineLinear(points) { - return points.length > 1 ? points.join("L") : points + "Z"; - } - function d3_svg_lineLinearClosed(points) { - return points.join("L") + "Z"; - } - function d3_svg_lineStep(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("H", (p[0] + (p = points[i])[0]) / 2, "V", p[1]); - if (n > 1) path.push("H", p[0]); - return path.join(""); - } - function d3_svg_lineStepBefore(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]); - return path.join(""); - } - function d3_svg_lineStepAfter(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]); - return path.join(""); - } - function d3_svg_lineCardinalOpen(points, tension) { - return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension)); - } - function d3_svg_lineCardinalClosed(points, tension) { - return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), - points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension)); - } - function d3_svg_lineCardinal(points, tension) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension)); - } - function d3_svg_lineHermite(points, tangents) { - if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) { - return d3_svg_lineLinear(points); - } - var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1; - if (quad) { - path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1]; - p0 = points[1]; - pi = 2; - } - if (tangents.length > 1) { - t = tangents[1]; - p = points[pi]; - pi++; - path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; - for (var i = 2; i < tangents.length; i++, pi++) { - p = points[pi]; - t = tangents[i]; - path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; - } - } - if (quad) { - var lp = points[pi]; - path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1]; - } - return path; - } - function d3_svg_lineCardinalTangents(points, tension) { - var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length; - while (++i < n) { - p0 = p1; - p1 = p2; - p2 = points[i]; - tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]); - } - return tangents; - } - function d3_svg_lineBasis(points) { - if (points.length < 3) return d3_svg_lineLinear(points); - var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0, "L", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; - points.push(points[n - 1]); - while (++i <= n) { - pi = points[i]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - points.pop(); - path.push("L", pi); - return path.join(""); - } - function d3_svg_lineBasisOpen(points) { - if (points.length < 4) return d3_svg_lineLinear(points); - var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ]; - while (++i < 3) { - pi = points[i]; - px.push(pi[0]); - py.push(pi[1]); - } - path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)); - --i; - while (++i < n) { - pi = points[i]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); - } - function d3_svg_lineBasisClosed(points) { - var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = []; - while (++i < 4) { - pi = points[i % n]; - px.push(pi[0]); - py.push(pi[1]); - } - path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; - --i; - while (++i < m) { - pi = points[i % n]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); - } - function d3_svg_lineBundle(points, tension) { - var n = points.length - 1; - if (n) { - var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t; - while (++i <= n) { - p = points[i]; - t = i / n; - p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx); - p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy); - } - } - return d3_svg_lineBasis(points); - } - function d3_svg_lineDot4(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; - } - var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ]; - function d3_svg_lineBasisBezier(path, x, y) { - path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y)); - } - function d3_svg_lineSlope(p0, p1) { - return (p1[1] - p0[1]) / (p1[0] - p0[0]); - } - function d3_svg_lineFiniteDifferences(points) { - var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1); - while (++i < j) { - m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2; - } - m[i] = d; - return m; - } - function d3_svg_lineMonotoneTangents(points) { - var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1; - while (++i < j) { - d = d3_svg_lineSlope(points[i], points[i + 1]); - if (abs(d) < ε) { - m[i] = m[i + 1] = 0; - } else { - a = m[i] / d; - b = m[i + 1] / d; - s = a * a + b * b; - if (s > 9) { - s = d * 3 / Math.sqrt(s); - m[i] = s * a; - m[i + 1] = s * b; - } - } - } - i = -1; - while (++i <= j) { - s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i])); - tangents.push([ s || 0, m[i] * s || 0 ]); - } - return tangents; - } - function d3_svg_lineMonotone(points) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points)); - } - d3.svg.line.radial = function() { - var line = d3_svg_line(d3_svg_lineRadial); - line.radius = line.x, delete line.x; - line.angle = line.y, delete line.y; - return line; - }; - function d3_svg_lineRadial(points) { - var point, i = -1, n = points.length, r, a; - while (++i < n) { - point = points[i]; - r = point[0]; - a = point[1] - halfπ; - point[0] = r * Math.cos(a); - point[1] = r * Math.sin(a); - } - return points; - } - function d3_svg_area(projection) { - var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7; - function area(data) { - var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() { - return x; - } : d3_functor(x1), fy1 = y0 === y1 ? function() { - return y; - } : d3_functor(y1), x, y; - function segment() { - segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z"); - } - while (++i < n) { - if (defined.call(this, d = data[i], i)) { - points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]); - points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]); - } else if (points0.length) { - segment(); - points0 = []; - points1 = []; - } - } - if (points0.length) segment(); - return segments.length ? segments.join("") : null; - } - area.x = function(_) { - if (!arguments.length) return x1; - x0 = x1 = _; - return area; - }; - area.x0 = function(_) { - if (!arguments.length) return x0; - x0 = _; - return area; - }; - area.x1 = function(_) { - if (!arguments.length) return x1; - x1 = _; - return area; - }; - area.y = function(_) { - if (!arguments.length) return y1; - y0 = y1 = _; - return area; - }; - area.y0 = function(_) { - if (!arguments.length) return y0; - y0 = _; - return area; - }; - area.y1 = function(_) { - if (!arguments.length) return y1; - y1 = _; - return area; - }; - area.defined = function(_) { - if (!arguments.length) return defined; - defined = _; - return area; - }; - area.interpolate = function(_) { - if (!arguments.length) return interpolateKey; - if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; - interpolateReverse = interpolate.reverse || interpolate; - L = interpolate.closed ? "M" : "L"; - return area; - }; - area.tension = function(_) { - if (!arguments.length) return tension; - tension = _; - return area; - }; - return area; - } - d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter; - d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore; - d3.svg.area = function() { - return d3_svg_area(d3_identity); - }; - d3.svg.area.radial = function() { - var area = d3_svg_area(d3_svg_lineRadial); - area.radius = area.x, delete area.x; - area.innerRadius = area.x0, delete area.x0; - area.outerRadius = area.x1, delete area.x1; - area.angle = area.y, delete area.y; - area.startAngle = area.y0, delete area.y0; - area.endAngle = area.y1, delete area.y1; - return area; - }; - d3.svg.chord = function() { - var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; - function chord(d, i) { - var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i); - return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z"; - } - function subgroup(self, f, d, i) { - var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ; - return { - r: r, - a0: a0, - a1: a1, - p0: [ r * Math.cos(a0), r * Math.sin(a0) ], - p1: [ r * Math.cos(a1), r * Math.sin(a1) ] - }; - } - function equals(a, b) { - return a.a0 == b.a0 && a.a1 == b.a1; - } - function arc(r, p, a) { - return "A" + r + "," + r + " 0 " + +(a > π) + ",1 " + p; - } - function curve(r0, p0, r1, p1) { - return "Q 0,0 " + p1; - } - chord.radius = function(v) { - if (!arguments.length) return radius; - radius = d3_functor(v); - return chord; - }; - chord.source = function(v) { - if (!arguments.length) return source; - source = d3_functor(v); - return chord; - }; - chord.target = function(v) { - if (!arguments.length) return target; - target = d3_functor(v); - return chord; - }; - chord.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3_functor(v); - return chord; - }; - chord.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3_functor(v); - return chord; - }; - return chord; - }; - function d3_svg_chordRadius(d) { - return d.radius; - } - d3.svg.diagonal = function() { - var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection; - function diagonal(d, i) { - var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, { - x: p0.x, - y: m - }, { - x: p3.x, - y: m - }, p3 ]; - p = p.map(projection); - return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3]; - } - diagonal.source = function(x) { - if (!arguments.length) return source; - source = d3_functor(x); - return diagonal; - }; - diagonal.target = function(x) { - if (!arguments.length) return target; - target = d3_functor(x); - return diagonal; - }; - diagonal.projection = function(x) { - if (!arguments.length) return projection; - projection = x; - return diagonal; - }; - return diagonal; - }; - function d3_svg_diagonalProjection(d) { - return [ d.x, d.y ]; - } - d3.svg.diagonal.radial = function() { - var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection; - diagonal.projection = function(x) { - return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection; - }; - return diagonal; - }; - function d3_svg_diagonalRadialProjection(projection) { - return function() { - var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ; - return [ r * Math.cos(a), r * Math.sin(a) ]; - }; - } - d3.svg.symbol = function() { - var type = d3_svg_symbolType, size = d3_svg_symbolSize; - function symbol(d, i) { - return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i)); - } - symbol.type = function(x) { - if (!arguments.length) return type; - type = d3_functor(x); - return symbol; - }; - symbol.size = function(x) { - if (!arguments.length) return size; - size = d3_functor(x); - return symbol; - }; - return symbol; - }; - function d3_svg_symbolSize() { - return 64; - } - function d3_svg_symbolType() { - return "circle"; - } - function d3_svg_symbolCircle(size) { - var r = Math.sqrt(size / π); - return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z"; - } - var d3_svg_symbols = d3.map({ - circle: d3_svg_symbolCircle, - cross: function(size) { - var r = Math.sqrt(size / 5) / 2; - return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z"; - }, - diamond: function(size) { - var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30; - return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z"; - }, - square: function(size) { - var r = Math.sqrt(size) / 2; - return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z"; - }, - "triangle-down": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z"; - }, - "triangle-up": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z"; - } - }); - d3.svg.symbolTypes = d3_svg_symbols.keys(); - var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians); - d3_selectionPrototype.transition = function(name) { - var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || { - time: Date.now(), - ease: d3_ease_cubicInOut, - delay: 0, - duration: 250 - }; - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) d3_transitionNode(node, i, ns, id, transition); - subgroup.push(node); - } - } - return d3_transition(subgroups, ns, id); - }; - d3_selectionPrototype.interrupt = function(name) { - return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name))); - }; - var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace()); - function d3_selection_interruptNS(ns) { - return function() { - var lock, activeId, active; - if ((lock = this[ns]) && (active = lock[activeId = lock.active])) { - active.timer.c = null; - active.timer.t = NaN; - if (--lock.count) delete lock[activeId]; else delete this[ns]; - lock.active += .5; - active.event && active.event.interrupt.call(this, this.__data__, active.index); - } - }; - } - function d3_transition(groups, ns, id) { - d3_subclass(groups, d3_transitionPrototype); - groups.namespace = ns; - groups.id = id; - return groups; - } - var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit; - d3_transitionPrototype.call = d3_selectionPrototype.call; - d3_transitionPrototype.empty = d3_selectionPrototype.empty; - d3_transitionPrototype.node = d3_selectionPrototype.node; - d3_transitionPrototype.size = d3_selectionPrototype.size; - d3.transition = function(selection, name) { - return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection); - }; - d3.transition.prototype = d3_transitionPrototype; - d3_transitionPrototype.select = function(selector) { - var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node; - selector = d3_selection_selector(selector); - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - d3_transitionNode(subnode, i, ns, id, node[ns][id]); - subgroup.push(subnode); - } else { - subgroup.push(null); - } - } - } - return d3_transition(subgroups, ns, id); - }; - d3_transitionPrototype.selectAll = function(selector) { - var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition; - selector = d3_selection_selectorAll(selector); - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - transition = node[ns][id]; - subnodes = selector.call(node, node.__data__, i, j); - subgroups.push(subgroup = []); - for (var k = -1, o = subnodes.length; ++k < o; ) { - if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition); - subgroup.push(subnode); - } - } - } - } - return d3_transition(subgroups, ns, id); - }; - d3_transitionPrototype.filter = function(filter) { - var subgroups = [], subgroup, group, node; - if (typeof filter !== "function") filter = d3_selection_filter(filter); - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { - subgroup.push(node); - } - } - } - return d3_transition(subgroups, this.namespace, this.id); - }; - d3_transitionPrototype.tween = function(name, tween) { - var id = this.id, ns = this.namespace; - if (arguments.length < 2) return this.node()[ns][id].tween.get(name); - return d3_selection_each(this, tween == null ? function(node) { - node[ns][id].tween.remove(name); - } : function(node) { - node[ns][id].tween.set(name, tween); - }); - }; - function d3_transition_tween(groups, name, value, tween) { - var id = groups.id, ns = groups.namespace; - return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) { - node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j))); - } : (value = tween(value), function(node) { - node[ns][id].tween.set(name, value); - })); - } - d3_transitionPrototype.attr = function(nameNS, value) { - if (arguments.length < 2) { - for (value in nameNS) this.attr(value, nameNS[value]); - return this; - } - var interpolate = nameNS == "transform" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS); - function attrNull() { - this.removeAttribute(name); - } - function attrNullNS() { - this.removeAttributeNS(name.space, name.local); - } - function attrTween(b) { - return b == null ? attrNull : (b += "", function() { - var a = this.getAttribute(name), i; - return a !== b && (i = interpolate(a, b), function(t) { - this.setAttribute(name, i(t)); - }); - }); - } - function attrTweenNS(b) { - return b == null ? attrNullNS : (b += "", function() { - var a = this.getAttributeNS(name.space, name.local), i; - return a !== b && (i = interpolate(a, b), function(t) { - this.setAttributeNS(name.space, name.local, i(t)); - }); - }); - } - return d3_transition_tween(this, "attr." + nameNS, value, name.local ? attrTweenNS : attrTween); - }; - d3_transitionPrototype.attrTween = function(nameNS, tween) { - var name = d3.ns.qualify(nameNS); - function attrTween(d, i) { - var f = tween.call(this, d, i, this.getAttribute(name)); - return f && function(t) { - this.setAttribute(name, f(t)); - }; - } - function attrTweenNS(d, i) { - var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local)); - return f && function(t) { - this.setAttributeNS(name.space, name.local, f(t)); - }; - } - return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween); - }; - d3_transitionPrototype.style = function(name, value, priority) { - var n = arguments.length; - if (n < 3) { - if (typeof name !== "string") { - if (n < 2) value = ""; - for (priority in name) this.style(priority, name[priority], value); - return this; - } - priority = ""; - } - function styleNull() { - this.style.removeProperty(name); - } - function styleString(b) { - return b == null ? styleNull : (b += "", function() { - var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i; - return a !== b && (i = d3_interpolate(a, b), function(t) { - this.style.setProperty(name, i(t), priority); - }); - }); - } - return d3_transition_tween(this, "style." + name, value, styleString); - }; - d3_transitionPrototype.styleTween = function(name, tween, priority) { - if (arguments.length < 3) priority = ""; - function styleTween(d, i) { - var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name)); - return f && function(t) { - this.style.setProperty(name, f(t), priority); - }; - } - return this.tween("style." + name, styleTween); - }; - d3_transitionPrototype.text = function(value) { - return d3_transition_tween(this, "text", value, d3_transition_text); - }; - function d3_transition_text(b) { - if (b == null) b = ""; - return function() { - this.textContent = b; - }; - } - d3_transitionPrototype.remove = function() { - var ns = this.namespace; - return this.each("end.transition", function() { - var p; - if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this); - }); - }; - d3_transitionPrototype.ease = function(value) { - var id = this.id, ns = this.namespace; - if (arguments.length < 1) return this.node()[ns][id].ease; - if (typeof value !== "function") value = d3.ease.apply(d3, arguments); - return d3_selection_each(this, function(node) { - node[ns][id].ease = value; - }); - }; - d3_transitionPrototype.delay = function(value) { - var id = this.id, ns = this.namespace; - if (arguments.length < 1) return this.node()[ns][id].delay; - return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { - node[ns][id].delay = +value.call(node, node.__data__, i, j); - } : (value = +value, function(node) { - node[ns][id].delay = value; - })); - }; - d3_transitionPrototype.duration = function(value) { - var id = this.id, ns = this.namespace; - if (arguments.length < 1) return this.node()[ns][id].duration; - return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { - node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j)); - } : (value = Math.max(1, value), function(node) { - node[ns][id].duration = value; - })); - }; - d3_transitionPrototype.each = function(type, listener) { - var id = this.id, ns = this.namespace; - if (arguments.length < 2) { - var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId; - try { - d3_transitionInheritId = id; - d3_selection_each(this, function(node, i, j) { - d3_transitionInherit = node[ns][id]; - type.call(node, node.__data__, i, j); - }); - } finally { - d3_transitionInherit = inherit; - d3_transitionInheritId = inheritId; - } - } else { - d3_selection_each(this, function(node) { - var transition = node[ns][id]; - (transition.event || (transition.event = d3.dispatch("start", "end", "interrupt"))).on(type, listener); - }); - } - return this; - }; - d3_transitionPrototype.transition = function() { - var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition; - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - if (node = group[i]) { - transition = node[ns][id0]; - d3_transitionNode(node, i, ns, id1, { - time: transition.time, - ease: transition.ease, - delay: transition.delay + transition.duration, - duration: transition.duration - }); - } - subgroup.push(node); - } - } - return d3_transition(subgroups, ns, id1); - }; - function d3_transitionNamespace(name) { - return name == null ? "__transition__" : "__transition_" + name + "__"; - } - function d3_transitionNode(node, i, ns, id, inherit) { - var lock = node[ns] || (node[ns] = { - active: 0, - count: 0 - }), transition = lock[id], time, timer, duration, ease, tweens; - function schedule(elapsed) { - var delay = transition.delay; - timer.t = delay + time; - if (delay <= elapsed) return start(elapsed - delay); - timer.c = start; - } - function start(elapsed) { - var activeId = lock.active, active = lock[activeId]; - if (active) { - active.timer.c = null; - active.timer.t = NaN; - --lock.count; - delete lock[activeId]; - active.event && active.event.interrupt.call(node, node.__data__, active.index); - } - for (var cancelId in lock) { - if (+cancelId < id) { - var cancel = lock[cancelId]; - cancel.timer.c = null; - cancel.timer.t = NaN; - --lock.count; - delete lock[cancelId]; - } - } - timer.c = tick; - d3_timer(function() { - if (timer.c && tick(elapsed || 1)) { - timer.c = null; - timer.t = NaN; - } - return 1; - }, 0, time); - lock.active = id; - transition.event && transition.event.start.call(node, node.__data__, i); - tweens = []; - transition.tween.forEach(function(key, value) { - if (value = value.call(node, node.__data__, i)) { - tweens.push(value); - } - }); - ease = transition.ease; - duration = transition.duration; - } - function tick(elapsed) { - var t = elapsed / duration, e = ease(t), n = tweens.length; - while (n > 0) { - tweens[--n].call(node, e); - } - if (t >= 1) { - transition.event && transition.event.end.call(node, node.__data__, i); - if (--lock.count) delete lock[id]; else delete node[ns]; - return 1; - } - } - if (!transition) { - time = inherit.time; - timer = d3_timer(schedule, 0, time); - transition = lock[id] = { - tween: new d3_Map(), - time: time, - timer: timer, - delay: inherit.delay, - duration: inherit.duration, - ease: inherit.ease, - index: i - }; - inherit = null; - ++lock.count; - } - } - d3.svg.axis = function() { - var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_; - function axis(g) { - g.each(function() { - var g = d3.select(this); - var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy(); - var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform; - var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"), - d3.transition(path)); - tickEnter.append("line"); - tickEnter.append("text"); - var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text"), sign = orient === "top" || orient === "left" ? -1 : 1, x1, x2, y1, y2; - if (orient === "bottom" || orient === "top") { - tickTransform = d3_svg_axisX, x1 = "x", y1 = "y", x2 = "x2", y2 = "y2"; - text.attr("dy", sign < 0 ? "0em" : ".71em").style("text-anchor", "middle"); - pathUpdate.attr("d", "M" + range[0] + "," + sign * outerTickSize + "V0H" + range[1] + "V" + sign * outerTickSize); - } else { - tickTransform = d3_svg_axisY, x1 = "y", y1 = "x", x2 = "y2", y2 = "x2"; - text.attr("dy", ".32em").style("text-anchor", sign < 0 ? "end" : "start"); - pathUpdate.attr("d", "M" + sign * outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + sign * outerTickSize); - } - lineEnter.attr(y2, sign * innerTickSize); - textEnter.attr(y1, sign * tickSpacing); - lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize); - textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing); - if (scale1.rangeBand) { - var x = scale1, dx = x.rangeBand() / 2; - scale0 = scale1 = function(d) { - return x(d) + dx; - }; - } else if (scale0.rangeBand) { - scale0 = scale1; - } else { - tickExit.call(tickTransform, scale1, scale0); - } - tickEnter.call(tickTransform, scale0, scale1); - tickUpdate.call(tickTransform, scale1, scale1); - }); - } - axis.scale = function(x) { - if (!arguments.length) return scale; - scale = x; - return axis; - }; - axis.orient = function(x) { - if (!arguments.length) return orient; - orient = x in d3_svg_axisOrients ? x + "" : d3_svg_axisDefaultOrient; - return axis; - }; - axis.ticks = function() { - if (!arguments.length) return tickArguments_; - tickArguments_ = d3_array(arguments); - return axis; - }; - axis.tickValues = function(x) { - if (!arguments.length) return tickValues; - tickValues = x; - return axis; - }; - axis.tickFormat = function(x) { - if (!arguments.length) return tickFormat_; - tickFormat_ = x; - return axis; - }; - axis.tickSize = function(x) { - var n = arguments.length; - if (!n) return innerTickSize; - innerTickSize = +x; - outerTickSize = +arguments[n - 1]; - return axis; - }; - axis.innerTickSize = function(x) { - if (!arguments.length) return innerTickSize; - innerTickSize = +x; - return axis; - }; - axis.outerTickSize = function(x) { - if (!arguments.length) return outerTickSize; - outerTickSize = +x; - return axis; - }; - axis.tickPadding = function(x) { - if (!arguments.length) return tickPadding; - tickPadding = +x; - return axis; - }; - axis.tickSubdivide = function() { - return arguments.length && axis; - }; - return axis; - }; - var d3_svg_axisDefaultOrient = "bottom", d3_svg_axisOrients = { - top: 1, - right: 1, - bottom: 1, - left: 1 - }; - function d3_svg_axisX(selection, x0, x1) { - selection.attr("transform", function(d) { - var v0 = x0(d); - return "translate(" + (isFinite(v0) ? v0 : x1(d)) + ",0)"; - }); - } - function d3_svg_axisY(selection, y0, y1) { - selection.attr("transform", function(d) { - var v0 = y0(d); - return "translate(0," + (isFinite(v0) ? v0 : y1(d)) + ")"; - }); - } - d3.svg.brush = function() { - var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0]; - function brush(g) { - g.each(function() { - var g = d3.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart); - var background = g.selectAll(".background").data([ 0 ]); - background.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"); - g.selectAll(".extent").data([ 0 ]).enter().append("rect").attr("class", "extent").style("cursor", "move"); - var resize = g.selectAll(".resize").data(resizes, d3_identity); - resize.exit().remove(); - resize.enter().append("g").attr("class", function(d) { - return "resize " + d; - }).style("cursor", function(d) { - return d3_svg_brushCursor[d]; - }).append("rect").attr("x", function(d) { - return /[ew]$/.test(d) ? -3 : null; - }).attr("y", function(d) { - return /^[ns]/.test(d) ? -3 : null; - }).attr("width", 6).attr("height", 6).style("visibility", "hidden"); - resize.style("display", brush.empty() ? "none" : null); - var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range; - if (x) { - range = d3_scaleRange(x); - backgroundUpdate.attr("x", range[0]).attr("width", range[1] - range[0]); - redrawX(gUpdate); - } - if (y) { - range = d3_scaleRange(y); - backgroundUpdate.attr("y", range[0]).attr("height", range[1] - range[0]); - redrawY(gUpdate); - } - redraw(gUpdate); - }); - } - brush.event = function(g) { - g.each(function() { - var event_ = event.of(this, arguments), extent1 = { - x: xExtent, - y: yExtent, - i: xExtentDomain, - j: yExtentDomain - }, extent0 = this.__chart__ || extent1; - this.__chart__ = extent1; - if (d3_transitionInheritId) { - d3.select(this).transition().each("start.brush", function() { - xExtentDomain = extent0.i; - yExtentDomain = extent0.j; - xExtent = extent0.x; - yExtent = extent0.y; - event_({ - type: "brushstart" - }); - }).tween("brush:brush", function() { - var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y); - xExtentDomain = yExtentDomain = null; - return function(t) { - xExtent = extent1.x = xi(t); - yExtent = extent1.y = yi(t); - event_({ - type: "brush", - mode: "resize" - }); - }; - }).each("end.brush", function() { - xExtentDomain = extent1.i; - yExtentDomain = extent1.j; - event_({ - type: "brush", - mode: "resize" - }); - event_({ - type: "brushend" - }); - }); - } else { - event_({ - type: "brushstart" - }); - event_({ - type: "brush", - mode: "resize" - }); - event_({ - type: "brushend" - }); - } - }); - }; - function redraw(g) { - g.selectAll(".resize").attr("transform", function(d) { - return "translate(" + xExtent[+/e$/.test(d)] + "," + yExtent[+/^s/.test(d)] + ")"; - }); - } - function redrawX(g) { - g.select(".extent").attr("x", xExtent[0]); - g.selectAll(".extent,.n>rect,.s>rect").attr("width", xExtent[1] - xExtent[0]); - } - function redrawY(g) { - g.select(".extent").attr("y", yExtent[0]); - g.selectAll(".extent,.e>rect,.w>rect").attr("height", yExtent[1] - yExtent[0]); - } - function brushstart() { - var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset; - var w = d3.select(d3_window(target)).on("keydown.brush", keydown).on("keyup.brush", keyup); - if (d3.event.changedTouches) { - w.on("touchmove.brush", brushmove).on("touchend.brush", brushend); - } else { - w.on("mousemove.brush", brushmove).on("mouseup.brush", brushend); - } - g.interrupt().selectAll("*").interrupt(); - if (dragging) { - origin[0] = xExtent[0] - origin[0]; - origin[1] = yExtent[0] - origin[1]; - } else if (resizing) { - var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing); - offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ]; - origin[0] = xExtent[ex]; - origin[1] = yExtent[ey]; - } else if (d3.event.altKey) center = origin.slice(); - g.style("pointer-events", "none").selectAll(".resize").style("display", null); - d3.select("body").style("cursor", eventTarget.style("cursor")); - event_({ - type: "brushstart" - }); - brushmove(); - function keydown() { - if (d3.event.keyCode == 32) { - if (!dragging) { - center = null; - origin[0] -= xExtent[1]; - origin[1] -= yExtent[1]; - dragging = 2; - } - d3_eventPreventDefault(); - } - } - function keyup() { - if (d3.event.keyCode == 32 && dragging == 2) { - origin[0] += xExtent[1]; - origin[1] += yExtent[1]; - dragging = 0; - d3_eventPreventDefault(); - } - } - function brushmove() { - var point = d3.mouse(target), moved = false; - if (offset) { - point[0] += offset[0]; - point[1] += offset[1]; - } - if (!dragging) { - if (d3.event.altKey) { - if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ]; - origin[0] = xExtent[+(point[0] < center[0])]; - origin[1] = yExtent[+(point[1] < center[1])]; - } else center = null; - } - if (resizingX && move1(point, x, 0)) { - redrawX(g); - moved = true; - } - if (resizingY && move1(point, y, 1)) { - redrawY(g); - moved = true; - } - if (moved) { - redraw(g); - event_({ - type: "brush", - mode: dragging ? "move" : "resize" - }); - } - } - function move1(point, scale, i) { - var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max; - if (dragging) { - r0 -= position; - r1 -= size + position; - } - min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i]; - if (dragging) { - max = (min += position) + size; - } else { - if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min)); - if (position < min) { - max = min; - min = position; - } else { - max = position; - } - } - if (extent[0] != min || extent[1] != max) { - if (i) yExtentDomain = null; else xExtentDomain = null; - extent[0] = min; - extent[1] = max; - return true; - } - } - function brushend() { - brushmove(); - g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null); - d3.select("body").style("cursor", null); - w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null); - dragRestore(); - event_({ - type: "brushend" - }); - } - } - brush.x = function(z) { - if (!arguments.length) return x; - x = z; - resizes = d3_svg_brushResizes[!x << 1 | !y]; - return brush; - }; - brush.y = function(z) { - if (!arguments.length) return y; - y = z; - resizes = d3_svg_brushResizes[!x << 1 | !y]; - return brush; - }; - brush.clamp = function(z) { - if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null; - if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z; - return brush; - }; - brush.extent = function(z) { - var x0, x1, y0, y1, t; - if (!arguments.length) { - if (x) { - if (xExtentDomain) { - x0 = xExtentDomain[0], x1 = xExtentDomain[1]; - } else { - x0 = xExtent[0], x1 = xExtent[1]; - if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1); - if (x1 < x0) t = x0, x0 = x1, x1 = t; - } - } - if (y) { - if (yExtentDomain) { - y0 = yExtentDomain[0], y1 = yExtentDomain[1]; - } else { - y0 = yExtent[0], y1 = yExtent[1]; - if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1); - if (y1 < y0) t = y0, y0 = y1, y1 = t; - } - } - return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ]; - } - if (x) { - x0 = z[0], x1 = z[1]; - if (y) x0 = x0[0], x1 = x1[0]; - xExtentDomain = [ x0, x1 ]; - if (x.invert) x0 = x(x0), x1 = x(x1); - if (x1 < x0) t = x0, x0 = x1, x1 = t; - if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ]; - } - if (y) { - y0 = z[0], y1 = z[1]; - if (x) y0 = y0[1], y1 = y1[1]; - yExtentDomain = [ y0, y1 ]; - if (y.invert) y0 = y(y0), y1 = y(y1); - if (y1 < y0) t = y0, y0 = y1, y1 = t; - if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ]; - } - return brush; - }; - brush.clear = function() { - if (!brush.empty()) { - xExtent = [ 0, 0 ], yExtent = [ 0, 0 ]; - xExtentDomain = yExtentDomain = null; - } - return brush; - }; - brush.empty = function() { - return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1]; - }; - return d3.rebind(brush, event, "on"); - }; - var d3_svg_brushCursor = { - n: "ns-resize", - e: "ew-resize", - s: "ns-resize", - w: "ew-resize", - nw: "nwse-resize", - ne: "nesw-resize", - se: "nwse-resize", - sw: "nesw-resize" - }; - var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ]; - var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat; - var d3_time_formatUtc = d3_time_format.utc; - var d3_time_formatIso = d3_time_formatUtc("%Y-%m-%dT%H:%M:%S.%LZ"); - d3_time_format.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? d3_time_formatIsoNative : d3_time_formatIso; - function d3_time_formatIsoNative(date) { - return date.toISOString(); - } - d3_time_formatIsoNative.parse = function(string) { - var date = new Date(string); - return isNaN(date) ? null : date; - }; - d3_time_formatIsoNative.toString = d3_time_formatIso.toString; - d3_time.second = d3_time_interval(function(date) { - return new d3_date(Math.floor(date / 1e3) * 1e3); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 1e3); - }, function(date) { - return date.getSeconds(); - }); - d3_time.seconds = d3_time.second.range; - d3_time.seconds.utc = d3_time.second.utc.range; - d3_time.minute = d3_time_interval(function(date) { - return new d3_date(Math.floor(date / 6e4) * 6e4); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 6e4); - }, function(date) { - return date.getMinutes(); - }); - d3_time.minutes = d3_time.minute.range; - d3_time.minutes.utc = d3_time.minute.utc.range; - d3_time.hour = d3_time_interval(function(date) { - var timezone = date.getTimezoneOffset() / 60; - return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 36e5); - }, function(date) { - return date.getHours(); - }); - d3_time.hours = d3_time.hour.range; - d3_time.hours.utc = d3_time.hour.utc.range; - d3_time.month = d3_time_interval(function(date) { - date = d3_time.day(date); - date.setDate(1); - return date; - }, function(date, offset) { - date.setMonth(date.getMonth() + offset); - }, function(date) { - return date.getMonth(); - }); - d3_time.months = d3_time.month.range; - d3_time.months.utc = d3_time.month.utc.range; - function d3_time_scale(linear, methods, format) { - function scale(x) { - return linear(x); - } - scale.invert = function(x) { - return d3_time_scaleDate(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return linear.domain().map(d3_time_scaleDate); - linear.domain(x); - return scale; - }; - function tickMethod(extent, count) { - var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target); - return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) { - return d / 31536e6; - }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i]; - } - scale.nice = function(interval, skip) { - var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" && tickMethod(extent, interval); - if (method) interval = method[0], skip = method[1]; - function skipped(date) { - return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length; - } - return scale.domain(d3_scale_nice(domain, skip > 1 ? { - floor: function(date) { - while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1); - return date; - }, - ceil: function(date) { - while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1); - return date; - } - } : interval)); - }; - scale.ticks = function(interval, skip) { - var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" ? tickMethod(extent, interval) : !interval.range && [ { - range: interval - }, skip ]; - if (method) interval = method[0], skip = method[1]; - return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip); - }; - scale.tickFormat = function() { - return format; - }; - scale.copy = function() { - return d3_time_scale(linear.copy(), methods, format); - }; - return d3_scale_linearRebind(scale, linear); - } - function d3_time_scaleDate(t) { - return new Date(t); - } - var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ]; - var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ]; - var d3_time_scaleLocalFormat = d3_time_format.multi([ [ ".%L", function(d) { - return d.getMilliseconds(); - } ], [ ":%S", function(d) { - return d.getSeconds(); - } ], [ "%I:%M", function(d) { - return d.getMinutes(); - } ], [ "%I %p", function(d) { - return d.getHours(); - } ], [ "%a %d", function(d) { - return d.getDay() && d.getDate() != 1; - } ], [ "%b %d", function(d) { - return d.getDate() != 1; - } ], [ "%B", function(d) { - return d.getMonth(); - } ], [ "%Y", d3_true ] ]); - var d3_time_scaleMilliseconds = { - range: function(start, stop, step) { - return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate); - }, - floor: d3_identity, - ceil: d3_identity - }; - d3_time_scaleLocalMethods.year = d3_time.year; - d3_time.scale = function() { - return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat); - }; - var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) { - return [ m[0].utc, m[1] ]; - }); - var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ ".%L", function(d) { - return d.getUTCMilliseconds(); - } ], [ ":%S", function(d) { - return d.getUTCSeconds(); - } ], [ "%I:%M", function(d) { - return d.getUTCMinutes(); - } ], [ "%I %p", function(d) { - return d.getUTCHours(); - } ], [ "%a %d", function(d) { - return d.getUTCDay() && d.getUTCDate() != 1; - } ], [ "%b %d", function(d) { - return d.getUTCDate() != 1; - } ], [ "%B", function(d) { - return d.getUTCMonth(); - } ], [ "%Y", d3_true ] ]); - d3_time_scaleUtcMethods.year = d3_time.year.utc; - d3_time.scale.utc = function() { - return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat); - }; - d3.text = d3_xhrType(function(request) { - return request.responseText; - }); - d3.json = function(url, callback) { - return d3_xhr(url, "application/json", d3_json, callback); - }; - function d3_json(request) { - return JSON.parse(request.responseText); - } - d3.html = function(url, callback) { - return d3_xhr(url, "text/html", d3_html, callback); - }; - function d3_html(request) { - var range = d3_document.createRange(); - range.selectNode(d3_document.body); - return range.createContextualFragment(request.responseText); - } - d3.xml = d3_xhrType(function(request) { - return request.responseXML; - }); - if (typeof define === "function" && define.amd) this.d3 = d3, define(d3); else if (typeof module === "object" && module.exports) module.exports = d3; else this.d3 = d3; -}(); \ No newline at end of file diff --git a/dist/extensions/Graph/lib/d3.layout.cloud.js b/dist/extensions/Graph/lib/d3.layout.cloud.js deleted file mode 100644 index 8165a4175..000000000 --- a/dist/extensions/Graph/lib/d3.layout.cloud.js +++ /dev/null @@ -1,505 +0,0 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g=(g.d3||(g.d3 = {}));g=(g.layout||(g.layout = {}));g.cloud = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 5, - ch = 1 << 11; - -module.exports = function() { - var size = [256, 256], - text = cloudText, - font = cloudFont, - fontSize = cloudFontSize, - fontStyle = cloudFontNormal, - fontWeight = cloudFontNormal, - rotate = cloudRotate, - padding = cloudPadding, - spiral = archimedeanSpiral, - words = [], - timeInterval = Infinity, - event = dispatch("word", "end"), - timer = null, - random = Math.random, - cloud = {}, - canvas = cloudCanvas; - - cloud.canvas = function(_) { - return arguments.length ? (canvas = functor(_), cloud) : canvas; - }; - - cloud.start = function() { - var contextAndRatio = getContext(canvas()), - board = zeroArray((size[0] >> 5) * size[1]), - bounds = null, - n = words.length, - i = -1, - tags = [], - data = words.map(function(d, i) { - d.text = text.call(this, d, i); - d.font = font.call(this, d, i); - d.style = fontStyle.call(this, d, i); - d.weight = fontWeight.call(this, d, i); - d.rotate = rotate.call(this, d, i); - d.size = ~~fontSize.call(this, d, i); - d.padding = padding.call(this, d, i); - return d; - }).sort(function(a, b) { return b.size - a.size; }); - - if (timer) clearInterval(timer); - timer = setInterval(step, 0); - step(); - - return cloud; - - function step() { - var start = Date.now(); - while (Date.now() - start < timeInterval && ++i < n && timer) { - var d = data[i]; - d.x = (size[0] * (random() + .5)) >> 1; - d.y = (size[1] * (random() + .5)) >> 1; - cloudSprite(contextAndRatio, d, data, i); - if (d.hasText && place(board, d, bounds)) { - tags.push(d); - event.word(d); - if (bounds) cloudBounds(bounds, d); - else bounds = [{x: d.x + d.x0, y: d.y + d.y0}, {x: d.x + d.x1, y: d.y + d.y1}]; - // Temporary hack - d.x -= size[0] >> 1; - d.y -= size[1] >> 1; - } - } - if (i >= n) { - cloud.stop(); - event.end(tags, bounds); - } - } - } - - cloud.stop = function() { - if (timer) { - clearInterval(timer); - timer = null; - } - return cloud; - }; - - function getContext(canvas) { - canvas.width = canvas.height = 1; - var ratio = Math.sqrt(canvas.getContext("2d").getImageData(0, 0, 1, 1).data.length >> 2); - canvas.width = (cw << 5) / ratio; - canvas.height = ch / ratio; - - var context = canvas.getContext("2d"); - context.fillStyle = context.strokeStyle = "red"; - context.textAlign = "center"; - - return {context: context, ratio: ratio}; - } - - function place(board, tag, bounds) { - var perimeter = [{x: 0, y: 0}, {x: size[0], y: size[1]}], - startX = tag.x, - startY = tag.y, - maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]), - s = spiral(size), - dt = random() < .5 ? 1 : -1, - t = -dt, - dxdy, - dx, - dy; - - while (dxdy = s(t += dt)) { - dx = ~~dxdy[0]; - dy = ~~dxdy[1]; - - if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break; - - tag.x = startX + dx; - tag.y = startY + dy; - - if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || - tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue; - // TODO only check for collisions within current bounds. - if (!bounds || !cloudCollide(tag, board, size[0])) { - if (!bounds || collideRects(tag, bounds)) { - var sprite = tag.sprite, - w = tag.width >> 5, - sw = size[0] >> 5, - lx = tag.x - (w << 4), - sx = lx & 0x7f, - msx = 32 - sx, - h = tag.y1 - tag.y0, - x = (tag.y + tag.y0) * sw + (lx >> 5), - last; - for (var j = 0; j < h; j++) { - last = 0; - for (var i = 0; i <= w; i++) { - board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0); - } - x += sw; - } - delete tag.sprite; - return true; - } - } - } - return false; - } - - cloud.timeInterval = function(_) { - return arguments.length ? (timeInterval = _ == null ? Infinity : _, cloud) : timeInterval; - }; - - cloud.words = function(_) { - return arguments.length ? (words = _, cloud) : words; - }; - - cloud.size = function(_) { - return arguments.length ? (size = [+_[0], +_[1]], cloud) : size; - }; - - cloud.font = function(_) { - return arguments.length ? (font = functor(_), cloud) : font; - }; - - cloud.fontStyle = function(_) { - return arguments.length ? (fontStyle = functor(_), cloud) : fontStyle; - }; - - cloud.fontWeight = function(_) { - return arguments.length ? (fontWeight = functor(_), cloud) : fontWeight; - }; - - cloud.rotate = function(_) { - return arguments.length ? (rotate = functor(_), cloud) : rotate; - }; - - cloud.text = function(_) { - return arguments.length ? (text = functor(_), cloud) : text; - }; - - cloud.spiral = function(_) { - return arguments.length ? (spiral = spirals[_] || _, cloud) : spiral; - }; - - cloud.fontSize = function(_) { - return arguments.length ? (fontSize = functor(_), cloud) : fontSize; - }; - - cloud.padding = function(_) { - return arguments.length ? (padding = functor(_), cloud) : padding; - }; - - cloud.random = function(_) { - return arguments.length ? (random = _, cloud) : random; - }; - - cloud.on = function() { - var value = event.on.apply(event, arguments); - return value === event ? cloud : value; - }; - - return cloud; -}; - -function cloudText(d) { - return d.text; -} - -function cloudFont() { - return "serif"; -} - -function cloudFontNormal() { - return "normal"; -} - -function cloudFontSize(d) { - return Math.sqrt(d.value); -} - -function cloudRotate() { - return (~~(Math.random() * 6) - 3) * 30; -} - -function cloudPadding() { - return 1; -} - -// Fetches a monochrome sprite bitmap for the specified text. -// Load in batches for speed. -function cloudSprite(contextAndRatio, d, data, di) { - if (d.sprite) return; - var c = contextAndRatio.context, - ratio = contextAndRatio.ratio; - - c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio); - var x = 0, - y = 0, - maxh = 0, - n = data.length; - --di; - while (++di < n) { - d = data[di]; - c.save(); - c.font = d.style + " " + d.weight + " " + ~~((d.size + 1) / ratio) + "px " + d.font; - var w = c.measureText(d.text + "m").width * ratio, - h = d.size << 1; - if (d.rotate) { - var sr = Math.sin(d.rotate * cloudRadians), - cr = Math.cos(d.rotate * cloudRadians), - wcr = w * cr, - wsr = w * sr, - hcr = h * cr, - hsr = h * sr; - w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5; - h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr)); - } else { - w = (w + 0x1f) >> 5 << 5; - } - if (h > maxh) maxh = h; - if (x + w >= (cw << 5)) { - x = 0; - y += maxh; - maxh = 0; - } - if (y + h >= ch) break; - c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio); - if (d.rotate) c.rotate(d.rotate * cloudRadians); - c.fillText(d.text, 0, 0); - if (d.padding) c.lineWidth = 2 * d.padding, c.strokeText(d.text, 0, 0); - c.restore(); - d.width = w; - d.height = h; - d.xoff = x; - d.yoff = y; - d.x1 = w >> 1; - d.y1 = h >> 1; - d.x0 = -d.x1; - d.y0 = -d.y1; - d.hasText = true; - x += w; - } - var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data, - sprite = []; - while (--di >= 0) { - d = data[di]; - if (!d.hasText) continue; - var w = d.width, - w32 = w >> 5, - h = d.y1 - d.y0; - // Zero the buffer - for (var i = 0; i < h * w32; i++) sprite[i] = 0; - x = d.xoff; - if (x == null) return; - y = d.yoff; - var seen = 0, - seenRow = -1; - for (var j = 0; j < h; j++) { - for (var i = 0; i < w; i++) { - var k = w32 * j + (i >> 5), - m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0; - sprite[k] |= m; - seen |= m; - } - if (seen) seenRow = j; - else { - d.y0++; - h--; - j--; - y++; - } - } - d.y1 = d.y0 + seenRow; - d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32); - } -} - -// Use mask-based collision detection. -function cloudCollide(tag, board, sw) { - sw >>= 5; - var sprite = tag.sprite, - w = tag.width >> 5, - lx = tag.x - (w << 4), - sx = lx & 0x7f, - msx = 32 - sx, - h = tag.y1 - tag.y0, - x = (tag.y + tag.y0) * sw + (lx >> 5), - last; - for (var j = 0; j < h; j++) { - last = 0; - for (var i = 0; i <= w; i++) { - if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) - & board[x + i]) return true; - } - x += sw; - } - return false; -} - -function cloudBounds(bounds, d) { - var b0 = bounds[0], - b1 = bounds[1]; - if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0; - if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0; - if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1; - if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1; -} - -function collideRects(a, b) { - return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y; -} - -function archimedeanSpiral(size) { - var e = size[0] / size[1]; - return function(t) { - return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)]; - }; -} - -function rectangularSpiral(size) { - var dy = 4, - dx = dy * size[0] / size[1], - x = 0, - y = 0; - return function(t) { - var sign = t < 0 ? -1 : 1; - // See triangular numbers: T_n = n * (n + 1) / 2. - switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) { - case 0: x += dx; break; - case 1: y += dy; break; - case 2: x -= dx; break; - default: y -= dy; break; - } - return [x, y]; - }; -} - -// TODO reuse arrays? -function zeroArray(n) { - var a = [], - i = -1; - while (++i < n) a[i] = 0; - return a; -} - -function cloudCanvas() { - return document.createElement("canvas"); -} - -function functor(d) { - return typeof d === "function" ? d : function() { return d; }; -} - -var spirals = { - archimedean: archimedeanSpiral, - rectangular: rectangularSpiral -}; - -},{"d3-dispatch":2}],2:[function(require,module,exports){ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory((global.dispatch = {})); -}(this, function (exports) { 'use strict'; - - function Dispatch(types) { - var i = -1, - n = types.length, - callbacksByType = {}, - callbackByName = {}, - type, - that = this; - - that.on = function(type, callback) { - type = parseType(type); - - // Return the current callback, if any. - if (arguments.length < 2) { - return (callback = callbackByName[type.name]) && callback.value; - } - - // If a type was specified… - if (type.type) { - var callbacks = callbacksByType[type.type], - callback0 = callbackByName[type.name], - i; - - // Remove the current callback, if any, using copy-on-remove. - if (callback0) { - callback0.value = null; - i = callbacks.indexOf(callback0); - callbacksByType[type.type] = callbacks = callbacks.slice(0, i).concat(callbacks.slice(i + 1)); - delete callbackByName[type.name]; - } - - // Add the new callback, if any. - if (callback) { - callback = {value: callback}; - callbackByName[type.name] = callback; - callbacks.push(callback); - } - } - - // Otherwise, if a null callback was specified, remove all callbacks with the given name. - else if (callback == null) { - for (var otherType in callbacksByType) { - if (callback = callbackByName[otherType + type.name]) { - callback.value = null; - var callbacks = callbacksByType[otherType], i = callbacks.indexOf(callback); - callbacksByType[otherType] = callbacks.slice(0, i).concat(callbacks.slice(i + 1)); - delete callbackByName[callback.name]; - } - } - } - - return that; - }; - - while (++i < n) { - type = types[i] + ""; - if (!type || (type in that)) throw new Error("illegal or duplicate type: " + type); - callbacksByType[type] = []; - that[type] = applier(type); - } - - function parseType(type) { - var i = (type += "").indexOf("."), name = type; - if (i >= 0) type = type.slice(0, i); else name += "."; - if (type && !callbacksByType.hasOwnProperty(type)) throw new Error("unknown type: " + type); - return {type: type, name: name}; - } - - function applier(type) { - return function() { - var callbacks = callbacksByType[type], // Defensive reference; copy-on-remove. - callback, - callbackValue, - i = -1, - n = callbacks.length; - - while (++i < n) { - if (callbackValue = (callback = callbacks[i]).value) { - callbackValue.apply(this, arguments); - } - } - - return that; - }; - } - } - - function dispatch() { - return new Dispatch(arguments); - } - - dispatch.prototype = Dispatch.prototype; // allow instanceof - - exports.dispatch = dispatch; - -})); -},{}]},{},[1])(1) -}); \ No newline at end of file diff --git a/dist/extensions/Graph/lib/graph2.compiled.js b/dist/extensions/Graph/lib/graph2.compiled.js deleted file mode 100644 index b2f5a01b9..000000000 --- a/dist/extensions/Graph/lib/graph2.compiled.js +++ /dev/null @@ -1,692 +0,0 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i - // Runs a SPARQL query, converting it to - // https://query.wikidata.org/bigdata/namespace/wdq/sparql?format=json&query=... - this._validateExternalService(urlParts, sanitizedHost, opt.url); - if (!urlParts.query || !urlParts.query.query) { - throw new Error('wikidatasparql: missing query parameter in: ' + opt.url); - } - // Only keep the "query" parameter - urlParts.query = {query: urlParts.query.query}; - urlParts.pathname = '/bigdata/namespace/wdq/sparql'; - opt.headers = this.objExtender(opt.headers || {}, {'Accept': 'application/sparql-results+json'}); - break; - - case 'geoshape:': - case 'geoline:': - // geoshape:///?ids=Q16,Q30 or geoshape:///?query=... - // Get geoshapes data from OSM database by supplying Wikidata IDs - // https://maps.wikimedia.org/shape?ids=Q16,Q30 - // 'geoline:' is an identical service, except that it returns lines instead of polygons - this._validateExternalService(urlParts, sanitizedHost, opt.url, 'geoshape:'); - if (!urlParts.query || (!urlParts.query.ids && !urlParts.query.query)) { - throw new Error(opt.graphProtocol + ' missing ids or query parameter in: ' + opt.url); - } - // the query object is not modified - urlParts.pathname = '/' + removeColon(opt.graphProtocol); - break; - - case 'mapsnapshot:': - // mapsnapshot:///?width=__&height=__&zoom=__&lat=__&lon=__ [&style=__] - // Converts it into a snapshot image request for Kartotherian: - // https://maps.wikimedia.org/img/{style},{zoom},{lat},{lon},{width}x{height}[@{scale}x].{format} - // (scale will be set to 2, and format to png) - if (!urlParts.query) { - throw new Error('mapsnapshot: missing required parameters'); - } - validate(urlParts, 'width', 1, 4096); - validate(urlParts, 'height', 1, 4096); - validate(urlParts, 'zoom', 0, 22); - validate(urlParts, 'lat', -90, 90, true); - validate(urlParts, 'lon', -180, 180, true); - - var query = urlParts.query; - if (query.style && !/^[-_0-9a-z]+$/.test(query.style)) { - throw new Error('mapsnapshot: if style is given, it must be letters/numbers/dash/underscores only'); - } - if (query.lang && !/^[-_0-9a-zA-Z]+$/.test(query.lang)) { - throw new Error('mapsnapshot: if lang is given, it must be letters/numbers/dash/underscores only'); - } - - // Uses the same configuration as geoshape service, so reuse settings - this._validateExternalService(urlParts, sanitizedHost, opt.url, 'geoshape:'); - - urlParts.pathname = '/img/' + (query.style || 'osm-intl') + ',' + query.zoom + ',' + - query.lat + ',' + query.lon + ',' + query.width + 'x' + query.height + '@2x.png'; - - urlParts.query = {}; // deleting it would cause errors in mw.Uri() - if (query.lang) { - urlParts.query.lang = query.lang; - } - - break; - - default: - throw new Error('Unknown protocol ' + opt.url); - } - } - - return this.formatUrl(urlParts, opt); -}; - -function validate(urlParts, name, min, max, isFloat) { - var value = urlParts.query[name]; - if (value === undefined) { - throw new Error(urlParts.protocol + ' parameter ' + name + ' is not set'); - } - if (!(isFloat ? /^-?[0-9]+\.?[0-9]*$/ : /^-?[0-9]+$/).test(value)) { - throw new Error(urlParts.protocol + ' parameter ' + name + ' is not a number'); - } - value = isFloat ? parseFloat(value) : parseInt(value); - if (value < min || value > max) { - throw new Error(urlParts.protocol + ' parameter ' + name + ' is not valid'); - } -} - -VegaWrapper.prototype._validateExternalService = function _validateExternalService(urlParts, sanitizedHost, url, protocolOverride) { - var protocol = protocolOverride || urlParts.protocol, - domains = this._getProtocolDomains(protocol); - if (!domains) { - throw new Error(protocol + ': protocol is disabled: ' + url); - } - if (urlParts.isRelativeHost) { - urlParts.host = domains[0]; - urlParts.protocol = this.sanitizeHost(urlParts.host).protocol; - } else { - urlParts.protocol = sanitizedHost.protocol; - } - if (!this.testHost(protocol, urlParts.host)) { - throw new Error(protocol + ': URL must either be relative (' + protocol + '///...), or use one of the allowed hosts: ' + url); - } -}; - -/** - * Performs post-processing of the data requested by the graph's spec - */ -VegaWrapper.prototype.dataParser = function dataParser(error, data, opt, callback) { - if (!error) { - try { - data = this.parseDataOrThrow(data, opt); - } catch (e) { - error = e; - } - } - if (error) data = undefined; - callback(error, data); -}; - -/** - * Parses the response from MW Api, throwing an error or logging warnings - */ -VegaWrapper.prototype.parseMWApiResponse = function parseMWApiResponse(data) { - data = JSON.parse(data); - if (data.error) { - throw new Error('API error: ' + JSON.stringify(data.error)); - } - if (data.warnings) { - this.logger('API warnings: ' + JSON.stringify(data.warnings)); - } - return data; -}; - -/** - * Performs post-processing of the data requested by the graph's spec, and throw on error - */ -VegaWrapper.prototype.parseDataOrThrow = function parseDataOrThrow(data, opt) { - switch (opt.graphProtocol) { - case 'wikiapi:': - data = this.parseMWApiResponse(data); - break; - case 'wikiraw:': - data = this.parseMWApiResponse(data); - try { - data = data.query.pages[0].revisions[0].content; - } catch (e) { - throw new Error('Page content not available ' + opt.url); - } - break; - case 'tabular:': - case 'map:': - data = this.parseMWApiResponse(data).jsondata; - var metadata = [{ - description: data.description, - license_code: data.license.code, - license_text: data.license.text, - license_url: data.license.url, - sources: data.sources - }]; - if (opt.graphProtocol === 'tabular:') { - var fields = data.schema.fields.map(function (v) { - return v.name; - }); - data = { - meta: metadata, - fields: data.schema.fields, - data: data.data.map(function (v) { - var row = {}, i; - for (i = 0; i < fields.length; i++) { - // Need to copy nulls too -- Vega has no easy way to test for undefined - row[fields[i]] = v[i]; - } - return row; - }) - } - } else { - metadata[0].zoom = data.zoom; - metadata[0].latitude = data.latitude; - metadata[0].longitude = data.longitude; - data = { - meta: metadata, - data: data.data - }; - } - break; - case 'wikidatasparql:': - data = JSON.parse(data); - if (!data.results || !Array.isArray(data.results.bindings)) { - throw new Error('SPARQL query result does not have "results.bindings"'); - } - data = data.results.bindings.map(function (row) { - var key, result = {}; - for (key in row) { - if (row.hasOwnProperty(key)) { - result[key] = parseWikidataValue(row[key]); - } - } - return result; - }); - break; - } - - return data; -}; - -/** - * Throw an error when called - */ -function alwaysFail() { - throw new Error('Disabled'); -} - -},{"domain-validator":2,"wd-type-parser":4}],4:[function(require,module,exports){ -'use strict'; -/* global module */ - -module.exports = parseWikidataValue; - -/** - * Given a value object as returned from Wikidata Query Service, returns a simplified value - * @param {object} value Original object as sent by the Wikidata query service - * @param {string} value.type SPARQL data type (literal, uri) - * @param {string} value.datatype XMLSchema data type - * @param {*} value.value The actual value sent by the Wikidata query service - * @param {boolean=} ignoreUnknown if false, will return value.value even if it cannot be recognized - * @return {*} - */ -function parseWikidataValue(value, ignoreUnknown) { - var temp; - - if (!value || !value.type || value.value === undefined) { - return undefined; - } - - switch (value.type) { - case 'literal': - switch (value.datatype) { - case 'http://www.w3.org/2001/XMLSchema#double': - case 'http://www.w3.org/2001/XMLSchema#float': - case 'http://www.w3.org/2001/XMLSchema#decimal': - case 'http://www.w3.org/2001/XMLSchema#integer': - case 'http://www.w3.org/2001/XMLSchema#long': - case 'http://www.w3.org/2001/XMLSchema#int': - case 'http://www.w3.org/2001/XMLSchema#short': - case 'http://www.w3.org/2001/XMLSchema#nonNegativeInteger': - case 'http://www.w3.org/2001/XMLSchema#positiveInteger': - case 'http://www.w3.org/2001/XMLSchema#unsignedLong': - case 'http://www.w3.org/2001/XMLSchema#unsignedInt': - case 'http://www.w3.org/2001/XMLSchema#unsignedShort': - case 'http://www.w3.org/2001/XMLSchema#nonPositiveInteger': - case 'http://www.w3.org/2001/XMLSchema#negativeInteger': - temp = parseFloat(value.value); - if (temp.toString() === value.value) { - // use number only if it is fully round-tripable back to string - // TBD: this might be overcautios, and would cause more problems than solve - return temp; - } - break; - case 'http://www.opengis.net/ont/geosparql#wktLiteral': - // Point(-64.2 -36.62) -- (longitude latitude) - temp = /^Point\(([-0-9.]+) ([-0-9.]+)\)$/.exec(value.value); - if (temp) { - return [parseFloat(temp[1]), parseFloat(temp[2])]; - } - break; - } - break; - case 'uri': - // "http://www.wikidata.org/entity/Q12345" -> "Q12345" - temp = /^http:\/\/www\.wikidata\.org\/entity\/(Q[1-9][0-9]*)$/.exec(value.value); - if (temp) { - return temp[1]; - } - break; - } - return ignoreUnknown ? undefined : value.value; -} - - -},{}]},{},[1]); diff --git a/dist/extensions/Graph/lib/jquery.splitter/jquery.splitter.css b/dist/extensions/Graph/lib/jquery.splitter/jquery.splitter.css deleted file mode 100644 index 41f27caf1..000000000 --- a/dist/extensions/Graph/lib/jquery.splitter/jquery.splitter.css +++ /dev/null @@ -1,57 +0,0 @@ -/*! - * StyleSheet for JQuery splitter Plugin - * Copyright (C) 2010 Jakub Jankiewicz - * - * Same license as plugin - */ -.splitter_panel { - position: relative; -} -.splitter_panel .vsplitter { - background-color: grey; - cursor: col-resize; - z-index:900; - width: 7px; -} - -.splitter_panel .hsplitter { - background-color: #5F5F5F; - cursor: row-resize; - z-index: 800; - height: 7px; -} -.splitter_panel .vsplitter.splitter-invisible, -.splitter_panel .hsplitter.splitter-invisible { - background: none; -} -.splitter_panel .vsplitter, .splitter_panel .left_panel, .splitter_panel .right_panel, -.splitter_panel .hsplitter, .splitter_panel .top_panel, .splitter_panel .bottom_panel { - position: absolute; - overflow: auto; -} -.splitter_panel .vsplitter, .splitter_panel .left_panel, .splitter_panel .right_panel { - height: 100%; -} -.splitter_panel .hsplitter, .splitter_panel .top_panel, .splitter_panel .bottom_panel { - width: 100%; -} -.splitter_panel .top_panel, .splitter_panel .left_panel, .splitter_panel .vsplitter { - top: 0; -} -.splitter_panel .top_panel, .splitter_panel .bottom_panel, .splitter_panel .left_panel, .splitter_panel .hsplitter { - left: 0; -} -.splitter_panel .bottom_panel { - bottom: 0; -} -.splitter_panel .right_panel { - right: 0; -} -.splitterMask { - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - z-index: 1000; -} diff --git a/dist/extensions/Graph/lib/jquery.splitter/jquery.splitter.js b/dist/extensions/Graph/lib/jquery.splitter/jquery.splitter.js deleted file mode 100644 index 95bf298f8..000000000 --- a/dist/extensions/Graph/lib/jquery.splitter/jquery.splitter.js +++ /dev/null @@ -1,307 +0,0 @@ -/*! - * JQuery Spliter Plugin version 0.20.1 - * Copyright (C) 2010-2016 Jakub Jankiewicz - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ -(function($, undefined) { - var count = 0; - var splitter_id = null; - var splitters = []; - var current_splitter = null; - $.fn.split = function(options) { - var data = this.data('splitter'); - if (data) { - return data; - } - var panel_1; - var panel_2; - var settings = $.extend({ - limit: 100, - orientation: 'horizontal', - position: '50%', - invisible: false, - onDragStart: $.noop, - onDragEnd: $.noop, - onDrag: $.noop - }, options || {}); - this.settings = settings; - var cls; - var children = this.children(); - if (settings.orientation == 'vertical') { - panel_1 = children.first().addClass('left_panel'); - panel_2 = panel_1.next().addClass('right_panel'); - cls = 'vsplitter'; - } else if (settings.orientation == 'horizontal') { - panel_1 = children.first().addClass('top_panel'); - panel_2 = panel_1.next().addClass('bottom_panel'); - cls = 'hsplitter'; - } - if (settings.invisible) { - cls += ' splitter-invisible'; - } - var width = this.width(); - var height = this.height(); - var id = count++; - this.addClass('splitter_panel'); - var splitter = $('
').addClass(cls).bind('mouseenter touchstart', function() { - splitter_id = id; - }).bind('mouseleave touchend', function() { - splitter_id = null; - }).insertAfter(panel_1); - var position; - - function get_position(position) { - if (typeof position === 'number') { - return position; - } else if (typeof position === 'string') { - var match = position.match(/^([0-9\.]+)(px|%)$/); - if (match) { - if (match[2] == 'px') { - return +match[1]; - } else { - if (settings.orientation == 'vertical') { - return (width * +match[1]) / 100; - } else if (settings.orientation == 'horizontal') { - return (height * +match[1]) / 100; - } - } - } else { - //throw position + ' is invalid value'; - } - } else { - //throw 'position have invalid type'; - } - } - - var self = $.extend(this, { - refresh: function() { - var new_width = this.width(); - var new_height = this.height(); - if (width != new_width || height != new_height) { - width = this.width(); - height = this.height(); - self.position(position); - } - }, - position: (function() { - if (settings.orientation == 'vertical') { - return function(n, silent) { - if (n === undefined) { - return position; - } else { - position = get_position(n); - var sw = splitter.width(); - var sw2 = sw/2, pw; - if (settings.invisible) { - pw = panel_1.width(position).outerWidth(); - panel_2.width(self.width()-pw); - splitter.css('left', pw-sw2); - } else { - pw = panel_1.width(position-sw2).outerWidth(); - panel_2.width(self.width()-pw-sw); - splitter.css('left', pw); - } - } - if (!silent) { - self.trigger('splitter.resize'); - self.find('.splitter_panel').trigger('splitter.resize'); - } - return self; - }; - } else if (settings.orientation == 'horizontal') { - return function(n, silent) { - if (n === undefined) { - return position; - } else { - position = get_position(n); - var sw = splitter.height(); - var sw2 = sw/2, pw; - if (settings.invisible) { - pw = panel_1.height(position).outerHeight(); - panel_2.height(self.height()-pw); - splitter.css('top', pw-sw2); - } else { - pw = panel_1.height(position-sw2).outerHeight(); - panel_2.height(self.height()-pw-sw); - splitter.css('top', pw); - } - } - if (!silent) { - self.trigger('splitter.resize'); - self.find('.splitter_panel').trigger('splitter.resize'); - } - return self; - }; - } else { - return $.noop; - } - })(), - orientation: settings.orientation, - limit: settings.limit, - isActive: function() { - return splitter_id === id; - }, - destroy: function() { - self.removeClass('splitter_panel'); - splitter.unbind('mouseenter'); - splitter.unbind('mouseleave'); - splitter.unbind('touchstart'); - splitter.unbind('touchmove'); - splitter.unbind('touchend'); - splitter.unbind('touchleave'); - splitter.unbind('touchcancel'); - if (settings.orientation == 'vertical') { - panel_1.removeClass('left_panel'); - panel_2.removeClass('right_panel'); - } else if (settings.orientation == 'horizontal') { - panel_1.removeClass('top_panel'); - panel_2.removeClass('bottom_panel'); - } - self.unbind('splitter.resize'); - self.trigger('splitter.resize'); - self.find('.splitter_panel').trigger('splitter.resize'); - splitters[i] = null; - count--; - splitter.remove(); - self.removeData('splitter'); - var not_null = false; - for (var i=splitters.length; i--;) { - if (splitters[i] !== null) { - not_null = true; - break; - } - } - //remove document events when no splitters - if (!not_null) { - $(document.documentElement).unbind('.splitter'); - $(window).unbind('resize.splitter'); - splitters = []; - count = 0; - } - } - }); - self.bind('splitter.resize', function(e) { - var pos = self.position(); - if (self.orientation == 'vertical' && - pos > self.width()) { - pos = self.width() - self.limit-1; - } else if (self.orientation == 'horizontal' && - pos > self.height()) { - pos = self.height() - self.limit-1; - } - if (pos < self.limit) { - pos = self.limit + 1; - } - e.stopPropagation(); - self.position(pos, true); - }); - //inital position of splitter - var pos; - if (settings.orientation == 'vertical') { - if (pos > width-settings.limit) { - pos = width-settings.limit; - } else { - pos = get_position(settings.position); - } - } else if (settings.orientation == 'horizontal') { - //position = height/2; - if (pos > height-settings.limit) { - pos = height-settings.limit; - } else { - pos = get_position(settings.position); - } - } - if (pos < settings.limit) { - pos = settings.limit; - } - self.position(pos, true); - if (splitters.length === 0) { // first time bind events to document - $(window).bind('resize.splitter', function() { - $.each(splitters, function(i, splitter) { - if (splitter) { - splitter.refresh(); - } - }); - }); - $(document.documentElement).on('mousedown.splitter touchstart.splitter', function(e) { - if (splitter_id !== null) { - current_splitter = splitters[splitter_id]; - setTimeout(function() { - $('
'). - css('cursor', current_splitter.children().eq(1).css('cursor')). - insertAfter(current_splitter); - }); - current_splitter.settings.onDragStart(e); - } - }).bind('mouseup.splitter touchend.splitter touchleave.splitter touchcancel.splitter', function(e) { - if (current_splitter) { - setTimeout(function() { - $('.splitterMask').remove(); - }); - current_splitter.settings.onDragEnd(e); - current_splitter = null; - } - }).bind('mousemove.splitter touchmove.splitter', function(e) { - if (current_splitter !== null) { - var limit = current_splitter.limit; - var offset = current_splitter.offset(); - if (current_splitter.orientation == 'vertical') { - var pageX = e.pageX; - if(e.originalEvent && e.originalEvent.changedTouches){ - pageX = e.originalEvent.changedTouches[0].pageX; - } - var x = pageX - offset.left; - if (x <= current_splitter.limit) { - x = current_splitter.limit + 1; - } else if (x >= current_splitter.width() - limit) { - x = current_splitter.width() - limit - 1; - } - if (x > current_splitter.limit && - x < current_splitter.width()-limit) { - current_splitter.position(x, true); - current_splitter.trigger('splitter.resize'); - current_splitter.find('.splitter_panel'). - trigger('splitter.resize'); - //e.preventDefault(); - } - } else if (current_splitter.orientation == 'horizontal') { - var pageY = e.pageY; - if(e.originalEvent && e.originalEvent.changedTouches){ - pageY = e.originalEvent.changedTouches[0].pageY; - } - var y = pageY-offset.top; - if (y <= current_splitter.limit) { - y = current_splitter.limit + 1; - } else if (y >= current_splitter.height() - limit) { - y = current_splitter.height() - limit - 1; - } - if (y > current_splitter.limit && - y < current_splitter.height()-limit) { - current_splitter.position(y, true); - current_splitter.trigger('splitter.resize'); - current_splitter.find('.splitter_panel'). - trigger('splitter.resize'); - //e.preventDefault(); - } - } - current_splitter.settings.onDrag(e); - } - });//*/ - } - splitters[id] = self; - self.data('splitter', self); - return self; - }; -})(jQuery); diff --git a/dist/extensions/Graph/lib/vega1/vega.js b/dist/extensions/Graph/lib/vega1/vega.js deleted file mode 100644 index 456a0da28..000000000 --- a/dist/extensions/Graph/lib/vega1/vega.js +++ /dev/null @@ -1,11003 +0,0 @@ -// Define module using Universal Module Definition pattern -// https://github.com/umdjs/umd/blob/master/amdWeb.js - -(function (factory) { - if (typeof define === 'function' && define.amd) { - // Support AMD. Register as an anonymous module. - // NOTE: List all dependencies in AMD style - define(['d3', 'topojson'], factory); - } else { - // No AMD. Set module as a global variable - // NOTE: Pass dependencies to factory function - // (assume that both d3 and topojson are also global.) - var tj = (typeof topojson === 'undefined') ? null : topojson; - vg = factory(d3, tj); - } -}( -//NOTE: The dependencies are passed to this function -function (d3, topojson) { -//--------------------------------------------------- -// BEGIN code for this module -//--------------------------------------------------- - - var vg = { - version: "1.5.3", // semantic versioning - d3: d3, // stash d3 for use in property functions - topojson: topojson // stash topojson similarly - }; -// type checking functions -var toString = Object.prototype.toString; - -vg.isObject = function(obj) { - return obj === Object(obj); -}; - -vg.isFunction = function(obj) { - return toString.call(obj) == '[object Function]'; -}; - -vg.isString = function(obj) { - return toString.call(obj) == '[object String]'; -}; - -vg.isArray = Array.isArray || function(obj) { - return toString.call(obj) == '[object Array]'; -}; - -vg.isNumber = function(obj) { - return toString.call(obj) == '[object Number]'; -}; - -vg.isBoolean = function(obj) { - return toString.call(obj) == '[object Boolean]'; -}; - -vg.isTree = function(obj) { - return obj && obj.__vgtree__; -}; - -vg.tree = function(obj, children) { - var d = [obj]; - d.__vgtree__ = true; - d.children = children || "children"; - return d; -}; - -vg.number = function(s) { return s === null ? null : +s; }; - -vg.boolean = function(s) { return s === null ? null : !!s; }; - -vg.date = function(s) {return s === null ? null : Date.parse(s); }; - -// ES6 compatibility per https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith#Polyfill -// We could have used the polyfill code, but lets wait until ES6 becomes a standard first -vg.startsWith = String.prototype.startsWith ? - function(string, searchString) { - return string.startsWith(searchString); - } : function(string, searchString) { - return string.lastIndexOf(searchString, 0) === 0; - }; - -// utility functions - -vg.identity = function(x) { return x; }; - -vg.true = function() { return true; }; - -vg.extend = function(obj) { - for (var x, name, i=1, len=arguments.length; i 1 - ? function(x) { return s.reduce(function(x,f) { - return x[f]; - }, x); - } - : function(x) { return x[f]; }; -}; - -vg.mutator = function(f) { - var s; - return vg.isString(f) && (s=vg.field(f)).length > 1 - ? function(x, v) { - for (var i=0; i y) return sign[i]; - } - return 0; - }; -}; - -vg.cmp = function(a, b) { - if (a < b) { - return -1; - } else if (a > b) { - return 1; - } else if (a >= b) { - return 0; - } else if (a === null && b === null) { - return 0; - } else if (a === null) { - return -1; - } else if (b === null) { - return 1; - } - return NaN; -}; - -vg.numcmp = function(a, b) { return a - b; }; - -vg.array = function(x) { - return x != null ? (vg.isArray(x) ? x : [x]) : []; -}; - -vg.values = function(x) { - return (vg.isObject(x) && !vg.isArray(x) && x.values) ? x.values : x; -}; - -vg.str = function(x) { - return vg.isArray(x) ? "[" + x.map(vg.str) + "]" - : vg.isObject(x) ? JSON.stringify(x) - : vg.isString(x) ? ("'"+vg_escape_str(x)+"'") : x; -}; - -var escape_str_re = /(^|[^\\])'/g; - -function vg_escape_str(x) { - return x.replace(escape_str_re, "$1\\'"); -} - -vg.keystr = function(values) { - // use to ensure consistent key generation across modules - return values.join("|"); -}; - -vg.keys = function(x) { - var keys = []; - for (var key in x) keys.push(key); - return keys; -}; - -vg.toMap = function(list) { - return list.reduce(function(obj, x) { - return (obj[x] = 1, obj); - }, {}); -}; - -vg.unique = function(data, f, results) { - if (!vg.isArray(data) || data.length===0) return []; - f = f || vg.identity; - results = results || []; - var u = {}; - for (var v, idx, i=0, n=data.length; i max) { max = v; idx = i; } - } - return idx; -}; - -vg.bins = function(opt) { - opt = opt || {}; - - // determine range - var maxb = opt.maxbins || 1024, - base = opt.base || 10, - div = opt.div || [5, 2], - mins = opt.minstep || 0, - logb = Math.log(base), - level = Math.ceil(Math.log(maxb) / logb), - min = opt.min, - max = opt.max, - span = max - min, - step = Math.max(mins, Math.pow(base, Math.round(Math.log(span) / logb) - level)), - nbins = Math.ceil(span / step), - precision, v, i, eps; - - if (opt.step != null) { - step = opt.step; - } else if (opt.steps) { - // if provided, limit choice to acceptable step sizes - step = opt.steps[Math.min( - opt.steps.length - 1, - vg_bisectLeft(opt.steps, span / maxb, 0, opt.steps.length) - )]; - } else { - // increase step size if too many bins - do { - step *= base; - nbins = Math.ceil(span / step); - } while (nbins > maxb); - - // decrease step size if allowed - for (i = 0; i < div.length; ++i) { - v = step / div[i]; - if (v >= mins && span / v <= maxb) { - step = v; - nbins = Math.ceil(span / step); - } - } - } - - // update precision, min and max - v = Math.log(step); - precision = v >= 0 ? 0 : ~~(-v / logb) + 1; - eps = (min<0 ? -1 : 1) * Math.pow(base, -precision - 1); - min = Math.min(min, Math.floor(min / step + eps) * step); - max = Math.ceil(max / step) * step; - - return { - start: min, - stop: max, - step: step, - unit: precision - }; -}; - -function vg_bisectLeft(a, x, lo, hi) { - while (lo < hi) { - var mid = lo + hi >>> 1; - if (vg.cmp(a[mid], x) < 0) { lo = mid + 1; } - else { hi = mid; } - } - return lo; -} - -vg.truncate = function(s, length, pos, word, ellipsis) { - var len = s.length; - if (len <= length) return s; - ellipsis = ellipsis || "..."; - var l = Math.max(0, length - ellipsis.length); - - switch (pos) { - case "left": - return ellipsis + (word ? vg_truncateOnWord(s,l,1) : s.slice(len-l)); - case "middle": - case "center": - var l1 = Math.ceil(l/2), l2 = Math.floor(l/2); - return (word ? vg_truncateOnWord(s,l1) : s.slice(0,l1)) + ellipsis - + (word ? vg_truncateOnWord(s,l2,1) : s.slice(len-l2)); - default: - return (word ? vg_truncateOnWord(s,l) : s.slice(0,l)) + ellipsis; - } -}; - -function vg_truncateOnWord(s, len, rev) { - var cnt = 0, tok = s.split(vg_truncate_word_re); - if (rev) { - s = (tok = tok.reverse()) - .filter(function(w) { cnt += w.length; return cnt <= len; }) - .reverse(); - } else { - s = tok.filter(function(w) { cnt += w.length; return cnt <= len; }); - } - return s.length ? s.join("").trim() : tok[0].slice(0, len); -} - -var vg_truncate_word_re = /([\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u2028\u2029\u3000\uFEFF])/; - -// Logging - -function vg_write(msg) { - vg.config.isNode - ? process.stderr.write(msg + "\n") - : console.log(msg); -} - -function vg_error(msg) { - vg.config.isNode - ? process.stderr.write(msg + "\n") - : console.error(msg); -} - -vg.log = function(msg) { - vg_write("[Vega Log] " + msg); -}; - -vg.error = function(msg) { - vg_error("[Vega Err] " + msg); -}; -vg.config = {}; - -// are we running in node.js? -// false by default, node wrapper should set true as needed -vg.config.isNode = false; - -// Allows domain restriction when using data loading via XHR. -// To enable, set it to a list of allowed domains -// e.g., ['wikipedia.org', 'eff.org'] -vg.config.domainWhiteList = false; - -// Allows additional headers to be sent to the server -// when requesting data. This could be useful when -// the graph definition is not trusted, and the server -// needs to be notified of that, e.g. {'Treat-as-Untrusted': 1} -vg.config.dataHeaders = false; - -// If true, disable potentially unsafe transforms (filter, formula) -// involving possible JavaScript injection attacks. -vg.config.safeMode = false; - -// base url for loading external data files -// used only if data or image URL is relative -// For node.js, set this value to convert local URLs to absolute ones. -vg.config.baseURL = ""; - -// node.js only: which protocol to use for relative protocol URLs -// URLs such as //example.com/... will be prepended by this value -vg.config.defaultProtocol = "http:"; - -// version and namespace for exported svg -vg.config.svgNamespace = - 'version="1.1" xmlns="http://www.w3.org/2000/svg" ' + - 'xmlns:xlink="http://www.w3.org/1999/xlink"'; - -// inset padding for automatic padding calculation -vg.config.autopadInset = 5; - -// extensible scale lookup table -// all d3.scale.* instances also supported -vg.config.scale = { - time: d3.time.scale, - utc: d3.time.scale.utc -}; - -// default rendering settings -vg.config.render = { - lineWidth: 1, - lineCap: "butt", - font: "sans-serif", - fontSize: 11 -}; - -// default axis properties -vg.config.axis = { - orient: "bottom", - ticks: 10, - padding: 3, - axisColor: "#000", - gridColor: "#d8d8d8", - tickColor: "#000", - tickLabelColor: "#000", - axisWidth: 1, - tickWidth: 1, - tickSize: 6, - tickLabelFontSize: 11, - tickLabelFont: "sans-serif", - titleColor: "#000", - titleFont: "sans-serif", - titleFontSize: 11, - titleFontWeight: "bold", - titleOffset: 35 -}; - -// default legend properties -vg.config.legend = { - orient: "right", - offset: 10, - padding: 3, - gradientStrokeColor: "#888", - gradientStrokeWidth: 1, - gradientHeight: 16, - gradientWidth: 100, - labelColor: "#000", - labelFontSize: 10, - labelFont: "sans-serif", - labelAlign: "left", - labelBaseline: "middle", - labelOffset: 8, - symbolShape: "circle", - symbolSize: 50, - symbolColor: "#888", - symbolStrokeWidth: 1, - titleColor: "#000", - titleFont: "sans-serif", - titleFontSize: 11, - titleFontWeight: "bold" -}; - -// default color values -vg.config.color = { - rgb: [128, 128, 128], - lab: [50, 0, 0], - hcl: [0, 0, 50], - hsl: [0, 0, 0.5] -}; - -// default scale ranges -vg.config.range = { - category10: [ - "#1f77b4", - "#ff7f0e", - "#2ca02c", - "#d62728", - "#9467bd", - "#8c564b", - "#e377c2", - "#7f7f7f", - "#bcbd22", - "#17becf" - ], - category20: [ - "#1f77b4", - "#aec7e8", - "#ff7f0e", - "#ffbb78", - "#2ca02c", - "#98df8a", - "#d62728", - "#ff9896", - "#9467bd", - "#c5b0d5", - "#8c564b", - "#c49c94", - "#e377c2", - "#f7b6d2", - "#7f7f7f", - "#c7c7c7", - "#bcbd22", - "#dbdb8d", - "#17becf", - "#9edae5" - ], - shapes: [ - "circle", - "cross", - "diamond", - "square", - "triangle-down", - "triangle-up" - ] -}; -vg.Bounds = (function() { - var bounds = function(b) { - this.clear(); - if (b) this.union(b); - }; - - var prototype = bounds.prototype; - - prototype.clear = function() { - this.x1 = +Number.MAX_VALUE; - this.y1 = +Number.MAX_VALUE; - this.x2 = -Number.MAX_VALUE; - this.y2 = -Number.MAX_VALUE; - return this; - }; - - prototype.set = function(x1, y1, x2, y2) { - this.x1 = x1; - this.y1 = y1; - this.x2 = x2; - this.y2 = y2; - return this; - }; - - prototype.add = function(x, y) { - if (x < this.x1) this.x1 = x; - if (y < this.y1) this.y1 = y; - if (x > this.x2) this.x2 = x; - if (y > this.y2) this.y2 = y; - return this; - }; - - prototype.expand = function(d) { - this.x1 -= d; - this.y1 -= d; - this.x2 += d; - this.y2 += d; - return this; - }; - - prototype.round = function() { - this.x1 = Math.floor(this.x1); - this.y1 = Math.floor(this.y1); - this.x2 = Math.ceil(this.x2); - this.y2 = Math.ceil(this.y2); - return this; - }; - - prototype.translate = function(dx, dy) { - this.x1 += dx; - this.x2 += dx; - this.y1 += dy; - this.y2 += dy; - return this; - }; - - prototype.rotate = function(angle, x, y) { - var cos = Math.cos(angle), - sin = Math.sin(angle), - cx = x - x*cos + y*sin, - cy = y - x*sin - y*cos, - x1 = this.x1, x2 = this.x2, - y1 = this.y1, y2 = this.y2; - - return this.clear() - .add(cos*x1 - sin*y1 + cx, sin*x1 + cos*y1 + cy) - .add(cos*x1 - sin*y2 + cx, sin*x1 + cos*y2 + cy) - .add(cos*x2 - sin*y1 + cx, sin*x2 + cos*y1 + cy) - .add(cos*x2 - sin*y2 + cx, sin*x2 + cos*y2 + cy); - }; - - prototype.union = function(b) { - if (b.x1 < this.x1) this.x1 = b.x1; - if (b.y1 < this.y1) this.y1 = b.y1; - if (b.x2 > this.x2) this.x2 = b.x2; - if (b.y2 > this.y2) this.y2 = b.y2; - return this; - }; - - prototype.encloses = function(b) { - return b && ( - this.x1 <= b.x1 && - this.x2 >= b.x2 && - this.y1 <= b.y1 && - this.y2 >= b.y2 - ); - }; - - prototype.intersects = function(b) { - return b && !( - this.x2 < b.x1 || - this.x1 > b.x2 || - this.y2 < b.y1 || - this.y1 > b.y2 - ); - }; - - prototype.contains = function(x, y) { - return !( - x < this.x1 || - x > this.x2 || - y < this.y1 || - y > this.y2 - ); - }; - - prototype.width = function() { - return this.x2 - this.x1; - }; - - prototype.height = function() { - return this.y2 - this.y1; - }; - - return bounds; -})();vg.Gradient = (function() { - - function gradient(type) { - this.id = "grad_" + (vg_gradient_id++); - this.type = type || "linear"; - this.stops = []; - this.x1 = 0; - this.x2 = 1; - this.y1 = 0; - this.y2 = 0; - } - - var prototype = gradient.prototype; - - prototype.stop = function(offset, color) { - this.stops.push({ - offset: offset, - color: color - }); - return this; - }; - - return gradient; -})(); - -var vg_gradient_id = 0; -vg.canvas = {};vg.canvas.path = (function() { - - // Path parsing and rendering code taken from fabric.js -- Thanks! - var cmdLength = { m:2, l:2, h:1, v:1, c:6, s:4, q:4, t:2, a:7 }, - re = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\d)-/g, /\s|,|###/]; - - function parse(path) { - var result = [], - currentPath, - chunks, - parsed; - - // First, break path into command sequence - path = path.slice().replace(re[0], '###$1').split(re[1]).slice(1); - - // Next, parse each command in turn - for (var i=0, j, chunksParsed, len=path.length; i commandLength) { - for (var k = 1, klen = chunksParsed.length; k < klen; k += commandLength) { - result.push([ chunksParsed[0] ].concat(chunksParsed.slice(k, k + commandLength))); - } - } - else { - result.push(chunksParsed); - } - } - - return result; - } - - function drawArc(g, x, y, coords, bounds, l, t) { - var rx = coords[0]; - var ry = coords[1]; - var rot = coords[2]; - var large = coords[3]; - var sweep = coords[4]; - var ex = coords[5]; - var ey = coords[6]; - var segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y); - for (var i=0; i 1) { - pl = Math.sqrt(pl); - rx *= pl; - ry *= pl; - } - - var a00 = cos_th / rx; - var a01 = sin_th / rx; - var a10 = (-sin_th) / ry; - var a11 = (cos_th) / ry; - var x0 = a00 * ox + a01 * oy; - var y0 = a10 * ox + a11 * oy; - var x1 = a00 * x + a01 * y; - var y1 = a10 * x + a11 * y; - - var d = (x1-x0) * (x1-x0) + (y1-y0) * (y1-y0); - var sfactor_sq = 1 / d - 0.25; - if (sfactor_sq < 0) sfactor_sq = 0; - var sfactor = Math.sqrt(sfactor_sq); - if (sweep == large) sfactor = -sfactor; - var xc = 0.5 * (x0 + x1) - sfactor * (y1-y0); - var yc = 0.5 * (y0 + y1) + sfactor * (x1-x0); - - var th0 = Math.atan2(y0-yc, x0-xc); - var th1 = Math.atan2(y1-yc, x1-xc); - - var th_arc = th1-th0; - if (th_arc < 0 && sweep == 1){ - th_arc += 2*Math.PI; - } else if (th_arc > 0 && sweep == 0) { - th_arc -= 2 * Math.PI; - } - - var segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001))); - var result = []; - for (var i=0; i 0) { - g.globalAlpha = opac * (o.strokeOpacity==null ? 1 : o.strokeOpacity); - g.strokeStyle = color(g, o, stroke); - g.lineWidth = lw; - g.lineCap = (lc = o.strokeCap) != null ? lc : vg.config.render.lineCap; - g.vgLineDash(o.strokeDash || null); - g.vgLineDashOffset(o.strokeDashOffset || 0); - g.stroke(); - } - } - } - - function drawPathAll(path, g, scene, bounds) { - var i, len, item; - for (i=0, len=scene.items.length; i 0) { - g.globalAlpha = opac * (o.strokeOpacity==null ? 1 : o.strokeOpacity); - g.strokeStyle = color(g, o, stroke); - g.lineWidth = lw; - g.lineCap = (lc = o.strokeCap) != null ? lc : vg.config.render.lineCap; - g.vgLineDash(o.strokeDash || null); - g.vgLineDashOffset(o.strokeDashOffset || 0); - g.strokeRect(x, y, w, h); - } - } - } - } - - function drawRule(g, scene, bounds) { - if (!scene.items.length) return; - var items = scene.items, - o, stroke, opac, lc, lw, x1, y1, x2, y2; - - for (var i=0, len=items.length; i 0) { - g.globalAlpha = opac * (o.strokeOpacity==null ? 1 : o.strokeOpacity); - g.strokeStyle = color(g, o, stroke); - g.lineWidth = lw; - g.lineCap = (lc = o.strokeCap) != null ? lc : vg.config.render.lineCap; - g.vgLineDash(o.strokeDash || null); - g.vgLineDashOffset(o.strokeDashOffset || 0); - g.beginPath(); - g.moveTo(x1, y1); - g.lineTo(x2, y2); - g.stroke(); - } - } - } - } - - function drawImage(g, scene, bounds) { - if (!scene.items.length) return; - var renderer = this, - items = scene.items, o; - - for (var i=0, len=items.length; i 0) { - g.globalAlpha = opac * (o.strokeOpacity==null ? 1 : o.strokeOpacity); - g.strokeStyle = color(o, stroke); - g.lineWidth = lw; - g.strokeText(o.text, x, y); - } - } - - if (o.angle) g.restore(); - } - } - - function drawAll(pathFunc) { - return function(g, scene, bounds) { - drawPathAll(pathFunc, g, scene, bounds); - }; - } - - function drawOne(pathFunc) { - return function(g, scene, bounds) { - if (!scene.items.length) return; - if (bounds && !bounds.intersects(scene.items[0].bounds)) - return; // bounds check - drawPathOne(pathFunc, g, scene.items[0], scene.items); - }; - } - - function drawGroup(g, scene, bounds) { - if (!scene.items.length) return; - var items = scene.items, group, axes, legends, - renderer = this, gx, gy, gb, i, n, j, m; - - drawRect(g, scene, bounds); - - for (i=0, n=items.length; i=0;) { - group = items[i]; - dx = group.x || 0; - dy = group.y || 0; - - g.save(); - g.translate(dx, dy); - for (j=group.items.length; --j >= 0;) { - subscene = group.items[j]; - if (subscene.interactive === false) continue; - hit = handler.pick(subscene, x, y, gx-dx, gy-dy); - if (hit) { - g.restore(); - return hit; - } - } - g.restore(); - } - - return scene.interactive - ? pickAll(hitTests.group, g, scene, x, y, gx, gy) - : false; - } - - function pickAll(test, g, scene, x, y, gx, gy) { - if (!scene.items.length) return false; - var o, b, i; - - if (g._ratio !== 1) { - x *= g._ratio; - y *= g._ratio; - } - - for (i=scene.items.length; --i >= 0;) { - o = scene.items[i]; b = o.bounds; - // first hit test against bounding box - if ((b && !b.contains(gx, gy)) || !b) continue; - // if in bounding box, perform more careful test - if (test(g, o, x, y, gx, gy)) return o; - } - return false; - } - - function pickArea(g, scene, x, y, gx, gy) { - if (!scene.items.length) return false; - var items = scene.items, - o, b, i, di, dd, od, dx, dy; - - b = items[0].bounds; - if (b && !b.contains(gx, gy)) return false; - if (g._ratio !== 1) { - x *= g._ratio; - y *= g._ratio; - } - if (!hitTests.area(g, items, x, y)) return false; - return items[0]; - } - - function pickLine(g, scene, x, y, gx, gy) { - if (!scene.items.length) return false; - var items = scene.items, - o, b, i, di, dd, od, dx, dy; - - b = items[0].bounds; - if (b && !b.contains(gx, gy)) return false; - if (g._ratio !== 1) { - x *= g._ratio; - y *= g._ratio; - } - if (!hitTests.line(g, items, x, y)) return false; - return items[0]; - } - - function pick(test) { - return function (g, scene, x, y, gx, gy) { - return pickAll(test, g, scene, x, y, gx, gy); - }; - } - - function textHit(g, o, x, y, gx, gy) { - if (!o.fontSize) return false; - if (!o.angle) return true; // bounds sufficient if no rotation - - var b = vg.scene.bounds.text(o, tmpBounds, true), - a = -o.angle * Math.PI / 180, - cos = Math.cos(a), - sin = Math.sin(a), - x = o.x, - y = o.y, - px = cos*gx - sin*gy + (x - x*cos + y*sin), - py = sin*gx + cos*gy + (y - x*sin - y*cos); - - return b.contains(px, py); - } - - var hitTests = { - text: textHit, - rect: function(g,o,x,y) { return true; }, // bounds test is sufficient - image: function(g,o,x,y) { return true; }, // bounds test is sufficient - group: function(g,o,x,y) { return o.fill || o.stroke; }, - rule: function(g,o,x,y) { - if (!g.isPointInStroke) return false; - ruleStroke(g,o); return g.isPointInStroke(x,y); - }, - line: function(g,s,x,y) { - if (!g.isPointInStroke) return false; - lineStroke(g,s); return g.isPointInStroke(x,y); - }, - arc: function(g,o,x,y) { arcPath(g,o); return g.isPointInPath(x,y); }, - area: function(g,s,x,y) { areaPath(g,s); return g.isPointInPath(x,y); }, - path: function(g,o,x,y) { pathPath(g,o); return g.isPointInPath(x,y); }, - symbol: function(g,o,x,y) { symbolPath(g,o); return g.isPointInPath(x,y); } - }; - - return { - draw: { - group: drawGroup, - area: drawOne(areaPath), - line: drawOne(linePath), - arc: drawAll(arcPath), - path: drawAll(pathPath), - symbol: drawAll(symbolPath), - rect: drawRect, - rule: drawRule, - text: drawText, - image: drawImage, - drawOne: drawOne, // expose for extensibility - drawAll: drawAll // expose for extensibility - }, - pick: { - group: pickGroup, - area: pickArea, - line: pickLine, - arc: pick(hitTests.arc), - path: pick(hitTests.path), - symbol: pick(hitTests.symbol), - rect: pick(hitTests.rect), - rule: pick(hitTests.rule), - text: pick(hitTests.text), - image: pick(hitTests.image), - pickAll: pickAll // expose for extensibility - } - }; - -})();vg.canvas.Renderer = (function() { - var renderer = function() { - this._ctx = null; - this._el = null; - this._bgcolor = null; - this._imgload = 0; - }; - - var prototype = renderer.prototype; - - prototype.initialize = function(el, width, height, pad, bgcolor) { - this._el = el; - this.background(bgcolor); - - if (!el) return this; // early exit if no DOM element - - // select canvas element - var canvas = d3.select(el) - .selectAll("canvas.marks") - .data([1]); - - // create new canvas element if needed - canvas.enter() - .append("canvas") - .attr("class", "marks"); - - // remove extraneous canvas if needed - canvas.exit().remove(); - - return this.resize(width, height, pad); - }; - - prototype.background = function(bgcolor) { - this._bgcolor = bgcolor; - return this; - }; - - prototype.resize = function(width, height, pad) { - this._width = width; - this._height = height; - this._padding = pad; - - if (this._el) { - var canvas = d3.select(this._el).select("canvas.marks"); - - // initialize canvas attributes - canvas - .attr("width", width + pad.left + pad.right) - .attr("height", height + pad.top + pad.bottom); - - // get the canvas graphics context - var s; - this._ctx = canvas.node().getContext("2d"); - this._ctx._ratio = (s = scaleCanvas(canvas.node(), this._ctx) || 1); - this._ctx.setTransform(s, 0, 0, s, s*pad.left, s*pad.top); - } - - initializeLineDash(this._ctx); - return this; - }; - - function scaleCanvas(canvas, ctx) { - // get canvas pixel data - var devicePixelRatio = window.devicePixelRatio || 1, - backingStoreRatio = ( - ctx.webkitBackingStorePixelRatio || - ctx.mozBackingStorePixelRatio || - ctx.msBackingStorePixelRatio || - ctx.oBackingStorePixelRatio || - ctx.backingStorePixelRatio) || 1, - ratio = devicePixelRatio / backingStoreRatio; - - if (devicePixelRatio !== backingStoreRatio) { - var w = canvas.width, h = canvas.height; - // set actual and visible canvas size - canvas.setAttribute("width", w * ratio); - canvas.setAttribute("height", h * ratio); - canvas.style.width = w + 'px'; - canvas.style.height = h + 'px'; - } - return ratio; - } - - function initializeLineDash(ctx) { - if (ctx.vgLineDash) return; // already set - - var NODASH = []; - if (ctx.setLineDash) { - ctx.vgLineDash = function(dash) { this.setLineDash(dash || NODASH); }; - ctx.vgLineDashOffset = function(off) { this.lineDashOffset = off; }; - } else if (ctx.webkitLineDash !== undefined) { - ctx.vgLineDash = function(dash) { this.webkitLineDash = dash || NODASH; }; - ctx.vgLineDashOffset = function(off) { this.webkitLineDashOffset = off; }; - } else if (ctx.mozDash !== undefined) { - ctx.vgLineDash = function(dash) { this.mozDash = dash; }; - ctx.vgLineDashOffset = function(off) { /* unsupported */ }; - } else { - ctx.vgLineDash = function(dash) { /* unsupported */ }; - ctx.vgLineDashOffset = function(off) { /* unsupported */ }; - } - } - - prototype.context = function(ctx) { - if (ctx) { this._ctx = ctx; return this; } - else return this._ctx; - }; - - prototype.element = function() { - return this._el; - }; - - prototype.pendingImages = function() { - return this._imgload; - }; - - function translatedBounds(item, bounds) { - var b = new vg.Bounds(bounds); - while ((item = item.mark.group) != null) { - b.translate(item.x || 0, item.y || 0); - } - return b; - } - - function getBounds(items) { - return !items ? null : - vg.array(items).reduce(function(b, item) { - return b.union(translatedBounds(item, item.bounds)) - .union(translatedBounds(item, item['bounds:prev'])); - }, new vg.Bounds()); - } - - function setBounds(g, bounds) { - var bbox = null; - if (bounds) { - bbox = (new vg.Bounds(bounds)).round(); - g.beginPath(); - g.rect(bbox.x1, bbox.y1, bbox.width(), bbox.height()); - g.clip(); - } - return bbox; - } - - prototype.render = function(scene, items) { - var g = this._ctx, - pad = this._padding, - w = this._width + pad.left + pad.right, - h = this._height + pad.top + pad.bottom, - bb = null, bb2; - - // setup - this._scene = scene; - g.save(); - bb = setBounds(g, getBounds(items)); - this.clear(-pad.left, -pad.top, w, h); - - // render - this.draw(g, scene, bb); - - // render again to handle possible bounds change - if (items) { - g.restore(); - g.save(); - bb2 = setBounds(g, getBounds(items)); - if (!bb.encloses(bb2)) { - this.clear(-pad.left, -pad.top, w, h); - this.draw(g, scene, bb2); - } - } - - // takedown - g.restore(); - this._scene = null; - }; - - prototype.draw = function(ctx, scene, bounds) { - var marktype = scene.marktype, - renderer = vg.canvas.marks.draw[marktype]; - renderer.call(this, ctx, scene, bounds); - }; - - prototype.clear = function(x, y, w, h) { - var g = this._ctx; - - g.clearRect(x, y, w, h); - if (this._bgcolor != null) { - g.fillStyle = this._bgcolor; - g.fillRect(x, y, w, h); - } - }; - - prototype.renderAsync = function(scene) { - // TODO make safe for multiple scene rendering? - var renderer = this; - if (renderer._async_id) { - clearTimeout(renderer._async_id); - } - renderer._async_id = setTimeout(function() { - renderer.render(scene); - delete renderer._async_id; - }, 50); - }; - - prototype.loadImage = function(uri) { - var renderer = this, - scene = renderer._scene, - image = null, url; - - if (vg.config.isNode) { - renderer._imgload += 1; - image = new (require("canvas").Image)(); - vg.data.load(uri, function(err, data) { - renderer._imgload -= 1; - if (err) { vg.error(err); return; } - vg.log("LOAD IMAGE: " + uri); - image.src = data; - image.loaded = true; - }); - } else { - image = new Image(); - url = vg.data.load.sanitizeUrl(uri); - if (!url) { return; } - renderer._imgload += 1; - image.onload = function() { - vg.log("LOAD IMAGE: " + url); - image.loaded = true; - renderer._imgload -= 1; - renderer.renderAsync(scene); - }; - image.src = url; - } - - return image; - }; - - return renderer; -})(); -vg.canvas.Handler = (function() { - var handler = function(el, model) { - this._active = null; - this._down = null; - this._handlers = {}; - if (el) this.initialize(el); - if (model) this.model(model); - }; - - var prototype = handler.prototype; - - prototype.initialize = function(el, pad, obj) { - this._el = d3.select(el).node(); - this._canvas = d3.select(el).select("canvas.marks").node(); - this._padding = pad; - this._obj = obj || null; - - // add event listeners - var canvas = this._canvas, that = this; - events.forEach(function(type) { - canvas.addEventListener(type, function(evt) { - prototype[type].call(that, evt); - }); - }); - - return this; - }; - - prototype.padding = function(pad) { - this._padding = pad; - return this; - }; - - prototype.model = function(model) { - if (!arguments.length) return this._model; - this._model = model; - return this; - }; - - prototype.handlers = function() { - var h = this._handlers; - return vg.keys(h).reduce(function(a, k) { - return h[k].reduce(function(a, x) { return (a.push(x), a); }, a); - }, []); - }; - - // setup events - var events = [ - "mouseup", - "dblclick", - "wheel", - "keydown", - "keypress", - "keyup", - "mousewheel" - ]; - events.forEach(function(type) { - prototype[type] = function(evt) { - this.fire(type, evt); - }; - }); - events.push("mousedown"); - events.push("mousemove"); - events.push("mouseout"); - events.push("click"); - - function eventName(name) { - var i = name.indexOf("."); - return i < 0 ? name : name.slice(0,i); - } - - prototype.mousemove = function(evt) { - var pad = this._padding, - b = evt.target.getBoundingClientRect(), - x = evt.clientX - b.left, - y = evt.clientY - b.top, - a = this._active, - p = this.pick(this._model.scene(), x, y, x-pad.left, y-pad.top); - - if (p === a) { - this.fire("mousemove", evt); - return; - } else if (a) { - this.fire("mouseout", evt); - } - this._active = p; - if (p) { - this.fire("mouseover", evt); - } - }; - - prototype.mouseout = function(evt) { - if (this._active) { - this.fire("mouseout", evt); - } - this._active = null; - }; - - prototype.mousedown = function(evt) { - this._down = this._active; - this.fire("mousedown", evt); - }; - - prototype.click = function(evt) { - if (this._down === this._active) { - this.fire("click", evt); - this._down = null; - } - }; - - // to keep firefox happy - prototype.DOMMouseScroll = function(evt) { - this.fire("mousewheel", evt); - }; - - // fire an event - prototype.fire = function(type, evt) { - var a = this._active, - h = this._handlers[type]; - if (a && h) { - for (var i=0, len=h.length; i=0;) { - if (h[i].type !== type) continue; - if (!handler || h[i].handler === handler) h.splice(i, 1); - } - return this; - }; - - // retrieve the current canvas context - prototype.context = function() { - return this._canvas.getContext("2d"); - }; - - // find the scenegraph item at the current mouse position - // x, y -- the absolute x, y mouse coordinates on the canvas element - // gx, gy -- the relative coordinates within the current group - prototype.pick = function(scene, x, y, gx, gy) { - var g = this.context(), - marktype = scene.marktype, - picker = vg.canvas.marks.pick[marktype]; - return picker.call(this, g, scene, x, y, gx, gy); - }; - - return handler; -})();vg.svg = {};vg.svg.marks = (function() { - - function x(o) { return o.x || 0; } - function y(o) { return o.y || 0; } - function xw(o) { return o.x + o.width || 0; } - function yh(o) { return o.y + o.height || 0; } - function key(o) { return o.key; } - function size(o) { return o.size==null ? 100 : o.size; } - function shape(o) { return o.shape || "circle"; } - - var arc_path = d3.svg.arc(), - area_path_v = d3.svg.area().x(x).y1(y).y0(yh), - area_path_h = d3.svg.area().y(y).x0(xw).x1(x), - line_path = d3.svg.line().x(x).y(y), - symbol_path = d3.svg.symbol().type(shape).size(size); - - var mark_id = 0, - clip_id = 0; - - var textAlign = { - "left": "start", - "center": "middle", - "right": "end" - }; - - var styles = { - "fill": "fill", - "fillOpacity": "fill-opacity", - "stroke": "stroke", - "strokeWidth": "stroke-width", - "strokeOpacity": "stroke-opacity", - "strokeCap": "stroke-linecap", - "strokeDash": "stroke-dasharray", - "strokeDashOffset": "stroke-dashoffset", - "opacity": "opacity" - }; - var styleProps = vg.keys(styles); - - function style(d) { - var i, n, prop, name, value, - o = d.mark ? d : d.length ? d[0] : null; - if (o === null) return; - - for (i=0, n=styleProps.length; i " + tag, - m = p.selectAll(s).data(data), - e = m.enter().append(tag); - - if (notG) { - p.style("pointer-events", evts); - e.each(function(d) { - if (d.mark) d._svg = this; - else if (d.length) d[0]._svg = this; - }); - } else { - e.append("rect").attr("class","background").style("pointer-events",evts); - } - - m.exit().remove(); - m.each(attr); - if (notG) m.each(style); - else p.selectAll(s+" > rect.background").each(group_bg).each(style); - - return p; - } - - function drawGroup(g, scene, index) { - var p = drawMark(g, scene, index, "g", group), - c = p.node().childNodes, n = c.length, i, j, m; - - for (i=0; i=0;) { - if (h[i].type !== type) continue; - if (!handler || h[i].handler === handler) { - dom.removeEventListener(name, h[i].svg); - h.splice(i, 1); - } - } - return this; - }; - - return handler; -})();vg.data = {}; - -vg.data.ingestAll = function(data) { - return vg.isTree(data) - ? vg_make_tree(vg.data.ingestTree(data[0], data.children)) - : data.map(vg.data.ingest); -}; - -vg.data.ingest = function(datum, index) { - return { - data: datum, - index: index - }; -}; - -vg.data.ingestTree = function(node, children, index) { - var d = vg.data.ingest(node, index || 0), - c = node[children], n, i; - if (c && (n = c.length)) { - d.values = Array(n); - for (i=0; i 1 && domain[idx-1] === '.' && domain.lastIndexOf(d) === idx); - }); - if (!whiteListed) { - vg.error('URL is not whitelisted: ' + url); - url = false; - } - } - } - return url; - } - - function load(uri, callback) { - var url = vg.data.load.sanitizeUrl(uri); // allow sanitizer override - if (!url) { - callback('Bad URL', null); - } else if (!vg.config.isNode) { - // in browser, use xhr - xhr(url, callback); - } else if (vg.startsWith(url, fileProtocol)) { - // in node.js, if url starts with 'file://', strip it and load from file - file(url.slice(fileProtocol.length), callback); - } else { - // for regular URLs in node.js - http(url, callback); - } - } - - function xhr(url, callback) { - vg.log('LOAD XHR: ' + url); - var xhrReq = d3.xhr(url); - if (vg.config.dataHeaders) { - vg.keys(vg.config.dataHeaders).forEach(function(k) { - xhrReq.header(k, vg.config.dataHeaders[k]); - }); - } - xhrReq.get(function(err, resp) { - if (resp) resp = resp.responseText; - callback(err, resp); - }); - } - - function file(file, callback) { - vg.log('LOAD FILE: ' + file); - require('fs').readFile(file, callback); - } - - function http(url, callback) { - vg.log('LOAD HTTP: ' + url); - var options = {url: url, encoding: null, gzip: true}; - if (vg.config.dataHeaders) { - options.headers = vg.config.dataHeaders; - } - require('request').get(options, function(error, response, body) { - if (!error && response.statusCode === 200) { - callback(null, body); - } else { - callback(error, null); - } - }); - } - - load.sanitizeUrl = sanitizeUrl; - return load; -})(); -vg.data.read = (function() { - var formats = {}, - parsers = { - "number": vg.number, - "boolean": vg.boolean, - "date": vg.date - }; - - function read(data, format) { - var type = (format && format.type) || "json"; - data = formats[type](data, format); - if (format && format.parse) parseValues(data, format.parse); - return data; - } - - formats.json = function(data, format) { - var d = vg.isObject(data) ? data : JSON.parse(data); - if (format && format.property) { - d = vg.accessor(format.property)(d); - } - return d; - }; - - formats.csv = function(data, format) { - var d = d3.csv.parse(data); - return d; - }; - - formats.tsv = function(data, format) { - var d = d3.tsv.parse(data); - return d; - }; - - formats.topojson = function(data, format) { - if (topojson == null) { - vg.error("TopoJSON library not loaded."); - return []; - } - var t = vg.isObject(data) ? data : JSON.parse(data), - obj = []; - - if (format && format.feature) { - obj = (obj = t.objects[format.feature]) - ? topojson.feature(t, obj).features - : (vg.error("Invalid TopoJSON object: "+format.feature), []); - } else if (format && format.mesh) { - obj = (obj = t.objects[format.mesh]) - ? [topojson.mesh(t, t.objects[format.mesh])] - : (vg.error("Invalid TopoJSON object: " + format.mesh), []); - } - else { vg.error("Missing TopoJSON feature or mesh parameter."); } - - return obj; - }; - - formats.treejson = function(data, format) { - data = vg.isObject(data) ? data : JSON.parse(data); - return vg.tree(data, format.children); - }; - - function parseValues(data, types) { - var cols = vg.keys(types), - p = cols.map(function(col) { return parsers[types[col]]; }), - tree = vg.isTree(data); - vg_parseArray(tree ? [data] : data, cols, p, tree); - } - - function vg_parseArray(data, cols, p, tree) { - var d, i, j, len, clen; - for (i=0, len=data.length; i m.max ? v : m.max; } - if (f & VAL) { m.vals.push(v); } - }; - - Monoid.prototype.value = function(op) { - switch (op) { - case 'sum': return this.sum; - case 'avg': return this.avg; - case 'var': return this.dev / (this.count - 1); - case 'std': return Math.sqrt(this.dev / (this.count - 1)); - case 'min': return this.min; - case 'max': return this.max; - case 'median': - var v = this.vals, n = v.length, hn = ~~(n/2); - return n ? (n % 2 ? v[hn] : 0.5 * (v[hn-1] + v[hn])) : 0; - } - }; - - Monoid.prototype.done = function(o) { - if (this.vals) this.vals.sort(vg.numcmp); - var ops = this.ops; - for (var i=0; i opt.max) opt.max = v; - if (max == null && v < opt.min) opt.min = v; - }); - } - var b = vg.bins(opt); - input.forEach(function(d) { - var v = accessor(d); - setter(d, b.start + b.step * ~~((v - b.start) / b.step)); - }); - return input; - } - - bin.min = function(x) { - min = x; - return bin; - }; - - bin.max = function(x) { - max = x; - return bin; - }; - - bin.step = function(x) { - step = x; - return bin; - }; - - bin.maxbins = function(x) { - maxbins = x; - return bin; - }; - - bin.field = function(f) { - field = f; - accessor = vg.accessor(f); - return bin; - }; - - bin.output = function(f) { - output = f; - setter = vg.mutator(f); - return bin; - }; - - return bin; -};vg.data.copy = function() { - var from = vg.accessor("data"), - fields = [], - as = null; - - var copy = vg.data.mapper(function(d) { - var src = from(d), i, len, - source = fields, - target = as || fields; - for (i=0, len=fields.length; i b ? 1 : 0; - }); - data = [data[~~(list.length/2)]]; - } else { - var idx = vg.array(by); - data = data.slice(idx[0], idx[1]); - } - return data; - } - - slice.by = function(x) { - by = x; - return slice; - }; - - slice.field = function(f) { - field = vg.accessor(f); - return slice; - }; - - return slice; -};vg.data.sort = function() { - var by = null; - - function sort(data) { - data = (vg.isArray(data) ? data : data.values || []); - data.sort(by); - for (var i=0, n=data.length; ib.x ? 1 : (a.zb.z ? 1 : 0); - }); - - // emit data series for stack layout - for (x=points[0].x, i=0, j=0, k=0, n=points.length; k i) series[i++].push({x:j, y:0}); - p.x = j; - series[i++].push(p); - } - while (i < series.length) series[i++].push({x:j, y:0}); - - return series; - } - - stack.point = function(field) { - point = vg.accessor(field); - return stack; - }; - - stack.height = function(field) { - height = vg.accessor(field); - return stack; - }; - - params.forEach(function(name) { - stack[name] = function(x) { - layout[name](x); - return stack; - }; - }); - - stack.output = function(map) { - d3.keys(output).forEach(function(k) { - if (map[k] !== undefined) { - output[k] = map[k]; - } - }); - return stack; - }; - - return stack; -};vg.data.stats = function() { - var value = vg.accessor("data"), - assign = false, - median = false, - output = { - "count": "count", - "min": "min", - "max": "max", - "sum": "sum", - "mean": "mean", - "variance": "variance", - "stdev": "stdev", - "median": "median" - }; - - function reduce(data) { - var min = +Infinity, - max = -Infinity, - sum = 0, - mean = 0, - M2 = 0, - i, len, v, delta; - - var list = (vg.isArray(data) ? data : data.values || []).map(value); - - // compute aggregates - for (i=0, len=list.length; i max) max = v; - sum += v; - delta = v - mean; - mean = mean + delta / (i+1); - M2 = M2 + delta * (v - mean); - } - M2 = M2 / (len - 1); - - var o = vg.isArray(data) ? {} : data; - if (median) { - list.sort(vg.numcmp); - i = list.length >> 1; - o[output.median] = list.length % 2 - ? list[i] - : (list[i-1] + list[i])/2; - } - o[output.count] = len; - o[output.min] = min; - o[output.max] = max; - o[output.sum] = sum; - o[output.mean] = mean; - o[output.variance] = M2; - o[output.stdev] = Math.sqrt(M2); - - if (assign) { - list = (vg.isArray(data) ? data : data.values); - v = {}; - v[output.count] = len; - v[output.min] = min; - v[output.max] = max; - v[output.sum] = sum; - v[output.mean] = mean; - v[output.variance] = M2; - v[output.stdev] = Math.sqrt(M2); - if (median) v[output.median] = o[output.median]; - for (i=0, len=list.length; i 3) - throw new Error("Too many arguments to if function."); - var a = args.map(codegen); - return a[0]+"?"+a[1]+":"+a[2]; - } - }; -};var vg_expression_codegen = function(opt) { - opt = opt || {}; - var constants = opt.constants || vg_expression_constants; - var functions = (opt.functions || vg_expression_functions)(codegen); - var idWhiteList = opt.idWhiteList ? vg.toMap(opt.idWhiteList) : null; - var idBlackList = opt.idBlackList ? vg.toMap(opt.idBlackList) : null; - var memberDepth = 0; - - function codegen(ast) { - if (ast instanceof String) return ast; - var generator = CODEGEN_TYPES[ast.type]; - if (generator == null) { - throw new Error("Unsupported type: " + ast.type); - } - return generator(ast); - } - - var CODEGEN_TYPES = { - "Literal": function(n) { - return n.raw; - }, - "Identifier": function(n) { - var id = n.name; - if (memberDepth > 0) { - return id; - } - if (constants.hasOwnProperty(id)) { - return constants[id]; - } - if (idWhiteList) { - if (idWhiteList.hasOwnProperty(id)) return id; - throw new Error("Illegal identifier: " + id); - } - if (idBlackList && idBlackList.hasOwnProperty(id)) { - throw new Error("Illegal identifier: " + id); - } - return id; - }, - "Program": function(n) { - return n.body.map(codegen).join("\n"); - }, - "MemberExpression": function(n) { - var d = !n.computed; - var o = codegen(n.object); - if (d) memberDepth += 1; - var p = codegen(n.property); - if (d) memberDepth -= 1; - return o + (d ? "."+p : "["+p+"]"); - }, - "CallExpression": function(n) { - if (n.callee.type !== "Identifier") { - throw new Error("Illegal callee type: " + n.callee.type); - } - var callee = n.callee.name; - var args = n.arguments; - var fn = functions.hasOwnProperty(callee) && functions[callee]; - if (!fn) throw new Error("Unrecognized function: " + callee); - return fn instanceof Function - ? fn(args) - : fn + "(" + args.map(codegen).join(",") + ")"; - }, - "ArrayExpression": function(n) { - return "[" + n.elements.map(codegen).join(",") + "]"; - }, - "BinaryExpression": function(n) { - return "(" + codegen(n.left) + n.operator + codegen(n.right) + ")"; - }, - "UnaryExpression": function(n) { - return "(" + n.operator + codegen(n.argument) + ")"; - }, - "UpdateExpression": function(n) { - return "(" + (prefix - ? n.operator + codegen(n.argument) - : codegen(n.argument) + n.operator - ) + ")"; - }, - "ConditionalExpression": function(n) { - return "(" + codegen(n.test) - + "?" + codegen(n.consequent) - + ":" + codegen(n.alternate) - + ")"; - }, - "LogicalExpression": function(n) { - return "(" + codegen(n.left) + n.operator + codegen(n.right) + ")"; - }, - "ObjectExpression": function(n) { - return "{" + n.properties.map(codegen).join(",") + "}"; - }, - "Property": function(n) { - memberDepth += 1; - var k = codegen(n.key); - memberDepth -= 1; - return k + ":" + codegen(n.value); - }, - "ExpressionStatement": function(n) { - return codegen(n.expression); - } - }; - - return codegen; -};/* - The following expression parser is based on Esprima (http://esprima.org/). - Original header comment and license for Esprima is included here: - - Copyright (C) 2013 Ariya Hidayat - Copyright (C) 2013 Thaddee Tyl - Copyright (C) 2013 Mathias Bynens - Copyright (C) 2012 Ariya Hidayat - Copyright (C) 2012 Mathias Bynens - Copyright (C) 2012 Joost-Wim Boekesteijn - Copyright (C) 2012 Kris Kowal - Copyright (C) 2012 Yusuke Suzuki - Copyright (C) 2012 Arpad Borsos - Copyright (C) 2011 Ariya Hidayat - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -var vg_expression_parser = (function() { - 'use strict'; - - var Token, - TokenName, - Syntax, - PropertyKind, - Messages, - Regex, - source, - strict, - index, - lineNumber, - lineStart, - length, - lookahead, - state, - extra; - - Token = { - BooleanLiteral: 1, - EOF: 2, - Identifier: 3, - Keyword: 4, - NullLiteral: 5, - NumericLiteral: 6, - Punctuator: 7, - StringLiteral: 8, - RegularExpression: 9 - }; - - TokenName = {}; - TokenName[Token.BooleanLiteral] = 'Boolean'; - TokenName[Token.EOF] = ''; - TokenName[Token.Identifier] = 'Identifier'; - TokenName[Token.Keyword] = 'Keyword'; - TokenName[Token.NullLiteral] = 'Null'; - TokenName[Token.NumericLiteral] = 'Numeric'; - TokenName[Token.Punctuator] = 'Punctuator'; - TokenName[Token.StringLiteral] = 'String'; - TokenName[Token.RegularExpression] = 'RegularExpression'; - - Syntax = { - AssignmentExpression: 'AssignmentExpression', - ArrayExpression: 'ArrayExpression', - BinaryExpression: 'BinaryExpression', - CallExpression: 'CallExpression', - ConditionalExpression: 'ConditionalExpression', - ExpressionStatement: 'ExpressionStatement', - Identifier: 'Identifier', - Literal: 'Literal', - LogicalExpression: 'LogicalExpression', - MemberExpression: 'MemberExpression', - ObjectExpression: 'ObjectExpression', - Program: 'Program', - Property: 'Property', - UnaryExpression: 'UnaryExpression', - UpdateExpression: 'UpdateExpression' - }; - - PropertyKind = { - Data: 1, - Get: 2, - Set: 4 - }; - - // Error messages should be identical to V8. - Messages = { - UnexpectedToken: 'Unexpected token %0', - UnexpectedNumber: 'Unexpected number', - UnexpectedString: 'Unexpected string', - UnexpectedIdentifier: 'Unexpected identifier', - UnexpectedReserved: 'Unexpected reserved word', - UnexpectedEOS: 'Unexpected end of input', - NewlineAfterThrow: 'Illegal newline after throw', - InvalidRegExp: 'Invalid regular expression', - UnterminatedRegExp: 'Invalid regular expression: missing /', - InvalidLHSInAssignment: 'Invalid left-hand side in assignment', - InvalidLHSInForIn: 'Invalid left-hand side in for-in', - MultipleDefaultsInSwitch: 'More than one default clause in switch statement', - NoCatchOrFinally: 'Missing catch or finally after try', - UnknownLabel: 'Undefined label \'%0\'', - Redeclaration: '%0 \'%1\' has already been declared', - IllegalContinue: 'Illegal continue statement', - IllegalBreak: 'Illegal break statement', - IllegalReturn: 'Illegal return statement', - StrictModeWith: 'Strict mode code may not include a with statement', - StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode', - StrictVarName: 'Variable name may not be eval or arguments in strict mode', - StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode', - StrictParamDupe: 'Strict mode function may not have duplicate parameter names', - StrictFunctionName: 'Function name may not be eval or arguments in strict mode', - StrictOctalLiteral: 'Octal literals are not allowed in strict mode.', - StrictDelete: 'Delete of an unqualified identifier in strict mode.', - StrictDuplicateProperty: 'Duplicate data property in object literal not allowed in strict mode', - AccessorDataProperty: 'Object literal may not have data and accessor property with the same name', - AccessorGetSet: 'Object literal may not have multiple get/set accessors with the same name', - StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode', - StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode', - StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode', - StrictReservedWord: 'Use of future reserved word in strict mode' - }; - - // See also tools/generate-unicode-regex.py. - Regex = { - NonAsciiIdentifierStart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]'), - NonAsciiIdentifierPart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]') - }; - - // Ensure the condition is true, otherwise throw an error. - // This is only to have a better contract semantic, i.e. another safety net - // to catch a logic error. The condition shall be fulfilled in normal case. - // Do NOT use this to enforce a certain condition on any user input. - - function assert(condition, message) { - if (!condition) { - throw new Error('ASSERT: ' + message); - } - } - - function isDecimalDigit(ch) { - return (ch >= 0x30 && ch <= 0x39); // 0..9 - } - - function isHexDigit(ch) { - return '0123456789abcdefABCDEF'.indexOf(ch) >= 0; - } - - function isOctalDigit(ch) { - return '01234567'.indexOf(ch) >= 0; - } - - // 7.2 White Space - - function isWhiteSpace(ch) { - return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) || - (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0); - } - - // 7.3 Line Terminators - - function isLineTerminator(ch) { - return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029); - } - - // 7.6 Identifier Names and Identifiers - - function isIdentifierStart(ch) { - return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore) - (ch >= 0x41 && ch <= 0x5A) || // A..Z - (ch >= 0x61 && ch <= 0x7A) || // a..z - (ch === 0x5C) || // \ (backslash) - ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch))); - } - - function isIdentifierPart(ch) { - return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore) - (ch >= 0x41 && ch <= 0x5A) || // A..Z - (ch >= 0x61 && ch <= 0x7A) || // a..z - (ch >= 0x30 && ch <= 0x39) || // 0..9 - (ch === 0x5C) || // \ (backslash) - ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch))); - } - - // 7.6.1.2 Future Reserved Words - - function isFutureReservedWord(id) { - switch (id) { - case 'class': - case 'enum': - case 'export': - case 'extends': - case 'import': - case 'super': - return true; - default: - return false; - } - } - - function isStrictModeReservedWord(id) { - switch (id) { - case 'implements': - case 'interface': - case 'package': - case 'private': - case 'protected': - case 'public': - case 'static': - case 'yield': - case 'let': - return true; - default: - return false; - } - } - - // 7.6.1.1 Keywords - - function isKeyword(id) { - if (strict && isStrictModeReservedWord(id)) { - return true; - } - - // 'const' is specialized as Keyword in V8. - // 'yield' and 'let' are for compatiblity with SpiderMonkey and ES.next. - // Some others are from future reserved words. - - switch (id.length) { - case 2: - return (id === 'if') || (id === 'in') || (id === 'do'); - case 3: - return (id === 'var') || (id === 'for') || (id === 'new') || - (id === 'try') || (id === 'let'); - case 4: - return (id === 'this') || (id === 'else') || (id === 'case') || - (id === 'void') || (id === 'with') || (id === 'enum'); - case 5: - return (id === 'while') || (id === 'break') || (id === 'catch') || - (id === 'throw') || (id === 'const') || (id === 'yield') || - (id === 'class') || (id === 'super'); - case 6: - return (id === 'return') || (id === 'typeof') || (id === 'delete') || - (id === 'switch') || (id === 'export') || (id === 'import'); - case 7: - return (id === 'default') || (id === 'finally') || (id === 'extends'); - case 8: - return (id === 'function') || (id === 'continue') || (id === 'debugger'); - case 10: - return (id === 'instanceof'); - default: - return false; - } - } - - function skipComment() { - var ch, start; - - start = (index === 0); - while (index < length) { - ch = source.charCodeAt(index); - - if (isWhiteSpace(ch)) { - ++index; - } else if (isLineTerminator(ch)) { - ++index; - if (ch === 0x0D && source.charCodeAt(index) === 0x0A) { - ++index; - } - ++lineNumber; - lineStart = index; - start = true; - } else { - break; - } - } - } - - function scanHexEscape(prefix) { - var i, len, ch, code = 0; - - len = (prefix === 'u') ? 4 : 2; - for (i = 0; i < len; ++i) { - if (index < length && isHexDigit(source[index])) { - ch = source[index++]; - code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); - } else { - return ''; - } - } - return String.fromCharCode(code); - } - - function scanUnicodeCodePointEscape() { - var ch, code, cu1, cu2; - - ch = source[index]; - code = 0; - - // At least, one hex digit is required. - if (ch === '}') { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - while (index < length) { - ch = source[index++]; - if (!isHexDigit(ch)) { - break; - } - code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); - } - - if (code > 0x10FFFF || ch !== '}') { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - // UTF-16 Encoding - if (code <= 0xFFFF) { - return String.fromCharCode(code); - } - cu1 = ((code - 0x10000) >> 10) + 0xD800; - cu2 = ((code - 0x10000) & 1023) + 0xDC00; - return String.fromCharCode(cu1, cu2); - } - - function getEscapedIdentifier() { - var ch, id; - - ch = source.charCodeAt(index++); - id = String.fromCharCode(ch); - - // '\u' (U+005C, U+0075) denotes an escaped character. - if (ch === 0x5C) { - if (source.charCodeAt(index) !== 0x75) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - ++index; - ch = scanHexEscape('u'); - if (!ch || ch === '\\' || !isIdentifierStart(ch.charCodeAt(0))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - id = ch; - } - - while (index < length) { - ch = source.charCodeAt(index); - if (!isIdentifierPart(ch)) { - break; - } - ++index; - id += String.fromCharCode(ch); - - // '\u' (U+005C, U+0075) denotes an escaped character. - if (ch === 0x5C) { - id = id.substr(0, id.length - 1); - if (source.charCodeAt(index) !== 0x75) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - ++index; - ch = scanHexEscape('u'); - if (!ch || ch === '\\' || !isIdentifierPart(ch.charCodeAt(0))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - id += ch; - } - } - - return id; - } - - function getIdentifier() { - var start, ch; - - start = index++; - while (index < length) { - ch = source.charCodeAt(index); - if (ch === 0x5C) { - // Blackslash (U+005C) marks Unicode escape sequence. - index = start; - return getEscapedIdentifier(); - } - if (isIdentifierPart(ch)) { - ++index; - } else { - break; - } - } - - return source.slice(start, index); - } - - function scanIdentifier() { - var start, id, type; - - start = index; - - // Backslash (U+005C) starts an escaped character. - id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier(); - - // There is no keyword or literal with only one character. - // Thus, it must be an identifier. - if (id.length === 1) { - type = Token.Identifier; - } else if (isKeyword(id)) { - type = Token.Keyword; - } else if (id === 'null') { - type = Token.NullLiteral; - } else if (id === 'true' || id === 'false') { - type = Token.BooleanLiteral; - } else { - type = Token.Identifier; - } - - return { - type: type, - value: id, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // 7.7 Punctuators - - function scanPunctuator() { - var start = index, - code = source.charCodeAt(index), - code2, - ch1 = source[index], - ch2, - ch3, - ch4; - - switch (code) { - - // Check for most common single-character punctuators. - case 0x2E: // . dot - case 0x28: // ( open bracket - case 0x29: // ) close bracket - case 0x3B: // ; semicolon - case 0x2C: // , comma - case 0x7B: // { open curly brace - case 0x7D: // } close curly brace - case 0x5B: // [ - case 0x5D: // ] - case 0x3A: // : - case 0x3F: // ? - case 0x7E: // ~ - ++index; - if (extra.tokenize) { - if (code === 0x28) { - extra.openParenToken = extra.tokens.length; - } else if (code === 0x7B) { - extra.openCurlyToken = extra.tokens.length; - } - } - return { - type: Token.Punctuator, - value: String.fromCharCode(code), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - - default: - code2 = source.charCodeAt(index + 1); - - // '=' (U+003D) marks an assignment or comparison operator. - if (code2 === 0x3D) { - switch (code) { - case 0x2B: // + - case 0x2D: // - - case 0x2F: // / - case 0x3C: // < - case 0x3E: // > - case 0x5E: // ^ - case 0x7C: // | - case 0x25: // % - case 0x26: // & - case 0x2A: // * - index += 2; - return { - type: Token.Punctuator, - value: String.fromCharCode(code) + String.fromCharCode(code2), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - - case 0x21: // ! - case 0x3D: // = - index += 2; - - // !== and === - if (source.charCodeAt(index) === 0x3D) { - ++index; - } - return { - type: Token.Punctuator, - value: source.slice(start, index), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - } - } - - // 4-character punctuator: >>>= - - ch4 = source.substr(index, 4); - - if (ch4 === '>>>=') { - index += 4; - return { - type: Token.Punctuator, - value: ch4, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // 3-character punctuators: === !== >>> <<= >>= - - ch3 = ch4.substr(0, 3); - - if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') { - index += 3; - return { - type: Token.Punctuator, - value: ch3, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // Other 2-character punctuators: ++ -- << >> && || - ch2 = ch3.substr(0, 2); - - if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') { - index += 2; - return { - type: Token.Punctuator, - value: ch2, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // 1-character punctuators: < > = ! + - * % & | ^ / - - if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) { - ++index; - return { - type: Token.Punctuator, - value: ch1, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - // 7.8.3 Numeric Literals - - function scanHexLiteral(start) { - var number = ''; - - while (index < length) { - if (!isHexDigit(source[index])) { - break; - } - number += source[index++]; - } - - if (number.length === 0) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - if (isIdentifierStart(source.charCodeAt(index))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.NumericLiteral, - value: parseInt('0x' + number, 16), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - function scanOctalLiteral(start) { - var number = '0' + source[index++]; - while (index < length) { - if (!isOctalDigit(source[index])) { - break; - } - number += source[index++]; - } - - if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.NumericLiteral, - value: parseInt(number, 8), - octal: true, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - function scanNumericLiteral() { - var number, start, ch; - - ch = source[index]; - assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), - 'Numeric literal must start with a decimal digit or a decimal point'); - - start = index; - number = ''; - if (ch !== '.') { - number = source[index++]; - ch = source[index]; - - // Hex number starts with '0x'. - // Octal number starts with '0'. - if (number === '0') { - if (ch === 'x' || ch === 'X') { - ++index; - return scanHexLiteral(start); - } - if (isOctalDigit(ch)) { - return scanOctalLiteral(start); - } - - // decimal number starts with '0' such as '09' is illegal. - if (ch && isDecimalDigit(ch.charCodeAt(0))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - } - - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - ch = source[index]; - } - - if (ch === '.') { - number += source[index++]; - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - ch = source[index]; - } - - if (ch === 'e' || ch === 'E') { - number += source[index++]; - - ch = source[index]; - if (ch === '+' || ch === '-') { - number += source[index++]; - } - if (isDecimalDigit(source.charCodeAt(index))) { - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - } else { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - } - - if (isIdentifierStart(source.charCodeAt(index))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.NumericLiteral, - value: parseFloat(number), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // 7.8.4 String Literals - - function scanStringLiteral() { - var str = '', quote, start, ch, code, unescaped, restore, octal = false, startLineNumber, startLineStart; - startLineNumber = lineNumber; - startLineStart = lineStart; - - quote = source[index]; - assert((quote === '\'' || quote === '"'), - 'String literal must starts with a quote'); - - start = index; - ++index; - - while (index < length) { - ch = source[index++]; - - if (ch === quote) { - quote = ''; - break; - } else if (ch === '\\') { - ch = source[index++]; - if (!ch || !isLineTerminator(ch.charCodeAt(0))) { - switch (ch) { - case 'u': - case 'x': - if (source[index] === '{') { - ++index; - str += scanUnicodeCodePointEscape(); - } else { - restore = index; - unescaped = scanHexEscape(ch); - if (unescaped) { - str += unescaped; - } else { - index = restore; - str += ch; - } - } - break; - case 'n': - str += '\n'; - break; - case 'r': - str += '\r'; - break; - case 't': - str += '\t'; - break; - case 'b': - str += '\b'; - break; - case 'f': - str += '\f'; - break; - case 'v': - str += '\x0B'; - break; - - default: - if (isOctalDigit(ch)) { - code = '01234567'.indexOf(ch); - - // \0 is not octal escape sequence - if (code !== 0) { - octal = true; - } - - if (index < length && isOctalDigit(source[index])) { - octal = true; - code = code * 8 + '01234567'.indexOf(source[index++]); - - // 3 digits are only allowed when string starts - // with 0, 1, 2, 3 - if ('0123'.indexOf(ch) >= 0 && - index < length && - isOctalDigit(source[index])) { - code = code * 8 + '01234567'.indexOf(source[index++]); - } - } - str += String.fromCharCode(code); - } else { - str += ch; - } - break; - } - } else { - ++lineNumber; - if (ch === '\r' && source[index] === '\n') { - ++index; - } - lineStart = index; - } - } else if (isLineTerminator(ch.charCodeAt(0))) { - break; - } else { - str += ch; - } - } - - if (quote !== '') { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.StringLiteral, - value: str, - octal: octal, - startLineNumber: startLineNumber, - startLineStart: startLineStart, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - function testRegExp(pattern, flags) { - var tmp = pattern, - value; - - if (flags.indexOf('u') >= 0) { - // Replace each astral symbol and every Unicode code point - // escape sequence with a single ASCII symbol to avoid throwing on - // regular expressions that are only valid in combination with the - // `/u` flag. - // Note: replacing with the ASCII symbol `x` might cause false - // negatives in unlikely scenarios. For example, `[\u{61}-b]` is a - // perfectly valid pattern that is equivalent to `[a-b]`, but it - // would be replaced by `[x-b]` which throws an error. - tmp = tmp - .replace(/\\u\{([0-9a-fA-F]+)\}/g, function ($0, $1) { - if (parseInt($1, 16) <= 0x10FFFF) { - return 'x'; - } - throwError({}, Messages.InvalidRegExp); - }) - .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, 'x'); - } - - // First, detect invalid regular expressions. - try { - value = new RegExp(tmp); - } catch (e) { - throwError({}, Messages.InvalidRegExp); - } - - // Return a regular expression object for this pattern-flag pair, or - // `null` in case the current environment doesn't support the flags it - // uses. - try { - return new RegExp(pattern, flags); - } catch (exception) { - return null; - } - } - - function scanRegExpBody() { - var ch, str, classMarker, terminated, body; - - ch = source[index]; - assert(ch === '/', 'Regular expression literal must start with a slash'); - str = source[index++]; - - classMarker = false; - terminated = false; - while (index < length) { - ch = source[index++]; - str += ch; - if (ch === '\\') { - ch = source[index++]; - // ECMA-262 7.8.5 - if (isLineTerminator(ch.charCodeAt(0))) { - throwError({}, Messages.UnterminatedRegExp); - } - str += ch; - } else if (isLineTerminator(ch.charCodeAt(0))) { - throwError({}, Messages.UnterminatedRegExp); - } else if (classMarker) { - if (ch === ']') { - classMarker = false; - } - } else { - if (ch === '/') { - terminated = true; - break; - } else if (ch === '[') { - classMarker = true; - } - } - } - - if (!terminated) { - throwError({}, Messages.UnterminatedRegExp); - } - - // Exclude leading and trailing slash. - body = str.substr(1, str.length - 2); - return { - value: body, - literal: str - }; - } - - function scanRegExpFlags() { - var ch, str, flags, restore; - - str = ''; - flags = ''; - while (index < length) { - ch = source[index]; - if (!isIdentifierPart(ch.charCodeAt(0))) { - break; - } - - ++index; - if (ch === '\\' && index < length) { - ch = source[index]; - if (ch === 'u') { - ++index; - restore = index; - ch = scanHexEscape('u'); - if (ch) { - flags += ch; - for (str += '\\u'; restore < index; ++restore) { - str += source[restore]; - } - } else { - index = restore; - flags += 'u'; - str += '\\u'; - } - throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL'); - } else { - str += '\\'; - throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - } else { - flags += ch; - str += ch; - } - } - - return { - value: flags, - literal: str - }; - } - - function scanRegExp() { - var start, body, flags, value; - - lookahead = null; - skipComment(); - start = index; - - body = scanRegExpBody(); - flags = scanRegExpFlags(); - value = testRegExp(body.value, flags.value); - - if (extra.tokenize) { - return { - type: Token.RegularExpression, - value: value, - regex: { - pattern: body.value, - flags: flags.value - }, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - return { - literal: body.literal + flags.literal, - value: value, - regex: { - pattern: body.value, - flags: flags.value - }, - start: start, - end: index - }; - } - - function collectRegex() { - var pos, loc, regex, token; - - skipComment(); - - pos = index; - loc = { - start: { - line: lineNumber, - column: index - lineStart - } - }; - - regex = scanRegExp(); - - loc.end = { - line: lineNumber, - column: index - lineStart - }; - - if (!extra.tokenize) { - // Pop the previous token, which is likely '/' or '/=' - if (extra.tokens.length > 0) { - token = extra.tokens[extra.tokens.length - 1]; - if (token.range[0] === pos && token.type === 'Punctuator') { - if (token.value === '/' || token.value === '/=') { - extra.tokens.pop(); - } - } - } - - extra.tokens.push({ - type: 'RegularExpression', - value: regex.literal, - regex: regex.regex, - range: [pos, index], - loc: loc - }); - } - - return regex; - } - - function isIdentifierName(token) { - return token.type === Token.Identifier || - token.type === Token.Keyword || - token.type === Token.BooleanLiteral || - token.type === Token.NullLiteral; - } - - function advanceSlash() { - var prevToken, - checkToken; - // Using the following algorithm: - // https://github.com/mozilla/sweet.js/wiki/design - prevToken = extra.tokens[extra.tokens.length - 1]; - if (!prevToken) { - // Nothing before that: it cannot be a division. - return collectRegex(); - } - if (prevToken.type === 'Punctuator') { - if (prevToken.value === ']') { - return scanPunctuator(); - } - if (prevToken.value === ')') { - checkToken = extra.tokens[extra.openParenToken - 1]; - if (checkToken && - checkToken.type === 'Keyword' && - (checkToken.value === 'if' || - checkToken.value === 'while' || - checkToken.value === 'for' || - checkToken.value === 'with')) { - return collectRegex(); - } - return scanPunctuator(); - } - if (prevToken.value === '}') { - // Dividing a function by anything makes little sense, - // but we have to check for that. - if (extra.tokens[extra.openCurlyToken - 3] && - extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') { - // Anonymous function. - checkToken = extra.tokens[extra.openCurlyToken - 4]; - if (!checkToken) { - return scanPunctuator(); - } - } else if (extra.tokens[extra.openCurlyToken - 4] && - extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') { - // Named function. - checkToken = extra.tokens[extra.openCurlyToken - 5]; - if (!checkToken) { - return collectRegex(); - } - } else { - return scanPunctuator(); - } - return scanPunctuator(); - } - return collectRegex(); - } - if (prevToken.type === 'Keyword' && prevToken.value !== 'this') { - return collectRegex(); - } - return scanPunctuator(); - } - - function advance() { - var ch; - - skipComment(); - - if (index >= length) { - return { - type: Token.EOF, - lineNumber: lineNumber, - lineStart: lineStart, - start: index, - end: index - }; - } - - ch = source.charCodeAt(index); - - if (isIdentifierStart(ch)) { - return scanIdentifier(); - } - - // Very common: ( and ) and ; - if (ch === 0x28 || ch === 0x29 || ch === 0x3B) { - return scanPunctuator(); - } - - // String literal starts with single quote (U+0027) or double quote (U+0022). - if (ch === 0x27 || ch === 0x22) { - return scanStringLiteral(); - } - - - // Dot (.) U+002E can also start a floating-point number, hence the need - // to check the next character. - if (ch === 0x2E) { - if (isDecimalDigit(source.charCodeAt(index + 1))) { - return scanNumericLiteral(); - } - return scanPunctuator(); - } - - if (isDecimalDigit(ch)) { - return scanNumericLiteral(); - } - - // Slash (/) U+002F can also start a regex. - if (extra.tokenize && ch === 0x2F) { - return advanceSlash(); - } - - return scanPunctuator(); - } - - function collectToken() { - var loc, token, value, entry; - - skipComment(); - loc = { - start: { - line: lineNumber, - column: index - lineStart - } - }; - - token = advance(); - loc.end = { - line: lineNumber, - column: index - lineStart - }; - - if (token.type !== Token.EOF) { - value = source.slice(token.start, token.end); - entry = { - type: TokenName[token.type], - value: value, - range: [token.start, token.end], - loc: loc - }; - if (token.regex) { - entry.regex = { - pattern: token.regex.pattern, - flags: token.regex.flags - }; - } - extra.tokens.push(entry); - } - - return token; - } - - function lex() { - var token; - - token = lookahead; - index = token.end; - lineNumber = token.lineNumber; - lineStart = token.lineStart; - - lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance(); - - index = token.end; - lineNumber = token.lineNumber; - lineStart = token.lineStart; - - return token; - } - - function peek() { - var pos, line, start; - - pos = index; - line = lineNumber; - start = lineStart; - lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance(); - index = pos; - lineNumber = line; - lineStart = start; - } - - function Position() { - this.line = lineNumber; - this.column = index - lineStart; - } - - function SourceLocation() { - this.start = new Position(); - this.end = null; - } - - function WrappingSourceLocation(startToken) { - if (startToken.type === Token.StringLiteral) { - this.start = { - line: startToken.startLineNumber, - column: startToken.start - startToken.startLineStart - }; - } else { - this.start = { - line: startToken.lineNumber, - column: startToken.start - startToken.lineStart - }; - } - this.end = null; - } - - function Node() { - // Skip comment. - index = lookahead.start; - if (lookahead.type === Token.StringLiteral) { - lineNumber = lookahead.startLineNumber; - lineStart = lookahead.startLineStart; - } else { - lineNumber = lookahead.lineNumber; - lineStart = lookahead.lineStart; - } - if (extra.range) { - this.range = [index, 0]; - } - if (extra.loc) { - this.loc = new SourceLocation(); - } - } - - function WrappingNode(startToken) { - if (extra.range) { - this.range = [startToken.start, 0]; - } - if (extra.loc) { - this.loc = new WrappingSourceLocation(startToken); - } - } - - WrappingNode.prototype = Node.prototype = { - - finish: function () { - if (extra.range) { - this.range[1] = index; - } - if (extra.loc) { - this.loc.end = new Position(); - if (extra.source) { - this.loc.source = extra.source; - } - } - }, - - finishArrayExpression: function (elements) { - this.type = Syntax.ArrayExpression; - this.elements = elements; - this.finish(); - return this; - }, - - finishAssignmentExpression: function (operator, left, right) { - this.type = Syntax.AssignmentExpression; - this.operator = operator; - this.left = left; - this.right = right; - this.finish(); - return this; - }, - - finishBinaryExpression: function (operator, left, right) { - this.type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression : Syntax.BinaryExpression; - this.operator = operator; - this.left = left; - this.right = right; - this.finish(); - return this; - }, - - finishCallExpression: function (callee, args) { - this.type = Syntax.CallExpression; - this.callee = callee; - this.arguments = args; - this.finish(); - return this; - }, - - finishConditionalExpression: function (test, consequent, alternate) { - this.type = Syntax.ConditionalExpression; - this.test = test; - this.consequent = consequent; - this.alternate = alternate; - this.finish(); - return this; - }, - - finishExpressionStatement: function (expression) { - this.type = Syntax.ExpressionStatement; - this.expression = expression; - this.finish(); - return this; - }, - - finishIdentifier: function (name) { - this.type = Syntax.Identifier; - this.name = name; - this.finish(); - return this; - }, - - finishLiteral: function (token) { - this.type = Syntax.Literal; - this.value = token.value; - this.raw = source.slice(token.start, token.end); - if (token.regex) { - if (this.raw == '//') { - this.raw = '/(?:)/'; - } - this.regex = token.regex; - } - this.finish(); - return this; - }, - - finishMemberExpression: function (accessor, object, property) { - this.type = Syntax.MemberExpression; - this.computed = accessor === '['; - this.object = object; - this.property = property; - this.finish(); - return this; - }, - - finishObjectExpression: function (properties) { - this.type = Syntax.ObjectExpression; - this.properties = properties; - this.finish(); - return this; - }, - - finishProgram: function (body) { - this.type = Syntax.Program; - this.body = body; - this.finish(); - return this; - }, - - finishProperty: function (kind, key, value) { - this.type = Syntax.Property; - this.key = key; - this.value = value; - this.kind = kind; - this.finish(); - return this; - }, - - finishUnaryExpression: function (operator, argument) { - this.type = (operator === '++' || operator === '--') ? Syntax.UpdateExpression : Syntax.UnaryExpression; - this.operator = operator; - this.argument = argument; - this.prefix = true; - this.finish(); - return this; - } - }; - - // Return true if there is a line terminator before the next token. - - function peekLineTerminator() { - var pos, line, start, found; - - pos = index; - line = lineNumber; - start = lineStart; - skipComment(); - found = lineNumber !== line; - index = pos; - lineNumber = line; - lineStart = start; - - return found; - } - - // Throw an exception - - function throwError(token, messageFormat) { - var error, - args = Array.prototype.slice.call(arguments, 2), - msg = messageFormat.replace( - /%(\d)/g, - function (whole, index) { - assert(index < args.length, 'Message reference must be in range'); - return args[index]; - } - ); - - if (typeof token.lineNumber === 'number') { - error = new Error('Line ' + token.lineNumber + ': ' + msg); - error.index = token.start; - error.lineNumber = token.lineNumber; - error.column = token.start - lineStart + 1; - } else { - error = new Error('Line ' + lineNumber + ': ' + msg); - error.index = index; - error.lineNumber = lineNumber; - error.column = index - lineStart + 1; - } - - error.description = msg; - throw error; - } - - function throwErrorTolerant() { - try { - throwError.apply(null, arguments); - } catch (e) { - if (extra.errors) { - extra.errors.push(e); - } else { - throw e; - } - } - } - - - // Throw an exception because of the token. - - function throwUnexpected(token) { - if (token.type === Token.EOF) { - throwError(token, Messages.UnexpectedEOS); - } - - if (token.type === Token.NumericLiteral) { - throwError(token, Messages.UnexpectedNumber); - } - - if (token.type === Token.StringLiteral) { - throwError(token, Messages.UnexpectedString); - } - - if (token.type === Token.Identifier) { - throwError(token, Messages.UnexpectedIdentifier); - } - - if (token.type === Token.Keyword) { - if (isFutureReservedWord(token.value)) { - throwError(token, Messages.UnexpectedReserved); - } else if (strict && isStrictModeReservedWord(token.value)) { - throwErrorTolerant(token, Messages.StrictReservedWord); - return; - } - throwError(token, Messages.UnexpectedToken, token.value); - } - - // BooleanLiteral, NullLiteral, or Punctuator. - throwError(token, Messages.UnexpectedToken, token.value); - } - - // Expect the next token to match the specified punctuator. - // If not, an exception will be thrown. - - function expect(value) { - var token = lex(); - if (token.type !== Token.Punctuator || token.value !== value) { - throwUnexpected(token); - } - } - - /** - * @name expectTolerant - * @description Quietly expect the given token value when in tolerant mode, otherwise delegates - * to expect(value) - * @param {String} value The value we are expecting the lookahead token to have - * @since 2.0 - */ - function expectTolerant(value) { - if (extra.errors) { - var token = lookahead; - if (token.type !== Token.Punctuator && token.value !== value) { - throwErrorTolerant(token, Messages.UnexpectedToken, token.value); - } else { - lex(); - } - } else { - expect(value); - } - } - - // Expect the next token to match the specified keyword. - // If not, an exception will be thrown. - - function expectKeyword(keyword) { - var token = lex(); - if (token.type !== Token.Keyword || token.value !== keyword) { - throwUnexpected(token); - } - } - - // Return true if the next token matches the specified punctuator. - - function match(value) { - return lookahead.type === Token.Punctuator && lookahead.value === value; - } - - // Return true if the next token matches the specified keyword - - function matchKeyword(keyword) { - return lookahead.type === Token.Keyword && lookahead.value === keyword; - } - - function consumeSemicolon() { - var line; - - // Catch the very common case first: immediately a semicolon (U+003B). - if (source.charCodeAt(index) === 0x3B || match(';')) { - lex(); - return; - } - - line = lineNumber; - skipComment(); - if (lineNumber !== line) { - return; - } - - if (lookahead.type !== Token.EOF && !match('}')) { - throwUnexpected(lookahead); - } - } - - // Return true if provided expression is LeftHandSideExpression - - function isLeftHandSide(expr) { - return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression; - } - - // 11.1.4 Array Initialiser - - function parseArrayInitialiser() { - var elements = [], node = new Node(); - - expect('['); - - while (!match(']')) { - if (match(',')) { - lex(); - elements.push(null); - } else { - elements.push(parseAssignmentExpression()); - - if (!match(']')) { - expect(','); - } - } - } - - lex(); - - return node.finishArrayExpression(elements); - } - - // 11.1.5 Object Initialiser - - function parseObjectPropertyKey() { - var token, node = new Node(); - - token = lex(); - - // Note: This function is called only from parseObjectProperty(), where - // EOF and Punctuator tokens are already filtered out. - - if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) { - if (strict && token.octal) { - throwErrorTolerant(token, Messages.StrictOctalLiteral); - } - return node.finishLiteral(token); - } - - return node.finishIdentifier(token.value); - } - - function parseObjectProperty() { - var token, key, id, value, param, node = new Node(); - - token = lookahead; - - if (token.type === Token.Identifier) { - id = parseObjectPropertyKey(); - expect(':'); - value = parseAssignmentExpression(); - return node.finishProperty('init', id, value); - } - if (token.type === Token.EOF || token.type === Token.Punctuator) { - throwUnexpected(token); - } else { - key = parseObjectPropertyKey(); - expect(':'); - value = parseAssignmentExpression(); - return node.finishProperty('init', key, value); - } - } - - function parseObjectInitialiser() { - var properties = [], token, property, name, key, kind, map = {}, toString = String, node = new Node(); - - expect('{'); - - while (!match('}')) { - property = parseObjectProperty(); - - if (property.key.type === Syntax.Identifier) { - name = property.key.name; - } else { - name = toString(property.key.value); - } - kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set; - - key = '$' + name; - if (Object.prototype.hasOwnProperty.call(map, key)) { - if (map[key] === PropertyKind.Data) { - if (strict && kind === PropertyKind.Data) { - throwErrorTolerant({}, Messages.StrictDuplicateProperty); - } else if (kind !== PropertyKind.Data) { - throwErrorTolerant({}, Messages.AccessorDataProperty); - } - } else { - if (kind === PropertyKind.Data) { - throwErrorTolerant({}, Messages.AccessorDataProperty); - } else if (map[key] & kind) { - throwErrorTolerant({}, Messages.AccessorGetSet); - } - } - map[key] |= kind; - } else { - map[key] = kind; - } - - properties.push(property); - - if (!match('}')) { - expectTolerant(','); - } - } - - expect('}'); - - return node.finishObjectExpression(properties); - } - - // 11.1.6 The Grouping Operator - - function parseGroupExpression() { - var expr; - - expect('('); - - ++state.parenthesisCount; - - expr = parseExpression(); - - expect(')'); - - return expr; - } - - - // 11.1 Primary Expressions - - var legalKeywords = {"if":1, "this":1}; - - function parsePrimaryExpression() { - var type, token, expr, node; - - if (match('(')) { - return parseGroupExpression(); - } - - if (match('[')) { - return parseArrayInitialiser(); - } - - if (match('{')) { - return parseObjectInitialiser(); - } - - type = lookahead.type; - node = new Node(); - - if (type === Token.Identifier || legalKeywords[lookahead.value]) { - expr = node.finishIdentifier(lex().value); - } else if (type === Token.StringLiteral || type === Token.NumericLiteral) { - if (strict && lookahead.octal) { - throwErrorTolerant(lookahead, Messages.StrictOctalLiteral); - } - expr = node.finishLiteral(lex()); - } else if (type === Token.Keyword) { - throw new Error("Disabled."); - } else if (type === Token.BooleanLiteral) { - token = lex(); - token.value = (token.value === 'true'); - expr = node.finishLiteral(token); - } else if (type === Token.NullLiteral) { - token = lex(); - token.value = null; - expr = node.finishLiteral(token); - } else if (match('/') || match('/=')) { - if (typeof extra.tokens !== 'undefined') { - expr = node.finishLiteral(collectRegex()); - } else { - expr = node.finishLiteral(scanRegExp()); - } - peek(); - } else { - throwUnexpected(lex()); - } - - return expr; - } - - // 11.2 Left-Hand-Side Expressions - - function parseArguments() { - var args = []; - - expect('('); - - if (!match(')')) { - while (index < length) { - args.push(parseAssignmentExpression()); - if (match(')')) { - break; - } - expectTolerant(','); - } - } - - expect(')'); - - return args; - } - - function parseNonComputedProperty() { - var token, node = new Node(); - - token = lex(); - - if (!isIdentifierName(token)) { - throwUnexpected(token); - } - - return node.finishIdentifier(token.value); - } - - function parseNonComputedMember() { - expect('.'); - - return parseNonComputedProperty(); - } - - function parseComputedMember() { - var expr; - - expect('['); - - expr = parseExpression(); - - expect(']'); - - return expr; - } - - function parseLeftHandSideExpressionAllowCall() { - var expr, args, property, startToken, previousAllowIn = state.allowIn; - - startToken = lookahead; - state.allowIn = true; - expr = parsePrimaryExpression(); - - for (;;) { - if (match('.')) { - property = parseNonComputedMember(); - expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property); - } else if (match('(')) { - args = parseArguments(); - expr = new WrappingNode(startToken).finishCallExpression(expr, args); - } else if (match('[')) { - property = parseComputedMember(); - expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property); - } else { - break; - } - } - state.allowIn = previousAllowIn; - - return expr; - } - - function parseLeftHandSideExpression() { - var expr, property, startToken; - assert(state.allowIn, 'callee of new expression always allow in keyword.'); - - startToken = lookahead; - expr = parsePrimaryExpression(); - - for (;;) { - if (match('[')) { - property = parseComputedMember(); - expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property); - } else if (match('.')) { - property = parseNonComputedMember(); - expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property); - } else { - break; - } - } - return expr; - } - - // 11.3 Postfix Expressions - - function parsePostfixExpression() { - var expr, token, startToken = lookahead; - - expr = parseLeftHandSideExpressionAllowCall(); - - if (lookahead.type === Token.Punctuator) { - if ((match('++') || match('--')) && !peekLineTerminator()) { - throw new Error("Disabled."); - } - } - - return expr; - } - - // 11.4 Unary Operators - - function parseUnaryExpression() { - var token, expr, startToken; - - if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) { - expr = parsePostfixExpression(); - } else if (match('++') || match('--')) { - throw new Error("Disabled."); - } else if (match('+') || match('-') || match('~') || match('!')) { - startToken = lookahead; - token = lex(); - expr = parseUnaryExpression(); - expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr); - } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) { - throw new Error("Disabled."); - } else { - expr = parsePostfixExpression(); - } - - return expr; - } - - function binaryPrecedence(token, allowIn) { - var prec = 0; - - if (token.type !== Token.Punctuator && token.type !== Token.Keyword) { - return 0; - } - - switch (token.value) { - case '||': - prec = 1; - break; - - case '&&': - prec = 2; - break; - - case '|': - prec = 3; - break; - - case '^': - prec = 4; - break; - - case '&': - prec = 5; - break; - - case '==': - case '!=': - case '===': - case '!==': - prec = 6; - break; - - case '<': - case '>': - case '<=': - case '>=': - case 'instanceof': - prec = 7; - break; - - case 'in': - prec = allowIn ? 7 : 0; - break; - - case '<<': - case '>>': - case '>>>': - prec = 8; - break; - - case '+': - case '-': - prec = 9; - break; - - case '*': - case '/': - case '%': - prec = 11; - break; - - default: - break; - } - - return prec; - } - - // 11.5 Multiplicative Operators - // 11.6 Additive Operators - // 11.7 Bitwise Shift Operators - // 11.8 Relational Operators - // 11.9 Equality Operators - // 11.10 Binary Bitwise Operators - // 11.11 Binary Logical Operators - - function parseBinaryExpression() { - var marker, markers, expr, token, prec, stack, right, operator, left, i; - - marker = lookahead; - left = parseUnaryExpression(); - - token = lookahead; - prec = binaryPrecedence(token, state.allowIn); - if (prec === 0) { - return left; - } - token.prec = prec; - lex(); - - markers = [marker, lookahead]; - right = parseUnaryExpression(); - - stack = [left, token, right]; - - while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) { - - // Reduce: make a binary expression from the three topmost entries. - while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) { - right = stack.pop(); - operator = stack.pop().value; - left = stack.pop(); - markers.pop(); - expr = new WrappingNode(markers[markers.length - 1]).finishBinaryExpression(operator, left, right); - stack.push(expr); - } - - // Shift. - token = lex(); - token.prec = prec; - stack.push(token); - markers.push(lookahead); - expr = parseUnaryExpression(); - stack.push(expr); - } - - // Final reduce to clean-up the stack. - i = stack.length - 1; - expr = stack[i]; - markers.pop(); - while (i > 1) { - expr = new WrappingNode(markers.pop()).finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr); - i -= 2; - } - - return expr; - } - - // 11.12 Conditional Operator - - function parseConditionalExpression() { - var expr, previousAllowIn, consequent, alternate, startToken; - - startToken = lookahead; - - expr = parseBinaryExpression(); - - if (match('?')) { - lex(); - previousAllowIn = state.allowIn; - state.allowIn = true; - consequent = parseAssignmentExpression(); - state.allowIn = previousAllowIn; - expect(':'); - alternate = parseAssignmentExpression(); - - expr = new WrappingNode(startToken).finishConditionalExpression(expr, consequent, alternate); - } - - return expr; - } - - // 11.13 Assignment Operators - - function parseAssignmentExpression() { - var oldParenthesisCount, token, expr, right, list, startToken; - - oldParenthesisCount = state.parenthesisCount; - - startToken = lookahead; - token = lookahead; - - expr = parseConditionalExpression(); - - return expr; - } - - // 11.14 Comma Operator - - function parseExpression() { - var expr, startToken = lookahead, expressions; - - expr = parseAssignmentExpression(); - - if (match(',')) { - throw new Error("Disabled."); // no sequence expressions - } - - return expr; - } - - // 12.4 Expression Statement - - function parseExpressionStatement(node) { - var expr = parseExpression(); - consumeSemicolon(); - return node.finishExpressionStatement(expr); - } - - // 12 Statements - - function parseStatement() { - var type = lookahead.type, - expr, - labeledBody, - key, - node; - - if (type === Token.EOF) { - throwUnexpected(lookahead); - } - - if (type === Token.Punctuator && lookahead.value === '{') { - throw new Error("Disabled."); // block statement - } - - node = new Node(); - - if (type === Token.Punctuator) { - switch (lookahead.value) { - case ';': - throw new Error("Disabled."); // empty statement - case '(': - return parseExpressionStatement(node); - default: - break; - } - } else if (type === Token.Keyword) { - throw new Error("Disabled."); // keyword - } - - expr = parseExpression(); - consumeSemicolon(); - return node.finishExpressionStatement(expr); - } - - // 14 Program - - function parseSourceElement() { - if (lookahead.type === Token.Keyword) { - switch (lookahead.value) { - case 'const': - case 'let': - throw new Error("Disabled."); - case 'function': - throw new Error("Disabled."); - default: - return parseStatement(); - } - } - - if (lookahead.type !== Token.EOF) { - return parseStatement(); - } - } - - function parseSourceElements() { - var sourceElement, sourceElements = [], token, directive, firstRestricted; - - while (index < length) { - token = lookahead; - if (token.type !== Token.StringLiteral) { - break; - } - - sourceElement = parseSourceElement(); - sourceElements.push(sourceElement); - if (sourceElement.expression.type !== Syntax.Literal) { - // this is not directive - break; - } - directive = source.slice(token.start + 1, token.end - 1); - if (directive === 'use strict') { - strict = true; - if (firstRestricted) { - throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral); - } - } else { - if (!firstRestricted && token.octal) { - firstRestricted = token; - } - } - } - - while (index < length) { - sourceElement = parseSourceElement(); - if (typeof sourceElement === 'undefined') { - break; - } - sourceElements.push(sourceElement); - } - return sourceElements; - } - - function parseProgram() { - var body, node; - - skipComment(); - peek(); - node = new Node(); - strict = true; // assume strict - - body = parseSourceElements(); - return node.finishProgram(body); - } - - function filterTokenLocation() { - var i, entry, token, tokens = []; - - for (i = 0; i < extra.tokens.length; ++i) { - entry = extra.tokens[i]; - token = { - type: entry.type, - value: entry.value - }; - if (entry.regex) { - token.regex = { - pattern: entry.regex.pattern, - flags: entry.regex.flags - }; - } - if (extra.range) { - token.range = entry.range; - } - if (extra.loc) { - token.loc = entry.loc; - } - tokens.push(token); - } - - extra.tokens = tokens; - } - - function tokenize(code, options) { - var toString, - tokens; - - toString = String; - if (typeof code !== 'string' && !(code instanceof String)) { - code = toString(code); - } - - source = code; - index = 0; - lineNumber = (source.length > 0) ? 1 : 0; - lineStart = 0; - length = source.length; - lookahead = null; - state = { - allowIn: true, - labelSet: {}, - inFunctionBody: false, - inIteration: false, - inSwitch: false, - lastCommentStart: -1 - }; - - extra = {}; - - // Options matching. - options = options || {}; - - // Of course we collect tokens here. - options.tokens = true; - extra.tokens = []; - extra.tokenize = true; - // The following two fields are necessary to compute the Regex tokens. - extra.openParenToken = -1; - extra.openCurlyToken = -1; - - extra.range = (typeof options.range === 'boolean') && options.range; - extra.loc = (typeof options.loc === 'boolean') && options.loc; - - if (typeof options.tolerant === 'boolean' && options.tolerant) { - extra.errors = []; - } - - try { - peek(); - if (lookahead.type === Token.EOF) { - return extra.tokens; - } - - lex(); - while (lookahead.type !== Token.EOF) { - try { - lex(); - } catch (lexError) { - if (extra.errors) { - extra.errors.push(lexError); - // We have to break on the first error - // to avoid infinite loops. - break; - } else { - throw lexError; - } - } - } - - filterTokenLocation(); - tokens = extra.tokens; - if (typeof extra.errors !== 'undefined') { - tokens.errors = extra.errors; - } - } catch (e) { - throw e; - } finally { - extra = {}; - } - return tokens; - } - - function parse(code, options) { - var program, toString; - - toString = String; - if (typeof code !== 'string' && !(code instanceof String)) { - code = toString(code); - } - - source = code; - index = 0; - lineNumber = (source.length > 0) ? 1 : 0; - lineStart = 0; - length = source.length; - lookahead = null; - state = { - allowIn: true, - labelSet: {}, - parenthesisCount: 0, - inFunctionBody: false, - inIteration: false, - inSwitch: false, - lastCommentStart: -1 - }; - - extra = {}; - if (typeof options !== 'undefined') { - extra.range = (typeof options.range === 'boolean') && options.range; - extra.loc = (typeof options.loc === 'boolean') && options.loc; - - if (extra.loc && options.source !== null && options.source !== undefined) { - extra.source = toString(options.source); - } - - if (typeof options.tokens === 'boolean' && options.tokens) { - extra.tokens = []; - } - if (typeof options.tolerant === 'boolean' && options.tolerant) { - extra.errors = []; - } - } - - try { - program = parseProgram(); - if (typeof extra.tokens !== 'undefined') { - filterTokenLocation(); - program.tokens = extra.tokens; - } - if (typeof extra.errors !== 'undefined') { - program.errors = extra.errors; - } - } catch (e) { - throw e; - } finally { - extra = {}; - } - - return program; - } - - return { - tokenize: tokenize, - parse: parse - }; - -})(); -vg.parse = {};vg.parse.axes = (function() { - var ORIENT = { - "x": "bottom", - "y": "left", - "top": "top", - "bottom": "bottom", - "left": "left", - "right": "right" - }; - - function axes(spec, axes, scales) { - (spec || []).forEach(function(def, index) { - axes[index] = axes[index] || vg.scene.axis(); - axis(def, index, axes[index], scales); - }); - } - - function axis(def, index, axis, scales) { - // axis scale - if (def.scale !== undefined) { - axis.scale(scales[def.scale]); - } - - // axis orientation - axis.orient(def.orient || ORIENT[def.type]); - // axis offset - axis.offset(def.offset || 0); - // axis layer - axis.layer(def.layer || "front"); - // axis grid lines - axis.grid(def.grid || false); - // axis title - axis.title(def.title || null); - // axis title offset - axis.titleOffset(def.titleOffset != null - ? def.titleOffset : vg.config.axis.titleOffset); - // axis values - axis.tickValues(def.values || null); - // axis label formatting - axis.tickFormat(def.format || null); - // axis tick subdivision - axis.tickSubdivide(def.subdivide || 0); - // axis tick padding - axis.tickPadding(def.tickPadding || vg.config.axis.padding); - - // axis tick size(s) - var size = []; - if (def.tickSize !== undefined) { - for (var i=0; i<3; ++i) size.push(def.tickSize); - } else { - var ts = vg.config.axis.tickSize; - size = [ts, ts, ts]; - } - if (def.tickSizeMajor != null) size[0] = def.tickSizeMajor; - if (def.tickSizeMinor != null) size[1] = def.tickSizeMinor; - if (def.tickSizeEnd != null) size[2] = def.tickSizeEnd; - if (size.length) { - axis.tickSize.apply(axis, size); - } - - // axis tick count - axis.tickCount(def.ticks || vg.config.axis.ticks); - - // style properties - var p = def.properties; - if (p && p.ticks) { - axis.majorTickProperties(p.majorTicks - ? vg.extend({}, p.ticks, p.majorTicks) : p.ticks); - axis.minorTickProperties(p.minorTicks - ? vg.extend({}, p.ticks, p.minorTicks) : p.ticks); - } else { - axis.majorTickProperties(p && p.majorTicks || {}); - axis.minorTickProperties(p && p.minorTicks || {}); - } - axis.tickLabelProperties(p && p.labels || {}); - axis.titleProperties(p && p.title || {}); - axis.gridLineProperties(p && p.grid || {}); - axis.domainProperties(p && p.axis || {}); - } - - return axes; -})(); -vg.parse.background = function(bg) { - // return null if input is null or undefined - if (bg == null) return null; - // run through d3 rgb to sanity check - return d3.rgb(bg) + ""; -}; -vg.parse.data = function(spec, callback) { - var model = { - defs: spec, - load: {}, - flow: {}, - deps: {}, - source: {}, - sorted: null - }; - - var count = 0; - - function load(d) { - return function(error, data) { - if (error) { - vg.error("LOADING FAILED: " + d.url); - } else { - try { - model.load[d.name] = vg.data.read(data.toString(), d.format); - } catch (err) { - vg.error("UNABLE TO PARSE: " + d.url + ' ' + err.toString()); - } - } - if (--count === 0) callback(); - }; - } - - // process each data set definition - (spec || []).forEach(function(d) { - if (d.url) { - count += 1; - vg.data.load(d.url, load(d)); - } else if (d.values) { - model.load[d.name] = vg.data.read(d.values, d.format); - } else if (d.source) { - (model.source[d.source] || (model.source[d.source] = [])).push(d.name); - } - - if (d.transform) { - var flow = vg.parse.dataflow(d); - model.flow[d.name] = flow; - flow.dependencies.forEach(function(dep) { - (model.deps[dep] || (model.deps[dep] = [])).push(d.name); - }); - } - }); - - // topological sort by dependencies - var names = (spec || []).map(vg.accessor("name")), - order = [], v = {}, n; - function visit(n) { - if (v[n] === 1) return; // not a DAG! - if (!v[n]) { - v[n] = 1; - (model.source[n] || []).forEach(visit); - (model.deps[n] || []).forEach(visit); - v[n] = 2; - order.push(n); - } - } - while (names.length) { if (v[n=names.pop()] !== 2) visit(n); } - model.sorted = order.reverse(); - - if (count === 0) setTimeout(callback, 1); - return model; -};vg.parse.dataflow = function(def) { - var tx = (def.transform || []).map(vg.parse.transform), - df = tx.length - ? function(data, db, group) { - return tx.reduce(function(d,t) { return t(d,db,group); }, data); - } - : vg.identity; - df.transforms = tx; - df.dependencies = vg.keys((def.transform || []) - .reduce(function(map, tdef) { - var deps = vg.data[tdef.type].dependencies; - if (deps) deps.forEach(function(d) { - if (tdef[d]) map[tdef[d]] = 1; - }); - return map; - }, {})); - return df; -};vg.parse.expr = (function() { - - var parse = vg.expression.parse; - var codegen = vg.expression.code({ - idWhiteList: ['d', 'index', 'data'] - }); - - return function(expr) { - var code = codegen(parse(expr)); - return Function('d', 'index', 'data', - '"use strict"; return (' + code + ');'); - }; - -})(); -vg.parse.legends = (function() { - - function legends(spec, legends, scales) { - (spec || []).forEach(function(def, index) { - legends[index] = legends[index] || vg.scene.legend(); - legend(def, index, legends[index], scales); - }); - } - - function legend(def, index, legend, scales) { - // legend scales - legend.size (def.size ? scales[def.size] : null); - legend.shape (def.shape ? scales[def.shape] : null); - legend.fill (def.fill ? scales[def.fill] : null); - legend.stroke(def.stroke ? scales[def.stroke] : null); - - // legend orientation - if (def.orient) legend.orient(def.orient); - - // legend offset - if (def.offset != null) legend.offset(def.offset); - - // legend title - legend.title(def.title || null); - - // legend values - legend.values(def.values || null); - - // legend label formatting - legend.format(def.format !== undefined ? def.format : null); - - // style properties - var p = def.properties; - legend.titleProperties(p && p.title || {}); - legend.labelProperties(p && p.labels || {}); - legend.legendProperties(p && p.legend || {}); - legend.symbolProperties(p && p.symbols || {}); - legend.gradientProperties(p && p.gradient || {}); - } - - return legends; -})(); -vg.parse.mark = function(mark) { - var props = mark.properties, - group = mark.marks; - - // parse mark property definitions - vg.keys(props).forEach(function(k) { - props[k] = vg.parse.properties(mark.type, props[k]); - }); - - // parse delay function - if (mark.delay) { - mark.delay = vg.parse.properties(mark.type, {delay: mark.delay}); - } - - // parse mark data definition - if (mark.from) { - var name = mark.from.data, - tx = vg.parse.dataflow(mark.from); - mark.from = function(db, group, parentData) { - var data = vg.scene.data(name ? db[name] : null, parentData); - return tx(data, db, group); - }; - } - - // recurse if group type - if (group) { - mark.marks = group.map(vg.parse.mark); - } - - return mark; -};vg.parse.marks = function(spec, width, height) { - return { - type: "group", - width: width, - height: height, - scales: spec.scales || [], - axes: spec.axes || [], - legends: spec.legends || [], - marks: (spec.marks || []).map(vg.parse.mark) - }; -};vg.parse.padding = function(pad) { - if (pad == null) return "auto"; - else if (vg.isString(pad)) return pad==="strict" ? "strict" : "auto"; - else if (vg.isObject(pad)) return pad; - var p = vg.isNumber(pad) ? pad : 20; - return {top:p, left:p, right:p, bottom:p}; -}; -vg.parse.properties = (function() { - function compile(mark, spec) { - var code = "", - names = vg.keys(spec), - i, len, name, ref, vars = {}; - - code += "var o = trans ? {} : item;\n"; - - for (i=0, len=names.length; i 0) ? "\n " : " "; - code += "o."+name+" = "+valueRef(name, ref)+";"; - vars[name] = true; - } - - if (vars.x2) { - if (vars.x) { - code += "\n if (o.x > o.x2) { " - + "var t = o.x; o.x = o.x2; o.x2 = t; };"; - code += "\n o.width = (o.x2 - o.x);"; - } else if (vars.width) { - code += "\n o.x = (o.x2 - o.width);"; - } else { - code += "\n o.x = o.x2;"; - } - } - if (vars.xc) { - if (vars.width) { - code += "\n o.x = (o.xc - o.width/2);"; - } else { - code += "\n o.x = o.xc;"; - } - } - - if (vars.y2) { - if (vars.y) { - code += "\n if (o.y > o.y2) { " - + "var t = o.y; o.y = o.y2; o.y2 = t; };"; - code += "\n o.height = (o.y2 - o.y);"; - } else if (vars.height) { - code += "\n o.y = (o.y2 - o.height);"; - } else { - code += "\n o.y = o.y2;"; - } - } - if (vars.yc) { - if (vars.height) { - code += "\n o.y = (o.yc - o.height/2);"; - } else { - code += "\n o.y = o.yc;"; - } - } - - if (hasPath(mark, vars)) code += "\n item.touch();"; - code += "\n if (trans) trans.interpolate(item, o);"; - - try { - return Function("item", "group", "trans", code); - } catch (e) { - vg.error(e); - vg.log(code); - } - } - - function hasPath(mark, vars) { - return vars.path || - ((mark==="area" || mark==="line") && - (vars.x || vars.x2 || vars.width || - vars.y || vars.y2 || vars.height || - vars.tension || vars.interpolate)); - } - - var GROUP_VARS = { - "width": 1, - "height": 1, - "mark.group.width": 1, - "mark.group.height": 1 - }; - - function valueRef(name, ref) { - if (ref == null) return null; - var isColor = name==="fill" || name==="stroke"; - - if (isColor) { - if (ref.c) { - return colorRef("hcl", ref.h, ref.c, ref.l); - } else if (ref.h || ref.s) { - return colorRef("hsl", ref.h, ref.s, ref.l); - } else if (ref.l || ref.a) { - return colorRef("lab", ref.l, ref.a, ref.b); - } else if (ref.r || ref.g || ref.b) { - return colorRef("rgb", ref.r, ref.g, ref.b); - } - } - - if (ref.template) { - return vg.parse.template.source(ref.template, "item.datum"); - } - - // initialize value - var val = "item.datum.data"; - if (ref.value !== undefined) { - val = vg.str(ref.value); - } - - // get field reference for enclosing group - if (ref.group != null) { - var grp = "group.datum"; - if (vg.isString(ref.group)) { - grp = GROUP_VARS[ref.group] - ? "group." + ref.group - : "group.datum["+vg.field(ref.group).map(vg.str).join("][")+"]"; - } - } - - // get data field value - if (ref.field != null) { - if (vg.isString(ref.field)) { - val = "item.datum["+vg.field(ref.field).map(vg.str).join("][")+"]"; - if (ref.group != null) { val = "this.accessor("+val+")("+grp+")"; } - } else { - val = "this.accessor(group.datum[" - + vg.field(ref.field.group).map(vg.str).join("][") - + "])(item.datum.data)"; - } - } else if (ref.group != null) { - val = grp; - } - - // run through scale function - if (ref.scale != null) { - var scale = vg.isString(ref.scale) - ? vg.str(ref.scale) - : (ref.scale.group ? "group" : "item") - + ".datum[" + vg.str(ref.scale.group || ref.scale.field) + "]"; - scale = "group.scales[" + scale + "]"; - val = scale + (ref.band ? ".rangeBand()" : "("+val+")"); - } - - // multiply, offset, return value - val = "(" - + (ref.mult != null ? (vg.number(ref.mult) + " * ") : "") - + val - + ")" - + (ref.offset ? " + " + vg.number(ref.offset) : ""); - return val; - } - - function colorRef(type, x, y, z) { - var xx = x ? valueRef("", x) : vg.config.color[type][0], - yy = y ? valueRef("", y) : vg.config.color[type][1], - zz = z ? valueRef("", z) : vg.config.color[type][2]; - return "(this.d3." + type + "(" + [xx,yy,zz].join(",") + ') + "")'; - } - - return compile; -})();vg.parse.scales = (function() { - var LINEAR = "linear", - ORDINAL = "ordinal", - LOG = "log", - POWER = "pow", - TIME = "time", - QUANTILE = "quantile", - GROUP_PROPERTY = {width: 1, height: 1}; - - function scales(spec, scales, db, group) { - return (spec || []).reduce(function(o, def) { - var name = def.name, prev = name + ":prev"; - o[name] = scale(def, o[name], db, group); - o[prev] = o[prev] || o[name]; - return o; - }, scales || {}); - } - - function scale(def, scale, db, group) { - var s = instance(def, scale), - m = s.type===ORDINAL ? ordinal : quantitative, - rng = range(def, group), - data = vg.values(group.datum); - - m(def, s, rng, db, data); - return s; - } - - function instance(def, scale) { - var type = def.type || LINEAR; - if (!scale || type !== scale.type) { - var ctor = vg.config.scale[type] || d3.scale[type]; - if (!ctor) vg.error("Unrecognized scale type: " + type); - (scale = ctor()).type = scale.type || type; - scale.scaleName = def.name; - } - return scale; - } - - function ordinal(def, scale, rng, db, data) { - var dataDrivenRange = false, - pad = def.padding || 0, - outer = def.outerPadding == null ? pad : def.outerPadding, - domain, sort, str, refs; - - // range pre-processing for data-driven ranges - if (vg.isObject(def.range) && !vg.isArray(def.range)) { - dataDrivenRange = true; - refs = def.range.fields || vg.array(def.range); - rng = extract(refs, db, data); - } - - // domain - sort = def.sort && !dataDrivenRange; - domain = domainValues(def, db, data, sort); - if (domain) scale.domain(domain); - - // width-defined range - if (def.bandWidth) { - var bw = def.bandWidth, - len = domain.length, - start = rng[0] || 0, - space = def.points ? (pad*bw) : (pad*bw*(len-1) + 2*outer); - rng = [start, start + (bw * len + space)]; - } - - // range - str = typeof rng[0] === 'string'; - if (str || rng.length > 2 || rng.length===1 || dataDrivenRange) { - scale.range(rng); // color or shape values - } else if (def.points && (def.round || def.round == null)) { - scale.rangeRoundPoints(rng, pad); - } else if (def.points) { - scale.rangePoints(rng, pad); - } else if (def.round || def.round == null) { - scale.rangeRoundBands(rng, pad, outer); - } else { - scale.rangeBands(rng, pad, outer); - } - } - - function quantitative(def, scale, rng, db, data) { - var domain, interval; - - // domain - domain = (def.type === QUANTILE) - ? domainValues(def, db, data, false) - : domainMinMax(def, db, data); - scale.domain(domain); - - // range - // vertical scales should flip by default, so use XOR here - if (def.range === "height") rng = rng.reverse(); - scale[def.round && scale.rangeRound ? "rangeRound" : "range"](rng); - - if (def.exponent && def.type===POWER) scale.exponent(def.exponent); - if (def.clamp) scale.clamp(true); - if (def.nice) { - if (def.type === TIME) { - interval = d3.time[def.nice]; - if (!interval) vg.error("Unrecognized interval: " + interval); - scale.nice(interval); - } else { - scale.nice(); - } - } - } - - function extract(refs, db, data) { - return refs.reduce(function(values, r) { - var dat = vg.values(db[r.data] || data), - get = vg.accessor(vg.isString(r.field) - ? r.field : "data." + vg.accessor(r.field.group)(data)); - return vg.unique(dat, get, values); - }, []); - } - - function domainValues(def, db, data, sort) { - var domain = def.domain, values, refs; - if (vg.isArray(domain)) { - values = sort ? domain.slice() : domain; - } else if (vg.isObject(domain)) { - refs = domain.fields || vg.array(domain); - values = extract(refs, db, data); - } - if (values && sort) values.sort(vg.cmp); - return values; - } - - function domainMinMax(def, db, data) { - var domain = [null, null], refs, z; - - function extract(ref, min, max, z) { - var dat = vg.values(db[ref.data] || data); - var fields = vg.array(ref.field).map(function(f) { - return vg.isString(f) ? f - : "data." + vg.accessor(f.group)(data); - }); - - fields.forEach(function(f,i) { - f = vg.accessor(f); - if (min) domain[0] = d3.min([domain[0], d3.min(dat, f)]); - if (max) domain[z] = d3.max([domain[z], d3.max(dat, f)]); - }); - } - - if (def.domain !== undefined) { - if (vg.isArray(def.domain)) { - domain = def.domain.slice(); - } else if (vg.isObject(def.domain)) { - refs = def.domain.fields || vg.array(def.domain); - refs.forEach(function(r) { extract(r,1,1,1); }); - } else { - domain = def.domain; - } - } - z = domain.length - 1; - if (def.domainMin !== undefined) { - if (vg.isObject(def.domainMin)) { - domain[0] = null; - refs = def.domainMin.fields || vg.array(def.domainMin); - refs.forEach(function(r) { extract(r,1,0,z); }); - } else { - domain[0] = def.domainMin; - } - } - if (def.domainMax !== undefined) { - if (vg.isObject(def.domainMax)) { - domain[z] = null; - refs = def.domainMax.fields || vg.array(def.domainMax); - refs.forEach(function(r) { extract(r,0,1,z); }); - } else { - domain[z] = def.domainMax; - } - } - if (def.type !== LOG && def.type !== TIME && (def.zero || def.zero===undefined)) { - domain[0] = Math.min(0, domain[0]); - domain[z] = Math.max(0, domain[z]); - } - return domain; - } - - function range(def, group) { - var rng = [null, null]; - - if (def.range !== undefined) { - if (typeof def.range === 'string') { - if (GROUP_PROPERTY[def.range]) { - rng = [0, group[def.range]]; - } else if (vg.config.range[def.range]) { - rng = vg.config.range[def.range]; - } else { - vg.error("Unrecogized range: "+def.range); - return rng; - } - } else if (vg.isArray(def.range)) { - rng = vg.duplicate(def.range); - } else if (vg.isObject(def.range)) { - return null; // early exit - } else { - rng = [0, def.range]; - } - } - if (def.rangeMin !== undefined) { - rng[0] = def.rangeMin; - } - if (def.rangeMax !== undefined) { - rng[rng.length-1] = def.rangeMax; - } - - if (def.reverse !== undefined) { - var rev = def.reverse; - if (vg.isObject(rev)) { - rev = vg.accessor(rev.field)(group.datum); - } - if (rev) rng = rng.reverse(); - } - - return rng; - } - - return scales; -})(); -vg.parse.spec = function(spec, callback, viewFactory) { - - viewFactory = viewFactory || vg.ViewFactory; - - function parse(spec) { - // protect against subsequent spec modification - spec = vg.duplicate(spec); - - var width = spec.width || 500, - height = spec.height || 500, - viewport = spec.viewport || null; - - var defs = { - width: width, - height: height, - viewport: viewport, - background: vg.parse.background(spec.background), - padding: vg.parse.padding(spec.padding), - marks: vg.parse.marks(spec, width, height), - data: vg.parse.data(spec.data, function() { callback(viewConstructor); }) - }; - - var viewConstructor = viewFactory(defs); - } - - vg.isObject(spec) ? parse(spec) : - d3.json(spec, function(error, json) { - error ? vg.error(error) : parse(json); - }); -};vg.parse.template = function(text) { - var source = vg.parse.template.source(text, "d"); - source = "var __t; return " + source + ";"; - - try { - return (new Function("d", source)).bind(vg); - } catch (e) { - e.source = source; - throw e; - } -}; - -vg.parse.template.source = function(text, variable) { - variable = variable || "obj"; - var index = 0; - var source = "'"; - var regex = vg_template_re; - - // Compile the template source, escaping string literals appropriately. - text.replace(regex, function(match, interpolate, offset) { - source += text - .slice(index, offset) - .replace(vg_template_escaper, vg_template_escapeChar); - index = offset + match.length; - - if (interpolate) { - source += "'\n+((__t=(" - + vg_template_var(interpolate, variable) - + "))==null?'':__t)+\n'"; - } - - // Adobe VMs need the match returned to produce the correct offest. - return match; - }); - return source + "'"; -}; - -var vg_template_var = function(text, variable) { - var filters = text.split('|'); - var prop = filters.shift().trim(); - var format = []; - var stringCast = true; - - function strcall(fn) { - fn = fn || ""; - if (stringCast) { - stringCast = false; - source = "String(" + source + ")" + fn; - } else { - source += fn; - } - return source; - } - - var source = vg.field(prop).map(vg.str).join("]["); - source = variable + "[" + source + "]"; - - for (var i=0; i 0) { - f = f.slice(0, pidx); - args = filters[i].slice(pidx+1).split(',') - .map(function(s) { return s.trim(); }); - } - f = f.trim(); - - switch (f) { - case 'length': - strcall('.length'); - break; - case 'lower': - strcall('.toLowerCase()'); - break; - case 'upper': - strcall('.toUpperCase()'); - break; - case 'lower-locale': - strcall('.toLocaleLowerCase()'); - break; - case 'upper-locale': - strcall('.toLocaleUpperCase()'); - break; - case 'trim': - strcall('.trim()'); - break; - case 'left': - a = vg.number(args[0]); - strcall('.slice(0,' + a + ')'); - break; - case 'right': - a = vg.number(args[0]); - strcall('.slice(-' + a +')'); - break; - case 'mid': - a = vg.number(args[0]); - b = a + vg.number(args[1]); - strcall('.slice(+'+a+','+b+')'); - break; - case 'slice': - a = vg.number(args[0]); - strcall('.slice('+ a - + (args.length > 1 ? ',' + vg.number(args[1]) : '') - + ')'); - break; - case 'truncate': - a = vg.number(args[0]); - b = args[1]; - b = (b!=="left" && b!=="middle" && b!=="center") ? "right" : b; - source = 'this.truncate(' + strcall() + ',' + a + ',"' + b + '")'; - break; - case 'number': - a = vg_template_format(args[0], d3.format); - stringCast = false; - source = 'this.__formats['+a+']('+source+')'; - break; - case 'time': - a = vg_template_format(args[0], d3.time.format); - stringCast = false; - source = 'this.__formats['+a+']('+source+')'; - break; - default: - throw Error("Unrecognized template filter: " + f); - } - } - - return source; -}; - -var vg_template_re = /\{\{(.+?)\}\}|$/g; - -// Certain characters need to be escaped so that they can be put into a -// string literal. -var vg_template_escapes = { - "'": "'", - '\\': '\\', - '\r': 'r', - '\n': 'n', - '\u2028': 'u2028', - '\u2029': 'u2029' -}; - -var vg_template_escaper = /\\|'|\r|\n|\u2028|\u2029/g; - -var vg_template_escapeChar = function(match) { - return '\\' + vg_template_escapes[match]; -}; - -var vg_template_formats = []; -var vg_template_format_map = {}; - -var vg_template_format = function(pattern, fmt) { - if ((pattern[0] === "'" && pattern[pattern.length-1] === "'") || - (pattern[0] !== '"' && pattern[pattern.length-1] === '"')) { - pattern = pattern.slice(1, -1); - } else { - throw Error("Format pattern must be quoted: " + pattern); - } - if (!vg_template_format_map[pattern]) { - var f = fmt(pattern); - var i = vg_template_formats.length; - vg_template_formats.push(f); - vg_template_format_map[pattern] = i; - } - return vg_template_format_map[pattern]; -}; - -vg.__formats = vg_template_formats;vg.parse.transform = function(def) { - var tx = vg.data[def.type](); - - vg.keys(def).forEach(function(k) { - if (k === 'type') return; - (tx[k])(def[k]); - }); - - return tx; -};vg.scene = {}; - -vg.scene.GROUP = "group", -vg.scene.ENTER = 0, -vg.scene.UPDATE = 1, -vg.scene.EXIT = 2; - -vg.scene.DEFAULT_DATA = {"sentinel":1}; - -vg.scene.data = function(data, parentData) { - var DEFAULT = vg.scene.DEFAULT_DATA; - - // if data is undefined, inherit or use default - data = vg.values(data || parentData || [DEFAULT]); - - // if inheriting default data, ensure its in an array - if (data === DEFAULT) data = [DEFAULT]; - - return data; -}; - -vg.scene.fontString = function(o) { - return (o.fontStyle ? o.fontStyle + " " : "") - + (o.fontVariant ? o.fontVariant + " " : "") - + (o.fontWeight ? o.fontWeight + " " : "") - + (o.fontSize != null ? o.fontSize : vg.config.render.fontSize) + "px " - + (o.font || vg.config.render.font); -};vg.scene.Item = (function() { - function item(mark) { - this.mark = mark; - } - - var prototype = item.prototype; - - prototype.hasPropertySet = function(name) { - var props = this.mark.def.properties; - return props && props[name] != null; - }; - - prototype.cousin = function(offset, index) { - if (offset === 0) return this; - offset = offset || -1; - var mark = this.mark, - group = mark.group, - iidx = index==null ? mark.items.indexOf(this) : index, - midx = group.items.indexOf(mark) + offset; - return group.items[midx].items[iidx]; - }; - - prototype.sibling = function(offset) { - if (offset === 0) return this; - offset = offset || -1; - var mark = this.mark, - iidx = mark.items.indexOf(this) + offset; - return mark.items[iidx]; - }; - - prototype.remove = function() { - var item = this, - list = item.mark.items, - i = list.indexOf(item); - if (i >= 0) (i===list.length-1) ? list.pop() : list.splice(i, 1); - return item; - }; - - prototype.touch = function() { - if (this.pathCache) this.pathCache = null; - if (this.mark.pathCache) this.mark.pathCache = null; - }; - - return item; -})(); - -vg.scene.item = function(mark) { - return new vg.scene.Item(mark); -};vg.scene.visit = function(node, func) { - var i, n, s, m, items; - if (func(node)) return true; - - var sets = ["items", "axisItems", "legendItems"]; - for (s=0, m=sets.length; s0) s += "|"; - s += String(f[i](d)); - } - return s; - }; - } - - return build; -})(); -vg.scene.bounds = (function() { - - var parse = vg.canvas.path.parse, - boundPath = vg.canvas.path.bounds, - areaPath = vg.canvas.path.area, - linePath = vg.canvas.path.line, - halfpi = Math.PI / 2, - sqrt3 = Math.sqrt(3), - tan30 = Math.tan(30 * Math.PI / 180), - gfx = null; - - function context() { - return gfx || (gfx = (vg.config.isNode - ? new (require("canvas"))(1,1) - : d3.select("body").append("canvas") - .attr("class", "vega_hidden") - .attr("width", 1) - .attr("height", 1) - .style("display", "none") - .node()) - .getContext("2d")); - } - - function pathBounds(o, path, bounds) { - if (path == null) { - bounds.set(0, 0, 0, 0); - } else { - boundPath(path, bounds); - if (o.stroke && o.opacity !== 0 && o.strokeWidth > 0) { - bounds.expand(o.strokeWidth); - } - } - return bounds; - } - - function path(o, bounds) { - var p = o.path - ? o.pathCache || (o.pathCache = parse(o.path)) - : null; - return pathBounds(o, p, bounds); - } - - function area(o, bounds) { - var items = o.mark.items, o = items[0]; - var p = o.pathCache || (o.pathCache = parse(areaPath(items))); - return pathBounds(items[0], p, bounds); - } - - function line(o, bounds) { - var items = o.mark.items, o = items[0]; - var p = o.pathCache || (o.pathCache = parse(linePath(items))); - return pathBounds(items[0], p, bounds); - } - - function rect(o, bounds) { - var x = o.x || 0, - y = o.y || 0, - w = (x + o.width) || 0, - h = (y + o.height) || 0; - bounds.set(x, y, w, h); - if (o.stroke && o.opacity !== 0 && o.strokeWidth > 0) { - bounds.expand(o.strokeWidth); - } - return bounds; - } - - function image(o, bounds) { - var w = o.width || 0, - h = o.height || 0, - x = (o.x||0) - (o.align === "center" - ? w/2 : (o.align === "right" ? w : 0)), - y = (o.y||0) - (o.baseline === "middle" - ? h/2 : (o.baseline === "bottom" ? h : 0)); - return bounds.set(x, y, x+w, y+h); - } - - function rule(o, bounds) { - var x1, y1; - bounds.set( - x1 = o.x || 0, - y1 = o.y || 0, - o.x2 != null ? o.x2 : x1, - o.y2 != null ? o.y2 : y1 - ); - if (o.stroke && o.opacity !== 0 && o.strokeWidth > 0) { - bounds.expand(o.strokeWidth); - } - return bounds; - } - - function arc(o, bounds) { - var cx = o.x || 0, - cy = o.y || 0, - ir = o.innerRadius || 0, - or = o.outerRadius || 0, - sa = (o.startAngle || 0) - halfpi, - ea = (o.endAngle || 0) - halfpi, - xmin = Infinity, xmax = -Infinity, - ymin = Infinity, ymax = -Infinity, - a, i, n, x, y, ix, iy, ox, oy; - - var angles = [sa, ea], - s = sa - (sa%halfpi); - for (i=0; i<4 && s 0) { - bounds.expand(o.strokeWidth); - } - return bounds; - } - - function symbol(o, bounds) { - var size = o.size != null ? o.size : 100, - x = o.x || 0, - y = o.y || 0, - r, t, rx, ry; - - switch (o.shape) { - case "cross": - r = Math.sqrt(size / 5) / 2; - t = 3*r; - bounds.set(x-t, y-r, x+t, y+r); - break; - - case "diamond": - ry = Math.sqrt(size / (2 * tan30)); - rx = ry * tan30; - bounds.set(x-rx, y-ry, x+rx, y+ry); - break; - - case "square": - t = Math.sqrt(size); - r = t / 2; - bounds.set(x-r, y-r, x+r, y+r); - break; - - case "triangle-down": - rx = Math.sqrt(size / sqrt3); - ry = rx * sqrt3 / 2; - bounds.set(x-rx, y-ry, x+rx, y+ry); - break; - - case "triangle-up": - rx = Math.sqrt(size / sqrt3); - ry = rx * sqrt3 / 2; - bounds.set(x-rx, y-ry, x+rx, y+ry); - break; - - default: - r = Math.sqrt(size/Math.PI); - bounds.set(x-r, y-r, x+r, y+r); - } - if (o.stroke && o.opacity !== 0 && o.strokeWidth > 0) { - bounds.expand(o.strokeWidth); - } - return bounds; - } - - function text(o, bounds, noRotate) { - var x = (o.x || 0) + (o.dx || 0), - y = (o.y || 0) + (o.dy || 0), - h = o.fontSize || vg.config.render.fontSize, - a = o.align, - b = o.baseline, - r = o.radius || 0, - g = context(), w, t; - - g.font = vg.scene.fontString(o); - g.textAlign = a || "left"; - g.textBaseline = b || "alphabetic"; - w = g.measureText(o.text || "").width; - - if (r) { - t = (o.theta || 0) - Math.PI/2; - x += r * Math.cos(t); - y += r * Math.sin(t); - } - - // horizontal - if (a === "center") { - x = x - (w / 2); - } else if (a === "right") { - x = x - w; - } else { - // left by default, do nothing - } - - /// TODO find a robust solution for heights. - /// These offsets work for some but not all fonts. - - // vertical - if (b === "top") { - y = y + (h/5); - } else if (b === "bottom") { - y = y - h; - } else if (b === "middle") { - y = y - (h/2) + (h/10); - } else { - y = y - 4*h/5; // alphabetic by default - } - - bounds.set(x, y, x+w, y+h); - if (o.angle && !noRotate) { - bounds.rotate(o.angle*Math.PI/180, o.x||0, o.y||0); - } - return bounds.expand(noRotate ? 0 : 1); - } - - function group(g, bounds, includeLegends) { - var axes = g.axisItems || [], - legends = g.legendItems || [], j, m; - - for (j=0, m=axes.length; j 1) f = 1; - e = curr.ease(f); - - for (i=0, n=curr.length; i 1 ? +y : tickMajorSize, - end = n > 0 ? +arguments[n] : tickMajorSize; - - if (tickMajorSize !== major || - tickMinorSize !== minor || - tickEndSize !== end) { - reset(); - } - - tickMajorSize = major; - tickMinorSize = minor; - tickEndSize = end; - return axis; - }; - - axis.tickSubdivide = function(x) { - if (!arguments.length) return tickSubdivide; - tickSubdivide = +x; - return axis; - }; - - axis.offset = function(x) { - if (!arguments.length) return offset; - offset = vg.isObject(x) ? x : +x; - return axis; - }; - - axis.tickPadding = function(x) { - if (!arguments.length) return tickPadding; - if (tickPadding !== +x) { tickPadding = +x; reset(); } - return axis; - }; - - axis.titleOffset = function(x) { - if (!arguments.length) return titleOffset; - if (titleOffset !== +x) { titleOffset = +x; reset(); } - return axis; - }; - - axis.layer = function(x) { - if (!arguments.length) return layer; - if (layer !== x) { layer = x; reset(); } - return axis; - }; - - axis.grid = function(x) { - if (!arguments.length) return grid; - if (grid !== x) { grid = x; reset(); } - return axis; - }; - - axis.gridLineProperties = function(x) { - if (!arguments.length) return gridLineStyle; - if (gridLineStyle !== x) { gridLineStyle = x; } - return axis; - }; - - axis.majorTickProperties = function(x) { - if (!arguments.length) return majorTickStyle; - if (majorTickStyle !== x) { majorTickStyle = x; } - return axis; - }; - - axis.minorTickProperties = function(x) { - if (!arguments.length) return minorTickStyle; - if (minorTickStyle !== x) { minorTickStyle = x; } - return axis; - }; - - axis.tickLabelProperties = function(x) { - if (!arguments.length) return tickLabelStyle; - if (tickLabelStyle !== x) { tickLabelStyle = x; } - return axis; - }; - - axis.titleProperties = function(x) { - if (!arguments.length) return titleStyle; - if (titleStyle !== x) { titleStyle = x; } - return axis; - }; - - axis.domainProperties = function(x) { - if (!arguments.length) return domainStyle; - if (domainStyle !== x) { domainStyle = x; } - return axis; - }; - - axis.reset = function() { reset(); }; - - return axis; -}; - -var vg_axisOrients = {top: 1, right: 1, bottom: 1, left: 1}; - -function vg_axisSubdivide(scale, ticks, m) { - subticks = []; - if (m && ticks.length > 1) { - var extent = vg_axisScaleExtent(scale.domain()), - subticks, - i = -1, - n = ticks.length, - d = (ticks[1] - ticks[0]) / ++m, - j, - v; - while (++i < n) { - for (j = m; --j > 0;) { - if ((v = +ticks[i] - j * d) >= extent[0]) { - subticks.push(v); - } - } - } - for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1];) { - subticks.push(v); - } - } - return subticks; -} - -function vg_axisScaleExtent(domain) { - var start = domain[0], stop = domain[domain.length - 1]; - return start < stop ? [start, stop] : [stop, start]; -} - -function vg_axisScaleRange(scale) { - return scale.rangeExtent - ? scale.rangeExtent() - : vg_axisScaleExtent(scale.range()); -} - -var vg_axisAlign = { - bottom: "center", - top: "center", - left: "right", - right: "left" -}; - -var vg_axisBaseline = { - bottom: "top", - top: "bottom", - left: "middle", - right: "middle" -}; - -function vg_axisLabelExtend(orient, labels, oldScale, newScale, size, pad) { - size = Math.max(size, 0) + pad; - if (orient === "left" || orient === "top") { - size *= -1; - } - if (orient === "top" || orient === "bottom") { - vg.extend(labels.properties.enter, { - x: oldScale, - y: {value: size}, - }); - vg.extend(labels.properties.update, { - x: newScale, - y: {value: size}, - align: {value: "center"}, - baseline: {value: vg_axisBaseline[orient]} - }); - } else { - vg.extend(labels.properties.enter, { - x: {value: size}, - y: oldScale, - }); - vg.extend(labels.properties.update, { - x: {value: size}, - y: newScale, - align: {value: vg_axisAlign[orient]}, - baseline: {value: "middle"} - }); - } -} - -function vg_axisTicksExtend(orient, ticks, oldScale, newScale, size) { - var sign = (orient === "left" || orient === "top") ? -1 : 1; - if (size === Infinity) { - size = (orient === "top" || orient === "bottom") - ? {group: "mark.group.height", mult: -sign} - : {group: "mark.group.width", mult: -sign}; - } else { - size = {value: sign * size}; - } - if (orient === "top" || orient === "bottom") { - vg.extend(ticks.properties.enter, { - x: oldScale, - y: {value: 0}, - y2: size - }); - vg.extend(ticks.properties.update, { - x: newScale, - y: {value: 0}, - y2: size - }); - vg.extend(ticks.properties.exit, { - x: newScale, - }); - } else { - vg.extend(ticks.properties.enter, { - x: {value: 0}, - x2: size, - y: oldScale - }); - vg.extend(ticks.properties.update, { - x: {value: 0}, - x2: size, - y: newScale - }); - vg.extend(ticks.properties.exit, { - y: newScale, - }); - } -} - -function vg_axisTitleExtend(orient, title, range, offset) { - var mid = ~~((range[0] + range[1]) / 2), - sign = (orient === "top" || orient === "left") ? -1 : 1; - - if (orient === "bottom" || orient === "top") { - vg.extend(title.properties.update, { - x: {value: mid}, - y: {value: sign*offset}, - angle: {value: 0} - }); - } else { - vg.extend(title.properties.update, { - x: {value: sign*offset}, - y: {value: mid}, - angle: {value: -90} - }); - } -} - -function vg_axisDomainExtend(orient, domain, range, size) { - var path; - if (orient === "top" || orient === "left") { - size = -1 * size; - } - if (orient === "bottom" || orient === "top") { - path = "M" + range[0] + "," + size + "V0H" + range[1] + "V" + size; - } else { - path = "M" + size + "," + range[0] + "H0V" + range[1] + "H" + size; - } - domain.properties.update.path = {value: path}; -} - -function vg_axisUpdate(item, group, trans) { - var o = trans ? {} : item, - offset = item.mark.def.offset, - orient = item.mark.def.orient, - width = group.width, - height = group.height; // TODO fallback to global w,h? - - if (vg.isArray(offset)) { - var ofx = offset[0], - ofy = offset[1]; - - switch (orient) { - case "left": { o.x = -ofx; o.y = ofy; break; } - case "right": { o.x = width + ofx; o.y = ofy; break; } - case "bottom": { o.x = ofx; o.y = height + ofy; break; } - case "top": { o.x = ofx; o.y = -ofy; break; } - default: { o.x = ofx; o.y = ofy; } - } - } else { - if (vg.isObject(offset)) { - offset = -group.scales[offset.scale](offset.value); - } - - switch (orient) { - case "left": { o.x = -offset; o.y = 0; break; } - case "right": { o.x = width + offset; o.y = 0; break; } - case "bottom": { o.x = 0; o.y = height + offset; break; } - case "top": { o.x = 0; o.y = -offset; break; } - default: { o.x = 0; o.y = 0; } - } - } - - if (trans) trans.interpolate(item, o); -} - -function vg_axisTicks() { - return { - type: "rule", - interactive: false, - key: "data", - properties: { - enter: { - stroke: {value: vg.config.axis.tickColor}, - strokeWidth: {value: vg.config.axis.tickWidth}, - opacity: {value: 1e-6} - }, - exit: { opacity: {value: 1e-6} }, - update: { opacity: {value: 1} } - } - }; -} - -function vg_axisTickLabels() { - return { - type: "text", - interactive: true, - key: "data", - properties: { - enter: { - fill: {value: vg.config.axis.tickLabelColor}, - font: {value: vg.config.axis.tickLabelFont}, - fontSize: {value: vg.config.axis.tickLabelFontSize}, - opacity: {value: 1e-6}, - text: {field: "label"} - }, - exit: { opacity: {value: 1e-6} }, - update: { opacity: {value: 1} } - } - }; -} - -function vg_axisTitle() { - return { - type: "text", - interactive: true, - properties: { - enter: { - font: {value: vg.config.axis.titleFont}, - fontSize: {value: vg.config.axis.titleFontSize}, - fontWeight: {value: vg.config.axis.titleFontWeight}, - fill: {value: vg.config.axis.titleColor}, - align: {value: "center"}, - baseline: {value: "middle"}, - text: {field: "data"} - }, - update: {} - } - }; -} - -function vg_axisDomain() { - return { - type: "path", - interactive: false, - properties: { - enter: { - x: {value: 0.5}, - y: {value: 0.5}, - stroke: {value: vg.config.axis.axisColor}, - strokeWidth: {value: vg.config.axis.axisWidth} - }, - update: {} - } - }; -} -vg.scene.legend = function() { - var size = null, - shape = null, - fill = null, - stroke = null, - spacing = null, - values = null, - format = null, - formatString = null, - title, - orient = "right", - offset = vg.config.legend.offset, - padding = vg.config.legend.padding, - legendDef, - tickArguments = [5], - legendStyle = {}, - symbolStyle = {}, - gradientStyle = {}, - titleStyle = {}, - labelStyle = {}; - - var legend = {}, - legendDef = null; - - function reset() { legendDef = null; } - - legend.def = function() { - var scale = size || shape || fill || stroke; - - format = !formatString ? null : ((scale.type === 'time') - ? d3.time.format(formatString) - : d3.format(formatString)); - - if (!legendDef) { - legendDef = (scale===fill || scale===stroke) && !discrete(scale.type) - ? quantDef(scale) - : ordinalDef(scale); - } - legendDef.orient = orient; - legendDef.offset = offset; - legendDef.padding = padding; - return legendDef; - }; - - function discrete(type) { - return type==="ordinal" || type==="quantize" - || type==="quantile" || type==="threshold"; - } - - function ordinalDef(scale) { - var def = o_legend_def(size, shape, fill, stroke); - - // generate data - var data = (values == null - ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) - : values).map(vg.data.ingest); - var fmt = format==null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : String) : format; - - // determine spacing between legend entries - var fs, range, offset, pad=5, domain = d3.range(data.length); - if (size) { - range = data.map(function(x) { return Math.sqrt(size(x.data)); }); - offset = d3.max(range); - range = range.reduce(function(a,b,i,z) { - if (i > 0) a[i] = a[i-1] + z[i-1]/2 + pad; - return (a[i] += b/2, a); }, [0]).map(Math.round); - } else { - offset = Math.round(Math.sqrt(vg.config.legend.symbolSize)); - range = spacing - || (fs = labelStyle.fontSize) && (fs.value + pad) - || (vg.config.legend.labelFontSize + pad); - range = domain.map(function(d,i) { - return Math.round(offset/2 + i*range); - }); - } - - // account for padding and title size - var sz = padding, ts; - if (title) { - ts = titleStyle.fontSize; - sz += 5 + ((ts && ts.value) || vg.config.legend.titleFontSize); - } - for (var i=0, n=range.length; i this._width ? Math.ceil(+b.x2 - this._width) + inset : 0, - b = b.y2 > this._height ? Math.ceil(+b.y2 - this._height) + inset : 0; - pad = {left:l, top:t, right:r, bottom:b}; - - if (this._strict) { - this._autopad = 0; - this._padding = pad; - this._width = Math.max(0, this.__width - (l+r)); - this._height = Math.max(0, this.__height - (t+b)); - this._model.width(this._width); - this._model.height(this._height); - if (this._el) this.initialize(this._el.parentNode); - this.update({props:"enter"}).update({props:"update"}); - } else { - this.padding(pad).update(opt); - } - return this; - }; - - prototype.viewport = function(size) { - if (!arguments.length) return this._viewport; - if (this._viewport !== size) { - this._viewport = size; - if (this._el) this.initialize(this._el.parentNode); - } - return this; - }; - - prototype.renderer = function(type) { - if (!arguments.length) return this._io; - if (type === "canvas") type = vg.canvas; - if (type === "svg") type = vg.svg; - if (this._io !== type) { - this._io = type; - this._renderer = null; - if (this._el) this.initialize(this._el.parentNode); - if (this._build) this.render(); - } - return this; - }; - - prototype.defs = function(defs) { - if (!arguments.length) return this._model.defs(); - this._model.defs(defs); - return this; - }; - - prototype.data = function(data) { - if (!arguments.length) return this._model.data(); - var ingest = vg.keys(data).reduce(function(d, k) { - return (d[k] = vg.data.ingestAll(data[k]), d); - }, {}); - this._model.data(ingest); - this._build = false; - return this; - }; - - prototype.model = function(model) { - if (!arguments.length) return this._model; - if (this._model !== model) { - this._model = model; - if (this._handler) this._handler.model(model); - } - return this; - }; - - prototype.initialize = function(el) { - var v = this, prevHandler, - w = v._width, - h = v._height, - bg = v._bgcolor, - pad = v._padding; - - // clear pre-existing container - d3.select(el).select("div.vega").remove(); - - // add div container - this._el = el = d3.select(el) - .append("div") - .attr("class", "vega") - .style("position", "relative") - .node(); - if (v._viewport) { - d3.select(el) - .style("width", (v._viewport[0] || w)+"px") - .style("height", (v._viewport[1] || h)+"px") - .style("overflow", "auto"); - } - - // renderer - v._renderer = (v._renderer || new this._io.Renderer()) - .initialize(el, w, h, pad, bg); - - // input handler - prevHandler = v._handler; - v._handler = new this._io.Handler() - .initialize(el, pad, v) - .model(v._model); - - if (prevHandler) { - prevHandler.handlers().forEach(function(h) { - v._handler.on(h.type, h.handler); - }); - } - - return this; - }; - - prototype.render = function(items) { - this._renderer.render(this._model.scene(), items); - return this; - }; - - prototype.on = function() { - this._handler.on.apply(this._handler, arguments); - return this; - }; - - prototype.off = function() { - this._handler.off.apply(this._handler, arguments); - return this; - }; - - prototype.update = function(opt) { - opt = opt || {}; - var view = this, - trans = opt.duration - ? vg.scene.transition(opt.duration, opt.ease) - : null; - - view._build = view._build || (view._model.build(), true); - view._model.encode(trans, opt.props, opt.items); - - if (trans) { - trans.start(function(items) { - view._renderer.render(view._model.scene(), items); - }); - } - else view.render(opt.items); - - return view.autopad(opt); - }; - - return view; -})(); - -// view constructor factory -// takes definitions from parsed specification as input -// returns a view constructor -vg.ViewFactory = function(defs) { - return function(opt) { - opt = opt || {}; - var v = new vg.View() - .width(defs.width) - .height(defs.height) - .background(defs.background) - .padding(defs.padding) - .viewport(defs.viewport) - .renderer(opt.renderer || "canvas") - .defs(defs); - - if (defs.data.load) v.data(defs.data.load); - if (opt.data) v.data(opt.data); - if (opt.el) v.initialize(opt.el); - - if (opt.hover !== false) { - v.on("mouseover", function(evt, item) { - if (item.hasPropertySet("hover")) { - this.update({props:"hover", items:item}); - } - }) - .on("mouseout", function(evt, item) { - if (item.hasPropertySet("hover")) { - this.update({props:"update", items:item}); - } - }); - } - - return v; - }; -}; -vg.Spec = (function() { - var spec = function(s) { - this.spec = { - width: 500, - height: 500, - padding: 0, - data: [], - scales: [], - axes: [], - marks: [] - }; - if (s) vg.extend(this.spec, s); - }; - - var prototype = spec.prototype; - - prototype.width = function(w) { - this.spec.width = w; - return this; - }; - - prototype.height = function(h) { - this.spec.height = h; - return this; - }; - - prototype.padding = function(p) { - this.spec.padding = p; - return this; - }; - - prototype.viewport = function(v) { - this.spec.viewport = v; - return this; - }; - - prototype.data = function(name, params) { - if (!params) params = vg.isString(name) ? {name: name} : name; - else params.name = name; - this.spec.data.push(params); - return this; - }; - - prototype.scale = function(name, params) { - if (!params) params = vg.isString(name) ? {name: name} : name; - else params.name = name; - this.spec.scales.push(params); - return this; - }; - - prototype.axis = function(params) { - this.spec.axes.push(params); - return this; - }; - - prototype.mark = function(type, mark) { - if (!mark) mark = {type: type}; - else mark.type = type; - mark.properties = {}; - this.spec.marks.push(mark); - - var that = this; - return { - from: function(name, obj) { - mark.from = obj - ? (obj.data = name, obj) - : vg.isString(name) ? {data: name} : name; - return this; - }, - prop: function(name, obj) { - mark.properties[name] = vg.keys(obj).reduce(function(o,k) { - var v = obj[k]; - return (o[k] = vg.isObject(v) ? v : {value: v}, o); - }, {}); - return this; - }, - done: function() { return that; } - }; - }; - - prototype.parse = function(callback) { - vg.parse.spec(this.spec, callback); - }; - - prototype.json = function() { - return this.spec; - }; - - return spec; -})(); - -vg.spec = function(s) { - return new vg.Spec(s); -}; -vg.headless = {}; - -vg.headless.canvas = vg.canvas.Renderer;vg.headless.svg = (function() { - - var renderer = function() { - this._text = { - head: "", - root: "", - foot: "", - defs: "", - body: "" - }; - this._defs = { - gradient: {}, - clipping: {} - }; - }; - - function open(tag, attr, raw) { - var s = "<" + tag; - if (attr) { - for (var key in attr) { - var val = attr[key]; - if (val != null) { - s += " " + key + '="' + val + '"'; - } - } - } - if (raw) s += " " + raw; - return s + ">"; - } - - function close(tag) { - return ""; - } - - var prototype = renderer.prototype; - - prototype.initialize = function(el, w, h, pad, bgcolor) { - var t = this._text; - - var headAttr = { - width: w, - height: h - }; - if (bgcolor != null) { - headAttr.style = 'background-color:' + bgcolor + ';'; - } - - t.head = open('svg', headAttr, vg.config.svgNamespace); - - t.root = open('g', { - transform: 'translate(' + pad.left + ',' + pad.top + ')' - }); - - t.foot = close('g') + close('svg'); - }; - - prototype.svg = function() { - var t = this._text; - return t.head + t.defs + t.root + t.body + t.foot; - }; - - prototype.buildDefs = function() { - var all = this._defs, - dgrad = vg.keys(all.gradient), - dclip = vg.keys(all.clipping), - defs = "", grad, clip, i, j; - - for (i=0; i/g, '>'); - } - - function escape_font(s) { - return String(s).replace(/\"/g, "'"); - } - - var MARKS = { - group: ['g', group], - area: ['path', area, true], - line: ['path', line, true], - arc: ['path', arc], - path: ['path', path], - symbol: ['path', symbol], - rect: ['rect', rect], - rule: ['line', rule], - text: ['text', text], - image: ['image', image] - }; - - prototype.drawGroup = function(scene) { - var svg = "", - axes = scene.axisItems || [], - items = scene.items, - legends = scene.legendItems || [], - i, j, m; - - svg += group_bg(scene); - - for (j=0, m=axes.length; j this._width ? Math.ceil(+b.x2 - this._width) + inset : 0, - b = b.y2 > this._height ? Math.ceil(+b.y2 - this._height) + inset : 0; - pad = {left:l, top:t, right:r, bottom:b}; - - if (this._strict) { - this._autopad = 0; - this._padding = pad; - this._width = Math.max(0, this.__width - (l+r)); - this._height = Math.max(0, this.__height - (t+b)); - this._model.width(this._width); - this._model.height(this._height); - if (this._el) this.initialize(); - this.update({props:"enter"}).update({props:"update"}); - } else { - this.padding(pad).update(opt); - } - return this; - }; - - prototype.viewport = function(vp) { - if (!arguments.length) return _viewport; - this._viewport = vp; - this.initialize(); - return this; - }; - - prototype.defs = function(defs) { - if (!arguments.length) return this._model.defs(); - this._model.defs(defs); - return this; - }; - - prototype.data = function(data) { - if (!arguments.length) return this._model.data(); - var ingest = vg.keys(data).reduce(function(d, k) { - return (d[k] = vg.data.ingestAll(data[k]), d); - }, {}); - this._model.data(ingest); - this._build = false; - return this; - }; - - prototype.renderer = function() { - return this._renderer; - }; - - prototype.canvas = function() { - return this._canvas; - }; - - prototype.canvasAsync = function(callback) { - var r = this._renderer, view = this; - - function wait() { - if (r.pendingImages() === 0) { - view.render(); // re-render with all images - callback(view._canvas); - } else { - setTimeout(wait, 10); - } - } - - // if images loading, poll until ready - (r.pendingImages() > 0) ? wait() : callback(this._canvas); - }; - - prototype.svg = function() { - return (this._type === "svg") - ? this._renderer.svg() - : null; - }; - - prototype.initialize = function() { - var w = this._width, - h = this._height, - bg = this._bgcolor, - pad = this._padding; - - if (this._viewport) { - w = this._viewport[0] - (pad ? pad.left + pad.right : 0); - h = this._viewport[1] - (pad ? pad.top + pad.bottom : 0); - } - - if (this._type === "svg") { - this.initSVG(w, h, pad, bg); - } else { - this.initCanvas(w, h, pad, bg); - } - - return this; - }; - - prototype.initCanvas = function(w, h, pad, bg) { - var Canvas = require("canvas"), - tw = w + (pad ? pad.left + pad.right : 0), - th = h + (pad ? pad.top + pad.bottom : 0), - canvas = this._canvas = new Canvas(tw, th), - ctx = canvas.getContext("2d"); - - // setup canvas context - ctx.setTransform(1, 0, 0, 1, pad.left, pad.top); - - // configure renderer - this._renderer.context(ctx); - this._renderer.resize(w, h, pad); - this._renderer.background(bg); - }; - - prototype.initSVG = function(w, h, pad, bg) { - var tw = w + (pad ? pad.left + pad.right : 0), - th = h + (pad ? pad.top + pad.bottom : 0); - - // configure renderer - this._renderer.initialize(this._el, tw, th, pad, bg); - }; - - prototype.render = function(items) { - this._renderer.render(this._model.scene(), items); - return this; - }; - - prototype.update = function(opt) { - opt = opt || {}; - var view = this; - view._build = view._build || (view._model.build(), true); - view._model.encode(null, opt.props, opt.items); - view.render(opt.items); - return view.autopad(opt); - }; - - return view; -})(); - -// headless view constructor factory -// takes definitions from parsed specification as input -// returns a view constructor -vg.headless.View.Factory = function(defs) { - return function(opt) { - opt = opt || {}; - var w = defs.width, - h = defs.height, - p = defs.padding, - bg = defs.background, - vp = defs.viewport, - r = opt.renderer || "canvas", - v = new vg.headless.View(w, h, p, bg, r, vp).defs(defs); - if (defs.data.load) v.data(defs.data.load); - if (opt.data) v.data(opt.data); - return v; - }; -};vg.headless.render = function(opt, callback) { - function draw(chart) { - try { - // create and render view - var view = chart({ - data: opt.data, - renderer: opt.renderer - }).update(); - - if (opt.renderer === "svg") { - // extract rendered svg - callback(null, {svg: view.svg(), view: view}); - } else { - // extract rendered canvas, waiting for any images to load - view.canvasAsync(function(canvas) { - callback(null, {canvas: canvas, view: view}); - }); - } - } catch (err) { - callback(err, null); - } - } - - vg.parse.spec(opt.spec, draw, vg.headless.View.Factory); -}; // return module - return vg; - -//--------------------------------------------------- -// END code for this module -//--------------------------------------------------- -})); \ No newline at end of file diff --git a/dist/extensions/Graph/lib/vega2/vega.js b/dist/extensions/Graph/lib/vega2/vega.js deleted file mode 100644 index 1db5bae97..000000000 --- a/dist/extensions/Graph/lib/vega2/vega.js +++ /dev/null @@ -1,22092 +0,0 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.vg = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= N) return EOF; // special case: end of file - if (eol) return eol = false, EOL; // special case: end of line - - // special case: quotes - var j = I, c; - if (text.charCodeAt(j) === 34) { - var i = j; - while (i++ < N) { - if (text.charCodeAt(i) === 34) { - if (text.charCodeAt(i + 1) !== 34) break; - ++i; - } - } - I = i + 2; - c = text.charCodeAt(i + 1); - if (c === 13) { - eol = true; - if (text.charCodeAt(i + 2) === 10) ++I; - } else if (c === 10) { - eol = true; - } - return text.slice(j + 1, i).replace(/""/g, "\""); - } - - // common case: find next delimiter or newline - while (I < N) { - var k = 1; - c = text.charCodeAt(I++); - if (c === 10) eol = true; // \n - else if (c === 13) { eol = true; if (text.charCodeAt(I) === 10) ++I, ++k; } // \r|\r\n - else if (c !== delimiterCode) continue; - return text.slice(j, I - k); - } - - // special case: last token before EOF - return text.slice(j); - } - - while ((t = token()) !== EOF) { - var a = []; - while (t !== EOL && t !== EOF) { - a.push(t); - t = token(); - } - if (f && (a = f(a, n++)) == null) continue; - rows.push(a); - } - - return rows; - } - - this.format = function(rows, columns) { - if (columns == null) columns = inferColumns(rows); - return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) { - return columns.map(function(column) { - return formatValue(row[column]); - }).join(delimiter); - })).join("\n"); - }; - - this.formatRows = function(rows) { - return rows.map(formatRow).join("\n"); - }; - - function formatRow(row) { - return row.map(formatValue).join(delimiter); - } - - function formatValue(text) { - return reFormat.test(text) ? "\"" + text.replace(/\"/g, "\"\"") + "\"" : text; - } - } - - dsv.prototype = Dsv.prototype; - - var csv = dsv(","); - var tsv = dsv("\t"); - - var version = "0.1.14"; - - exports.version = version; - exports.dsv = dsv; - exports.csv = csv; - exports.tsv = tsv; - -})); -},{}],4:[function(require,module,exports){ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define('d3-format', ['exports'], factory) : - factory((global.d3_format = {})); -}(this, function (exports) { 'use strict'; - - // Computes the decimal coefficient and exponent of the specified number x with - // significant digits p, where x is positive and p is in [1, 21] or undefined. - // For example, formatDecimal(1.23) returns ["123", 0]. - function formatDecimal(x, p) { - if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity - var i, coefficient = x.slice(0, i); - - // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ - // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). - return [ - coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, - +x.slice(i + 1) - ]; - }; - - function exponent(x) { - return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN; - }; - - function formatGroup(grouping, thousands) { - return function(value, width) { - var i = value.length, - t = [], - j = 0, - g = grouping[0], - length = 0; - - while (i > 0 && g > 0) { - if (length + g + 1 > width) g = Math.max(1, width - length); - t.push(value.substring(i -= g, i + g)); - if ((length += g + 1) > width) break; - g = grouping[j = (j + 1) % grouping.length]; - } - - return t.reverse().join(thousands); - }; - }; - - var prefixExponent; - - function formatPrefixAuto(x, p) { - var d = formatDecimal(x, p); - if (!d) return x + ""; - var coefficient = d[0], - exponent = d[1], - i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, - n = coefficient.length; - return i === n ? coefficient - : i > n ? coefficient + new Array(i - n + 1).join("0") - : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) - : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y! - }; - - function formatRounded(x, p) { - var d = formatDecimal(x, p); - if (!d) return x + ""; - var coefficient = d[0], - exponent = d[1]; - return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient - : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) - : coefficient + new Array(exponent - coefficient.length + 2).join("0"); - }; - - function formatDefault(x, p) { - x = x.toPrecision(p); - - out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) { - switch (x[i]) { - case ".": i0 = i1 = i; break; - case "0": if (i0 === 0) i0 = i; i1 = i; break; - case "e": break out; - default: if (i0 > 0) i0 = 0; break; - } - } - - return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x; - }; - - var formatTypes = { - "": formatDefault, - "%": function(x, p) { return (x * 100).toFixed(p); }, - "b": function(x) { return Math.round(x).toString(2); }, - "c": function(x) { return x + ""; }, - "d": function(x) { return Math.round(x).toString(10); }, - "e": function(x, p) { return x.toExponential(p); }, - "f": function(x, p) { return x.toFixed(p); }, - "g": function(x, p) { return x.toPrecision(p); }, - "o": function(x) { return Math.round(x).toString(8); }, - "p": function(x, p) { return formatRounded(x * 100, p); }, - "r": formatRounded, - "s": formatPrefixAuto, - "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, - "x": function(x) { return Math.round(x).toString(16); } - }; - - // [[fill]align][sign][symbol][0][width][,][.precision][type] - var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i; - - function formatSpecifier(specifier) { - return new FormatSpecifier(specifier); - }; - - function FormatSpecifier(specifier) { - if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); - - var match, - fill = match[1] || " ", - align = match[2] || ">", - sign = match[3] || "-", - symbol = match[4] || "", - zero = !!match[5], - width = match[6] && +match[6], - comma = !!match[7], - precision = match[8] && +match[8].slice(1), - type = match[9] || ""; - - // The "n" type is an alias for ",g". - if (type === "n") comma = true, type = "g"; - - // Map invalid types to the default format. - else if (!formatTypes[type]) type = ""; - - // If zero fill is specified, padding goes after sign and before digits. - if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; - - this.fill = fill; - this.align = align; - this.sign = sign; - this.symbol = symbol; - this.zero = zero; - this.width = width; - this.comma = comma; - this.precision = precision; - this.type = type; - } - - FormatSpecifier.prototype.toString = function() { - return this.fill - + this.align - + this.sign - + this.symbol - + (this.zero ? "0" : "") - + (this.width == null ? "" : Math.max(1, this.width | 0)) - + (this.comma ? "," : "") - + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0)) - + this.type; - }; - - var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"]; - - function identity(x) { - return x; - } - - function locale(locale) { - var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity, - currency = locale.currency, - decimal = locale.decimal; - - function format(specifier) { - specifier = formatSpecifier(specifier); - - var fill = specifier.fill, - align = specifier.align, - sign = specifier.sign, - symbol = specifier.symbol, - zero = specifier.zero, - width = specifier.width, - comma = specifier.comma, - precision = specifier.precision, - type = specifier.type; - - // Compute the prefix and suffix. - // For SI-prefix, the suffix is lazily computed. - var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", - suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? "%" : ""; - - // What format function should we use? - // Is this an integer type? - // Can this type generate exponential notation? - var formatType = formatTypes[type], - maybeSuffix = !type || /[defgprs%]/.test(type); - - // Set the default precision if not specified, - // or clamp the specified precision to the supported range. - // For significant precision, it must be in [1, 21]. - // For fixed precision, it must be in [0, 20]. - precision = precision == null ? (type ? 6 : 12) - : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) - : Math.max(0, Math.min(20, precision)); - - return function(value) { - var valuePrefix = prefix, - valueSuffix = suffix; - - if (type === "c") { - valueSuffix = formatType(value) + valueSuffix; - value = ""; - } else { - value = +value; - - // Convert negative to positive, and compute the prefix. - // Note that -0 is not less than 0, but 1 / -0 is! - var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true); - - // Perform the initial formatting. - value = formatType(value, precision); - - // If the original value was negative, it may be rounded to zero during - // formatting; treat this as (positive) zero. - if (valueNegative) { - var i = -1, n = value.length, c; - valueNegative = false; - while (++i < n) { - if (c = value.charCodeAt(i), (48 < c && c < 58) - || (type === "x" && 96 < c && c < 103) - || (type === "X" && 64 < c && c < 71)) { - valueNegative = true; - break; - } - } - } - - // Compute the prefix and suffix. - valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; - valueSuffix = valueSuffix + (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + (valueNegative && sign === "(" ? ")" : ""); - - // Break the formatted value into the integer “value” part that can be - // grouped, and fractional or exponential “suffix” part that is not. - if (maybeSuffix) { - var i = -1, n = value.length, c; - while (++i < n) { - if (c = value.charCodeAt(i), 48 > c || c > 57) { - valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; - value = value.slice(0, i); - break; - } - } - } - } - - // If the fill character is not "0", grouping is applied before padding. - if (comma && !zero) value = group(value, Infinity); - - // Compute the padding. - var length = valuePrefix.length + value.length + valueSuffix.length, - padding = length < width ? new Array(width - length + 1).join(fill) : ""; - - // If the fill character is "0", grouping is applied after padding. - if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; - - // Reconstruct the final output based on the desired alignment. - switch (align) { - case "<": return valuePrefix + value + valueSuffix + padding; - case "=": return valuePrefix + padding + value + valueSuffix; - case "^": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); - } - return padding + valuePrefix + value + valueSuffix; - }; - } - - function formatPrefix(specifier, value) { - var f = format((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)), - e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3, - k = Math.pow(10, -e), - prefix = prefixes[8 + e / 3]; - return function(value) { - return f(k * value) + prefix; - }; - } - - return { - format: format, - formatPrefix: formatPrefix - }; - }; - - var defaultLocale = locale({ - decimal: ".", - thousands: ",", - grouping: [3], - currency: ["$", ""] - }); - - var caES = locale({ - decimal: ",", - thousands: ".", - grouping: [3], - currency: ["", "\xa0€"] - }); - - var csCZ = locale({ - decimal: ",", - thousands: "\xa0", - grouping: [3], - currency: ["", "\xa0Kč"], - }); - - var deCH = locale({ - decimal: ",", - thousands: "'", - grouping: [3], - currency: ["", "\xa0CHF"] - }); - - var deDE = locale({ - decimal: ",", - thousands: ".", - grouping: [3], - currency: ["", "\xa0€"] - }); - - var enCA = locale({ - decimal: ".", - thousands: ",", - grouping: [3], - currency: ["$", ""] - }); - - var enGB = locale({ - decimal: ".", - thousands: ",", - grouping: [3], - currency: ["£", ""] - }); - - var esES = locale({ - decimal: ",", - thousands: ".", - grouping: [3], - currency: ["", "\xa0€"] - }); - - var fiFI = locale({ - decimal: ",", - thousands: "\xa0", - grouping: [3], - currency: ["", "\xa0€"] - }); - - var frCA = locale({ - decimal: ",", - thousands: "\xa0", - grouping: [3], - currency: ["", "$"] - }); - - var frFR = locale({ - decimal: ",", - thousands: ".", - grouping: [3], - currency: ["", "\xa0€"] - }); - - var heIL = locale({ - decimal: ".", - thousands: ",", - grouping: [3], - currency: ["₪", ""] - }); - - var huHU = locale({ - decimal: ",", - thousands: "\xa0", - grouping: [3], - currency: ["", "\xa0Ft"] - }); - - var itIT = locale({ - decimal: ",", - thousands: ".", - grouping: [3], - currency: ["€", ""] - }); - - var jaJP = locale({ - decimal: ".", - thousands: ",", - grouping: [3], - currency: ["", "円"] - }); - - var koKR = locale({ - decimal: ".", - thousands: ",", - grouping: [3], - currency: ["₩", ""] - }); - - var mkMK = locale({ - decimal: ",", - thousands: ".", - grouping: [3], - currency: ["", "\xa0ден."] - }); - - var nlNL = locale({ - decimal: ",", - thousands: ".", - grouping: [3], - currency: ["€\xa0", ""] - }); - - var plPL = locale({ - decimal: ",", - thousands: ".", - grouping: [3], - currency: ["", "zł"] - }); - - var ptBR = locale({ - decimal: ",", - thousands: ".", - grouping: [3], - currency: ["R$", ""] - }); - - var ruRU = locale({ - decimal: ",", - thousands: "\xa0", - grouping: [3], - currency: ["", "\xa0руб."] - }); - - var svSE = locale({ - decimal: ",", - thousands: "\xa0", - grouping: [3], - currency: ["", "SEK"] - }); - - var zhCN = locale({ - decimal: ".", - thousands: ",", - grouping: [3], - currency: ["¥", ""] - }); - - function precisionFixed(step) { - return Math.max(0, -exponent(Math.abs(step))); - }; - - function precisionPrefix(step, value) { - return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step))); - }; - - function precisionRound(step, max) { - step = Math.abs(step), max = Math.abs(max) - step; - return Math.max(0, exponent(max) - exponent(step)) + 1; - }; - - var format = defaultLocale.format; - var formatPrefix = defaultLocale.formatPrefix; - - var version = "0.4.2"; - - exports.version = version; - exports.format = format; - exports.formatPrefix = formatPrefix; - exports.locale = locale; - exports.localeCaEs = caES; - exports.localeCsCz = csCZ; - exports.localeDeCh = deCH; - exports.localeDeDe = deDE; - exports.localeEnCa = enCA; - exports.localeEnGb = enGB; - exports.localeEnUs = defaultLocale; - exports.localeEsEs = esES; - exports.localeFiFi = fiFI; - exports.localeFrCa = frCA; - exports.localeFrFr = frFR; - exports.localeHeIl = heIL; - exports.localeHuHu = huHU; - exports.localeItIt = itIT; - exports.localeJaJp = jaJP; - exports.localeKoKr = koKR; - exports.localeMkMk = mkMK; - exports.localeNlNl = nlNL; - exports.localePlPl = plPL; - exports.localePtBr = ptBR; - exports.localeRuRu = ruRU; - exports.localeSvSe = svSE; - exports.localeZhCn = zhCN; - exports.formatSpecifier = formatSpecifier; - exports.precisionFixed = precisionFixed; - exports.precisionPrefix = precisionPrefix; - exports.precisionRound = precisionRound; - -})); -},{}],5:[function(require,module,exports){ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-time')) : - typeof define === 'function' && define.amd ? define('d3-time-format', ['exports', 'd3-time'], factory) : - factory((global.d3_time_format = {}),global.d3_time); -}(this, function (exports,d3Time) { 'use strict'; - - function localDate(d) { - if (0 <= d.y && d.y < 100) { - var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); - date.setFullYear(d.y); - return date; - } - return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); - } - - function utcDate(d) { - if (0 <= d.y && d.y < 100) { - var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); - date.setUTCFullYear(d.y); - return date; - } - return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); - } - - function newYear(y) { - return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0}; - } - - function locale$1(locale) { - var locale_dateTime = locale.dateTime, - locale_date = locale.date, - locale_time = locale.time, - locale_periods = locale.periods, - locale_weekdays = locale.days, - locale_shortWeekdays = locale.shortDays, - locale_months = locale.months, - locale_shortMonths = locale.shortMonths; - - var periodRe = formatRe(locale_periods), - periodLookup = formatLookup(locale_periods), - weekdayRe = formatRe(locale_weekdays), - weekdayLookup = formatLookup(locale_weekdays), - shortWeekdayRe = formatRe(locale_shortWeekdays), - shortWeekdayLookup = formatLookup(locale_shortWeekdays), - monthRe = formatRe(locale_months), - monthLookup = formatLookup(locale_months), - shortMonthRe = formatRe(locale_shortMonths), - shortMonthLookup = formatLookup(locale_shortMonths); - - var formats = { - "a": formatShortWeekday, - "A": formatWeekday, - "b": formatShortMonth, - "B": formatMonth, - "c": null, - "d": formatDayOfMonth, - "e": formatDayOfMonth, - "H": formatHour24, - "I": formatHour12, - "j": formatDayOfYear, - "L": formatMilliseconds, - "m": formatMonthNumber, - "M": formatMinutes, - "p": formatPeriod, - "S": formatSeconds, - "U": formatWeekNumberSunday, - "w": formatWeekdayNumber, - "W": formatWeekNumberMonday, - "x": null, - "X": null, - "y": formatYear, - "Y": formatFullYear, - "Z": formatZone, - "%": formatLiteralPercent - }; - - var utcFormats = { - "a": formatUTCShortWeekday, - "A": formatUTCWeekday, - "b": formatUTCShortMonth, - "B": formatUTCMonth, - "c": null, - "d": formatUTCDayOfMonth, - "e": formatUTCDayOfMonth, - "H": formatUTCHour24, - "I": formatUTCHour12, - "j": formatUTCDayOfYear, - "L": formatUTCMilliseconds, - "m": formatUTCMonthNumber, - "M": formatUTCMinutes, - "p": formatUTCPeriod, - "S": formatUTCSeconds, - "U": formatUTCWeekNumberSunday, - "w": formatUTCWeekdayNumber, - "W": formatUTCWeekNumberMonday, - "x": null, - "X": null, - "y": formatUTCYear, - "Y": formatUTCFullYear, - "Z": formatUTCZone, - "%": formatLiteralPercent - }; - - var parses = { - "a": parseShortWeekday, - "A": parseWeekday, - "b": parseShortMonth, - "B": parseMonth, - "c": parseLocaleDateTime, - "d": parseDayOfMonth, - "e": parseDayOfMonth, - "H": parseHour24, - "I": parseHour24, - "j": parseDayOfYear, - "L": parseMilliseconds, - "m": parseMonthNumber, - "M": parseMinutes, - "p": parsePeriod, - "S": parseSeconds, - "U": parseWeekNumberSunday, - "w": parseWeekdayNumber, - "W": parseWeekNumberMonday, - "x": parseLocaleDate, - "X": parseLocaleTime, - "y": parseYear, - "Y": parseFullYear, - "Z": parseZone, - "%": parseLiteralPercent - }; - - // These recursive directive definitions must be deferred. - formats.x = newFormat(locale_date, formats); - formats.X = newFormat(locale_time, formats); - formats.c = newFormat(locale_dateTime, formats); - utcFormats.x = newFormat(locale_date, utcFormats); - utcFormats.X = newFormat(locale_time, utcFormats); - utcFormats.c = newFormat(locale_dateTime, utcFormats); - - function newFormat(specifier, formats) { - return function(date) { - var string = [], - i = -1, - j = 0, - n = specifier.length, - c, - pad, - format; - - if (!(date instanceof Date)) date = new Date(+date); - - while (++i < n) { - if (specifier.charCodeAt(i) === 37) { - string.push(specifier.slice(j, i)); - if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); - else pad = c === "e" ? " " : "0"; - if (format = formats[c]) c = format(date, pad); - string.push(c); - j = i + 1; - } - } - - string.push(specifier.slice(j, i)); - return string.join(""); - }; - } - - function newParse(specifier, newDate) { - return function(string) { - var d = newYear(1900), - i = parseSpecifier(d, specifier, string += "", 0); - if (i != string.length) return null; - - // The am-pm flag is 0 for AM, and 1 for PM. - if ("p" in d) d.H = d.H % 12 + d.p * 12; - - // Convert day-of-week and week-of-year to day-of-year. - if ("W" in d || "U" in d) { - if (!("w" in d)) d.w = "W" in d ? 1 : 0; - var day = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay(); - d.m = 0; - d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7; - } - - // If a time zone is specified, all fields are interpreted as UTC and then - // offset according to the specified time zone. - if ("Z" in d) { - d.H += d.Z / 100 | 0; - d.M += d.Z % 100; - return utcDate(d); - } - - // Otherwise, all fields are in local time. - return newDate(d); - }; - } - - function parseSpecifier(d, specifier, string, j) { - var i = 0, - n = specifier.length, - m = string.length, - c, - parse; - - while (i < n) { - if (j >= m) return -1; - c = specifier.charCodeAt(i++); - if (c === 37) { - c = specifier.charAt(i++); - parse = parses[c in pads ? specifier.charAt(i++) : c]; - if (!parse || ((j = parse(d, string, j)) < 0)) return -1; - } else if (c != string.charCodeAt(j++)) { - return -1; - } - } - - return j; - } - - function parsePeriod(d, string, i) { - var n = periodRe.exec(string.slice(i)); - return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseShortWeekday(d, string, i) { - var n = shortWeekdayRe.exec(string.slice(i)); - return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseWeekday(d, string, i) { - var n = weekdayRe.exec(string.slice(i)); - return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseShortMonth(d, string, i) { - var n = shortMonthRe.exec(string.slice(i)); - return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseMonth(d, string, i) { - var n = monthRe.exec(string.slice(i)); - return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseLocaleDateTime(d, string, i) { - return parseSpecifier(d, locale_dateTime, string, i); - } - - function parseLocaleDate(d, string, i) { - return parseSpecifier(d, locale_date, string, i); - } - - function parseLocaleTime(d, string, i) { - return parseSpecifier(d, locale_time, string, i); - } - - function formatShortWeekday(d) { - return locale_shortWeekdays[d.getDay()]; - } - - function formatWeekday(d) { - return locale_weekdays[d.getDay()]; - } - - function formatShortMonth(d) { - return locale_shortMonths[d.getMonth()]; - } - - function formatMonth(d) { - return locale_months[d.getMonth()]; - } - - function formatPeriod(d) { - return locale_periods[+(d.getHours() >= 12)]; - } - - function formatUTCShortWeekday(d) { - return locale_shortWeekdays[d.getUTCDay()]; - } - - function formatUTCWeekday(d) { - return locale_weekdays[d.getUTCDay()]; - } - - function formatUTCShortMonth(d) { - return locale_shortMonths[d.getUTCMonth()]; - } - - function formatUTCMonth(d) { - return locale_months[d.getUTCMonth()]; - } - - function formatUTCPeriod(d) { - return locale_periods[+(d.getUTCHours() >= 12)]; - } - - return { - format: function(specifier) { - var f = newFormat(specifier += "", formats); - f.parse = newParse(specifier, localDate); - f.toString = function() { return specifier; }; - return f; - }, - utcFormat: function(specifier) { - var f = newFormat(specifier += "", utcFormats); - f.parse = newParse(specifier, utcDate); - f.toString = function() { return specifier; }; - return f; - } - }; - }; - - var pads = {"-": "", "_": " ", "0": "0"}; - var numberRe = /^\s*\d+/; - var percentRe = /^%/; - var requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; - function pad(value, fill, width) { - var sign = value < 0 ? "-" : "", - string = (sign ? -value : value) + "", - length = string.length; - return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); - } - - function requote(s) { - return s.replace(requoteRe, "\\$&"); - } - - function formatRe(names) { - return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); - } - - function formatLookup(names) { - var map = {}, i = -1, n = names.length; - while (++i < n) map[names[i].toLowerCase()] = i; - return map; - } - - function parseWeekdayNumber(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 1)); - return n ? (d.w = +n[0], i + n[0].length) : -1; - } - - function parseWeekNumberSunday(d, string, i) { - var n = numberRe.exec(string.slice(i)); - return n ? (d.U = +n[0], i + n[0].length) : -1; - } - - function parseWeekNumberMonday(d, string, i) { - var n = numberRe.exec(string.slice(i)); - return n ? (d.W = +n[0], i + n[0].length) : -1; - } - - function parseFullYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 4)); - return n ? (d.y = +n[0], i + n[0].length) : -1; - } - - function parseYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; - } - - function parseZone(d, string, i) { - var n = /^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(string.slice(i, i + 6)); - return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; - } - - function parseMonthNumber(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.m = n[0] - 1, i + n[0].length) : -1; - } - - function parseDayOfMonth(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.d = +n[0], i + n[0].length) : -1; - } - - function parseDayOfYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 3)); - return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; - } - - function parseHour24(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.H = +n[0], i + n[0].length) : -1; - } - - function parseMinutes(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.M = +n[0], i + n[0].length) : -1; - } - - function parseSeconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.S = +n[0], i + n[0].length) : -1; - } - - function parseMilliseconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 3)); - return n ? (d.L = +n[0], i + n[0].length) : -1; - } - - function parseLiteralPercent(d, string, i) { - var n = percentRe.exec(string.slice(i, i + 1)); - return n ? i + n[0].length : -1; - } - - function formatDayOfMonth(d, p) { - return pad(d.getDate(), p, 2); - } - - function formatHour24(d, p) { - return pad(d.getHours(), p, 2); - } - - function formatHour12(d, p) { - return pad(d.getHours() % 12 || 12, p, 2); - } - - function formatDayOfYear(d, p) { - return pad(1 + d3Time.day.count(d3Time.year(d), d), p, 3); - } - - function formatMilliseconds(d, p) { - return pad(d.getMilliseconds(), p, 3); - } - - function formatMonthNumber(d, p) { - return pad(d.getMonth() + 1, p, 2); - } - - function formatMinutes(d, p) { - return pad(d.getMinutes(), p, 2); - } - - function formatSeconds(d, p) { - return pad(d.getSeconds(), p, 2); - } - - function formatWeekNumberSunday(d, p) { - return pad(d3Time.sunday.count(d3Time.year(d), d), p, 2); - } - - function formatWeekdayNumber(d) { - return d.getDay(); - } - - function formatWeekNumberMonday(d, p) { - return pad(d3Time.monday.count(d3Time.year(d), d), p, 2); - } - - function formatYear(d, p) { - return pad(d.getFullYear() % 100, p, 2); - } - - function formatFullYear(d, p) { - return pad(d.getFullYear() % 10000, p, 4); - } - - function formatZone(d) { - var z = d.getTimezoneOffset(); - return (z > 0 ? "-" : (z *= -1, "+")) - + pad(z / 60 | 0, "0", 2) - + pad(z % 60, "0", 2); - } - - function formatUTCDayOfMonth(d, p) { - return pad(d.getUTCDate(), p, 2); - } - - function formatUTCHour24(d, p) { - return pad(d.getUTCHours(), p, 2); - } - - function formatUTCHour12(d, p) { - return pad(d.getUTCHours() % 12 || 12, p, 2); - } - - function formatUTCDayOfYear(d, p) { - return pad(1 + d3Time.utcDay.count(d3Time.utcYear(d), d), p, 3); - } - - function formatUTCMilliseconds(d, p) { - return pad(d.getUTCMilliseconds(), p, 3); - } - - function formatUTCMonthNumber(d, p) { - return pad(d.getUTCMonth() + 1, p, 2); - } - - function formatUTCMinutes(d, p) { - return pad(d.getUTCMinutes(), p, 2); - } - - function formatUTCSeconds(d, p) { - return pad(d.getUTCSeconds(), p, 2); - } - - function formatUTCWeekNumberSunday(d, p) { - return pad(d3Time.utcSunday.count(d3Time.utcYear(d), d), p, 2); - } - - function formatUTCWeekdayNumber(d) { - return d.getUTCDay(); - } - - function formatUTCWeekNumberMonday(d, p) { - return pad(d3Time.utcMonday.count(d3Time.utcYear(d), d), p, 2); - } - - function formatUTCYear(d, p) { - return pad(d.getUTCFullYear() % 100, p, 2); - } - - function formatUTCFullYear(d, p) { - return pad(d.getUTCFullYear() % 10000, p, 4); - } - - function formatUTCZone() { - return "+0000"; - } - - function formatLiteralPercent() { - return "%"; - } - - var locale = locale$1({ - dateTime: "%a %b %e %X %Y", - date: "%m/%d/%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], - days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], - shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], - shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] - }); - - var caES = locale$1({ - dateTime: "%A, %e de %B de %Y, %X", - date: "%d/%m/%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], - days: ["diumenge", "dilluns", "dimarts", "dimecres", "dijous", "divendres", "dissabte"], - shortDays: ["dg.", "dl.", "dt.", "dc.", "dj.", "dv.", "ds."], - months: ["gener", "febrer", "març", "abril", "maig", "juny", "juliol", "agost", "setembre", "octubre", "novembre", "desembre"], - shortMonths: ["gen.", "febr.", "març", "abr.", "maig", "juny", "jul.", "ag.", "set.", "oct.", "nov.", "des."] - }); - - var deCH = locale$1({ - dateTime: "%A, der %e. %B %Y, %X", - date: "%d.%m.%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], // unused - days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], - shortDays: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], - months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], - shortMonths: ["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"] - }); - - var deDE = locale$1({ - dateTime: "%A, der %e. %B %Y, %X", - date: "%d.%m.%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], // unused - days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], - shortDays: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], - months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], - shortMonths: ["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"] - }); - - var enCA = locale$1({ - dateTime: "%a %b %e %X %Y", - date: "%Y-%m-%d", - time: "%H:%M:%S", - periods: ["AM", "PM"], - days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], - shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], - shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] - }); - - var enGB = locale$1({ - dateTime: "%a %e %b %X %Y", - date: "%d/%m/%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], - days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], - shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], - shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] - }); - - var esES = locale$1({ - dateTime: "%A, %e de %B de %Y, %X", - date: "%d/%m/%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], - days: ["domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado"], - shortDays: ["dom", "lun", "mar", "mié", "jue", "vie", "sáb"], - months: ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"], - shortMonths: ["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"] - }); - - var fiFI = locale$1({ - dateTime: "%A, %-d. %Bta %Y klo %X", - date: "%-d.%-m.%Y", - time: "%H:%M:%S", - periods: ["a.m.", "p.m."], - days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"], - shortDays: ["Su", "Ma", "Ti", "Ke", "To", "Pe", "La"], - months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"], - shortMonths: ["Tammi", "Helmi", "Maalis", "Huhti", "Touko", "Kesä", "Heinä", "Elo", "Syys", "Loka", "Marras", "Joulu"] - }); - - var frCA = locale$1({ - dateTime: "%a %e %b %Y %X", - date: "%Y-%m-%d", - time: "%H:%M:%S", - periods: ["", ""], - days: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"], - shortDays: ["dim", "lun", "mar", "mer", "jeu", "ven", "sam"], - months: ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"], - shortMonths: ["jan", "fév", "mar", "avr", "mai", "jui", "jul", "aoû", "sep", "oct", "nov", "déc"] - }); - - var frFR = locale$1({ - dateTime: "%A, le %e %B %Y, %X", - date: "%d/%m/%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], // unused - days: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"], - shortDays: ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."], - months: ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"], - shortMonths: ["janv.", "févr.", "mars", "avr.", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc."] - }); - - var heIL = locale$1({ - dateTime: "%A, %e ב%B %Y %X", - date: "%d.%m.%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], - days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"], - shortDays: ["א׳", "ב׳", "ג׳", "ד׳", "ה׳", "ו׳", "ש׳"], - months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], - shortMonths: ["ינו׳", "פבר׳", "מרץ", "אפר׳", "מאי", "יוני", "יולי", "אוג׳", "ספט׳", "אוק׳", "נוב׳", "דצמ׳"] - }); - - var huHU = locale$1({ - dateTime: "%Y. %B %-e., %A %X", - date: "%Y. %m. %d.", - time: "%H:%M:%S", - periods: ["de.", "du."], // unused - days: ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"], - shortDays: ["V", "H", "K", "Sze", "Cs", "P", "Szo"], - months: ["január", "február", "március", "április", "május", "június", "július", "augusztus", "szeptember", "október", "november", "december"], - shortMonths: ["jan.", "feb.", "már.", "ápr.", "máj.", "jún.", "júl.", "aug.", "szept.", "okt.", "nov.", "dec."] - }); - - var itIT = locale$1({ - dateTime: "%A %e %B %Y, %X", - date: "%d/%m/%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], // unused - days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"], - shortDays: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"], - months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], - shortMonths: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"] - }); - - var jaJP = locale$1({ - dateTime: "%Y %b %e %a %X", - date: "%Y/%m/%d", - time: "%H:%M:%S", - periods: ["AM", "PM"], - days: ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"], - shortDays: ["日", "月", "火", "水", "木", "金", "土"], - months: ["睦月", "如月", "弥生", "卯月", "皐月", "水無月", "文月", "葉月", "長月", "神無月", "霜月", "師走"], - shortMonths: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"] - }); - - var koKR = locale$1({ - dateTime: "%Y/%m/%d %a %X", - date: "%Y/%m/%d", - time: "%H:%M:%S", - periods: ["오전", "오후"], - days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"], - shortDays: ["일", "월", "화", "수", "목", "금", "토"], - months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], - shortMonths: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"] - }); - - var mkMK = locale$1({ - dateTime: "%A, %e %B %Y г. %X", - date: "%d.%m.%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], - days: ["недела", "понеделник", "вторник", "среда", "четврток", "петок", "сабота"], - shortDays: ["нед", "пон", "вто", "сре", "чет", "пет", "саб"], - months: ["јануари", "февруари", "март", "април", "мај", "јуни", "јули", "август", "септември", "октомври", "ноември", "декември"], - shortMonths: ["јан", "фев", "мар", "апр", "мај", "јун", "јул", "авг", "сеп", "окт", "ное", "дек"] - }); - - var nlNL = locale$1({ - dateTime: "%a %e %B %Y %T", - date: "%d-%m-%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], // unused - days: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"], - shortDays: ["zo", "ma", "di", "wo", "do", "vr", "za"], - months: ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"], - shortMonths: ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"] - }); - - var plPL = locale$1({ - dateTime: "%A, %e %B %Y, %X", - date: "%d/%m/%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], // unused - days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"], - shortDays: ["Niedz.", "Pon.", "Wt.", "Śr.", "Czw.", "Pt.", "Sob."], - months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], - shortMonths: ["Stycz.", "Luty", "Marz.", "Kwie.", "Maj", "Czerw.", "Lipc.", "Sierp.", "Wrz.", "Paźdz.", "Listop.", "Grudz."]/* In Polish language abbraviated months are not commonly used so there is a dispute about the proper abbraviations. */ - }); - - var ptBR = locale$1({ - dateTime: "%A, %e de %B de %Y. %X", - date: "%d/%m/%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], - days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"], - shortDays: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"], - months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], - shortMonths: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"] - }); - - var ruRU = locale$1({ - dateTime: "%A, %e %B %Y г. %X", - date: "%d.%m.%Y", - time: "%H:%M:%S", - periods: ["AM", "PM"], - days: ["воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"], - shortDays: ["вс", "пн", "вт", "ср", "чт", "пт", "сб"], - months: ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"], - shortMonths: ["янв", "фев", "мар", "апр", "май", "июн", "июл", "авг", "сен", "окт", "ноя", "дек"] - }); - - var svSE = locale$1({ - dateTime: "%A den %d %B %Y %X", - date: "%Y-%m-%d", - time: "%H:%M:%S", - periods: ["fm", "em"], - days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"], - shortDays: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"], - months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], - shortMonths: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"] - }); - - var zhCN = locale$1({ - dateTime: "%a %b %e %X %Y", - date: "%Y/%-m/%-d", - time: "%H:%M:%S", - periods: ["上午", "下午"], - days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], - shortDays: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], - months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], - shortMonths: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"] - }); - - var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; - - function formatIsoNative(date) { - return date.toISOString(); - } - - formatIsoNative.parse = function(string) { - var date = new Date(string); - return isNaN(date) ? null : date; - }; - - formatIsoNative.toString = function() { - return isoSpecifier; - }; - - var formatIso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") - ? formatIsoNative - : locale.utcFormat(isoSpecifier); - - var format = locale.format; - var utcFormat = locale.utcFormat; - - var version = "0.2.1"; - - exports.version = version; - exports.format = format; - exports.utcFormat = utcFormat; - exports.locale = locale$1; - exports.localeCaEs = caES; - exports.localeDeCh = deCH; - exports.localeDeDe = deDE; - exports.localeEnCa = enCA; - exports.localeEnGb = enGB; - exports.localeEnUs = locale; - exports.localeEsEs = esES; - exports.localeFiFi = fiFI; - exports.localeFrCa = frCA; - exports.localeFrFr = frFR; - exports.localeHeIl = heIL; - exports.localeHuHu = huHU; - exports.localeItIt = itIT; - exports.localeJaJp = jaJP; - exports.localeKoKr = koKR; - exports.localeMkMk = mkMK; - exports.localeNlNl = nlNL; - exports.localePlPl = plPL; - exports.localePtBr = ptBR; - exports.localeRuRu = ruRU; - exports.localeSvSe = svSE; - exports.localeZhCn = zhCN; - exports.isoFormat = formatIso; - -})); -},{"d3-time":6}],6:[function(require,module,exports){ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define('d3-time', ['exports'], factory) : - factory((global.d3_time = {})); -}(this, function (exports) { 'use strict'; - - var t0 = new Date; - var t1 = new Date; - function newInterval(floori, offseti, count, field) { - - function interval(date) { - return floori(date = new Date(+date)), date; - } - - interval.floor = interval; - - interval.round = function(date) { - var d0 = new Date(+date), - d1 = new Date(date - 1); - floori(d0), floori(d1), offseti(d1, 1); - return date - d0 < d1 - date ? d0 : d1; - }; - - interval.ceil = function(date) { - return floori(date = new Date(date - 1)), offseti(date, 1), date; - }; - - interval.offset = function(date, step) { - return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; - }; - - interval.range = function(start, stop, step) { - var range = []; - start = new Date(start - 1); - stop = new Date(+stop); - step = step == null ? 1 : Math.floor(step); - if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date - offseti(start, 1), floori(start); - if (start < stop) range.push(new Date(+start)); - while (offseti(start, step), floori(start), start < stop) range.push(new Date(+start)); - return range; - }; - - interval.filter = function(test) { - return newInterval(function(date) { - while (floori(date), !test(date)) date.setTime(date - 1); - }, function(date, step) { - while (--step >= 0) while (offseti(date, 1), !test(date)); - }); - }; - - if (count) { - interval.count = function(start, end) { - t0.setTime(+start), t1.setTime(+end); - floori(t0), floori(t1); - return Math.floor(count(t0, t1)); - }; - - interval.every = function(step) { - step = Math.floor(step); - return !isFinite(step) || !(step > 0) ? null - : !(step > 1) ? interval - : interval.filter(field - ? function(d) { return field(d) % step === 0; } - : function(d) { return interval.count(0, d) % step === 0; }); - }; - } - - return interval; - }; - - var millisecond = newInterval(function() { - // noop - }, function(date, step) { - date.setTime(+date + step); - }, function(start, end) { - return end - start; - }); - - // An optimized implementation for this simple case. - millisecond.every = function(k) { - k = Math.floor(k); - if (!isFinite(k) || !(k > 0)) return null; - if (!(k > 1)) return millisecond; - return newInterval(function(date) { - date.setTime(Math.floor(date / k) * k); - }, function(date, step) { - date.setTime(+date + step * k); - }, function(start, end) { - return (end - start) / k; - }); - }; - - var second = newInterval(function(date) { - date.setMilliseconds(0); - }, function(date, step) { - date.setTime(+date + step * 1e3); - }, function(start, end) { - return (end - start) / 1e3; - }, function(date) { - return date.getSeconds(); - }); - - var minute = newInterval(function(date) { - date.setSeconds(0, 0); - }, function(date, step) { - date.setTime(+date + step * 6e4); - }, function(start, end) { - return (end - start) / 6e4; - }, function(date) { - return date.getMinutes(); - }); - - var hour = newInterval(function(date) { - date.setMinutes(0, 0, 0); - }, function(date, step) { - date.setTime(+date + step * 36e5); - }, function(start, end) { - return (end - start) / 36e5; - }, function(date) { - return date.getHours(); - }); - - var day = newInterval(function(date) { - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setDate(date.getDate() + step); - }, function(start, end) { - return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 864e5; - }, function(date) { - return date.getDate() - 1; - }); - - function weekday(i) { - return newInterval(function(date) { - date.setHours(0, 0, 0, 0); - date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); - }, function(date, step) { - date.setDate(date.getDate() + step * 7); - }, function(start, end) { - return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 6048e5; - }); - } - - var sunday = weekday(0); - var monday = weekday(1); - var tuesday = weekday(2); - var wednesday = weekday(3); - var thursday = weekday(4); - var friday = weekday(5); - var saturday = weekday(6); - - var month = newInterval(function(date) { - date.setHours(0, 0, 0, 0); - date.setDate(1); - }, function(date, step) { - date.setMonth(date.getMonth() + step); - }, function(start, end) { - return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; - }, function(date) { - return date.getMonth(); - }); - - var year = newInterval(function(date) { - date.setHours(0, 0, 0, 0); - date.setMonth(0, 1); - }, function(date, step) { - date.setFullYear(date.getFullYear() + step); - }, function(start, end) { - return end.getFullYear() - start.getFullYear(); - }, function(date) { - return date.getFullYear(); - }); - - var utcSecond = newInterval(function(date) { - date.setUTCMilliseconds(0); - }, function(date, step) { - date.setTime(+date + step * 1e3); - }, function(start, end) { - return (end - start) / 1e3; - }, function(date) { - return date.getUTCSeconds(); - }); - - var utcMinute = newInterval(function(date) { - date.setUTCSeconds(0, 0); - }, function(date, step) { - date.setTime(+date + step * 6e4); - }, function(start, end) { - return (end - start) / 6e4; - }, function(date) { - return date.getUTCMinutes(); - }); - - var utcHour = newInterval(function(date) { - date.setUTCMinutes(0, 0, 0); - }, function(date, step) { - date.setTime(+date + step * 36e5); - }, function(start, end) { - return (end - start) / 36e5; - }, function(date) { - return date.getUTCHours(); - }); - - var utcDay = newInterval(function(date) { - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCDate(date.getUTCDate() + step); - }, function(start, end) { - return (end - start) / 864e5; - }, function(date) { - return date.getUTCDate() - 1; - }); - - function utcWeekday(i) { - return newInterval(function(date) { - date.setUTCHours(0, 0, 0, 0); - date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); - }, function(date, step) { - date.setUTCDate(date.getUTCDate() + step * 7); - }, function(start, end) { - return (end - start) / 6048e5; - }); - } - - var utcSunday = utcWeekday(0); - var utcMonday = utcWeekday(1); - var utcTuesday = utcWeekday(2); - var utcWednesday = utcWeekday(3); - var utcThursday = utcWeekday(4); - var utcFriday = utcWeekday(5); - var utcSaturday = utcWeekday(6); - - var utcMonth = newInterval(function(date) { - date.setUTCHours(0, 0, 0, 0); - date.setUTCDate(1); - }, function(date, step) { - date.setUTCMonth(date.getUTCMonth() + step); - }, function(start, end) { - return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; - }, function(date) { - return date.getUTCMonth(); - }); - - var utcYear = newInterval(function(date) { - date.setUTCHours(0, 0, 0, 0); - date.setUTCMonth(0, 1); - }, function(date, step) { - date.setUTCFullYear(date.getUTCFullYear() + step); - }, function(start, end) { - return end.getUTCFullYear() - start.getUTCFullYear(); - }, function(date) { - return date.getUTCFullYear(); - }); - - var milliseconds = millisecond.range; - var seconds = second.range; - var minutes = minute.range; - var hours = hour.range; - var days = day.range; - var sundays = sunday.range; - var mondays = monday.range; - var tuesdays = tuesday.range; - var wednesdays = wednesday.range; - var thursdays = thursday.range; - var fridays = friday.range; - var saturdays = saturday.range; - var weeks = sunday.range; - var months = month.range; - var years = year.range; - - var utcMillisecond = millisecond; - var utcMilliseconds = milliseconds; - var utcSeconds = utcSecond.range; - var utcMinutes = utcMinute.range; - var utcHours = utcHour.range; - var utcDays = utcDay.range; - var utcSundays = utcSunday.range; - var utcMondays = utcMonday.range; - var utcTuesdays = utcTuesday.range; - var utcWednesdays = utcWednesday.range; - var utcThursdays = utcThursday.range; - var utcFridays = utcFriday.range; - var utcSaturdays = utcSaturday.range; - var utcWeeks = utcSunday.range; - var utcMonths = utcMonth.range; - var utcYears = utcYear.range; - - var version = "0.1.1"; - - exports.version = version; - exports.milliseconds = milliseconds; - exports.seconds = seconds; - exports.minutes = minutes; - exports.hours = hours; - exports.days = days; - exports.sundays = sundays; - exports.mondays = mondays; - exports.tuesdays = tuesdays; - exports.wednesdays = wednesdays; - exports.thursdays = thursdays; - exports.fridays = fridays; - exports.saturdays = saturdays; - exports.weeks = weeks; - exports.months = months; - exports.years = years; - exports.utcMillisecond = utcMillisecond; - exports.utcMilliseconds = utcMilliseconds; - exports.utcSeconds = utcSeconds; - exports.utcMinutes = utcMinutes; - exports.utcHours = utcHours; - exports.utcDays = utcDays; - exports.utcSundays = utcSundays; - exports.utcMondays = utcMondays; - exports.utcTuesdays = utcTuesdays; - exports.utcWednesdays = utcWednesdays; - exports.utcThursdays = utcThursdays; - exports.utcFridays = utcFridays; - exports.utcSaturdays = utcSaturdays; - exports.utcWeeks = utcWeeks; - exports.utcMonths = utcMonths; - exports.utcYears = utcYears; - exports.millisecond = millisecond; - exports.second = second; - exports.minute = minute; - exports.hour = hour; - exports.day = day; - exports.sunday = sunday; - exports.monday = monday; - exports.tuesday = tuesday; - exports.wednesday = wednesday; - exports.thursday = thursday; - exports.friday = friday; - exports.saturday = saturday; - exports.week = sunday; - exports.month = month; - exports.year = year; - exports.utcSecond = utcSecond; - exports.utcMinute = utcMinute; - exports.utcHour = utcHour; - exports.utcDay = utcDay; - exports.utcSunday = utcSunday; - exports.utcMonday = utcMonday; - exports.utcTuesday = utcTuesday; - exports.utcWednesday = utcWednesday; - exports.utcThursday = utcThursday; - exports.utcFriday = utcFriday; - exports.utcSaturday = utcSaturday; - exports.utcWeek = utcSunday; - exports.utcMonth = utcMonth; - exports.utcYear = utcYear; - exports.interval = newInterval; - -})); -},{}],7:[function(require,module,exports){ -var util = require('./util'), - time = require('./time'), - utc = time.utc; - -var u = module.exports; - -u.$year = util.$func('year', time.year.unit); -u.$month = util.$func('month', time.months.unit); -u.$date = util.$func('date', time.dates.unit); -u.$day = util.$func('day', time.weekdays.unit); -u.$hour = util.$func('hour', time.hours.unit); -u.$minute = util.$func('minute', time.minutes.unit); -u.$second = util.$func('second', time.seconds.unit); - -u.$utcYear = util.$func('utcYear', utc.year.unit); -u.$utcMonth = util.$func('utcMonth', utc.months.unit); -u.$utcDate = util.$func('utcDate', utc.dates.unit); -u.$utcDay = util.$func('utcDay', utc.weekdays.unit); -u.$utcHour = util.$func('utcHour', utc.hours.unit); -u.$utcMinute = util.$func('utcMinute', utc.minutes.unit); -u.$utcSecond = util.$func('utcSecond', utc.seconds.unit); - -},{"./time":29,"./util":30}],8:[function(require,module,exports){ -var util = require('../util'), - Measures = require('./measures'), - Collector = require('./collector'); - -function Aggregator() { - this._cells = {}; - this._aggr = []; - this._stream = false; -} - -var Flags = Aggregator.Flags = { - ADD_CELL: 1, - MOD_CELL: 2 -}; - -var proto = Aggregator.prototype; - -// Parameters - -proto.stream = function(v) { - if (v == null) return this._stream; - this._stream = !!v; - this._aggr = []; - return this; -}; - -// key accessor to use for streaming removes -proto.key = function(key) { - if (key == null) return this._key; - this._key = util.$(key); - return this; -}; - -// Input: array of objects of the form -// {name: string, get: function} -proto.groupby = function(dims) { - this._dims = util.array(dims).map(function(d, i) { - d = util.isString(d) ? {name: d, get: util.$(d)} - : util.isFunction(d) ? {name: util.name(d) || d.name || ('_' + i), get: d} - : (d.name && util.isFunction(d.get)) ? d : null; - if (d == null) throw 'Invalid groupby argument: ' + d; - return d; - }); - return this.clear(); -}; - -// Input: array of objects of the form -// {name: string, ops: [string, ...]} -proto.summarize = function(fields) { - fields = summarize_args(fields); - this._count = true; - var aggr = (this._aggr = []), - m, f, i, j, op, as, get; - - for (i=0; i 0) { - // consolidate collector values - if (cell.collect) { - cell.data.values(); - } - // update tuple properties - for (i=0; i 0) { - m[a[i]] -= 1; - } else { - x[j++] = a[i]; - } - } - } else if (k) { - // has unique key field, so use that - m = util.toMap(r, k); - for (i=0, j=0, n=a.length; i 1 ? this.dev / (this.valid-1) : 0', - req: ['mean'], idx: 1 - }), - 'variancep': measure({ - name: 'variancep', - set: 'this.valid > 1 ? this.dev / this.valid : 0', - req: ['variance'], idx: 2 - }), - 'stdev': measure({ - name: 'stdev', - set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid-1)) : 0', - req: ['variance'], idx: 2 - }), - 'stdevp': measure({ - name: 'stdevp', - set: 'this.valid > 1 ? Math.sqrt(this.dev / this.valid) : 0', - req: ['variance'], idx: 2 - }), - 'stderr': measure({ - name: 'stderr', - set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid * (this.valid-1))) : 0', - req: ['variance'], idx: 2 - }), - 'median': measure({ - name: 'median', - set: 'cell.data.q2(this.get)', - req: ['values'], idx: 3 - }), - 'q1': measure({ - name: 'q1', - set: 'cell.data.q1(this.get)', - req: ['values'], idx: 3 - }), - 'q3': measure({ - name: 'q3', - set: 'cell.data.q3(this.get)', - req: ['values'], idx: 3 - }), - 'distinct': measure({ - name: 'distinct', - set: 'this.distinct(cell.data.values(), this.get)', - req: ['values'], idx: 3 - }), - 'argmin': measure({ - name: 'argmin', - add: 'if (v < this.min) this.argmin = t;', - rem: 'if (v <= this.min) this.argmin = null;', - set: 'this.argmin = this.argmin || cell.data.argmin(this.get)', - req: ['min'], str: ['values'], idx: 3 - }), - 'argmax': measure({ - name: 'argmax', - add: 'if (v > this.max) this.argmax = t;', - rem: 'if (v >= this.max) this.argmax = null;', - set: 'this.argmax = this.argmax || cell.data.argmax(this.get)', - req: ['max'], str: ['values'], idx: 3 - }), - 'min': measure({ - name: 'min', - init: 'this.min = +Infinity;', - add: 'if (v < this.min) this.min = v;', - rem: 'if (v <= this.min) this.min = NaN;', - set: 'this.min = (isNaN(this.min) ? cell.data.min(this.get) : this.min)', - str: ['values'], idx: 4 - }), - 'max': measure({ - name: 'max', - init: 'this.max = -Infinity;', - add: 'if (v > this.max) this.max = v;', - rem: 'if (v >= this.max) this.max = NaN;', - set: 'this.max = (isNaN(this.max) ? cell.data.max(this.get) : this.max)', - str: ['values'], idx: 4 - }), - 'modeskew': measure({ - name: 'modeskew', - set: 'this.dev===0 ? 0 : (this.mean - cell.data.q2(this.get)) / Math.sqrt(this.dev/(this.valid-1))', - req: ['mean', 'variance', 'median'], idx: 5 - }) -}; - -function measure(base) { - return function(out) { - var m = util.extend({init:'', add:'', rem:'', idx:0}, base); - m.out = out || base.name; - return m; - }; -} - -function resolve(agg, stream) { - function collect(m, a) { - function helper(r) { if (!m[r]) collect(m, m[r] = types[r]()); } - if (a.req) a.req.forEach(helper); - if (stream && a.str) a.str.forEach(helper); - return m; - } - var map = agg.reduce( - collect, - agg.reduce(function(m, a) { return (m[a.name] = a, m); }, {}) - ); - return util.vals(map).sort(function(a, b) { return a.idx - b.idx; }); -} - -function create(agg, stream, accessor, mutator) { - var all = resolve(agg, stream), - ctr = 'this.cell = cell; this.tuple = t; this.valid = 0; this.missing = 0;', - add = 'if (v==null) this.missing++; if (!this.isValid(v)) return; ++this.valid;', - rem = 'if (v==null) this.missing--; if (!this.isValid(v)) return; --this.valid;', - set = 'var t = this.tuple; var cell = this.cell;'; - - all.forEach(function(a) { - if (a.idx < 0) { - ctr = a.init + ctr; - add = a.add + add; - rem = a.rem + rem; - } else { - ctr += a.init; - add += a.add; - rem += a.rem; - } - }); - agg.slice() - .sort(function(a, b) { return a.idx - b.idx; }) - .forEach(function(a) { - set += 'this.assign(t,\''+a.out+'\','+a.set+');'; - }); - set += 'return t;'; - - /* jshint evil: true */ - ctr = Function('cell', 't', ctr); - ctr.prototype.assign = mutator; - ctr.prototype.add = Function('t', 'var v = this.get(t);' + add); - ctr.prototype.rem = Function('t', 'var v = this.get(t);' + rem); - ctr.prototype.set = Function(set); - ctr.prototype.get = accessor; - ctr.prototype.distinct = require('../stats').count.distinct; - ctr.prototype.isValid = util.isValid; - ctr.fields = agg.map(util.$('out')); - return ctr; -} - -types.create = create; -module.exports = types; - -},{"../stats":27,"../util":30}],12:[function(require,module,exports){ -var util = require('../util'), - time = require('../time'), - EPSILON = 1e-15; - -function bins(opt) { - if (!opt) { throw Error("Missing binning options."); } - - // determine range - var maxb = opt.maxbins || 15, - base = opt.base || 10, - logb = Math.log(base), - div = opt.div || [5, 2], - min = opt.min, - max = opt.max, - span = max - min, - step, level, minstep, precision, v, i, eps; - - if (opt.step) { - // if step size is explicitly given, use that - step = opt.step; - } else if (opt.steps) { - // if provided, limit choice to acceptable step sizes - step = opt.steps[Math.min( - opt.steps.length - 1, - bisect(opt.steps, span/maxb, 0, opt.steps.length) - )]; - } else { - // else use span to determine step size - level = Math.ceil(Math.log(maxb) / logb); - minstep = opt.minstep || 0; - step = Math.max( - minstep, - Math.pow(base, Math.round(Math.log(span) / logb) - level) - ); - - // increase step size if too many bins - while (Math.ceil(span/step) > maxb) { step *= base; } - - // decrease step size if allowed - for (i=0; i= minstep && span / v <= maxb) step = v; - } - } - - // update precision, min and max - v = Math.log(step); - precision = v >= 0 ? 0 : ~~(-v / logb) + 1; - eps = Math.pow(base, -precision - 1); - min = Math.min(min, Math.floor(min / step + eps) * step); - max = Math.ceil(max / step) * step; - - return { - start: min, - stop: max, - step: step, - unit: {precision: precision}, - value: value, - index: index - }; -} - -function bisect(a, x, lo, hi) { - while (lo < hi) { - var mid = lo + hi >>> 1; - if (util.cmp(a[mid], x) < 0) { lo = mid + 1; } - else { hi = mid; } - } - return lo; -} - -function value(v) { - return this.step * Math.floor(v / this.step + EPSILON); -} - -function index(v) { - return Math.floor((v - this.start) / this.step + EPSILON); -} - -function date_value(v) { - return this.unit.date(value.call(this, v)); -} - -function date_index(v) { - return index.call(this, this.unit.unit(v)); -} - -bins.date = function(opt) { - if (!opt) { throw Error("Missing date binning options."); } - - // find time step, then bin - var units = opt.utc ? time.utc : time, - dmin = opt.min, - dmax = opt.max, - maxb = opt.maxbins || 20, - minb = opt.minbins || 4, - span = (+dmax) - (+dmin), - unit = opt.unit ? units[opt.unit] : units.find(span, minb, maxb), - spec = bins({ - min: unit.min != null ? unit.min : unit.unit(dmin), - max: unit.max != null ? unit.max : unit.unit(dmax), - maxbins: maxb, - minstep: unit.minstep, - steps: unit.step - }); - - spec.unit = unit; - spec.index = date_index; - if (!opt.raw) spec.value = date_value; - return spec; -}; - -module.exports = bins; - -},{"../time":29,"../util":30}],13:[function(require,module,exports){ -var bins = require('./bins'), - gen = require('../generate'), - type = require('../import/type'), - util = require('../util'), - stats = require('../stats'); - -var qtype = { - 'integer': 1, - 'number': 1, - 'date': 1 -}; - -function $bin(values, f, opt) { - opt = options(values, f, opt); - var b = spec(opt); - return !b ? (opt.accessor || util.identity) : - util.$func('bin', b.unit.unit ? - function(x) { return b.value(b.unit.unit(x)); } : - function(x) { return b.value(x); } - )(opt.accessor); -} - -function histogram(values, f, opt) { - opt = options(values, f, opt); - var b = spec(opt); - return b ? - numerical(values, opt.accessor, b) : - categorical(values, opt.accessor, opt && opt.sort); -} - -function spec(opt) { - var t = opt.type, b = null; - if (t == null || qtype[t]) { - if (t === 'integer' && opt.minstep == null) opt.minstep = 1; - b = (t === 'date') ? bins.date(opt) : bins(opt); - } - return b; -} - -function options() { - var a = arguments, - i = 0, - values = util.isArray(a[i]) ? a[i++] : null, - f = util.isFunction(a[i]) || util.isString(a[i]) ? util.$(a[i++]) : null, - opt = util.extend({}, a[i]); - - if (values) { - opt.type = opt.type || type(values, f); - if (qtype[opt.type]) { - var ext = stats.extent(values, f); - opt = util.extend({min: ext[0], max: ext[1]}, opt); - } - } - if (f) { opt.accessor = f; } - return opt; -} - -function numerical(values, f, b) { - var h = gen.range(b.start, b.stop + b.step/2, b.step) - .map(function(v) { return {value: b.value(v), count: 0}; }); - - for (var i=0, v, j; i= h.length || !isFinite(j)) continue; - h[j].count += 1; - } - } - h.bins = b; - return h; -} - -function categorical(values, f, sort) { - var u = stats.unique(values, f), - c = stats.count.map(values, f); - return u.map(function(k) { return {value: k, count: c[k]}; }) - .sort(util.comparator(sort ? '-count' : '+value')); -} - -module.exports = { - $bin: $bin, - histogram: histogram -}; - -},{"../generate":16,"../import/type":25,"../stats":27,"../util":30,"./bins":12}],14:[function(require,module,exports){ -var util = require('./util'), - type = require('./import/type'), - stats = require('./stats'), - template = require('./template'); - -module.exports = { - table: formatTable, // format a data table - summary: formatSummary // format a data table summary -}; - -var FMT = { - 'date': '|time:"%m/%d/%Y %H:%M:%S"', - 'number': '|number:".4f"', - 'integer': '|number:"d"' -}; - -var POS = { - 'number': 'left', - 'integer': 'left' -}; - -function formatTable(data, opt) { - opt = util.extend({separator:' ', minwidth: 8, maxwidth: 15}, opt); - var fields = opt.fields || util.keys(data[0]), - types = type.all(data); - - if (opt.start || opt.limit) { - var a = opt.start || 0, - b = opt.limit ? a + opt.limit : data.length; - data = data.slice(a, b); - } - - // determine char width of fields - var lens = fields.map(function(name) { - var format = FMT[types[name]] || '', - t = template('{{' + name + format + '}}'), - l = stats.max(data, function(x) { return t(x).length; }); - l = Math.max(Math.min(name.length, opt.minwidth), l); - return opt.maxwidth > 0 ? Math.min(l, opt.maxwidth) : l; - }); - - // print header row - var head = fields.map(function(name, i) { - return util.truncate(util.pad(name, lens[i], 'center'), lens[i]); - }).join(opt.separator); - - // build template function for each row - var tmpl = template(fields.map(function(name, i) { - return '{{' + - name + - (FMT[types[name]] || '') + - ('|pad:' + lens[i] + ',' + (POS[types[name]] || 'right')) + - ('|truncate:' + lens[i]) + - '}}'; - }).join(opt.separator)); - - // print table - return head + "\n" + data.map(tmpl).join('\n'); -} - -function formatSummary(s) { - s = s ? s.__summary__ ? s : stats.summary(s) : this; - var str = [], i, n; - for (i=0, n=s.length; i 4 && 'locale' + ( - l[0].toUpperCase() + l[1].toLowerCase() + - l[3].toUpperCase() + l[4].toLowerCase() - ); -} - -function numberLocale(l) { - var f = util.isString(l) ? d3_numberF[localeRef(l)] : d3_numberF.locale(l); - if (f == null) throw Error('Unrecognized locale: ' + l); - numberF = f; -} - -function timeLocale(l) { - var f = util.isString(l) ? d3_timeF[localeRef(l)] : d3_timeF.locale(l); - if (f == null) throw Error('Unrecognized locale: ' + l); - timeF = f; - monthFull = monthAbbr = dayFull = dayAbbr = null; -} - -// -- Number Formatting ---- - -var e10 = Math.sqrt(50), - e5 = Math.sqrt(10), - e2 = Math.sqrt(2); - -function linearRange(domain, count) { - if (!domain.length) domain = [0]; - if (count == null) count = 10; - - var start = domain[0], - stop = domain[domain.length - 1]; - - if (stop < start) { error = stop; stop = start; start = error; } - - var span = (stop - start) || (count = 1, start || stop || 1), - step = Math.pow(10, Math.floor(Math.log(span / count) / Math.LN10)), - error = span / count / step; - - // Filter ticks to get closer to the desired count. - if (error >= e10) step *= 10; - else if (error >= e5) step *= 5; - else if (error >= e2) step *= 2; - - // Round start and stop values to step interval. - return [ - Math.ceil(start / step) * step, - Math.floor(stop / step) * step + step / 2, // inclusive - step - ]; -} - -function trimZero(f, decimal) { - return function(x) { - var s = f(x), - n = s.indexOf(decimal); - if (n < 0) return s; - - var idx = rightmostDigit(s, n), - end = idx < s.length ? s.slice(idx) : ''; - - while (--idx > n) { - if (s[idx] !== '0') { ++idx; break; } - } - return s.slice(0, idx) + end; - }; -} - -function rightmostDigit(s, n) { - var i = s.lastIndexOf('e'), c; - if (i > 0) return i; - for (i=s.length; --i > n;) { - c = s.charCodeAt(i); - if (c >= 48 && c <= 57) return i+1; // is digit - } -} - -function autoNumberFormat(f) { - var decimal = numberF.format('.1f')(1)[1]; // get decimal char - if (f == null) f = ','; - f = d3_numberF.formatSpecifier(f); - if (f.precision == null) f.precision = 12; - switch (f.type) { - case '%': f.precision -= 2; break; - case 'e': f.precision -= 1; break; - } - return trimZero(numberF.format(f), decimal); -} - -function linearNumberFormat(domain, count, f) { - var range = linearRange(domain, count); - - if (f == null) f = ',f'; - - switch (f = d3_numberF.formatSpecifier(f), f.type) { - case 's': { - var value = Math.max(Math.abs(range[0]), Math.abs(range[1])); - if (f.precision == null) f.precision = d3_numberF.precisionPrefix(range[2], value); - return numberF.formatPrefix(f, value); - } - case '': - case 'e': - case 'g': - case 'p': - case 'r': { - if (f.precision == null) f.precision = d3_numberF.precisionRound(range[2], Math.max(Math.abs(range[0]), Math.abs(range[1]))) - (f.type === 'e'); - break; - } - case 'f': - case '%': { - if (f.precision == null) f.precision = d3_numberF.precisionFixed(range[2]) - 2 * (f.type === '%'); - break; - } - } - return numberF.format(f); -} - -// -- Datetime Formatting ---- - -function timeAutoFormat() { - var f = timeF.format, - formatMillisecond = f('.%L'), - formatSecond = f(':%S'), - formatMinute = f('%I:%M'), - formatHour = f('%I %p'), - formatDay = f('%a %d'), - formatWeek = f('%b %d'), - formatMonth = f('%B'), - formatYear = f('%Y'); - - return function(date) { - var d = +date; - return (d3_time.second(date) < d ? formatMillisecond - : d3_time.minute(date) < d ? formatSecond - : d3_time.hour(date) < d ? formatMinute - : d3_time.day(date) < d ? formatHour - : d3_time.month(date) < d ? - (d3_time.week(date) < d ? formatDay : formatWeek) - : d3_time.year(date) < d ? formatMonth - : formatYear)(date); - }; -} - -function utcAutoFormat() { - var f = timeF.utcFormat, - formatMillisecond = f('.%L'), - formatSecond = f(':%S'), - formatMinute = f('%I:%M'), - formatHour = f('%I %p'), - formatDay = f('%a %d'), - formatWeek = f('%b %d'), - formatMonth = f('%B'), - formatYear = f('%Y'); - - return function(date) { - var d = +date; - return (d3_time.utcSecond(date) < d ? formatMillisecond - : d3_time.utcMinute(date) < d ? formatSecond - : d3_time.utcHour(date) < d ? formatMinute - : d3_time.utcDay(date) < d ? formatHour - : d3_time.utcMonth(date) < d ? - (d3_time.utcWeek(date) < d ? formatDay : formatWeek) - : d3_time.utcYear(date) < d ? formatMonth - : formatYear)(date); - }; -} - -function monthFormat(month, abbreviate) { - var f = abbreviate ? - (monthAbbr || (monthAbbr = timeF.format('%b'))) : - (monthFull || (monthFull = timeF.format('%B'))); - return (tmpDate.setMonth(month), f(tmpDate)); -} - -function dayFormat(day, abbreviate) { - var f = abbreviate ? - (dayAbbr || (dayAbbr = timeF.format('%a'))) : - (dayFull || (dayFull = timeF.format('%A'))); - return (tmpDate.setMonth(0), tmpDate.setDate(2 + day), f(tmpDate)); -} - -function quarterFormat(date) { - return Math.floor(date.getMonth() / 3) + 1; -} - -function utcQuarterFormat(date) { - return Math.floor(date.getUTCMonth() / 3) + 1; -} - -},{"./util":30,"d3-format":4,"d3-time":6,"d3-time-format":5}],16:[function(require,module,exports){ -var util = require('./util'), - gen = module.exports; - -gen.repeat = function(val, n) { - var a = Array(n), i; - for (i=0; i stop) range.push(j); - else while ((j = start + step * ++i) < stop) range.push(j); - return range; -}; - -gen.random = {}; - -gen.random.uniform = function(min, max) { - if (max === undefined) { - max = min === undefined ? 1 : min; - min = 0; - } - var d = max - min; - var f = function() { - return min + d * Math.random(); - }; - f.samples = function(n) { - return gen.zeros(n).map(f); - }; - f.pdf = function(x) { - return (x >= min && x <= max) ? 1/d : 0; - }; - f.cdf = function(x) { - return x < min ? 0 : x > max ? 1 : (x - min) / d; - }; - f.icdf = function(p) { - return (p >= 0 && p <= 1) ? min + p*d : NaN; - }; - return f; -}; - -gen.random.integer = function(a, b) { - if (b === undefined) { - b = a; - a = 0; - } - var d = b - a; - var f = function() { - return a + Math.floor(d * Math.random()); - }; - f.samples = function(n) { - return gen.zeros(n).map(f); - }; - f.pdf = function(x) { - return (x === Math.floor(x) && x >= a && x < b) ? 1/d : 0; - }; - f.cdf = function(x) { - var v = Math.floor(x); - return v < a ? 0 : v >= b ? 1 : (v - a + 1) / d; - }; - f.icdf = function(p) { - return (p >= 0 && p <= 1) ? a - 1 + Math.floor(p*d) : NaN; - }; - return f; -}; - -gen.random.normal = function(mean, stdev) { - mean = mean || 0; - stdev = stdev || 1; - var next; - var f = function() { - var x = 0, y = 0, rds, c; - if (next !== undefined) { - x = next; - next = undefined; - return x; - } - do { - x = Math.random()*2-1; - y = Math.random()*2-1; - rds = x*x + y*y; - } while (rds === 0 || rds > 1); - c = Math.sqrt(-2*Math.log(rds)/rds); // Box-Muller transform - next = mean + y*c*stdev; - return mean + x*c*stdev; - }; - f.samples = function(n) { - return gen.zeros(n).map(f); - }; - f.pdf = function(x) { - var exp = Math.exp(Math.pow(x-mean, 2) / (-2 * Math.pow(stdev, 2))); - return (1 / (stdev * Math.sqrt(2*Math.PI))) * exp; - }; - f.cdf = function(x) { - // Approximation from West (2009) - // Better Approximations to Cumulative Normal Functions - var cd, - z = (x - mean) / stdev, - Z = Math.abs(z); - if (Z > 37) { - cd = 0; - } else { - var sum, exp = Math.exp(-Z*Z/2); - if (Z < 7.07106781186547) { - sum = 3.52624965998911e-02 * Z + 0.700383064443688; - sum = sum * Z + 6.37396220353165; - sum = sum * Z + 33.912866078383; - sum = sum * Z + 112.079291497871; - sum = sum * Z + 221.213596169931; - sum = sum * Z + 220.206867912376; - cd = exp * sum; - sum = 8.83883476483184e-02 * Z + 1.75566716318264; - sum = sum * Z + 16.064177579207; - sum = sum * Z + 86.7807322029461; - sum = sum * Z + 296.564248779674; - sum = sum * Z + 637.333633378831; - sum = sum * Z + 793.826512519948; - sum = sum * Z + 440.413735824752; - cd = cd / sum; - } else { - sum = Z + 0.65; - sum = Z + 4 / sum; - sum = Z + 3 / sum; - sum = Z + 2 / sum; - sum = Z + 1 / sum; - cd = exp / sum / 2.506628274631; - } - } - return z > 0 ? 1 - cd : cd; - }; - f.icdf = function(p) { - // Approximation of Probit function using inverse error function. - if (p <= 0 || p >= 1) return NaN; - var x = 2*p - 1, - v = (8 * (Math.PI - 3)) / (3 * Math.PI * (4-Math.PI)), - a = (2 / (Math.PI*v)) + (Math.log(1 - Math.pow(x,2)) / 2), - b = Math.log(1 - (x*x)) / v, - s = (x > 0 ? 1 : -1) * Math.sqrt(Math.sqrt((a*a) - b) - a); - return mean + stdev * Math.SQRT2 * s; - }; - return f; -}; - -gen.random.bootstrap = function(domain, smooth) { - // Generates a bootstrap sample from a set of observations. - // Smooth bootstrapping adds random zero-centered noise to the samples. - var val = domain.filter(util.isValid), - len = val.length, - err = smooth ? gen.random.normal(0, smooth) : null; - var f = function() { - return val[~~(Math.random()*len)] + (err ? err() : 0); - }; - f.samples = function(n) { - return gen.zeros(n).map(f); - }; - return f; -}; -},{"./util":30}],17:[function(require,module,exports){ -var util = require('../../util'); -var d3_dsv = require('d3-dsv'); - -function dsv(data, format) { - if (data) { - var h = format.header; - data = (h ? h.join(format.delimiter) + '\n' : '') + data; - } - return d3_dsv.dsv(format.delimiter).parse(data); -} - -dsv.delimiter = function(delim) { - var fmt = {delimiter: delim}; - return function(data, format) { - return dsv(data, format ? util.extend(format, fmt) : fmt); - }; -}; - -module.exports = dsv; - -},{"../../util":30,"d3-dsv":3}],18:[function(require,module,exports){ -var dsv = require('./dsv'); - -module.exports = { - json: require('./json'), - topojson: require('./topojson'), - treejson: require('./treejson'), - dsv: dsv, - csv: dsv.delimiter(','), - tsv: dsv.delimiter('\t') -}; - -},{"./dsv":17,"./json":19,"./topojson":20,"./treejson":21}],19:[function(require,module,exports){ -var util = require('../../util'); - -module.exports = function(data, format) { - var d = util.isObject(data) && !util.isBuffer(data) ? - data : JSON.parse(data); - if (format && format.property) { - d = util.accessor(format.property)(d); - } - return d; -}; - -},{"../../util":30}],20:[function(require,module,exports){ -var json = require('./json'); - -var reader = function(data, format) { - var topojson = reader.topojson; - if (topojson == null) { throw Error('TopoJSON library not loaded.'); } - - var t = json(data, format), obj; - - if (format && format.feature) { - if ((obj = t.objects[format.feature])) { - return topojson.feature(t, obj).features; - } else { - throw Error('Invalid TopoJSON object: ' + format.feature); - } - } else if (format && format.mesh) { - if ((obj = t.objects[format.mesh])) { - return [topojson.mesh(t, t.objects[format.mesh])]; - } else { - throw Error('Invalid TopoJSON object: ' + format.mesh); - } - } else { - throw Error('Missing TopoJSON feature or mesh parameter.'); - } -}; - -reader.topojson = require('topojson'); -module.exports = reader; - -},{"./json":19,"topojson":31}],21:[function(require,module,exports){ -var json = require('./json'); - -module.exports = function(tree, format) { - return toTable(json(tree, format), format); -}; - -function toTable(root, fields) { - var childrenField = fields && fields.children || 'children', - parentField = fields && fields.parent || 'parent', - table = []; - - function visit(node, parent) { - node[parentField] = parent; - table.push(node); - var children = node[childrenField]; - if (children) { - for (var i=0; i 1 && domain[idx-1] === '.' && domain.lastIndexOf(d) === idx); - }); - if (!whiteListed) { - throw 'URL is not whitelisted: ' + url; - } - } - } - return url; -} - -function load(opt, callback) { - return load.loader(opt, callback); -} - -function loader(opt, callback) { - var error = callback || function(e) { throw e; }, url; - - try { - url = load.sanitizeUrl(opt); // enable override - } catch (err) { - error(err); - return; - } - - if (!url) { - error('Invalid URL: ' + opt.url); - } else if (load.useXHR) { - // on client, use xhr - return load.xhr(url, opt, callback); - } else if (startsWith(url, fileProtocol)) { - // on server, if url starts with 'file://', strip it and load from file - return load.file(url.slice(fileProtocol.length), opt, callback); - } else if (url.indexOf('://') < 0) { // TODO better protocol check? - // on server, if no protocol assume file - return load.file(url, opt, callback); - } else { - // for regular URLs on server - return load.http(url, opt, callback); - } -} - -function xhrHasResponse(request) { - var type = request.responseType; - return type && type !== 'text' ? - request.response : // null on error - request.responseText; // '' on error -} - -function xhr(url, opt, callback) { - var async = !!callback; - var request = new XMLHttpRequest(); - // If IE does not support CORS, use XDomainRequest (copied from d3.xhr) - if (typeof XDomainRequest !== 'undefined' && - !('withCredentials' in request) && - /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest(); - - function respond() { - var status = request.status; - if (!status && xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) { - callback(null, request.responseText); - } else { - callback(request, null); - } - } - - if (async) { - if ('onload' in request) { - request.onload = request.onerror = respond; - } else { - request.onreadystatechange = function() { - if (request.readyState > 3) respond(); - }; - } - } - - request.open('GET', url, async); - /* istanbul ignore else */ - if (request.setRequestHeader) { - var headers = util.extend({}, load.headers, opt.headers); - for (var name in headers) { - request.setRequestHeader(name, headers[name]); - } - } - request.send(); - - if (!async && xhrHasResponse(request)) { - return request.responseText; - } -} - -function file(filename, opt, callback) { - var fs = require('fs'); - if (!callback) { - return fs.readFileSync(filename, 'utf8'); - } - fs.readFile(filename, callback); -} - -function http(url, opt, callback) { - var headers = util.extend({}, load.headers, opt.headers); - - var options = {url: url, encoding: null, gzip: true, headers: headers}; - if (!callback) { - return require('sync-request')('GET', url, options).getBody(); - } - require('request')(options, function(error, response, body) { - if (!error && response.statusCode === 200) { - callback(null, body); - } else { - error = error || - 'Load failed with response code ' + response.statusCode + '.'; - callback(error, null); - } - }); -} - -function startsWith(string, searchString) { - return string == null ? false : string.lastIndexOf(searchString, 0) === 0; -} - -// Allow these functions to be overriden by the user of the library -load.loader = loader; -load.sanitizeUrl = sanitizeUrl; -load.xhr = xhr; -load.file = file; -load.http = http; - -// Default settings -load.useXHR = (typeof XMLHttpRequest !== 'undefined'); -load.headers = {}; - -module.exports = load; - -},{"../util":30,"fs":2,"request":2,"sync-request":2,"url":2}],23:[function(require,module,exports){ -var util = require('../util'), - type = require('./type'), - formats = require('./formats'), - timeF = require('../format').time; - -function read(data, format) { - var type = (format && format.type) || 'json'; - data = formats[type](data, format); - if (format && format.parse) parse(data, format.parse); - return data; -} - -function parse(data, types) { - var cols, parsers, d, i, j, clen, len = data.length; - - types = (types==='auto') ? type.inferAll(data) : util.duplicate(types); - cols = util.keys(types); - parsers = cols.map(function(c) { - var t = types[c]; - if (t && t.indexOf('date:') === 0) { - var parts = t.split(/:(.+)?/, 2), // split on first : - pattern = parts[1]; - if ((pattern[0] === '\'' && pattern[pattern.length-1] === '\'') || - (pattern[0] === '"' && pattern[pattern.length-1] === '"')) { - pattern = pattern.slice(1, -1); - } else { - throw Error('Format pattern must be quoted: ' + pattern); - } - pattern = timeF(pattern); - return function(v) { return pattern.parse(v); }; - } - if (!type.parsers[t]) { - throw Error('Illegal format pattern: ' + c + ':' + t); - } - return type.parsers[t]; - }); - - for (i=0, clen=cols.length; i 0 ? Math.pow(mean, 1/c) : 0; - return mean; -}; - -// Compute the harmonic mean of an array of numbers. -stats.mean.harmonic = function(values, f) { - f = util.$(f); - var mean = 0, c, n, v, i; - for (i=0, c=0, n=values.length; i b) b = v; - } - } - return [a, b]; -}; - -// Find the integer indices of the minimum and maximum values. -stats.extent.index = function(values, f) { - f = util.$(f); - var x = -1, y = -1, a, b, v, i, n = values.length; - for (i=0; i b) { b = v; y = i; } - } - } - return [x, y]; -}; - -// Compute the dot product of two arrays of numbers. -stats.dot = function(values, a, b) { - var sum = 0, i, v; - if (!b) { - if (values.length !== a.length) { - throw Error('Array lengths must match.'); - } - for (i=0; i -1 && p !== v) { - mu = 1 + (i-1 + tie) / 2; - for (; tie -1) { - mu = 1 + (n-1 + tie) / 2; - for (; tie max) max = x; - delta = x - mean; - mean = mean + delta / (++valid); - M2 = M2 + delta * (x - mean); - vals.push(x); - } - } - M2 = M2 / (valid - 1); - sd = Math.sqrt(M2); - - // sort values for median and iqr - vals.sort(util.cmp); - - return { - type: type(values, f), - unique: u, - count: values.length, - valid: valid, - missing: missing, - distinct: distinct, - min: min, - max: max, - mean: mean, - stdev: sd, - median: (v = stats.quantile(vals, 0.5)), - q1: stats.quantile(vals, 0.25), - q3: stats.quantile(vals, 0.75), - modeskew: sd === 0 ? 0 : (mean - v) / sd - }; -}; - -// Compute profiles for all variables in a data set. -stats.summary = function(data, fields) { - fields = fields || util.keys(data[0]); - var s = fields.map(function(f) { - var p = stats.profile(data, util.$(f)); - return (p.field = f, p); - }); - return (s.__summary__ = true, s); -}; - -},{"./generate":16,"./import/type":25,"./util":30}],28:[function(require,module,exports){ -var util = require('./util'), - format = require('./format'); - -var context = { - formats: [], - format_map: {}, - truncate: util.truncate, - pad: util.pad, - day: format.day, - month: format.month, - quarter: format.quarter, - utcQuarter: format.utcQuarter -}; - -function template(text) { - var src = source(text, 'd'); - src = 'var __t; return ' + src + ';'; - - /* jshint evil: true */ - return (new Function('d', src)).bind(context); -} - -template.source = source; -template.context = context; -template.format = get_format; -module.exports = template; - -// Clear cache of format objects. -// This can *break* prior template functions, so invoke with care! -template.clearFormatCache = function() { - context.formats = []; - context.format_map = {}; -}; - -// Generate property access code for use within template source. -// object: the name of the object (variable) containing template data -// property: the property access string, verbatim from template tag -template.property = function(object, property) { - var src = util.field(property).map(util.str).join(']['); - return object + '[' + src + ']'; -}; - -// Generate source code for a template function. -// text: the template text -// variable: the name of the data object variable ('obj' by default) -// properties: optional hash for collecting all accessed properties -function source(text, variable, properties) { - variable = variable || 'obj'; - var index = 0; - var src = '\''; - var regex = template_re; - - // Compile the template source, escaping string literals appropriately. - text.replace(regex, function(match, interpolate, offset) { - src += text - .slice(index, offset) - .replace(template_escaper, template_escapeChar); - index = offset + match.length; - - if (interpolate) { - src += '\'\n+((__t=(' + - template_var(interpolate, variable, properties) + - '))==null?\'\':__t)+\n\''; - } - - // Adobe VMs need the match returned to produce the correct offest. - return match; - }); - return src + '\''; -} - -function template_var(text, variable, properties) { - var filters = text.match(filter_re); - var prop = filters.shift().trim(); - var stringCast = true; - - function strcall(fn) { - fn = fn || ''; - if (stringCast) { - stringCast = false; - src = 'String(' + src + ')' + fn; - } else { - src += fn; - } - return src; - } - - function date() { - return '(typeof ' + src + '==="number"?new Date('+src+'):'+src+')'; - } - - function formatter(type) { - var pattern = args[0]; - if ((pattern[0] === '\'' && pattern[pattern.length-1] === '\'') || - (pattern[0] === '"' && pattern[pattern.length-1] === '"')) { - pattern = pattern.slice(1, -1); - } else { - throw Error('Format pattern must be quoted: ' + pattern); - } - a = template_format(pattern, type); - stringCast = false; - var arg = type === 'number' ? src : date(); - src = 'this.formats['+a+']('+arg+')'; - } - - if (properties) properties[prop] = 1; - var src = template.property(variable, prop); - - for (var i=0; i 0) { - f = f.slice(0, pidx); - args = filters[i].slice(pidx+1) - .match(args_re) - .map(function(s) { return s.trim(); }); - } - f = f.trim(); - - switch (f) { - case 'length': - strcall('.length'); - break; - case 'lower': - strcall('.toLowerCase()'); - break; - case 'upper': - strcall('.toUpperCase()'); - break; - case 'lower-locale': - strcall('.toLocaleLowerCase()'); - break; - case 'upper-locale': - strcall('.toLocaleUpperCase()'); - break; - case 'trim': - strcall('.trim()'); - break; - case 'left': - a = util.number(args[0]); - strcall('.slice(0,' + a + ')'); - break; - case 'right': - a = util.number(args[0]); - strcall('.slice(-' + a +')'); - break; - case 'mid': - a = util.number(args[0]); - b = a + util.number(args[1]); - strcall('.slice(+'+a+','+b+')'); - break; - case 'slice': - a = util.number(args[0]); - strcall('.slice('+ a + - (args.length > 1 ? ',' + util.number(args[1]) : '') + - ')'); - break; - case 'truncate': - a = util.number(args[0]); - b = args[1]; - b = (b!=='left' && b!=='middle' && b!=='center') ? 'right' : b; - src = 'this.truncate(' + strcall() + ',' + a + ',\'' + b + '\')'; - break; - case 'pad': - a = util.number(args[0]); - b = args[1]; - b = (b!=='left' && b!=='middle' && b!=='center') ? 'right' : b; - src = 'this.pad(' + strcall() + ',' + a + ',\'' + b + '\')'; - break; - case 'number': - formatter('number'); - break; - case 'time': - formatter('time'); - break; - case 'time-utc': - formatter('utc'); - break; - case 'month': - src = 'this.month(' + src + ')'; - break; - case 'month-abbrev': - src = 'this.month(' + src + ',true)'; - break; - case 'day': - src = 'this.day(' + src + ')'; - break; - case 'day-abbrev': - src = 'this.day(' + src + ',true)'; - break; - case 'quarter': - src = 'this.quarter(' + src + ')'; - break; - case 'quarter-utc': - src = 'this.utcQuarter(' + src + ')'; - break; - default: - throw Error('Unrecognized template filter: ' + f); - } - } - - return src; -} - -var template_re = /\{\{(.+?)\}\}|$/g, - filter_re = /(?:"[^"]*"|\'[^\']*\'|[^\|"]+|[^\|\']+)+/g, - args_re = /(?:"[^"]*"|\'[^\']*\'|[^,"]+|[^,\']+)+/g; - -// Certain characters need to be escaped so that they can be put into a -// string literal. -var template_escapes = { - '\'': '\'', - '\\': '\\', - '\r': 'r', - '\n': 'n', - '\u2028': 'u2028', - '\u2029': 'u2029' -}; - -var template_escaper = /\\|'|\r|\n|\u2028|\u2029/g; - -function template_escapeChar(match) { - return '\\' + template_escapes[match]; -} - -function template_format(pattern, type) { - var key = type + ':' + pattern; - if (context.format_map[key] == null) { - var f = format[type](pattern); - var i = context.formats.length; - context.formats.push(f); - context.format_map[key] = i; - return i; - } - return context.format_map[key]; -} - -function get_format(pattern, type) { - return context.formats[template_format(pattern, type)]; -} - -},{"./format":15,"./util":30}],29:[function(require,module,exports){ -var d3_time = require('d3-time'); - -var tempDate = new Date(), - baseDate = new Date(0, 0, 1).setFullYear(0), // Jan 1, 0 AD - utcBaseDate = new Date(Date.UTC(0, 0, 1)).setUTCFullYear(0); - -function date(d) { - return (tempDate.setTime(+d), tempDate); -} - -// create a time unit entry -function entry(type, date, unit, step, min, max) { - var e = { - type: type, - date: date, - unit: unit - }; - if (step) { - e.step = step; - } else { - e.minstep = 1; - } - if (min != null) e.min = min; - if (max != null) e.max = max; - return e; -} - -function create(type, unit, base, step, min, max) { - return entry(type, - function(d) { return unit.offset(base, d); }, - function(d) { return unit.count(base, d); }, - step, min, max); -} - -var locale = [ - create('second', d3_time.second, baseDate), - create('minute', d3_time.minute, baseDate), - create('hour', d3_time.hour, baseDate), - create('day', d3_time.day, baseDate, [1, 7]), - create('month', d3_time.month, baseDate, [1, 3, 6]), - create('year', d3_time.year, baseDate), - - // periodic units - entry('seconds', - function(d) { return new Date(1970, 0, 1, 0, 0, d); }, - function(d) { return date(d).getSeconds(); }, - null, 0, 59 - ), - entry('minutes', - function(d) { return new Date(1970, 0, 1, 0, d); }, - function(d) { return date(d).getMinutes(); }, - null, 0, 59 - ), - entry('hours', - function(d) { return new Date(1970, 0, 1, d); }, - function(d) { return date(d).getHours(); }, - null, 0, 23 - ), - entry('weekdays', - function(d) { return new Date(1970, 0, 4+d); }, - function(d) { return date(d).getDay(); }, - [1], 0, 6 - ), - entry('dates', - function(d) { return new Date(1970, 0, d); }, - function(d) { return date(d).getDate(); }, - [1], 1, 31 - ), - entry('months', - function(d) { return new Date(1970, d % 12, 1); }, - function(d) { return date(d).getMonth(); }, - [1], 0, 11 - ) -]; - -var utc = [ - create('second', d3_time.utcSecond, utcBaseDate), - create('minute', d3_time.utcMinute, utcBaseDate), - create('hour', d3_time.utcHour, utcBaseDate), - create('day', d3_time.utcDay, utcBaseDate, [1, 7]), - create('month', d3_time.utcMonth, utcBaseDate, [1, 3, 6]), - create('year', d3_time.utcYear, utcBaseDate), - - // periodic units - entry('seconds', - function(d) { return new Date(Date.UTC(1970, 0, 1, 0, 0, d)); }, - function(d) { return date(d).getUTCSeconds(); }, - null, 0, 59 - ), - entry('minutes', - function(d) { return new Date(Date.UTC(1970, 0, 1, 0, d)); }, - function(d) { return date(d).getUTCMinutes(); }, - null, 0, 59 - ), - entry('hours', - function(d) { return new Date(Date.UTC(1970, 0, 1, d)); }, - function(d) { return date(d).getUTCHours(); }, - null, 0, 23 - ), - entry('weekdays', - function(d) { return new Date(Date.UTC(1970, 0, 4+d)); }, - function(d) { return date(d).getUTCDay(); }, - [1], 0, 6 - ), - entry('dates', - function(d) { return new Date(Date.UTC(1970, 0, d)); }, - function(d) { return date(d).getUTCDate(); }, - [1], 1, 31 - ), - entry('months', - function(d) { return new Date(Date.UTC(1970, d % 12, 1)); }, - function(d) { return date(d).getUTCMonth(); }, - [1], 0, 11 - ) -]; - -var STEPS = [ - [31536e6, 5], // 1-year - [7776e6, 4], // 3-month - [2592e6, 4], // 1-month - [12096e5, 3], // 2-week - [6048e5, 3], // 1-week - [1728e5, 3], // 2-day - [864e5, 3], // 1-day - [432e5, 2], // 12-hour - [216e5, 2], // 6-hour - [108e5, 2], // 3-hour - [36e5, 2], // 1-hour - [18e5, 1], // 30-minute - [9e5, 1], // 15-minute - [3e5, 1], // 5-minute - [6e4, 1], // 1-minute - [3e4, 0], // 30-second - [15e3, 0], // 15-second - [5e3, 0], // 5-second - [1e3, 0] // 1-second -]; - -function find(units, span, minb, maxb) { - var step = STEPS[0], i, n, bins; - - for (i=1, n=STEPS.length; i step[0]) { - bins = span / step[0]; - if (bins > maxb) { - return units[STEPS[i-1][1]]; - } - if (bins >= minb) { - return units[step[1]]; - } - } - } - return units[STEPS[n-1][1]]; -} - -function toUnitMap(units) { - var map = {}, i, n; - for (i=0, n=units.length; i 1 ? - function(x, v) { - for (var i=0; i b || b == null) && a != null ? 1 : - ((b = b instanceof Date ? +b : b), - (a = a instanceof Date ? +a : a)) !== a && b === b ? -1 : - b !== b && a === a ? 1 : 0; -}; - -u.numcmp = function(a, b) { return a - b; }; - -u.stablesort = function(array, sortBy, keyFn) { - var indices = array.reduce(function(idx, v, i) { - return (idx[keyFn(v)] = i, idx); - }, {}); - - array.sort(function(a, b) { - var sa = sortBy(a), - sb = sortBy(b); - return sa < sb ? -1 : sa > sb ? 1 - : (indices[keyFn(a)] - indices[keyFn(b)]); - }); - - return array; -}; - -// permutes an array using a Knuth shuffle -u.permute = function(a) { - var m = a.length, - swap, - i; - - while (m) { - i = Math.floor(Math.random() * m--); - swap = a[m]; - a[m] = a[i]; - a[i] = swap; - } -}; - -// string functions - -u.pad = function(s, length, pos, padchar) { - padchar = padchar || " "; - var d = length - s.length; - if (d <= 0) return s; - switch (pos) { - case 'left': - return strrep(d, padchar) + s; - case 'middle': - case 'center': - return strrep(Math.floor(d/2), padchar) + - s + strrep(Math.ceil(d/2), padchar); - default: - return s + strrep(d, padchar); - } -}; - -function strrep(n, str) { - var s = "", i; - for (i=0; i>> 1; - if (a[mid] < x) lo = mid + 1; - else hi = mid; - } - return lo; -} - -function feature(topology, o) { - return o.type === "GeometryCollection" ? { - type: "FeatureCollection", - features: o.geometries.map(function(o) { return feature$1(topology, o); }) - } : feature$1(topology, o); -} - -function feature$1(topology, o) { - var f = { - type: "Feature", - id: o.id, - properties: o.properties || {}, - geometry: object(topology, o) - }; - if (o.id == null) delete f.id; - return f; -} - -function object(topology, o) { - var absolute = transformAbsolute(topology.transform), - arcs = topology.arcs; - - function arc(i, points) { - if (points.length) points.pop(); - for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length, p; k < n; ++k) { - points.push(p = a[k].slice()); - absolute(p, k); - } - if (i < 0) reverse(points, n); - } - - function point(p) { - p = p.slice(); - absolute(p, 0); - return p; - } - - function line(arcs) { - var points = []; - for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points); - if (points.length < 2) points.push(points[0].slice()); - return points; - } - - function ring(arcs) { - var points = line(arcs); - while (points.length < 4) points.push(points[0].slice()); - return points; - } - - function polygon(arcs) { - return arcs.map(ring); - } - - function geometry(o) { - var t = o.type; - return t === "GeometryCollection" ? {type: t, geometries: o.geometries.map(geometry)} - : t in geometryType ? {type: t, coordinates: geometryType[t](o)} - : null; - } - - var geometryType = { - Point: function(o) { return point(o.coordinates); }, - MultiPoint: function(o) { return o.coordinates.map(point); }, - LineString: function(o) { return line(o.arcs); }, - MultiLineString: function(o) { return o.arcs.map(line); }, - Polygon: function(o) { return polygon(o.arcs); }, - MultiPolygon: function(o) { return o.arcs.map(polygon); } - }; - - return geometry(o); -} - -function stitchArcs(topology, arcs) { - var stitchedArcs = {}, - fragmentByStart = {}, - fragmentByEnd = {}, - fragments = [], - emptyIndex = -1; - - // Stitch empty arcs first, since they may be subsumed by other arcs. - arcs.forEach(function(i, j) { - var arc = topology.arcs[i < 0 ? ~i : i], t; - if (arc.length < 3 && !arc[1][0] && !arc[1][1]) { - t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t; - } - }); - - arcs.forEach(function(i) { - var e = ends(i), - start = e[0], - end = e[1], - f, g; - - if (f = fragmentByEnd[start]) { - delete fragmentByEnd[f.end]; - f.push(i); - f.end = end; - if (g = fragmentByStart[end]) { - delete fragmentByStart[g.start]; - var fg = g === f ? f : f.concat(g); - fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg; - } else { - fragmentByStart[f.start] = fragmentByEnd[f.end] = f; - } - } else if (f = fragmentByStart[end]) { - delete fragmentByStart[f.start]; - f.unshift(i); - f.start = start; - if (g = fragmentByEnd[start]) { - delete fragmentByEnd[g.end]; - var gf = g === f ? f : g.concat(f); - fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf; - } else { - fragmentByStart[f.start] = fragmentByEnd[f.end] = f; - } - } else { - f = [i]; - fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f; - } - }); - - function ends(i) { - var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1; - if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; }); - else p1 = arc[arc.length - 1]; - return i < 0 ? [p1, p0] : [p0, p1]; - } - - function flush(fragmentByEnd, fragmentByStart) { - for (var k in fragmentByEnd) { - var f = fragmentByEnd[k]; - delete fragmentByStart[f.start]; - delete f.start; - delete f.end; - f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; }); - fragments.push(f); - } - } - - flush(fragmentByEnd, fragmentByStart); - flush(fragmentByStart, fragmentByEnd); - arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); }); - - return fragments; -} - -function mesh(topology) { - return object(topology, meshArcs.apply(this, arguments)); -} - -function meshArcs(topology, o, filter) { - var arcs = []; - - function arc(i) { - var j = i < 0 ? ~i : i; - (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom}); - } - - function line(arcs) { - arcs.forEach(arc); - } - - function polygon(arcs) { - arcs.forEach(line); - } - - function geometry(o) { - if (o.type === "GeometryCollection") o.geometries.forEach(geometry); - else if (o.type in geometryType) geom = o, geometryType[o.type](o.arcs); - } - - if (arguments.length > 1) { - var geomsByArc = [], - geom; - - var geometryType = { - LineString: line, - MultiLineString: polygon, - Polygon: polygon, - MultiPolygon: function(arcs) { arcs.forEach(polygon); } - }; - - geometry(o); - - geomsByArc.forEach(arguments.length < 3 - ? function(geoms) { arcs.push(geoms[0].i); } - : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); }); - } else { - for (var i = 0, n = topology.arcs.length; i < n; ++i) arcs.push(i); - } - - return {type: "MultiLineString", arcs: stitchArcs(topology, arcs)}; -} - -function cartesianTriangleArea(triangle) { - var a = triangle[0], b = triangle[1], c = triangle[2]; - return Math.abs((a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1])); -} - -function ring(ring) { - var i = -1, - n = ring.length, - a, - b = ring[n - 1], - area = 0; - - while (++i < n) { - a = b; - b = ring[i]; - area += a[0] * b[1] - a[1] * b[0]; - } - - return area / 2; -} - -function merge(topology) { - return object(topology, mergeArcs.apply(this, arguments)); -} - -function mergeArcs(topology, objects) { - var polygonsByArc = {}, - polygons = [], - components = []; - - objects.forEach(function(o) { - if (o.type === "Polygon") register(o.arcs); - else if (o.type === "MultiPolygon") o.arcs.forEach(register); - }); - - function register(polygon) { - polygon.forEach(function(ring$$) { - ring$$.forEach(function(arc) { - (polygonsByArc[arc = arc < 0 ? ~arc : arc] || (polygonsByArc[arc] = [])).push(polygon); - }); - }); - polygons.push(polygon); - } - - function area(ring$$) { - return Math.abs(ring(object(topology, {type: "Polygon", arcs: [ring$$]}).coordinates[0])); - } - - polygons.forEach(function(polygon) { - if (!polygon._) { - var component = [], - neighbors = [polygon]; - polygon._ = 1; - components.push(component); - while (polygon = neighbors.pop()) { - component.push(polygon); - polygon.forEach(function(ring$$) { - ring$$.forEach(function(arc) { - polygonsByArc[arc < 0 ? ~arc : arc].forEach(function(polygon) { - if (!polygon._) { - polygon._ = 1; - neighbors.push(polygon); - } - }); - }); - }); - } - } - }); - - polygons.forEach(function(polygon) { - delete polygon._; - }); - - return { - type: "MultiPolygon", - arcs: components.map(function(polygons) { - var arcs = [], n; - - // Extract the exterior (unique) arcs. - polygons.forEach(function(polygon) { - polygon.forEach(function(ring$$) { - ring$$.forEach(function(arc) { - if (polygonsByArc[arc < 0 ? ~arc : arc].length < 2) { - arcs.push(arc); - } - }); - }); - }); - - // Stitch the arcs into one or more rings. - arcs = stitchArcs(topology, arcs); - - // If more than one ring is returned, - // at most one of these rings can be the exterior; - // choose the one with the greatest absolute area. - if ((n = arcs.length) > 1) { - for (var i = 1, k = area(arcs[0]), ki, t; i < n; ++i) { - if ((ki = area(arcs[i])) > k) { - t = arcs[0], arcs[0] = arcs[i], arcs[i] = t, k = ki; - } - } - } - - return arcs; - }) - }; -} - -function neighbors(objects) { - var indexesByArc = {}, // arc index -> array of object indexes - neighbors = objects.map(function() { return []; }); - - function line(arcs, i) { - arcs.forEach(function(a) { - if (a < 0) a = ~a; - var o = indexesByArc[a]; - if (o) o.push(i); - else indexesByArc[a] = [i]; - }); - } - - function polygon(arcs, i) { - arcs.forEach(function(arc) { line(arc, i); }); - } - - function geometry(o, i) { - if (o.type === "GeometryCollection") o.geometries.forEach(function(o) { geometry(o, i); }); - else if (o.type in geometryType) geometryType[o.type](o.arcs, i); - } - - var geometryType = { - LineString: line, - MultiLineString: polygon, - Polygon: polygon, - MultiPolygon: function(arcs, i) { arcs.forEach(function(arc) { polygon(arc, i); }); } - }; - - objects.forEach(geometry); - - for (var i in indexesByArc) { - for (var indexes = indexesByArc[i], m = indexes.length, j = 0; j < m; ++j) { - for (var k = j + 1; k < m; ++k) { - var ij = indexes[j], ik = indexes[k], n; - if ((n = neighbors[ij])[i = bisect(n, ik)] !== ik) n.splice(i, 0, ik); - if ((n = neighbors[ik])[i = bisect(n, ij)] !== ij) n.splice(i, 0, ij); - } - } - } - - return neighbors; -} - -function compareArea(a, b) { - return a[1][2] - b[1][2]; -} - -function minAreaHeap() { - var heap = {}, - array = [], - size = 0; - - heap.push = function(object) { - up(array[object._ = size] = object, size++); - return size; - }; - - heap.pop = function() { - if (size <= 0) return; - var removed = array[0], object; - if (--size > 0) object = array[size], down(array[object._ = 0] = object, 0); - return removed; - }; - - heap.remove = function(removed) { - var i = removed._, object; - if (array[i] !== removed) return; // invalid request - if (i !== --size) object = array[size], (compareArea(object, removed) < 0 ? up : down)(array[object._ = i] = object, i); - return i; - }; - - function up(object, i) { - while (i > 0) { - var j = ((i + 1) >> 1) - 1, - parent = array[j]; - if (compareArea(object, parent) >= 0) break; - array[parent._ = i] = parent; - array[object._ = i = j] = object; - } - } - - function down(object, i) { - while (true) { - var r = (i + 1) << 1, - l = r - 1, - j = i, - child = array[j]; - if (l < size && compareArea(array[l], child) < 0) child = array[j = l]; - if (r < size && compareArea(array[r], child) < 0) child = array[j = r]; - if (j === i) break; - array[child._ = i] = child; - array[object._ = i = j] = object; - } - } - - return heap; -} - -function presimplify(topology, triangleArea) { - var absolute = transformAbsolute(topology.transform), - relative = transformRelative(topology.transform), - heap = minAreaHeap(); - - if (!triangleArea) triangleArea = cartesianTriangleArea; - - topology.arcs.forEach(function(arc) { - var triangles = [], - maxArea = 0, - triangle, - i, - n, - p; - - // To store each point’s effective area, we create a new array rather than - // extending the passed-in point to workaround a Chrome/V8 bug (getting - // stuck in smi mode). For midpoints, the initial effective area of - // Infinity will be computed in the next step. - for (i = 0, n = arc.length; i < n; ++i) { - p = arc[i]; - absolute(arc[i] = [p[0], p[1], Infinity], i); - } - - for (i = 1, n = arc.length - 1; i < n; ++i) { - triangle = arc.slice(i - 1, i + 2); - triangle[1][2] = triangleArea(triangle); - triangles.push(triangle); - heap.push(triangle); - } - - for (i = 0, n = triangles.length; i < n; ++i) { - triangle = triangles[i]; - triangle.previous = triangles[i - 1]; - triangle.next = triangles[i + 1]; - } - - while (triangle = heap.pop()) { - var previous = triangle.previous, - next = triangle.next; - - // If the area of the current point is less than that of the previous point - // to be eliminated, use the latter's area instead. This ensures that the - // current point cannot be eliminated without eliminating previously- - // eliminated points. - if (triangle[1][2] < maxArea) triangle[1][2] = maxArea; - else maxArea = triangle[1][2]; - - if (previous) { - previous.next = next; - previous[2] = triangle[2]; - update(previous); - } - - if (next) { - next.previous = previous; - next[0] = triangle[0]; - update(next); - } - } - - arc.forEach(relative); - }); - - function update(triangle) { - heap.remove(triangle); - triangle[1][2] = triangleArea(triangle); - heap.push(triangle); - } - - return topology; -} - -var version = "1.6.27"; - -exports.version = version; -exports.mesh = mesh; -exports.meshArcs = meshArcs; -exports.merge = merge; -exports.mergeArcs = mergeArcs; -exports.feature = feature; -exports.neighbors = neighbors; -exports.presimplify = presimplify; - -Object.defineProperty(exports, '__esModule', { value: true }); - -}))); -},{}],32:[function(require,module,exports){ -var DEPS = require('./Dependencies').ALL; - -function create(cs, reflow) { - var out = {}; - copy(cs, out); - - out.add = []; - out.mod = []; - out.rem = []; - - out.reflow = reflow; - - return out; -} - -function copy(a, b) { - b.stamp = a ? a.stamp : 0; - b.sort = a ? a.sort : null; - b.facet = a ? a.facet : null; - b.trans = a ? a.trans : null; - b.dirty = a ? a.dirty : []; - b.request = a ? a.request : null; - for (var d, i=0, n=DEPS.length; i 1) { - for (var i=1, n=ref.length; i 0) { - node = pq.peek(); - isSg = node instanceof Signal; - pulse = pulses[node._id]; - - if (node.rank() !== node.qrank()) { - // A node's rank might change during a propagation. Re-queue if so. - pq.replace(node.qrank(true)); - } else { - // Evaluate node and propagate pulse. - pq.pop(); - pulses[node._id] = null; - listeners = node._listeners; - - if (!isSg || (isSg && !skipSignals)) { - pulse = this.evaluate(pulse, node); - } - - // Propagate the pulse. - if (pulse !== this.doNotPropagate) { - // Ensure reflow pulses always send reflow pulses even if skipped. - if (!pulse.reflow && node.reflows()) { - pulse = ChangeSet.create(pulse, true); - } - - for (i=0, len=listeners.length; i 0) branch[i-1].addListener(node); - } - - return branch; -}; - -prototype.disconnect = function(branch) { - var collector, node, data, signals, i, n, j, m; - - for (i=0, n=branch.length; i= pulse.stamp, - run = node.router() || pulse.add.length || pulse.rem.length; - - return run || !reflowed || node.reevaluate(pulse); -}; - -prototype.evaluate = function(pulse, node) { - if (!this.reevaluate(pulse, node)) return pulse; - pulse = node.evaluate(pulse); - node.last(pulse.stamp); - return pulse; -}; - -module.exports = Graph; - -},{"./ChangeSet":32,"./Collector":33,"./DataSource":34,"./Dependencies":35,"./Heap":37,"./Signal":39,"./Tuple":40,"datalib":26,"vega-logging":48}],37:[function(require,module,exports){ -function Heap(comparator) { - this.cmp = comparator; - this.nodes = []; -} - -var prototype = Heap.prototype; - -prototype.size = function() { - return this.nodes.length; -}; - -prototype.clear = function() { - return (this.nodes = [], this); -}; - -prototype.peek = function() { - return this.nodes[0]; -}; - -prototype.push = function(x) { - var array = this.nodes; - array.push(x); - return _siftdown(array, 0, array.length-1, this.cmp); -}; - -prototype.pop = function() { - var array = this.nodes, - last = array.pop(), - item; - - if (array.length) { - item = array[0]; - array[0] = last; - _siftup(array, 0, this.cmp); - } else { - item = last; - } - return item; -}; - -prototype.replace = function(item) { - var array = this.nodes, - retval = array[0]; - array[0] = item; - _siftup(array, 0, this.cmp); - return retval; -}; - -prototype.pushpop = function(item) { - var array = this.nodes, ref = array[0]; - if (array.length && this.cmp(ref, item) < 0) { - array[0] = item; - item = ref; - _siftup(array, 0, this.cmp); - } - return item; -}; - -function _siftdown(array, start, idx, cmp) { - var item, parent, pidx; - - item = array[idx]; - while (idx > start) { - pidx = (idx - 1) >> 1; - parent = array[pidx]; - if (cmp(item, parent) < 0) { - array[idx] = parent; - idx = pidx; - continue; - } - break; - } - return (array[idx] = item); -} - -function _siftup(array, idx, cmp) { - var start = idx, - end = array.length, - item = array[idx], - cidx = 2 * idx + 1, ridx; - - while (cidx < end) { - ridx = cidx + 1; - if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) { - cidx = ridx; - } - array[idx] = array[cidx]; - idx = cidx; - cidx = 2 * idx + 1; - } - array[idx] = item; - return _siftdown(array, start, idx, cmp); -} - -module.exports = Heap; - -},{}],38:[function(require,module,exports){ -var DEPS = require('./Dependencies').ALL, - nodeID = 0; - -function Node(graph) { - if (graph) this.init(graph); -} - -var Flags = Node.Flags = { - Router: 0x01, // Responsible for propagating tuples, cannot be skipped. - Collector: 0x02, // Holds a materialized dataset, pulse node to reflow. - Produces: 0x04, // Produces new tuples. - Mutates: 0x08, // Sets properties of incoming tuples. - Reflows: 0x10, // Forwards a reflow pulse. - Batch: 0x20 // Performs batch data processing, needs collector. -}; - -var prototype = Node.prototype; - -prototype.init = function(graph) { - this._id = ++nodeID; - this._graph = graph; - this._rank = graph.rank(); // Topological sort by rank - this._qrank = null; // Rank when enqueued for propagation - this._stamp = 0; // Last stamp seen - - this._listeners = []; - this._listeners._ids = {}; // To prevent duplicate listeners - - // Initialize dependencies. - this._deps = {}; - for (var i=0, n=DEPS.length; i l._rank) { - l.rerank(); - } - - return this; -}; - -prototype.removeListener = function(l) { - if (!this._listeners._ids[l._id]) return false; - - var idx = this._listeners.indexOf(l), - b = idx >= 0; - - if (b) { - this._listeners.splice(idx, 1); - this._listeners._ids[l._id] = null; - } - return b; -}; - -prototype.disconnect = function() { - this._listeners = []; - this._listeners._ids = {}; -}; - -// Evaluate this dataflow node for the current pulse. -// Subclasses should override to perform custom processing. -prototype.evaluate = function(pulse) { - return pulse; -}; - -// Should this node be re-evaluated for the current pulse? -// Searches pulse to see if any dependencies have updated. -prototype.reevaluate = function(pulse) { - var prop, dep, i, n, j, m; - - for (i=0, n=DEPS.length; i=0;) { - if (!handler || h[i].handler === handler) { - x = h.splice(i, 1)[0]; - this.removeListener(x.node); - } - } - - return this; -}; - -module.exports = Signal; - -},{"./ChangeSet":32,"./Node":38}],40:[function(require,module,exports){ -var tupleID = 0; - -function ingest(datum) { - datum = (datum === Object(datum)) ? datum : {data: datum}; - datum._id = ++tupleID; - if (datum._prev) datum._prev = null; - return datum; -} - -function idMap(a, ids) { - ids = ids || {}; - for (var i=0, n=a.length; i0;) { - idMap(arguments[i], ids); - } - return data.filter(function(x) { return !ids[x._id]; }); - } -}; - -},{}],41:[function(require,module,exports){ -module.exports = { - ChangeSet: require('./ChangeSet'), - Collector: require('./Collector'), - DataSource: require('./DataSource'), - Dependencies: require('./Dependencies'), - Graph: require('./Graph'), - Node: require('./Node'), - Signal: require('./Signal'), - Tuple: require('./Tuple'), - debug: require('vega-logging').debug -}; - -},{"./ChangeSet":32,"./Collector":33,"./DataSource":34,"./Dependencies":35,"./Graph":36,"./Node":38,"./Signal":39,"./Tuple":40,"vega-logging":48}],42:[function(require,module,exports){ -module.exports = (function() { - "use strict"; - - /* - * Generated by PEG.js 0.9.0. - * - * http://pegjs.org/ - */ - - function peg$subclass(child, parent) { - function ctor() { this.constructor = child; } - ctor.prototype = parent.prototype; - child.prototype = new ctor(); - } - - function peg$SyntaxError(message, expected, found, location) { - this.message = message; - this.expected = expected; - this.found = found; - this.location = location; - this.name = "SyntaxError"; - - if (typeof Error.captureStackTrace === "function") { - Error.captureStackTrace(this, peg$SyntaxError); - } - } - - peg$subclass(peg$SyntaxError, Error); - - function peg$parse(input) { - var options = arguments.length > 1 ? arguments[1] : {}, - parser = this, - - peg$FAILED = {}, - - peg$startRuleFunctions = { start: peg$parsestart }, - peg$startRuleFunction = peg$parsestart, - - peg$c0 = ",", - peg$c1 = { type: "literal", value: ",", description: "\",\"" }, - peg$c2 = function(o, m) { return [o].concat(m); }, - peg$c3 = function(o) { return [o]; }, - peg$c4 = "[", - peg$c5 = { type: "literal", value: "[", description: "\"[\"" }, - peg$c6 = "]", - peg$c7 = { type: "literal", value: "]", description: "\"]\"" }, - peg$c8 = ">", - peg$c9 = { type: "literal", value: ">", description: "\">\"" }, - peg$c10 = function(f1, f2, o) { - return { - start: f1, middle: o, end: f2, - str: '['+f1.str+', '+f2.str+'] > '+o.str}; - }, - peg$c11 = function(s, f) { - s.filters = f; - s.str += f.map(function(x) { return '['+x+']'; }).join(''); - return s; - }, - peg$c12 = function(s) { return s; }, - peg$c13 = "(", - peg$c14 = { type: "literal", value: "(", description: "\"(\"" }, - peg$c15 = ")", - peg$c16 = { type: "literal", value: ")", description: "\")\"" }, - peg$c17 = function(m) { - return { - stream: m, - str: '('+m.map(function(m) { return m.str; }).join(', ')+')' - }; - }, - peg$c18 = "@", - peg$c19 = { type: "literal", value: "@", description: "\"@\"" }, - peg$c20 = ":", - peg$c21 = { type: "literal", value: ":", description: "\":\"" }, - peg$c22 = function(n, e) { return {event: e, name: n, str: '@'+n+':'+e}; }, - peg$c23 = function(m, e) { return {event: e, mark: m, str: m+':'+e}; }, - peg$c24 = function(t, e) { return {event: e, target: t, str: t+':'+e}; }, - peg$c25 = function(e) { return {event: e, str: e}; }, - peg$c26 = function(s) { return {signal: s, str: s}; }, - peg$c27 = "rect", - peg$c28 = { type: "literal", value: "rect", description: "\"rect\"" }, - peg$c29 = "symbol", - peg$c30 = { type: "literal", value: "symbol", description: "\"symbol\"" }, - peg$c31 = "path", - peg$c32 = { type: "literal", value: "path", description: "\"path\"" }, - peg$c33 = "arc", - peg$c34 = { type: "literal", value: "arc", description: "\"arc\"" }, - peg$c35 = "area", - peg$c36 = { type: "literal", value: "area", description: "\"area\"" }, - peg$c37 = "line", - peg$c38 = { type: "literal", value: "line", description: "\"line\"" }, - peg$c39 = "rule", - peg$c40 = { type: "literal", value: "rule", description: "\"rule\"" }, - peg$c41 = "image", - peg$c42 = { type: "literal", value: "image", description: "\"image\"" }, - peg$c43 = "text", - peg$c44 = { type: "literal", value: "text", description: "\"text\"" }, - peg$c45 = "group", - peg$c46 = { type: "literal", value: "group", description: "\"group\"" }, - peg$c47 = "mousedown", - peg$c48 = { type: "literal", value: "mousedown", description: "\"mousedown\"" }, - peg$c49 = "mouseup", - peg$c50 = { type: "literal", value: "mouseup", description: "\"mouseup\"" }, - peg$c51 = "click", - peg$c52 = { type: "literal", value: "click", description: "\"click\"" }, - peg$c53 = "dblclick", - peg$c54 = { type: "literal", value: "dblclick", description: "\"dblclick\"" }, - peg$c55 = "wheel", - peg$c56 = { type: "literal", value: "wheel", description: "\"wheel\"" }, - peg$c57 = "keydown", - peg$c58 = { type: "literal", value: "keydown", description: "\"keydown\"" }, - peg$c59 = "keypress", - peg$c60 = { type: "literal", value: "keypress", description: "\"keypress\"" }, - peg$c61 = "keyup", - peg$c62 = { type: "literal", value: "keyup", description: "\"keyup\"" }, - peg$c63 = "mousewheel", - peg$c64 = { type: "literal", value: "mousewheel", description: "\"mousewheel\"" }, - peg$c65 = "mousemove", - peg$c66 = { type: "literal", value: "mousemove", description: "\"mousemove\"" }, - peg$c67 = "mouseout", - peg$c68 = { type: "literal", value: "mouseout", description: "\"mouseout\"" }, - peg$c69 = "mouseover", - peg$c70 = { type: "literal", value: "mouseover", description: "\"mouseover\"" }, - peg$c71 = "mouseenter", - peg$c72 = { type: "literal", value: "mouseenter", description: "\"mouseenter\"" }, - peg$c73 = "touchstart", - peg$c74 = { type: "literal", value: "touchstart", description: "\"touchstart\"" }, - peg$c75 = "touchmove", - peg$c76 = { type: "literal", value: "touchmove", description: "\"touchmove\"" }, - peg$c77 = "touchend", - peg$c78 = { type: "literal", value: "touchend", description: "\"touchend\"" }, - peg$c79 = "dragenter", - peg$c80 = { type: "literal", value: "dragenter", description: "\"dragenter\"" }, - peg$c81 = "dragover", - peg$c82 = { type: "literal", value: "dragover", description: "\"dragover\"" }, - peg$c83 = "dragleave", - peg$c84 = { type: "literal", value: "dragleave", description: "\"dragleave\"" }, - peg$c85 = function(e) { return e; }, - peg$c86 = /^[a-zA-Z0-9_\-]/, - peg$c87 = { type: "class", value: "[a-zA-Z0-9_-]", description: "[a-zA-Z0-9_-]" }, - peg$c88 = function(n) { return n.join(''); }, - peg$c89 = /^[a-zA-Z0-9\-_ #.>+~[\]=|\^$*]/, - peg$c90 = { type: "class", value: "[a-zA-Z0-9-_ #\\.\\>\\+~\\[\\]=|\\^\\$\\*]", description: "[a-zA-Z0-9-_ #\\.\\>\\+~\\[\\]=|\\^\\$\\*]" }, - peg$c91 = function(c) { return c.join(''); }, - peg$c92 = /^['"a-zA-Z0-9_().><=! \t-&|~]/, - peg$c93 = { type: "class", value: "['\"a-zA-Z0-9_\\(\\)\\.\\>\\<\\=\\! \\t-&|~]", description: "['\"a-zA-Z0-9_\\(\\)\\.\\>\\<\\=\\! \\t-&|~]" }, - peg$c94 = function(v) { return v.join(''); }, - peg$c95 = /^[ \t\r\n]/, - peg$c96 = { type: "class", value: "[ \\t\\r\\n]", description: "[ \\t\\r\\n]" }, - - peg$currPos = 0, - peg$savedPos = 0, - peg$posDetailsCache = [{ line: 1, column: 1, seenCR: false }], - peg$maxFailPos = 0, - peg$maxFailExpected = [], - peg$silentFails = 0, - - peg$result; - - if ("startRule" in options) { - if (!(options.startRule in peg$startRuleFunctions)) { - throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); - } - - peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; - } - - function text() { - return input.substring(peg$savedPos, peg$currPos); - } - - function location() { - return peg$computeLocation(peg$savedPos, peg$currPos); - } - - function expected(description) { - throw peg$buildException( - null, - [{ type: "other", description: description }], - input.substring(peg$savedPos, peg$currPos), - peg$computeLocation(peg$savedPos, peg$currPos) - ); - } - - function error(message) { - throw peg$buildException( - message, - null, - input.substring(peg$savedPos, peg$currPos), - peg$computeLocation(peg$savedPos, peg$currPos) - ); - } - - function peg$computePosDetails(pos) { - var details = peg$posDetailsCache[pos], - p, ch; - - if (details) { - return details; - } else { - p = pos - 1; - while (!peg$posDetailsCache[p]) { - p--; - } - - details = peg$posDetailsCache[p]; - details = { - line: details.line, - column: details.column, - seenCR: details.seenCR - }; - - while (p < pos) { - ch = input.charAt(p); - if (ch === "\n") { - if (!details.seenCR) { details.line++; } - details.column = 1; - details.seenCR = false; - } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") { - details.line++; - details.column = 1; - details.seenCR = true; - } else { - details.column++; - details.seenCR = false; - } - - p++; - } - - peg$posDetailsCache[pos] = details; - return details; - } - } - - function peg$computeLocation(startPos, endPos) { - var startPosDetails = peg$computePosDetails(startPos), - endPosDetails = peg$computePosDetails(endPos); - - return { - start: { - offset: startPos, - line: startPosDetails.line, - column: startPosDetails.column - }, - end: { - offset: endPos, - line: endPosDetails.line, - column: endPosDetails.column - } - }; - } - - function peg$fail(expected) { - if (peg$currPos < peg$maxFailPos) { return; } - - if (peg$currPos > peg$maxFailPos) { - peg$maxFailPos = peg$currPos; - peg$maxFailExpected = []; - } - - peg$maxFailExpected.push(expected); - } - - function peg$buildException(message, expected, found, location) { - function cleanupExpected(expected) { - var i = 1; - - expected.sort(function(a, b) { - if (a.description < b.description) { - return -1; - } else if (a.description > b.description) { - return 1; - } else { - return 0; - } - }); - - while (i < expected.length) { - if (expected[i - 1] === expected[i]) { - expected.splice(i, 1); - } else { - i++; - } - } - } - - function buildMessage(expected, found) { - function stringEscape(s) { - function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); } - - return s - .replace(/\\/g, '\\\\') - .replace(/"/g, '\\"') - .replace(/\x08/g, '\\b') - .replace(/\t/g, '\\t') - .replace(/\n/g, '\\n') - .replace(/\f/g, '\\f') - .replace(/\r/g, '\\r') - .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) - .replace(/[\x10-\x1F\x80-\xFF]/g, function(ch) { return '\\x' + hex(ch); }) - .replace(/[\u0100-\u0FFF]/g, function(ch) { return '\\u0' + hex(ch); }) - .replace(/[\u1000-\uFFFF]/g, function(ch) { return '\\u' + hex(ch); }); - } - - var expectedDescs = new Array(expected.length), - expectedDesc, foundDesc, i; - - for (i = 0; i < expected.length; i++) { - expectedDescs[i] = expected[i].description; - } - - expectedDesc = expected.length > 1 - ? expectedDescs.slice(0, -1).join(", ") - + " or " - + expectedDescs[expected.length - 1] - : expectedDescs[0]; - - foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input"; - - return "Expected " + expectedDesc + " but " + foundDesc + " found."; - } - - if (expected !== null) { - cleanupExpected(expected); - } - - return new peg$SyntaxError( - message !== null ? message : buildMessage(expected, found), - expected, - found, - location - ); - } - - function peg$parsestart() { - var s0; - - s0 = peg$parsemerged(); - - return s0; - } - - function peg$parsemerged() { - var s0, s1, s2, s3, s4, s5; - - s0 = peg$currPos; - s1 = peg$parseordered(); - if (s1 !== peg$FAILED) { - s2 = peg$parsesep(); - if (s2 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 44) { - s3 = peg$c0; - peg$currPos++; - } else { - s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c1); } - } - if (s3 !== peg$FAILED) { - s4 = peg$parsesep(); - if (s4 !== peg$FAILED) { - s5 = peg$parsemerged(); - if (s5 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c2(s1, s5); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parseordered(); - if (s1 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c3(s1); - } - s0 = s1; - } - - return s0; - } - - function peg$parseordered() { - var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13; - - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 91) { - s1 = peg$c4; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c5); } - } - if (s1 !== peg$FAILED) { - s2 = peg$parsesep(); - if (s2 !== peg$FAILED) { - s3 = peg$parsefiltered(); - if (s3 !== peg$FAILED) { - s4 = peg$parsesep(); - if (s4 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 44) { - s5 = peg$c0; - peg$currPos++; - } else { - s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c1); } - } - if (s5 !== peg$FAILED) { - s6 = peg$parsesep(); - if (s6 !== peg$FAILED) { - s7 = peg$parsefiltered(); - if (s7 !== peg$FAILED) { - s8 = peg$parsesep(); - if (s8 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 93) { - s9 = peg$c6; - peg$currPos++; - } else { - s9 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c7); } - } - if (s9 !== peg$FAILED) { - s10 = peg$parsesep(); - if (s10 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 62) { - s11 = peg$c8; - peg$currPos++; - } else { - s11 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c9); } - } - if (s11 !== peg$FAILED) { - s12 = peg$parsesep(); - if (s12 !== peg$FAILED) { - s13 = peg$parseordered(); - if (s13 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c10(s3, s7, s13); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - if (s0 === peg$FAILED) { - s0 = peg$parsefiltered(); - } - - return s0; - } - - function peg$parsefiltered() { - var s0, s1, s2, s3; - - s0 = peg$currPos; - s1 = peg$parsestream(); - if (s1 !== peg$FAILED) { - s2 = []; - s3 = peg$parsefilter(); - if (s3 !== peg$FAILED) { - while (s3 !== peg$FAILED) { - s2.push(s3); - s3 = peg$parsefilter(); - } - } else { - s2 = peg$FAILED; - } - if (s2 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c11(s1, s2); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parsestream(); - if (s1 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c12(s1); - } - s0 = s1; - } - - return s0; - } - - function peg$parsestream() { - var s0, s1, s2, s3, s4; - - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 40) { - s1 = peg$c13; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c14); } - } - if (s1 !== peg$FAILED) { - s2 = peg$parsemerged(); - if (s2 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 41) { - s3 = peg$c15; - peg$currPos++; - } else { - s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c16); } - } - if (s3 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c17(s2); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 64) { - s1 = peg$c18; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c19); } - } - if (s1 !== peg$FAILED) { - s2 = peg$parsename(); - if (s2 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 58) { - s3 = peg$c20; - peg$currPos++; - } else { - s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c21); } - } - if (s3 !== peg$FAILED) { - s4 = peg$parseeventType(); - if (s4 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c22(s2, s4); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parsemarkType(); - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 58) { - s2 = peg$c20; - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c21); } - } - if (s2 !== peg$FAILED) { - s3 = peg$parseeventType(); - if (s3 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c23(s1, s3); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parsecss(); - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 58) { - s2 = peg$c20; - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c21); } - } - if (s2 !== peg$FAILED) { - s3 = peg$parseeventType(); - if (s3 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c24(s1, s3); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parseeventType(); - if (s1 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c25(s1); - } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parsename(); - if (s1 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c26(s1); - } - s0 = s1; - } - } - } - } - } - - return s0; - } - - function peg$parsemarkType() { - var s0; - - if (input.substr(peg$currPos, 4) === peg$c27) { - s0 = peg$c27; - peg$currPos += 4; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c28); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 6) === peg$c29) { - s0 = peg$c29; - peg$currPos += 6; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c30); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 4) === peg$c31) { - s0 = peg$c31; - peg$currPos += 4; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c32); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 3) === peg$c33) { - s0 = peg$c33; - peg$currPos += 3; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c34); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 4) === peg$c35) { - s0 = peg$c35; - peg$currPos += 4; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c36); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 4) === peg$c37) { - s0 = peg$c37; - peg$currPos += 4; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c38); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 4) === peg$c39) { - s0 = peg$c39; - peg$currPos += 4; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c40); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 5) === peg$c41) { - s0 = peg$c41; - peg$currPos += 5; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c42); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 4) === peg$c43) { - s0 = peg$c43; - peg$currPos += 4; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c44); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 5) === peg$c45) { - s0 = peg$c45; - peg$currPos += 5; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c46); } - } - } - } - } - } - } - } - } - } - } - - return s0; - } - - function peg$parseeventType() { - var s0; - - if (input.substr(peg$currPos, 9) === peg$c47) { - s0 = peg$c47; - peg$currPos += 9; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c48); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 7) === peg$c49) { - s0 = peg$c49; - peg$currPos += 7; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c50); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 5) === peg$c51) { - s0 = peg$c51; - peg$currPos += 5; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c52); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 8) === peg$c53) { - s0 = peg$c53; - peg$currPos += 8; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c54); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 5) === peg$c55) { - s0 = peg$c55; - peg$currPos += 5; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c56); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 7) === peg$c57) { - s0 = peg$c57; - peg$currPos += 7; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c58); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 8) === peg$c59) { - s0 = peg$c59; - peg$currPos += 8; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c60); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 5) === peg$c61) { - s0 = peg$c61; - peg$currPos += 5; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c62); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 10) === peg$c63) { - s0 = peg$c63; - peg$currPos += 10; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c64); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 9) === peg$c65) { - s0 = peg$c65; - peg$currPos += 9; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c66); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 8) === peg$c67) { - s0 = peg$c67; - peg$currPos += 8; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c68); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 9) === peg$c69) { - s0 = peg$c69; - peg$currPos += 9; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c70); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 10) === peg$c71) { - s0 = peg$c71; - peg$currPos += 10; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c72); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 10) === peg$c73) { - s0 = peg$c73; - peg$currPos += 10; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c74); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 9) === peg$c75) { - s0 = peg$c75; - peg$currPos += 9; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c76); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 8) === peg$c77) { - s0 = peg$c77; - peg$currPos += 8; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c78); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 9) === peg$c79) { - s0 = peg$c79; - peg$currPos += 9; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c80); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 8) === peg$c81) { - s0 = peg$c81; - peg$currPos += 8; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c82); } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 9) === peg$c83) { - s0 = peg$c83; - peg$currPos += 9; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c84); } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - - return s0; - } - - function peg$parsefilter() { - var s0, s1, s2, s3; - - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 91) { - s1 = peg$c4; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c5); } - } - if (s1 !== peg$FAILED) { - s2 = peg$parseexpr(); - if (s2 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 93) { - s3 = peg$c6; - peg$currPos++; - } else { - s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c7); } - } - if (s3 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c85(s2); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - return s0; - } - - function peg$parsename() { - var s0, s1, s2; - - s0 = peg$currPos; - s1 = []; - if (peg$c86.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c87); } - } - if (s2 !== peg$FAILED) { - while (s2 !== peg$FAILED) { - s1.push(s2); - if (peg$c86.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c87); } - } - } - } else { - s1 = peg$FAILED; - } - if (s1 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c88(s1); - } - s0 = s1; - - return s0; - } - - function peg$parsecss() { - var s0, s1, s2; - - s0 = peg$currPos; - s1 = []; - if (peg$c89.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c90); } - } - if (s2 !== peg$FAILED) { - while (s2 !== peg$FAILED) { - s1.push(s2); - if (peg$c89.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c90); } - } - } - } else { - s1 = peg$FAILED; - } - if (s1 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c91(s1); - } - s0 = s1; - - return s0; - } - - function peg$parseexpr() { - var s0, s1, s2; - - s0 = peg$currPos; - s1 = []; - if (peg$c92.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c93); } - } - if (s2 !== peg$FAILED) { - while (s2 !== peg$FAILED) { - s1.push(s2); - if (peg$c92.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c93); } - } - } - } else { - s1 = peg$FAILED; - } - if (s1 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c94(s1); - } - s0 = s1; - - return s0; - } - - function peg$parsesep() { - var s0, s1; - - s0 = []; - if (peg$c95.test(input.charAt(peg$currPos))) { - s1 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c96); } - } - while (s1 !== peg$FAILED) { - s0.push(s1); - if (peg$c95.test(input.charAt(peg$currPos))) { - s1 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c96); } - } - } - - return s0; - } - - peg$result = peg$startRuleFunction(); - - if (peg$result !== peg$FAILED && peg$currPos === input.length) { - return peg$result; - } else { - if (peg$result !== peg$FAILED && peg$currPos < input.length) { - peg$fail({ type: "end", description: "end of input" }); - } - - throw peg$buildException( - null, - peg$maxFailExpected, - peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, - peg$maxFailPos < input.length - ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) - : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) - ); - } - } - - return { - SyntaxError: peg$SyntaxError, - parse: peg$parse - }; -})(); - -},{}],43:[function(require,module,exports){ -function toMap(list) { - var map = {}, i, n; - for (i=0, n=list.length; i 0) { - return id; - } - if (constants.hasOwnProperty(id)) { - return constants[id]; - } - if (idWhiteList) { - if (idWhiteList.hasOwnProperty(id)) { - return id; - } else { - globals[id] = 1; - return lookupGlobal(id); - } - } - if (idBlackList && idBlackList.hasOwnProperty(id)) { - throw new Error('Illegal identifier: ' + id); - } - return id; - }, - 'Program': function(n) { - return n.body.map(codegen).join('\n'); - }, - 'MemberExpression': function(n) { - var d = !n.computed; - var o = codegen(n.object); - if (d) memberDepth += 1; - var p = codegen(n.property); - if (o === FIELD_VAR) { fields[p] = 1; } // HACKish... - if (d) memberDepth -= 1; - return o + (d ? '.'+p : '['+p+']'); - }, - 'CallExpression': function(n) { - if (n.callee.type !== 'Identifier') { - throw new Error('Illegal callee type: ' + n.callee.type); - } - var callee = n.callee.name; - var args = n.arguments; - var fn = functions.hasOwnProperty(callee) && functions[callee]; - if (!fn) throw new Error('Unrecognized function: ' + callee); - return fn instanceof Function ? - fn(args, globals, fields, dataSources) : - fn + '(' + args.map(codegen).join(',') + ')'; - }, - 'ArrayExpression': function(n) { - return '[' + n.elements.map(codegen).join(',') + ']'; - }, - 'BinaryExpression': function(n) { - return '(' + codegen(n.left) + n.operator + codegen(n.right) + ')'; - }, - 'UnaryExpression': function(n) { - return '(' + n.operator + codegen(n.argument) + ')'; - }, - 'ConditionalExpression': function(n) { - return '(' + codegen(n.test) + - '?' + codegen(n.consequent) + - ':' + codegen(n.alternate) + - ')'; - }, - 'LogicalExpression': function(n) { - return '(' + codegen(n.left) + n.operator + codegen(n.right) + ')'; - }, - 'ObjectExpression': function(n) { - return '{' + n.properties.map(codegen).join(',') + '}'; - }, - 'Property': function(n) { - memberDepth += 1; - var k = codegen(n.key); - memberDepth -= 1; - return k + ':' + codegen(n.value); - }, - 'ExpressionStatement': function(n) { - return codegen(n.expression); - } - }; - - codegen_wrap.functions = functions; - codegen_wrap.functionDefs = functionDefs; - codegen_wrap.constants = constants; - return codegen_wrap; -}; - -},{"./constants":44,"./functions":45}],44:[function(require,module,exports){ -module.exports = { - 'NaN': 'NaN', - 'E': 'Math.E', - 'LN2': 'Math.LN2', - 'LN10': 'Math.LN10', - 'LOG2E': 'Math.LOG2E', - 'LOG10E': 'Math.LOG10E', - 'PI': 'Math.PI', - 'SQRT1_2': 'Math.SQRT1_2', - 'SQRT2': 'Math.SQRT2' -}; -},{}],45:[function(require,module,exports){ -module.exports = function(codegen) { - - function fncall(name, args, cast, type) { - var obj = codegen(args[0]); - if (cast) { - obj = cast + '(' + obj + ')'; - if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')'; - } - return obj + '.' + name + (type < 0 ? '' : type === 0 ? - '()' : - '(' + args.slice(1).map(codegen).join(',') + ')'); - } - - function fn(name, cast, type) { - return function(args) { - return fncall(name, args, cast, type); - }; - } - - var DATE = 'new Date', - STRING = 'String', - REGEXP = 'RegExp'; - - return { - // MATH functions - 'isNaN': 'isNaN', - 'isFinite': 'isFinite', - 'abs': 'Math.abs', - 'acos': 'Math.acos', - 'asin': 'Math.asin', - 'atan': 'Math.atan', - 'atan2': 'Math.atan2', - 'ceil': 'Math.ceil', - 'cos': 'Math.cos', - 'exp': 'Math.exp', - 'floor': 'Math.floor', - 'log': 'Math.log', - 'max': 'Math.max', - 'min': 'Math.min', - 'pow': 'Math.pow', - 'random': 'Math.random', - 'round': 'Math.round', - 'sin': 'Math.sin', - 'sqrt': 'Math.sqrt', - 'tan': 'Math.tan', - - 'clamp': function(args) { - if (args.length < 3) - throw new Error('Missing arguments to clamp function.'); - if (args.length > 3) - throw new Error('Too many arguments to clamp function.'); - var a = args.map(codegen); - return 'Math.max('+a[1]+', Math.min('+a[2]+','+a[0]+'))'; - }, - - // DATE functions - 'now': 'Date.now', - 'utc': 'Date.UTC', - 'datetime': DATE, - 'date': fn('getDate', DATE, 0), - 'day': fn('getDay', DATE, 0), - 'year': fn('getFullYear', DATE, 0), - 'month': fn('getMonth', DATE, 0), - 'hours': fn('getHours', DATE, 0), - 'minutes': fn('getMinutes', DATE, 0), - 'seconds': fn('getSeconds', DATE, 0), - 'milliseconds': fn('getMilliseconds', DATE, 0), - 'time': fn('getTime', DATE, 0), - 'timezoneoffset': fn('getTimezoneOffset', DATE, 0), - 'utcdate': fn('getUTCDate', DATE, 0), - 'utcday': fn('getUTCDay', DATE, 0), - 'utcyear': fn('getUTCFullYear', DATE, 0), - 'utcmonth': fn('getUTCMonth', DATE, 0), - 'utchours': fn('getUTCHours', DATE, 0), - 'utcminutes': fn('getUTCMinutes', DATE, 0), - 'utcseconds': fn('getUTCSeconds', DATE, 0), - 'utcmilliseconds': fn('getUTCMilliseconds', DATE, 0), - - // shared sequence functions - 'length': fn('length', null, -1), - 'indexof': fn('indexOf', null), - 'lastindexof': fn('lastIndexOf', null), - - // STRING functions - 'parseFloat': 'parseFloat', - 'parseInt': 'parseInt', - 'upper': fn('toUpperCase', STRING, 0), - 'lower': fn('toLowerCase', STRING, 0), - 'slice': fn('slice', STRING), - 'substring': fn('substring', STRING), - 'replace': fn('replace', STRING), - - // REGEXP functions - 'regexp': REGEXP, - 'test': fn('test', REGEXP), - - // Control Flow functions - 'if': function(args) { - if (args.length < 3) - throw new Error('Missing arguments to if function.'); - if (args.length > 3) - throw new Error('Too many arguments to if function.'); - var a = args.map(codegen); - return a[0]+'?'+a[1]+':'+a[2]; - } - }; -}; - -},{}],46:[function(require,module,exports){ -var parser = require('./parser'), - codegen = require('./codegen'); - -var expr = module.exports = { - parse: function(input, opt) { - return parser.parse('('+input+')', opt); - }, - code: function(opt) { - return codegen(opt); - }, - compiler: function(args, opt) { - args = args.slice(); - var generator = codegen(opt), - len = args.length, - compile = function(str) { - var value = generator(expr.parse(str)); - args[len] = '"use strict"; return (' + value.code + ');'; - var fn = Function.apply(null, args); - value.fn = (args.length > 8) ? - function() { return fn.apply(value, arguments); } : - function(a, b, c, d, e, f, g) { - return fn.call(value, a, b, c, d, e, f, g); - }; // call often faster than apply, use if args low enough - return value; - }; - compile.codegen = generator; - return compile; - }, - functions: require('./functions'), - constants: require('./constants') -}; -},{"./codegen":43,"./constants":44,"./functions":45,"./parser":47}],47:[function(require,module,exports){ -/* - The following expression parser is based on Esprima (http://esprima.org/). - Original header comment and license for Esprima is included here: - - Copyright (C) 2013 Ariya Hidayat - Copyright (C) 2013 Thaddee Tyl - Copyright (C) 2013 Mathias Bynens - Copyright (C) 2012 Ariya Hidayat - Copyright (C) 2012 Mathias Bynens - Copyright (C) 2012 Joost-Wim Boekesteijn - Copyright (C) 2012 Kris Kowal - Copyright (C) 2012 Yusuke Suzuki - Copyright (C) 2012 Arpad Borsos - Copyright (C) 2011 Ariya Hidayat - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -/* istanbul ignore next */ -module.exports = (function() { - 'use strict'; - - var Token, - TokenName, - Syntax, - PropertyKind, - Messages, - Regex, - source, - strict, - index, - lineNumber, - lineStart, - length, - lookahead, - state, - extra; - - Token = { - BooleanLiteral: 1, - EOF: 2, - Identifier: 3, - Keyword: 4, - NullLiteral: 5, - NumericLiteral: 6, - Punctuator: 7, - StringLiteral: 8, - RegularExpression: 9 - }; - - TokenName = {}; - TokenName[Token.BooleanLiteral] = 'Boolean'; - TokenName[Token.EOF] = ''; - TokenName[Token.Identifier] = 'Identifier'; - TokenName[Token.Keyword] = 'Keyword'; - TokenName[Token.NullLiteral] = 'Null'; - TokenName[Token.NumericLiteral] = 'Numeric'; - TokenName[Token.Punctuator] = 'Punctuator'; - TokenName[Token.StringLiteral] = 'String'; - TokenName[Token.RegularExpression] = 'RegularExpression'; - - Syntax = { - AssignmentExpression: 'AssignmentExpression', - ArrayExpression: 'ArrayExpression', - BinaryExpression: 'BinaryExpression', - CallExpression: 'CallExpression', - ConditionalExpression: 'ConditionalExpression', - ExpressionStatement: 'ExpressionStatement', - Identifier: 'Identifier', - Literal: 'Literal', - LogicalExpression: 'LogicalExpression', - MemberExpression: 'MemberExpression', - ObjectExpression: 'ObjectExpression', - Program: 'Program', - Property: 'Property', - UnaryExpression: 'UnaryExpression' - }; - - PropertyKind = { - Data: 1, - Get: 2, - Set: 4 - }; - - // Error messages should be identical to V8. - Messages = { - UnexpectedToken: 'Unexpected token %0', - UnexpectedNumber: 'Unexpected number', - UnexpectedString: 'Unexpected string', - UnexpectedIdentifier: 'Unexpected identifier', - UnexpectedReserved: 'Unexpected reserved word', - UnexpectedEOS: 'Unexpected end of input', - NewlineAfterThrow: 'Illegal newline after throw', - InvalidRegExp: 'Invalid regular expression', - UnterminatedRegExp: 'Invalid regular expression: missing /', - InvalidLHSInAssignment: 'Invalid left-hand side in assignment', - InvalidLHSInForIn: 'Invalid left-hand side in for-in', - MultipleDefaultsInSwitch: 'More than one default clause in switch statement', - NoCatchOrFinally: 'Missing catch or finally after try', - UnknownLabel: 'Undefined label \'%0\'', - Redeclaration: '%0 \'%1\' has already been declared', - IllegalContinue: 'Illegal continue statement', - IllegalBreak: 'Illegal break statement', - IllegalReturn: 'Illegal return statement', - StrictModeWith: 'Strict mode code may not include a with statement', - StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode', - StrictVarName: 'Variable name may not be eval or arguments in strict mode', - StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode', - StrictParamDupe: 'Strict mode function may not have duplicate parameter names', - StrictFunctionName: 'Function name may not be eval or arguments in strict mode', - StrictOctalLiteral: 'Octal literals are not allowed in strict mode.', - StrictDelete: 'Delete of an unqualified identifier in strict mode.', - StrictDuplicateProperty: 'Duplicate data property in object literal not allowed in strict mode', - AccessorDataProperty: 'Object literal may not have data and accessor property with the same name', - AccessorGetSet: 'Object literal may not have multiple get/set accessors with the same name', - StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode', - StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode', - StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode', - StrictReservedWord: 'Use of future reserved word in strict mode' - }; - - // See also tools/generate-unicode-regex.py. - Regex = { - NonAsciiIdentifierStart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]'), - NonAsciiIdentifierPart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]') - }; - - // Ensure the condition is true, otherwise throw an error. - // This is only to have a better contract semantic, i.e. another safety net - // to catch a logic error. The condition shall be fulfilled in normal case. - // Do NOT use this to enforce a certain condition on any user input. - - function assert(condition, message) { - if (!condition) { - throw new Error('ASSERT: ' + message); - } - } - - function isDecimalDigit(ch) { - return (ch >= 0x30 && ch <= 0x39); // 0..9 - } - - function isHexDigit(ch) { - return '0123456789abcdefABCDEF'.indexOf(ch) >= 0; - } - - function isOctalDigit(ch) { - return '01234567'.indexOf(ch) >= 0; - } - - // 7.2 White Space - - function isWhiteSpace(ch) { - return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) || - (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0); - } - - // 7.3 Line Terminators - - function isLineTerminator(ch) { - return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029); - } - - // 7.6 Identifier Names and Identifiers - - function isIdentifierStart(ch) { - return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore) - (ch >= 0x41 && ch <= 0x5A) || // A..Z - (ch >= 0x61 && ch <= 0x7A) || // a..z - (ch === 0x5C) || // \ (backslash) - ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch))); - } - - function isIdentifierPart(ch) { - return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore) - (ch >= 0x41 && ch <= 0x5A) || // A..Z - (ch >= 0x61 && ch <= 0x7A) || // a..z - (ch >= 0x30 && ch <= 0x39) || // 0..9 - (ch === 0x5C) || // \ (backslash) - ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch))); - } - - // 7.6.1.2 Future Reserved Words - - function isFutureReservedWord(id) { - switch (id) { - case 'class': - case 'enum': - case 'export': - case 'extends': - case 'import': - case 'super': - return true; - default: - return false; - } - } - - function isStrictModeReservedWord(id) { - switch (id) { - case 'implements': - case 'interface': - case 'package': - case 'private': - case 'protected': - case 'public': - case 'static': - case 'yield': - case 'let': - return true; - default: - return false; - } - } - - // 7.6.1.1 Keywords - - function isKeyword(id) { - if (strict && isStrictModeReservedWord(id)) { - return true; - } - - // 'const' is specialized as Keyword in V8. - // 'yield' and 'let' are for compatiblity with SpiderMonkey and ES.next. - // Some others are from future reserved words. - - switch (id.length) { - case 2: - return (id === 'if') || (id === 'in') || (id === 'do'); - case 3: - return (id === 'var') || (id === 'for') || (id === 'new') || - (id === 'try') || (id === 'let'); - case 4: - return (id === 'this') || (id === 'else') || (id === 'case') || - (id === 'void') || (id === 'with') || (id === 'enum'); - case 5: - return (id === 'while') || (id === 'break') || (id === 'catch') || - (id === 'throw') || (id === 'const') || (id === 'yield') || - (id === 'class') || (id === 'super'); - case 6: - return (id === 'return') || (id === 'typeof') || (id === 'delete') || - (id === 'switch') || (id === 'export') || (id === 'import'); - case 7: - return (id === 'default') || (id === 'finally') || (id === 'extends'); - case 8: - return (id === 'function') || (id === 'continue') || (id === 'debugger'); - case 10: - return (id === 'instanceof'); - default: - return false; - } - } - - function skipComment() { - var ch, start; - - start = (index === 0); - while (index < length) { - ch = source.charCodeAt(index); - - if (isWhiteSpace(ch)) { - ++index; - } else if (isLineTerminator(ch)) { - ++index; - if (ch === 0x0D && source.charCodeAt(index) === 0x0A) { - ++index; - } - ++lineNumber; - lineStart = index; - start = true; - } else { - break; - } - } - } - - function scanHexEscape(prefix) { - var i, len, ch, code = 0; - - len = (prefix === 'u') ? 4 : 2; - for (i = 0; i < len; ++i) { - if (index < length && isHexDigit(source[index])) { - ch = source[index++]; - code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); - } else { - return ''; - } - } - return String.fromCharCode(code); - } - - function scanUnicodeCodePointEscape() { - var ch, code, cu1, cu2; - - ch = source[index]; - code = 0; - - // At least, one hex digit is required. - if (ch === '}') { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - while (index < length) { - ch = source[index++]; - if (!isHexDigit(ch)) { - break; - } - code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); - } - - if (code > 0x10FFFF || ch !== '}') { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - // UTF-16 Encoding - if (code <= 0xFFFF) { - return String.fromCharCode(code); - } - cu1 = ((code - 0x10000) >> 10) + 0xD800; - cu2 = ((code - 0x10000) & 1023) + 0xDC00; - return String.fromCharCode(cu1, cu2); - } - - function getEscapedIdentifier() { - var ch, id; - - ch = source.charCodeAt(index++); - id = String.fromCharCode(ch); - - // '\u' (U+005C, U+0075) denotes an escaped character. - if (ch === 0x5C) { - if (source.charCodeAt(index) !== 0x75) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - ++index; - ch = scanHexEscape('u'); - if (!ch || ch === '\\' || !isIdentifierStart(ch.charCodeAt(0))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - id = ch; - } - - while (index < length) { - ch = source.charCodeAt(index); - if (!isIdentifierPart(ch)) { - break; - } - ++index; - id += String.fromCharCode(ch); - - // '\u' (U+005C, U+0075) denotes an escaped character. - if (ch === 0x5C) { - id = id.substr(0, id.length - 1); - if (source.charCodeAt(index) !== 0x75) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - ++index; - ch = scanHexEscape('u'); - if (!ch || ch === '\\' || !isIdentifierPart(ch.charCodeAt(0))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - id += ch; - } - } - - return id; - } - - function getIdentifier() { - var start, ch; - - start = index++; - while (index < length) { - ch = source.charCodeAt(index); - if (ch === 0x5C) { - // Blackslash (U+005C) marks Unicode escape sequence. - index = start; - return getEscapedIdentifier(); - } - if (isIdentifierPart(ch)) { - ++index; - } else { - break; - } - } - - return source.slice(start, index); - } - - function scanIdentifier() { - var start, id, type; - - start = index; - - // Backslash (U+005C) starts an escaped character. - id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier(); - - // There is no keyword or literal with only one character. - // Thus, it must be an identifier. - if (id.length === 1) { - type = Token.Identifier; - } else if (isKeyword(id)) { - type = Token.Keyword; - } else if (id === 'null') { - type = Token.NullLiteral; - } else if (id === 'true' || id === 'false') { - type = Token.BooleanLiteral; - } else { - type = Token.Identifier; - } - - return { - type: type, - value: id, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // 7.7 Punctuators - - function scanPunctuator() { - var start = index, - code = source.charCodeAt(index), - code2, - ch1 = source[index], - ch2, - ch3, - ch4; - - switch (code) { - - // Check for most common single-character punctuators. - case 0x2E: // . dot - case 0x28: // ( open bracket - case 0x29: // ) close bracket - case 0x3B: // ; semicolon - case 0x2C: // , comma - case 0x7B: // { open curly brace - case 0x7D: // } close curly brace - case 0x5B: // [ - case 0x5D: // ] - case 0x3A: // : - case 0x3F: // ? - case 0x7E: // ~ - ++index; - if (extra.tokenize) { - if (code === 0x28) { - extra.openParenToken = extra.tokens.length; - } else if (code === 0x7B) { - extra.openCurlyToken = extra.tokens.length; - } - } - return { - type: Token.Punctuator, - value: String.fromCharCode(code), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - - default: - code2 = source.charCodeAt(index + 1); - - // '=' (U+003D) marks an assignment or comparison operator. - if (code2 === 0x3D) { - switch (code) { - case 0x2B: // + - case 0x2D: // - - case 0x2F: // / - case 0x3C: // < - case 0x3E: // > - case 0x5E: // ^ - case 0x7C: // | - case 0x25: // % - case 0x26: // & - case 0x2A: // * - index += 2; - return { - type: Token.Punctuator, - value: String.fromCharCode(code) + String.fromCharCode(code2), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - - case 0x21: // ! - case 0x3D: // = - index += 2; - - // !== and === - if (source.charCodeAt(index) === 0x3D) { - ++index; - } - return { - type: Token.Punctuator, - value: source.slice(start, index), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - } - } - - // 4-character punctuator: >>>= - - ch4 = source.substr(index, 4); - - if (ch4 === '>>>=') { - index += 4; - return { - type: Token.Punctuator, - value: ch4, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // 3-character punctuators: === !== >>> <<= >>= - - ch3 = ch4.substr(0, 3); - - if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') { - index += 3; - return { - type: Token.Punctuator, - value: ch3, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // Other 2-character punctuators: ++ -- << >> && || - ch2 = ch3.substr(0, 2); - - if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') { - index += 2; - return { - type: Token.Punctuator, - value: ch2, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // 1-character punctuators: < > = ! + - * % & | ^ / - - if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) { - ++index; - return { - type: Token.Punctuator, - value: ch1, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - // 7.8.3 Numeric Literals - - function scanHexLiteral(start) { - var number = ''; - - while (index < length) { - if (!isHexDigit(source[index])) { - break; - } - number += source[index++]; - } - - if (number.length === 0) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - if (isIdentifierStart(source.charCodeAt(index))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.NumericLiteral, - value: parseInt('0x' + number, 16), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - function scanOctalLiteral(start) { - var number = '0' + source[index++]; - while (index < length) { - if (!isOctalDigit(source[index])) { - break; - } - number += source[index++]; - } - - if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.NumericLiteral, - value: parseInt(number, 8), - octal: true, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - function scanNumericLiteral() { - var number, start, ch; - - ch = source[index]; - assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), - 'Numeric literal must start with a decimal digit or a decimal point'); - - start = index; - number = ''; - if (ch !== '.') { - number = source[index++]; - ch = source[index]; - - // Hex number starts with '0x'. - // Octal number starts with '0'. - if (number === '0') { - if (ch === 'x' || ch === 'X') { - ++index; - return scanHexLiteral(start); - } - if (isOctalDigit(ch)) { - return scanOctalLiteral(start); - } - - // decimal number starts with '0' such as '09' is illegal. - if (ch && isDecimalDigit(ch.charCodeAt(0))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - } - - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - ch = source[index]; - } - - if (ch === '.') { - number += source[index++]; - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - ch = source[index]; - } - - if (ch === 'e' || ch === 'E') { - number += source[index++]; - - ch = source[index]; - if (ch === '+' || ch === '-') { - number += source[index++]; - } - if (isDecimalDigit(source.charCodeAt(index))) { - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - } else { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - } - - if (isIdentifierStart(source.charCodeAt(index))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.NumericLiteral, - value: parseFloat(number), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // 7.8.4 String Literals - - function scanStringLiteral() { - var str = '', quote, start, ch, code, unescaped, restore, octal = false, startLineNumber, startLineStart; - startLineNumber = lineNumber; - startLineStart = lineStart; - - quote = source[index]; - assert((quote === '\'' || quote === '"'), - 'String literal must starts with a quote'); - - start = index; - ++index; - - while (index < length) { - ch = source[index++]; - - if (ch === quote) { - quote = ''; - break; - } else if (ch === '\\') { - ch = source[index++]; - if (!ch || !isLineTerminator(ch.charCodeAt(0))) { - switch (ch) { - case 'u': - case 'x': - if (source[index] === '{') { - ++index; - str += scanUnicodeCodePointEscape(); - } else { - restore = index; - unescaped = scanHexEscape(ch); - if (unescaped) { - str += unescaped; - } else { - index = restore; - str += ch; - } - } - break; - case 'n': - str += '\n'; - break; - case 'r': - str += '\r'; - break; - case 't': - str += '\t'; - break; - case 'b': - str += '\b'; - break; - case 'f': - str += '\f'; - break; - case 'v': - str += '\x0B'; - break; - - default: - if (isOctalDigit(ch)) { - code = '01234567'.indexOf(ch); - - // \0 is not octal escape sequence - if (code !== 0) { - octal = true; - } - - if (index < length && isOctalDigit(source[index])) { - octal = true; - code = code * 8 + '01234567'.indexOf(source[index++]); - - // 3 digits are only allowed when string starts - // with 0, 1, 2, 3 - if ('0123'.indexOf(ch) >= 0 && - index < length && - isOctalDigit(source[index])) { - code = code * 8 + '01234567'.indexOf(source[index++]); - } - } - str += String.fromCharCode(code); - } else { - str += ch; - } - break; - } - } else { - ++lineNumber; - if (ch === '\r' && source[index] === '\n') { - ++index; - } - lineStart = index; - } - } else if (isLineTerminator(ch.charCodeAt(0))) { - break; - } else { - str += ch; - } - } - - if (quote !== '') { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.StringLiteral, - value: str, - octal: octal, - startLineNumber: startLineNumber, - startLineStart: startLineStart, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - function testRegExp(pattern, flags) { - var tmp = pattern, - value; - - if (flags.indexOf('u') >= 0) { - // Replace each astral symbol and every Unicode code point - // escape sequence with a single ASCII symbol to avoid throwing on - // regular expressions that are only valid in combination with the - // `/u` flag. - // Note: replacing with the ASCII symbol `x` might cause false - // negatives in unlikely scenarios. For example, `[\u{61}-b]` is a - // perfectly valid pattern that is equivalent to `[a-b]`, but it - // would be replaced by `[x-b]` which throws an error. - tmp = tmp - .replace(/\\u\{([0-9a-fA-F]+)\}/g, function ($0, $1) { - if (parseInt($1, 16) <= 0x10FFFF) { - return 'x'; - } - throwError({}, Messages.InvalidRegExp); - }) - .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, 'x'); - } - - // First, detect invalid regular expressions. - try { - value = new RegExp(tmp); - } catch (e) { - throwError({}, Messages.InvalidRegExp); - } - - // Return a regular expression object for this pattern-flag pair, or - // `null` in case the current environment doesn't support the flags it - // uses. - try { - return new RegExp(pattern, flags); - } catch (exception) { - return null; - } - } - - function scanRegExpBody() { - var ch, str, classMarker, terminated, body; - - ch = source[index]; - assert(ch === '/', 'Regular expression literal must start with a slash'); - str = source[index++]; - - classMarker = false; - terminated = false; - while (index < length) { - ch = source[index++]; - str += ch; - if (ch === '\\') { - ch = source[index++]; - // ECMA-262 7.8.5 - if (isLineTerminator(ch.charCodeAt(0))) { - throwError({}, Messages.UnterminatedRegExp); - } - str += ch; - } else if (isLineTerminator(ch.charCodeAt(0))) { - throwError({}, Messages.UnterminatedRegExp); - } else if (classMarker) { - if (ch === ']') { - classMarker = false; - } - } else { - if (ch === '/') { - terminated = true; - break; - } else if (ch === '[') { - classMarker = true; - } - } - } - - if (!terminated) { - throwError({}, Messages.UnterminatedRegExp); - } - - // Exclude leading and trailing slash. - body = str.substr(1, str.length - 2); - return { - value: body, - literal: str - }; - } - - function scanRegExpFlags() { - var ch, str, flags, restore; - - str = ''; - flags = ''; - while (index < length) { - ch = source[index]; - if (!isIdentifierPart(ch.charCodeAt(0))) { - break; - } - - ++index; - if (ch === '\\' && index < length) { - ch = source[index]; - if (ch === 'u') { - ++index; - restore = index; - ch = scanHexEscape('u'); - if (ch) { - flags += ch; - for (str += '\\u'; restore < index; ++restore) { - str += source[restore]; - } - } else { - index = restore; - flags += 'u'; - str += '\\u'; - } - throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL'); - } else { - str += '\\'; - throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - } else { - flags += ch; - str += ch; - } - } - - return { - value: flags, - literal: str - }; - } - - function scanRegExp() { - var start, body, flags, value; - - lookahead = null; - skipComment(); - start = index; - - body = scanRegExpBody(); - flags = scanRegExpFlags(); - value = testRegExp(body.value, flags.value); - - if (extra.tokenize) { - return { - type: Token.RegularExpression, - value: value, - regex: { - pattern: body.value, - flags: flags.value - }, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - return { - literal: body.literal + flags.literal, - value: value, - regex: { - pattern: body.value, - flags: flags.value - }, - start: start, - end: index - }; - } - - function collectRegex() { - var pos, loc, regex, token; - - skipComment(); - - pos = index; - loc = { - start: { - line: lineNumber, - column: index - lineStart - } - }; - - regex = scanRegExp(); - - loc.end = { - line: lineNumber, - column: index - lineStart - }; - - if (!extra.tokenize) { - // Pop the previous token, which is likely '/' or '/=' - if (extra.tokens.length > 0) { - token = extra.tokens[extra.tokens.length - 1]; - if (token.range[0] === pos && token.type === 'Punctuator') { - if (token.value === '/' || token.value === '/=') { - extra.tokens.pop(); - } - } - } - - extra.tokens.push({ - type: 'RegularExpression', - value: regex.literal, - regex: regex.regex, - range: [pos, index], - loc: loc - }); - } - - return regex; - } - - function isIdentifierName(token) { - return token.type === Token.Identifier || - token.type === Token.Keyword || - token.type === Token.BooleanLiteral || - token.type === Token.NullLiteral; - } - - function advanceSlash() { - var prevToken, - checkToken; - // Using the following algorithm: - // https://github.com/mozilla/sweet.js/wiki/design - prevToken = extra.tokens[extra.tokens.length - 1]; - if (!prevToken) { - // Nothing before that: it cannot be a division. - return collectRegex(); - } - if (prevToken.type === 'Punctuator') { - if (prevToken.value === ']') { - return scanPunctuator(); - } - if (prevToken.value === ')') { - checkToken = extra.tokens[extra.openParenToken - 1]; - if (checkToken && - checkToken.type === 'Keyword' && - (checkToken.value === 'if' || - checkToken.value === 'while' || - checkToken.value === 'for' || - checkToken.value === 'with')) { - return collectRegex(); - } - return scanPunctuator(); - } - if (prevToken.value === '}') { - // Dividing a function by anything makes little sense, - // but we have to check for that. - if (extra.tokens[extra.openCurlyToken - 3] && - extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') { - // Anonymous function. - checkToken = extra.tokens[extra.openCurlyToken - 4]; - if (!checkToken) { - return scanPunctuator(); - } - } else if (extra.tokens[extra.openCurlyToken - 4] && - extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') { - // Named function. - checkToken = extra.tokens[extra.openCurlyToken - 5]; - if (!checkToken) { - return collectRegex(); - } - } else { - return scanPunctuator(); - } - return scanPunctuator(); - } - return collectRegex(); - } - if (prevToken.type === 'Keyword' && prevToken.value !== 'this') { - return collectRegex(); - } - return scanPunctuator(); - } - - function advance() { - var ch; - - skipComment(); - - if (index >= length) { - return { - type: Token.EOF, - lineNumber: lineNumber, - lineStart: lineStart, - start: index, - end: index - }; - } - - ch = source.charCodeAt(index); - - if (isIdentifierStart(ch)) { - return scanIdentifier(); - } - - // Very common: ( and ) and ; - if (ch === 0x28 || ch === 0x29 || ch === 0x3B) { - return scanPunctuator(); - } - - // String literal starts with single quote (U+0027) or double quote (U+0022). - if (ch === 0x27 || ch === 0x22) { - return scanStringLiteral(); - } - - - // Dot (.) U+002E can also start a floating-point number, hence the need - // to check the next character. - if (ch === 0x2E) { - if (isDecimalDigit(source.charCodeAt(index + 1))) { - return scanNumericLiteral(); - } - return scanPunctuator(); - } - - if (isDecimalDigit(ch)) { - return scanNumericLiteral(); - } - - // Slash (/) U+002F can also start a regex. - if (extra.tokenize && ch === 0x2F) { - return advanceSlash(); - } - - return scanPunctuator(); - } - - function collectToken() { - var loc, token, value, entry; - - skipComment(); - loc = { - start: { - line: lineNumber, - column: index - lineStart - } - }; - - token = advance(); - loc.end = { - line: lineNumber, - column: index - lineStart - }; - - if (token.type !== Token.EOF) { - value = source.slice(token.start, token.end); - entry = { - type: TokenName[token.type], - value: value, - range: [token.start, token.end], - loc: loc - }; - if (token.regex) { - entry.regex = { - pattern: token.regex.pattern, - flags: token.regex.flags - }; - } - extra.tokens.push(entry); - } - - return token; - } - - function lex() { - var token; - - token = lookahead; - index = token.end; - lineNumber = token.lineNumber; - lineStart = token.lineStart; - - lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance(); - - index = token.end; - lineNumber = token.lineNumber; - lineStart = token.lineStart; - - return token; - } - - function peek() { - var pos, line, start; - - pos = index; - line = lineNumber; - start = lineStart; - lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance(); - index = pos; - lineNumber = line; - lineStart = start; - } - - function Position() { - this.line = lineNumber; - this.column = index - lineStart; - } - - function SourceLocation() { - this.start = new Position(); - this.end = null; - } - - function WrappingSourceLocation(startToken) { - if (startToken.type === Token.StringLiteral) { - this.start = { - line: startToken.startLineNumber, - column: startToken.start - startToken.startLineStart - }; - } else { - this.start = { - line: startToken.lineNumber, - column: startToken.start - startToken.lineStart - }; - } - this.end = null; - } - - function Node() { - // Skip comment. - index = lookahead.start; - if (lookahead.type === Token.StringLiteral) { - lineNumber = lookahead.startLineNumber; - lineStart = lookahead.startLineStart; - } else { - lineNumber = lookahead.lineNumber; - lineStart = lookahead.lineStart; - } - if (extra.range) { - this.range = [index, 0]; - } - if (extra.loc) { - this.loc = new SourceLocation(); - } - } - - function WrappingNode(startToken) { - if (extra.range) { - this.range = [startToken.start, 0]; - } - if (extra.loc) { - this.loc = new WrappingSourceLocation(startToken); - } - } - - WrappingNode.prototype = Node.prototype = { - - finish: function () { - if (extra.range) { - this.range[1] = index; - } - if (extra.loc) { - this.loc.end = new Position(); - if (extra.source) { - this.loc.source = extra.source; - } - } - }, - - finishArrayExpression: function (elements) { - this.type = Syntax.ArrayExpression; - this.elements = elements; - this.finish(); - return this; - }, - - finishAssignmentExpression: function (operator, left, right) { - this.type = Syntax.AssignmentExpression; - this.operator = operator; - this.left = left; - this.right = right; - this.finish(); - return this; - }, - - finishBinaryExpression: function (operator, left, right) { - this.type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression : Syntax.BinaryExpression; - this.operator = operator; - this.left = left; - this.right = right; - this.finish(); - return this; - }, - - finishCallExpression: function (callee, args) { - this.type = Syntax.CallExpression; - this.callee = callee; - this.arguments = args; - this.finish(); - return this; - }, - - finishConditionalExpression: function (test, consequent, alternate) { - this.type = Syntax.ConditionalExpression; - this.test = test; - this.consequent = consequent; - this.alternate = alternate; - this.finish(); - return this; - }, - - finishExpressionStatement: function (expression) { - this.type = Syntax.ExpressionStatement; - this.expression = expression; - this.finish(); - return this; - }, - - finishIdentifier: function (name) { - this.type = Syntax.Identifier; - this.name = name; - this.finish(); - return this; - }, - - finishLiteral: function (token) { - this.type = Syntax.Literal; - this.value = token.value; - this.raw = source.slice(token.start, token.end); - if (token.regex) { - if (this.raw == '//') { - this.raw = '/(?:)/'; - } - this.regex = token.regex; - } - this.finish(); - return this; - }, - - finishMemberExpression: function (accessor, object, property) { - this.type = Syntax.MemberExpression; - this.computed = accessor === '['; - this.object = object; - this.property = property; - this.finish(); - return this; - }, - - finishObjectExpression: function (properties) { - this.type = Syntax.ObjectExpression; - this.properties = properties; - this.finish(); - return this; - }, - - finishProgram: function (body) { - this.type = Syntax.Program; - this.body = body; - this.finish(); - return this; - }, - - finishProperty: function (kind, key, value) { - this.type = Syntax.Property; - this.key = key; - this.value = value; - this.kind = kind; - this.finish(); - return this; - }, - - finishUnaryExpression: function (operator, argument) { - this.type = Syntax.UnaryExpression; - this.operator = operator; - this.argument = argument; - this.prefix = true; - this.finish(); - return this; - } - }; - - // Return true if there is a line terminator before the next token. - - function peekLineTerminator() { - var pos, line, start, found; - - pos = index; - line = lineNumber; - start = lineStart; - skipComment(); - found = lineNumber !== line; - index = pos; - lineNumber = line; - lineStart = start; - - return found; - } - - // Throw an exception - - function throwError(token, messageFormat) { - var error, - args = Array.prototype.slice.call(arguments, 2), - msg = messageFormat.replace( - /%(\d)/g, - function (whole, index) { - assert(index < args.length, 'Message reference must be in range'); - return args[index]; - } - ); - - if (typeof token.lineNumber === 'number') { - error = new Error('Line ' + token.lineNumber + ': ' + msg); - error.index = token.start; - error.lineNumber = token.lineNumber; - error.column = token.start - lineStart + 1; - } else { - error = new Error('Line ' + lineNumber + ': ' + msg); - error.index = index; - error.lineNumber = lineNumber; - error.column = index - lineStart + 1; - } - - error.description = msg; - throw error; - } - - function throwErrorTolerant() { - try { - throwError.apply(null, arguments); - } catch (e) { - if (extra.errors) { - extra.errors.push(e); - } else { - throw e; - } - } - } - - - // Throw an exception because of the token. - - function throwUnexpected(token) { - if (token.type === Token.EOF) { - throwError(token, Messages.UnexpectedEOS); - } - - if (token.type === Token.NumericLiteral) { - throwError(token, Messages.UnexpectedNumber); - } - - if (token.type === Token.StringLiteral) { - throwError(token, Messages.UnexpectedString); - } - - if (token.type === Token.Identifier) { - throwError(token, Messages.UnexpectedIdentifier); - } - - if (token.type === Token.Keyword) { - if (isFutureReservedWord(token.value)) { - throwError(token, Messages.UnexpectedReserved); - } else if (strict && isStrictModeReservedWord(token.value)) { - throwErrorTolerant(token, Messages.StrictReservedWord); - return; - } - throwError(token, Messages.UnexpectedToken, token.value); - } - - // BooleanLiteral, NullLiteral, or Punctuator. - throwError(token, Messages.UnexpectedToken, token.value); - } - - // Expect the next token to match the specified punctuator. - // If not, an exception will be thrown. - - function expect(value) { - var token = lex(); - if (token.type !== Token.Punctuator || token.value !== value) { - throwUnexpected(token); - } - } - - /** - * @name expectTolerant - * @description Quietly expect the given token value when in tolerant mode, otherwise delegates - * to expect(value) - * @param {String} value The value we are expecting the lookahead token to have - * @since 2.0 - */ - function expectTolerant(value) { - if (extra.errors) { - var token = lookahead; - if (token.type !== Token.Punctuator && token.value !== value) { - throwErrorTolerant(token, Messages.UnexpectedToken, token.value); - } else { - lex(); - } - } else { - expect(value); - } - } - - // Return true if the next token matches the specified punctuator. - - function match(value) { - return lookahead.type === Token.Punctuator && lookahead.value === value; - } - - // Return true if the next token matches the specified keyword - - function matchKeyword(keyword) { - return lookahead.type === Token.Keyword && lookahead.value === keyword; - } - - function consumeSemicolon() { - var line; - - // Catch the very common case first: immediately a semicolon (U+003B). - if (source.charCodeAt(index) === 0x3B || match(';')) { - lex(); - return; - } - - line = lineNumber; - skipComment(); - if (lineNumber !== line) { - return; - } - - if (lookahead.type !== Token.EOF && !match('}')) { - throwUnexpected(lookahead); - } - } - - // 11.1.4 Array Initialiser - - function parseArrayInitialiser() { - var elements = [], node = new Node(); - - expect('['); - - while (!match(']')) { - if (match(',')) { - lex(); - elements.push(null); - } else { - elements.push(parseAssignmentExpression()); - - if (!match(']')) { - expect(','); - } - } - } - - lex(); - - return node.finishArrayExpression(elements); - } - - // 11.1.5 Object Initialiser - - function parseObjectPropertyKey() { - var token, node = new Node(); - - token = lex(); - - // Note: This function is called only from parseObjectProperty(), where - // EOF and Punctuator tokens are already filtered out. - - if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) { - if (strict && token.octal) { - throwErrorTolerant(token, Messages.StrictOctalLiteral); - } - return node.finishLiteral(token); - } - - return node.finishIdentifier(token.value); - } - - function parseObjectProperty() { - var token, key, id, value, node = new Node(); - - token = lookahead; - - if (token.type === Token.Identifier) { - id = parseObjectPropertyKey(); - expect(':'); - value = parseAssignmentExpression(); - return node.finishProperty('init', id, value); - } - if (token.type === Token.EOF || token.type === Token.Punctuator) { - throwUnexpected(token); - } else { - key = parseObjectPropertyKey(); - expect(':'); - value = parseAssignmentExpression(); - return node.finishProperty('init', key, value); - } - } - - function parseObjectInitialiser() { - var properties = [], property, name, key, kind, map = {}, toString = String, node = new Node(); - - expect('{'); - - while (!match('}')) { - property = parseObjectProperty(); - - if (property.key.type === Syntax.Identifier) { - name = property.key.name; - } else { - name = toString(property.key.value); - } - kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set; - - key = '$' + name; - if (Object.prototype.hasOwnProperty.call(map, key)) { - if (map[key] === PropertyKind.Data) { - if (strict && kind === PropertyKind.Data) { - throwErrorTolerant({}, Messages.StrictDuplicateProperty); - } else if (kind !== PropertyKind.Data) { - throwErrorTolerant({}, Messages.AccessorDataProperty); - } - } else { - if (kind === PropertyKind.Data) { - throwErrorTolerant({}, Messages.AccessorDataProperty); - } else if (map[key] & kind) { - throwErrorTolerant({}, Messages.AccessorGetSet); - } - } - map[key] |= kind; - } else { - map[key] = kind; - } - - properties.push(property); - - if (!match('}')) { - expectTolerant(','); - } - } - - expect('}'); - - return node.finishObjectExpression(properties); - } - - // 11.1.6 The Grouping Operator - - function parseGroupExpression() { - var expr; - - expect('('); - - ++state.parenthesisCount; - - expr = parseExpression(); - - expect(')'); - - return expr; - } - - - // 11.1 Primary Expressions - - var legalKeywords = {"if":1, "this":1}; - - function parsePrimaryExpression() { - var type, token, expr, node; - - if (match('(')) { - return parseGroupExpression(); - } - - if (match('[')) { - return parseArrayInitialiser(); - } - - if (match('{')) { - return parseObjectInitialiser(); - } - - type = lookahead.type; - node = new Node(); - - if (type === Token.Identifier || legalKeywords[lookahead.value]) { - expr = node.finishIdentifier(lex().value); - } else if (type === Token.StringLiteral || type === Token.NumericLiteral) { - if (strict && lookahead.octal) { - throwErrorTolerant(lookahead, Messages.StrictOctalLiteral); - } - expr = node.finishLiteral(lex()); - } else if (type === Token.Keyword) { - throw new Error("Disabled."); - } else if (type === Token.BooleanLiteral) { - token = lex(); - token.value = (token.value === 'true'); - expr = node.finishLiteral(token); - } else if (type === Token.NullLiteral) { - token = lex(); - token.value = null; - expr = node.finishLiteral(token); - } else if (match('/') || match('/=')) { - if (typeof extra.tokens !== 'undefined') { - expr = node.finishLiteral(collectRegex()); - } else { - expr = node.finishLiteral(scanRegExp()); - } - peek(); - } else { - throwUnexpected(lex()); - } - - return expr; - } - - // 11.2 Left-Hand-Side Expressions - - function parseArguments() { - var args = []; - - expect('('); - - if (!match(')')) { - while (index < length) { - args.push(parseAssignmentExpression()); - if (match(')')) { - break; - } - expectTolerant(','); - } - } - - expect(')'); - - return args; - } - - function parseNonComputedProperty() { - var token, node = new Node(); - - token = lex(); - - if (!isIdentifierName(token)) { - throwUnexpected(token); - } - - return node.finishIdentifier(token.value); - } - - function parseNonComputedMember() { - expect('.'); - - return parseNonComputedProperty(); - } - - function parseComputedMember() { - var expr; - - expect('['); - - expr = parseExpression(); - - expect(']'); - - return expr; - } - - function parseLeftHandSideExpressionAllowCall() { - var expr, args, property, startToken, previousAllowIn = state.allowIn; - - startToken = lookahead; - state.allowIn = true; - expr = parsePrimaryExpression(); - - for (;;) { - if (match('.')) { - property = parseNonComputedMember(); - expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property); - } else if (match('(')) { - args = parseArguments(); - expr = new WrappingNode(startToken).finishCallExpression(expr, args); - } else if (match('[')) { - property = parseComputedMember(); - expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property); - } else { - break; - } - } - state.allowIn = previousAllowIn; - - return expr; - } - - // 11.3 Postfix Expressions - - function parsePostfixExpression() { - var expr = parseLeftHandSideExpressionAllowCall(); - - if (lookahead.type === Token.Punctuator) { - if ((match('++') || match('--')) && !peekLineTerminator()) { - throw new Error("Disabled."); - } - } - - return expr; - } - - // 11.4 Unary Operators - - function parseUnaryExpression() { - var token, expr, startToken; - - if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) { - expr = parsePostfixExpression(); - } else if (match('++') || match('--')) { - throw new Error("Disabled."); - } else if (match('+') || match('-') || match('~') || match('!')) { - startToken = lookahead; - token = lex(); - expr = parseUnaryExpression(); - expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr); - } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) { - throw new Error("Disabled."); - } else { - expr = parsePostfixExpression(); - } - - return expr; - } - - function binaryPrecedence(token, allowIn) { - var prec = 0; - - if (token.type !== Token.Punctuator && token.type !== Token.Keyword) { - return 0; - } - - switch (token.value) { - case '||': - prec = 1; - break; - - case '&&': - prec = 2; - break; - - case '|': - prec = 3; - break; - - case '^': - prec = 4; - break; - - case '&': - prec = 5; - break; - - case '==': - case '!=': - case '===': - case '!==': - prec = 6; - break; - - case '<': - case '>': - case '<=': - case '>=': - case 'instanceof': - prec = 7; - break; - - case 'in': - prec = allowIn ? 7 : 0; - break; - - case '<<': - case '>>': - case '>>>': - prec = 8; - break; - - case '+': - case '-': - prec = 9; - break; - - case '*': - case '/': - case '%': - prec = 11; - break; - - default: - break; - } - - return prec; - } - - // 11.5 Multiplicative Operators - // 11.6 Additive Operators - // 11.7 Bitwise Shift Operators - // 11.8 Relational Operators - // 11.9 Equality Operators - // 11.10 Binary Bitwise Operators - // 11.11 Binary Logical Operators - - function parseBinaryExpression() { - var marker, markers, expr, token, prec, stack, right, operator, left, i; - - marker = lookahead; - left = parseUnaryExpression(); - - token = lookahead; - prec = binaryPrecedence(token, state.allowIn); - if (prec === 0) { - return left; - } - token.prec = prec; - lex(); - - markers = [marker, lookahead]; - right = parseUnaryExpression(); - - stack = [left, token, right]; - - while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) { - - // Reduce: make a binary expression from the three topmost entries. - while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) { - right = stack.pop(); - operator = stack.pop().value; - left = stack.pop(); - markers.pop(); - expr = new WrappingNode(markers[markers.length - 1]).finishBinaryExpression(operator, left, right); - stack.push(expr); - } - - // Shift. - token = lex(); - token.prec = prec; - stack.push(token); - markers.push(lookahead); - expr = parseUnaryExpression(); - stack.push(expr); - } - - // Final reduce to clean-up the stack. - i = stack.length - 1; - expr = stack[i]; - markers.pop(); - while (i > 1) { - expr = new WrappingNode(markers.pop()).finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr); - i -= 2; - } - - return expr; - } - - // 11.12 Conditional Operator - - function parseConditionalExpression() { - var expr, previousAllowIn, consequent, alternate, startToken; - - startToken = lookahead; - - expr = parseBinaryExpression(); - - if (match('?')) { - lex(); - previousAllowIn = state.allowIn; - state.allowIn = true; - consequent = parseAssignmentExpression(); - state.allowIn = previousAllowIn; - expect(':'); - alternate = parseAssignmentExpression(); - - expr = new WrappingNode(startToken).finishConditionalExpression(expr, consequent, alternate); - } - - return expr; - } - - // 11.13 Assignment Operators - - function parseAssignmentExpression() { - var oldParenthesisCount, token, expr, startToken; - - oldParenthesisCount = state.parenthesisCount; - - startToken = lookahead; - token = lookahead; - - expr = parseConditionalExpression(); - - return expr; - } - - // 11.14 Comma Operator - - function parseExpression() { - var expr = parseAssignmentExpression(); - - if (match(',')) { - throw new Error("Disabled."); // no sequence expressions - } - - return expr; - } - - // 12.4 Expression Statement - - function parseExpressionStatement(node) { - var expr = parseExpression(); - consumeSemicolon(); - return node.finishExpressionStatement(expr); - } - - // 12 Statements - - function parseStatement() { - var type = lookahead.type, - expr, - node; - - if (type === Token.EOF) { - throwUnexpected(lookahead); - } - - if (type === Token.Punctuator && lookahead.value === '{') { - throw new Error("Disabled."); // block statement - } - - node = new Node(); - - if (type === Token.Punctuator) { - switch (lookahead.value) { - case ';': - throw new Error("Disabled."); // empty statement - case '(': - return parseExpressionStatement(node); - default: - break; - } - } else if (type === Token.Keyword) { - throw new Error("Disabled."); // keyword - } - - expr = parseExpression(); - consumeSemicolon(); - return node.finishExpressionStatement(expr); - } - - // 14 Program - - function parseSourceElement() { - if (lookahead.type === Token.Keyword) { - switch (lookahead.value) { - case 'const': - case 'let': - throw new Error("Disabled."); - case 'function': - throw new Error("Disabled."); - default: - return parseStatement(); - } - } - - if (lookahead.type !== Token.EOF) { - return parseStatement(); - } - } - - function parseSourceElements() { - var sourceElement, sourceElements = [], token, directive, firstRestricted; - - while (index < length) { - token = lookahead; - if (token.type !== Token.StringLiteral) { - break; - } - - sourceElement = parseSourceElement(); - sourceElements.push(sourceElement); - if (sourceElement.expression.type !== Syntax.Literal) { - // this is not directive - break; - } - directive = source.slice(token.start + 1, token.end - 1); - if (directive === 'use strict') { - strict = true; - if (firstRestricted) { - throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral); - } - } else { - if (!firstRestricted && token.octal) { - firstRestricted = token; - } - } - } - - while (index < length) { - sourceElement = parseSourceElement(); - if (typeof sourceElement === 'undefined') { - break; - } - sourceElements.push(sourceElement); - } - return sourceElements; - } - - function parseProgram() { - var body, node; - - skipComment(); - peek(); - node = new Node(); - strict = true; // assume strict - - body = parseSourceElements(); - return node.finishProgram(body); - } - - function filterTokenLocation() { - var i, entry, token, tokens = []; - - for (i = 0; i < extra.tokens.length; ++i) { - entry = extra.tokens[i]; - token = { - type: entry.type, - value: entry.value - }; - if (entry.regex) { - token.regex = { - pattern: entry.regex.pattern, - flags: entry.regex.flags - }; - } - if (extra.range) { - token.range = entry.range; - } - if (extra.loc) { - token.loc = entry.loc; - } - tokens.push(token); - } - - extra.tokens = tokens; - } - - function tokenize(code, options) { - var toString, - tokens; - - toString = String; - if (typeof code !== 'string' && !(code instanceof String)) { - code = toString(code); - } - - source = code; - index = 0; - lineNumber = (source.length > 0) ? 1 : 0; - lineStart = 0; - length = source.length; - lookahead = null; - state = { - allowIn: true, - labelSet: {}, - inFunctionBody: false, - inIteration: false, - inSwitch: false, - lastCommentStart: -1 - }; - - extra = {}; - - // Options matching. - options = options || {}; - - // Of course we collect tokens here. - options.tokens = true; - extra.tokens = []; - extra.tokenize = true; - // The following two fields are necessary to compute the Regex tokens. - extra.openParenToken = -1; - extra.openCurlyToken = -1; - - extra.range = (typeof options.range === 'boolean') && options.range; - extra.loc = (typeof options.loc === 'boolean') && options.loc; - - if (typeof options.tolerant === 'boolean' && options.tolerant) { - extra.errors = []; - } - - try { - peek(); - if (lookahead.type === Token.EOF) { - return extra.tokens; - } - - lex(); - while (lookahead.type !== Token.EOF) { - try { - lex(); - } catch (lexError) { - if (extra.errors) { - extra.errors.push(lexError); - // We have to break on the first error - // to avoid infinite loops. - break; - } else { - throw lexError; - } - } - } - - filterTokenLocation(); - tokens = extra.tokens; - if (typeof extra.errors !== 'undefined') { - tokens.errors = extra.errors; - } - } catch (e) { - throw e; - } finally { - extra = {}; - } - return tokens; - } - - function parse(code, options) { - var program, toString; - - toString = String; - if (typeof code !== 'string' && !(code instanceof String)) { - code = toString(code); - } - - source = code; - index = 0; - lineNumber = (source.length > 0) ? 1 : 0; - lineStart = 0; - length = source.length; - lookahead = null; - state = { - allowIn: true, - labelSet: {}, - parenthesisCount: 0, - inFunctionBody: false, - inIteration: false, - inSwitch: false, - lastCommentStart: -1 - }; - - extra = {}; - if (typeof options !== 'undefined') { - extra.range = (typeof options.range === 'boolean') && options.range; - extra.loc = (typeof options.loc === 'boolean') && options.loc; - - if (extra.loc && options.source !== null && options.source !== undefined) { - extra.source = toString(options.source); - } - - if (typeof options.tokens === 'boolean' && options.tokens) { - extra.tokens = []; - } - if (typeof options.tolerant === 'boolean' && options.tolerant) { - extra.errors = []; - } - } - - try { - program = parseProgram(); - if (typeof extra.tokens !== 'undefined') { - filterTokenLocation(); - program.tokens = extra.tokens; - } - if (typeof extra.errors !== 'undefined') { - program.errors = extra.errors; - } - } catch (e) { - throw e; - } finally { - extra = {}; - } - - return program; - } - - return { - tokenize: tokenize, - parse: parse - }; - -})(); -},{}],48:[function(require,module,exports){ -var ts = Date.now(); - -function write(msg) { - console.log('[Vega Log]', msg); -} - -function error(msg) { - console.error('[Vega Err]', msg); -} - -function debug(input, args) { - if (!debug.enable) return; - var log = Function.prototype.bind.call(console.log, console); - var state = { - prevTime: Date.now() - ts, - stamp: input.stamp - }; - - if (input.add) { - state.add = input.add.length; - state.mod = input.mod.length; - state.rem = input.rem.length; - state.reflow = !!input.reflow; - } - - log.apply(console, (args.push(JSON.stringify(state)), args)); - ts = Date.now(); -} - -module.exports = { - log: write, - error: error, - debug: (debug.enable = false, debug) -}; - -},{}],49:[function(require,module,exports){ -module.exports = { - path: require('./path'), - render: require('./render'), - Item: require('./util/Item'), - bound: require('./util/bound'), - Bounds: require('./util/Bounds'), - canvas: require('./util/canvas'), - Gradient: require('./util/Gradient'), - toJSON: require('./util/scene').toJSON, - fromJSON: require('./util/scene').fromJSON -}; -},{"./path":51,"./render":71,"./util/Bounds":77,"./util/Gradient":79,"./util/Item":81,"./util/bound":82,"./util/canvas":83,"./util/scene":85}],50:[function(require,module,exports){ -var segmentCache = {}, - bezierCache = {}, - join = [].join; - -// Copied from Inkscape svgtopdf, thanks! -function segments(x, y, rx, ry, large, sweep, rotateX, ox, oy) { - var key = join.call(arguments); - if (segmentCache[key]) { - return segmentCache[key]; - } - - var th = rotateX * (Math.PI/180); - var sin_th = Math.sin(th); - var cos_th = Math.cos(th); - rx = Math.abs(rx); - ry = Math.abs(ry); - var px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5; - var py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5; - var pl = (px*px) / (rx*rx) + (py*py) / (ry*ry); - if (pl > 1) { - pl = Math.sqrt(pl); - rx *= pl; - ry *= pl; - } - - var a00 = cos_th / rx; - var a01 = sin_th / rx; - var a10 = (-sin_th) / ry; - var a11 = (cos_th) / ry; - var x0 = a00 * ox + a01 * oy; - var y0 = a10 * ox + a11 * oy; - var x1 = a00 * x + a01 * y; - var y1 = a10 * x + a11 * y; - - var d = (x1-x0) * (x1-x0) + (y1-y0) * (y1-y0); - var sfactor_sq = 1 / d - 0.25; - if (sfactor_sq < 0) sfactor_sq = 0; - var sfactor = Math.sqrt(sfactor_sq); - if (sweep == large) sfactor = -sfactor; - var xc = 0.5 * (x0 + x1) - sfactor * (y1-y0); - var yc = 0.5 * (y0 + y1) + sfactor * (x1-x0); - - var th0 = Math.atan2(y0-yc, x0-xc); - var th1 = Math.atan2(y1-yc, x1-xc); - - var th_arc = th1-th0; - if (th_arc < 0 && sweep === 1){ - th_arc += 2 * Math.PI; - } else if (th_arc > 0 && sweep === 0) { - th_arc -= 2 * Math.PI; - } - - var segs = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001))); - var result = []; - for (var i=0; i len) { - for (j=1, m=parsed.length; j=0;) { - if (h[i].type !== type) continue; - if (!handler || h[i].handler === handler) h.splice(i, 1); - } - return this; -}; - -prototype.pickEvent = function(evt) { - var rect = this._canvas.getBoundingClientRect(), - pad = this._padding, x, y; - return this.pick(this._scene, - x = (evt.clientX - rect.left), - y = (evt.clientY - rect.top), - x - pad.left, y - pad.top); -}; - -// find the scenegraph item at the current mouse position -// x, y -- the absolute x, y mouse coordinates on the canvas element -// gx, gy -- the relative coordinates within the current group -prototype.pick = function(scene, x, y, gx, gy) { - var g = this.context(), - mark = marks[scene.marktype]; - return mark.pick.call(this, g, scene, x, y, gx, gy); -}; - -module.exports = CanvasHandler; - -},{"../../util/dom":84,"../Handler":54,"./marks":63}],57:[function(require,module,exports){ -var DOM = require('../../util/dom'), - Bounds = require('../../util/Bounds'), - ImageLoader = require('../../util/ImageLoader'), - Canvas = require('../../util/canvas'), - Renderer = require('../Renderer'), - marks = require('./marks'); - -function CanvasRenderer(loadConfig) { - Renderer.call(this); - this._loader = new ImageLoader(loadConfig); -} - -CanvasRenderer.RETINA = true; - -var base = Renderer.prototype; -var prototype = (CanvasRenderer.prototype = Object.create(base)); -prototype.constructor = CanvasRenderer; - -prototype.initialize = function(el, width, height, padding) { - this._canvas = Canvas.instance(width, height); - if (el) { - DOM.clear(el, 0).appendChild(this._canvas); - this._canvas.setAttribute('class', 'marks'); - } - return base.initialize.call(this, el, width, height, padding); -}; - -prototype.resize = function(width, height, padding) { - base.resize.call(this, width, height, padding); - Canvas.resize(this._canvas, this._width, this._height, - this._padding, CanvasRenderer.RETINA); - return this; -}; - -prototype.canvas = function() { - return this._canvas; -}; - -prototype.context = function() { - return this._canvas ? this._canvas.getContext('2d') : null; -}; - -prototype.pendingImages = function() { - return this._loader.pending(); -}; - -function clipToBounds(g, items) { - if (!items) return null; - - var b = new Bounds(), i, n, item, mark, group; - for (i=0, n=items.length; i 0) { - if (group.fill && util.fill(g, group, opac)) { - g.fillRect(gx, gy, w, h); - } - if (group.stroke && util.stroke(g, group, opac)) { - g.strokeRect(gx, gy, w, h); - } - } - } - - // setup graphics context - g.save(); - g.translate(gx, gy); - if (group.clip) { - g.beginPath(); - g.rect(0, 0, w, h); - g.clip(); - } - if (bounds) bounds.translate(-gx, -gy); - - // draw group contents - for (j=0, m=axes.length; j=0;) { - group = groups[i]; - - // first hit test against bounding box - // if a group is clipped, that should be handled by the bounds check. - b = group.bounds; - if (b && !b.contains(gx, gy)) continue; - - // passed bounds check, so test sub-groups - axes = group.axisItems || EMPTY; - items = group.items || EMPTY; - legends = group.legendItems || EMPTY; - dx = (group.x || 0); - dy = (group.y || 0); - - g.save(); - g.translate(dx, dy); - dx = gx - dx; - dy = gy - dy; - for (j=legends.length; --j>=0;) { - subscene = legends[j]; - if (subscene.interactive !== false) { - hits = this.pick(subscene, x, y, dx, dy); - if (hits) { g.restore(); return hits; } - } - } - for (j=axes.length; --j>=0;) { - subscene = axes[j]; - if (subscene.interactive !== false && subscene.layer !== 'back') { - hits = this.pick(subscene, x, y, dx, dy); - if (hits) { g.restore(); return hits; } - } - } - for (j=items.length; --j>=0;) { - subscene = items[j]; - if (subscene.interactive !== false) { - hits = this.pick(subscene, x, y, dx, dy); - if (hits) { g.restore(); return hits; } - } - } - for (j=axes.length; --j>=0;) { - subscene = axes[j]; - if (subscene.interative !== false && subscene.layer === 'back') { - hits = this.pick(subscene, x, y, dx, dy); - if (hits) { g.restore(); return hits; } - } - } - g.restore(); - - if (scene.interactive !== false && (group.fill || group.stroke) && - dx >= 0 && dx <= group.width && dy >= 0 && dy <= group.height) { - return group; - } - } - - return null; -} - -module.exports = { - draw: draw, - pick: pick -}; - -},{"./util":70}],62:[function(require,module,exports){ -var util = require('./util'); - -function draw(g, scene, bounds) { - if (!scene.items || !scene.items.length) return; - - var renderer = this, - items = scene.items, o; - - for (var i=0, len=items.length; i= 0;) { - o = scene.items[i]; b = o.bounds; - // first hit test against bounding box - if ((b && !b.contains(gx, gy)) || !b) continue; - // if in bounding box, perform more careful test - if (test(g, o, x, y, gx, gy)) return o; - } - return null; - }; -} - -function testPath(path, filled) { - return function(g, o, x, y) { - var item = Array.isArray(o) ? o[0] : o, - fill = (filled == null) ? item.fill : filled, - stroke = item.stroke && g.isPointInStroke, lw, lc; - - if (stroke) { - lw = item.strokeWidth; - lc = item.strokeCap; - g.lineWidth = lw != null ? lw : 1; - g.lineCap = lc != null ? lc : 'butt'; - } - - return path(g, o) ? false : - (fill && g.isPointInPath(x, y)) || - (stroke && g.isPointInStroke(x, y)); - }; -} - -function pickPath(path) { - return pick(testPath(path)); -} - -function fill(g, o, opacity) { - opacity *= (o.fillOpacity==null ? 1 : o.fillOpacity); - if (opacity > 0) { - g.globalAlpha = opacity; - g.fillStyle = color(g, o, o.fill); - return true; - } else { - return false; - } -} - -function stroke(g, o, opacity) { - var lw = (lw = o.strokeWidth) != null ? lw : 1, lc; - if (lw <= 0) return false; - - opacity *= (o.strokeOpacity==null ? 1 : o.strokeOpacity); - if (opacity > 0) { - g.globalAlpha = opacity; - g.strokeStyle = color(g, o, o.stroke); - g.lineWidth = lw; - g.lineCap = (lc = o.strokeCap) != null ? lc : 'butt'; - g.vgLineDash(o.strokeDash || null); - g.vgLineDashOffset(o.strokeDashOffset || 0); - return true; - } else { - return false; - } -} - -function color(g, o, value) { - return (value.id) ? - gradient(g, value, o.bounds) : - value; -} - -function gradient(g, p, b) { - var w = b.width(), - h = b.height(), - x1 = b.x1 + p.x1 * w, - y1 = b.y1 + p.y1 * h, - x2 = b.x1 + p.x2 * w, - y2 = b.y1 + p.y2 * h, - grad = g.createLinearGradient(x1, y1, x2, y2), - stop = p.stops, - i, n; - - for (i=0, n=stop.length; i=0;) { - if (h[i].type === type && !handler || h[i].handler === handler) { - svg.removeEventListener(name, h[i].listener); - h.splice(i, 1); - } - } - return this; -}; - -module.exports = SVGHandler; - -},{"../../util/dom":84,"../Handler":54}],73:[function(require,module,exports){ -var ImageLoader = require('../../util/ImageLoader'), - Renderer = require('../Renderer'), - text = require('../../util/text'), - DOM = require('../../util/dom'), - SVG = require('../../util/svg'), - ns = SVG.metadata.xmlns, - marks = require('./marks'); - -function SVGRenderer(loadConfig) { - Renderer.call(this); - this._loader = new ImageLoader(loadConfig); - this._dirtyID = 0; -} - -var base = Renderer.prototype; -var prototype = (SVGRenderer.prototype = Object.create(base)); -prototype.constructor = SVGRenderer; - -prototype.initialize = function(el, width, height, padding) { - if (el) { - this._svg = DOM.child(el, 0, 'svg', ns, 'marks'); - DOM.clear(el, 1); - // set the svg root group - this._root = DOM.child(this._svg, 0, 'g', ns); - DOM.clear(this._svg, 1); - } - - // create the svg definitions cache - this._defs = { - clip_id: 1, - gradient: {}, - clipping: {} - }; - - // set background color if defined - this.background(this._bgcolor); - - return base.initialize.call(this, el, width, height, padding); -}; - -prototype.background = function(bgcolor) { - if (arguments.length && this._svg) { - this._svg.style.setProperty('background-color', bgcolor); - } - return base.background.apply(this, arguments); -}; - -prototype.resize = function(width, height, padding) { - base.resize.call(this, width, height, padding); - - if (this._svg) { - var w = this._width, - h = this._height, - p = this._padding; - - this._svg.setAttribute('width', w + p.left + p.right); - this._svg.setAttribute('height', h + p.top + p.bottom); - - this._root.setAttribute('transform', 'translate('+p.left+','+p.top+')'); - } - - return this; -}; - -prototype.svg = function() { - if (!this._svg) return null; - - var attr = { - 'class': 'marks', - 'width': this._width + this._padding.left + this._padding.right, - 'height': this._height + this._padding.top + this._padding.bottom, - }; - for (var key in SVG.metadata) { - attr[key] = SVG.metadata[key]; - } - - return DOM.openTag('svg', attr) + this._svg.innerHTML + DOM.closeTag('svg'); -}; - -prototype.imageURL = function(url) { - return this._loader.imageURL(url); -}; - - -// -- Render entry point -- - -prototype.render = function(scene, items) { - if (this._dirtyCheck(items)) { - if (this._dirtyAll) this._resetDefs(); - this.draw(this._root, scene, -1); - DOM.clear(this._root, 1); - } - this.updateDefs(); - return this; -}; - -prototype.draw = function(el, scene, index) { - this.drawMark(el, scene, index, marks[scene.marktype]); -}; - - -// -- Manage SVG definitions ('defs') block -- - -prototype.updateDefs = function() { - var svg = this._svg, - defs = this._defs, - el = defs.el, - index = 0, id; - - for (id in defs.gradient) { - if (!el) el = (defs.el = DOM.child(svg, 0, 'defs', ns)); - updateGradient(el, defs.gradient[id], index++); - } - - for (id in defs.clipping) { - if (!el) el = (defs.el = DOM.child(svg, 0, 'defs', ns)); - updateClipping(el, defs.clipping[id], index++); - } - - // clean-up - if (el) { - if (index === 0) { - svg.removeChild(el); - defs.el = null; - } else { - DOM.clear(el, index); - } - } -}; - -function updateGradient(el, grad, index) { - var i, n, stop; - - el = DOM.child(el, index, 'linearGradient', ns); - el.setAttribute('id', grad.id); - el.setAttribute('x1', grad.x1); - el.setAttribute('x2', grad.x2); - el.setAttribute('y1', grad.y1); - el.setAttribute('y2', grad.y2); - - for (i=0, n=grad.stops.length; i 0) ? openTag('defs') + defs + closeTag('defs') : ''; -}; - -prototype.imageURL = function(url) { - return this._loader.imageURL(url); -}; - -var object; - -function emit(name, value, ns, prefixed) { - object[prefixed || name] = value; -} - -prototype.attributes = function(attr, item) { - object = {}; - attr(emit, item, this); - return object; -}; - -prototype.mark = function(scene) { - var mdef = MARKS[scene.marktype], - tag = mdef.tag, - attr = mdef.attr, - nest = mdef.nest || false, - data = nest ? - (scene.items && scene.items.length ? [scene.items[0]] : []) : - (scene.items || []), - defs = this._defs, - str = '', - style, i, item; - - if (tag !== 'g' && scene.interactive === false) { - style = 'style="pointer-events: none;"'; - } - - // render opening group tag - str += openTag('g', { - 'class': DOM.cssClass(scene) - }, style); - - // render contained elements - for (i=0; i/g, '>'); -} - -module.exports = SVGStringRenderer; - -},{"../../util/ImageLoader":80,"../../util/dom":84,"../../util/svg":86,"../../util/text":87,"../Renderer":55,"./marks":76}],75:[function(require,module,exports){ -module.exports = { - Handler: require('./SVGHandler'), - Renderer: require('./SVGRenderer'), - string: { - Renderer : require('./SVGStringRenderer') - } -}; -},{"./SVGHandler":72,"./SVGRenderer":73,"./SVGStringRenderer":74}],76:[function(require,module,exports){ -var text = require('../../util/text'), - SVG = require('../../util/svg'), - symbolTypes = SVG.symbolTypes, - textAlign = SVG.textAlign, - path = SVG.path; - -function translateItem(o) { - return translate(o.x || 0, o.y || 0); -} - -function translate(x, y) { - return 'translate(' + x + ',' + y + ')'; -} - -module.exports = { - arc: { - tag: 'path', - type: 'arc', - attr: function(emit, o) { - emit('transform', translateItem(o)); - emit('d', path.arc(o)); - } - }, - area: { - tag: 'path', - type: 'area', - nest: true, - attr: function(emit, o) { - var items = o.mark.items; - if (items.length) emit('d', path.area(items)); - } - }, - group: { - tag: 'g', - type: 'group', - attr: function(emit, o, renderer) { - var id = null, defs, c; - emit('transform', translateItem(o)); - if (o.clip) { - defs = renderer._defs; - id = o.clip_id || (o.clip_id = 'clip' + defs.clip_id++); - c = defs.clipping[id] || (defs.clipping[id] = {id: id}); - c.width = o.width || 0; - c.height = o.height || 0; - } - emit('clip-path', id ? ('url(#' + id + ')') : null); - }, - background: function(emit, o) { - emit('class', 'background'); - emit('width', o.width || 0); - emit('height', o.height || 0); - } - }, - image: { - tag: 'image', - type: 'image', - attr: function(emit, o, renderer) { - var x = o.x || 0, - y = o.y || 0, - w = o.width || 0, - h = o.height || 0, - url = renderer.imageURL(o.url); - - x = x - (o.align === 'center' ? w/2 : o.align === 'right' ? w : 0); - y = y - (o.baseline === 'middle' ? h/2 : o.baseline === 'bottom' ? h : 0); - - emit('href', url, 'http://www.w3.org/1999/xlink', 'xlink:href'); - emit('transform', translate(x, y)); - emit('width', w); - emit('height', h); - } - }, - line: { - tag: 'path', - type: 'line', - nest: true, - attr: function(emit, o) { - var items = o.mark.items; - if (items.length) emit('d', path.line(items)); - } - }, - path: { - tag: 'path', - type: 'path', - attr: function(emit, o) { - emit('transform', translateItem(o)); - emit('d', o.path); - } - }, - rect: { - tag: 'rect', - type: 'rect', - nest: false, - attr: function(emit, o) { - emit('transform', translateItem(o)); - emit('width', o.width || 0); - emit('height', o.height || 0); - } - }, - rule: { - tag: 'line', - type: 'rule', - attr: function(emit, o) { - emit('transform', translateItem(o)); - emit('x2', o.x2 != null ? o.x2 - (o.x||0) : 0); - emit('y2', o.y2 != null ? o.y2 - (o.y||0) : 0); - } - }, - symbol: { - tag: 'path', - type: 'symbol', - attr: function(emit, o) { - var pathStr = !o.shape || symbolTypes[o.shape] ? - path.symbol(o) : path.resize(o.shape, o.size); - - emit('transform', translateItem(o)); - emit('d', pathStr); - } - }, - text: { - tag: 'text', - type: 'text', - nest: false, - attr: function(emit, o) { - var dx = (o.dx || 0), - dy = (o.dy || 0) + text.offset(o), - x = (o.x || 0), - y = (o.y || 0), - a = o.angle || 0, - r = o.radius || 0, t; - - if (r) { - t = (o.theta || 0) - Math.PI/2; - x += r * Math.cos(t); - y += r * Math.sin(t); - } - - emit('text-anchor', textAlign[o.align] || 'start'); - - if (a) { - t = translate(x, y) + ' rotate('+a+')'; - if (dx || dy) t += ' ' + translate(dx, dy); - } else { - t = translate(x+dx, y+dy); - } - emit('transform', t); - } - } -}; - -},{"../../util/svg":86,"../../util/text":87}],77:[function(require,module,exports){ -function Bounds(b) { - this.clear(); - if (b) this.union(b); -} - -var prototype = Bounds.prototype; - -prototype.clone = function() { - return new Bounds(this); -}; - -prototype.clear = function() { - this.x1 = +Number.MAX_VALUE; - this.y1 = +Number.MAX_VALUE; - this.x2 = -Number.MAX_VALUE; - this.y2 = -Number.MAX_VALUE; - return this; -}; - -prototype.set = function(x1, y1, x2, y2) { - this.x1 = x1; - this.y1 = y1; - this.x2 = x2; - this.y2 = y2; - return this; -}; - -prototype.add = function(x, y) { - if (x < this.x1) this.x1 = x; - if (y < this.y1) this.y1 = y; - if (x > this.x2) this.x2 = x; - if (y > this.y2) this.y2 = y; - return this; -}; - -prototype.expand = function(d) { - this.x1 -= d; - this.y1 -= d; - this.x2 += d; - this.y2 += d; - return this; -}; - -prototype.round = function() { - this.x1 = Math.floor(this.x1); - this.y1 = Math.floor(this.y1); - this.x2 = Math.ceil(this.x2); - this.y2 = Math.ceil(this.y2); - return this; -}; - -prototype.translate = function(dx, dy) { - this.x1 += dx; - this.x2 += dx; - this.y1 += dy; - this.y2 += dy; - return this; -}; - -prototype.rotate = function(angle, x, y) { - var cos = Math.cos(angle), - sin = Math.sin(angle), - cx = x - x*cos + y*sin, - cy = y - x*sin - y*cos, - x1 = this.x1, x2 = this.x2, - y1 = this.y1, y2 = this.y2; - - return this.clear() - .add(cos*x1 - sin*y1 + cx, sin*x1 + cos*y1 + cy) - .add(cos*x1 - sin*y2 + cx, sin*x1 + cos*y2 + cy) - .add(cos*x2 - sin*y1 + cx, sin*x2 + cos*y1 + cy) - .add(cos*x2 - sin*y2 + cx, sin*x2 + cos*y2 + cy); -}; - -prototype.union = function(b) { - if (b.x1 < this.x1) this.x1 = b.x1; - if (b.y1 < this.y1) this.y1 = b.y1; - if (b.x2 > this.x2) this.x2 = b.x2; - if (b.y2 > this.y2) this.y2 = b.y2; - return this; -}; - -prototype.encloses = function(b) { - return b && ( - this.x1 <= b.x1 && - this.x2 >= b.x2 && - this.y1 <= b.y1 && - this.y2 >= b.y2 - ); -}; - -prototype.alignsWith = function(b) { - return b && ( - this.x1 == b.x1 || - this.x2 == b.x2 || - this.y1 == b.y1 || - this.y2 == b.y2 - ); -}; - -prototype.intersects = function(b) { - return b && !( - this.x2 < b.x1 || - this.x1 > b.x2 || - this.y2 < b.y1 || - this.y1 > b.y2 - ); -}; - -prototype.contains = function(x, y) { - return !( - x < this.x1 || - x > this.x2 || - y < this.y1 || - y > this.y2 - ); -}; - -prototype.width = function() { - return this.x2 - this.x1; -}; - -prototype.height = function() { - return this.y2 - this.y1; -}; - -module.exports = Bounds; - -},{}],78:[function(require,module,exports){ -module.exports = function(b) { - function noop() { } - function add(x,y) { b.add(x, y); } - - return { - bounds: function(_) { - if (!arguments.length) return b; - return (b = _, this); - }, - beginPath: noop, - closePath: noop, - moveTo: add, - lineTo: add, - quadraticCurveTo: function(x1, y1, x2, y2) { - b.add(x1, y1); - b.add(x2, y2); - }, - bezierCurveTo: function(x1, y1, x2, y2, x3, y3) { - b.add(x1, y1); - b.add(x2, y2); - b.add(x3, y3); - } - }; -}; - -},{}],79:[function(require,module,exports){ -var gradient_id = 0; - -function Gradient(type) { - this.id = 'gradient_' + (gradient_id++); - this.type = type || 'linear'; - this.stops = []; - this.x1 = 0; - this.x2 = 1; - this.y1 = 0; - this.y2 = 0; -} - -var prototype = Gradient.prototype; - -prototype.stop = function(offset, color) { - this.stops.push({ - offset: offset, - color: color - }); - return this; -}; - -module.exports = Gradient; -},{}],80:[function(require,module,exports){ -(function (global){ -var load = require('datalib/src/import/load'); - -function ImageLoader(loadConfig) { - this._pending = 0; - this._config = loadConfig || ImageLoader.Config; -} - -// Overridable global default load configuration -ImageLoader.Config = null; - -var prototype = ImageLoader.prototype; - -prototype.pending = function() { - return this._pending; -}; - -prototype.params = function(uri) { - var p = {url: uri}, k; - for (k in this._config) { p[k] = this._config[k]; } - return p; -}; - -prototype.imageURL = function(uri) { - return load.sanitizeUrl(this.params(uri)); -}; - -function browser(uri, callback) { - var url = load.sanitizeUrl(this.params(uri)); - if (!url) { // error - if (callback) callback(uri, null); - return null; - } - - var loader = this, - image = new Image(); - - loader._pending += 1; - - image.onload = function() { - loader._pending -= 1; - image.loaded = true; - if (callback) callback(null, image); - }; - image.src = url; - - return image; -} - -function server(uri, callback) { - var loader = this, - image = new ((typeof window !== "undefined" ? window['canvas'] : typeof global !== "undefined" ? global['canvas'] : null).Image)(); - - loader._pending += 1; - - load(this.params(uri), function(err, data) { - loader._pending -= 1; - if (err) { - if (callback) callback(err, null); - return null; - } - image.src = data; - image.loaded = true; - if (callback) callback(null, image); - }); - - return image; -} - -prototype.loadImage = function(uri, callback) { - return load.useXHR ? - browser.call(this, uri, callback) : - server.call(this, uri, callback); -}; - -module.exports = ImageLoader; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"datalib/src/import/load":22}],81:[function(require,module,exports){ -function Item(mark) { - this.mark = mark; -} - -var prototype = Item.prototype; - -prototype.hasPropertySet = function(name) { - var props = this.mark.def.properties; - return props && props[name] != null; -}; - -prototype.cousin = function(offset, index) { - if (offset === 0) return this; - offset = offset || -1; - var mark = this.mark, - group = mark.group, - iidx = index==null ? mark.items.indexOf(this) : index, - midx = group.items.indexOf(mark) + offset; - return group.items[midx].items[iidx]; -}; - -prototype.sibling = function(offset) { - if (offset === 0) return this; - offset = offset || -1; - var mark = this.mark, - iidx = mark.items.indexOf(this) + offset; - return mark.items[iidx]; -}; - -prototype.remove = function() { - var item = this, - list = item.mark.items, - i = list.indexOf(item); - if (i >= 0) { - if (i===list.length-1) { - list.pop(); - } else { - list.splice(i, 1); - } - } - return item; -}; - -prototype.touch = function() { - if (this.pathCache) this.pathCache = null; -}; - -module.exports = Item; -},{}],82:[function(require,module,exports){ -var BoundsContext = require('./BoundsContext'), - Bounds = require('./Bounds'), - canvas = require('./canvas'), - svg = require('./svg'), - text = require('./text'), - paths = require('../path'), - parse = paths.parse, - drawPath = paths.render, - areaPath = svg.path.area, - linePath = svg.path.line, - halfpi = Math.PI / 2, - sqrt3 = Math.sqrt(3), - tan30 = Math.tan(30 * Math.PI / 180), - g2D = null, - bc = BoundsContext(); - -function context() { - return g2D || (g2D = canvas.instance(1,1).getContext('2d')); -} - -function strokeBounds(o, bounds) { - if (o.stroke && o.opacity !== 0 && o.stokeOpacity !== 0) { - bounds.expand(o.strokeWidth != null ? o.strokeWidth : 1); - } - return bounds; -} - -function pathBounds(o, path, bounds, x, y) { - if (path == null) { - bounds.set(0, 0, 0, 0); - } else { - drawPath(bc.bounds(bounds), path, x, y); - strokeBounds(o, bounds); - } - return bounds; -} - -function path(o, bounds) { - var p = o.path ? o.pathCache || (o.pathCache = parse(o.path)) : null; - return pathBounds(o, p, bounds, o.x, o.y); -} - -function area(mark, bounds) { - if (mark.items.length === 0) return bounds; - var items = mark.items, - item = items[0], - p = item.pathCache || (item.pathCache = parse(areaPath(items))); - return pathBounds(item, p, bounds); -} - -function line(mark, bounds) { - if (mark.items.length === 0) return bounds; - var items = mark.items, - item = items[0], - p = item.pathCache || (item.pathCache = parse(linePath(items))); - return pathBounds(item, p, bounds); -} - -function rect(o, bounds) { - var x, y; - return strokeBounds(o, bounds.set( - x = o.x || 0, - y = o.y || 0, - (x + o.width) || 0, - (y + o.height) || 0 - )); -} - -function image(o, bounds) { - var x = o.x || 0, - y = o.y || 0, - w = o.width || 0, - h = o.height || 0; - x = x - (o.align === 'center' ? w/2 : (o.align === 'right' ? w : 0)); - y = y - (o.baseline === 'middle' ? h/2 : (o.baseline === 'bottom' ? h : 0)); - return bounds.set(x, y, x+w, y+h); -} - -function rule(o, bounds) { - var x1, y1; - return strokeBounds(o, bounds.set( - x1 = o.x || 0, - y1 = o.y || 0, - o.x2 != null ? o.x2 : x1, - o.y2 != null ? o.y2 : y1 - )); -} - -function arc(o, bounds) { - var cx = o.x || 0, - cy = o.y || 0, - ir = o.innerRadius || 0, - or = o.outerRadius || 0, - sa = (o.startAngle || 0) - halfpi, - ea = (o.endAngle || 0) - halfpi, - xmin = Infinity, xmax = -Infinity, - ymin = Infinity, ymax = -Infinity, - a, i, n, x, y, ix, iy, ox, oy; - - var angles = [sa, ea], - s = sa - (sa % halfpi); - for (i=0; i<4 && s index) { - el.removeChild(el.childNodes[--curr]); - } - return el; - }, - remove: remove, - // generate css class name for mark - cssClass: function(mark) { - return 'mark-' + mark.marktype + (mark.name ? ' '+mark.name : ''); - }, - // generate string for an opening xml tag - // tag: the name of the xml tag - // attr: hash of attribute name-value pairs to include - // raw: additional raw string to include in tag markup - openTag: function(tag, attr, raw) { - var s = '<' + tag, key, val; - if (attr) { - for (key in attr) { - val = attr[key]; - if (val != null) { - s += ' ' + key + '="' + val + '"'; - } - } - } - if (raw) s += ' ' + raw; - return s + '>'; - }, - // generate string for closing xml tag - // tag: the name of the xml tag - closeTag: function(tag) { - return ''; - } -}; - -},{}],85:[function(require,module,exports){ -var bound = require('../util/bound'); - -var sets = [ - 'items', - 'axisItems', - 'legendItems' -]; - -var keys = [ - 'marktype', 'name', 'interactive', 'clip', - 'items', 'axisItems', 'legendItems', 'layer', - 'x', 'y', 'width', 'height', 'align', 'baseline', // layout - 'fill', 'fillOpacity', 'opacity', // fill - 'stroke', 'strokeOpacity', 'strokeWidth', 'strokeCap', // stroke - 'strokeDash', 'strokeDashOffset', // stroke dash - 'startAngle', 'endAngle', 'innerRadius', 'outerRadius', // arc - 'interpolate', 'tension', 'orient', // area, line - 'url', // image - 'path', // path - 'x2', 'y2', // rule - 'size', 'shape', // symbol - 'text', 'angle', 'theta', 'radius', 'dx', 'dy', // text - 'font', 'fontSize', 'fontWeight', 'fontStyle', 'fontVariant' // font -]; - -function toJSON(scene, indent) { - return JSON.stringify(scene, keys, indent); -} - -function fromJSON(json) { - var scene = (typeof json === 'string' ? JSON.parse(json) : json); - return initialize(scene); -} - -function initialize(scene) { - var type = scene.marktype, - i, n, s, m, items; - - for (s=0, m=sets.length; s 0) { wait(); } else { callback(this.canvas()); } -}; - -prototype.svg = function() { - return (this._type === 'svg') ? this._renderer.svg() : null; -}; - -prototype.initialize = function() { - var w = this._width, - h = this._height, - bg = this._bgcolor, - pad = this._padding, - config = this.model().config(); - - if (this._viewport) { - w = this._viewport[0] - (pad ? pad.left + pad.right : 0); - h = this._viewport[1] - (pad ? pad.top + pad.bottom : 0); - } - - this._renderer = (this._renderer || new this._io.Renderer(config.load)) - .initialize(null, w, h, pad) - .background(bg); - - return this; -}; - -module.exports = HeadlessView; -},{"./View":90,"vega-scenegraph":49}],89:[function(require,module,exports){ -var dl = require('datalib'), - df = require('vega-dataflow'), - ChangeSet = df.ChangeSet, - Base = df.Graph.prototype, - Node = df.Node, // jshint ignore:line - GroupBuilder = require('../scene/GroupBuilder'), - visit = require('../scene/visit'), - compiler = require('../parse/expr'), - config = require('./config'); - -function Model(cfg) { - this._defs = {}; - this._predicates = {}; - - this._scene = null; // Root scenegraph node. - this._groups = null; // Index of group items. - - this._node = null; - this._builder = null; // Top-level scenegraph builder. - - this._reset = {axes: false, legends: false}; - - this.config(cfg); - this.expr = compiler(this); - Base.init.call(this); -} - -var prototype = (Model.prototype = Object.create(Base)); -prototype.constructor = Model; - -prototype.defs = function(defs) { - if (!arguments.length) return this._defs; - this._defs = defs; - return this; -}; - -prototype.config = function(cfg) { - if (!arguments.length) return this._config; - this._config = Object.create(config); - for (var name in cfg) { - var x = cfg[name], y = this._config[name]; - if (dl.isObject(x) && dl.isObject(y)) { - this._config[name] = dl.extend({}, y, x); - } else { - this._config[name] = x; - } - } - - return this; -}; - -prototype.width = function(width) { - if (this._defs) this._defs.width = width; - if (this._defs && this._defs.marks) this._defs.marks.width = width; - if (this._scene) { - this._scene.items[0].width = width; - this._scene.items[0]._dirty = true; - } - this._reset.axes = true; - return this; -}; - -prototype.height = function(height) { - if (this._defs) this._defs.height = height; - if (this._defs && this._defs.marks) this._defs.marks.height = height; - if (this._scene) { - this._scene.items[0].height = height; - this._scene.items[0]._dirty = true; - } - this._reset.axes = true; - return this; -}; - -prototype.node = function() { - return this._node || (this._node = new Node(this)); -}; - -prototype.data = function() { - var data = Base.data.apply(this, arguments); - if (arguments.length > 1) { // new Datasource - this.node().addListener(data.pipeline()[0]); - } - return data; -}; - -function predicates(name) { - var m = this, pred = {}; - if (!dl.isArray(name)) return this._predicates[name]; - name.forEach(function(n) { pred[n] = m._predicates[n]; }); - return pred; -} - -prototype.predicate = function(name, predicate) { - if (arguments.length === 1) return predicates.call(this, name); - return (this._predicates[name] = predicate); -}; - -prototype.predicates = function() { return this._predicates; }; - -prototype.scene = function(renderer) { - if (!arguments.length) return this._scene; - - if (this._builder) { - this.node().removeListener(this._builder); - this._builder._groupBuilder.disconnect(); - } - - var m = this, - b = this._builder = new Node(this); - - b.evaluate = function(input) { - if (b._groupBuilder) return input; - - var gb = b._groupBuilder = new GroupBuilder(m, m._defs.marks, m._scene={}), - p = gb.pipeline(); - - m._groups = {}; - this.addListener(gb.connect()); - p[p.length-1].addListener(renderer); - return input; - }; - - this.addListener(b); - return this; -}; - -prototype.group = function(id, item) { - var groups = this._groups; - if (arguments.length === 1) return groups[id]; - return (groups[id] = item, this); -}; - -prototype.reset = function() { - if (this._scene && this._reset.axes) { - visit(this._scene, function(item) { - if (item.axes) item.axes.forEach(function(axis) { axis.reset(); }); - }); - this._reset.axes = false; - } - if (this._scene && this._reset.legends) { - visit(this._scene, function(item) { - if (item.legends) item.legends.forEach(function(l) { l.reset(); }); - }); - this._reset.legends = false; - } - return this; -}; - -prototype.addListener = function(l) { - this.node().addListener(l); -}; - -prototype.removeListener = function(l) { - this.node().removeListener(l); -}; - -prototype.fire = function(cs) { - if (!cs) cs = ChangeSet.create(); - this.propagate(cs, this.node()); -}; - -module.exports = Model; -},{"../parse/expr":96,"../scene/GroupBuilder":112,"../scene/visit":117,"./config":91,"datalib":26,"vega-dataflow":41}],90:[function(require,module,exports){ -(function (global){ -var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== "undefined" ? global['d3'] : null), - dl = require('datalib'), - df = require('vega-dataflow'), - sg = require('vega-scenegraph').render, - log = require('vega-logging'), - Deps = df.Dependencies, - parseStreams = require('../parse/streams'), - Encoder = require('../scene/Encoder'), - Transition = require('../scene/Transition'); - -function View(el, width, height) { - this._el = null; - this._model = null; - this._width = this.__width = width || 500; - this._height = this.__height = height || 300; - this._bgcolor = null; - this._cursor = true; // Set cursor based on hover propset? - this._autopad = 1; - this._padding = {top:0, left:0, bottom:0, right:0}; - this._viewport = null; - this._renderer = null; - this._handler = null; - this._streamer = null; // Targeted update for streaming changes - this._skipSignals = false; // Batch set signals can skip reevaluation. - this._changeset = null; - this._repaint = true; // Full re-render on every re-init - this._renderers = sg; - this._io = null; - this._api = {}; // Stash streaming data API sandboxes. -} - -var prototype = View.prototype; - -prototype.model = function(model) { - if (!arguments.length) return this._model; - if (this._model !== model) { - this._model = model; - this._streamer = new df.Node(model); - this._streamer._rank = -1; // HACK: To reduce re-ranking churn. - this._changeset = df.ChangeSet.create(); - if (this._handler) this._handler.model(model); - } - return this; -}; - -// Sandboxed streaming data API -function streaming(src) { - var view = this, - ds = this._model.data(src); - if (!ds) return log.error('Data source "'+src+'" is not defined.'); - - var listener = ds.pipeline()[0], - streamer = this._streamer, - api = {}; - - // If we have it stashed, don't create a new closure. - if (this._api[src]) return this._api[src]; - - api.insert = function(vals) { - ds.insert(dl.duplicate(vals)); // Don't pollute the environment - streamer.addListener(listener); - view._changeset.data[src] = 1; - return api; - }; - - api.update = function() { - streamer.addListener(listener); - view._changeset.data[src] = 1; - return (ds.update.apply(ds, arguments), api); - }; - - api.remove = function() { - streamer.addListener(listener); - view._changeset.data[src] = 1; - return (ds.remove.apply(ds, arguments), api); - }; - - api.values = function() { return ds.values(); }; - - return (this._api[src] = api); -} - -prototype.data = function(data) { - var v = this; - if (!arguments.length) return v._model.values(); - else if (dl.isString(data)) return streaming.call(v, data); - else if (dl.isObject(data)) { - dl.keys(data).forEach(function(k) { - var api = streaming.call(v, k); - data[k](api); - }); - } - return this; -}; - -var VIEW_SIGNALS = dl.toMap(['width', 'height', 'padding']); - -prototype.signal = function(name, value, skip) { - var m = this._model, - key, values; - - // Getter. Returns the value for the specified signal, or - // returns all signal values. - if (!arguments.length) { - return m.values(Deps.SIGNALS); - } else if (arguments.length === 1 && dl.isString(name)) { - return m.values(Deps.SIGNALS, name); - } - - // Setter. Can be done in batch or individually. In either case, - // the final argument determines if set signals should be skipped. - if (dl.isObject(name)) { - values = name; - skip = value; - } else { - values = {}; - values[name] = value; - } - for (key in values) { - if (VIEW_SIGNALS[key]) { - this[key](values[key]); - } else { - setSignal.call(this, key, values[key]); - } - } - return (this._skipSignals = skip, this); -}; - -function setSignal(name, value) { - var cs = this._changeset, - sg = this._model.signal(name); - if (!sg) return log.error('Signal "'+name+'" is not defined.'); - - this._streamer.addListener(sg.value(value)); - cs.signals[name] = 1; - cs.reflow = true; -} - -prototype.width = function(width) { - if (!arguments.length) return this.__width; - if (this.__width !== width) { - this._width = this.__width = width; - this.model().width(width); - this.initialize(); - if (this._strict) this._autopad = 1; - setSignal.call(this, 'width', width); - } - return this; -}; - -prototype.height = function(height) { - if (!arguments.length) return this.__height; - if (this.__height !== height) { - this._height = this.__height = height; - this.model().height(height); - this.initialize(); - if (this._strict) this._autopad = 1; - setSignal.call(this, 'height', height); - } - return this; -}; - -prototype.background = function(bgcolor) { - if (!arguments.length) return this._bgcolor; - if (this._bgcolor !== bgcolor) { - this._bgcolor = bgcolor; - this.initialize(); - } - return this; -}; - -prototype.padding = function(pad) { - if (!arguments.length) return this._padding; - if (this._padding !== pad) { - if (dl.isString(pad)) { - this._autopad = 1; - this._padding = {top:0, left:0, bottom:0, right:0}; - this._strict = (pad === 'strict'); - } else { - this._autopad = 0; - this._padding = pad; - this._strict = false; - } - if (this._renderer) this._renderer.resize(this._width, this._height, this._padding); - if (this._handler) this._handler.padding(this._padding); - setSignal.call(this, 'padding', this._padding); - } - return (this._repaint = true, this); -}; - -prototype.autopad = function(opt) { - if (this._autopad < 1) return this; - else this._autopad = 0; - - var b = this.model().scene().bounds, - pad = this._padding, - config = this.model().config(), - inset = config.autopadInset, - l = b.x1 < 0 ? Math.ceil(-b.x1) + inset : 0, - t = b.y1 < 0 ? Math.ceil(-b.y1) + inset : 0, - r = b.x2 > this._width ? Math.ceil(+b.x2 - this._width) + inset : 0; - b = b.y2 > this._height ? Math.ceil(+b.y2 - this._height) + inset : 0; - pad = {left:l, top:t, right:r, bottom:b}; - - if (this._strict) { - this._autopad = 0; - this._padding = pad; - this._width = Math.max(0, this.__width - (l+r)); - this._height = Math.max(0, this.__height - (t+b)); - - this._model.width(this._width).height(this._height).reset(); - setSignal.call(this, 'width', this._width); - setSignal.call(this, 'height', this._height); - setSignal.call(this, 'padding', pad); - - this.initialize().update({props:'enter'}).update({props:'update'}); - } else { - this.padding(pad).update(opt); - } - return this; -}; - -prototype.viewport = function(size) { - if (!arguments.length) return this._viewport; - if (this._viewport !== size) { - this._viewport = size; - this.initialize(); - } - return this; -}; - -prototype.renderer = function(type) { - if (!arguments.length) return this._renderer; - if (this._renderers[type]) type = this._renderers[type]; - else if (dl.isString(type)) throw new Error('Unknown renderer: ' + type); - else if (!type) throw new Error('No renderer specified'); - - if (this._io !== type) { - this._io = type; - this._renderer = null; - this.initialize(); - if (this._build) this.render(); - } - return this; -}; - -prototype.initialize = function(el) { - var v = this, prevHandler, - w = v._width, h = v._height, pad = v._padding, bg = v._bgcolor, - config = this.model().config(); - - if (!arguments.length || el === null) { - el = this._el ? this._el.parentNode : null; - if (!el) return this; // This View cannot init w/o an - } - - // clear pre-existing container - d3.select(el).select('div.vega').remove(); - - // add div container - this._el = el = d3.select(el) - .append('div') - .attr('class', 'vega') - .style('position', 'relative') - .node(); - if (v._viewport) { - d3.select(el) - .style('width', (v._viewport[0] || w)+'px') - .style('height', (v._viewport[1] || h)+'px') - .style('overflow', 'auto'); - } - - // renderer - sg.canvas.Renderer.RETINA = config.render.retina; - v._renderer = (v._renderer || new this._io.Renderer(config.load)) - .initialize(el, w, h, pad) - .background(bg); - - // input handler - prevHandler = v._handler; - v._handler = new this._io.Handler() - .initialize(el, pad, v); - - if (prevHandler) { - prevHandler.handlers().forEach(function(h) { - v._handler.on(h.type, h.handler); - }); - } else { - // Register event listeners for signal stream definitions. - v._detach = parseStreams(this); - } - - return (this._repaint = true, this); -}; - -prototype.destroy = function() { - if (this._detach) this._detach(); -}; - -function build() { - var v = this; - v._renderNode = new df.Node(v._model) - .router(true); - - v._renderNode.evaluate = function(input) { - log.debug(input, ['rendering']); - - var s = v._model.scene(), - h = v._handler; - - if (h && h.scene) h.scene(s); - - if (input.trans) { - input.trans.start(function(items) { v._renderer.render(s, items); }); - } else if (v._repaint) { - v._renderer.render(s); - } else if (input.dirty.length) { - v._renderer.render(s, input.dirty); - } - - if (input.dirty.length) { - input.dirty.forEach(function(i) { i._dirty = false; }); - s.items[0]._dirty = false; - } - - v._repaint = v._skipSignals = false; - return input; - }; - - return (v._model.scene(v._renderNode), true); -} - -prototype.update = function(opt) { - opt = opt || {}; - var v = this, - model = this._model, - streamer = this._streamer, - cs = this._changeset, - trans = opt.duration ? new Transition(opt.duration, opt.ease) : null; - - if (trans) cs.trans = trans; - if (opt.props !== undefined) { - if (dl.keys(cs.data).length > 0) { - throw Error( - 'New data values are not reflected in the visualization.' + - ' Please call view.update() before updating a specified property set.' - ); - } - - cs.reflow = true; - cs.request = opt.props; - } - - var built = v._build; - v._build = v._build || build.call(this); - - // If specific items are specified, short-circuit dataflow graph. - // Else-If there are streaming updates, perform a targeted propagation. - // Otherwise, re-evaluate the entire model (datasources + scene). - if (opt.items && built) { - Encoder.update(model, opt.trans, opt.props, opt.items, cs.dirty); - v._renderNode.evaluate(cs); - } else if (streamer.listeners().length && built) { - // Include re-evaluation entire model when repaint flag is set - if (this._repaint) streamer.addListener(model.node()); - model.propagate(cs, streamer, null, this._skipSignals); - streamer.disconnect(); - } else { - model.fire(cs); - } - - v._changeset = df.ChangeSet.create(); - - return v.autopad(opt); -}; - -prototype.toImageURL = function(type) { - var v = this, Renderer; - - // lookup appropriate renderer - switch (type || 'png') { - case 'canvas': - case 'png': - Renderer = sg.canvas.Renderer; break; - case 'svg': - Renderer = sg.svg.string.Renderer; break; - default: throw Error('Unrecognized renderer type: ' + type); - } - - var retina = sg.canvas.Renderer.RETINA; - sg.canvas.Renderer.RETINA = false; // ignore retina screen - - // render the scenegraph - var ren = new Renderer(v._model.config.load) - .initialize(null, v._width, v._height, v._padding) - .background(v._bgcolor) - .render(v._model.scene()); - - sg.canvas.Renderer.RETINA = retina; // restore retina settings - - // return data url - if (type === 'svg') { - var blob = new Blob([ren.svg()], {type: 'image/svg+xml'}); - return window.URL.createObjectURL(blob); - } else { - return ren.canvas().toDataURL('image/png'); - } -}; - -prototype.render = function(items) { - this._renderer.render(this._model.scene(), items); - return this; -}; - -prototype.on = function() { - this._handler.on.apply(this._handler, arguments); - return this; -}; - -prototype.onSignal = function(name, handler) { - var sg = this._model.signal(name); - return (sg ? - sg.on(handler) : log.error('Signal "'+name+'" is not defined.'), this); -}; - -prototype.off = function() { - this._handler.off.apply(this._handler, arguments); - return this; -}; - -prototype.offSignal = function(name, handler) { - var sg = this._model.signal(name); - return (sg ? - sg.off(handler) : log.error('Signal "'+name+'" is not defined.'), this); -}; - -View.factory = function(model) { - var HeadlessView = require('./HeadlessView'); - return function(opt) { - opt = opt || {}; - var defs = model.defs(); - var v = (opt.el ? new View() : new HeadlessView()) - .model(model) - .renderer(opt.renderer || 'canvas') - .width(defs.width) - .height(defs.height) - .background(defs.background) - .padding(defs.padding) - .viewport(defs.viewport) - .initialize(opt.el); - - if (opt.data) v.data(opt.data); - - // Register handlers for the hover propset and cursors. - if (opt.el) { - if (opt.hover !== false) { - v.on('mouseover', function(evt, item) { - if (item && item.hasPropertySet('hover')) { - this.update({props:'hover', items:item}); - } - }) - .on('mouseout', function(evt, item) { - if (item && item.hasPropertySet('hover')) { - this.update({props:'update', items:item}); - } - }); - } - - if (opt.cursor !== false) { - // If value is a string, it is a custom value set by the user. - // In this case, the user is responsible for maintaining the cursor state - // and control only reverts back to this handler if set back to 'default'. - v.onSignal('cursor', function(name, value) { - var body = d3.select('body'); - if (dl.isString(value)) { - v._cursor = value === 'default'; - body.style('cursor', value); - } else if (dl.isObject(value) && v._cursor) { - body.style('cursor', value.default); - } - }); - } - } - - return v; - }; -}; - -module.exports = View; -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"../parse/streams":107,"../scene/Encoder":111,"../scene/Transition":114,"./HeadlessView":88,"datalib":26,"vega-dataflow":41,"vega-logging":48,"vega-scenegraph":49}],91:[function(require,module,exports){ -(function (global){ -var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== "undefined" ? global['d3'] : null), - config = {}; - -config.load = { - // base url for loading external data files - // used only for server-side operation - baseURL: '', - // Allows domain restriction when using data loading via XHR. - // To enable, set it to a list of allowed domains - // e.g., ['wikipedia.org', 'eff.org'] - domainWhiteList: false -}; - -// inset padding for automatic padding calculation -config.autopadInset = 5; - -// extensible scale lookup table -// all d3.scale.* instances also supported -config.scale = { - time: d3.time.scale, - utc: d3.time.scale.utc -}; - -// default rendering settings -config.render = { - retina: true -}; - -// root scenegraph group -config.scene = { - fill: undefined, - fillOpacity: undefined, - stroke: undefined, - strokeOpacity: undefined, - strokeWidth: undefined, - strokeDash: undefined, - strokeDashOffset: undefined -}; - -// default axis properties -config.axis = { - layer: 'back', - ticks: 10, - padding: 3, - axisColor: '#000', - axisWidth: 1, - gridColor: '#000', - gridOpacity: 0.15, - tickColor: '#000', - tickLabelColor: '#000', - tickWidth: 1, - tickSize: 6, - tickLabelFontSize: 11, - tickLabelFont: 'sans-serif', - titleColor: '#000', - titleFont: 'sans-serif', - titleFontSize: 11, - titleFontWeight: 'bold', - titleOffset: 'auto', - titleOffsetAutoMin: 30, - titleOffsetAutoMax: 10000, - titleOffsetAutoMargin: 4 -}; - -// default legend properties -config.legend = { - orient: 'right', - offset: 20, - padding: 3, // padding between legend items and border - margin: 2, // extra margin between two consecutive legends - gradientStrokeColor: '#888', - gradientStrokeWidth: 1, - gradientHeight: 16, - gradientWidth: 100, - labelColor: '#000', - labelFontSize: 10, - labelFont: 'sans-serif', - labelAlign: 'left', - labelBaseline: 'middle', - labelOffset: 8, - symbolShape: 'circle', - symbolSize: 50, - symbolColor: '#888', - symbolStrokeWidth: 1, - titleColor: '#000', - titleFont: 'sans-serif', - titleFontSize: 11, - titleFontWeight: 'bold' -}; - -// default color values -config.color = { - rgb: [128, 128, 128], - lab: [50, 0, 0], - hcl: [0, 0, 50], - hsl: [0, 0, 0.5] -}; - -// default scale ranges -config.range = { - category10: d3.scale.category10().range(), - category20: d3.scale.category20().range(), - category20b: d3.scale.category20b().range(), - category20c: d3.scale.category20c().range(), - shapes: [ - 'circle', - 'cross', - 'diamond', - 'square', - 'triangle-down', - 'triangle-up' - ] -}; - -module.exports = config; -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],92:[function(require,module,exports){ -var dl = require('datalib'), - parse = require('../parse'), - Scale = require('../scene/Scale'), - config = require('./config'); - -function compile(module, opt, schema) { - var s = module.schema; - if (!s) return; - if (s.refs) dl.extend(schema.refs, s.refs); - if (s.defs) dl.extend(schema.defs, s.defs); -} - -module.exports = function(opt) { - var schema = null; - opt = opt || {}; - - // Compile if we're not loading the schema from a URL. - // Load from a URL to extend the existing base schema. - if (opt.url) { - schema = dl.json(dl.extend({url: opt.url}, config.load)); - } else { - schema = { - "$schema": "http://json-schema.org/draft-04/schema#", - "title": "Vega Visualization Specification Language", - "defs": {}, - "refs": {}, - "$ref": "#/defs/spec" - }; - - dl.keys(parse).forEach(function(k) { compile(parse[k], opt, schema); }); - - // Scales aren't in the parser, add schema manually - compile(Scale, opt, schema); - } - - // Extend schema to support custom mark properties or property sets. - if (opt.properties) dl.keys(opt.properties).forEach(function(k) { - schema.defs.propset.properties[k] = {"$ref": "#/refs/"+opt.properties[k]+"Value"}; - }); - - if (opt.propertySets) dl.keys(opt.propertySets).forEach(function(k) { - schema.defs.mark.properties.properties.properties[k] = {"$ref": "#/defs/propset"}; - }); - - return schema; -}; -},{"../parse":97,"../scene/Scale":113,"./config":91,"datalib":26}],93:[function(require,module,exports){ -var dl = require('datalib'), - axs = require('../scene/axis'), - themeVal = require('../util/theme-val'); - -var ORIENT = { - "x": "bottom", - "y": "left", - "top": "top", - "bottom": "bottom", - "left": "left", - "right": "right" -}; - -function parseAxes(model, spec, axes, group) { - var cfg = config(model); - (spec || []).forEach(function(def, index) { - axes[index] = axes[index] || axs(model, cfg[def.type]); - parseAxis(cfg[def.type], def, index, axes[index], group); - }); -} - -function parseAxis(config, def, index, axis, group) { - // axis scale - var scale; - if (def.scale !== undefined) { - axis.scale(scale = group.scale(def.scale)); - } - - // grid by scaletype - var grid = config.grid; - if (dl.isObject(grid)) { - config.grid = grid[scale.type] !== undefined ? grid[scale.type] : grid.default; - } - - // axis orientation - axis.orient(themeVal(def, config, 'orient', ORIENT[def.type])); - // axis offset - axis.offset(themeVal(def, config, 'offset', 0)); - // axis layer - axis.layer(themeVal(def, config, 'layer', 'front')); - // axis grid lines - axis.grid(themeVal(def, config, 'grid', false)); - // axis title - axis.title(def.title || null); - // axis title offset - axis.titleOffset(themeVal(def, config, 'titleOffset')); - // axis values - axis.tickValues(def.values || null); - // axis label formatting - axis.tickFormat(def.format || null); - axis.tickFormatType(def.formatType || null); - // axis tick subdivision - axis.tickSubdivide(def.subdivide || 0); - // axis tick padding (config.padding for backwards compatibility). - axis.tickPadding(themeVal(def, config, 'tickPadding', config.padding)); - - // axis tick size(s) - var ts = themeVal(def, config, 'tickSize'), - size = [ts, ts, ts]; - - size[0] = themeVal(def, config, 'tickSizeMajor', size[0]); - size[1] = themeVal(def, config, 'tickSizeMinor', size[1]); - size[2] = themeVal(def, config, 'tickSizeEnd', size[2]); - - if (size.length) { - axis.tickSize.apply(axis, size); - } - - // axis tick count - axis.tickCount(themeVal(def, config, 'ticks')); - - // style properties - var p = def.properties; - if (p && p.ticks) { - axis.majorTickProperties(p.majorTicks ? - dl.extend({}, p.ticks, p.majorTicks) : p.ticks); - axis.minorTickProperties(p.minorTicks ? - dl.extend({}, p.ticks, p.minorTicks) : p.ticks); - } else { - axis.majorTickProperties(p && p.majorTicks || {}); - axis.minorTickProperties(p && p.minorTicks || {}); - } - axis.tickLabelProperties(p && p.labels || {}); - axis.titleProperties(p && p.title || {}); - axis.gridLineProperties(p && p.grid || {}); - axis.domainProperties(p && p.axis || {}); -} - -function config(model) { - var cfg = model.config(), - axis = cfg.axis; - - return { - x: dl.extend(dl.duplicate(axis), cfg.axis_x), - y: dl.extend(dl.duplicate(axis), cfg.axis_y) - }; -} - -module.exports = parseAxes; -},{"../scene/axis":115,"../util/theme-val":149,"datalib":26}],94:[function(require,module,exports){ -(function (global){ -var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== "undefined" ? global['d3'] : null); - -function parseBg(bg) { - // return null if input is null or undefined - if (bg == null) return null; - // run through d3 rgb to sanity check - return d3.rgb(bg) + ''; -} - -module.exports = parseBg; -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],95:[function(require,module,exports){ -var dl = require('datalib'), - log = require('vega-logging'), - parseTransforms = require('./transforms'), - parseModify = require('./modify'); - -function parseData(model, spec, callback) { - var config = model.config(), - count = 0; - - function onError(error, d) { - log.error('PARSE DATA FAILED: ' + d.name + ' ' + error); - count = -1; - callback(error); - } - - function onLoad(d) { - return function(error, data) { - if (error) { - onError(error, d); - } else if (count > 0) { - try { - model.data(d.name).values(dl.read(data, d.format)); - if (--count === 0) callback(); - } catch (err) { - onError(err, d); - } - } - }; - } - - // process each data set definition - (spec || []).forEach(function(d) { - if (d.url) { - count += 1; - dl.load(dl.extend({url: d.url}, config.load), onLoad(d)); - } - try { - parseData.datasource(model, d); - } catch (err) { - onError(err, d); - } - }); - - if (count === 0) setTimeout(callback, 1); - return spec; -} - -parseData.datasource = function(model, d) { - var transform = (d.transform || []).map(function(t) { - return parseTransforms(model, t); - }), - mod = (d.modify || []).map(function(m) { - return parseModify(model, m, d); - }), - ds = model.data(d.name, mod.concat(transform)); - - if (d.values) { - ds.values(dl.read(d.values, d.format)); - } else if (d.source) { - // Derived ds will be pulsed by its src rather than the model. - ds.source(d.source).addListener(ds); - model.removeListener(ds.pipeline()[0]); - } - - return ds; -}; - -module.exports = parseData; -},{"./modify":101,"./transforms":108,"datalib":26,"vega-logging":48}],96:[function(require,module,exports){ -var dl = require('datalib'), - template = dl.template, - expr = require('vega-expression'), - args = ['datum', 'parent', 'event', 'signals']; - -var compile = expr.compiler(args, { - idWhiteList: args, - fieldVar: args[0], - globalVar: function(id) { - return 'this.sig[' + dl.str(id) + ']._value'; - }, - functions: function(codegen) { - var fn = expr.functions(codegen); - fn.eventItem = 'event.vg.getItem'; - fn.eventGroup = 'event.vg.getGroup'; - fn.eventX = 'event.vg.getX'; - fn.eventY = 'event.vg.getY'; - fn.open = openGen(codegen); - fn.scale = scaleGen(codegen, false); - fn.iscale = scaleGen(codegen, true); - fn.inrange = 'this.defs.inrange'; - fn.indata = indataGen(codegen); - fn.format = 'this.defs.format'; - fn.timeFormat = 'this.defs.timeFormat'; - fn.utcFormat = 'this.defs.utcFormat'; - return fn; - }, - functionDefs: function(/*codegen*/) { - return { - 'scale': scale, - 'inrange': inrange, - 'indata': indata, - 'format': numberFormat, - 'timeFormat': timeFormat, - 'utcFormat': utcFormat, - 'open': windowOpen - }; - } -}); - -function openGen(codegen) { - return function (args) { - args = args.map(codegen); - var n = args.length; - if (n < 1 || n > 2) { - throw Error("open takes exactly 1 or 2 arguments."); - } - return 'this.defs.open(this.model, ' + - args[0] + (n > 1 ? ',' + args[1] : '') + ')'; - }; -} - -function windowOpen(model, url, name) { - if (typeof window !== 'undefined' && window && window.open) { - var opt = dl.extend({type: 'open', url: url, name: name}, model.config().load), - uri = dl.load.sanitizeUrl(opt); - if (uri) { - window.open(uri, name); - } else { - throw Error('Invalid URL: ' + opt.url); - } - } else { - throw Error('Open function can only be invoked in a browser.'); - } -} - -function scaleGen(codegen, invert) { - return function(args) { - args = args.map(codegen); - var n = args.length; - if (n < 2 || n > 3) { - throw Error("scale takes exactly 2 or 3 arguments."); - } - return 'this.defs.scale(this.model, ' + invert + ', ' + - args[0] + ',' + args[1] + (n > 2 ? ',' + args[2] : '') + ')'; - }; -} - -function scale(model, invert, name, value, scope) { - if (!scope || !scope.scale) { - scope = (scope && scope.mark) ? scope.mark.group : model.scene().items[0]; - } - // Verify scope is valid - if (model.group(scope._id) !== scope) { - throw Error('Scope for scale "'+name+'" is not a valid group item.'); - } - var s = scope.scale(name); - return !s ? value : (invert ? s.invert(value) : s(value)); -} - -function inrange(val, a, b, exclusive) { - var min = a, max = b; - if (a > b) { min = b; max = a; } - return exclusive ? - (min < val && max > val) : - (min <= val && max >= val); -} - -function indataGen(codegen) { - return function(args, globals, fields, dataSources) { - var data; - if (args.length !== 3) { - throw Error("indata takes 3 arguments."); - } - if (args[0].type !== 'Literal') { - throw Error("Data source name must be a literal for indata."); - } - - data = args[0].value; - dataSources[data] = 1; - if (args[2].type === 'Literal') { - indataGen.model.requestIndex(data, args[2].value); - } - - args = args.map(codegen); - return 'this.defs.indata(this.model,' + - args[0] + ',' + args[1] + ',' + args[2] + ')'; - }; -} - -function indata(model, dataname, val, field) { - var data = model.data(dataname), - index = data.getIndex(field); - return index[val] > 0; -} - -function numberFormat(specifier, v) { - return template.format(specifier, 'number')(v); -} - -function timeFormat(specifier, d) { - return template.format(specifier, 'time')(d); -} - -function utcFormat(specifier, d) { - return template.format(specifier, 'utc')(d); -} - -function wrap(model) { - return function(str) { - indataGen.model = model; - var x = compile(str); - x.model = model; - x.sig = model ? model._signals : {}; - return x; - }; -} - -wrap.scale = scale; -wrap.codegen = compile.codegen; -module.exports = wrap; -},{"datalib":26,"vega-expression":46}],97:[function(require,module,exports){ -module.exports = { - axes: require('./axes'), - background: require('./background'), - data: require('./data'), - events: require('vega-event-selector'), - expr: require('./expr'), - legends: require('./legends'), - mark: require('./mark'), - marks: require('./marks'), - modify: require('./modify'), - padding: require('./padding'), - predicates: require('./predicates'), - properties: require('./properties'), - signals: require('./signals'), - spec: require('./spec'), - streams: require('./streams'), - transforms: require('./transforms') -}; -},{"./axes":93,"./background":94,"./data":95,"./expr":96,"./legends":98,"./mark":99,"./marks":100,"./modify":101,"./padding":102,"./predicates":103,"./properties":104,"./signals":105,"./spec":106,"./streams":107,"./transforms":108,"vega-event-selector":42}],98:[function(require,module,exports){ -var lgnd = require('../scene/legend'); - -function parseLegends(model, spec, legends, group) { - (spec || []).forEach(function(def, index) { - legends[index] = legends[index] || lgnd(model); - parseLegend(def, index, legends[index], group); - }); -} - -function parseLegend(def, index, legend, group) { - // legend scales - legend.size (def.size ? group.scale(def.size) : null); - legend.shape (def.shape ? group.scale(def.shape) : null); - legend.fill (def.fill ? group.scale(def.fill) : null); - legend.stroke (def.stroke ? group.scale(def.stroke) : null); - legend.opacity(def.opacity ? group.scale(def.opacity) : null); - - // legend orientation - if (def.orient) legend.orient(def.orient); - - // legend offset - if (def.offset != null) legend.offset(def.offset); - - // legend title - legend.title(def.title || null); - - // legend values - legend.values(def.values || null); - - // legend label formatting - legend.format(def.format !== undefined ? def.format : null); - legend.formatType(def.formatType || null); - - // style properties - var p = def.properties; - legend.titleProperties(p && p.title || {}); - legend.labelProperties(p && p.labels || {}); - legend.legendProperties(p && p.legend || {}); - legend.symbolProperties(p && p.symbols || {}); - legend.gradientProperties(p && p.gradient || {}); -} - -module.exports = parseLegends; -},{"../scene/legend":116}],99:[function(require,module,exports){ -var dl = require('datalib'), - parseProperties = require('./properties'); - -function parseMark(model, mark, applyDefaults) { - var props = mark.properties || (applyDefaults && (mark.properties = {})), - enter = props.enter || (applyDefaults && (props.enter = {})), - group = mark.marks, - config = model.config().marks || {}; - - if (applyDefaults) { - // for scatter plots, set symbol size specified in config if not in spec - if (mark.type === 'symbol' && !enter.size && config.symbolSize) { - enter.size = {value: config.symbolSize}; - } - - // Themes define a default "color" that maps to fill/stroke based on mark type. - var colorMap = { - arc: 'fill', area: 'fill', rect: 'fill', symbol: 'fill', text: 'fill', - line: 'stroke', path: 'stroke', rule: 'stroke' - }; - - // Set default mark color if no color is given in spec, and only do so for - // user-defined marks (not axis/legend marks). - var colorProp = colorMap[mark.type]; - if (!enter[colorProp] && config.color) { - enter[colorProp] = {value: config.color}; - } - } - - // parse mark property definitions - dl.keys(props).forEach(function(k) { - props[k] = parseProperties(model, mark.type, props[k]); - }); - - // parse delay function - if (mark.delay) { - mark.delay = parseProperties(model, mark.type, {delay: mark.delay}); - } - - // recurse if group type - if (group) { - mark.marks = group.map(function(g) { return parseMark(model, g, true); }); - } - - return mark; -} - -module.exports = parseMark; -},{"./properties":104,"datalib":26}],100:[function(require,module,exports){ -var parseMark = require('./mark'), - parseProperties = require('./properties'); - -function parseRootMark(model, spec, width, height) { - return { - type: 'group', - width: width, - height: height, - properties: defaults(spec.scene || {}, model), - scales: spec.scales || [], - axes: spec.axes || [], - legends: spec.legends || [], - marks: (spec.marks || []).map(function(m) { return parseMark(model, m, true); }) - }; -} - -var PROPERTIES = [ - 'fill', 'fillOpacity', 'stroke', 'strokeOpacity', - 'strokeWidth', 'strokeDash', 'strokeDashOffset' -]; - -function defaults(spec, model) { - var config = model.config().scene, - props = {}, i, n, m, p, s; - - for (i=0, n=m=PROPERTIES.length; i= 0; --i) { - for (j=0; j': parseComparator, - '>=': parseComparator, - '<': parseComparator, - '<=': parseComparator, - 'and': parseLogical, - '&&': parseLogical, - 'or': parseLogical, - '||': parseLogical, - 'in': parseIn -}; - -var nullScale = function() { return 0; }; -nullScale.invert = nullScale; - -function parsePredicates(model, spec) { - (spec || []).forEach(function(s) { - var parse = types[s.type](model, s); - - /* jshint evil:true */ - var pred = Function("args", "db", "signals", "predicates", parse.code); - pred.root = function() { return model.scene().items[0]; }; // For global scales - pred.nullScale = nullScale; - pred.isFunction = dl.isFunction; - pred.signals = parse.signals; - pred.data = parse.data; - - model.predicate(s.name, pred); - }); - - return spec; -} - -function parseSignal(signal, signals) { - var s = dl.field(signal), - code = "signals["+s.map(dl.str).join("][")+"]"; - signals[s[0]] = 1; - return code; -} - -function parseOperands(model, operands) { - var decl = [], defs = [], - signals = {}, db = {}; - - function setSignal(s) { signals[s] = 1; } - function setData(d) { db[d] = 1; } - - dl.array(operands).forEach(function(o, i) { - var name = "o" + i, - def = ""; - - if (o.value !== undefined) { - def = dl.str(o.value); - } else if (o.arg) { - def = "args["+dl.str(o.arg)+"]"; - } else if (o.signal) { - def = parseSignal(o.signal, signals); - } else if (o.predicate) { - var ref = o.predicate, - predName = ref && (ref.name || ref), - pred = model.predicate(predName), - p = "predicates["+dl.str(predName)+"]"; - - pred.signals.forEach(setSignal); - pred.data.forEach(setData); - - if (dl.isObject(ref)) { - dl.keys(ref).forEach(function(k) { - if (k === "name") return; - var i = ref[k]; - def += "args["+dl.str(k)+"] = "; - if (i.signal) { - def += parseSignal(i.signal, signals); - } else if (i.arg) { - def += "args["+dl.str(i.arg)+"]"; - } - def += ", "; - }); - } - - def += p+".call("+p+", args, db, signals, predicates)"; - } - - decl.push(name); - defs.push(name+"=("+def+")"); - }); - - return { - code: "var " + decl.join(", ") + ";\n" + defs.join(";\n") + ";\n", - signals: dl.keys(signals), - data: dl.keys(db) - }; -} - -function parseComparator(model, spec) { - var ops = parseOperands(model, spec.operands); - if (spec.type === '=') spec.type = '=='; - - ops.code += "o0 = o0 instanceof Date ? o0.getTime() : o0;\n" + - "o1 = o1 instanceof Date ? o1.getTime() : o1;\n"; - - return { - code: ops.code + "return " + ["o0", "o1"].join(spec.type) + ";", - signals: ops.signals, - data: ops.data - }; -} - -function parseLogical(model, spec) { - var ops = parseOperands(model, spec.operands), - o = [], i = 0, len = spec.operands.length; - - while (o.push("o"+i++) < len); - if (spec.type === 'and') spec.type = '&&'; - else if (spec.type === 'or') spec.type = '||'; - - return { - code: ops.code + "return " + o.join(spec.type) + ";", - signals: ops.signals, - data: ops.data - }; -} - -function parseIn(model, spec) { - var o = [spec.item], code = ""; - if (spec.range) o.push.apply(o, spec.range); - if (spec.scale) { - code = parseScale(spec.scale, o); - } - - var ops = parseOperands(model, o); - code = ops.code + code + "\n var ordSet = null;\n"; - - if (spec.data) { - var field = dl.field(spec.field).map(dl.str); - code += "var where = function(d) { return d["+field.join("][")+"] == o0 };\n"; - code += "return db["+dl.str(spec.data)+"].filter(where).length > 0;"; - } else if (spec.range) { - // TODO: inclusive/exclusive range? - if (spec.scale) { - code += "if (scale.length == 2) {\n" + // inverting ordinal scales - " ordSet = scale(o1, o2);\n" + - "} else {\n" + - " o1 = scale(o1);\no2 = scale(o2);\n" + - "}"; - } - - code += "return ordSet !== null ? ordSet.indexOf(o0) !== -1 :\n" + - " o1 < o2 ? o1 <= o0 && o0 <= o2 : o2 <= o0 && o0 <= o1;"; - } - - return { - code: code, - signals: ops.signals, - data: ops.data.concat(spec.data ? [spec.data] : []) - }; -} - -// Populate ops such that ultimate scale/inversion function will be in `scale` var. -function parseScale(spec, ops) { - var code = "var scale = ", - idx = ops.length; - - if (dl.isString(spec)) { - ops.push({ value: spec }); - code += "this.root().scale(o"+idx+")"; - } else if (spec.arg) { // Scale function is being passed as an arg - ops.push(spec); - code += "o"+idx; - } else if (spec.name) { // Full scale parameter {name: ..} - ops.push(dl.isString(spec.name) ? {value: spec.name} : spec.name); - code += "(this.isFunction(o"+idx+") ? o"+idx+" : "; - if (spec.scope) { - ops.push(spec.scope); - code += "((o"+(idx+1)+".scale || this.root().scale)(o"+idx+") || this.nullScale)"; - } else { - code += "this.root().scale(o"+idx+")"; - } - code += ")"; - } - - if (spec.invert === true) { // Allow spec.invert.arg? - code += ".invert"; - } - - return code+";\n"; -} - -module.exports = parsePredicates; -},{"datalib":26}],104:[function(require,module,exports){ -(function (global){ -var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== "undefined" ? global['d3'] : null), - dl = require('datalib'), - log = require('vega-logging'), - Tuple = require('vega-dataflow').Tuple; - -var DEPS = ["signals", "scales", "data", "fields"]; - -function properties(model, mark, spec) { - var config = model.config(), - code = "", - names = dl.keys(spec), - exprs = [], // parsed expressions injected in the generated code - i, len, name, ref, vars = {}, - deps = { - signals: {}, - scales: {}, - data: {}, - fields: {}, - nested: [], - _nRefs: {}, // Temp stash to de-dupe nested refs. - reflow: false - }; - - code += "var o = trans ? {} : item, d=0, exprs=this.exprs, set=this.tpl.set, tmpl=signals||{}, t;\n" + - // Stash for dl.template - "tmpl.datum = item.datum;\n" + - "tmpl.group = group;\n" + - "tmpl.parent = group.datum;\n"; - - function handleDep(p) { - if (ref[p] == null) return; - var k = dl.array(ref[p]), i, n; - for (i=0, n=k.length; i 0) ? "\n " : " "; - if (ref.rule) { - // a production rule valueref - ref = rule(model, name, ref.rule, exprs); - code += "\n " + ref.code; - } else if (dl.isArray(ref)) { - // a production rule valueref as an array - ref = rule(model, name, ref, exprs); - code += "\n " + ref.code; - } else { - // a simple valueref - ref = valueRef(config, name, ref); - code += "d += set(o, "+dl.str(name)+", "+ref.val+");"; - } - - vars[name] = true; - DEPS.forEach(handleDep); - deps.reflow = deps.reflow || ref.reflow; - if (ref.nested.length) ref.nested.forEach(handleNestedRefs); - } - - // If nested references are present, sort them based on their level - // to speed up determination of whether encoders should be reeval'd. - dl.keys(deps._nRefs).forEach(function(k) { deps.nested.push(deps._nRefs[k]); }); - deps.nested.sort(function(a, b) { - a = a.level; - b = b.level; - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; - }); - - if (vars.x2) { - if (vars.x) { - code += "\n if (o.x > o.x2) { " + - "\n t = o.x;" + - "\n d += set(o, 'x', o.x2);" + - "\n d += set(o, 'x2', t); " + - "\n };"; - code += "\n d += set(o, 'width', (o.x2 - o.x));"; - } else if (vars.width) { - code += "\n d += set(o, 'x', (o.x2 - o.width));"; - } else { - code += "\n d += set(o, 'x', o.x2);"; - } - } - - if (vars.xc) { - if (vars.width) { - code += "\n d += set(o, 'x', (o.xc - o.width/2));" ; - } else { - code += "\n d += set(o, 'x', o.xc);" ; - } - } - - if (vars.y2) { - if (vars.y) { - code += "\n if (o.y > o.y2) { " + - "\n t = o.y;" + - "\n d += set(o, 'y', o.y2);" + - "\n d += set(o, 'y2', t);" + - "\n };"; - code += "\n d += set(o, 'height', (o.y2 - o.y));"; - } else if (vars.height) { - code += "\n d += set(o, 'y', (o.y2 - o.height));"; - } else { - code += "\n d += set(o, 'y', o.y2);"; - } - } - - if (vars.yc) { - if (vars.height) { - code += "\n d += set(o, 'y', (o.yc - o.height/2));" ; - } else { - code += "\n d += set(o, 'y', o.yc);" ; - } - } - - if (hasPath(mark, vars)) code += "\n d += (item.touch(), 1);"; - code += "\n if (trans) trans.interpolate(item, o);"; - code += "\n return d > 0;"; - - try { - /* jshint evil:true */ - var encoder = Function('item', 'group', 'trans', 'db', - 'signals', 'predicates', code); - - encoder.tpl = Tuple; - encoder.exprs = exprs; - encoder.util = dl; - encoder.d3 = d3; // For color spaces - dl.extend(encoder, dl.template.context); - return { - encode: encoder, - signals: dl.keys(deps.signals), - scales: dl.keys(deps.scales), - data: dl.keys(deps.data), - fields: dl.keys(deps.fields), - nested: deps.nested, - reflow: deps.reflow - }; - } catch (e) { - log.error(e); - log.log(code); - } -} - -function dependencies(a, b) { - if (!dl.isObject(a)) { - a = {reflow: false, nested: []}; - DEPS.forEach(function(d) { a[d] = []; }); - } - - if (dl.isObject(b)) { - a.reflow = a.reflow || b.reflow; - a.nested.push.apply(a.nested, b.nested); - DEPS.forEach(function(d) { a[d].push.apply(a[d], b[d]); }); - } - - return a; -} - -function hasPath(mark, vars) { - return vars.path || - ((mark==='area' || mark==='line') && - (vars.x || vars.x2 || vars.width || - vars.y || vars.y2 || vars.height || - vars.tension || vars.interpolate)); -} - -var hb = /{{(.*?)}}/g; -function parseShape(model, config, spec) { - var shape = spec.shape, - last = 0, - value, match; - - if (shape && (value = shape.value)) { - if (config.shape && config.shape[value]) { - value = config.shape[value]; - } - - // Parse handlebars - shape = ''; - while ((match = hb.exec(value)) !== null) { - shape += value.substring(last, match.index); - shape += model.expr(match[1]).fn(); - last = hb.lastIndex; - } - spec.shape.value = shape + value.substring(last); - } -} - -function rule(model, name, rules, exprs) { - var config = model.config(), - deps = dependencies(), - inputs = [], - code = ''; - - (rules||[]).forEach(function(r, i) { - var ref = valueRef(config, name, r); - dependencies(deps, ref); - - if (r.test) { - // rule uses an expression instead of a predicate. - var exprFn = model.expr(r.test); - deps.signals.push.apply(deps.signals, exprFn.globals); - deps.data.push.apply(deps.data, exprFn.dataSources); - - code += "if (exprs[" + exprs.length + "](item.datum, item.mark.group.datum, null)) {" + - "\n d += set(o, "+dl.str(name)+", " +ref.val+");"; - code += rules[i+1] ? "\n } else " : " }"; - - exprs.push(exprFn.fn); - } else { - var def = r.predicate, - predName = def && (def.name || def), - pred = model.predicate(predName), - p = 'predicates['+dl.str(predName)+']', - input = [], args = name+'_arg'+i; - - if (dl.isObject(def)) { - dl.keys(def).forEach(function(k) { - if (k === 'name') return; - var ref = valueRef(config, i, def[k], true); - input.push(dl.str(k)+': '+ref.val); - dependencies(deps, ref); - }); - } - - if (predName) { - // append the predicates dependencies to our dependencies - deps.signals.push.apply(deps.signals, pred.signals); - deps.data.push.apply(deps.data, pred.data); - inputs.push(args+" = {\n "+input.join(",\n ")+"\n }"); - code += "if ("+p+".call("+p+","+args+", db, signals, predicates)) {" + - "\n d += set(o, "+dl.str(name)+", "+ref.val+");"; - code += rules[i+1] ? "\n } else " : " }"; - } else { - code += "{" + - "\n d += set(o, "+dl.str(name)+", "+ref.val+");"+ - "\n }\n"; - } - } - }); - - if (inputs.length) code = "var " + inputs.join(",\n ") + ";\n " + code; - return (deps.code = code, deps); -} - -function valueRef(config, name, ref, predicateArg) { - if (ref == null) return null; - - if (name==='fill' || name==='stroke') { - if (ref.c) { - return colorRef(config, 'hcl', ref.h, ref.c, ref.l); - } else if (ref.h || ref.s) { - return colorRef(config, 'hsl', ref.h, ref.s, ref.l); - } else if (ref.l || ref.a) { - return colorRef(config, 'lab', ref.l, ref.a, ref.b); - } else if (ref.r || ref.g || ref.b) { - return colorRef(config, 'rgb', ref.r, ref.g, ref.b); - } - } - - // initialize value - var val = null, scale = null, - deps = dependencies(), - sgRef = null, fRef = null, sRef = null, tmpl = {}; - - if (ref.template !== undefined) { - val = dl.template.source(ref.template, 'tmpl', tmpl); - dl.keys(tmpl).forEach(function(k) { - var f = dl.field(k), - a = f.shift(); - if (a === 'parent' || a === 'group') { - deps.nested.push({ - parent: a === 'parent', - group: a === 'group', - level: 1 - }); - } else if (a === 'datum') { - deps.fields.push(f[0]); - } else { - deps.signals.push(a); - } - }); - } - - if (ref.value !== undefined) { - val = dl.str(ref.value); - } - - if (ref.signal !== undefined) { - sgRef = dl.field(ref.signal); - val = 'signals['+sgRef.map(dl.str).join('][')+']'; - deps.signals.push(sgRef.shift()); - } - - if (ref.field !== undefined) { - ref.field = dl.isString(ref.field) ? {datum: ref.field} : ref.field; - fRef = fieldRef(ref.field); - val = fRef.val; - dependencies(deps, fRef); - } - - if (ref.scale !== undefined) { - sRef = scaleRef(ref.scale); - scale = sRef.val; - dependencies(deps, sRef); - deps.scales.push(ref.scale.name || ref.scale); - - // run through scale function if val specified. - // if no val, scale function is predicate arg. - if (val !== null || ref.band || ref.mult || ref.offset || !predicateArg) { - val = scale + (ref.band ? '.rangeBand()' : - '('+(val !== null ? val : 'item.datum.data')+')'); - } else if (predicateArg) { - val = scale; - } - } - - // multiply, offset, return value - val = '(' + (ref.mult?(dl.number(ref.mult)+' * '):'') + val + ')' + - (ref.offset ? ' + ' + dl.number(ref.offset) : ''); - - // Collate dependencies - return (deps.val = val, deps); -} - -function colorRef(config, type, x, y, z) { - var xx = x ? valueRef(config, '', x) : config.color[type][0], - yy = y ? valueRef(config, '', y) : config.color[type][1], - zz = z ? valueRef(config, '', z) : config.color[type][2], - deps = dependencies(); - - [xx, yy, zz].forEach(function(v) { - if (dl.isArray) return; - dependencies(deps, v); - }); - - var val = '(this.d3.' + type + '(' + [xx.val, yy.val, zz.val].join(',') + ') + "")'; - return (deps.val = val, deps); -} - -// {field: {datum: "foo"} } -> item.datum.foo -// {field: {group: "foo"} } -> group.foo -// {field: {parent: "foo"} } -> group.datum.foo -function fieldRef(ref) { - if (dl.isString(ref)) { - return {val: dl.field(ref).map(dl.str).join('][')}; - } - - // Resolve nesting/parent lookups - var l = ref.level || 1, - nested = (ref.group || ref.parent) && l, - scope = nested ? Array(l).join('group.mark.') : '', - r = fieldRef(ref.datum || ref.group || ref.parent || ref.signal), - val = r.val, - deps = dependencies(null, r); - - if (ref.datum) { - val = 'item.datum['+val+']'; - deps.fields.push(ref.datum); - } else if (ref.group) { - val = scope+'group['+val+']'; - deps.nested.push({ level: l, group: true }); - } else if (ref.parent) { - val = scope+'group.datum['+val+']'; - deps.nested.push({ level: l, parent: true }); - } else if (ref.signal) { - val = 'signals['+val+']'; - deps.signals.push(dl.field(ref.signal)[0]); - deps.reflow = true; - } - - return (deps.val = val, deps); -} - -// {scale: "x"} -// {scale: {name: "x"}}, -// {scale: fieldRef} -function scaleRef(ref) { - var scale = null, - fr = null, - deps = dependencies(); - - if (dl.isString(ref)) { - scale = dl.str(ref); - } else if (ref.name) { - scale = dl.isString(ref.name) ? dl.str(ref.name) : (fr = fieldRef(ref.name)).val; - } else { - scale = (fr = fieldRef(ref)).val; - } - - scale = '(item.mark._scaleRefs['+scale+'] = 1, group.scale('+scale+'))'; - if (ref.invert) scale += '.invert'; - - // Mark scale refs as they're dealt with separately in mark._scaleRefs. - if (fr) fr.nested.forEach(function(g) { g.scale = true; }); - return fr ? (fr.val = scale, fr) : (deps.val = scale, deps); -} - -module.exports = properties; -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"datalib":26,"vega-dataflow":41,"vega-logging":48}],105:[function(require,module,exports){ -var dl = require('datalib'), - expr = require('./expr'), - SIGNALS = require('vega-dataflow').Dependencies.SIGNALS; - -var RESERVED = ['datum', 'event', 'signals', 'width', 'height', 'padding'] - .concat(dl.keys(expr.codegen.functions)); - -function parseSignals(model, spec) { - // process each signal definition - (spec || []).forEach(function(s) { - if (RESERVED.indexOf(s.name) !== -1) { - throw Error('Signal name "'+s.name+'" is a '+ - 'reserved keyword ('+RESERVED.join(', ')+').'); - } - - var signal = model.signal(s.name, s.init) - .verbose(s.verbose); - - if (s.init && s.init.expr) { - s.init.expr = model.expr(s.init.expr); - signal.value(exprVal(model, s.init)); - } - - if (s.expr) { - s.expr = model.expr(s.expr); - signal.evaluate = function(input) { - var val = exprVal(model, s), - sg = input.signals; - if (val !== signal.value() || signal.verbose()) { - signal.value(val); - sg[s.name] = 1; - } - return sg[s.name] ? input : model.doNotPropagate; - }; - signal.dependency(SIGNALS, s.expr.globals); - s.expr.globals.forEach(function(dep) { - model.signal(dep).addListener(signal); - }); - } - }); - - return spec; -} - -function exprVal(model, spec) { - var e = spec.expr, v = e.fn(); - return spec.scale ? parseSignals.scale(model, spec, v) : v; -} - -parseSignals.scale = function scale(model, spec, value, datum, evt) { - var def = spec.scale, - name = def.name || def.signal || def, - scope = def.scope, e; - - if (scope) { - if (scope.signal) { - scope = model.signalRef(scope.signal); - } else if (dl.isString(scope)) { // Scope is an expression - e = def._expr = (def._expr || model.expr(scope)); - scope = e.fn(datum, evt); - } - } - - return expr.scale(model, def.invert, name, value, scope); -}; - -module.exports = parseSignals; -},{"./expr":96,"datalib":26,"vega-dataflow":41}],106:[function(require,module,exports){ -var dl = require('datalib'), - log = require('vega-logging'), - themeVal = require('../util/theme-val'), - Model = require('../core/Model'), - View = require('../core/View'); - -/** - * Parse graph specification - * @param spec (object) - * @param config (optional object) - * @param viewFactory (optional function) - * @param callback (error, model) - */ - function parseSpec(spec /*, [config,] [viewFactory,] callback */) { - // do not assign any values to callback, as it will change arguments - var arglen = arguments.length, - argidx = 2, - cb = arguments[arglen-1], - model = new Model(), - viewFactory = View.factory, - config; - - if (arglen > argidx && dl.isFunction(arguments[arglen - argidx])) { - viewFactory = arguments[arglen - argidx]; - ++argidx; - } - - if (arglen > argidx && dl.isObject(arguments[arglen - argidx])) { - model.config(arguments[arglen - argidx]); - } - - config = model.config(); - if (dl.isObject(spec)) { - parse(spec); - } else if (dl.isString(spec)) { - var opts = dl.extend({url: spec}, config.load); - dl.json(opts, function(err, spec) { - if (err) done('SPECIFICATION LOAD FAILED: ' + err); - else parse(spec); - }); - } else { - done('INVALID SPECIFICATION: Must be a valid JSON object or URL.'); - } - - function parse(spec) { - try { - // protect against subsequent spec modification - spec = dl.duplicate(spec); - - var parsers = require('./'), - width = themeVal(spec, config, 'width', 500), - height = themeVal(spec, config, 'height', 500), - padding = parsers.padding(themeVal(spec, config, 'padding')), - background = themeVal(spec, config, 'background'); - - // create signals for width, height, padding, and cursor - model.signal('width', width); - model.signal('height', height); - model.signal('padding', padding); - cursor(spec); - - // initialize model - model.defs({ - width: width, - height: height, - padding: padding, - viewport: spec.viewport || null, - background: parsers.background(background), - signals: parsers.signals(model, spec.signals), - predicates: parsers.predicates(model, spec.predicates), - marks: parsers.marks(model, spec, width, height), - data: parsers.data(model, spec.data, done) - }); - } catch (err) { done(err); } - } - - function cursor(spec) { - var signals = spec.signals || (spec.signals=[]), def; - signals.some(function(sg) { - return (sg.name === 'cursor') ? (def=sg, true) : false; - }); - - if (!def) signals.push(def={name: 'cursor', streams: []}); - - // Add a stream def at the head, so that custom defs can override it. - def.init = def.init || {}; - def.streams.unshift({ - type: 'mousemove', - expr: 'eventItem().cursor === cursor.default ? cursor : {default: eventItem().cursor}' - }); - } - - function done(err) { - var view; - if (err) { - log.error(err); - } else { - view = viewFactory(model.buildIndexes()); - } - - if (cb) { - if (cb.length > 1) cb(err, view); - else if (!err) cb(view); - cb = null; - } - } -} - -module.exports = parseSpec; -},{"../core/Model":89,"../core/View":90,"../util/theme-val":149,"./":97,"datalib":26,"vega-logging":48}],107:[function(require,module,exports){ -(function (global){ -var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== "undefined" ? global['d3'] : null), - dl = require('datalib'), - df = require('vega-dataflow'), - selector = require('vega-event-selector'), - parseSignals = require('./signals'); - -var GATEKEEPER = '_vgGATEKEEPER', - EVALUATOR = '_vgEVALUATOR'; - -var vgEvent = { - getItem: function() { return this.item; }, - getGroup: function(name) { - var group = name ? this.name[name] : this.group, - mark = group && group.mark, - interactive = mark && (mark.interactive || mark.interactive === undefined); - return interactive ? group : {}; - }, - getXY: function(item) { - var p = {x: this.x, y: this.y}; - if (typeof item === 'string') { - item = this.name[item]; - } - for (; item; item = item.mark && item.mark.group) { - p.x -= item.x || 0; - p.y -= item.y || 0; - } - return p; - }, - getX: function(item) { return this.getXY(item).x; }, - getY: function(item) { return this.getXY(item).y; } -}; - -function parseStreams(view) { - var model = view.model(), - trueFn = model.expr('true'), - falseFn = model.expr('false'), - spec = model.defs().signals, - registry = {handlers: {}, nodes: {}}, - internal = dl.duplicate(registry), // Internal event processing - external = dl.duplicate(registry); // External event processing - - dl.array(spec).forEach(function(sig) { - var signal = model.signal(sig.name); - if (sig.expr) return; // Cannot have an expr and stream definition. - - dl.array(sig.streams).forEach(function(stream) { - var sel = selector.parse(stream.type), - exp = model.expr(stream.expr); - mergedStream(signal, sel, exp, stream); - }); - }); - - // We register the event listeners all together so that if multiple - // signals are registered on the same event, they will receive the - // new value on the same pulse. - dl.keys(internal.handlers).forEach(function(type) { - view.on(type, function(evt, item) { - evt.preventDefault(); // stop text selection - extendEvent(evt, item); - fire(internal, type, (item && item.datum) || {}, (item && item.mark && item.mark.group && item.mark.group.datum) || {}, evt); - }); - }); - - // add external event listeners - dl.keys(external.handlers).forEach(function(type) { - if (typeof window === 'undefined') return; // No external support - - var h = external.handlers[type], - t = type.split(':'), // --> no element pseudo-selectors - elt = (t[0] === 'window') ? [window] : - window.document.querySelectorAll(t[0]); - - function handler(evt) { - extendEvent(evt); - fire(external, type, d3.select(this).datum(), this.parentNode && d3.select(this.parentNode).datum(), evt); - } - - for (var i=0; i 0, - bounds = mark.bounds, - rebound = !bounds || input.rem.length, - i, ilen, j, jlen, group, legend; - - if (type === 'line' || type === 'area') { - bound.mark(mark, null, isGrp && !hasLegends); - } else { - input.add.forEach(function(item) { - bound.item(item); - rebound = rebound || (bounds && !bounds.encloses(item.bounds)); - }); - - input.mod.forEach(function(item) { - rebound = rebound || (bounds && bounds.alignsWith(item.bounds)); - bound.item(item); - }); - - if (rebound) { - bounds = mark.bounds && mark.bounds.clear() || (mark.bounds = new Bounds()); - for (i=0, ilen=items.length; i this._stamp) { - join.call(this, fcs, output, this._ds.values(), true, fullUpdate); - } else if (fullUpdate) { - output.mod = this._mark.items.slice(); - } - } else { - data = dl.isFunction(this._def.from) ? this._def.from() : [Sentinel]; - join.call(this, input, output, data); - } - - // Stash output before Bounder for downstream reactive geometry. - this._output = output = this._graph.evaluate(output, this._encoder); - - // Add any new scale references to the dependency list, and ensure - // they're connected. - if (update.nested && update.nested.length && this._status === CONNECTED) { - dl.keys(this._mark._scaleRefs).forEach(function(s) { - var scale = self._parent.scale(s); - if (!scale) return; - - scale.addListener(self); - self.dependency(Deps.SCALES, s); - self._encoder.dependency(Deps.SCALES, s); - }); - } - - // Supernodes calculate bounds too, but only on items marked dirty. - if (this._isSuper) { - output.mod = output.mod.filter(function(x) { return x._dirty; }); - output = this._graph.evaluate(output, this._bounder); - } - - return output; -}; - -function newItem() { - var item = Tuple.ingest(new Item(this._mark)); - - // For the root node's item - if (this._def.width) Tuple.set(item, 'width', this._def.width); - if (this._def.height) Tuple.set(item, 'height', this._def.height); - return item; -} - -function join(input, output, data, ds, fullUpdate) { - var keyf = keyFunction(this._def.key || (ds ? '_id' : null)), - prev = this._mark.items || [], - rem = ds ? input.rem : prev, - mod = Tuple.idMap((!ds || fullUpdate) ? data : input.mod), - next = [], - i, key, len, item, datum, enter, diff; - - // Only mark rems as exiting. Due to keyf, there may be an add/mod - // tuple that replaces it. - for (i=0, len=rem.length; i0) s += '|'; - s += String(f[i](d)); - } - return s; - }; -} - -module.exports = Builder; -},{"../parse/data":95,"./Bounder":109,"./Encoder":111,"datalib":26,"vega-dataflow":41,"vega-logging":48,"vega-scenegraph":49}],111:[function(require,module,exports){ -var dl = require('datalib'), - log = require('vega-logging'), - df = require('vega-dataflow'), - Node = df.Node, // jshint ignore:line - Deps = df.Dependencies, - bound = require('vega-scenegraph').bound; - -var EMPTY = {}; - -function Encoder(graph, mark, builder) { - var props = mark.def.properties || {}, - enter = props.enter, - update = props.update, - exit = props.exit; - - Node.prototype.init.call(this, graph); - - this._mark = mark; - this._builder = builder; - var s = this._scales = []; - - // Only scales used in the 'update' property set are set as - // encoder depedencies to have targeted reevaluations. However, - // we still want scales in 'enter' and 'exit' to be evaluated - // before the encoder. - if (enter) s.push.apply(s, enter.scales); - - if (update) { - this.dependency(Deps.DATA, update.data); - this.dependency(Deps.SIGNALS, update.signals); - this.dependency(Deps.FIELDS, update.fields); - this.dependency(Deps.SCALES, update.scales); - s.push.apply(s, update.scales); - } - - if (exit) s.push.apply(s, exit.scales); - - return this.mutates(true); -} - -var proto = (Encoder.prototype = new Node()); - -proto.evaluate = function(input) { - log.debug(input, ['encoding', this._mark.def.type]); - var graph = this._graph, - props = this._mark.def.properties || {}, - items = this._mark.items, - enter = props.enter, - update = props.update, - exit = props.exit, - dirty = input.dirty, - preds = graph.predicates(), - req = input.request, - group = this._mark.group, - guide = group && (group.mark.axis || group.mark.legend), - db = EMPTY, sg = EMPTY, i, len, item, prop; - - if (req && !guide) { - if ((prop = props[req]) && input.mod.length) { - db = prop.data ? graph.values(Deps.DATA, prop.data) : null; - sg = prop.signals ? graph.values(Deps.SIGNALS, prop.signals) : null; - - for (i=0, len=input.mod.length; i this._stamp) return true; - } - - return false; -} - -// Short-circuit encoder if user specifies items -Encoder.update = function(graph, trans, request, items, dirty) { - items = dl.array(items); - var preds = graph.predicates(), - db = graph.values(Deps.DATA), - sg = graph.values(Deps.SIGNALS), - i, len, item, props, prop; - - for (i=0, len=items.length; i 0, - hasAxes = dl.array(this._def.axes).length > 0, - hasLegends = dl.array(this._def.legends).length > 0, - i, j, c, len, group, pipeline, def, inline = false; - - for (i=0, len=input.add.length; i=0; --i) { - group = input.add[i]; - for (j=this._children[group._id].length-1; j>=0; --j) { - c = this._children[group._id][j]; - c.builder.connect(); - pipeline = c.builder.pipeline(); - def = c.builder._def; - - // This new child needs to be built during this propagation cycle. - // We could add its builder as a listener off the _recursor node, - // but try to inline it if we can to minimize graph dispatches. - inline = (def.type !== Types.GROUP); - inline = inline && (this._graph.data(c.from) !== undefined); - inline = inline && (pipeline[pipeline.length-1].listeners().length === 1); // Reactive geom source - inline = inline && (def.from && !def.from.mark); // Reactive geom target - c.inline = inline; - - if (inline) this._graph.evaluate(input, c.builder); - else this._recursor.addListener(c.builder); - } - } - - function removeTemp(c) { - if (c.type == Types.MARK && !c.inline && - builder._graph.data(c.from) !== undefined) { - builder._recursor.removeListener(c.builder); - } - } - - function updateAxis(a) { - var scale = a.scale(); - if (!input.scales[scale.scaleName]) return; - a.reset().def(); - } - - function updateLegend(l) { - var scale = l.size() || l.shape() || l.fill() || l.stroke() || l.opacity(); - if (!input.scales[scale.scaleName]) return; - l.reset().def(); - } - - for (i=0, len=input.mod.length; i rng[1]) { - start = rng[1] || 0; - rng = [start + (bw * len + space), start]; - } else { - start = rng[0] || 0; - rng = [start, start + (bw * len + space)]; - } - - if (def.reverse) rng = rng.reverse(); - } - - str = typeof rng[0] === 'string'; - if (str || rng.length > 2 || rng.length===1 || dataDrivenRange) { - scale.range(rng); // color or shape values - spatial = false; - } else if (points && round) { - scale.rangeRoundPoints(rng, pad); - } else if (points) { - scale.rangePoints(rng, pad); - } else if (round) { - scale.rangeRoundBands(rng, pad, outer); - } else { - scale.rangeBands(rng, pad, outer); - } - - prev.range = rng; - this._updated = true; - } - - if (!scale.invert && spatial) invertOrdinal(scale); -} - -// "Polyfill" ordinal scale inversion. Currently, only ordinal scales -// with ordered numeric ranges are supported. -var bisect = d3.bisector(dl.numcmp).right, - findAsc = function(a, x) { return bisect(a,x) - 1; }, - findDsc = d3.bisector(function(a,b) { return -1 * dl.numcmp(a,b); }).left; - -function invertOrdinal(scale) { - scale.invert = function(x, y) { - var rng = scale.range(), - asc = rng[0] < rng[1], - find = asc ? findAsc : findDsc; - - if (arguments.length === 1) { - if (!dl.isNumber(x)) { - throw Error('Ordinal scale inversion is only supported for numeric input ('+x+').'); - } - return scale.domain()[find(rng, x)]; - - } else if (arguments.length === 2) { // Invert extents - if (!dl.isNumber(x) || !dl.isNumber(y)) { - throw Error('Extents to ordinal invert are not numbers ('+x+', '+y+').'); - } - - var domain = scale.domain(), - a = find(rng, x), - b = find(rng, y), - n = rng.length - 1, r; - if (b < a) { r = a; a = b; b = a; } // ensure a <= b - if (a < 0) a = 0; - if (b > n) b = n; - - return (asc ? dl.range(a, b+1) : dl.range(b, a-1, -1)) - .map(function(i) { return domain[i]; }); - } - }; -} - -function quantitative(scale, rng, group) { - var def = this._def, - prev = scale._prev, - round = signal.call(this, def.round), - exponent = signal.call(this, def.exponent), - clamp = signal.call(this, def.clamp), - nice = signal.call(this, def.nice), - domain, interval; - - // domain - domain = (def.type === Types.QUANTILE) ? - dataRef.call(this, DataRef.DOMAIN, def.domain, scale, group) : - domainMinMax.call(this, scale, group); - if (domain && !dl.equal(prev.domain, domain)) { - scale.domain(domain); - prev.domain = domain; - this._updated = true; - } - - // range - // vertical scales should flip by default, so use XOR here - if (signal.call(this, def.range) === 'height') rng = rng.reverse(); - if (rng && !dl.equal(prev.range, rng)) { - scale[round && scale.rangeRound ? 'rangeRound' : 'range'](rng); - prev.range = rng; - this._updated = true; - } - - if (exponent && def.type===Types.POWER) scale.exponent(exponent); - if (clamp) scale.clamp(true); - if (nice) { - if (def.type === Types.TIME) { - interval = d3.time[nice]; - if (!interval) log.error('Unrecognized interval: ' + interval); - scale.nice(interval); - } else { - scale.nice(); - } - } -} - -function isUniques(scale) { - return scale.type === Types.ORDINAL || scale.type === Types.QUANTILE; -} - -function getRefs(def) { - return def.fields || dl.array(def); -} - -function inherits(refs) { - return refs.some(function(r) { - if (!r.data) return true; - return r.data && dl.array(r.field).some(function(f) { - return f.parent; - }); - }); -} - -function getFields(ref, group) { - return dl.array(ref.field).map(function(f) { - return f.parent ? - dl.accessor(f.parent)(group.datum) : - f; // String or {'signal'} - }); -} - -// Scale datarefs can be computed over multiple schema types. -// This function determines the type of aggregator created, and -// what data is sent to it: values, tuples, or multi-tuples that must -// be standardized into a consistent schema. -function aggrType(def, scale) { - var refs = getRefs(def); - - // If we're operating over only a single domain, send full tuples - // through for efficiency (fewer accessor creations/calls) - if (refs.length == 1 && dl.array(refs[0].field).length == 1) { - return Aggregate.TYPES.TUPLE; - } - - // With quantitative scales, we only care about min/max. - if (!isUniques(scale)) return Aggregate.TYPES.VALUE; - - // If we don't sort, then we can send values directly to aggrs as well - if (!dl.isObject(def.sort)) return Aggregate.TYPES.VALUE; - - return Aggregate.TYPES.MULTI; -} - -function getCache(which, def, scale, group) { - var refs = getRefs(def), - inherit = inherits(refs), - atype = aggrType(def, scale), - uniques = isUniques(scale), - sort = def.sort, - ck = '_'+which, - fields = getFields(refs[0], group); - - if (scale[ck] || this[ck]) return scale[ck] || this[ck]; - - var cache = new Aggregate(this._graph).type(atype), - groupby, summarize; - - // If a scale's dataref doesn't inherit data from the group, we can - // store the dataref aggregator at the Scale (dataflow node) level. - if (inherit) { - scale[ck] = cache; - } else { - this[ck] = cache; - } - - if (uniques) { - if (atype === Aggregate.TYPES.VALUE) { - groupby = [{ name: DataRef.GROUPBY, get: dl.identity }]; - summarize = {'*': DataRef.COUNT}; - } else if (atype === Aggregate.TYPES.TUPLE) { - groupby = [{ name: DataRef.GROUPBY, get: dl.$(fields[0]) }]; - summarize = dl.isObject(sort) ? [{ - field: DataRef.VALUE, - get: dl.$(sort.field), - ops: [sort.op] - }] : {'*': DataRef.COUNT}; - } else { // atype === Aggregate.TYPES.MULTI - groupby = DataRef.GROUPBY; - summarize = [{ field: DataRef.VALUE, ops: [sort.op] }]; - } - } else { - groupby = []; - summarize = [{ - field: DataRef.VALUE, - get: (atype == Aggregate.TYPES.TUPLE) ? dl.$(fields[0]) : dl.identity, - ops: [DataRef.MIN, DataRef.MAX], - as: [DataRef.MIN, DataRef.MAX] - }]; - } - - cache.param('groupby', groupby) - .param('summarize', summarize); - - return (cache._lastUpdate = -1, cache); -} - -function dataRef(which, def, scale, group) { - if (def == null) { return []; } - if (dl.isArray(def)) return def.map(signal.bind(this)); - - var self = this, graph = this._graph, - refs = getRefs(def), - inherit = inherits(refs), - atype = aggrType(def, scale), - cache = getCache.apply(this, arguments), - sort = def.sort, - uniques = isUniques(scale), - i, rlen, j, flen, ref, fields, field, data, from, cmp; - - function addDep(s) { - self.dependency(Deps.SIGNALS, s); - } - - if (inherit || (!inherit && cache._lastUpdate < this._stamp)) { - for (i=0, rlen=refs.length; i 1) f = 1; - e = curr.ease(f); - - for (i=0, n=curr.length; i 1 ? +y : tickMajorSize, - end = n > 0 ? +arguments[n] : tickMajorSize; - - if (tickMajorSize !== major || - tickMinorSize !== minor || - tickEndSize !== end) { - reset(); - } - - tickMajorSize = major; - tickMinorSize = minor; - tickEndSize = end; - return axis; - }; - - axis.tickSubdivide = function(x) { - if (!arguments.length) return tickSubdivide; - tickSubdivide = +x; - return axis; - }; - - axis.offset = function(x) { - if (!arguments.length) return offset; - offset = dl.isObject(x) ? x : +x; - return axis; - }; - - axis.tickPadding = function(x) { - if (!arguments.length) return tickPadding; - if (tickPadding !== +x) { tickPadding = +x; reset(); } - return axis; - }; - - axis.titleOffset = function(x) { - if (!arguments.length) return titleOffset; - if (titleOffset !== x) { titleOffset = x; reset(); } - return axis; - }; - - axis.layer = function(x) { - if (!arguments.length) return layer; - if (layer !== x) { layer = x; reset(); } - return axis; - }; - - axis.grid = function(x) { - if (!arguments.length) return grid; - if (grid !== x) { grid = x; reset(); } - return axis; - }; - - axis.gridLineProperties = function(x) { - if (!arguments.length) return gridLineStyle; - if (gridLineStyle !== x) { gridLineStyle = x; } - return axis; - }; - - axis.majorTickProperties = function(x) { - if (!arguments.length) return majorTickStyle; - if (majorTickStyle !== x) { majorTickStyle = x; } - return axis; - }; - - axis.minorTickProperties = function(x) { - if (!arguments.length) return minorTickStyle; - if (minorTickStyle !== x) { minorTickStyle = x; } - return axis; - }; - - axis.tickLabelProperties = function(x) { - if (!arguments.length) return tickLabelStyle; - if (tickLabelStyle !== x) { tickLabelStyle = x; } - return axis; - }; - - axis.titleProperties = function(x) { - if (!arguments.length) return titleStyle; - if (titleStyle !== x) { titleStyle = x; } - return axis; - }; - - axis.domainProperties = function(x) { - if (!arguments.length) return domainStyle; - if (domainStyle !== x) { domainStyle = x; } - return axis; - }; - - axis.reset = function() { - reset(); - return axis; - }; - - return axis; -} - -var axisOrients = {top: 1, right: 1, bottom: 1, left: 1}; - -function axisSubdivide(scale, ticks, m) { - var subticks = []; - if (m && ticks.length > 1) { - var extent = axisScaleExtent(scale.domain()), - i = -1, - n = ticks.length, - d = (ticks[1] - ticks[0]) / ++m, - j, - v; - while (++i < n) { - for (j = m; --j > 0;) { - if ((v = +ticks[i] - j * d) >= extent[0]) { - subticks.push(v); - } - } - } - for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1];) { - subticks.push(v); - } - } - return subticks; -} - -function axisScaleExtent(domain) { - var start = domain[0], stop = domain[domain.length - 1]; - return start < stop ? [start, stop] : [stop, start]; -} - -function axisScaleRange(scale) { - return scale.rangeExtent ? - scale.rangeExtent() : - axisScaleExtent(scale.range()); -} - -var axisAlign = { - bottom: 'center', - top: 'center', - left: 'right', - right: 'left' -}; - -var axisBaseline = { - bottom: 'top', - top: 'bottom', - left: 'middle', - right: 'middle' -}; - -function axisLabelExtend(orient, labels, oldScale, newScale, size, pad) { - size = Math.max(size, 0) + pad; - if (orient === 'left' || orient === 'top') { - size *= -1; - } - if (orient === 'top' || orient === 'bottom') { - dl.extend(labels.properties.enter, { - x: oldScale, - y: {value: size}, - }); - dl.extend(labels.properties.update, { - x: newScale, - y: {value: size}, - align: {value: 'center'}, - baseline: {value: axisBaseline[orient]} - }); - } else { - dl.extend(labels.properties.enter, { - x: {value: size}, - y: oldScale, - }); - dl.extend(labels.properties.update, { - x: {value: size}, - y: newScale, - align: {value: axisAlign[orient]}, - baseline: {value: 'middle'} - }); - } -} - -function axisTicksExtend(orient, ticks, oldRef, newRef, size, scale, config, offset) { - var sign = (orient === 'left' || orient === 'top') ? -1 : 1; - if (size === Infinity) { - size = (orient === 'top' || orient === 'bottom') ? - {field: {group: 'height', level: 2}, mult: -sign, offset: offset*-sign} : - {field: {group: 'width', level: 2}, mult: -sign, offset: offset*-sign}; - } else { - size = {value: sign * size, offset: offset}; - } - - // Update offset of tick placement to be in between ordinal marks - // instead of directly aligned with. - if (config.tickPlacement === 'between' && scale.type === ORDINAL) { - var rng = scale.range(), - tickOffset = 0.5 + (scale.rangeBand() || (rng[1] - rng[0]) / 2); - newRef = oldRef = dl.duplicate(newRef); - newRef.offset = oldRef.offset = tickOffset; - } - - if (orient === 'top' || orient === 'bottom') { - dl.extend(ticks.properties.enter, { - x: oldRef, - y: {value: 0}, - y2: size - }); - dl.extend(ticks.properties.update, { - x: newRef, - y: {value: 0}, - y2: size - }); - dl.extend(ticks.properties.exit, { - x: newRef, - }); - } else { - dl.extend(ticks.properties.enter, { - x: {value: 0}, - x2: size, - y: oldRef - }); - dl.extend(ticks.properties.update, { - x: {value: 0}, - x2: size, - y: newRef - }); - dl.extend(ticks.properties.exit, { - y: newRef, - }); - } -} - -function axisTitleExtend(orient, title, range, offset) { - var update = title.properties.update, - mid = ~~((range[0] + range[1]) / 2), - sign = (orient === 'top' || orient === 'left') ? -1 : 1; - - if (orient === 'bottom' || orient === 'top') { - update.x = {value: mid}; - update.angle = {value: 0}; - if (offset >= 0) update.y = {value: sign * offset}; - } else { - update.y = {value: mid}; - update.angle = {value: orient === 'left' ? -90 : 90}; - if (offset >= 0) update.x = {value: sign * offset}; - } -} - -function axisDomainExtend(orient, domain, range, size) { - var path; - if (orient === 'top' || orient === 'left') { - size = -1 * size; - } - if (orient === 'bottom' || orient === 'top') { - path = 'M' + range[0] + ',' + size + 'V0H' + range[1] + 'V' + size; - } else { - path = 'M' + size + ',' + range[0] + 'H0V' + range[1] + 'H' + size; - } - domain.properties.update.path = {value: path}; -} - -function axisUpdate(item, group, trans) { - var o = trans ? {} : item, - offset = item.mark.def.offset, - orient = item.mark.def.orient, - width = group.width, - height = group.height; // TODO fallback to global w,h? - - if (dl.isArray(offset)) { - var ofx = offset[0], - ofy = offset[1]; - - switch (orient) { - case 'left': { Tuple.set(o, 'x', -ofx); Tuple.set(o, 'y', ofy); break; } - case 'right': { Tuple.set(o, 'x', width + ofx); Tuple.set(o, 'y', ofy); break; } - case 'bottom': { Tuple.set(o, 'x', ofx); Tuple.set(o, 'y', height + ofy); break; } - case 'top': { Tuple.set(o, 'x', ofx); Tuple.set(o, 'y', -ofy); break; } - default: { Tuple.set(o, 'x', ofx); Tuple.set(o, 'y', ofy); } - } - } else { - if (dl.isObject(offset)) { - offset = -group.scale(offset.scale)(offset.value); - } - - switch (orient) { - case 'left': { Tuple.set(o, 'x', -offset); Tuple.set(o, 'y', 0); break; } - case 'right': { Tuple.set(o, 'x', width + offset); Tuple.set(o, 'y', 0); break; } - case 'bottom': { Tuple.set(o, 'x', 0); Tuple.set(o, 'y', height + offset); break; } - case 'top': { Tuple.set(o, 'x', 0); Tuple.set(o, 'y', -offset); break; } - default: { Tuple.set(o, 'x', 0); Tuple.set(o, 'y', 0); } - } - } - - if (trans) trans.interpolate(item, o); - return true; -} - -function axisTicks(config) { - return { - type: 'rule', - interactive: false, - key: 'data', - properties: { - enter: { - stroke: {value: config.tickColor}, - strokeWidth: {value: config.tickWidth}, - opacity: {value: 1e-6} - }, - exit: { opacity: {value: 1e-6} }, - update: { opacity: {value: 1} } - } - }; -} - -function axisTickLabels(config) { - return { - type: 'text', - interactive: true, - key: 'data', - properties: { - enter: { - fill: {value: config.tickLabelColor}, - font: {value: config.tickLabelFont}, - fontSize: {value: config.tickLabelFontSize}, - opacity: {value: 1e-6}, - text: {field: 'label'} - }, - exit: { opacity: {value: 1e-6} }, - update: { opacity: {value: 1} } - } - }; -} - -function axisTitle(config) { - return { - type: 'text', - interactive: true, - properties: { - enter: { - font: {value: config.titleFont}, - fontSize: {value: config.titleFontSize}, - fontWeight: {value: config.titleFontWeight}, - fill: {value: config.titleColor}, - align: {value: 'center'}, - baseline: {value: 'middle'}, - text: {field: 'data'} - }, - update: {} - } - }; -} - -function axisDomain(config) { - return { - type: 'path', - interactive: false, - properties: { - enter: { - x: {value: 0.5}, - y: {value: 0.5}, - stroke: {value: config.axisColor}, - strokeWidth: {value: config.axisWidth} - }, - update: {} - } - }; -} - -module.exports = axs; -},{"../parse/mark":99,"../util":148,"datalib":26,"vega-dataflow":41,"vega-scenegraph":49}],116:[function(require,module,exports){ -(function (global){ -var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== "undefined" ? global['d3'] : null), - dl = require('datalib'), - Gradient = require('vega-scenegraph').Gradient, - parseProperties = require('../parse/properties'), - parseMark = require('../parse/mark'), - util = require('../util'); - -function lgnd(model) { - var size = null, - shape = null, - fill = null, - stroke = null, - opacity = null, - spacing = null, - values = null, - formatString = null, - formatType = null, - title = null, - config = model.config().legend, - orient = config.orient, - offset = config.offset, - padding = config.padding, - tickArguments = [5], - legendStyle = {}, - symbolStyle = {}, - gradientStyle = {}, - titleStyle = {}, - labelStyle = {}, - m = { // Legend marks as references for updates - titles: {}, - symbols: {}, - labels: {}, - gradient: {} - }; - - var legend = {}, - legendDef = {}; - - function reset() { legendDef.type = null; } - function ingest(d, i) { return {data: d, index: i}; } - - legend.def = function() { - var scale = size || shape || fill || stroke || opacity; - - if (!legendDef.type) { - legendDef = (scale===fill || scale===stroke) && !discrete(scale.type) ? - quantDef(scale) : ordinalDef(scale); - } - legendDef.orient = orient; - legendDef.offset = offset; - legendDef.padding = padding; - legendDef.margin = config.margin; - return legendDef; - }; - - function discrete(type) { - return type==='ordinal' || type==='quantize' || - type==='quantile' || type==='threshold'; - } - - function ordinalDef(scale) { - var def = o_legend_def(size, shape, fill, stroke, opacity); - - // generate data - var data = (values == null ? - (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : - values).map(ingest); - - var fmt = util.getTickFormat(scale, data.length, formatType, formatString); - - // determine spacing between legend entries - var fs, range, offset, pad=5, domain = d3.range(data.length); - if (size) { - range = data.map(function(x) { return Math.sqrt(size(x.data)); }); - offset = d3.max(range); - range = range.reduce(function(a,b,i,z) { - if (i > 0) a[i] = a[i-1] + z[i-1]/2 + pad; - return (a[i] += b/2, a); }, [0]).map(Math.round); - } else { - offset = Math.round(Math.sqrt(config.symbolSize)); - range = spacing || - (fs = labelStyle.fontSize) && (fs.value + pad) || - (config.labelFontSize + pad); - range = domain.map(function(d,i) { - return Math.round(offset/2 + i*range); - }); - } - - // account for padding and title size - var sz = padding, ts; - if (title) { - ts = titleStyle.fontSize; - sz += 5 + ((ts && ts.value) || config.titleFontSize); - } - for (var i=0, n=range.length; i'}, - summarize: { - type: 'custom', - set: function(summarize) { - var signalDeps = {}, - tx = this._transform, - i, len, f, fields, name, ops; - - if (!dl.isArray(fields = summarize)) { // Object syntax from dl - fields = []; - for (name in summarize) { - ops = dl.array(summarize[name]); - fields.push({field: name, ops: ops}); - } - } - - function sg(x) { if (x.signal) signalDeps[x.signal] = 1; } - - for (i=0, len=fields.length; i', default: [5, 2]} - }); - - this._output = { - start: 'bin_start', - end: 'bin_end', - mid: 'bin_mid' - }; - return this.mutates(true); -} - -var prototype = (Bin.prototype = Object.create(BatchTransform.prototype)); -prototype.constructor = Bin; - -prototype.extent = function(data) { - // TODO only recompute extent upon data or field change? - var e = [this.param('min'), this.param('max')], d; - if (e[0] == null || e[1] == null) { - d = dl.extent(data, this.param('field').accessor); - if (e[0] == null) e[0] = d[0]; - if (e[1] == null) e[1] = d[1]; - } - return e; -}; - -prototype.batchTransform = function(input, data) { - log.debug(input, ['binning']); - - var extent = this.extent(data), - output = this._output, - step = this.param('step'), - steps = this.param('steps'), - minstep = this.param('minstep'), - get = this.param('field').accessor, - opt = { - min: extent[0], - max: extent[1], - base: this.param('base'), - maxbins: this.param('maxbins'), - div: this.param('div') - }; - - if (step) opt.step = step; - if (steps) opt.steps = steps; - if (minstep) opt.minstep = minstep; - var b = dl.bins(opt), - s = b.step; - - function update(d) { - var v = get(d); - v = v == null ? null - : b.start + s * ~~((v - b.start) / s); - Tuple.set(d, output.start, v); - Tuple.set(d, output.end, v + s); - Tuple.set(d, output.mid, v + s/2); - } - input.add.forEach(update); - input.mod.forEach(update); - input.rem.forEach(update); - - input.fields[output.start] = 1; - input.fields[output.end] = 1; - input.fields[output.mid] = 1; - return input; -}; - -module.exports = Bin; -},{"./BatchTransform":119,"./Transform":140,"datalib":26,"vega-dataflow":41,"vega-logging":48}],121:[function(require,module,exports){ -var df = require('vega-dataflow'), - Tuple = df.Tuple, - log = require('vega-logging'), - Transform = require('./Transform'); - -function CountPattern(graph) { - Transform.prototype.init.call(this, graph); - Transform.addParameters(this, { - field: {type: 'field', default: 'data'}, - pattern: {type: 'value', default: '[\\w\']+'}, - case: {type: 'value', default: 'lower'}, - stopwords: {type: 'value', default: ''} - }); - - this._output = {text: 'text', count: 'count'}; - - return this.router(true).produces(true); -} - -var prototype = (CountPattern.prototype = Object.create(Transform.prototype)); -prototype.constructor = CountPattern; - -prototype.transform = function(input, reset) { - log.debug(input, ['countpattern']); - - var get = this.param('field').accessor, - pattern = this.param('pattern'), - stop = this.param('stopwords'), - rem = false; - - // update parameters - if (this._stop !== stop) { - this._stop = stop; - this._stop_re = new RegExp('^' + stop + '$', 'i'); - reset = true; - } - - if (this._pattern !== pattern) { - this._pattern = pattern; - this._match = new RegExp(this._pattern, 'g'); - reset = true; - } - - if (reset) this._counts = {}; - - function curr(t) { return (Tuple.prev_init(t), get(t)); } - function prev(t) { return get(Tuple.prev(t)); } - - this._add(input.add, curr); - if (!reset) this._rem(input.rem, prev); - if (reset || (rem = input.fields[get.field])) { - if (rem) this._rem(input.mod, prev); - this._add(input.mod, curr); - } - - // generate output tuples - return this._changeset(input); -}; - -prototype._changeset = function(input) { - var counts = this._counts, - tuples = this._tuples || (this._tuples = {}), - change = df.ChangeSet.create(input), - out = this._output, w, t, c; - - for (w in counts) { - t = tuples[w]; - c = counts[w] || 0; - if (!t && c) { - tuples[w] = (t = Tuple.ingest({})); - t[out.text] = w; - t[out.count] = c; - change.add.push(t); - } else if (c === 0) { - if (t) change.rem.push(t); - delete counts[w]; - delete tuples[w]; - } else if (t[out.count] !== c) { - Tuple.set(t, out.count, c); - change.mod.push(t); - } - } - return change; -}; - -prototype._tokenize = function(text) { - switch (this.param('case')) { - case 'upper': text = text.toUpperCase(); break; - case 'lower': text = text.toLowerCase(); break; - } - return text.match(this._match); -}; - -prototype._add = function(tuples, get) { - var counts = this._counts, - stop = this._stop_re, - tok, i, j, t; - - for (j=0; j=0; --i) { - t = tpls[i]; - l = x === t[as.left]; // Cache has tpls w/x both on left & right. - y = l ? t[as.right] : t[as.left]; - cid = _cid(l, x, y); - - // Lazy removal: y was previously rem'd, so clean up the cache. - if (!cache[y._id]) { - cids[cid] = false; - tpls.splice(i, 1); - continue; - } - - if (!test || test(t)) { - if (mids[t._id]) continue; - omod.push(t); - mids[t._id] = 1; - } else { - if (!rids[t._id]) orem.push.apply(orem, tpls.splice(i, 1)); - rids[t._id] = 1; - cids[cid] = false; - cross.f = true; - } - } - } - - // If we have a filter param, call add to catch any tuples that may - // have previously been filtered. - if (test && fltrd) add.call(this, output, left, data, diag, test, mids, x); -} - -function rem(output, left, rids, x) { - var as = this._output, - cross = this._cache[x._id], - cids = this._cids, - orem = output.rem, - i, len, t, y, l; - if (!cross) return; - - for (i=0, len=cross.c.length; i this._lastWith) { - woutput.rem.forEach(rem.bind(this, output, false, rids)); - woutput.add.forEach(add.bind(this, output, false, data, diag, test, mids)); - woutput.mod.forEach(mod.bind(this, output, false, data, diag, test, mids, rids)); - this._lastWith = woutput.stamp; - } - - // Mods need to come after all removals have been run. - input.mod.forEach(mod.bind(this, output, true, wdata, diag, test, mids, rids)); - } - - output.fields[as.left] = 1; - output.fields[as.right] = 1; - return output; -}; - -module.exports = Cross; -},{"./BatchTransform":119,"./Transform":140,"datalib":26,"vega-dataflow":41,"vega-logging":48}],123:[function(require,module,exports){ -var Transform = require('./Transform'), - Aggregate = require('./Aggregate'); - -function Facet(graph) { - Transform.addParameters(this, { - transform: { - type: "custom", - set: function(pipeline) { - return (this._transform._pipeline = pipeline, this._transform); - }, - get: function() { - var parse = require('../parse/transforms'), - facet = this._transform; - return facet._pipeline.map(function(t) { - return parse(facet._graph, t); - }); - } - } - }); - - this._pipeline = []; - return Aggregate.call(this, graph); -} - -var prototype = (Facet.prototype = Object.create(Aggregate.prototype)); -prototype.constructor = Facet; - -prototype.aggr = function() { - return Aggregate.prototype.aggr.call(this).facet(this); -}; - -prototype.transform = function(input, reset) { - var output = Aggregate.prototype.transform.call(this, input, reset); - - // New facet cells should trigger a re-ranking of the dataflow graph. - // This ensures facet datasources are computed before scenegraph nodes. - // We rerank the Facet's first listener, which is the next node in the - // datasource's pipeline. - if (input.add.length) { - this.listeners()[0].rerank(); - } - - return output; -}; - -module.exports = Facet; -},{"../parse/transforms":108,"./Aggregate":118,"./Transform":140}],124:[function(require,module,exports){ -var dl = require('datalib'), - Aggregator = dl.Aggregator, - Base = Aggregator.prototype, - df = require('vega-dataflow'), - Tuple = df.Tuple, - log = require('vega-logging'), - facetID = 0; - -function Facetor() { - Aggregator.call(this); - this._facet = null; - this._facetID = ++facetID; -} - -var prototype = (Facetor.prototype = Object.create(Base)); -prototype.constructor = Facetor; - -prototype.facet = function(f) { - return arguments.length ? (this._facet = f, this) : this._facet; -}; - -prototype._ingest = function(t) { - return Tuple.ingest(t, null); -}; - -prototype._assign = Tuple.set; - -function disconnect_cell(facet) { - log.debug({}, ['disconnecting cell', this.tuple._id]); - var pipeline = this.ds.pipeline(); - facet.removeListener(pipeline[0]); - facet._graph.removeListener(pipeline[0]); - facet._graph.disconnect(pipeline); -} - -prototype._newcell = function(x, key) { - var cell = Base._newcell.call(this, x, key), - facet = this._facet; - - if (facet) { - var graph = facet._graph, - tuple = cell.tuple, - pipeline = facet.param('transform'); - cell.ds = graph.data(tuple._facetID, pipeline, tuple); - cell.disconnect = disconnect_cell; - facet.addListener(pipeline[0]); - } - - return cell; -}; - -prototype._newtuple = function(x, key) { - var t = Base._newtuple.call(this, x); - if (this._facet) { - Tuple.set(t, 'key', key); - Tuple.set(t, '_facetID', this._facetID + '_' + key); - } - return t; -}; - -prototype.clear = function() { - if (this._facet) { - for (var k in this._cells) { - this._cells[k].disconnect(this._facet); - } - } - return Base.clear.call(this); -}; - -prototype._on_add = function(x, cell) { - if (this._facet) cell.ds._input.add.push(x); -}; - -prototype._on_rem = function(x, cell) { - if (this._facet) cell.ds._input.rem.push(x); -}; - -prototype._on_mod = function(x, prev, cell0, cell1) { - if (this._facet) { // Propagate tuples - if (cell0 === cell1) { - cell0.ds._input.mod.push(x); - } else { - cell0.ds._input.rem.push(x); - cell1.ds._input.add.push(x); - } - } -}; - -prototype._on_drop = function(cell) { - if (this._facet) cell.disconnect(this._facet); -}; - -prototype._on_keep = function(cell) { - // propagate sort, signals, fields, etc. - if (this._facet) df.ChangeSet.copy(this._input, cell.ds._input); -}; - -module.exports = Facetor; -},{"datalib":26,"vega-dataflow":41,"vega-logging":48}],125:[function(require,module,exports){ -var df = require('vega-dataflow'), - log = require('vega-logging'), - Transform = require('./Transform'); - -function Filter(graph) { - Transform.prototype.init.call(this, graph); - Transform.addParameters(this, {test: {type: 'expr'}}); - - this._skip = {}; - return this.router(true); -} - -var prototype = (Filter.prototype = Object.create(Transform.prototype)); -prototype.constructor = Filter; - -prototype.transform = function(input) { - log.debug(input, ['filtering']); - - var output = df.ChangeSet.create(input), - skip = this._skip, - test = this.param('test'); - - input.rem.forEach(function(x) { - if (skip[x._id] !== 1) output.rem.push(x); - else skip[x._id] = 0; - }); - - input.add.forEach(function(x) { - if (test(x)) output.add.push(x); - else skip[x._id] = 1; - }); - - input.mod.forEach(function(x) { - var b = test(x), - s = (skip[x._id] === 1); - if (b && s) { - skip[x._id] = 0; - output.add.push(x); - } else if (b && !s) { - output.mod.push(x); - } else if (!b && s) { - // do nothing, keep skip true - } else { // !b && !s - output.rem.push(x); - skip[x._id] = 1; - } - }); - - return output; -}; - -module.exports = Filter; -},{"./Transform":140,"vega-dataflow":41,"vega-logging":48}],126:[function(require,module,exports){ -var df = require('vega-dataflow'), - Tuple = df.Tuple, - log = require('vega-logging'), - Transform = require('./Transform'); - -function Fold(graph) { - Transform.prototype.init.call(this, graph); - Transform.addParameters(this, { - fields: {type: 'array'} - }); - - this._output = {key: 'key', value: 'value'}; - this._cache = {}; - - return this.router(true).produces(true); -} - -var prototype = (Fold.prototype = Object.create(Transform.prototype)); -prototype.constructor = Fold; - -prototype._reset = function(input, output) { - for (var id in this._cache) { - output.rem.push.apply(output.rem, this._cache[id]); - } - this._cache = {}; -}; - -prototype._tuple = function(x, i, len) { - var list = this._cache[x._id] || (this._cache[x._id] = Array(len)); - return list[i] ? Tuple.rederive(x, list[i]) : (list[i] = Tuple.derive(x)); -}; - -prototype._fn = function(data, on, out) { - var i, j, n, m, d, t; - for (i=0, n=data.length; i', default: require('./screen').size}, - bound: {type: 'value', default: true}, - links: {type: 'data'}, - - // TODO: for now force these to be value params only (pun-intended) - // Can update to include fields after Parameter refactoring. - linkStrength: {type: 'value', default: 1}, - linkDistance: {type: 'value', default: 20}, - charge: {type: 'value', default: -30}, - - chargeDistance: {type: 'value', default: Infinity}, - friction: {type: 'value', default: 0.9}, - theta: {type: 'value', default: 0.8}, - gravity: {type: 'value', default: 0.1}, - alpha: {type: 'value', default: 0.1}, - iterations: {type: 'value', default: 500}, - - interactive: {type: 'value', default: this._interactive}, - active: {type: 'value', default: this._prev}, - fixed: {type: 'data'} - }); - - this._output = { - 'x': 'layout_x', - 'y': 'layout_y' - }; - - return this.mutates(true); -} - -var prototype = (Force.prototype = Object.create(Transform.prototype)); -prototype.constructor = Force; - -prototype.transform = function(nodeInput, reset) { - log.debug(nodeInput, ['force']); - reset = reset - (nodeInput.signals.active ? 1 : 0); - - // get variables - var interactive = this.param('interactive'), - linkSource = this.param('links').source, - linkInput = linkSource.last(), - active = this.param('active'), - output = this._output, - layout = this._layout, - nodes = this._nodes, - links = this._links; - - // configure nodes, links and layout - if (linkInput.stamp < nodeInput.stamp) linkInput = null; - this.configure(nodeInput, linkInput, interactive, reset); - - // run batch layout - if (!interactive) { - var iterations = this.param('iterations'); - for (var i=0; i'}, - translate: {type: 'array', default: require('./screen').center}, - rotate: {type: 'array'}, - scale: {type: 'value'}, - precision: {type: 'value'}, - clipAngle: {type: 'value'}, - clipExtent: {type: 'value'} -}; - -Geo.d3Projection = function() { - var p = this.param('projection'), - param = Geo.Parameters, - proj, name, value; - - if (p !== this._mode) { - this._mode = p; - this._projection = d3.geo[p](); - } - proj = this._projection; - - for (name in param) { - if (name === 'projection' || !proj[name]) continue; - value = this.param(name); - if (value === undefined || (dl.isArray(value) && value.length === 0)) { - continue; - } - if (value !== proj[name]()) { - proj[name](value); - } - } - - return proj; -}; - -var prototype = (Geo.prototype = Object.create(Transform.prototype)); -prototype.constructor = Geo; - -prototype.transform = function(input) { - log.debug(input, ['geo']); - - var output = this._output, - lon = this.param('lon').accessor, - lat = this.param('lat').accessor, - proj = Geo.d3Projection.call(this); - - function set(t) { - var ll = [lon(t), lat(t)]; - var xy = proj(ll) || [null, null]; - Tuple.set(t, output.x, xy[0]); - Tuple.set(t, output.y, xy[1]); - } - - input.add.forEach(set); - if (this.reevaluate(input)) { - input.mod.forEach(set); - input.rem.forEach(set); - } - - input.fields[output.x] = 1; - input.fields[output.y] = 1; - return input; -}; - -module.exports = Geo; -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./Transform":140,"./screen":146,"datalib":26,"vega-dataflow":41,"vega-logging":48}],130:[function(require,module,exports){ -(function (global){ -var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== "undefined" ? global['d3'] : null), - dl = require('datalib'), - Tuple = require('vega-dataflow').Tuple, - log = require('vega-logging'), - Geo = require('./Geo'), - Transform = require('./Transform'); - -function GeoPath(graph) { - Transform.prototype.init.call(this, graph); - Transform.addParameters(this, Geo.Parameters); - Transform.addParameters(this, { - field: {type: 'field', default: null}, - }); - - this._output = { - 'path': 'layout_path' - }; - return this.mutates(true); -} - -var prototype = (GeoPath.prototype = Object.create(Transform.prototype)); -prototype.constructor = GeoPath; - -prototype.transform = function(input) { - log.debug(input, ['geopath']); - - var output = this._output, - geojson = this.param('field').accessor || dl.identity, - proj = Geo.d3Projection.call(this), - path = d3.geo.path().projection(proj); - - function set(t) { - Tuple.set(t, output.path, path(geojson(t))); - } - - input.add.forEach(set); - if (this.reevaluate(input)) { - input.mod.forEach(set); - input.rem.forEach(set); - } - - input.fields[output.path] = 1; - return input; -}; - -module.exports = GeoPath; -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./Geo":129,"./Transform":140,"datalib":26,"vega-dataflow":41,"vega-logging":48}],131:[function(require,module,exports){ -(function (global){ -var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== "undefined" ? global['d3'] : null), - dl = require('datalib'), - Tuple = require('vega-dataflow').Tuple, - log = require('vega-logging'), - Transform = require('./Transform'), - BatchTransform = require('./BatchTransform'); - -function Hierarchy(graph) { - BatchTransform.prototype.init.call(this, graph); - Transform.addParameters(this, { - // hierarchy parameters - sort: {type: 'array', default: null}, - children: {type: 'field', default: 'children'}, - parent: {type: 'field', default: 'parent'}, - field: {type: 'value', default: null}, - // layout parameters - mode: {type: 'value', default: 'tidy'}, // tidy, cluster, partition - size: {type: 'array', default: require('./screen').size}, - nodesize: {type: 'array', default: null}, - orient: {type: 'value', default: 'cartesian'} - }); - - this._mode = null; - this._output = { - 'x': 'layout_x', - 'y': 'layout_y', - 'width': 'layout_width', - 'height': 'layout_height', - 'depth': 'layout_depth' - }; - return this.mutates(true); -} - -var PARTITION = 'partition'; - -var SEPARATION = { - cartesian: function(a, b) { return (a.parent === b.parent ? 1 : 2); }, - radial: function(a, b) { return (a.parent === b.parent ? 1 : 2) / a.depth; } -}; - -var prototype = (Hierarchy.prototype = Object.create(BatchTransform.prototype)); -prototype.constructor = Hierarchy; - -prototype.batchTransform = function(input, data) { - log.debug(input, ['hierarchy layout']); - - // get variables - var layout = this._layout, - output = this._output, - mode = this.param('mode'), - sort = this.param('sort'), - nodesz = this.param('nodesize'), - parent = this.param('parent').accessor, - root = data.filter(function(d) { return parent(d) === null; })[0]; - - if (mode !== this._mode) { - this._mode = mode; - if (mode === 'tidy') mode = 'tree'; - layout = (this._layout = d3.layout[mode]()); - } - - input.fields[output.x] = 1; - input.fields[output.y] = 1; - input.fields[output.depth] = 1; - if (mode === PARTITION) { - input.fields[output.width] = 1; - input.fields[output.height] = 1; - layout.value(this.param('field').accessor); - } else { - layout.separation(SEPARATION[this.param('orient')]); - } - - if (nodesz.length && mode !== PARTITION) { - layout.nodeSize(nodesz); - } else { - layout.size(this.param('size')); - } - - layout - .sort(sort.field.length ? dl.comparator(sort.field) : null) - .children(this.param('children').accessor) - .nodes(root); - - // copy layout values to nodes - data.forEach(function(n) { - Tuple.set(n, output.x, n.x); - Tuple.set(n, output.y, n.y); - Tuple.set(n, output.depth, n.depth); - if (mode === PARTITION) { - Tuple.set(n, output.width, n.dx); - Tuple.set(n, output.height, n.dy); - } - }); - - // return changeset - return input; -}; - -module.exports = Hierarchy; -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./BatchTransform":119,"./Transform":140,"./screen":146,"datalib":26,"vega-dataflow":41,"vega-logging":48}],132:[function(require,module,exports){ -var dl = require('datalib'), - log = require('vega-logging'), - Tuple = require('vega-dataflow').Tuple, - Transform = require('./Transform'), - BatchTransform = require('./BatchTransform'); - -function Impute(graph) { - BatchTransform.prototype.init.call(this, graph); - Transform.addParameters(this, { - groupby: {type: 'array'}, - orderby: {type: 'array'}, - field: {type: 'field'}, - method: {type: 'value', default: 'value'}, - value: {type: 'value', default: 0} - }); - - return this.router(true).produces(true); -} - -var prototype = (Impute.prototype = Object.create(BatchTransform.prototype)); -prototype.constructor = Impute; - -prototype.batchTransform = function(input, data) { - log.debug(input, ['imputing']); - - var groupby = this.param('groupby'), - orderby = this.param('orderby'), - method = this.param('method'), - value = this.param('value'), - field = this.param('field'), - get = field.accessor, - name = field.field, - prev = this._imputed || [], curr = [], - groups = partition(data, groupby.accessor, orderby.accessor), - domain = groups.domain, - group, i, j, n, m, t; - - function getval(x) { - return x == null ? null : get(x); - } - - for (j=0, m=groups.length; j Math.PI ? ta <= sa : ta > sa; - return 'M' + (sr*sc) + ',' + (sr*ss) + - 'A' + sr + ',' + sr + ' 0 0,' + (sf?1:0) + - ' ' + (sr*tc) + ',' + (sr*ts) + - 'L' + (tr*tc) + ',' + (tr*ts); -} - -function diagonalX(sx, sy, tx, ty) { - var m = (sx + tx) / 2; - return 'M' + sx + ',' + sy + - 'C' + m + ',' + sy + - ' ' + m + ',' + ty + - ' ' + tx + ',' + ty; -} - -function diagonalY(sx, sy, tx, ty) { - var m = (sy + ty) / 2; - return 'M' + sx + ',' + sy + - 'C' + sx + ',' + m + - ' ' + tx + ',' + m + - ' ' + tx + ',' + ty; -} - -function diagonalR(sa, sr, ta, tr) { - var sc = Math.cos(sa), - ss = Math.sin(sa), - tc = Math.cos(ta), - ts = Math.sin(ta), - mr = (sr + tr) / 2; - return 'M' + (sr*sc) + ',' + (sr*ss) + - 'C' + (mr*sc) + ',' + (mr*ss) + - ' ' + (mr*tc) + ',' + (mr*ts) + - ' ' + (tr*tc) + ',' + (tr*ts); -} - -var shapes = { - line: line, - curve: curve, - cornerX: cornerX, - cornerY: cornerY, - cornerR: cornerR, - diagonalX: diagonalX, - diagonalY: diagonalY, - diagonalR: diagonalR -}; - -prototype.transform = function(input) { - log.debug(input, ['linkpath']); - - var output = this._output, - shape = shapes[this.param('shape')] || shapes.line, - sourceX = this.param('sourceX').accessor, - sourceY = this.param('sourceY').accessor, - targetX = this.param('targetX').accessor, - targetY = this.param('targetY').accessor, - tension = this.param('tension'); - - function set(t) { - var path = shape(sourceX(t), sourceY(t), targetX(t), targetY(t), tension); - Tuple.set(t, output.path, path); - } - - input.add.forEach(set); - if (this.reevaluate(input)) { - input.mod.forEach(set); - input.rem.forEach(set); - } - - input.fields[output.path] = 1; - return input; -}; - -module.exports = LinkPath; -},{"./Transform":140,"vega-dataflow":41,"vega-logging":48}],134:[function(require,module,exports){ -var Tuple = require('vega-dataflow').Tuple, - log = require('vega-logging'), - Transform = require('./Transform'); - -function Lookup(graph) { - Transform.prototype.init.call(this, graph); - Transform.addParameters(this, { - on: {type: 'data'}, - onKey: {type: 'field', default: null}, - as: {type: 'array'}, - keys: {type: 'array', default: ['data']}, - default: {type: 'value'} - }); - - return this.mutates(true); -} - -var prototype = (Lookup.prototype = Object.create(Transform.prototype)); -prototype.constructor = Lookup; - -prototype.transform = function(input, reset) { - log.debug(input, ['lookup']); - - var on = this.param('on'), - onLast = on.source.last(), - onData = on.source.values(), - onKey = this.param('onKey'), - onF = onKey.field, - keys = this.param('keys'), - get = keys.accessor, - as = this.param('as'), - defaultValue = this.param('default'), - lut = this._lut, - i, v; - - // build lookup table on init, withKey modified, or tuple add/rem - if (lut == null || this._on !== onF || onF && onLast.fields[onF] || - onLast.add.length || onLast.rem.length) - { - if (onF) { // build hash from withKey field - onKey = onKey.accessor; - for (lut={}, i=0; i'} }); - this.router(true); -} - -var prototype = (Sort.prototype = Object.create(Transform.prototype)); -prototype.constructor = Sort; - -prototype.transform = function(input) { - log.debug(input, ['sorting']); - - if (input.add.length || input.mod.length || input.rem.length) { - input.sort = dl.comparator(this.param('by').field); - } - return input; -}; - -module.exports = Sort; -},{"./Transform":140,"datalib":26,"vega-logging":48}],139:[function(require,module,exports){ -var dl = require('datalib'), - Tuple = require('vega-dataflow').Tuple, - log = require('vega-logging'), - Transform = require('./Transform'), - BatchTransform = require('./BatchTransform'); - -function Stack(graph) { - BatchTransform.prototype.init.call(this, graph); - Transform.addParameters(this, { - groupby: {type: 'array'}, - sortby: {type: 'array'}, - field: {type: 'field'}, - offset: {type: 'value', default: 'zero'} - }); - - this._output = { - 'start': 'layout_start', - 'end': 'layout_end', - 'mid': 'layout_mid' - }; - return this.mutates(true); -} - -var prototype = (Stack.prototype = Object.create(BatchTransform.prototype)); -prototype.constructor = Stack; - -prototype.batchTransform = function(input, data) { - log.debug(input, ['stacking']); - - var groupby = this.param('groupby').accessor, - sortby = dl.comparator(this.param('sortby').field), - field = this.param('field').accessor, - offset = this.param('offset'), - output = this._output; - - // partition, sum, and sort the stack groups - var groups = partition(data, groupby, sortby, field); - - // compute stack layouts per group - for (var i=0, max=groups.max; i max) max = s; - if (sortby != null) g.sort(sortby); - } - groups.max = max; - - return groups; -} - -module.exports = Stack; -},{"./BatchTransform":119,"./Transform":140,"datalib":26,"vega-dataflow":41,"vega-logging":48}],140:[function(require,module,exports){ -var df = require('vega-dataflow'), - Base = df.Node.prototype, // jshint ignore:line - Deps = df.Dependencies, - Parameter = require('./Parameter'); - -function Transform(graph) { - if (graph) Base.init.call(this, graph); -} - -Transform.addParameters = function(proto, params) { - proto._parameters = proto._parameters || {}; - for (var name in params) { - var p = params[name], - param = new Parameter(name, p.type, proto); - - proto._parameters[name] = param; - - if (p.type === 'custom') { - if (p.set) param.set = p.set.bind(param); - if (p.get) param.get = p.get.bind(param); - } - - if (p.hasOwnProperty('default')) param.set(p.default); - } -}; - -var prototype = (Transform.prototype = Object.create(Base)); -prototype.constructor = Transform; - -prototype.param = function(name, value) { - var param = this._parameters[name]; - return (param === undefined) ? this : - (arguments.length === 1) ? param.get() : param.set(value); -}; - -// Perform transformation. Subclasses should override. -prototype.transform = function(input/*, reset */) { - return input; -}; - -prototype.evaluate = function(input) { - // Many transforms store caches that must be invalidated if - // a signal value has changed. - var reset = this._stamp < input.stamp && - this.dependency(Deps.SIGNALS).reduce(function(c, s) { - return c += input.signals[s] ? 1 : 0; - }, 0); - return this.transform(input, reset); -}; - -prototype.output = function(map) { - for (var key in this._output) { - if (map[key] !== undefined) { - this._output[key] = map[key]; - } - } - return this; -}; - -module.exports = Transform; -},{"./Parameter":135,"vega-dataflow":41}],141:[function(require,module,exports){ -var dl = require('datalib'), - Tuple = require('vega-dataflow').Tuple, - log = require('vega-logging'), - Transform = require('./Transform'), - BatchTransform = require('./BatchTransform'); - -function Treeify(graph) { - BatchTransform.prototype.init.call(this, graph); - Transform.addParameters(this, { - groupby: {type: 'array'} - }); - - this._output = { - 'children': 'children', - 'parent': 'parent' - }; - return this.router(true).produces(true); -} - -var prototype = (Treeify.prototype = Object.create(BatchTransform.prototype)); -prototype.constructor = Treeify; - -prototype.batchTransform = function(input, data) { - log.debug(input, ['treeifying']); - - var fields = this.param('groupby').field, - childField = this._output.children, - parentField = this._output.parent, - summary = [{name:'*', ops: ['values'], as: [childField]}], - aggrs = fields.map(function(f) { - return dl.groupby(f).summarize(summary); - }), - prev = this._internal || [], curr = [], i, n; - - function level(index, node, values) { - var vals = aggrs[index].execute(values); - - node[childField] = vals; - vals.forEach(function(n) { - n[parentField] = node; - curr.push(Tuple.ingest(n)); - if (index+1 < fields.length) level(index+1, n, n[childField]); - else n[childField].forEach(function(c) { c[parentField] = n; }); - }); - } - - var root = Tuple.ingest({}); - root[parentField] = null; - curr.push(root); - level(0, root, data); - - // update changeset with internal nodes - for (i=0, n=curr.length; i', default: ['-value']}, - children: {type: 'field', default: 'children'}, - parent: {type: 'field', default: 'parent'}, - field: {type: 'field', default: 'value'}, - // treemap parameters - size: {type: 'array', default: require('./screen').size}, - round: {type: 'value', default: true}, - sticky: {type: 'value', default: false}, - ratio: {type: 'value', default: defaultRatio}, - padding: {type: 'value', default: null}, - mode: {type: 'value', default: 'squarify'} - }); - - this._layout = d3.layout.treemap(); - - this._output = { - 'x': 'layout_x', - 'y': 'layout_y', - 'width': 'layout_width', - 'height': 'layout_height', - 'depth': 'layout_depth', - }; - return this.mutates(true); -} - -var prototype = (Treemap.prototype = Object.create(BatchTransform.prototype)); -prototype.constructor = Treemap; - -prototype.batchTransform = function(input, data) { - log.debug(input, ['treemap']); - - // get variables - var layout = this._layout, - output = this._output, - sticky = this.param('sticky'), - parent = this.param('parent').accessor, - root = data.filter(function(d) { return parent(d) === null; })[0]; - - // layout.sticky resets state _regardless_ of input value - // so, we perform out own check first - if (layout.sticky() !== sticky) { layout.sticky(sticky); } - - // configure layout - layout - .sort(dl.comparator(this.param('sort').field)) - .children(this.param('children').accessor) - .value(this.param('field').accessor) - .size(this.param('size')) - .round(this.param('round')) - .ratio(this.param('ratio')) - .padding(this.param('padding')) - .mode(this.param('mode')) - .nodes(root); - - // copy layout values to nodes - data.forEach(function(n) { - Tuple.set(n, output.x, n.x); - Tuple.set(n, output.y, n.y); - Tuple.set(n, output.width, n.dx); - Tuple.set(n, output.height, n.dy); - Tuple.set(n, output.depth, n.depth); - }); - - // return changeset - input.fields[output.x] = 1; - input.fields[output.y] = 1; - input.fields[output.width] = 1; - input.fields[output.height] = 1; - input.fields[output.depth] = 1; - return input; -}; - -module.exports = Treemap; -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./BatchTransform":119,"./Transform":140,"./screen":146,"datalib":26,"vega-dataflow":41,"vega-logging":48}],143:[function(require,module,exports){ -(function (global){ -var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== "undefined" ? global['d3'] : null), - Tuple = require('vega-dataflow/src/Tuple'), - log = require('vega-logging'), - Transform = require('./Transform'), - BatchTransform = require('./BatchTransform'); - -function Voronoi(graph) { - BatchTransform.prototype.init.call(this, graph); - Transform.addParameters(this, { - clipExtent: {type: 'array', default: require('./screen').extent}, - x: {type: 'field', default: 'layout_x'}, - y: {type: 'field', default: 'layout_y'} - }); - - this._layout = d3.geom.voronoi(); - this._output = {'path': 'layout_path'}; - - return this.mutates(true); -} - -var prototype = (Voronoi.prototype = Object.create(BatchTransform.prototype)); -prototype.constructor = Voronoi; - -prototype.batchTransform = function(input, data) { - log.debug(input, ['voronoi']); - - // get variables - var pathname = this._output.path; - - // configure layout - var polygons = this._layout - .clipExtent(this.param('clipExtent')) - .x(this.param('x').accessor) - .y(this.param('y').accessor) - (data); - - // build and assign path strings - for (var i=0; i', default: require('./screen').size}, - text: {type: 'field', default: 'data'}, - rotate: {type: 'field|value', default: 0}, - font: {type: 'field|value', default: {value: 'sans-serif'}}, - fontSize: {type: 'field|value', default: 14}, - fontStyle: {type: 'field|value', default: {value: 'normal'}}, - fontWeight: {type: 'field|value', default: {value: 'normal'}}, - fontScale: {type: 'array', default: [10, 50]}, - padding: {type: 'value', default: 1}, - spiral: {type: 'value', default: 'archimedean'} - }); - - this._layout = d3_cloud().canvas(canvas.instance); - - this._output = { - 'x': 'layout_x', - 'y': 'layout_y', - 'font': 'layout_font', - 'fontSize': 'layout_fontSize', - 'fontStyle': 'layout_fontStyle', - 'fontWeight': 'layout_fontWeight', - 'rotate': 'layout_rotate', - }; - - return this.mutates(true); -} - -var prototype = (Wordcloud.prototype = Object.create(BatchTransform.prototype)); -prototype.constructor = Wordcloud; - -function get(p) { - return (p && p.accessor) || p; -} - -function wrap(tuple) { - var x = Object.create(tuple); - x._tuple = tuple; - return x; -} - -prototype.batchTransform = function(input, data) { - log.debug(input, ['wordcloud']); - - // get variables - var layout = this._layout, - output = this._output, - fontSize = this.param('fontSize'), - range = fontSize.accessor && this.param('fontScale'), - size, scale; - fontSize = fontSize.accessor || d3.functor(fontSize); - - // create font size scaling function as needed - if (range.length) { - scale = d3.scale.sqrt() - .domain(dl.extent(data, size=fontSize)) - .range(range); - fontSize = function(x) { return scale(size(x)); }; - } - - // configure layout - layout - .size(this.param('size')) - .text(get(this.param('text'))) - .padding(this.param('padding')) - .spiral(this.param('spiral')) - .rotate(get(this.param('rotate'))) - .font(get(this.param('font'))) - .fontStyle(get(this.param('fontStyle'))) - .fontWeight(get(this.param('fontWeight'))) - .fontSize(fontSize) - .words(data.map(wrap)) // wrap to avoid tuple writes - .on('end', function(words) { - var size = layout.size(), - dx = size[0] >> 1, - dy = size[1] >> 1, - w, t, i, len; - - for (i=0, len=words.length; i 0 ? (e = 1e-12, Math.ceil) : (e = -1e-12, Math.floor), - e; - function log(x) { - return (domain[0] < 0 ? - -Math.log(x > 0 ? 0 : -x) : - Math.log(x < 0 ? 0 : x)) / Math.log(base); - } - function pow(x) { - return domain[0] < 0 ? -Math.pow(base, -x) : Math.pow(base, x); - } - return function(d) { - return pow(v(log(d) + e)) / d >= k ? f(d) : ''; - }; -} - -function getFormatter(scale, tickCount, formatType, str) { - var fmt = dl.format, - log = scale.type === 'log', - domain; - - switch (formatType) { - case NUMBER: - domain = scale.domain(); - return log ? - logFilter(scale, domain, tickCount, fmt.auto.number(str || null)) : - fmt.auto.linear(domain, tickCount, str || null); - case TIME: return (str ? fmt : fmt.auto).time(str); - case UTC: return (str ? fmt : fmt.auto).utc(str); - default: return String; - } -} - -module.exports = { - getTickFormat: getTickFormat -}; -},{"datalib":26}],148:[function(require,module,exports){ -var dl = require('datalib'), - u = {}; - -dl.extend(u, require('./format')); -module.exports = dl.extend(u, dl); -},{"./format":147,"datalib":26}],149:[function(require,module,exports){ -module.exports = function(def, config, property, defaultVal) { - if (def[property] !== undefined) { - return def[property]; - } else if (config !== undefined && config[property] !== undefined) { - return config[property]; - } else if (defaultVal !== undefined) { - return defaultVal; - } - return undefined; -}; -},{}]},{},[1])(1) -}); -//# sourceMappingURL=vega.js.map diff --git a/dist/extensions/Graph/modules/.eslintrc.json b/dist/extensions/Graph/modules/.eslintrc.json deleted file mode 100644 index e9af1fc93..000000000 --- a/dist/extensions/Graph/modules/.eslintrc.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "root": true, - "extends": [ - "wikimedia/client-es5", - "wikimedia/jquery", - "wikimedia/mediawiki", - "wikimedia/jsduck" - ], - "globals": { - "vg": "readonly" - } -} diff --git a/dist/extensions/Graph/modules/graph-loader.js b/dist/extensions/Graph/modules/graph-loader.js deleted file mode 100644 index 29d698bec..000000000 --- a/dist/extensions/Graph/modules/graph-loader.js +++ /dev/null @@ -1,45 +0,0 @@ -( function () { - /** - * Replace a graph image by the vega graph. - * - * If dependencies aren't loaded yet, they are loaded first - * before rendering the graph. - * - * @param {jQuery} $el Graph container. - */ - function loadAndReplaceWithGraph( $el ) { - var requestPromise = new mw.Api().get( { - formatversion: 2, - action: 'graph', - title: mw.config.get( 'wgPageName' ), - oldid: mw.config.get( 'wgRevisionId' ), - hash: $el.data( 'graphId' ) - } ); - // Lazy loading dependencies - $.when( requestPromise, mw.loader.using( 'ext.graph.vega2' ) ).done( function ( data ) { - mw.drawVegaGraph( $el[ 0 ], data[ 0 ].graph, function ( error ) { - if ( error ) { - mw.log.warn( error ); - } - $el.removeClass( [ 'mw-graph-lazyload', 'mw-graph-loading' ] ); - // TODO: handle error by showing some message - } ); - } ); - } - - function lazyLoader( $content ) { - // Make graph containers clickable - $content.find( '.mw-graph.mw-graph-lazyload' ).each( function () { - var $this = $( this ); - - // Add a class to decorate loading phase - $this.addClass( 'mw-graph-loading' ); - - // Replace the image with the graph - loadAndReplaceWithGraph( $this ); - } ); - } - - mw.hook( 'wikipage.content' ).add( lazyLoader ); - -}() ); diff --git a/dist/extensions/Graph/modules/graph.sandbox.js b/dist/extensions/Graph/modules/graph.sandbox.js deleted file mode 100644 index 51b40596c..000000000 --- a/dist/extensions/Graph/modules/graph.sandbox.js +++ /dev/null @@ -1,75 +0,0 @@ -/* eslint-disable no-jquery/no-global-selector */ -( function () { - var oldContent, ccw, resizeCodeEditor; - - $( function () { - var viewportHeight = $( window ).height(), - sandboxHeight = viewportHeight - 150, - initialPosition = sandboxHeight - 100; - $( '#mw-graph-sandbox' ).width( '100%' ).height( sandboxHeight ).split( { - orientation: 'vertical', - limit: 100, - position: '40%' - } ); - $( '#mw-graph-left' ).split( { - orientation: 'horizontal', - limit: 100, - position: initialPosition - } ); - } ); - - mw.hook( 'codeEditor.configure' ).add( function ( session ) { - var $json = $( '#mw-graph-json' )[ 0 ], - $graph = $( '.mw-graph' ), - $graphEl = $graph[ 0 ], - $rightPanel = $( '#mw-graph-right' ), - $editor = $( '.editor' ); - - if ( ccw ) { - ccw.release(); - } - ccw = mw.confirmCloseWindow( { - test: function () { - return session.getValue().length > 0; - } - } ); - - resizeCodeEditor = function () { - $editor.parent().height( $rightPanel.height() - 57 ); - $.wikiEditor.instances[ 0 ].data( 'wikiEditor-context' ).codeEditor.resize(); - }; - - // I tried to resize on $( window ).resize(), but that didn't work right - resizeCodeEditor(); - - session.on( 'change', OO.ui.debounce( function () { - var content = session.getValue(); - - if ( oldContent === content ) { - return; - } - oldContent = content; - $graph.empty(); - - new mw.Api().post( { - formatversion: 2, - action: 'graph', - text: content - } ).done( function ( data ) { - if ( session.getValue() !== content ) { - // Just in case the content has changed since we made the api call - return; - } - $json.textContent = JSON.stringify( data.graph, null, 2 ); - mw.drawVegaGraph( $graphEl, data.graph, function ( error ) { - if ( error ) { - $graphEl.textContent = ( error.exception || error ).toString(); - } - } ); - } ).fail( function ( errCode, error ) { - $graphEl.textContent = errCode.toString() + ':' + ( error.exception || error ).toString(); - } ); - }, 300 ) ); - } ); - -}() ); diff --git a/dist/extensions/Graph/modules/graph1.js b/dist/extensions/Graph/modules/graph1.js deleted file mode 100644 index 5d59abc51..000000000 --- a/dist/extensions/Graph/modules/graph1.js +++ /dev/null @@ -1,26 +0,0 @@ -( function () { - mw.hook( 'wikipage.content' ).add( function ( $content ) { - var specs = mw.config.get( 'wgGraphSpecs' ); - - vg.data.load.sanitizeUrl = function () { - mw.log.warn( 'Vega 1.x does not allow external URLs. Switch to Vega 2.' ); - return false; - }; - - if ( specs ) { - $content.find( '.mw-graph.mw-graph-always' ).each( function () { - var graphId = $( this ).data( 'graph-id' ), - el = this; - if ( !specs[ graphId ] ) { - mw.log.warn( graphId ); - } else { - vg.parse.spec( specs[ graphId ], function ( chart ) { - if ( chart ) { - chart( { el: el } ).update(); - } - } ); - } - } ); - } - } ); -}() ); diff --git a/dist/extensions/Graph/modules/graph2.js b/dist/extensions/Graph/modules/graph2.js deleted file mode 100644 index bca92c06c..000000000 --- a/dist/extensions/Graph/modules/graph2.js +++ /dev/null @@ -1,108 +0,0 @@ -( function () { - - 'use strict'; - - var VegaWrapper = require( 'mw-graph-shared' ); - - // eslint-disable-next-line no-new - new VegaWrapper( { - datalib: vg.util, - useXhr: true, - isTrusted: false, - domains: mw.config.get( 'wgGraphAllowedDomains' ), - domainMap: false, - logger: function ( warning ) { - mw.log.warn( warning ); - }, - parseUrl: function ( opt ) { - // Parse URL - var uri = new mw.Uri( opt.url ); - // reduce confusion, only keep expected values - if ( uri.port ) { - uri.host += ':' + uri.port; - delete uri.port; - } - // If url begins with protocol:///... mark it as having relative host - if ( /^[a-z]+:\/\/\//.test( opt.url ) ) { - uri.isRelativeHost = true; - } - if ( uri.protocol ) { - // All other libs use trailing colon in the protocol field - uri.protocol += ':'; - } - // Node's path includes the query, whereas pathname is without the query - // Standardizing on pathname - uri.pathname = uri.path; - delete uri.path; - return uri; - }, - formatUrl: function ( uri, opt ) { - // Format URL back into a string - // Revert path into pathname - uri.path = uri.pathname; - delete uri.pathname; - - if ( location.host.toLowerCase() === uri.host.toLowerCase() ) { - // Only send this header when hostname is the same. - // This is broader than the same-origin policy, - // but playing on the safer side. - opt.headers = { 'Treat-as-Untrusted': 1 }; - } else if ( opt.addCorsOrigin ) { - // All CORS api calls require origin parameter. - uri.query.origin = '*'; - } - - uri.protocol = VegaWrapper.removeColon( uri.protocol ); - - return uri.toString(); - }, - languageCode: mw.config.get( 'wgUserLanguage' ), - scriptPath: mw.config.get( 'wgScriptPath' ) - } ); - - /** - * Set up drawing canvas inside the given element and draw graph data - * - * @param {HTMLElement} element - * @param {Object|string} data graph spec - * @param {Function} [callback] function(error) called when drawing is done - */ - mw.drawVegaGraph = function ( element, data, callback ) { - vg.parse.spec( data, function ( error, chart ) { - var id; - if ( !error ) { - try { - chart( { el: element } ).update(); - } catch ( e ) { - // Graphs come from user generated content and may contain errors. - // When these occur, log them, but do not send them to Wikimedia servers (T274557) - id = element.getAttribute( 'data-graph-id' ) || 'unknown'; - mw.log.error( 'Error loading graph with data-graph-id=' + id + ':' + e ); - } - } - if ( callback ) { - callback( error ); - } - } ); - }; - - mw.hook( 'wikipage.content' ).add( function ( $content ) { - var specs = mw.config.get( 'wgGraphSpecs' ); - if ( !specs ) { - return; - } - $content.find( '.mw-graph.mw-graph-always' ).each( function () { - var graphId = $( this ).data( 'graph-id' ); - if ( !Object.prototype.hasOwnProperty.call( specs, graphId ) ) { - mw.log.warn( graphId ); - } else { - mw.drawVegaGraph( this, specs[ graphId ], function ( error ) { - if ( error ) { - mw.log.warn( error ); - } - } ); - } - } ); - } ); - -}() ); diff --git a/dist/extensions/Graph/modules/ve-graph/.eslintrc.json b/dist/extensions/Graph/modules/ve-graph/.eslintrc.json deleted file mode 100644 index 7b115181b..000000000 --- a/dist/extensions/Graph/modules/ve-graph/.eslintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "globals": { - "ve": "readonly" - } -} \ No newline at end of file diff --git a/dist/extensions/Graph/modules/ve-graph/graph.svg b/dist/extensions/Graph/modules/ve-graph/graph.svg deleted file mode 100644 index 1e521d251..000000000 --- a/dist/extensions/Graph/modules/ve-graph/graph.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/dist/extensions/Graph/modules/ve-graph/tests/.eslintrc.json b/dist/extensions/Graph/modules/ve-graph/tests/.eslintrc.json deleted file mode 100644 index fd0833961..000000000 --- a/dist/extensions/Graph/modules/ve-graph/tests/.eslintrc.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": [ - "wikimedia/qunit", - "../.eslintrc.json" - ], - "rules": { - "no-jquery/no-global-selector": "off" - } -} diff --git a/dist/extensions/Graph/modules/ve-graph/tests/ext.graph.visualEditor.test.js b/dist/extensions/Graph/modules/ve-graph/tests/ext.graph.visualEditor.test.js deleted file mode 100644 index 9b1716e91..000000000 --- a/dist/extensions/Graph/modules/ve-graph/tests/ext.graph.visualEditor.test.js +++ /dev/null @@ -1,522 +0,0 @@ -/*! - * VisualEditor MWGraphNode tests. - */ - -QUnit.module( 'ext.graph.visualEditor' ); - -( function () { - 'use strict'; - - /* Sample specs */ - - var sampleSpecs = { - areaGraph: { - version: 2, - width: 500, - height: 200, - padding: { - top: 10, - left: 30, - bottom: 30, - right: 10 - }, - data: [ - { - name: 'table', - values: [ - { x: 0, y: 28 }, - { x: 1, y: 43 }, - { x: 2, y: 81 }, - { x: 3, y: 19 } - ] - } - ], - scales: [ - { - name: 'x', - type: 'linear', - range: 'width', - zero: false, - domain: { - data: 'table', - field: 'x' - } - }, - { - name: 'y', - type: 'linear', - range: 'height', - nice: true, - domain: { - data: 'table', - field: 'y' - } - } - ], - axes: [ - { - type: 'x', - scale: 'x' - }, - { - type: 'y', - scale: 'y' - } - ], - marks: [ - { - type: 'area', - from: { - data: 'table' - }, - properties: { - enter: { - interpolate: { - value: 'monotone' - }, - x: { - scale: 'x', - field: 'x' - }, - y: { - scale: 'y', - field: 'y' - }, - y2: { - scale: 'y', - value: 0 - }, - fill: { - value: 'steelblue' - } - } - } - } - ] - }, - - stackedAreaGraph: { - version: 2, - width: 500, - height: 200, - padding: { - top: 10, - left: 30, - bottom: 30, - right: 10 - }, - data: [ - { - name: 'table', - values: [ - { x: 0, y: 28, c: 0 }, - { x: 0, y: 55, c: 1 }, - { x: 1, y: 43, c: 0 }, - { x: 1, y: 91, c: 1 }, - { x: 2, y: 81, c: 0 }, - { x: 2, y: 53, c: 1 }, - { x: 3, y: 19, c: 0 }, - { x: 3, y: 87, c: 1 }, - { x: 4, y: 52, c: 0 }, - { x: 4, y: 48, c: 1 }, - { x: 5, y: 24, c: 0 }, - { x: 5, y: 49, c: 1 }, - { x: 6, y: 87, c: 0 }, - { x: 6, y: 66, c: 1 }, - { x: 7, y: 17, c: 0 }, - { x: 7, y: 27, c: 1 }, - { x: 8, y: 68, c: 0 }, - { x: 8, y: 16, c: 1 }, - { x: 9, y: 49, c: 0 }, - { x: 9, y: 15, c: 1 } - ] - }, - { - name: 'stats', - source: 'table', - transform: [ - { - type: 'facet', - keys: [ - 'x' - ] - }, - { - type: 'stats', - value: 'y' - } - ] - } - ], - scales: [ - { - name: 'x', - type: 'linear', - range: 'width', - zero: false, - domain: { - data: 'table', - field: 'x' - } - }, - { - name: 'y', - type: 'linear', - range: 'height', - nice: true, - domain: { - data: 'stats', - field: 'sum' - } - }, - { - name: 'color', - type: 'ordinal', - range: 'category10' - } - ], - axes: [ - { - type: 'x', - scale: 'x' - }, - { - type: 'y', - scale: 'y' - } - ], - marks: [ - { - type: 'group', - from: { - data: 'table', - transform: [ - { - type: 'facet', - keys: [ - 'c' - ] - }, - { - type: 'stack', - point: 'x', - height: 'y' - } - ] - }, - marks: [ - { - type: 'area', - properties: { - enter: { - interpolate: { - value: 'monotone' - }, - x: { - scale: 'x', - field: 'x' - }, - y: { - scale: 'y', - field: 'y' - }, - y2: { - scale: 'y', - field: 'y2' - }, - fill: { - scale: 'color', - field: 'c' - } - }, - update: { - fillOpacity: { - value: 1 - } - }, - hover: { - fillOpacity: { - value: 0.5 - } - } - } - } - ] - } - ] - }, - - invalidAxesBarGraph: { - version: 2, - width: 500, - height: 200, - padding: { - top: 10, - left: 30, - bottom: 30, - right: 10 - }, - data: [ - { - name: 'table', - values: [ - { x: 0, y: 28 }, - { x: 1, y: 43 }, - { x: 2, y: 81 }, - { x: 3, y: 19 } - ] - } - ], - scales: [ - { - name: 'x', - type: 'linear', - range: 'width', - zero: false, - domain: { - data: 'table', - field: 'x' - } - }, - { - name: 'y', - type: 'linear', - range: 'height', - nice: true, - domain: { - data: 'table', - field: 'y' - } - } - ], - axes: [ - { - type: 'x', - scale: 'z' - }, - { - type: 'y', - scale: 'y' - } - ], - marks: [ - { - type: 'area', - from: { - data: 'table' - }, - properties: { - enter: { - interpolate: { - value: 'monotone' - }, - x: { - scale: 'x', - field: 'x' - }, - y: { - scale: 'y', - field: 'y' - }, - y2: { - scale: 'y', - value: 0 - }, - fill: { - value: 'steelblue' - } - } - } - } - ] - } - }; - - /* Tests */ - - QUnit.test( 've.dm.MWGraphNode', function ( assert ) { - var node = new ve.dm.MWGraphNode(), - specString = JSON.stringify( sampleSpecs.areaGraph ); - - assert.deepEqual( node.getSpec(), ve.dm.MWGraphNode.static.defaultSpec, 'MWGraphNode spec is initialized to the default spec' ); - - node.setSpecFromString( specString ); - assert.deepEqual( node.getSpec(), sampleSpecs.areaGraph, 'Basic valid spec is parsed' ); - - node.setSpecFromString( 'invalid JSON string' ); - assert.deepEqual( node.getSpec(), {}, 'Setting an invalid JSON resets the spec to an empty object' ); - - node.setSpec( sampleSpecs.stackedAreaGraph ); - assert.deepEqual( node.getSpec(), sampleSpecs.stackedAreaGraph, 'Setting the spec by object' ); - - node.setSpec( null ); - assert.deepEqual( node.getSpec(), {}, 'Setting a null spec resets the spec to an empty object' ); - } ); - - QUnit.test( 've.ce.MWGraphNode', function ( assert ) { - var view = ve.test.utils.createSurfaceViewFromHtml( - '
' - ), - documentNode = view.getDocument().getDocumentNode(), - node = documentNode.children[ 0 ]; - - assert.strictEqual( node.type, 'mwGraph', 'Parsoid HTML graphs are properly recognized as graph nodes' ); - } ); - - QUnit.test( 've.ce.MWGraphNode.static', function ( assert ) { - var testElement = document.createElement( 'div' ), - promise, - renderValidTest = assert.async(), - renderInvalidTest = assert.async(); - - $( '#qunit-fixture' ).append( testElement ); - - promise = ve.ce.MWGraphNode.static.vegaParseSpec( sampleSpecs.areaGraph, testElement ); - promise.always( function () { - assert.strictEqual( promise.state(), 'resolved', 'Single graph gets rendered correctly' ); - renderValidTest(); - } ); - - ve.ce.MWGraphNode.static.vegaParseSpec( - sampleSpecs.invalidAxesBarGraph, testElement - ).always( - function ( failMessageKey ) { - assert.strictEqual( failMessageKey, 'graph-ve-vega-error', 'Invalid graph triggers an error at rendering' ); - renderInvalidTest(); - } - ); - } ); - - QUnit.test( 've.dm.MWGraphModel', function ( assert ) { - var model = new ve.dm.MWGraphModel( sampleSpecs.areaGraph ), - updateSpecRemoval = { - marks: undefined, - scales: undefined, - padding: { top: 50 }, - axes: [ - { type: 'z' } - ] - }, - areaGraphRemovalExpected = { - version: 2, - width: 500, - height: 200, - padding: { - top: 50, - left: 30, - bottom: 30, - right: 10 - }, - data: [ - { - name: 'table', - values: [ - { x: 0, y: 28 }, - { x: 1, y: 43 }, - { x: 2, y: 81 }, - { x: 3, y: 19 } - ] - } - ], - axes: [ - { - type: 'z', - scale: 'x' - }, - { - type: 'y', - scale: 'y' - } - ] - }; - - assert.strictEqual( model.hasBeenChanged(), false, 'Model changes are correctly initialized' ); - - model.setSpecFromString( 'invalid json string' ); - assert.strictEqual( model.hasBeenChanged(), true, 'Model spec resets to an empty object when fed invalid data' ); - - model.setSpecFromString( JSON.stringify( sampleSpecs.areaGraph, null, '\t' ) ); - assert.strictEqual( model.hasBeenChanged(), false, 'Model doesn\'t throw false positives after applying no changes' ); - - model.setSpecFromString( JSON.stringify( sampleSpecs.stackedAreaGraph ) ); - assert.strictEqual( model.hasBeenChanged(), true, 'Model recognizes valid changes to spec' ); - - model.setSpecFromString( JSON.stringify( sampleSpecs.areaGraph ) ); - model.updateSpec( updateSpecRemoval ); - assert.deepEqual( model.getSpec(), areaGraphRemovalExpected, 'Updating the spec and removing properties' ); - } ); - - QUnit.test( 've.dm.MWGraphModel.static', function ( assert ) { - var result, - basicTestObj = { - a: 3, - b: undefined, - c: { - ca: undefined, - cb: 'undefined' - } - }, - complexTestObj = { - a: { - aa: undefined, - ab: 3, - ac: [ - { - ac0a: undefined, - ac0b: 4 - }, - { - ac1a: 'ac1a', - ac1b: 5, - ac1c: undefined - } - ] - }, - b: { - a: undefined, - b: undefined, - c: 2 - }, - c: 3, - d: undefined - }, - undefinedPropertiesBasicExpected = [ 'b', 'c.ca' ], - undefinedPropertiesComplexExpected = [ 'a.aa', 'a.ac.0.ac0a', 'a.ac.1.ac1c', 'b.a', 'b.b', 'd' ], - removePropBasicExpected = { - a: 3, - b: undefined, - c: { - cb: 'undefined' - } - }, - removePropComplexExpected = { - a: { - aa: undefined, - ab: 3, - ac: [ { - ac1b: 5, - ac1c: undefined - } ] - }, - c: 3, - d: undefined - }; - - result = ve.dm.MWGraphModel.static.getUndefinedProperties( basicTestObj ); - assert.deepEqual( result, undefinedPropertiesBasicExpected, 'Basic deep undefined property scan is successful' ); - - result = ve.dm.MWGraphModel.static.getUndefinedProperties( complexTestObj ); - assert.deepEqual( result, undefinedPropertiesComplexExpected, 'Complex deep undefined property scan is successful' ); - - result = ve.dm.MWGraphModel.static.removeProperty( basicTestObj, [ 'c', 'ca' ] ); - assert.deepEqual( basicTestObj, removePropBasicExpected, 'Basic nested property removal is successful' ); - - ve.dm.MWGraphModel.static.removeProperty( complexTestObj, [ 'a', 'ac', '0' ] ); - ve.dm.MWGraphModel.static.removeProperty( complexTestObj, [ 'a', 'ac', '0', 'ac1a' ] ); - ve.dm.MWGraphModel.static.removeProperty( complexTestObj, [ 'b' ] ); - assert.deepEqual( complexTestObj, removePropComplexExpected, 'Complex nested property removal is successful' ); - - ve.dm.MWGraphModel.static.removeProperty( complexTestObj, [ 'b' ] ); - assert.deepEqual( complexTestObj, removePropComplexExpected, 'Trying to delete an invalid property does nothing' ); - } ); -}() ); diff --git a/dist/extensions/Graph/modules/ve-graph/ve.ce.MWGraphNode.css b/dist/extensions/Graph/modules/ve-graph/ve.ce.MWGraphNode.css deleted file mode 100644 index cb7dfec24..000000000 --- a/dist/extensions/Graph/modules/ve-graph/ve.ce.MWGraphNode.css +++ /dev/null @@ -1,16 +0,0 @@ -.mw-graph { - display: inline-block; - border: 1px solid transparent; - position: relative; - background-repeat: no-repeat; - background-position: 50% 50%; - background-image: url( ../../includes/ajax-loader.gif ); -} - -.ve-ce-mwGraphNode-plot { - position: absolute; -} - -.mw-graph canvas { - background: #fff; -} diff --git a/dist/extensions/Graph/modules/ve-graph/ve.ce.MWGraphNode.js b/dist/extensions/Graph/modules/ve-graph/ve.ce.MWGraphNode.js deleted file mode 100644 index 128151c7e..000000000 --- a/dist/extensions/Graph/modules/ve-graph/ve.ce.MWGraphNode.js +++ /dev/null @@ -1,184 +0,0 @@ -/*! - * VisualEditor ContentEditable MWGraphNode class. - * - * @license The MIT License (MIT); see LICENSE.txt - */ - -/** - * ContentEditable MediaWiki graph node. - * - * @class - * @extends ve.ce.MWBlockExtensionNode - * @mixins ve.ce.MWResizableNode - * - * @constructor - * @param {ve.dm.MWGraphNode} model Model to observe - * @param {Object} [config] Configuration options - */ -ve.ce.MWGraphNode = function VeCeMWGraphNode( model, config ) { - this.$graph = $( '
' ).addClass( 'mw-graph' ); - this.$plot = $( '
' ).addClass( 've-ce-mwGraphNode-plot' ); - - // Parent constructor - ve.ce.MWGraphNode.super.apply( this, arguments ); - - // Mixin constructors - ve.ce.MWResizableNode.call( this, this.$plot, config ); - - this.$element - .addClass( 'mw-graph-container' ) - .append( this.$graph ); - - this.showHandles( [ 'se' ] ); -}; - -/* Inheritance */ - -OO.inheritClass( ve.ce.MWGraphNode, ve.ce.MWBlockExtensionNode ); - -// Need to mix in the base class as well -OO.mixinClass( ve.ce.MWGraphNode, ve.ce.ResizableNode ); - -OO.mixinClass( ve.ce.MWGraphNode, ve.ce.MWResizableNode ); - -/* Static Properties */ - -ve.ce.MWGraphNode.static.name = 'mwGraph'; - -ve.ce.MWGraphNode.static.primaryCommandName = 'graph'; - -ve.ce.MWGraphNode.static.tagName = 'div'; - -ve.ce.MWGraphNode.static.getDescription = function ( model ) { - var graphModel = new ve.dm.MWGraphModel( ve.copy( model.getSpec() ) ); - // The following messages are used here: - // * graph-ve-dialog-edit-type-area - // * graph-ve-dialog-edit-type-bar - // * graph-ve-dialog-edit-type-line - // * graph-ve-dialog-edit-type-unknown - return ve.msg( 'graph-ve-dialog-edit-type-' + graphModel.getGraphType() ); -}; - -/* Static Methods */ - -/** - * Attempt to render the graph through Vega. - * - * @param {Object} spec The graph spec - * @param {HTMLElement} element Element to render the graph in - * @return {jQuery.Promise} Promise that resolves when the graph is rendered. - * Promise is rejected with an error message key if there was a problem rendering the graph. - */ -ve.ce.MWGraphNode.static.vegaParseSpec = function ( spec, element ) { - var deferred = $.Deferred(), - node = this, - canvasNode, view; - - // Check if the spec is currently valid - if ( ve.isEmptyObject( spec ) ) { - deferred.reject( 'graph-ve-no-spec' ); - } else if ( !ve.dm.MWGraphModel.static.specHasData( spec ) ) { - deferred.reject( 'graph-ve-empty-graph' ); - } else { - vg.parse.spec( spec, function ( chart ) { - try { - view = chart( { el: element } ).update(); - - // HACK: If canvas is blank, this means Vega didn't render properly. - // Once Vega allows for proper rendering validation, this should be - // swapped for a validation check. - canvasNode = element.children[ 0 ].children[ 0 ]; - if ( node.isCanvasBlank( canvasNode ) ) { - deferred.reject( 'graph-ve-vega-error-no-render' ); - } else { - deferred.resolve( view ); - } - - } catch ( err ) { - deferred.reject( 'graph-ve-vega-error' ); - } - } ); - } - - return deferred.promise(); -}; - -/** - * Check if a canvas is blank - * - * @author Austin Brunkhorst http://stackoverflow.com/a/17386803/2055594 - * @param {HTMLElement} canvas The canvas to Check - * @return {boolean} The canvas is blank - */ -ve.ce.MWGraphNode.static.isCanvasBlank = function ( canvas ) { - var blank = document.createElement( 'canvas' ); - - blank.width = canvas.width; - blank.height = canvas.height; - - return canvas.toDataURL() === blank.toDataURL(); -}; - -/* Methods */ - -/** - * Render a Vega graph inside the node - */ -ve.ce.MWGraphNode.prototype.update = function () { - var node = this; - - // Clear element - this.$graph.empty(); - - this.$element.toggleClass( 'mw-graph-vega1', this.getModel().isGraphLegacy() ); - - mw.loader.using( 'ext.graph.vega2' ).done( function () { - node.$plot.detach(); - - node.constructor.static.vegaParseSpec( node.getModel().getSpec(), node.$graph[ 0 ] ).then( - function ( view ) { - // HACK: We need to know which padding values Vega computes in case - // of automatic padding, but it isn't properly exposed in the view - node.$graph.append( node.$plot ); - // eslint-disable-next-line no-underscore-dangle - node.$plot.css( view._padding ); - - node.calculateHighlights(); - }, - function ( failMessageKey ) { - // The following messages are used here: - // * graph-ve-no-spec - // * graph-ve-empty-graph - // * graph-ve-vega-error-no-render - // * graph-ve-vega-error - node.$graph.text( ve.msg( failMessageKey ) ); - } - ); - } ); -}; - -/** - * @inheritdoc - */ -ve.ce.MWGraphNode.prototype.getAttributeChanges = function ( width, height ) { - var attrChanges = {}, - newSpec = ve.dm.MWGraphModel.static.updateSpec( this.getModel().getSpec(), { - width: width, - height: height - } ); - - ve.setProp( attrChanges, 'mw', 'body', 'extsrc', JSON.stringify( newSpec ) ); - - return attrChanges; -}; - -/** - * @inheritdoc - */ -ve.ce.MWGraphNode.prototype.getFocusableElement = function () { - return this.$graph; -}; - -/* Registration */ - -ve.ce.nodeFactory.register( ve.ce.MWGraphNode ); diff --git a/dist/extensions/Graph/modules/ve-graph/ve.dm.MWGraphModel.js b/dist/extensions/Graph/modules/ve-graph/ve.dm.MWGraphModel.js deleted file mode 100644 index 1ea08347b..000000000 --- a/dist/extensions/Graph/modules/ve-graph/ve.dm.MWGraphModel.js +++ /dev/null @@ -1,532 +0,0 @@ -/*! - * VisualEditor DataModel MWGraphModel class. - * - * @license The MIT License (MIT); see LICENSE.txt - */ - -/** - * MediaWiki graph model. - * - * @class - * @mixins OO.EventEmitter - * - * @constructor - * @param {Object} [spec] The Vega specification as a JSON object - */ -ve.dm.MWGraphModel = function VeDmMWGraphModel( spec ) { - // Mixin constructors - OO.EventEmitter.call( this ); - - // Properties - this.spec = spec || {}; - this.originalSpec = ve.copy( this.spec ); - - this.cachedPadding = ve.copy( this.spec.padding ) || this.getDefaultPaddingObject(); -}; - -/* Inheritance */ - -OO.mixinClass( ve.dm.MWGraphModel, OO.EventEmitter ); - -/* Static Members */ - -ve.dm.MWGraphModel.static.defaultPadding = 30; - -ve.dm.MWGraphModel.static.minDimensions = { - width: 60, - height: 60 -}; - -ve.dm.MWGraphModel.static.graphConfigs = { - area: { - mark: { - type: 'area', - properties: { - enter: { - fill: { value: 'steelblue' }, - interpolate: { value: 'monotone' }, - stroke: undefined, - strokeWidth: undefined, - width: undefined - } - } - }, - scale: { - name: 'x', - type: 'linear' - }, - fields: [ - 'x', - 'y' - ] - }, - - bar: { - mark: { - type: 'rect', - properties: { - enter: { - fill: { value: 'steelblue' }, - interpolate: undefined, - stroke: undefined, - strokeWidth: undefined, - // HACK: Boolean values set to true need to be wrapped - // in strings until T118883 is resolved - width: { scale: 'x', band: 'true', offset: -1 } - } - } - }, - scale: { - name: 'x', - type: 'ordinal' - }, - fields: [ - 'x', - 'y' - ] - }, - - line: { - mark: { - type: 'line', - properties: { - enter: { - fill: undefined, - interpolate: { value: 'monotone' }, - stroke: { value: 'steelblue' }, - strokeWidth: { value: 3 }, - width: undefined - } - } - }, - scale: { - name: 'x', - type: 'linear' - }, - fields: [ - 'x', - 'y' - ] - } -}; - -/* Events */ - -/** - * @event specChange - * - * Change when the JSON specification is updated - * - * @param {Object} The new specification - */ - -/* Static Methods */ - -/** - * Updates a spec with new parameters. - * - * @param {Object} spec The spec to update - * @param {Object} params The new params to update. - * Properties set to undefined will be removed from the spec. - * @return {Object} The new spec - */ -ve.dm.MWGraphModel.static.updateSpec = function ( spec, params ) { - var undefinedProperty, - undefinedProperties = ve.dm.MWGraphModel.static.getUndefinedProperties( params ), - i; - - // Remove undefined properties from spec - for ( i = 0; i < undefinedProperties.length; i++ ) { - undefinedProperty = undefinedProperties[ i ].split( '.' ); - ve.dm.MWGraphModel.static.removeProperty( spec, $.extend( [], undefinedProperty ) ); - ve.dm.MWGraphModel.static.removeProperty( params, $.extend( [], undefinedProperty ) ); - } - - // Extend remaining properties - spec = $.extend( true, {}, spec, params ); - - return spec; -}; - -/** - * Recursively gets all the keys to properties set to undefined in a JSON object - * - * @author Based on the work on Artyom Neustroev at http://stackoverflow.com/a/15690816/2055594 - * @private - * @param {Object} obj The object to iterate - * @param {string} [stack] The parent property of the root property of obj. - * Used internally for recursion. - * @param {string[]} [list] The list of properties to return. Used internally for recursion. - * @return {string[]} The list of properties to return. - */ -ve.dm.MWGraphModel.static.getUndefinedProperties = function ( obj, stack, list ) { - var property; - - list = list || []; - - // Append . to the stack if it's defined - stack = ( stack === undefined ) ? '' : stack + '.'; - - for ( property in obj ) { - if ( Object.prototype.hasOwnProperty.call( obj, property ) ) { - if ( typeof obj[ property ] === 'object' ) { - ve.dm.MWGraphModel.static.getUndefinedProperties( - obj[ property ], stack + property, list - ); - } else if ( obj[ property ] === undefined ) { - list.push( stack + property ); - } - } - } - - return list; -}; - -/** - * Removes a nested property from an object - * - * @param {Object} obj The object - * @param {Array} prop The path of the property to remove - */ -ve.dm.MWGraphModel.static.removeProperty = function ( obj, prop ) { - var firstProp = prop.shift(); - - try { - if ( prop.length > 0 ) { - ve.dm.MWGraphModel.static.removeProperty( obj[ firstProp ], prop ); - } else { - if ( Array.isArray( obj ) ) { - obj.splice( parseInt( firstProp ), 1 ); - } else { - delete obj[ firstProp ]; - } - } - } catch ( err ) { - // We don't need to bubble errors here since hitting a missing property - // will not exist anyway in the object anyway - } -}; - -/** - * Check if a spec currently has something in its dataset - * - * @param {Object} spec The spec - * @return {boolean} The spec has some data in its dataset - */ -ve.dm.MWGraphModel.static.specHasData = function ( spec ) { - // FIXME: Support multiple pipelines - return !!spec.data[ 0 ].values.length; -}; - -/* Methods */ - -/** - * Switch the graph to a different type - * - * @param {string} type Desired graph type. Can be either area, line or bar. - * @fires specChange - */ -ve.dm.MWGraphModel.prototype.switchGraphType = function ( type ) { - var params = { - scales: [ ve.copy( this.constructor.static.graphConfigs[ type ].scale ) ], - marks: [ ve.copy( this.constructor.static.graphConfigs[ type ].mark ) ] - }; - - this.updateSpec( params ); - - this.emit( 'specChange', this.spec ); -}; - -/** - * Apply changes to the node - * - * @param {ve.dm.MWGraphNode} node The node to be modified - * @param {ve.dm.Surface} surfaceModel The surface model for the document - */ -ve.dm.MWGraphModel.prototype.applyChanges = function ( node, surfaceModel ) { - var mwData = ve.copy( node.getAttribute( 'mw' ) ); - - // Send transaction - mwData.body.extsrc = this.getSpecString(); - surfaceModel.change( - ve.dm.TransactionBuilder.static.newFromAttributeChanges( - surfaceModel.getDocument(), - node.getOffset(), - { mw: mwData } - ) - ); - surfaceModel.applyStaging(); -}; - -/** - * Update the spec with new parameters - * - * @param {Object} params The new parameters to be updated in the spec - * @fires specChange - */ -ve.dm.MWGraphModel.prototype.updateSpec = function ( params ) { - var updatedSpec = ve.dm.MWGraphModel.static.updateSpec( - $.extend( true, {}, this.spec ), params - ); - - // Only emit a change event if the spec really changed - if ( !OO.compare( this.spec, updatedSpec ) ) { - this.spec = updatedSpec; - this.emit( 'specChange', this.spec ); - } -}; - -/** - * Sets and validates the specification from a stringified version - * - * @param {string} str The new specification string - * @fires specChange - */ -ve.dm.MWGraphModel.prototype.setSpecFromString = function ( str ) { - var newSpec = ve.dm.MWGraphNode.static.parseSpecString( str ); - - // Only apply changes if the new spec is valid JSON and if the - // spec truly was modified - if ( !OO.compare( this.spec, newSpec ) ) { - this.spec = newSpec; - this.emit( 'specChange', this.spec ); - } -}; - -/** - * Get the specification - * - * @return {Object} The specification - */ -ve.dm.MWGraphModel.prototype.getSpec = function () { - return this.spec; -}; - -/** - * Get the stringified specification - * - * @return {string} The specification string - */ -ve.dm.MWGraphModel.prototype.getSpecString = function () { - return ve.dm.MWGraphNode.static.stringifySpec( this.spec ); -}; - -/** - * Get the original stringified specificiation - * - * @return {string} The original JSON string specification - */ -ve.dm.MWGraphModel.prototype.getOriginalSpecString = function () { - return ve.dm.MWGraphNode.static.stringifySpec( this.originalSpec ); -}; - -/** - * Get the graph type - * - * @return {string} The graph type - */ -ve.dm.MWGraphModel.prototype.getGraphType = function () { - var markType = this.spec.marks[ 0 ].type; - - switch ( markType ) { - case 'area': - return 'area'; - case 'rect': - return 'bar'; - case 'line': - return 'line'; - default: - return 'unknown'; - } -}; - -/** - * Get graph size - * - * @return {Object} The graph width and height - */ -ve.dm.MWGraphModel.prototype.getSize = function () { - return { - width: this.spec.width, - height: this.spec.height - }; -}; - -/** - * Set the graph width - * - * @param {number} value The new width - * @fires specChange - */ -ve.dm.MWGraphModel.prototype.setWidth = function ( value ) { - this.spec.width = value; - - this.emit( 'specChange', this.spec ); -}; - -/** - * Set the graph height - * - * @param {number} value The new height - * @fires specChange - */ -ve.dm.MWGraphModel.prototype.setHeight = function ( value ) { - this.spec.height = value; - - this.emit( 'specChange', this.spec ); -}; - -/** - * Get the padding values of the graph - * - * @return {Object} The paddings - */ -ve.dm.MWGraphModel.prototype.getPaddingObject = function () { - return this.spec.padding; -}; - -/** - * Return the default padding - * - * @return {Object} The default padding values - */ -ve.dm.MWGraphModel.prototype.getDefaultPaddingObject = function () { - var i, - indexes = [ 'top', 'bottom', 'left', 'right' ], - paddingObj = {}; - - for ( i = 0; i < indexes.length; i++ ) { - paddingObj[ indexes[ i ] ] = ve.dm.MWGraphModel.static.defaultPadding; - } - - return paddingObj; -}; - -/** - * Set a padding value - * - * @param {string} index The index to change. Can be either top, right, bottom or right - * @param {number} value The new value - * @fires specChange - */ -ve.dm.MWGraphModel.prototype.setPadding = function ( index, value ) { - if ( this.isPaddingAutomatic() ) { - this.spec.padding = this.getDefaultPaddingObject(); - } - - this.spec.padding[ index ] = value; - - this.emit( 'specChange', this.spec ); -}; - -/** - * Toggles automatic and manual padding modes - * - * @param {boolean} auto Padding is now automatic - * @fires specChange - */ -ve.dm.MWGraphModel.prototype.setPaddingAuto = function ( auto ) { - if ( auto ) { - this.cachedPadding = ve.copy( this.spec.padding ) || this.getDefaultPaddingObject(); - ve.dm.MWGraphModel.static.removeProperty( this.spec, [ 'padding' ] ); - } else { - this.spec.padding = ve.copy( this.cachedPadding ); - } - - this.emit( 'specChange', this.spec ); -}; - -/** - * Get the fields for a data pipeline - * - * @param {number} [id] The pipeline's id - * @return {string[]} The fields for the pipeline - */ -ve.dm.MWGraphModel.prototype.getPipelineFields = function ( id ) { - var firstEntry = ve.getProp( this.spec, 'data', id, 'values', 0 ); - - // Get the fields directly from the pipeline data if the pipeline exists and - // has data, otherwise default back on the fields intended for this graph type - if ( firstEntry ) { - return Object.keys( firstEntry ); - } else { - return ve.dm.MWGraphModel.static.graphConfigs[ this.getGraphType() ].fields; - } -}; - -/** - * Get a data pipeline - * - * @param {number} [id] The pipeline's id - * @return {Object} The data pipeline within the spec - */ -ve.dm.MWGraphModel.prototype.getPipeline = function ( id ) { - return this.spec.data[ id ]; -}; - -/** - * Set the field value of an entry in a pipeline - * - * @param {number} [entry] ID of the entry - * @param {string} [field] The field to change - * @param {number} [value] The new value - * @fires specChange - */ -ve.dm.MWGraphModel.prototype.setEntryField = function ( entry, field, value ) { - if ( this.spec.data[ 0 ].values[ entry ] === undefined ) { - this.spec.data[ 0 ].values[ entry ] = this.buildNewEntry( 0 ); - } - this.spec.data[ 0 ].values[ entry ][ field ] = value; - - this.emit( 'specChange', this.spec ); -}; - -/** - * Builds and returns a new entry for a pipeline - * - * @private - * @param {number} [pipelineId] The ID of the pipeline the entry is intended for - * @return {Object} The new entry - */ -ve.dm.MWGraphModel.prototype.buildNewEntry = function ( pipelineId ) { - var fields = this.getPipelineFields( pipelineId ), - newEntry = {}, - i; - - for ( i = 0; i < fields.length; i++ ) { - newEntry[ fields[ i ] ] = ''; - } - - return newEntry; -}; - -/** - * Removes an entry from a pipeline - * - * @param {number} [index] The index of the entry to delete - * @fires specChange - */ -ve.dm.MWGraphModel.prototype.removeEntry = function ( index ) { - // FIXME: Support multiple pipelines - this.spec.data[ 0 ].values.splice( index, 1 ); - - this.emit( 'specChange', this.spec ); -}; - -/** - * Returns whether the current spec has been modified since the dialog was opened - * - * @return {boolean} The spec was changed - */ -ve.dm.MWGraphModel.prototype.hasBeenChanged = function () { - return !OO.compare( this.spec, this.originalSpec ); -}; - -/** - * Returns whether the padding is set to be automatic or not - * - * @return {boolean} The padding is automatic - */ -ve.dm.MWGraphModel.prototype.isPaddingAutomatic = function () { - return OO.compare( this.spec.padding, undefined ); -}; diff --git a/dist/extensions/Graph/modules/ve-graph/ve.dm.MWGraphNode.js b/dist/extensions/Graph/modules/ve-graph/ve.dm.MWGraphNode.js deleted file mode 100644 index cf8da6ad5..000000000 --- a/dist/extensions/Graph/modules/ve-graph/ve.dm.MWGraphNode.js +++ /dev/null @@ -1,266 +0,0 @@ -/*! - * VisualEditor DataModel MWGraphNode class. - * - * @license The MIT License (MIT); see LICENSE.txt - */ - -/** - * DataModel MediaWiki graph node. - * - * @class - * @extends ve.dm.MWBlockExtensionNode - * @mixins ve.dm.ResizableNode - * - * @constructor - * @param {Object} [element] - */ -ve.dm.MWGraphNode = function VeDmMWGraphNode() { - var mw, extsrc; - - // Parent constructor - ve.dm.MWGraphNode.super.apply( this, arguments ); - - // Mixin constructors - ve.dm.ResizableNode.call( this ); - - // Properties - this.spec = null; - - // Events - this.connect( this, { - attributeChange: 'onAttributeChange' - } ); - - // Initialize specificiation - mw = this.getAttribute( 'mw' ); - extsrc = ve.getProp( mw, 'body', 'extsrc' ); - - if ( extsrc ) { - this.setSpecFromString( extsrc ); - } else { - this.setSpec( ve.dm.MWGraphNode.static.defaultSpec ); - } -}; - -/* Inheritance */ - -OO.inheritClass( ve.dm.MWGraphNode, ve.dm.MWBlockExtensionNode ); -OO.mixinClass( ve.dm.MWGraphNode, ve.dm.ResizableNode ); - -/* Static Members */ - -ve.dm.MWGraphNode.static.name = 'mwGraph'; - -ve.dm.MWGraphNode.static.extensionName = 'graph'; - -ve.dm.MWGraphNode.static.defaultSpec = { - version: 2, - width: 400, - height: 200, - data: [ - { - name: 'table', - values: [ - { - x: 0, - y: 1 - }, - { - x: 1, - y: 3 - }, - { - x: 2, - y: 2 - }, - { - x: 3, - y: 4 - } - ] - } - ], - scales: [ - { - name: 'x', - type: 'linear', - range: 'width', - zero: false, - domain: { - data: 'table', - field: 'x' - } - }, - { - name: 'y', - type: 'linear', - range: 'height', - nice: true, - domain: { - data: 'table', - field: 'y' - } - } - ], - axes: [ - { - type: 'x', - scale: 'x' - }, - { - type: 'y', - scale: 'y' - } - ], - marks: [ - { - type: 'area', - from: { - data: 'table' - }, - properties: { - enter: { - x: { - scale: 'x', - field: 'x' - }, - y: { - scale: 'y', - field: 'y' - }, - y2: { - scale: 'y', - value: 0 - }, - fill: { - value: 'steelblue' - }, - interpolate: { - value: 'monotone' - } - } - } - } - ] -}; - -/* Static Methods */ - -/** - * Parses a spec string and returns its object representation. - * - * @param {string} str The spec string to validate. If the string is - * null or represents an empty object, the spec will be null. - * @return {Object} The object specification. On a failed parsing, - * the object will be returned empty. - */ -ve.dm.MWGraphNode.static.parseSpecString = function ( str ) { - var result; - - try { - result = JSON.parse( str ); - - // JSON.parse can return other types than Object, we don't want that - // The error will be caught just below as this counts as a failed process - if ( typeof result !== 'object' ) { - throw new Error(); - } - - return result; - } catch ( err ) { - return {}; - } -}; - -/** - * Return the indented string representation of a spec. - * - * @param {Object} spec The object specificiation. - * @return {string} The stringified version of the spec. - */ -ve.dm.MWGraphNode.static.stringifySpec = function ( spec ) { - var result = JSON.stringify( spec, null, '\t' ); - return result || ''; -}; - -/* Methods */ - -/** - * @inheritdoc - */ -ve.dm.MWGraphNode.prototype.createScalable = function () { - var width = ve.getProp( this.spec, 'width' ), - height = ve.getProp( this.spec, 'height' ); - - return new ve.dm.Scalable( { - currentDimensions: { - width: width, - height: height - }, - minDimensions: ve.dm.MWGraphModel.static.minDimensions, - fixedRatio: false - } ); -}; - -/** - * Get the specification string - * - * @return {string} The specification JSON string - */ -ve.dm.MWGraphNode.prototype.getSpecString = function () { - return this.constructor.static.stringifySpec( this.spec ); -}; - -/** - * Get the parsed JSON specification - * - * @return {Object} The specification object - */ -ve.dm.MWGraphNode.prototype.getSpec = function () { - return this.spec; -}; - -/** - * Set the specificiation - * - * @param {Object} spec The new spec - */ -ve.dm.MWGraphNode.prototype.setSpec = function ( spec ) { - // Consolidate all falsy values to an empty object for consistency - this.spec = spec || {}; -}; - -/** - * Set the specification from a stringified version - * - * @param {string} str The new specification JSON string - */ -ve.dm.MWGraphNode.prototype.setSpecFromString = function ( str ) { - this.setSpec( this.constructor.static.parseSpecString( str ) ); -}; - -/** - * React to node attribute changes - * - * @param {string} attributeName The attribute being updated - * @param {Object} from The old value of the attribute - * @param {Object} to The new value of the attribute - */ -ve.dm.MWGraphNode.prototype.onAttributeChange = function ( attributeName, from, to ) { - if ( attributeName === 'mw' ) { - this.setSpecFromString( to.body.extsrc ); - } -}; - -/** - * Is this graph using a legacy version of Vega? - * - * @return {boolean} - */ -ve.dm.MWGraphNode.prototype.isGraphLegacy = function () { - return !!( this.spec && Object.prototype.hasOwnProperty.call( this.spec, 'version' ) && this.spec.version < 2 ); -}; - -/* Registration */ - -ve.dm.modelRegistry.register( ve.dm.MWGraphNode ); diff --git a/dist/extensions/Graph/modules/ve-graph/ve.ui.MWGraphDialog.js b/dist/extensions/Graph/modules/ve-graph/ve.ui.MWGraphDialog.js deleted file mode 100644 index 9cbc108f7..000000000 --- a/dist/extensions/Graph/modules/ve-graph/ve.ui.MWGraphDialog.js +++ /dev/null @@ -1,584 +0,0 @@ -/*! - * VisualEditor UserInterface MWGraphDialog class. - * - * @license The MIT License (MIT); see LICENSE.txt - */ - -/** - * MediaWiki graph dialog. - * - * @class - * @extends ve.ui.MWExtensionDialog - * - * @constructor - * @param {Object} [element] - */ -ve.ui.MWGraphDialog = function VeUiMWGraphDialog() { - // Parent constructor - ve.ui.MWGraphDialog.super.apply( this, arguments ); - - // Properties - this.graphModel = null; - this.mode = ''; - this.cachedRawData = null; - this.listeningToInputChanges = true; -}; - -/* Inheritance */ - -OO.inheritClass( ve.ui.MWGraphDialog, ve.ui.MWExtensionDialog ); - -/* Static properties */ - -ve.ui.MWGraphDialog.static.name = 'graph'; - -ve.ui.MWGraphDialog.static.title = OO.ui.deferMsg( 'graph-ve-dialog-edit-title' ); - -ve.ui.MWGraphDialog.static.size = 'medium'; - -ve.ui.MWGraphDialog.static.modelClasses = [ ve.dm.MWGraphNode ]; - -/* Methods */ - -/** - * @inheritdoc - */ -ve.ui.MWGraphDialog.prototype.getBodyHeight = function () { - // FIXME: This should depend on the dialog's content. - return 500; -}; - -/** - * @inheritdoc - */ -ve.ui.MWGraphDialog.prototype.initialize = function () { - var graphTypeField, sizeField, paddingAutoField, - jsonTextField, paddingTopField, paddingBottomField, - paddingLeftField, paddingRightField, key; - - // Parent method - ve.ui.MWGraphDialog.super.prototype.initialize.call( this ); - - /* Root layout */ - this.rootLayout = new OO.ui.IndexLayout( { - classes: [ 've-ui-mwGraphDialog-panel-root' ] - } ); - - this.generalPage = new OO.ui.TabPanelLayout( 'general', { - label: ve.msg( 'graph-ve-dialog-edit-page-general' ) - } ); - this.dataPage = new OO.ui.TabPanelLayout( 'data', { - label: ve.msg( 'graph-ve-dialog-edit-page-data' ) - } ); - this.rawPage = new OO.ui.TabPanelLayout( 'raw', { - label: ve.msg( 'graph-ve-dialog-edit-page-raw' ) - } ); - - this.rootLayout.addTabPanels( [ - this.generalPage, this.dataPage, this.rawPage - ] ); - - /* General page */ - - this.graphTypeDropdownInput = new OO.ui.DropdownInputWidget(); - - graphTypeField = new OO.ui.FieldLayout( this.graphTypeDropdownInput, { - label: ve.msg( 'graph-ve-dialog-edit-field-graph-type' ), - align: 'left' - } ); - - this.unknownGraphTypeWarningLabel = new OO.ui.LabelWidget( { - label: ve.msg( 'graph-ve-dialog-edit-unknown-graph-type-warning' ) - } ); - - this.sizeWidget = new ve.ui.MediaSizeWidget( null, { - noDefaultDimensions: true, - noOriginalDimensions: true - } ); - - sizeField = new OO.ui.FieldLayout( this.sizeWidget, { - label: ve.msg( 'graph-ve-dialog-edit-size-field' ), - align: 'left' - } ); - - this.paddingAutoCheckbox = new OO.ui.CheckboxInputWidget( { - value: 'paddingAuto' - } ); - - paddingAutoField = new OO.ui.FieldLayout( this.paddingAutoCheckbox, { - label: ve.msg( 'graph-ve-dialog-edit-padding-auto' ), - align: 'left' - } ); - - this.paddingInputs = { - top: new OO.ui.NumberInputWidget( { - min: 0, - showButtons: false - } ), - bottom: new OO.ui.NumberInputWidget( { - min: 0, - showButtons: false - } ), - left: new OO.ui.NumberInputWidget( { - min: 0, - showButtons: false - } ), - right: new OO.ui.NumberInputWidget( { - min: 0, - showButtons: false - } ) - }; - - paddingTopField = new OO.ui.FieldLayout( this.paddingInputs.top, { - label: ve.msg( 'graph-ve-dialog-edit-padding-top' ), - align: 'left' - } ); - paddingBottomField = new OO.ui.FieldLayout( this.paddingInputs.bottom, { - label: ve.msg( 'graph-ve-dialog-edit-padding-bottom' ), - align: 'left' - } ); - paddingLeftField = new OO.ui.FieldLayout( this.paddingInputs.left, { - label: ve.msg( 'graph-ve-dialog-edit-padding-left' ), - align: 'left' - } ); - paddingRightField = new OO.ui.FieldLayout( this.paddingInputs.right, { - label: ve.msg( 'graph-ve-dialog-edit-padding-right' ), - align: 'left' - } ); - - this.generalPage.$element.append( - graphTypeField.$element, - this.unknownGraphTypeWarningLabel.$element, - sizeField.$element, - paddingAutoField.$element, - paddingTopField.$element, - paddingBottomField.$element, - paddingLeftField.$element, - paddingRightField.$element - ); - - /* Data page */ - - this.dataTable = new mw.widgets.TableWidget( { - validate: /^[0-9]+$/, - showRowLabels: false - } ); - - this.dataPage.$element.append( this.dataTable.$element ); - - /* Raw JSON page */ - - this.jsonTextInput = new ve.ui.MWAceEditorWidget( { - autosize: true, - classes: [ 've-ui-mwGraphDialog-json' ], - maxRows: 22, - validate: this.validateRawData - } ); - - // Make sure JSON is LTR - this.jsonTextInput - .setLanguage( 'json' ) - .toggleLineNumbers( false ) - .setDir( 'ltr' ); - - jsonTextField = new OO.ui.FieldLayout( this.jsonTextInput, { - label: ve.msg( 'graph-ve-dialog-edit-field-raw-json' ), - align: 'top' - } ); - - this.rawPage.$element.append( jsonTextField.$element ); - - // Events - this.rootLayout.connect( this, { set: 'onRootLayoutSet' } ); - this.graphTypeDropdownInput.connect( this, { change: 'onGraphTypeInputChange' } ); - this.sizeWidget.connect( this, { change: 'onSizeWidgetChange' } ); - this.paddingAutoCheckbox.connect( this, { change: 'onPaddingAutoCheckboxChange' } ); - for ( key in this.paddingInputs ) { - this.paddingInputs[ key ].connect( this, { change: [ 'onPaddingInputChange', key ] } ); - } - - this.dataTable.connect( this, { - change: 'onDataInputChange', - removeRow: 'onDataInputRowDelete' - } ); - - this.jsonTextInput.connect( this, { change: 'onSpecStringInputChange' } ); - - // Initialization - this.$body.append( this.rootLayout.$element ); -}; - -/** - * @inheritdoc - */ -ve.ui.MWGraphDialog.prototype.getSetupProcess = function ( data ) { - return ve.ui.MWGraphDialog.super.prototype.getSetupProcess.call( this, data ) - .next( function () { - var spec, newElement; - - this.getFragment().getSurface().pushStaging(); - - // Create new graph node if not present (insert mode) - if ( !this.selectedNode ) { - newElement = this.getNewElement(); - this.fragment = this.getFragment().insertContent( [ - newElement, - { type: '/' + newElement.type } - ] ); - this.getFragment().select(); - this.selectedNode = this.getFragment().getSelectedNode(); - } - - // Set up model - spec = ve.copy( this.selectedNode.getSpec() ); - - this.graphModel = new ve.dm.MWGraphModel( spec ); - this.graphModel.connect( this, { - specChange: 'onSpecChange' - } ); - - // Set up default values - this.setupFormValues(); - - // If parsing fails here, cached raw data can simply remain null - try { - this.cachedRawData = JSON.parse( this.jsonTextInput.getValue() ); - } catch ( err ) {} - - this.checkChanges(); - }, this ); -}; - -/** - * @inheritdoc - */ -ve.ui.MWGraphDialog.prototype.getTeardownProcess = function ( data ) { - return ve.ui.MWGraphDialog.super.prototype.getTeardownProcess.call( this, data ) - .first( function () { - // Kill model - this.graphModel.disconnect( this ); - - this.graphModel = null; - - this.rootLayout.resetScroll(); - - // Clear data page - this.dataTable.clearWithProperties(); - - // Kill staging - if ( data === undefined ) { - this.getFragment().getSurface().popStaging(); - this.getFragment().update( this.getFragment().getSurface().getSelection() ); - } - }, this ); -}; - -/** - * @inheritdoc - */ -ve.ui.MWGraphDialog.prototype.getActionProcess = function ( action ) { - switch ( action ) { - case 'done': - return new OO.ui.Process( function () { - this.graphModel.applyChanges( this.selectedNode, this.getFragment().getSurface() ); - this.close( { action: action } ); - }, this ); - - default: - return ve.ui.MWGraphDialog.super.prototype.getActionProcess.call( this, action ); - } -}; - -/** - * Setup initial values in the dialog - * - * @private - */ -ve.ui.MWGraphDialog.prototype.setupFormValues = function () { - var graphType = this.graphModel.getGraphType(), - graphSize = this.graphModel.getSize(), - paddings = this.graphModel.getPaddingObject(), - readOnly = this.isReadOnly(), - options = [ - { - data: 'bar', - label: ve.msg( 'graph-ve-dialog-edit-type-bar' ) - }, - { - data: 'area', - label: ve.msg( 'graph-ve-dialog-edit-type-area' ) - }, - { - data: 'line', - label: ve.msg( 'graph-ve-dialog-edit-type-line' ) - } - ], - unknownGraphTypeOption = { - data: 'unknown', - label: ve.msg( 'graph-ve-dialog-edit-type-unknown' ) - }, - dataFields = this.graphModel.getPipelineFields( 0 ), - padding, i; - - // Graph type - if ( graphType === 'unknown' ) { - options.push( unknownGraphTypeOption ); - } - - this.graphTypeDropdownInput - .setOptions( options ) - .setValue( graphType ) - .setDisabled( readOnly ); - - // Size - this.sizeWidget.setScalable( new ve.dm.Scalable( { - currentDimensions: { - width: graphSize.width, - height: graphSize.height - }, - minDimensions: ve.dm.MWGraphModel.static.minDimensions, - fixedRatio: false - } ) ); - this.sizeWidget.setDisabled( readOnly ); - - // Padding - this.paddingAutoCheckbox.setSelected( this.graphModel.isPaddingAutomatic() ) - .setDisabled( readOnly ); - for ( padding in paddings ) { - if ( Object.prototype.hasOwnProperty.call( paddings, padding ) ) { - this.paddingInputs[ padding ].setValue( paddings[ padding ] ) - .setReadOnly( readOnly ); - } - } - - // Data - for ( i = 0; i < dataFields.length; i++ ) { - this.dataTable.insertColumn( null, null, dataFields[ i ], dataFields[ i ] ); - } - - this.dataTable.setDisabled( readOnly ); - - this.updateDataPage(); - - // JSON text input - this.jsonTextInput - .setValue( this.graphModel.getSpecString() ) - .setReadOnly( readOnly ) - .clearUndoStack(); -}; - -/** - * Update data page widgets based on the current spec - */ -ve.ui.MWGraphDialog.prototype.updateDataPage = function () { - var pipeline = this.graphModel.getPipeline( 0 ), - i, row, field; - - for ( i = 0; i < pipeline.values.length; i++ ) { - row = []; - - for ( field in pipeline.values[ i ] ) { - if ( Object.prototype.hasOwnProperty.call( pipeline.values[ i ], field ) ) { - row.push( pipeline.values[ i ][ field ] ); - } - } - - this.dataTable.insertRow( row ); - } -}; - -/** - * Validate raw data input - * - * @private - * @param {string} value The new input value - * @return {boolean} Data is valid - */ -ve.ui.MWGraphDialog.prototype.validateRawData = function ( value ) { - var isValid = !$.isEmptyObject( ve.dm.MWGraphNode.static.parseSpecString( value ) ), - label = ( isValid ) ? '' : ve.msg( 'graph-ve-dialog-edit-json-invalid' ); - - this.setLabel( label ); - - return isValid; -}; - -/** - * Handle spec string input change - * - * @private - * @param {string} value The text input value - */ -ve.ui.MWGraphDialog.prototype.onSpecStringInputChange = function ( value ) { - var newRawData; - - try { - // If parsing fails here, nothing more needs to happen - newRawData = JSON.parse( value ); - - // Only pass changes to model if there was anything worthwhile to change - if ( !OO.compare( this.cachedRawData, newRawData ) ) { - this.cachedRawData = newRawData; - this.graphModel.setSpecFromString( value ); - } - } catch ( err ) {} -}; - -/** - * Handle graph type changes - * - * @param {string} value The new graph type - */ -ve.ui.MWGraphDialog.prototype.onGraphTypeInputChange = function ( value ) { - this.unknownGraphTypeWarningLabel.toggle( value === 'unknown' ); - - if ( value !== 'unknown' ) { - this.graphModel.switchGraphType( value ); - } -}; - -/** - * Handle data input changes - * - * @private - * @param {number} rowIndex The index of the row that changed - * @param {string} rowKey The key of the row that changed, or `undefined` if it doesn't exist - * @param {number} colIndex The index of the column that changed - * @param {string} colKey The key of the column that changed, or `undefined` if it doesn't exist - * @param {string} value The new value - */ -ve.ui.MWGraphDialog.prototype.onDataInputChange = function ( - rowIndex, rowKey, colIndex, colKey, value -) { - if ( !isNaN( value ) ) { - this.graphModel.setEntryField( rowIndex, colKey, +value ); - } -}; - -/** - * Handle data input row deletions - * - * @param {number} [rowIndex] The index of the row deleted - */ -ve.ui.MWGraphDialog.prototype.onDataInputRowDelete = function ( rowIndex ) { - this.graphModel.removeEntry( rowIndex ); -}; - -/** - * Handle page set events on the root layout - * - * @param {OO.ui.PageLayout} page Set page - */ -ve.ui.MWGraphDialog.prototype.onRootLayoutSet = function ( page ) { - if ( page.getName() === 'raw' ) { - this.jsonTextInput.adjustSize( true ); - } -}; - -/** - * Handle auto padding mode changes - * - * @param {boolean} value New mode value - */ -ve.ui.MWGraphDialog.prototype.onPaddingAutoCheckboxChange = function ( value ) { - var key; - this.graphModel.setPaddingAuto( value ); - for ( key in this.paddingInputs ) { - this.paddingInputs[ key ].setDisabled( value ); - } -}; - -/** - * Handle size widget changes - * - * @param {Object} dimensions New dimensions - */ -ve.ui.MWGraphDialog.prototype.onSizeWidgetChange = function ( dimensions ) { - if ( this.sizeWidget.isValid() ) { - this.graphModel.setWidth( dimensions.width ); - this.graphModel.setHeight( dimensions.height ); - } - this.checkChanges(); -}; - -/** - * Handle padding changes - * - * @param {string} key 'top', 'bottom', 'left' or 'right' - * @param {string} value The new value - */ -ve.ui.MWGraphDialog.prototype.onPaddingInputChange = function ( key, value ) { - if ( value !== '' ) { - this.graphModel.setPadding( key, +value ); - } -}; - -/** - * Handle model spec change events - * - * @private - */ -ve.ui.MWGraphDialog.prototype.onSpecChange = function () { - var padding, - paddingAuto = this.graphModel.isPaddingAutomatic(), - paddingObj = this.graphModel.getPaddingObject(); - - if ( this.listeningToInputChanges ) { - this.listeningToInputChanges = false; - - this.jsonTextInput.setValue( this.graphModel.getSpecString() ); - - if ( paddingAuto ) { - // Clear padding table if set to automatic - for ( padding in this.paddingInputs ) { - this.paddingInputs[ padding ].setValue( '' ); - } - } else { - // Fill padding table with model values if set to manual - for ( padding in paddingObj ) { - if ( Object.prototype.hasOwnProperty.call( paddingObj, padding ) ) { - this.paddingInputs[ padding ].setValue( paddingObj[ padding ] ); - } - } - } - - for ( padding in this.paddingInputs ) { - this.paddingInputs[ padding ].setDisabled( paddingAuto ); - } - - this.listeningToInputChanges = true; - - this.checkChanges(); - } -}; - -/** - * Check for overall validity and enables/disables action abilities accordingly - * - * @private - */ -ve.ui.MWGraphDialog.prototype.checkChanges = function () { - var dialog = this; - - // Synchronous validation - if ( !this.sizeWidget.isValid() ) { - this.actions.setAbilities( { done: false } ); - return; - } - - // Asynchronous validation - this.jsonTextInput.getValidity().then( - function () { - dialog.actions.setAbilities( { - done: ( dialog.mode === 'insert' ) || dialog.graphModel.hasBeenChanged() - } ); - }, - function () { - dialog.actions.setAbilities( { done: false } ); - } - ); -}; - -/* Registration */ - -ve.ui.windowFactory.register( ve.ui.MWGraphDialog ); diff --git a/dist/extensions/Graph/modules/ve-graph/ve.ui.MWGraphDialogTool.js b/dist/extensions/Graph/modules/ve-graph/ve.ui.MWGraphDialogTool.js deleted file mode 100644 index dd078846b..000000000 --- a/dist/extensions/Graph/modules/ve-graph/ve.ui.MWGraphDialogTool.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * MediaWiki UserInterface graph tool. - * - * @class - * @extends ve.ui.FragmentWindowTool - * @constructor - * @param {OO.ui.ToolGroup} toolGroup - * @param {Object} [config] Configuration options - */ -ve.ui.MWGraphDialogTool = function VeUiMWGraphDialogTool() { - ve.ui.MWGraphDialogTool.super.apply( this, arguments ); -}; - -/* Inheritance */ - -OO.inheritClass( ve.ui.MWGraphDialogTool, ve.ui.FragmentWindowTool ); - -/* Static properties */ - -ve.ui.MWGraphDialogTool.static.name = 'graph'; -ve.ui.MWGraphDialogTool.static.group = 'object'; -ve.ui.MWGraphDialogTool.static.icon = 'graph'; -ve.ui.MWGraphDialogTool.static.title = - OO.ui.deferMsg( 'graph-ve-dialog-button-tooltip' ); -ve.ui.MWGraphDialogTool.static.modelClasses = [ ve.dm.MWGraphNode ]; -ve.ui.MWGraphDialogTool.static.commandName = 'graph'; - -/* Registration */ - -ve.ui.toolFactory.register( ve.ui.MWGraphDialogTool ); - -/* Commands */ - -ve.ui.commandRegistry.register( - new ve.ui.Command( - 'graph', 'window', 'open', - { args: [ 'graph' ], supportedSelections: [ 'linear' ] } - ) -); diff --git a/dist/extensions/Graph/modules/ve-graph/ve.ui.MWGraphIcons.css b/dist/extensions/Graph/modules/ve-graph/ve.ui.MWGraphIcons.css deleted file mode 100644 index 0dad9d7e7..000000000 --- a/dist/extensions/Graph/modules/ve-graph/ve.ui.MWGraphIcons.css +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * VisualEditor UserInterface Graph icon styles. - * - * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt - * @license The MIT License (MIT); see LICENSE.txt - */ - -.oo-ui-icon-graph { - /* @embed */ - background-image: url( graph.svg ); -} diff --git a/dist/extensions/Graph/package-lock.json b/dist/extensions/Graph/package-lock.json deleted file mode 100644 index 561d05411..000000000 --- a/dist/extensions/Graph/package-lock.json +++ /dev/null @@ -1,10824 +0,0 @@ -{ - "name": "Graph", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "Graph", - "version": "0.0.0", - "devDependencies": { - "browserify": "^16.2.3", - "eslint-config-wikimedia": "0.22.1", - "grunt": "1.5.3", - "grunt-banana-checker": "0.9.0", - "grunt-eslint": "24.0.0", - "grunt-stylelint": "0.17.0", - "jquery.splitter": "^0.27.1", - "mw-graph-shared": "^0.4.2", - "stylelint-config-wikimedia": "0.13.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", - "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", - "dev": true, - "dependencies": { - "comment-parser": "1.3.0", - "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.3" - }, - "engines": { - "node": "^12 || ^14 || ^16 || ^17" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@mdn/browser-compat-data": { - "version": "5.5.10", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.10.tgz", - "integrity": "sha512-s2GGND9oLhEuksOFtICYOBZdMWPANBXTMqAXh89q6g1Mi3+OuWEmp9WFzw2v/nmS175vqeewpC1kDJA7taaxyA==", - "dev": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/acorn": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/acorn-walk": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz", - "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/ast-metadata-inferer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.0.tgz", - "integrity": "sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==", - "dev": true, - "dependencies": { - "@mdn/browser-compat-data": "^5.2.34" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, - "node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "node_modules/browser-pack": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", - "dev": true, - "dependencies": { - "combine-source-map": "~0.8.0", - "defined": "^1.0.0", - "JSONStream": "^1.0.3", - "safe-buffer": "^5.1.1", - "through2": "^2.0.0", - "umd": "^3.0.0" - }, - "bin": { - "browser-pack": "bin/cmd.js" - } - }, - "node_modules/browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "dependencies": { - "resolve": "1.1.7" - } - }, - "node_modules/browser-resolve/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "node_modules/browserify": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz", - "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==", - "dev": true, - "dependencies": { - "assert": "^1.4.0", - "browser-pack": "^6.0.1", - "browser-resolve": "^1.11.0", - "browserify-zlib": "~0.2.0", - "buffer": "^5.0.2", - "cached-path-relative": "^1.0.0", - "concat-stream": "^1.6.0", - "console-browserify": "^1.1.0", - "constants-browserify": "~1.0.0", - "crypto-browserify": "^3.0.0", - "defined": "^1.0.0", - "deps-sort": "^2.0.0", - "domain-browser": "^1.2.0", - "duplexer2": "~0.1.2", - "events": "^2.0.0", - "glob": "^7.1.0", - "has": "^1.0.0", - "htmlescape": "^1.1.0", - "https-browserify": "^1.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^7.0.0", - "JSONStream": "^1.0.3", - "labeled-stream-splicer": "^2.0.0", - "mkdirp": "^0.5.0", - "module-deps": "^6.0.0", - "os-browserify": "~0.3.0", - "parents": "^1.0.1", - "path-browserify": "~0.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^2.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.1.4", - "shasum": "^1.0.0", - "shell-quote": "^1.6.1", - "stream-browserify": "^2.0.0", - "stream-http": "^2.0.0", - "string_decoder": "^1.1.1", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^2.0.0", - "timers-browserify": "^1.0.1", - "tty-browserify": "0.0.1", - "url": "~0.11.0", - "util": "~0.10.1", - "vm-browserify": "^1.0.0", - "xtend": "^4.0.0" - }, - "bin": { - "browserify": "bin/cmd.js" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-rsa/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "node_modules/browserify-sign": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", - "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.4", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.6", - "readable-stream": "^3.6.2", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/browserify-sign/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "node_modules/browserify-sign/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/browserslist-config-wikimedia": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.4.0.tgz", - "integrity": "sha512-U/fmsaGlCKOqRIjKqXwQ44qFqiStngRTphj1Cf6IHV6J8OK8T0gu9dKc7Ljq4v7bwhnhN+YCCa4fA3nZlPNivQ==", - "dev": true - }, - "node_modules/buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "node_modules/cached-path-relative": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", - "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", - "dev": true - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001585", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz", - "integrity": "sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chalk/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/clean-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", - "dev": true, - "dependencies": { - "is-regexp": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", - "dev": true - }, - "node_modules/colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combine-source-map": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", - "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", - "dev": true, - "dependencies": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" - } - }, - "node_modules/comment-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", - "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", - "dev": true, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "dependencies": { - "date-now": "^0.1.4" - } - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/css-functions-list": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz", - "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==", - "dev": true, - "engines": { - "node": ">=12.22" - } - }, - "node_modules/css-rule-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz", - "integrity": "sha1-N4bnGYmD2WWibjGVfgkHjLt3BaI=", - "dev": true, - "dependencies": { - "css-tokenize": "^1.0.1", - "duplexer2": "0.0.2", - "ldjson-stream": "^1.2.1", - "through2": "^0.6.3" - }, - "bin": { - "css-rule-stream": "index.js" - } - }, - "node_modules/css-rule-stream/node_modules/duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "dependencies": { - "readable-stream": "~1.1.9" - } - }, - "node_modules/css-rule-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/css-rule-stream/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/css-rule-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/css-rule-stream/node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "node_modules/css-rule-stream/node_modules/through2/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/css-tokenize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz", - "integrity": "sha1-RiXLHtohwUOFi3+B1oA8HSb8FL4=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^1.0.33" - } - }, - "node_modules/css-tokenize/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/css-tokenize/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/css-tokenize/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/dash-ast": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", - "dev": true - }, - "node_modules/date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "node_modules/deps-sort": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", - "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", - "dev": true, - "dependencies": { - "JSONStream": "^1.0.3", - "shasum": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" - }, - "bin": { - "deps-sort": "bin/cmd.js" - } - }, - "node_modules/des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", - "dev": true, - "dependencies": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/doiuse": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-4.4.1.tgz", - "integrity": "sha512-TUpr1/YNg20IB09tZmwGCTsTQoxj8jUld/hUZprZMj8vj0VpAJySXEWCr8WMvqvgzk0/kG/FxeSMGKode4UjPg==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.1", - "caniuse-lite": "^1.0.30001179", - "css-rule-stream": "^1.1.0", - "duplexer2": "0.0.2", - "ldjson-stream": "^1.2.1", - "multimatch": "^5.0.0", - "postcss": "^8.2.4", - "source-map": "^0.7.3", - "through2": "^4.0.2", - "yargs": "^16.2.0" - }, - "bin": { - "doiuse": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/doiuse/node_modules/duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "dependencies": { - "readable-stream": "~1.1.9" - } - }, - "node_modules/doiuse/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/doiuse/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/doiuse/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/doiuse/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/doiuse/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/doiuse/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/doiuse/node_modules/through2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/doiuse/node_modules/through2/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/domain-validator": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/domain-validator/-/domain-validator-0.0.6.tgz", - "integrity": "sha1-KndLSv2xnt2sRGGsj60NOWTP1q0=", - "dev": true - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.665", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz", - "integrity": "sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/elliptic/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", - "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.2.1", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-wikimedia": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.22.1.tgz", - "integrity": "sha512-TtN+gWJrcW0i1sEu7vPE1tHpEilrMUuTxP6UK97Amvva/KDV9/tvRUifGhw0q5uBswp+HWgF12p8rq68hZqMbA==", - "dev": true, - "dependencies": { - "eslint": "^8.6.0", - "eslint-plugin-compat": "^4.0.2", - "eslint-plugin-es": "^4.1.0", - "eslint-plugin-jsdoc": "^37.7.1", - "eslint-plugin-json-es": "^1.5.4", - "eslint-plugin-mediawiki": "^0.3.0", - "eslint-plugin-mocha": "^9.0.0", - "eslint-plugin-no-jquery": "^2.7.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-qunit": "^7.2.0", - "eslint-plugin-unicorn": "^40.1.0", - "eslint-plugin-vue": "^8.4.1", - "eslint-plugin-wdio": "^7.4.2", - "eslint-plugin-yml": "^0.13.0" - } - }, - "node_modules/eslint-plugin-compat": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz", - "integrity": "sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==", - "dev": true, - "dependencies": { - "@mdn/browser-compat-data": "^5.3.13", - "ast-metadata-inferer": "^0.8.0", - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001524", - "find-up": "^5.0.0", - "lodash.memoize": "^4.1.2", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=14.x" - }, - "peerDependencies": { - "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-compat/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-compat/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-compat/node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "node_modules/eslint-plugin-compat/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-compat/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-jsdoc": { - "version": "37.9.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz", - "integrity": "sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g==", - "dev": true, - "dependencies": { - "@es-joy/jsdoccomment": "~0.20.1", - "comment-parser": "1.3.0", - "debug": "^4.3.3", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.4.0", - "regextras": "^0.8.0", - "semver": "^7.3.5", - "spdx-expression-parse": "^3.0.1" - }, - "engines": { - "node": "^12 || ^14 || ^16 || ^17" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-json-es": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.5.tgz", - "integrity": "sha512-J5wsCFuV8u+1nJzLtJo3SInE624sAr7yfKoktk7t7Px/gC/DLPYtXkwFu/QBaoPo4yvQ2wG532Jv9OpY1h212w==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1" - }, - "peerDependencies": { - "eslint": ">= 7" - } - }, - "node_modules/eslint-plugin-json-es/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-plugin-mediawiki": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.3.0.tgz", - "integrity": "sha512-Lhyj2PSkhDzYSc1PNbURysY/WoqvY0brw558ZInT3erzf5KUlro18MTKFdV+nlht475ZgnsfHsgfg6Ut2w1SVg==", - "dev": true, - "dependencies": { - "eslint-plugin-vue": "^7.20.0", - "upath": "^2.0.1" - }, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-plugin-mediawiki/node_modules/eslint-plugin-vue": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz", - "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.1.0", - "natural-compare": "^1.4.0", - "semver": "^6.3.0", - "vue-eslint-parser": "^7.10.0" - }, - "engines": { - "node": ">=8.10" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-mediawiki/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-plugin-mediawiki/node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eslint-plugin-mediawiki/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-plugin-mediawiki/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-mediawiki/node_modules/vue-eslint-parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", - "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8.10" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-plugin-mocha": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz", - "integrity": "sha512-d7knAcQj1jPCzZf3caeBIn3BnW6ikcvfz0kSqQpwPYcVGLoJV5sz0l0OJB2LR8I7dvTDbqq1oV6ylhSgzA10zg==", - "dev": true, - "dependencies": { - "eslint-utils": "^3.0.0", - "ramda": "^0.27.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-mocha/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-plugin-mocha/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-no-jquery": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz", - "integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==", - "dev": true, - "peerDependencies": { - "eslint": ">=2.3.0" - } - }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-plugin-node/node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-qunit": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-7.2.0.tgz", - "integrity": "sha512-ebT6aOpmMj4vchG0hVw9Ukbutk/lgywrc8gc9w9hH2/4WjKqwMlyM7iVwqB7OAXv6gtQMJZuziT0wNjjymAuWA==", - "dev": true, - "dependencies": { - "eslint-utils": "^3.0.0", - "requireindex": "^1.2.0" - }, - "engines": { - "node": "12.x || 14.x || >=16.0.0" - } - }, - "node_modules/eslint-plugin-qunit/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-plugin-qunit/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-unicorn": { - "version": "40.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-40.1.0.tgz", - "integrity": "sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "ci-info": "^3.3.0", - "clean-regexp": "^1.0.0", - "eslint-utils": "^3.0.0", - "esquery": "^1.4.0", - "indent-string": "^4.0.0", - "is-builtin-module": "^3.1.0", - "lodash": "^4.17.21", - "pluralize": "^8.0.0", - "read-pkg-up": "^7.0.1", - "regexp-tree": "^0.1.24", - "safe-regex": "^2.1.1", - "semver": "^7.3.5", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" - }, - "peerDependencies": { - "eslint": ">=7.32.0" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-vue": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.5.0.tgz", - "integrity": "sha512-i1uHCTAKOoEj12RDvdtONWrGzjFm/djkzqfhmQ0d6M/W8KM81mhswd/z+iTZ0jCpdUedW3YRgcVfQ37/J4zoYQ==", - "dev": true, - "dependencies": { - "eslint-utils": "^3.0.0", - "natural-compare": "^1.4.0", - "semver": "^7.3.5", - "vue-eslint-parser": "^8.0.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-vue/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-plugin-vue/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-wdio": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.4.2.tgz", - "integrity": "sha512-tkISFycJmRFMKsEjetRcAmWSHKJKnw5rKHDxfE7Ob3tF5lbmYlCLfNKH0UwanOpSdulpe52s3K+CBHSd6qUUNQ==", - "dev": true, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/eslint-plugin-yml": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.13.0.tgz", - "integrity": "sha512-rZvdnhe28jIbgSIZo3qYqkl9hKslyTDfMwqIGDzz873gxghzBw0yeFG+P7sMfOkFfpqwJzZy3IKe2cIiCp4FrA==", - "dev": true, - "dependencies": { - "debug": "^4.3.2", - "lodash": "^4.17.21", - "natural-compare": "^1.4.0", - "yaml-eslint-parser": "^0.5.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", - "dev": true, - "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/espree/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true - }, - "node_modules/events": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", - "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", - "dev": true, - "dependencies": { - "clone-regexp": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "dependencies": { - "glob": "~5.0.0" - }, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/findup-sync/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "dev": true - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getobject": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.0.tgz", - "integrity": "sha512-tbUz6AKKKr2YiMB+fLWIgq5ZeBOobop9YMMAU9dC54/ot2ksMXt3DOFyBuhZw6ptcVszEykgByK20j7W9jHFag==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", - "dev": true - }, - "node_modules/grunt": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", - "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", - "dev": true, - "dependencies": { - "dateformat": "~3.0.3", - "eventemitter2": "~0.4.13", - "exit": "~0.1.2", - "findup-sync": "~0.3.0", - "glob": "~7.1.6", - "grunt-cli": "~1.4.3", - "grunt-known-options": "~2.0.0", - "grunt-legacy-log": "~3.0.0", - "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", - "js-yaml": "~3.14.0", - "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" - }, - "bin": { - "grunt": "bin/grunt" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/grunt-banana-checker": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.9.0.tgz", - "integrity": "sha512-SqPiB6OazWqR8USL0NymtuT5Br3mD9WBBsM1rHC/3wIi2SrZNM6/+j9CIeuEM5oCn+AtO2Y0+rzzFyOdC9afAg==", - "dev": true, - "bin": { - "banana-checker": "src/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/grunt-cli": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", - "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", - "dev": true, - "dependencies": { - "grunt-known-options": "~2.0.0", - "interpret": "~1.1.0", - "liftup": "~3.0.1", - "nopt": "~4.0.1", - "v8flags": "~3.2.0" - }, - "bin": { - "grunt": "bin/grunt" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/grunt-cli/node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/grunt-eslint": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.0.tgz", - "integrity": "sha512-WpTeBBFweyhMuPjGwRSQV9JFJ+EczIdlsc7Dd/1g78QVI1aZsk4g/H3e+3S5HEwsS1RKL2YZIrGj8hMLlBfN8w==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "eslint": "^8.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - }, - "peerDependencies": { - "grunt": ">=1" - } - }, - "node_modules/grunt-known-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", - "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-legacy-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", - "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", - "dev": true, - "dependencies": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.1.0", - "hooker": "~0.2.3", - "lodash": "~4.17.19" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/grunt-legacy-log-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", - "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", - "dev": true, - "dependencies": { - "chalk": "~4.1.0", - "lodash": "~4.17.19" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/grunt-legacy-util": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", - "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", - "dev": true, - "dependencies": { - "async": "~3.2.0", - "exit": "~0.1.2", - "getobject": "~1.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.21", - "underscore.string": "~3.3.5", - "which": "~2.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/grunt-legacy-util/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/grunt-stylelint": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.17.0.tgz", - "integrity": "sha512-aVpqPO7h98haGRZKnj9nkMTMGjzmVQWyN/FNB/qkbcVG6pguZ48yZi8YO+ULynzNK9YFqWhWBFgAs71m7ZpK+A==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "stylelint": "^14.0.0" - } - }, - "node_modules/grunt/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/grunt/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", - "dev": true, - "dependencies": { - "source-map": "~0.5.3" - } - }, - "node_modules/insert-module-globals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", - "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", - "dev": true, - "dependencies": { - "acorn-node": "^1.5.2", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "JSONStream": "^1.0.3", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "undeclared-identifiers": "^1.1.2", - "xtend": "^4.0.0" - }, - "bin": { - "insert-module-globals": "bin/cmd.js" - } - }, - "node_modules/interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "node_modules/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-builtin-module": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", - "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", - "dev": true, - "dependencies": { - "builtin-modules": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "dependencies": { - "is-unc-path": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "dependencies": { - "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jquery.splitter": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/jquery.splitter/-/jquery.splitter-0.27.1.tgz", - "integrity": "sha512-w2SxaOcWelAeGMVMCCCfr268itijvGIAPoPcYCEkTapsnwBMn95rF+XHKLK9XHZ/16kyaWIkHBH1ZBlCPYVfNw==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", - "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", - "dev": true, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "dev": true, - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/known-css-properties": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz", - "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==", - "dev": true - }, - "node_modules/labeled-stream-splicer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", - "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "stream-splicer": "^2.0.0" - } - }, - "node_modules/ldjson-stream": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz", - "integrity": "sha1-kb7O2lrE7SsX5kn7d356v6AYnCs=", - "dev": true, - "dependencies": { - "split2": "^0.2.1", - "through2": "^0.6.1" - } - }, - "node_modules/ldjson-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/ldjson-stream/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ldjson-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/ldjson-stream/node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/liftup": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", - "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", - "dev": true, - "dependencies": { - "extend": "^3.0.2", - "findup-sync": "^4.0.0", - "fined": "^1.2.0", - "flagged-respawn": "^1.0.1", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.1", - "rechoir": "^0.7.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/liftup/node_modules/findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-obj": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", - "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/module-deps": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.1.tgz", - "integrity": "sha512-UnEn6Ah36Tu4jFiBbJVUtt0h+iXqxpLqDvPS8nllbw5RZFmNJ1+Mz5BjYnM9ieH80zyxHkARGLnMIHlPK5bu6A==", - "dev": true, - "dependencies": { - "browser-resolve": "^1.7.0", - "cached-path-relative": "^1.0.2", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.0.2", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "JSONStream": "^1.0.3", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.4.0", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - }, - "bin": { - "module-deps": "bin/cmd.js" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/multimatch/node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mw-graph-shared": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/mw-graph-shared/-/mw-graph-shared-0.4.2.tgz", - "integrity": "sha1-JcqMQrvjVrQhwIofarhEllTgTLY=", - "dev": true, - "dependencies": { - "domain-validator": "^0.0.6", - "wd-type-parser": "^0.0.3" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-selector": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "dependencies": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", - "dev": true - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dev": true, - "dependencies": { - "path-platform": "~0.11.15" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "dependencies": { - "path-root-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-less": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-6.0.0.tgz", - "integrity": "sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "postcss": "^8.3.5" - } - }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", - "dev": true - }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", - "dev": true - }, - "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ramda": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz", - "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==", - "dev": true - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regexp-tree": { - "version": "0.1.24", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", - "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", - "dev": true, - "bin": { - "regexp-tree": "bin/regexp-tree" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regextras": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", - "dev": true, - "engines": { - "node": ">=0.1.14" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true, - "engines": { - "node": ">=0.10.5" - } - }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-dir/node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-dir/node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safe-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", - "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", - "dev": true, - "dependencies": { - "regexp-tree": "~0.1.1" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "dev": true, - "dependencies": { - "json-stable-stringify": "~0.0.0", - "sha.js": "~2.4.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", - "dev": true - }, - "node_modules/specificity": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", - "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", - "dev": true, - "bin": { - "specificity": "bin/specificity" - } - }, - "node_modules/split2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz", - "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=", - "dev": true, - "dependencies": { - "through2": "~0.6.1" - } - }, - "node_modules/split2/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/split2/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/split2/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/split2/node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true, - "dependencies": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-splicer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", - "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", - "dev": true - }, - "node_modules/stylelint": { - "version": "14.8.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz", - "integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==", - "dev": true, - "dependencies": { - "balanced-match": "^2.0.0", - "colord": "^2.9.2", - "cosmiconfig": "^7.0.1", - "css-functions-list": "^3.0.1", - "debug": "^4.3.4", - "execall": "^2.0.0", - "fast-glob": "^3.2.11", - "fastest-levenshtein": "^1.0.12", - "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.2.0", - "ignore": "^5.2.0", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.24.0", - "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "normalize-selector": "^0.2.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.12", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "specificity": "^0.4.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^2.2.0", - "svg-tags": "^1.0.0", - "table": "^6.8.0", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.1" - }, - "bin": { - "stylelint": "bin/stylelint.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - } - }, - "node_modules/stylelint-config-recommended": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz", - "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==", - "dev": true, - "peerDependencies": { - "stylelint": "^14.4.0" - } - }, - "node_modules/stylelint-config-wikimedia": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.13.0.tgz", - "integrity": "sha512-1R1g/uc53z2z39ejZMALwC6fTfSZhkzDjj1v8ODCWtLCiuqWuSf3HR1ZTXT5X5AtSbZq1W9+0p5HJp6rPVXkRg==", - "dev": true, - "dependencies": { - "browserslist-config-wikimedia": "0.4.0", - "postcss-less": "6.0.0", - "stylelint": "14.8.1", - "stylelint-config-recommended": "7.0.0", - "stylelint-no-unsupported-browser-features": "5.0.3" - }, - "peerDependencies": { - "postcss-less": "^6.0.0" - } - }, - "node_modules/stylelint-no-unsupported-browser-features": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz", - "integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==", - "dev": true, - "dependencies": { - "doiuse": "^4.4.1", - "lodash": "^4.17.15", - "postcss": "^8.3.6" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "stylelint": ">=13.0.0" - } - }, - "node_modules/stylelint/node_modules/balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true - }, - "node_modules/stylelint/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stylelint/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dev": true, - "dependencies": { - "minimist": "^1.1.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", - "dev": true - }, - "node_modules/syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "dev": true, - "dependencies": { - "acorn-node": "^1.2.0" - } - }, - "node_modules/table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dev": true, - "dependencies": { - "process": "~0.11.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "node_modules/umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "dev": true, - "bin": { - "umd": "bin/cli.js" - } - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/undeclared-identifiers": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", - "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", - "dev": true, - "dependencies": { - "acorn-node": "^1.3.0", - "dash-ast": "^1.0.0", - "get-assigned-identifiers": "^1.2.0", - "simple-concat": "^1.0.0", - "xtend": "^4.0.1" - }, - "bin": { - "undeclared-identifiers": "bin.js" - } - }, - "node_modules/underscore.string": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", - "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", - "dev": true, - "dependencies": { - "sprintf-js": "^1.0.3", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vm-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", - "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", - "dev": true - }, - "node_modules/vue-eslint-parser": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz", - "integrity": "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==", - "dev": true, - "dependencies": { - "debug": "^4.3.2", - "eslint-scope": "^7.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.0.0", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/wd-type-parser": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wd-type-parser/-/wd-type-parser-0.0.3.tgz", - "integrity": "sha1-P/oeGceqm0uD+mmp6F69MrkAHkc=", - "dev": true - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yaml-eslint-parser": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.5.0.tgz", - "integrity": "sha512-nJeyLA3YHAzhBTZbRAbu3W6xrSCucyxExmA+ZDtEdUFpGllxAZpto2Zxo2IG0r0eiuEiBM4e+wiAdxTziTq94g==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.0.0", - "lodash": "^4.17.21", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/yaml-eslint-parser/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } - } - }, - "@es-joy/jsdoccomment": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", - "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", - "dev": true, - "requires": { - "comment-parser": "1.3.0", - "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.3" - } - }, - "@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@mdn/browser-compat-data": { - "version": "5.5.10", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.10.tgz", - "integrity": "sha512-s2GGND9oLhEuksOFtICYOBZdMWPANBXTMqAXh89q6g1Mi3+OuWEmp9WFzw2v/nmS175vqeewpC1kDJA7taaxyA==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "acorn": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz", - "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "dev": true - }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "ast-metadata-inferer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.0.tgz", - "integrity": "sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==", - "dev": true, - "requires": { - "@mdn/browser-compat-data": "^5.2.34" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-pack": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", - "dev": true, - "requires": { - "combine-source-map": "~0.8.0", - "defined": "^1.0.0", - "JSONStream": "^1.0.3", - "safe-buffer": "^5.1.1", - "through2": "^2.0.0", - "umd": "^3.0.0" - } - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browserify": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz", - "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==", - "dev": true, - "requires": { - "assert": "^1.4.0", - "browser-pack": "^6.0.1", - "browser-resolve": "^1.11.0", - "browserify-zlib": "~0.2.0", - "buffer": "^5.0.2", - "cached-path-relative": "^1.0.0", - "concat-stream": "^1.6.0", - "console-browserify": "^1.1.0", - "constants-browserify": "~1.0.0", - "crypto-browserify": "^3.0.0", - "defined": "^1.0.0", - "deps-sort": "^2.0.0", - "domain-browser": "^1.2.0", - "duplexer2": "~0.1.2", - "events": "^2.0.0", - "glob": "^7.1.0", - "has": "^1.0.0", - "htmlescape": "^1.1.0", - "https-browserify": "^1.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^7.0.0", - "JSONStream": "^1.0.3", - "labeled-stream-splicer": "^2.0.0", - "mkdirp": "^0.5.0", - "module-deps": "^6.0.0", - "os-browserify": "~0.3.0", - "parents": "^1.0.1", - "path-browserify": "~0.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^2.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.1.4", - "shasum": "^1.0.0", - "shell-quote": "^1.6.1", - "stream-browserify": "^2.0.0", - "stream-http": "^2.0.0", - "string_decoder": "^1.1.1", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^2.0.0", - "timers-browserify": "^1.0.1", - "tty-browserify": "0.0.1", - "url": "~0.11.0", - "util": "~0.10.1", - "vm-browserify": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - } - } - }, - "browserify-sign": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", - "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", - "dev": true, - "requires": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.4", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.6", - "readable-stream": "^3.6.2", - "safe-buffer": "^5.2.1" - }, - "dependencies": { - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - } - }, - "browserslist-config-wikimedia": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.4.0.tgz", - "integrity": "sha512-U/fmsaGlCKOqRIjKqXwQ44qFqiStngRTphj1Cf6IHV6J8OK8T0gu9dKc7Ljq4v7bwhnhN+YCCa4fA3nZlPNivQ==", - "dev": true - }, - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "cached-path-relative": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", - "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caniuse-lite": { - "version": "1.0.30001585", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz", - "integrity": "sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "clean-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", - "dev": true, - "requires": { - "is-regexp": "^2.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combine-source-map": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", - "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", - "dev": true, - "requires": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" - } - }, - "comment-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", - "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css-functions-list": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz", - "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==", - "dev": true - }, - "css-rule-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz", - "integrity": "sha1-N4bnGYmD2WWibjGVfgkHjLt3BaI=", - "dev": true, - "requires": { - "css-tokenize": "^1.0.1", - "duplexer2": "0.0.2", - "ldjson-stream": "^1.2.1", - "through2": "^0.6.3" - }, - "dependencies": { - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "~1.1.9" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - } - } - }, - "css-tokenize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz", - "integrity": "sha1-RiXLHtohwUOFi3+B1oA8HSb8FL4=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^1.0.33" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "dash-ast": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", - "dev": true - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - } - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "deps-sort": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", - "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "shasum": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" - } - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", - "dev": true, - "requires": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "doiuse": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-4.4.1.tgz", - "integrity": "sha512-TUpr1/YNg20IB09tZmwGCTsTQoxj8jUld/hUZprZMj8vj0VpAJySXEWCr8WMvqvgzk0/kG/FxeSMGKode4UjPg==", - "dev": true, - "requires": { - "browserslist": "^4.16.1", - "caniuse-lite": "^1.0.30001179", - "css-rule-stream": "^1.1.0", - "duplexer2": "0.0.2", - "ldjson-stream": "^1.2.1", - "multimatch": "^5.0.0", - "postcss": "^8.2.4", - "source-map": "^0.7.3", - "through2": "^4.0.2", - "yargs": "^16.2.0" - }, - "dependencies": { - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "~1.1.9" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domain-validator": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/domain-validator/-/domain-validator-0.0.6.tgz", - "integrity": "sha1-KndLSv2xnt2sRGGsj60NOWTP1q0=", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "electron-to-chromium": { - "version": "1.4.665", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz", - "integrity": "sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", - "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.2.1", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - } - } - }, - "eslint-config-wikimedia": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.22.1.tgz", - "integrity": "sha512-TtN+gWJrcW0i1sEu7vPE1tHpEilrMUuTxP6UK97Amvva/KDV9/tvRUifGhw0q5uBswp+HWgF12p8rq68hZqMbA==", - "dev": true, - "requires": { - "eslint": "^8.6.0", - "eslint-plugin-compat": "^4.0.2", - "eslint-plugin-es": "^4.1.0", - "eslint-plugin-jsdoc": "^37.7.1", - "eslint-plugin-json-es": "^1.5.4", - "eslint-plugin-mediawiki": "^0.3.0", - "eslint-plugin-mocha": "^9.0.0", - "eslint-plugin-no-jquery": "^2.7.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-qunit": "^7.2.0", - "eslint-plugin-unicorn": "^40.1.0", - "eslint-plugin-vue": "^8.4.1", - "eslint-plugin-wdio": "^7.4.2", - "eslint-plugin-yml": "^0.13.0" - } - }, - "eslint-plugin-compat": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz", - "integrity": "sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==", - "dev": true, - "requires": { - "@mdn/browser-compat-data": "^5.3.13", - "ast-metadata-inferer": "^0.8.0", - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001524", - "find-up": "^5.0.0", - "lodash.memoize": "^4.1.2", - "semver": "^7.5.4" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - } - }, - "eslint-plugin-jsdoc": { - "version": "37.9.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz", - "integrity": "sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g==", - "dev": true, - "requires": { - "@es-joy/jsdoccomment": "~0.20.1", - "comment-parser": "1.3.0", - "debug": "^4.3.3", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.4.0", - "regextras": "^0.8.0", - "semver": "^7.3.5", - "spdx-expression-parse": "^3.0.1" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - } - } - }, - "eslint-plugin-json-es": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.5.tgz", - "integrity": "sha512-J5wsCFuV8u+1nJzLtJo3SInE624sAr7yfKoktk7t7Px/gC/DLPYtXkwFu/QBaoPo4yvQ2wG532Jv9OpY1h212w==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - } - } - }, - "eslint-plugin-mediawiki": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.3.0.tgz", - "integrity": "sha512-Lhyj2PSkhDzYSc1PNbURysY/WoqvY0brw558ZInT3erzf5KUlro18MTKFdV+nlht475ZgnsfHsgfg6Ut2w1SVg==", - "dev": true, - "requires": { - "eslint-plugin-vue": "^7.20.0", - "upath": "^2.0.1" - }, - "dependencies": { - "eslint-plugin-vue": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz", - "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==", - "dev": true, - "requires": { - "eslint-utils": "^2.1.0", - "natural-compare": "^1.4.0", - "semver": "^6.3.0", - "vue-eslint-parser": "^7.10.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "vue-eslint-parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", - "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^6.3.0" - } - } - } - }, - "eslint-plugin-mocha": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz", - "integrity": "sha512-d7knAcQj1jPCzZf3caeBIn3BnW6ikcvfz0kSqQpwPYcVGLoJV5sz0l0OJB2LR8I7dvTDbqq1oV6ylhSgzA10zg==", - "dev": true, - "requires": { - "eslint-utils": "^3.0.0", - "ramda": "^0.27.1" - }, - "dependencies": { - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-plugin-no-jquery": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz", - "integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==", - "dev": true - }, - "eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "requires": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "dependencies": { - "eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "eslint-plugin-qunit": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-7.2.0.tgz", - "integrity": "sha512-ebT6aOpmMj4vchG0hVw9Ukbutk/lgywrc8gc9w9hH2/4WjKqwMlyM7iVwqB7OAXv6gtQMJZuziT0wNjjymAuWA==", - "dev": true, - "requires": { - "eslint-utils": "^3.0.0", - "requireindex": "^1.2.0" - }, - "dependencies": { - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-plugin-unicorn": { - "version": "40.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-40.1.0.tgz", - "integrity": "sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "ci-info": "^3.3.0", - "clean-regexp": "^1.0.0", - "eslint-utils": "^3.0.0", - "esquery": "^1.4.0", - "indent-string": "^4.0.0", - "is-builtin-module": "^3.1.0", - "lodash": "^4.17.21", - "pluralize": "^8.0.0", - "read-pkg-up": "^7.0.1", - "regexp-tree": "^0.1.24", - "safe-regex": "^2.1.1", - "semver": "^7.3.5", - "strip-indent": "^3.0.0" - }, - "dependencies": { - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-plugin-vue": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.5.0.tgz", - "integrity": "sha512-i1uHCTAKOoEj12RDvdtONWrGzjFm/djkzqfhmQ0d6M/W8KM81mhswd/z+iTZ0jCpdUedW3YRgcVfQ37/J4zoYQ==", - "dev": true, - "requires": { - "eslint-utils": "^3.0.0", - "natural-compare": "^1.4.0", - "semver": "^7.3.5", - "vue-eslint-parser": "^8.0.1" - }, - "dependencies": { - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-plugin-wdio": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.4.2.tgz", - "integrity": "sha512-tkISFycJmRFMKsEjetRcAmWSHKJKnw5rKHDxfE7Ob3tF5lbmYlCLfNKH0UwanOpSdulpe52s3K+CBHSd6qUUNQ==", - "dev": true - }, - "eslint-plugin-yml": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.13.0.tgz", - "integrity": "sha512-rZvdnhe28jIbgSIZo3qYqkl9hKslyTDfMwqIGDzz873gxghzBw0yeFG+P7sMfOkFfpqwJzZy3IKe2cIiCp4FrA==", - "dev": true, - "requires": { - "debug": "^4.3.2", - "lodash": "^4.17.21", - "natural-compare": "^1.4.0", - "yaml-eslint-parser": "^0.5.0" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", - "dev": true, - "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.3.0" - }, - "dependencies": { - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true - }, - "events": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", - "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", - "dev": true, - "requires": { - "clone-regexp": "^2.1.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - } - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true - }, - "getobject": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.0.tgz", - "integrity": "sha512-tbUz6AKKKr2YiMB+fLWIgq5ZeBOobop9YMMAU9dC54/ot2ksMXt3DOFyBuhZw6ptcVszEykgByK20j7W9jHFag==", - "dev": true - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - }, - "globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", - "dev": true - }, - "grunt": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", - "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", - "dev": true, - "requires": { - "dateformat": "~3.0.3", - "eventemitter2": "~0.4.13", - "exit": "~0.1.2", - "findup-sync": "~0.3.0", - "glob": "~7.1.6", - "grunt-cli": "~1.4.3", - "grunt-known-options": "~2.0.0", - "grunt-legacy-log": "~3.0.0", - "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", - "js-yaml": "~3.14.0", - "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" - }, - "dependencies": { - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "grunt-banana-checker": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.9.0.tgz", - "integrity": "sha512-SqPiB6OazWqR8USL0NymtuT5Br3mD9WBBsM1rHC/3wIi2SrZNM6/+j9CIeuEM5oCn+AtO2Y0+rzzFyOdC9afAg==", - "dev": true - }, - "grunt-cli": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", - "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", - "dev": true, - "requires": { - "grunt-known-options": "~2.0.0", - "interpret": "~1.1.0", - "liftup": "~3.0.1", - "nopt": "~4.0.1", - "v8flags": "~3.2.0" - }, - "dependencies": { - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - } - } - }, - "grunt-eslint": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.0.tgz", - "integrity": "sha512-WpTeBBFweyhMuPjGwRSQV9JFJ+EczIdlsc7Dd/1g78QVI1aZsk4g/H3e+3S5HEwsS1RKL2YZIrGj8hMLlBfN8w==", - "dev": true, - "requires": { - "chalk": "^4.1.2", - "eslint": "^8.0.1" - } - }, - "grunt-known-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", - "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", - "dev": true - }, - "grunt-legacy-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", - "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", - "dev": true, - "requires": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.1.0", - "hooker": "~0.2.3", - "lodash": "~4.17.19" - } - }, - "grunt-legacy-log-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", - "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", - "dev": true, - "requires": { - "chalk": "~4.1.0", - "lodash": "~4.17.19" - } - }, - "grunt-legacy-util": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", - "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", - "dev": true, - "requires": { - "async": "~3.2.0", - "exit": "~0.1.2", - "getobject": "~1.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.21", - "underscore.string": "~3.3.5", - "which": "~2.0.2" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "grunt-stylelint": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.17.0.tgz", - "integrity": "sha512-aVpqPO7h98haGRZKnj9nkMTMGjzmVQWyN/FNB/qkbcVG6pguZ48yZi8YO+ULynzNK9YFqWhWBFgAs71m7ZpK+A==", - "dev": true, - "requires": { - "chalk": "^4.1.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true - }, - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", - "dev": true - }, - "htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "dev": true - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", - "dev": true, - "requires": { - "source-map": "~0.5.3" - } - }, - "insert-module-globals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", - "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", - "dev": true, - "requires": { - "acorn-node": "^1.5.2", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "JSONStream": "^1.0.3", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "undeclared-identifiers": "^1.1.2", - "xtend": "^4.0.0" - } - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", - "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", - "dev": true, - "requires": { - "builtin-modules": "^3.0.0" - } - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "jquery.splitter": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/jquery.splitter/-/jquery.splitter-0.27.1.tgz", - "integrity": "sha512-w2SxaOcWelAeGMVMCCCfr268itijvGIAPoPcYCEkTapsnwBMn95rF+XHKLK9XHZ/16kyaWIkHBH1ZBlCPYVfNw==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdoc-type-pratt-parser": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", - "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "known-css-properties": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz", - "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==", - "dev": true - }, - "labeled-stream-splicer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", - "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "stream-splicer": "^2.0.0" - } - }, - "ldjson-stream": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz", - "integrity": "sha1-kb7O2lrE7SsX5kn7d356v6AYnCs=", - "dev": true, - "requires": { - "split2": "^0.2.1", - "through2": "^0.6.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "liftup": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", - "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", - "dev": true, - "requires": { - "extend": "^3.0.2", - "findup-sync": "^4.0.0", - "fined": "^1.2.0", - "flagged-respawn": "^1.0.1", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.1", - "rechoir": "^0.7.0", - "resolve": "^1.19.0" - }, - "dependencies": { - "findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" - } - } - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", - "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", - "dev": true - }, - "mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - } - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "dependencies": { - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - } - } - }, - "mkdirp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "module-deps": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.1.tgz", - "integrity": "sha512-UnEn6Ah36Tu4jFiBbJVUtt0h+iXqxpLqDvPS8nllbw5RZFmNJ1+Mz5BjYnM9ieH80zyxHkARGLnMIHlPK5bu6A==", - "dev": true, - "requires": { - "browser-resolve": "^1.7.0", - "cached-path-relative": "^1.0.2", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.0.2", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "JSONStream": "^1.0.3", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.4.0", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - } - } - }, - "mw-graph-shared": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/mw-graph-shared/-/mw-graph-shared-0.4.2.tgz", - "integrity": "sha1-JcqMQrvjVrQhwIofarhEllTgTLY=", - "dev": true, - "requires": { - "domain-validator": "^0.0.6", - "wd-type-parser": "^0.0.3" - } - }, - "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-selector": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dev": true, - "requires": { - "path-platform": "~0.11.15" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true - }, - "postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", - "dev": true, - "requires": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-less": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-6.0.0.tgz", - "integrity": "sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==", - "dev": true - }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", - "dev": true - }, - "postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", - "dev": true - }, - "postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true - }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, - "ramda": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz", - "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "regexp-tree": { - "version": "0.1.24", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", - "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", - "dev": true - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regextras": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", - "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", - "dev": true, - "requires": { - "regexp-tree": "~0.1.1" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "dev": true, - "requires": { - "json-stable-stringify": "~0.0.0", - "sha.js": "~2.4.4" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", - "dev": true - }, - "specificity": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", - "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", - "dev": true - }, - "split2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz", - "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=", - "dev": true, - "requires": { - "through2": "~0.6.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true, - "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-splicer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", - "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", - "dev": true - }, - "stylelint": { - "version": "14.8.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz", - "integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==", - "dev": true, - "requires": { - "balanced-match": "^2.0.0", - "colord": "^2.9.2", - "cosmiconfig": "^7.0.1", - "css-functions-list": "^3.0.1", - "debug": "^4.3.4", - "execall": "^2.0.0", - "fast-glob": "^3.2.11", - "fastest-levenshtein": "^1.0.12", - "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.2.0", - "ignore": "^5.2.0", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.24.0", - "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "normalize-selector": "^0.2.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.12", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "specificity": "^0.4.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^2.2.0", - "svg-tags": "^1.0.0", - "table": "^6.8.0", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.1" - }, - "dependencies": { - "balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "stylelint-config-recommended": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz", - "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==", - "dev": true - }, - "stylelint-config-wikimedia": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.13.0.tgz", - "integrity": "sha512-1R1g/uc53z2z39ejZMALwC6fTfSZhkzDjj1v8ODCWtLCiuqWuSf3HR1ZTXT5X5AtSbZq1W9+0p5HJp6rPVXkRg==", - "dev": true, - "requires": { - "browserslist-config-wikimedia": "0.4.0", - "postcss-less": "6.0.0", - "stylelint": "14.8.1", - "stylelint-config-recommended": "7.0.0", - "stylelint-no-unsupported-browser-features": "5.0.3" - } - }, - "stylelint-no-unsupported-browser-features": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz", - "integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==", - "dev": true, - "requires": { - "doiuse": "^4.4.1", - "lodash": "^4.17.15", - "postcss": "^8.3.6" - } - }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dev": true, - "requires": { - "minimist": "^1.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", - "dev": true - }, - "syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "dev": true, - "requires": { - "acorn-node": "^1.2.0" - } - }, - "table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dev": true, - "requires": { - "process": "~0.11.0" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true - }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "dev": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "undeclared-identifiers": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", - "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", - "dev": true, - "requires": { - "acorn-node": "^1.3.0", - "dash-ast": "^1.0.0", - "get-assigned-identifiers": "^1.2.0", - "simple-concat": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "underscore.string": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", - "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", - "dev": true, - "requires": { - "sprintf-js": "^1.0.3", - "util-deprecate": "^1.0.2" - } - }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vm-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", - "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", - "dev": true - }, - "vue-eslint-parser": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz", - "integrity": "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==", - "dev": true, - "requires": { - "debug": "^4.3.2", - "eslint-scope": "^7.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.0.0", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.5" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - } - } - }, - "wd-type-parser": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wd-type-parser/-/wd-type-parser-0.0.3.tgz", - "integrity": "sha1-P/oeGceqm0uD+mmp6F69MrkAHkc=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yaml-eslint-parser": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.5.0.tgz", - "integrity": "sha512-nJeyLA3YHAzhBTZbRAbu3W6xrSCucyxExmA+ZDtEdUFpGllxAZpto2Zxo2IG0r0eiuEiBM4e+wiAdxTziTq94g==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.0.0", - "lodash": "^4.17.21", - "yaml": "^1.10.2" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - } - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/dist/extensions/Graph/package.json b/dist/extensions/Graph/package.json deleted file mode 100644 index 7a42987f2..000000000 --- a/dist/extensions/Graph/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Graph", - "version": "0.0.0", - "private": true, - "description": "Build tools for the Graph-MediaWiki extension.", - "scripts": { - "build-lib": "node_modules/.bin/browserify modules/graph2.js -o lib/graph2.compiled.js", - "test": "grunt test" - }, - "manual-dev-Dependencies (fails to install in Jenkins, install manually)": { - "vega": "git+https://github.com/nyurik/vega" - }, - "devDependencies": { - "browserify": "^16.2.3", - "eslint-config-wikimedia": "0.22.1", - "grunt": "1.5.3", - "grunt-banana-checker": "0.9.0", - "grunt-eslint": "24.0.0", - "grunt-stylelint": "0.17.0", - "jquery.splitter": "^0.27.1", - "mw-graph-shared": "^0.4.2", - "stylelint-config-wikimedia": "0.13.0" - } -} diff --git a/dist/extensions/Graph/styles/common.less b/dist/extensions/Graph/styles/common.less deleted file mode 100644 index 01c8f75ad..000000000 --- a/dist/extensions/Graph/styles/common.less +++ /dev/null @@ -1,39 +0,0 @@ -@import 'mediawiki.mixins'; -@import 'mediawiki.mixins.animation'; - -.mw-graph { - display: inline-block; - position: relative; - background-image: url( ../includes/ajax-loader.gif ); - background-position: 50% 50%; - background-repeat: no-repeat; - border: 1px solid transparent; - opacity: 0; - .animation( spinnerDelay 0.5s ease-out 0.5s forwards ) ; - - canvas { - display: inline-block; - vertical-align: middle; - background: #fff; - } -} - -@keyframes spinnerDelay { - 90% { - opacity: 0; - } - - 100% { - opacity: 1; - } -} - -.client-nojs { - .mw-graph { - background-image: unset; - } - - .mw-graph-nofallback { - display: none; - } -} diff --git a/dist/extensions/Graph/styles/sandbox.css b/dist/extensions/Graph/styles/sandbox.css deleted file mode 100644 index d815c43a4..000000000 --- a/dist/extensions/Graph/styles/sandbox.css +++ /dev/null @@ -1,13 +0,0 @@ -/* stylelint-disable selector-max-id */ - -#mw-graph-right .top_panel { - overflow: hidden; -} - -#mw-graph-json { - margin: 0; - top: 0; - left: 0; - right: 0; - bottom: 0; -}