feat():连接车辆类型与模板
parent
833e554722
commit
347018d602
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"name": "cloud-server-8",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"node_modules/echarts": {
|
||||||
|
"version": "5.5.1",
|
||||||
|
"resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.1.tgz",
|
||||||
|
"integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
|
||||||
|
"dependencies": {
|
||||||
|
"tslib": "2.3.0",
|
||||||
|
"zrender": "5.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tslib": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
|
||||||
|
},
|
||||||
|
"node_modules/zrender": {
|
||||||
|
"version": "5.6.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz",
|
||||||
|
"integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
|
||||||
|
"dependencies": {
|
||||||
|
"tslib": "2.3.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,419 @@
|
||||||
|
This file contains the PGP keys of various developers.
|
||||||
|
Please don't use them for email unless you have to. Their main
|
||||||
|
purpose is code signing.
|
||||||
|
|
||||||
|
Examples of importing this file in your keystore:
|
||||||
|
gpg --import KEYS.txt
|
||||||
|
(need pgp and other examples here)
|
||||||
|
|
||||||
|
Examples of adding your key to this file:
|
||||||
|
pgp -kxa <your name> and append it to this file.
|
||||||
|
(pgpk -ll <your name> && pgpk -xa <your name>) >> this file.
|
||||||
|
(gpg --list-sigs <your name>
|
||||||
|
&& gpg --armor --export <your name>) >> this file.
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
pub rsa4096 2018-04-23 [SC]
|
||||||
|
9B06D9B4FA37C4DD52725742747985D7E3CEB635
|
||||||
|
uid [ultimate] Su Shuang (CODE SIGNING KEY) <sushuang@apache.org>
|
||||||
|
sig 3 747985D7E3CEB635 2018-04-23 Su Shuang (CODE SIGNING KEY) <sushuang@apache.org>
|
||||||
|
sub rsa4096 2018-04-23 [E]
|
||||||
|
sig 747985D7E3CEB635 2018-04-23 Su Shuang (CODE SIGNING KEY) <sushuang@apache.org>
|
||||||
|
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mQINBFrd5SYBEADoCBw12lsK1sxn3r879jI50GhRAg5vF0aBql0h2BIJ3d+oYYSm
|
||||||
|
nIsK/XGpIk3t6ZhJRXK+le89t8a7vBsU+y0+3+OehxOV63du1wscQU9GPu7IfXhw
|
||||||
|
V4YcsGK330+V/GiwBs3EX808fdQrdkfCsaGEJhKJbK2fldUcnNp3M1Y2+DVZqGmb
|
||||||
|
I7fRJuEj/S9bcVGWnv40jBbMKjx/8LyP2dxZLyy1+whEUimU9em6Tj+SnyISe1I2
|
||||||
|
sLa3lwhWer0rkrz0siGFTgDHaDvLlpL9TV34acj/FOon3XKMtx4neNVmkC3QVi0z
|
||||||
|
PSlnX6EV8Fas9ylA4x9bdaUo6zUZKO533ASfC6uEibvE2XSRXYJ0xB2bThcQbkdl
|
||||||
|
332JqD1TkyF/UQRel3pUm/bCsv2daKD98ZO+eCbvNNonrip2qXDwJJ5HzlXlThyR
|
||||||
|
eN1Og90gXvYix4sbsZgNEIyYSaLri7/GjyMD34GCLQiV/kvc/foaC/hkvz6kVOiq
|
||||||
|
/tMHY3KsGYAIF4Z9kuTCwJOwFqgfb+Y15bPRDK84uyCiRhtIubNWY7Euy4bBd3ul
|
||||||
|
uazQ9LabBhZaa7HCOMssW+TaB+GondZJTiwnI6MCTJKrKtvb8kzcKR4mNf/dvF0O
|
||||||
|
x7zwVBeklMKXjkpOtje/+/XOYKuD3g1BZ/+vrfMFPTZ7y7ASC2ylcKI0/QARAQAB
|
||||||
|
tDJTdSBTaHVhbmcgKENPREUgU0lHTklORyBLRVkpIDxzdXNodWFuZ0BhcGFjaGUu
|
||||||
|
b3JnPokCTgQTAQoAOBYhBJsG2bT6N8TdUnJXQnR5hdfjzrY1BQJa3eUmAhsDBQsJ
|
||||||
|
CAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJEHR5hdfjzrY13yIP+wS+Mh86IuIK+zG5
|
||||||
|
qr/cncV541RxvIGbv5uCQEbFRIwtR8SJEyx2tu4pIgsaTu93hdwxHFCcOZT2IsXP
|
||||||
|
meRWPfhaguDFQArdu4VdOfq2AbMqqByFWRsbwvF8CX8fGMPBCsMp0pzqp0px1uUr
|
||||||
|
WlK5hBSVwDHWACElyJE7jmk5K+O7RmDUD2E/pgXid+SiU8W+k9vWj49nHAhStYTm
|
||||||
|
SwVQA4Gl7jGCJY5jFwZIRD5/b8kVYjbJFl9CBDD2nOIytrGfMVlhp2OcT1f6yZvZ
|
||||||
|
oY2nvWLBUF0SmQzlli3EW9zzsNAXDu3f81kqwa+kC2WqQ3s4bKZKQurN5sCWvoyX
|
||||||
|
db+AWedArK+m3fH9y3JFIr5Lu1MwfbgfMfm9EZS4A+3DqLFIsLrmnzbGZ9FCkqsj
|
||||||
|
TuvKWOP2H365xH44gHImYKZ92PDdLKE7XArVU5b9qtAimgCDsCjEiXTB4S3NVJGX
|
||||||
|
R0RZCttKgnrLHwAad3TeLhktWcjH4TdxNCrNZsHLO9mklGyeM1IxKqba4OdHTmYX
|
||||||
|
tYYlixSlAu5vSPa+vDkILRfyU87n9YD9RiVGmvy27IP7wdxSClJun6+9fviU2NpG
|
||||||
|
FCkLZovYz8/Qht1c8yQZGscw3sa316m1nJz42Lo+p2s6AQZhZupu8bi/W85VHoxa
|
||||||
|
roRO16i+mFr4bnbo2/jftB6UVVo7uQINBFrd5SYBEACVsgwBHz5cpBqZQVNS6o0W
|
||||||
|
RUnWWNDiBYidNQNTWCF9NDF0HCh6oHecjjXQEPduvMPdzOPpawAkKMRG+7MlHiu/
|
||||||
|
ugAq0RluoM3QzDZwvCPw+p/NTESZMqLvbHXEs2u6YCdIsFcTLXr2d+JBWDeGri0S
|
||||||
|
YB4gjjQIVvDGqG0tDoW4JmqHHMZiJ6c+h2Rq+saHte0rctHcVAq4p5I8O1iJ1Mkg
|
||||||
|
gKJ/TBsjPM5aK6ahPpIPPh48nbhpsLjKHwqB/UWdUcB/HUDa0YfV4JbJilEeeQFZ
|
||||||
|
PzlP5SJaGyuEnTnhEwnoXpFetfMYi+Mxnc4VoSrQ3UOsVpD2Ii3haUjdKWTjukyn
|
||||||
|
o3sCxvsBTQ8jyBtjjhLw1jfWJdHJ2WCDGVtQVuJ6Gx1GCV0XRbKDTWdIBnCkdKtU
|
||||||
|
FY+VMt77oQ/ydeRsZDXhkdgBqqkvdiRHRyEFy72rx61cGTIKuKcWu0rJx8/LnVyi
|
||||||
|
nOEk8K8mgNR8omnpFmkkStOtSDLjDb8WeIdigxwJ4wtQnLlLGWiAAVNnDDsqgGIB
|
||||||
|
3rrR+/HKUa05CwKI1oIC7i4f7qkgfFUjjr1e496FDSq2tBTLukq/v5FpU6C0JSVq
|
||||||
|
MeD5+UuGtSezBxQUdxV7caftIptopwWnx4bBjWSuk2FVCzWcYMnXNIbtfEbqMKuS
|
||||||
|
mrpk4mOBNAV6XYzNcOHQqwARAQABiQI2BBgBCgAgFiEEmwbZtPo3xN1ScldCdHmF
|
||||||
|
1+POtjUFAlrd5SYCGwwACgkQdHmF1+POtjXK4g//c7vJXmN0FtACspBJVrgsKrYj
|
||||||
|
ha4c2PCEynfKSwhVXW3yHnQMwh8/bpQUs5bwCTWx27IEeBrfb03/X9tlx12koGvl
|
||||||
|
LujaR7IP6xaqWpbh6rrfttOKGx3xKopJ4nHgNPIYN/ApflAacwyOd+/leWOjHrii
|
||||||
|
JXbB60oc7FNvfQRREICLZyeAnzlAcEOVcWvBTngB0EDUZucKwkQtt0x3YvKetgQf
|
||||||
|
EMFBAH4RUXG0ms85acX2rpi/kbdarFv6Hc2pzakoWDKNjHMMae1J8wQbPRaXx1NB
|
||||||
|
+xF362eLXZaxtvKdzs9Q03R46DY9cyQRofG5WNnZapgemEzPgixur8FYK5EPCQkh
|
||||||
|
Y2FA0WUbZFIkO7pE7UNS5ZN5fHkkEhAFo4wV0uqWRVBpFrjKeBxtRkIaw7jLCHr5
|
||||||
|
3EpkTusjT/529rEYIq9cGOTwf75AbKR1IZFxffEZYOU76y6SH0bINoYp0VxFJ/IR
|
||||||
|
zy5CHqvyUQVUed5O/7UzkYx0IVBGk2wSwOtC7+iRptqj+kI9RCjGizhNe4hG3SUq
|
||||||
|
1qkUGkQu6+skyXeFCR1PIAbQgleRNUQotsh/rfsfZpQOomBdvDRPT8ZcN5bjUIJ1
|
||||||
|
5c4abryWPkun+BgZk+YFtYLbGZVJAUy2OtXRG5uYzeLc5ID+X5XwwtZOO4gSWMTh
|
||||||
|
oQH7TsthVKvdZyjtZQg=
|
||||||
|
=Uv8d
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
pub rsa4096 2019-01-24 [SC]
|
||||||
|
1683FBD23F6DD36C0E52223507D78F777D2C0C27
|
||||||
|
uid [ultimate] Ovilia (CODE SIGNING KEY) <oviliazhang@gmail.com>
|
||||||
|
sig 3 07D78F777D2C0C27 2019-01-24 Ovilia (CODE SIGNING KEY) <oviliazhang@gmail.com>
|
||||||
|
sub rsa4096 2019-01-24 [E]
|
||||||
|
sig 07D78F777D2C0C27 2019-01-24 Ovilia (CODE SIGNING KEY) <oviliazhang@gmail.com>
|
||||||
|
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mQINBFxJWEYBEADYzZRcG+WIllHo8PloMv9pX2QZxmZiVJzM7Prgg8KlWfHnO68/
|
||||||
|
7Et//hMA2zexJWweZwM0ffmjvcIIEre23De6KaA2htM/54aPoBweDAOBi34RsdR9
|
||||||
|
kpN0RvipvJMMZKGB0tDSB3mLhWaiApDGMsysfJAgTaGsIISrC2+xLO/+HxgoEAIX
|
||||||
|
a0BTJ+P3cOLPghBBaRtyKNWJjJ2e4XzlVM0T4bM06QmzC0qWTSufKqk1XAZTSOGU
|
||||||
|
LXYESonSu/+kL2TCsKi90THNX69a9SBx3DAohbb5WKjXkYistSQi9S33jqZMIc7n
|
||||||
|
I1kG1x39YxZiQwwszwbfa3/+qE3X0Qjp2k3fD7wa+qDnSpHTchqy8d71EN0wU6S/
|
||||||
|
9vEiJ2e+gxN6WZetK9wl90P70Iu0rvLqSu+5EdkenvIbh6i4CR+Cer1Sky2z7rEY
|
||||||
|
vmEjFNjV2ktvbu83RDofxp4ERSbZOwq8VMOWqj6Ft9mIWfw1OAoSkLCRchYFR1ue
|
||||||
|
r+e3FuF01KlCXjTV4t24F7l5QO/bwexnmYuVTlSEo4PVZLJAv/UYSP0ngie5DawL
|
||||||
|
z2RDCuRrROgtzcf84SaRxwcPNQ0h6EZlKZ4NFL7nl4rwbDsyZRdBqzQ5JPm6dbGe
|
||||||
|
CZXCBA84ivcnK845flcsl7ITNjcfsLbeN9s6FMnYZgOHZh/ucmw2dL+5vQARAQAB
|
||||||
|
tDFPdmlsaWEgKENPREUgU0lHTklORyBLRVkpIDxvdmlsaWF6aGFuZ0BnbWFpbC5j
|
||||||
|
b20+iQJOBBMBCAA4FiEEFoP70j9t02wOUiI1B9ePd30sDCcFAlxJWEYCGwMFCwkI
|
||||||
|
BwIGFQoJCAsCBBYCAwECHgECF4AACgkQB9ePd30sDCcgHA//be3mdnRU+jYCP3VU
|
||||||
|
l/pcYnbxoIfAhf1Z2orVcN3/E6v2wDYvbvcV7EX/cqwMXBc0/CEVisGQ3zX5CM4/
|
||||||
|
C/vwjAsPNPWsX8iyE/Mui/Ktl9tZqQ3/8hTOHe5RQIn0VQ5wIYmyh3Q42BI4vKK3
|
||||||
|
BodV9PwONdRhQVJ15x1fp59wiPTqflcXJ0qdGml3JY4ULLFYh63MBV4as6pg/Qtb
|
||||||
|
1enZmw8/Bgg6mhY6HiBI+v+8wAwdatwYuG33JdzhoPVbjsnovqAE+kMvOuxmVbK/
|
||||||
|
q5dwdwFULbyHzojNAj7zg1zjtksawP8Uspc02JHr16pW3u48E2/uk6XCkTpFDJ09
|
||||||
|
xqwtZyEGSobl/9BaDuidXQ9UDsrOIYuvBXO53vlVv1nwzyF7qUhNRNn1HdzIbEiV
|
||||||
|
16CaYT5Soy4Xh5sFTFoIg0g/E8JquSgIEJN/NutqbQOHO4ldMxaDEgFp7dRJ/tqo
|
||||||
|
CEJgahC/D16efbIUP2gVScYsJK3VYNjuEfnTu2qiR7XDXosG0zGOMGsr4xCuSx8y
|
||||||
|
mwtrqRZdl4wfaHi2/QojJGAXwd1Q9WNBxYKuE31amAo7AxGKZ8QLZ9m0RwitG912
|
||||||
|
yP7gsw9k/TA195GJiQ5W1qNTHa4gKXhzFtPqg7s9xhJOkb+GOk6tOCWzts1IJSXa
|
||||||
|
oyGerp3bGP4Ho49nipEFjeiUKgW5Ag0EXElYRgEQAMbeZQMWRo9h6RgGm7eLCfz2
|
||||||
|
K9Ro9yL0U0Jz8SmNz2I7YoYqg4idPV7D0gBym/502QsalQc427vE4QtJGlNPx8yH
|
||||||
|
uXIKD0u9sGadO3wkz3WmPqyVMlAgdzjB9ddoWjeQDYTvJLO1eo4LtVUoSydoOs67
|
||||||
|
bBNr9Wi2hIso60+cZGxczI+dTkqvgd+nSrhzG1+N1NPjpGqLUSvjWEZiu4NT1oVd
|
||||||
|
4f8C6SpQNkgUbliomLE9Zv8Wkcj8RDU5je+dU8r4fKQy1GtDVGW89QXGKALwTg4F
|
||||||
|
4/d+/qbF/ZhfZk3e6dxJV4Slmb+IKWUd5dcEYwXIdYXJuQu84CnEtsnQDsIUCc5V
|
||||||
|
Qfk1E4SqEmc0gWsmTlsPKF51VdeDpbqQShGgt+xM65wCL7/JASnuEwr1Jt2pPRDq
|
||||||
|
VF9s4APQJi/neuJh1A6RlHU6PFcPXmqjsglMdbfKdc0dzoOcc4OcSFPdAlX935L8
|
||||||
|
Tlwrp2dy2ARNTSdCvbXx4Lj+Ru7tIUTjDqIFzRLBdppRU/NO6SpNMoIKkOwrjFYd
|
||||||
|
H8nV9z6+nYHfJNR/FfT8LLx7ac/trYwDYWMJhk/h9taOszZ5OpQM4LOrWwyg2HA8
|
||||||
|
80H95TcQ0c1/dp5OBfPSNfse75yBJrW0PwtQA3++38PHQQZVhO7J3Ha2Y9/MmLqU
|
||||||
|
Ip+rhd38hfkHlkrwCr7tABEBAAGJAjYEGAEIACAWIQQWg/vSP23TbA5SIjUH1493
|
||||||
|
fSwMJwUCXElYRgIbDAAKCRAH1493fSwMJ4GVD/9AS8YwflROUAodGe7jBHZ41oye
|
||||||
|
4I8AX8iTP1qxww8ydeCBVCz3n3lvEHHP8JfVB0aJwiezUtt/1uV0bTFt9ycxyJS1
|
||||||
|
5eIefOVN0wFEsj4pgQfBfSWxI0Yd97m+W1xg5h+aAN9W1MNH6rb1ktHCebW709Vf
|
||||||
|
Bs+NfktKww98M134cQlmJSo1pBQEBzKaE5KEvLAiafluAPTkvafZfe+35QQdJAXx
|
||||||
|
iLE/ZNJQ8L9lBYZaA5mM/NKNzeEqeSTwfvcIonY5sD2EsgBU/ux6QzjRV5EmteJr
|
||||||
|
eg+bCWJnbVvZY/2LVru8NKDgfhTSMN0ocDLaWKW6aQO36TequQNdD09wasdSpQmV
|
||||||
|
GoCydtdCVoetGdGm8SZvi6EUgAWH4eI3Su/19V8sVo3kHhJ1d575NJCFwTPvKAre
|
||||||
|
s8wgU+7CgTojnMxFmb68p+lLe1qQheyXaa44WQ7d7hmXPIoe3EgMYtMc7tLcKccE
|
||||||
|
upu7zWG7BNU97kpUw7nmHKalI/1fKEEAYQUmNm9mNVGKjLVNtuG8jw6Zq0vX1tP9
|
||||||
|
mh+T3SMBEnsdzoQ+E31lIDNYTZaEHxt0XupNdjt+uEfASdrD3+8+jlWVkpO3FlZ0
|
||||||
|
MhfLdHrk689ty11m+5HlrSU7O1I1wZkt/OlYsZmS1yIpD1hEnOuSjAuqm4D3s+YI
|
||||||
|
B4WM8AJSCwl8WlZrRA==
|
||||||
|
=wft0
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
pub rsa4096 2020-08-06 [SC]
|
||||||
|
94BD178077672157652826758E44A82497382298
|
||||||
|
uid [ 绝对 ] Shen Yi (CODE SIGNING KEY\) <shenyi@apache.org>
|
||||||
|
sig 3 8E44A82497382298 2020-08-06 Shen Yi (CODE SIGNING KEY\) <shenyi@apache.org>
|
||||||
|
sub rsa4096 2020-08-06 [E]
|
||||||
|
sig 8E44A82497382298 2020-08-06 Shen Yi (CODE SIGNING KEY\) <shenyi@apache.org>
|
||||||
|
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mQINBF8sDHUBEADScBNW9N9I7tu/ytMLp0XSQbyDO64iRsaAic/dnM4ffcZOl1AZ
|
||||||
|
fbKTF2jI5ABVIl6mWBx5t8RE5XluyESfnB0au3fa0N1cb9bzjAqPiiTU5l9vF4Np
|
||||||
|
u0517j8anqPYYk9n0HCVczaBQLavwa7ulUegnMCvO+WkrapkES3PzF/QDmHEh4iC
|
||||||
|
FnPsayrhYvirg7Gwy6gkfkSZvp2jQIt2O3PQmffW1OsxwCf0uNIf4UrXxZ9gi6hc
|
||||||
|
O/x1jNNpyfOBJY5es8feIsx+zQu/jZRL5AnLeuqYdODD/IdcT/AsSeFnMkIuYdKl
|
||||||
|
+S5DL23Rr5W47mCkRglauIOAFXnVd6cc3I0/TB+8+B1XOE7YBcslPytVmnc00Uwf
|
||||||
|
f09a1WF7gTufCQAizIRShHLqSXA8Gebs42g5CLEC7k4v1Yojmwun5UFDlbxERQgj
|
||||||
|
00hyDsGYv9Mwk5EokcpB/fyInRU0Niny6kk/siui/nvol0vcqBgwTqRJjfFByX8T
|
||||||
|
ck11j7f3mUFq4z/PsVU4pQQpGyuiKLDQm7IJPAsJC/+s7aHAuMS/j3lpitM8j26A
|
||||||
|
3x091RsxjfBrCusxb301rzw6F2g4bxTRueoPv9Ie8OW27uykqTgdnnCSjT5LQcN7
|
||||||
|
H3dRmfk4UMU+QJTDhIdCzHyMnSGBVmlbbHIMIaoxnqzXFpO1+iGRQs8QcwARAQAB
|
||||||
|
tC9TaGVuIFlpIChDT0RFIFNJR05JTkcgS0VZXCkgPHNoZW55aUBhcGFjaGUub3Jn
|
||||||
|
PokCTgQTAQgAOBYhBJS9F4B3ZyFXZSgmdY5EqCSXOCKYBQJfLAx1AhsDBQsJCAcC
|
||||||
|
BhUKCQgLAgQWAgMBAh4BAheAAAoJEI5EqCSXOCKYVkYP/1n0eL9d5EnDunqxo0dt
|
||||||
|
HlfxLSx4l+edORXF+q9p0s7x33AktUZxMMNEbeAAgfrtC8sXg8bMa/NWHvmWVND7
|
||||||
|
Qj8nJYVZ/jJSVwwXImsK6EdP8401UM1X3+z7uWy4KepJZQIVd6j8dxhW4QE74mlx
|
||||||
|
CLBm9dK5rgxTjcNIKApscBJ6pP2eZBprHNdDW3ttaIMGBfz+nA3IpvH7ADgEkffP
|
||||||
|
zc9BjiyCuff3q4qW1PnATJFEQCbBAxU13Y8S7pDRhHHDvuo/GNMAoKm8xWb9OzTz
|
||||||
|
u8KistljvZWD1ZBjYxAYIKDqVyyUeH/aN134QsQyra++FFHkTiyYjpn/roSQm3Ww
|
||||||
|
eQLXtRK0f12EpDb2pchxSrN3L4wRtzGj3I/u/7z6YXa8nuK29t8CDGTss4kBjDmQ
|
||||||
|
2uYNAxFq6EylZU6QzaqvQgv/nhSuJFGlSY3v/4Q1MxB5rn68s2jegi/HXUIbFerf
|
||||||
|
KgeJCN8nUtBiSIzVwMo0HMrrNyR4ZdCJa4bxzHspu6Fck4572AKxB3TNFkLYC0s+
|
||||||
|
zOQ6b6l0bMgzH4HDj6C0k0+KtikK6Q2U1YXWu1T4MBu8Gq4weGEUDOxc0B1XywA2
|
||||||
|
BE+cbOpjHi4lK3n1//RjUR+JL90RuD+JGCB8x2d+Ttm/c19S/KjQc8CsJ9JA5x1H
|
||||||
|
wlHqg7br0XQQrbUedY65S6skuQINBF8sDHUBEAC99I/csLsLcrpNXB2JYh8XmtBc
|
||||||
|
Vb6aSWCc7kowhdwuqjyXvHMkpy9RZz6hxEkk8XiZC+nrCcrr7DNNFNzh5gx30Ihm
|
||||||
|
NyZybaawr/vn5O2Oe0BSTwuhIdk1XjpzDtqpcNT2Qui4eRx/OBcyyX9PJvicBfMq
|
||||||
|
53ZNom/3NTZbsXp70uCV8eC97a7g7T+GymRS1u2x7I/Kp+/w0plG11bXnWg2A0EZ
|
||||||
|
WHCnmQWBUpqSUW3syfuzqlCFDYWoyVkw2eNtIbhGv9knEKPtU9bewAbo1/2Jk1R2
|
||||||
|
FVP5B3VvdY2huzQLzbzHB4zhsJCEjYnvzwPZ0WeIYHmTYJEAulTynBdv9GNX9sdM
|
||||||
|
GNXS/ESTFUQDMXbgDBdwVxZOq1Gzwh+grN3lwpS/5wcsSuNhfEfvx37DyLKNiXMo
|
||||||
|
5HS/g03kAmmIgH7IWUcM27ZyyKlpxj8ztFFUIdnIUX4biiZCBJnfMuWnNzJM7o/b
|
||||||
|
T8PVEEM3wuUT5ih7yT4l/j5pV4WmEbgVdWSrbL/H77GuFHwXYiuzDyH1/E23Hedi
|
||||||
|
crd8g47bV0jL1v0TwT4oHtEkAXIU5Nj2+z+ZKSl5SJ0I2tAy86hCpIn/rmbMmtws
|
||||||
|
Ce/OHHOu2Mm5KBEK9SyLThMzqYrv5Zux9Xqre+P0LPk/tzxwdG87qKhU0xdPvn6y
|
||||||
|
rGaC1OFCT3GmidZl2QARAQABiQI2BBgBCAAgFiEElL0XgHdnIVdlKCZ1jkSoJJc4
|
||||||
|
IpgFAl8sDHUCGwwACgkQjkSoJJc4IphtBw/8DsvdVbaaVqMOe/S66R3zn5M22YKU
|
||||||
|
AkhQvBQId4rTDUgTiSJ6Ll+Ascr1q2gFupb7iAM4BWAFQji4f8iH51sS9a6I6Oy8
|
||||||
|
WK4ftFYDyQU0/hgaF2B0+QE0PN3/88ckBlL3KHhzw0ad/Y2Bp6CGGFNwI9xqC7XT
|
||||||
|
t8Y+XCpv9buC7ZVpE/N/yF+2HvVhW7PG+5oB+Qc+Q/G0RK2QX7unOSqLc2pS/n4v
|
||||||
|
mBqGc1KAe7iyxOo2Q2G+Q0XTK8g/BUMWACVOuYpOrvteyHJXIYv/VDRu+/pd81G0
|
||||||
|
i6B063BzuaDRqwNngLOU6lNcDOgom6gWkCfkg1Nbr009rXyADIg/RHPX1TUAaoFn
|
||||||
|
QH0YDIxWfyDvTJ7FgmLVCnXXc88T1du/ROAq5Y+opD3vcDX+egzbKR+oSGbaf6HL
|
||||||
|
ASj0haconAOZ7V3sLO9WSITUODzHEUwOuOx+XtaW/JYTm47JeH2r83v+OmBNbAJg
|
||||||
|
hT5KINI8iBvor3cUYKAor9ib1192ZHgBjPlrFDMntZZCqKyCvRGRktts4VcH09DD
|
||||||
|
szVC2TEeuxgIMuUi73HebjX+fRefcSIkW30ehXVzN/7Ah1SK9IJc9hzVa2ZspUho
|
||||||
|
Ias/zRyLSbzHrpCs6KVPLwzOQbyPmXNpjoYuGCq6NX54S7bf8Hn3X8SQmezozLhN
|
||||||
|
krvOtK7UUytDTcY=
|
||||||
|
=+SBy
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
pub rsa4096 2022-03-02 [SC]
|
||||||
|
8ACA4FC874B6B0836DFE70BB52514D7E7CFC32B6
|
||||||
|
uid [ 绝对 ] Zhang Wenli (CODE SIGNING KEY) <ovilia@apache.org>
|
||||||
|
sig 3 52514D7E7CFC32B6 2022-03-02 Zhang Wenli (CODE SIGNING KEY) <ovilia@apache.org>
|
||||||
|
sub rsa4096 2022-03-02 [E]
|
||||||
|
sig 52514D7E7CFC32B6 2022-03-02 Zhang Wenli (CODE SIGNING KEY) <ovilia@apache.org>
|
||||||
|
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mQINBGIfP7kBEACe5lPqYdMuQsugMCFN8EdGAoFnytQJGHNIY6fBgIQv/CTTM6oM
|
||||||
|
JW5pLERfmlvXs3SDIpdZVQp1JmUjs0SpKV4pDBwJq+bMzxiD0QD+7sZb/zadHBOR
|
||||||
|
EfKFBij9lrrft/42FbsLrSA19FNalLniXp0NC8QBl+dLafy6ypPX7iSXCWvB/qiu
|
||||||
|
XPFY6yJGi4Jt1vVnTeTz9k17y2oJNRl6eh4CLxuTJwLb11Fuhwy8gC0JWMXd52OF
|
||||||
|
P6PcWWPWV5qA/UrtbnwQb0Z8+YiK/nDv5p0e2HOEB+Nnl9KdHIpDaP1dSE4hKkFK
|
||||||
|
UjWBXzMSBJAwNObMBDGtiWzeU1kIIkHguEUNbJXLHzIWvNrYbuCYOSsdA4o7QNFr
|
||||||
|
quy/Vt39+zu5R5znn1AgoUsCvfhMGKME5d2MDgKsyfh8LTHuqDkWZxj8zgMZxDrX
|
||||||
|
p/KZBy/bSjii8V1vgoDl0NuJZrXNHrEGQglLiV7RzQBRfkAI4u+3gd+8Emeny0Ku
|
||||||
|
GEXrB2dCj7OoDgR0TXmzZf4U8Stnhr4//Fgn76ca+9mOp6NeZpIvVIiJ0hK3QsUe
|
||||||
|
gllD0yEJ7fHGQIX//qfymo+rWdvT+WXz6/251eDb+C9TYosj0lpeW0h4URywarvc
|
||||||
|
Nqudz8UEVNe4hETtP7VpKjokEiNgj66T+WrbsBWjT1KWlkOhiVFO+FVV0wARAQAB
|
||||||
|
tDJaaGFuZyBXZW5saSAoQ09ERSBTSUdOSU5HIEtFWSkgPG92aWxpYUBhcGFjaGUu
|
||||||
|
b3JnPokCTgQTAQgAOBYhBIrKT8h0trCDbf5wu1JRTX58/DK2BQJiHz+5AhsDBQsJ
|
||||||
|
CAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEFJRTX58/DK2SccP+wZbwZIu4nI1zzlX
|
||||||
|
jljH7wLyvDT/hfEm/cBBvF+IgV/EYfMaNaphzsci1V0X8Dv4LmzsV8HS/pIscekM
|
||||||
|
mV9Ua8Lyty0QHdFdcMaZPF0irJ59NXfXVu+SDB5NTVaEPhQHclChdyVQEpbv444p
|
||||||
|
FwWtNc2JU7C33NtDnsoTECDKy22rP3E/4vti1OEKvaNPqJ7Cmed/fmjShEvoUl1U
|
||||||
|
k34fZlTzAZS8FQk3oIvVZq91B9FekywAOLMTo0QFQdgbHpk3Pu2BQ3xaIwEdTu5n
|
||||||
|
jypgx7ljK/1Siczo+VzH7uv5pGyVgeufI07OFOqoyC+gfAhXcZp8pBbVuRm5aO0O
|
||||||
|
oyzOLm8qQ9TxXt5XtdZzdbgZ8uMr8ualgTj1XOU3Q8AY/BCZ3i7qqZEPY2lO4O/e
|
||||||
|
spS2HGx158soggTH0m7EDx5jas5WS49pWxhZOAq4Z3hDSz3LFYTUOUgq1HJJS2b3
|
||||||
|
l11rRaDiuxShpIgr5LfxmbCLL+cGmxcPZGEsJBCszEwhPNRqR5AwvRO2OONGsTel
|
||||||
|
Y9PqJRT2+3KXgu/rvBnbAuIxaI8vIy1iP82rTxw8z8QK1qce6BIldho18yOVmCrC
|
||||||
|
wLMB+snpVnXyaDKvcNJI3KnfiRA9RyKz13XHsykH02nI0c3O0zFW5Ob+HNCnzlgg
|
||||||
|
vd1mG4jAwrTN+/fezrInfMu2YsQzuQINBGIfP7kBEADRINphJ2MWt8/FfacMhiVy
|
||||||
|
3a9DKkI/w0xt2OFZuTxK7xAuGeNCJGVrRf/qxM82xR7IApDyxLIZn/+DzYMoFzQs
|
||||||
|
r2XQR8sAy2/x8r42xUiSZUtfdztVN+QEu+qCgVYAY//qLZsrSfn0ezv51m/Dw2Q0
|
||||||
|
k3euzR4/dbulTnt28z4T1BDnDyEWU7vE0m4qyrrQe9DHmC0iIkg3RY7u6/0UK+Ar
|
||||||
|
W+IgLQZnZOwTc4GygFCMst8pWsfnLYpPGt3XSI5Om7OQ0Xf1nyLWBtmxJQRsbU5i
|
||||||
|
hDLfR0KTARC8cjReFL1eoe9OT6NXJiQltTvDnrpWXN/3tYFakgPf1JrEHkllgHOM
|
||||||
|
zM78/H7FgetIueTjem98Qju0/zvBxxd93kLrSkcLRP2QiD7cdIW9tqCrcKY7k06t
|
||||||
|
EG+oVdvQA+W7V5wDxQ+8YYp9l+9ftBZNTXa9q/5e7/qzl4cIY4EPpe3eTxj2K9uM
|
||||||
|
wsVtPPk48N819fSNDKXOEpqzTs12tniZC5NBsfB8ZduNmjDhcxRMJRA2RhQWRMG0
|
||||||
|
knEsVBFkepnhlg6PhWE1fz9Q/YbmVTni4hSN6YFSpw2da6zpHqStXooSzfEw+IvT
|
||||||
|
v4WUbHq9TA0zkPEdHn1s75blf8jO6s6XLGEZBKXM/PGO9QtjkYDOaePfpfoLgQEt
|
||||||
|
TGHJSTLcEUS/HQLiqVFPpQARAQABiQI2BBgBCAAgFiEEispPyHS2sINt/nC7UlFN
|
||||||
|
fnz8MrYFAmIfP7kCGwwACgkQUlFNfnz8MrY18w//QbqFYRLJLKoqfcZV55W2jtxX
|
||||||
|
N71+GvY1DWAQByvcV1h9aChpVXyNjKmNiwAdBDam9RYnArmFQauFyEZpHfOdoEc0
|
||||||
|
u+Wsllou/tomsqIMx5AuUpGyCrqPKFsKAuqA15/a6tbhEhDd5gIbSYRVlvNinKqm
|
||||||
|
JyuPvfbiKQxo28yV7NMIPpSg9gGSkZiEWTGVQR5603EFnkhrS6n8VZFCKQLlSl1X
|
||||||
|
VhyN2U/rjwRkDQUh6DSGMb6OHoeFCW00LqqiFoxtdBru9LYO5NYSbnZzicBsBnJ+
|
||||||
|
rEqX0yfyDaSzC21wTH3ARf88CruVYerEPMs6lMDLlHlsdZX9VPxofvA7PGcNiiiI
|
||||||
|
xkIfPsE1X5cdy7hnhdpPuWEsV4XoYEn1p3TpRdud2N6OZjZe/Jb6KaNmGbRnCl9L
|
||||||
|
Hiftq4uZ8hgIdRMa1FdeXug3dwVyPp6HLjqA7q1mi/f69ywNYT8e1g2YrI1MNEL8
|
||||||
|
TJqsONJX5Y5LRdUIdGfQ2KZOOlPqTb1ksdm9+xamLccUz3UCCqQS3GuufUjmLmoi
|
||||||
|
WQBNQpzlLXaZtFworBRRXTeq7TYK5lqYCU+d46D1pc4TmFoLlCwdr7kY/taa5pip
|
||||||
|
XmpgVv8kY1A+ONjCCk5kDNDWUZbYVEyvdihvUz765fpIoCFM2YfbB8J8fgInRfWB
|
||||||
|
RWnk0btbWIvaznWpIWo=
|
||||||
|
=QBYg
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
pub rsa4096 2022-03-28 [SC]
|
||||||
|
EFA5629C5F1FF8D33E016202F16C82C561221579
|
||||||
|
uid [ultimate] Zhongxiang Wang (CODE SIGNING KEY) <wangzx@apache.org>
|
||||||
|
sig 3 F16C82C561221579 2022-03-28 Zhongxiang Wang (CODE SIGNING KEY) <wangzx@apache.org>
|
||||||
|
sub rsa4096 2022-03-28 [E]
|
||||||
|
sig F16C82C561221579 2022-03-28 Zhongxiang Wang (CODE SIGNING KEY) <wangzx@apache.org>
|
||||||
|
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mQINBGJBdpIBEACtI4twpy36+vUMwpBQCgbpKzY+KtD95bcoMuy8IepzyQSq+Z2b
|
||||||
|
mPfjUIA4e9hSvuPCXMkDTZo3Vj2MskzxsFmS+1Or/y0pfsmx0pgzDQ5voD0ayQo3
|
||||||
|
EzDT2LbOOkCkPIpBVnQvh3LFk5/VIJCDqjHPyM6r5moWfmq9x7lfDwqhQrJryK9s
|
||||||
|
/7EGvgZT2AR7e5TMVgP021t2HH9xfyp/zF+oZVUPSXnmy9j6yiNyu3DjgHwLY+4O
|
||||||
|
RGUqhe+I8wq1l2nul0QW2BvLjouEXftf/Rx+X3k/TRVoWtH8RiJzkWZNjd8vyyDd
|
||||||
|
cOYo8MxLEJtGDhnrhpsGYM2cYwvGET2mpy1FeX/U/CWfTKUALNxZ4e7GacRi8UeM
|
||||||
|
YVp0ov22vskqYKxy0gTVHAoL/mfIcXuCxUw/s0sL01O/rP5lHwy6ghK4KZCTu/4d
|
||||||
|
YTfQo8R9NFaBWY9odN3kxJ9ehLPczogtYPU9ThIzbUJ5NudYjh+2NAXEbx9lbfRC
|
||||||
|
mR1DyihskYZ4j4FFOWqrke4flDW+lx7VgFb/Um9oQX1Bl7jKRgmlJIN+dNpJpi8w
|
||||||
|
9a2DR/gFwxulLvsQPm/Mcki6Xb/Igscq7AZBgUKAtzLMdJuYglp1EUyYhGL6ylIf
|
||||||
|
YivzUfNnd6Dvl52H/jLxnZemHy5wO7ZtmehSs3XcPLvM6azb+zCr6xne6QARAQAB
|
||||||
|
tDZaaG9uZ3hpYW5nIFdhbmcgKENPREUgU0lHTklORyBLRVkpIDx3YW5nenhAYXBh
|
||||||
|
Y2hlLm9yZz6JAk4EEwEIADgWIQTvpWKcXx/40z4BYgLxbILFYSIVeQUCYkF2kgIb
|
||||||
|
AwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDxbILFYSIVecLfD/9L/C5XBA5I
|
||||||
|
Ub6jS6ozqkupIKdIdLbcXsXNL7cLCrs67zCldHl0t5iaVZF1/rfbwEyjWRD0W6Yx
|
||||||
|
k4XPe2iOaOh4R0BBySptBKyK3tyMBOeGZxhtn5w5hZp9ikEbyq/TDK9XK8S+45Zs
|
||||||
|
AlfzQ/B0fmihSaMyGNOS2m3kxOMwEOZVegZtiNM+ZSd10/K8Zf5mfdA7EjHLHiow
|
||||||
|
WvFMV26gAnd4T7ZRGv7/ZmI0eWAxwdnDdlxE3JgpLfaLjbKWYVOPFxSyF749yFFL
|
||||||
|
oRNcTK1Advlwf3jloWhFQU+9i/bsp+VZ7bG3ptfQvq7Nnm+TkVHpHB4FaMnezrJL
|
||||||
|
5rKATGZapA9c5MLye0OGGfZAzfvbFsE4J7e1J6mgatjPbMoPjsYBHW5N89ZaBfbQ
|
||||||
|
napQuGx2HrBSIzmIaoQqUwdsMaC9cfNx8IdSsbK31maXyY4cooQnGbt4hrALEcti
|
||||||
|
DVZCty6NsTLruNk+kCIKLTgMdXYbvJTydNF8bGWppDaEUayRCyCUHf/UBhVhdLU6
|
||||||
|
/jyNF141xlNUV5yXDlMGANrZ+26Bu8vufEpkiABihjh/DGQZpdqY9zEDR5sQmae+
|
||||||
|
ij0CBG7SLtEFLY5bHsCxm5orSIil0eTAsNFkjn9JYvoil7WJNuV2TdWbSa+Fs+gM
|
||||||
|
UmLLR5oUA3EM1T1BV4TICUevcoSZxdKkIrkCDQRiQXaSARAA6Ci/4XEq5CApLoIJ
|
||||||
|
MO+HsmP1orppgqGY1hFM1saQ/1JkgOFjfXlGWNLSkymNpqapDIblHdeC8mXdZJSm
|
||||||
|
Qeto8i+wEJI+iKl8iYm/KSt/OpfnxfqmMcFhYRczTDFUdp4/cidxCf1TTjyub1PL
|
||||||
|
9Pu6TJ4pqJC4TJ1QYOGVZEsMk+Csg6n33sArmpD4YoZfCQy1unvweSr920A4Y5sJ
|
||||||
|
jNn6ntGUhguAeHe165yHv2fIWJb/ur+9Kl/SYdD17I+oGW9EZzyNU/lwXs4/siqD
|
||||||
|
nmTzdWQ+/NsfFAIJzVsEwp9687opNOXKlSpaLO8ACGx/nOMUnjfmG9tu4h3bkQtN
|
||||||
|
SAALDKRn12V3nB7nqbOdSy2QgyFETn5gO64ZuWD/TSk/3P8Bp8AwHdNDKer3GqH7
|
||||||
|
omA7VgKxbRhoeJMKWuihBRJ3y01u614QPgmheSzggGg+NVmwWbq5f8+nH20NVNjX
|
||||||
|
dTRACCR/0IjRv2ZitNc48X+lNqMMXQdk9K+EpcQhy4fHAnwqc4iij+moKBBp513n
|
||||||
|
mv7h+QWLVYjqOuA1yPLAUFxoYLBEQ1DoHTHCbJ3o6gHk8eiPgoIvtJIZNAc150aj
|
||||||
|
scwXmk6KxyZwB4cFtFpzRYMfefDRS2O6t9+lkz83dBT9VKWISoRhh3JXaeoIRkk6
|
||||||
|
/RvzPYzwGf3R5ouvwfaAXI4YOqEAEQEAAYkCNgQYAQgAIBYhBO+lYpxfH/jTPgFi
|
||||||
|
AvFsgsVhIhV5BQJiQXaSAhsMAAoJEPFsgsVhIhV5AUgQAJN537gtlvtWkj6jPFQR
|
||||||
|
hNuoCapc7XicBjtqSUlSg/vbWzPeayhSeX288shNJVmJTD5Wq2UfDuki6W6EEdBu
|
||||||
|
pZnPX8xqhBjvOCgei3vZZPqEMKqCxAnbV9CVFJzJZh+u5SLnbOlYVuNh6fp1uaSi
|
||||||
|
AcRDgyLaUYBYj14ge42aukQuzCWvdnMcn1fZdN84xnm/dXHTxrmphBJlTfVk2U0+
|
||||||
|
bvieQNtqp7V7f18peMEoCBTqNjmDxebaTiyqcqAAWXV0bnH9TVIsjCDdT8HfsHAH
|
||||||
|
8Pfn/Tw9WqhIRcvWA1Ld1wrMRHv7oOVzMsvvaBsxR4X4yhXBx2Nn2r/g0Rp5K+2R
|
||||||
|
o9QLwPCa0P874LVMmdxdoBSC8GMigoj7R1lBIjyaM5v5ylTu8RVmDSul7xIjb6ek
|
||||||
|
tWKjZ/ASFSnA+m5VMBF0Z9bA3v31KvsS4ZQtnXEcAIVrNFkBO9JZrwBPat0WVWx7
|
||||||
|
/VQeh7PEtvsQhlKRlWY6xVdLq+DD3p/mHqpIH+YWaqhOa6sde8teN8UpSyp6F13a
|
||||||
|
SVM1KUz1U6gH3WEu8aqOmJTVrHq5h3kBUrfiLpc3juBCjrAlY2iY3Fzi5VuBzbnT
|
||||||
|
oEg8NMD8Wao5YN22JG30anrmYadZaghIwBz6rEuHmbf5MwcKoK349LptfHV4fhuq
|
||||||
|
5B5E6LlMNPTCWmPzYtTm5qZK
|
||||||
|
=bbcU
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
pub ed25519 2022-12-01 [SC] [expires: 2024-11-30]
|
||||||
|
016736F5612A13D1FD04AA45CC593BC1F4F4EB7A
|
||||||
|
uid [ultimate] susiwen <susiwen8@gmail.com>
|
||||||
|
sig 3 CC593BC1F4F4EB7A 2022-12-01 susiwen <susiwen8@gmail.com>
|
||||||
|
sub cv25519 2022-12-01 [E] [expires: 2024-11-30]
|
||||||
|
sig CC593BC1F4F4EB7A 2022-12-01 susiwen <susiwen8@gmail.com>
|
||||||
|
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mDMEY4jDBhYJKwYBBAHaRw8BAQdAlpaQNA7ARfkPVj6EoYARkkGPdLgOmulCwScl
|
||||||
|
xGk3+8m0HHN1c2l3ZW4gPHN1c2l3ZW44QGdtYWlsLmNvbT6ImQQTFgoAQRYhBAFn
|
||||||
|
NvVhKhPR/QSqRcxZO8H09Ot6BQJjiMMGAhsDBQkDwmcABQsJCAcCAiICBhUKCQgL
|
||||||
|
AgQWAgMBAh4HAheAAAoJEMxZO8H09Ot6gcoBANBsCrZOwZtWCCQB2A6cy0or7q4c
|
||||||
|
GdyMJbP7zT5tdAAuAQDI7dy5/KE5tklZmEHJZevQLWezs6yKi+31QxcNFh6FA7g4
|
||||||
|
BGOIwwYSCisGAQQBl1UBBQEBB0A4z0jb/PpPRt/zILSBzl8XidMvvQAksexms4P4
|
||||||
|
D74EcQMBCAeIfgQYFgoAJhYhBAFnNvVhKhPR/QSqRcxZO8H09Ot6BQJjiMMGAhsM
|
||||||
|
BQkDwmcAAAoJEMxZO8H09Ot6hEABALEBaZSNzmx17PbubyiyvtaEISuzsv23RYwh
|
||||||
|
4NRHP4BkAP475WSjwMns2hSairvPXULqAcqQnjytov7CU1hbMLvgDpgzBGOMr5EW
|
||||||
|
CSsGAQQB2kcPAQEHQF85ZZTr9NstXxkToCrkVYwNuahidgRyv6S3zo2xTc6ZtC9z
|
||||||
|
dXNpd2VuIChDT0RFIFNJR05JTkcgS0VZKSA8c3VzaXdlbjhAZ21haWwuY29tPoiT
|
||||||
|
BBMWCgA7FiEEhBIjSy5LUgkGNSGQJZ0/SMJTSzwFAmOMr5ECGwMFCwkIBwICIgIG
|
||||||
|
FQoJCAsCBBYCAwECHgcCF4AACgkQJZ0/SMJTSzyNaAD+P35MI4r5nUDDg97QKYNY
|
||||||
|
m99MtUxTmcK/KGsrxYEZEDEA/jECGFvy/5WAhIRUTl4ExVsY3eBL/K2DaoTseW4a
|
||||||
|
eVEPuDgEY4yvkRIKKwYBBAGXVQEFAQEHQKNPmeMoqbHBVs5xn0c+Tz/bPW0rDDbw
|
||||||
|
Gt1pqdBMdmUvAwEIB4h4BBgWCgAgFiEEhBIjSy5LUgkGNSGQJZ0/SMJTSzwFAmOM
|
||||||
|
r5ECGwwACgkQJZ0/SMJTSzxTzQD+MTFHjt7z78fdTqbbRA6isxPV84cAFQsX4cRx
|
||||||
|
PRobcbkBAIwAkq+ddEycxZTdzaELpE08h/BLcScqbOl/ME1PTZ0H
|
||||||
|
=3Tm4
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
pub ed25519 2023-03-15 [SC] [有效至:2025-03-14]
|
||||||
|
9C8B166777DB15AD1CC0FFBF715559B9217D4E5A
|
||||||
|
uid [ 绝对 ] zakwu <123537200@qq.com>
|
||||||
|
sig 3 715559B9217D4E5A 2023-03-15 zakwu <123537200@qq.com>
|
||||||
|
sub cv25519 2023-03-15 [E] [有效至:2025-03-14]
|
||||||
|
sig 715559B9217D4E5A 2023-03-15 zakwu <123537200@qq.com>
|
||||||
|
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mDMEZBE+JRYJKwYBBAHaRw8BAQdA4US4FlrxvH2Ckj5NzIkeL5nd4NyDBrlpyERo
|
||||||
|
KvlXn/C0GHpha3d1IDwxMjM1MzcyMDBAcXEuY29tPoiZBBMWCgBBFiEEnIsWZ3fb
|
||||||
|
Fa0cwP+/cVVZuSF9TloFAmQRPiUCGwMFCQPCZwAFCwkIBwICIgIGFQoJCAsCBBYC
|
||||||
|
AwECHgcCF4AACgkQcVVZuSF9TloeGAD/RjarHn34jh1NtJGi6Z8wv/XWESxyNH6g
|
||||||
|
orBPlQ+yluEBAIinhY8j/XczJQUcj9cqpMB4m8R+/jEadbaBe9pQ3uAHuDgEZBE+
|
||||||
|
JRIKKwYBBAGXVQEFAQEHQPa8rnpAhbsWw0VsCbYo1J+VeZXT/piqPpdducN3Wyh2
|
||||||
|
AwEIB4h+BBgWCgAmFiEEnIsWZ3fbFa0cwP+/cVVZuSF9TloFAmQRPiUCGwwFCQPC
|
||||||
|
ZwAACgkQcVVZuSF9Tlrc4QD/ZDd7OjcT9ShdARjcGoQ0jt6rEqL6n10V6caG+77a
|
||||||
|
89wA/R+29UlbOXNAxcQHxph8WXUZhACDhKyNETgRsgHysZQJ
|
||||||
|
=/6bg
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
pub rsa4096 2024-01-31 [SC]
|
||||||
|
88AF48720040B150083A7D10932517D290673A7B
|
||||||
|
uid [ 绝对 ] Zhang Wenli <ovilia@apache.org>
|
||||||
|
sig 3 932517D290673A7B 2024-01-31 [自签名]
|
||||||
|
sub rsa4096 2024-01-31 [E]
|
||||||
|
sig 932517D290673A7B 2024-01-31 [自签名]
|
||||||
|
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mQINBGW5/b0BEADXtrbzMa25cgPBGA0Zta/gdAO2eW8KThwEr9rbxRMZnlh7PUN5
|
||||||
|
zxfUn0fbGpQ+GHY5PaMcK350L82Pvz1uTMJDR5frxW/BlTvf83c3YwtjkV+YPk3j
|
||||||
|
BN0XTe61EDB3ePc9OpXapoSCncobSeyiKVlpSwM+l9omzAWJZ1cKpGHOaVNLV+0c
|
||||||
|
xz3u4cSKG9t/dGFcsExmI9amVYYMv/Hudrj97aAv1lKBWscxo/x9mxNlbGfaIjhR
|
||||||
|
3S5BiwKyhSM0CC6pOEGp6HLm3F7dZO/3xF9dCVJEtHtlOchf8umMQMbPH6SSF1lA
|
||||||
|
MEDmejlE1MIeL+wVyQ3BbvdANwQ0SYBx1o3e3TUuXOIUz2rZahf4YCNmuB62UHXY
|
||||||
|
IbZ83vC3uRpypIzVsGLe4lSHPsG+fGisJHp8JNeDxAnLv8Sdn89XCp7rgX8KLg8K
|
||||||
|
Qk4KW0VmwjvxCbQIMssQzP6R5Pq6vOZHCm3Ghsuxx66uSxEG6tBunjjdPMr6oAaa
|
||||||
|
DwnJE7BmhC76A0fWQg39Y9nZLm9Zawc7pATz6JM0i5QT/0CLQooqlLAvplNocH4p
|
||||||
|
lVFnBugoXh6zXSKhl3MdU5w3EHfOXLNpqbfC9cHoGfJ1miUNkDFJ5ceCgukAlXuV
|
||||||
|
5h2pisvOhyK0IkAJJGSuh3Y4z5uFKNlptxz7XTq/VQZV92zAooJX8G1GZwARAQAB
|
||||||
|
tB9aaGFuZyBXZW5saSA8b3ZpbGlhQGFwYWNoZS5vcmc+iQJRBBMBCAA7FiEEiK9I
|
||||||
|
cgBAsVAIOn0QkyUX0pBnOnsFAmW5/b0CGwMFCwkIBwICIgIGFQoJCAsCBBYCAwEC
|
||||||
|
HgcCF4AACgkQkyUX0pBnOnt1ZQ/9HimWDMPJycmOeeiyR3/8rHIJuYz6bmYapyIV
|
||||||
|
G7j6gwsliFofaAR2sQ+Kn9by6D2VxMJ892YRvV0HEpvz6zEKOywbVPmWpyHXT8aQ
|
||||||
|
rZQvcrL4CcV8lVsFNiQG4kopEIQriq2NmLDvpO+PMnYgrY3tbpEqE3i+A6hbFH7w
|
||||||
|
Q3yCpy3MLesDs3pjRJ14EzKm8ecthABcKZxgBHPPjPoxLFtADRNkxX2MgOXygB0R
|
||||||
|
5DQKgiUauZv2Le1x+ER8ewspmOoQayIJxjAwDOmttMtFtgk4LO/vNJWyGwdlFmM0
|
||||||
|
zfH45Uyw4tj9eau+Noixt6KqHDi9IoiMXRPfBYVaUEfUVTqumOZaNDLd9aLJGZ7p
|
||||||
|
/+UjwhAOskN01t5aQrKNNeBCO42PVMjBviwSEwaNP3S05HYeQleu77c4pKA6XzHl
|
||||||
|
fRk7WkIWlPIPKhcHKc0EhfivZW6JE3h1pZKiumZjiAAJSOIWcwzWn44EmbbClOAM
|
||||||
|
u15CKTvFxzFj7pSwK5jKOX9NcqDc/umfQMCgZnhuUZibCPvvVpBYYcE1cvIYxtMr
|
||||||
|
tAKD5d4NMLeB7iT1cmXvCcBj0vyUpYt3B3xzfH0HYL7gZWQA7S2zb9M/lbq9R4MI
|
||||||
|
MbTzT7R1rOojY3soz70r0v6+XTExEuV9U6QkO5B43bTkjekIhbVNQS0TvEWfDP5u
|
||||||
|
4uUqJuK5Ag0EZbn9vQEQAPglK8p/LjDyi61xxoKniEriqqljQwFk1dHMfJDuIsZw
|
||||||
|
T3B21QlY6sfSXk5cKu3sFRb6fSn21isYnSzkJRrhMSVEFoFd8+Fu7ZaLfZDuO6n4
|
||||||
|
F6i5Ely0j8G7zkU7+pQPKE9fpdvHvdrJ3SFRqZFALuwgxkMm9JnnvhCAQizKItZ8
|
||||||
|
lj6mMJjV/Xe29jBlRXrwY/XTUvJOwrWqicAbeHkY3aDsEGpyB9CKTJWeFRJ9QHVw
|
||||||
|
8azhK23lmvoDisiK2fsByp0xqLsolVNV+/k7cgrXZ1Gs1eiBI5bi9ai7tHuaknOb
|
||||||
|
BE8EJh9CSBRFnMMhrAb9diaZOQ4ir4kjo0LCs0jOiH6BxlafQpQZW+rDgpYVutaJ
|
||||||
|
QOX3daPju3YQIDKTRGHO37ojFPYzxf0i8zkGBAJuRHcaIKynI0KVExwu91JkFRLR
|
||||||
|
uhcPIFF8NH8cajaHSxJlQyQPSBGubm7AsKjUUYWXBrH5rtiz7ReYFty+cz3fa8Rm
|
||||||
|
aodqqB6ns37rwUD+lZFd3m+Wew9/TDOLP2TFyJctjNIYFGMf9/NYB9+X9fAAZtbl
|
||||||
|
QdRiS31V+gyW8LIkS2qypJlyQLNicydvKYl7wnas9lEaHDSQjgdg/+spmRkZuOVg
|
||||||
|
+WwiVlEwkCH9SbYi1NXzHzOtAwdrZm2VKx/X+woMRuS1V6DHGTQVi+aScuE+SzF/
|
||||||
|
ABEBAAGJAjYEGAEIACAWIQSIr0hyAECxUAg6fRCTJRfSkGc6ewUCZbn9vQIbDAAK
|
||||||
|
CRCTJRfSkGc6e8DYEADEy60L3nfr0odeh04Q2Yev2xPV9TxM+7nfx+ECKUQoJSf3
|
||||||
|
m5k09AfIT17eHy/+oIFLSp97XIgt1eL9pCAsn2G6XvbAztUzgcQJZRb+fHcqRNZ7
|
||||||
|
fiM0puAkYcq/aKMMNwuL7T6AYDak+bsS0vh1/7woZBEpIS1Ulmu5hH/9ypLhRZ/7
|
||||||
|
EwOftAqiPz71ahTfUkrL5V4Ddt2nI4/zfFLpnUaiRokljcdLUCqtearvNUdGQbZ9
|
||||||
|
J8AHX0FYYhqcHSKnJDqkfOkhrZiTuo3gMP4nx2429ZC9s5igPZ10Aqd1IY3MrmiT
|
||||||
|
0Bv4BmbaiYaUss4IU8rNavrj+mueCFg81YaekxgMOsRRVFxCKPKba0lr55iaPygh
|
||||||
|
61FtYQxTasEM/4Sm/rF3rmZpktdCv0bRkVOvZ/8+VpHDdhjg6pmzQVNwp9K2xBg0
|
||||||
|
TI6kmvnT5NfjOm6xOlg0dYbDr+PiLITlSigZ3BF2qJcmJGpJejuX0PRzWPiAWkoI
|
||||||
|
NW6bo6qDdThmCNuS/FUk/1qyXWebuqTVvxbROomoopak37U5IwZZQ6HMtpHZGz+d
|
||||||
|
NcCJmTlyNY+xezQj414blwdPgUq4IASLZrCjD9yuO0tUhsNjgHX+R9x7O2Q86ZeN
|
||||||
|
WOQhgLPyfZrMnGjpjo/2v62Cp7yFZSNo+xtvErtMeaDL/ufAIFbaVkyxwvkW6g==
|
||||||
|
=YTwy
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
|
@ -0,0 +1,222 @@
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
========================================================================
|
||||||
|
Apache ECharts Subcomponents:
|
||||||
|
|
||||||
|
The Apache ECharts project contains subcomponents with separate copyright
|
||||||
|
notices and license terms. Your use of the source code for these
|
||||||
|
subcomponents is also subject to the terms and conditions of the following
|
||||||
|
licenses.
|
||||||
|
|
||||||
|
BSD 3-Clause (d3.js):
|
||||||
|
The following files embed [d3.js](https://github.com/d3/d3) BSD 3-Clause:
|
||||||
|
`/src/chart/treemap/treemapLayout.ts`,
|
||||||
|
`/src/chart/tree/layoutHelper.ts`,
|
||||||
|
`/src/chart/graph/forceHelper.ts`,
|
||||||
|
`/src/util/number.ts`
|
||||||
|
See `/licenses/LICENSE-d3` for details of the license.
|
|
@ -0,0 +1,5 @@
|
||||||
|
Apache ECharts
|
||||||
|
Copyright 2017-2024 The Apache Software Foundation
|
||||||
|
|
||||||
|
This product includes software developed at
|
||||||
|
The Apache Software Foundation (https://www.apache.org/).
|
|
@ -0,0 +1,98 @@
|
||||||
|
# Apache ECharts
|
||||||
|
|
||||||
|
<a href="https://echarts.apache.org/">
|
||||||
|
<img style="vertical-align: top;" src="./asset/logo.png?raw=true" alt="logo" height="50px">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
Apache ECharts is a free, powerful charting and visualization library offering easy ways to add intuitive, interactive, and highly customizable charts to your commercial products. It is written in pure JavaScript and based on <a href="https://github.com/ecomfe/zrender">zrender</a>, which is a whole new lightweight canvas library.
|
||||||
|
|
||||||
|
**[中文官网](https://echarts.apache.org/zh/index.html)** | **[ENGLISH HOMEPAGE](https://echarts.apache.org/en/index.html)**
|
||||||
|
|
||||||
|
[](https://github.com/apache/echarts/blob/master/LICENSE) [](https://www.npmjs.com/package/echarts) [](https://www.npmjs.com/package/echarts) [](https://github.com/apache/echarts/graphs/contributors)
|
||||||
|
|
||||||
|
[](https://github.com/apache/echarts/actions/workflows/ci.yml)
|
||||||
|
|
||||||
|
## Get Apache ECharts
|
||||||
|
|
||||||
|
You may choose one of the following methods:
|
||||||
|
|
||||||
|
+ Download from the [official website](https://echarts.apache.org/download.html)
|
||||||
|
+ `npm install echarts --save`
|
||||||
|
+ CDN: [jsDelivr CDN](https://www.jsdelivr.com/package/npm/echarts?path=dist)
|
||||||
|
|
||||||
|
## Docs
|
||||||
|
|
||||||
|
+ [Get Started](https://echarts.apache.org/handbook)
|
||||||
|
+ [API](https://echarts.apache.org/api.html)
|
||||||
|
+ [Option Manual](https://echarts.apache.org/option.html)
|
||||||
|
+ [Examples](https://echarts.apache.org/examples)
|
||||||
|
|
||||||
|
## Get Help
|
||||||
|
|
||||||
|
+ [GitHub Issues](https://github.com/apache/echarts/issues) for bug report and feature requests
|
||||||
|
+ Email [dev@echarts.apache.org](mailto:dev@echarts.apache.org) for general questions
|
||||||
|
+ Subscribe to the [mailing list](https://echarts.apache.org/maillist.html) to get updated with the project
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
Build echarts source code:
|
||||||
|
|
||||||
|
Execute the instructions in the root directory of the echarts:
|
||||||
|
([Node.js](https://nodejs.org) is required)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# Install the dependencies from NPM:
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# Rebuild source code immediately in watch mode when changing the source code.
|
||||||
|
# It opens the `./test` directory, and you may open `-cases.html` to get the list
|
||||||
|
# of all test cases.
|
||||||
|
# If you wish to create a test case, run `npm run mktest:help` to learn more.
|
||||||
|
npm run dev
|
||||||
|
|
||||||
|
# Check the correctness of TypeScript code.
|
||||||
|
npm run checktype
|
||||||
|
|
||||||
|
# If intending to build and get all types of the "production" files:
|
||||||
|
npm run release
|
||||||
|
```
|
||||||
|
|
||||||
|
Then the "production" files are generated in the `dist` directory.
|
||||||
|
|
||||||
|
## Contribution
|
||||||
|
|
||||||
|
Please refer to the [contributing](https://github.com/apache/echarts/blob/master/CONTRIBUTING.md) document if you wish to debug locally or make pull requests.
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
### Awesome ECharts
|
||||||
|
|
||||||
|
[https://github.com/ecomfe/awesome-echarts](https://github.com/ecomfe/awesome-echarts)
|
||||||
|
|
||||||
|
### Extensions
|
||||||
|
|
||||||
|
+ [ECharts GL](https://github.com/ecomfe/echarts-gl) An extension pack of ECharts, which provides 3D plots, globe visualization, and WebGL acceleration.
|
||||||
|
|
||||||
|
+ [Liquidfill 水球图](https://github.com/ecomfe/echarts-liquidfill)
|
||||||
|
|
||||||
|
+ [Wordcloud 字符云](https://github.com/ecomfe/echarts-wordcloud)
|
||||||
|
|
||||||
|
+ [Extension for Baidu Map 百度地图扩展](https://github.com/apache/echarts/tree/master/extension-src/bmap) An extension provides a wrapper of Baidu Map Service SDK.
|
||||||
|
|
||||||
|
+ [vue-echarts](https://github.com/ecomfe/vue-echarts) ECharts component for Vue.js
|
||||||
|
|
||||||
|
+ [echarts-stat](https://github.com/ecomfe/echarts-stat) Statistics tool for ECharts
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
ECharts is available under the Apache License V2.
|
||||||
|
|
||||||
|
## Code of Conduct
|
||||||
|
|
||||||
|
Please refer to [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html).
|
||||||
|
|
||||||
|
## Paper
|
||||||
|
|
||||||
|
Deqing Li, Honghui Mei, Yi Shen, Shuang Su, Wenli Zhang, Junting Wang, Ming Zu, Wei Chen.
|
||||||
|
[ECharts: A Declarative Framework for Rapid Construction of Web-based Visualization](https://www.sciencedirect.com/science/article/pii/S2468502X18300068).
|
||||||
|
Visual Informatics, 2018.
|
Binary file not shown.
After Width: | Height: | Size: 7.2 KiB |
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export * from './types/dist/charts';
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// In somehow. If we export like
|
||||||
|
// export * as LineChart './chart/line/install'
|
||||||
|
// The exported code will be transformed to
|
||||||
|
// import * as LineChart_1 './chart/line/install'; export {LineChart_1 as LineChart};
|
||||||
|
// Treeshaking in webpack will not work even if we configured sideEffects to false in package.json
|
||||||
|
|
||||||
|
export * from './lib/export/charts.js';
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export * from './types/dist/components';
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export * from './lib/export/components.js';
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export * from './types/dist/core';
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export * from './lib/export/core.js';
|
|
@ -0,0 +1,235 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
// @ts-nocheck
|
||||||
|
/* global BMap */
|
||||||
|
import { util as zrUtil, graphic, matrix } from 'echarts';
|
||||||
|
function BMapCoordSys(bmap, api) {
|
||||||
|
this._bmap = bmap;
|
||||||
|
this.dimensions = ['lng', 'lat'];
|
||||||
|
this._mapOffset = [0, 0];
|
||||||
|
this._api = api;
|
||||||
|
this._projection = new BMap.MercatorProjection();
|
||||||
|
}
|
||||||
|
BMapCoordSys.prototype.type = 'bmap';
|
||||||
|
BMapCoordSys.prototype.dimensions = ['lng', 'lat'];
|
||||||
|
BMapCoordSys.prototype.setZoom = function (zoom) {
|
||||||
|
this._zoom = zoom;
|
||||||
|
};
|
||||||
|
BMapCoordSys.prototype.setCenter = function (center) {
|
||||||
|
this._center = this._projection.lngLatToPoint(new BMap.Point(center[0], center[1]));
|
||||||
|
};
|
||||||
|
BMapCoordSys.prototype.setMapOffset = function (mapOffset) {
|
||||||
|
this._mapOffset = mapOffset;
|
||||||
|
};
|
||||||
|
BMapCoordSys.prototype.getBMap = function () {
|
||||||
|
return this._bmap;
|
||||||
|
};
|
||||||
|
BMapCoordSys.prototype.dataToPoint = function (data) {
|
||||||
|
var point = new BMap.Point(data[0], data[1]);
|
||||||
|
// TODO mercator projection is toooooooo slow
|
||||||
|
// let mercatorPoint = this._projection.lngLatToPoint(point);
|
||||||
|
// let width = this._api.getZr().getWidth();
|
||||||
|
// let height = this._api.getZr().getHeight();
|
||||||
|
// let divider = Math.pow(2, 18 - 10);
|
||||||
|
// return [
|
||||||
|
// Math.round((mercatorPoint.x - this._center.x) / divider + width / 2),
|
||||||
|
// Math.round((this._center.y - mercatorPoint.y) / divider + height / 2)
|
||||||
|
// ];
|
||||||
|
var px = this._bmap.pointToOverlayPixel(point);
|
||||||
|
var mapOffset = this._mapOffset;
|
||||||
|
return [px.x - mapOffset[0], px.y - mapOffset[1]];
|
||||||
|
};
|
||||||
|
BMapCoordSys.prototype.pointToData = function (pt) {
|
||||||
|
var mapOffset = this._mapOffset;
|
||||||
|
pt = this._bmap.overlayPixelToPoint({
|
||||||
|
x: pt[0] + mapOffset[0],
|
||||||
|
y: pt[1] + mapOffset[1]
|
||||||
|
});
|
||||||
|
return [pt.lng, pt.lat];
|
||||||
|
};
|
||||||
|
BMapCoordSys.prototype.getViewRect = function () {
|
||||||
|
var api = this._api;
|
||||||
|
return new graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight());
|
||||||
|
};
|
||||||
|
BMapCoordSys.prototype.getRoamTransform = function () {
|
||||||
|
return matrix.create();
|
||||||
|
};
|
||||||
|
BMapCoordSys.prototype.prepareCustoms = function () {
|
||||||
|
var rect = this.getViewRect();
|
||||||
|
return {
|
||||||
|
coordSys: {
|
||||||
|
// The name exposed to user is always 'cartesian2d' but not 'grid'.
|
||||||
|
type: 'bmap',
|
||||||
|
x: rect.x,
|
||||||
|
y: rect.y,
|
||||||
|
width: rect.width,
|
||||||
|
height: rect.height
|
||||||
|
},
|
||||||
|
api: {
|
||||||
|
coord: zrUtil.bind(this.dataToPoint, this),
|
||||||
|
size: zrUtil.bind(dataToCoordSize, this)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
BMapCoordSys.prototype.convertToPixel = function (ecModel, finder, value) {
|
||||||
|
// here we ignore finder as only one bmap component is allowed
|
||||||
|
return this.dataToPoint(value);
|
||||||
|
};
|
||||||
|
BMapCoordSys.prototype.convertFromPixel = function (ecModel, finder, value) {
|
||||||
|
return this.pointToData(value);
|
||||||
|
};
|
||||||
|
function dataToCoordSize(dataSize, dataItem) {
|
||||||
|
dataItem = dataItem || [0, 0];
|
||||||
|
return zrUtil.map([0, 1], function (dimIdx) {
|
||||||
|
var val = dataItem[dimIdx];
|
||||||
|
var halfSize = dataSize[dimIdx] / 2;
|
||||||
|
var p1 = [];
|
||||||
|
var p2 = [];
|
||||||
|
p1[dimIdx] = val - halfSize;
|
||||||
|
p2[dimIdx] = val + halfSize;
|
||||||
|
p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];
|
||||||
|
return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);
|
||||||
|
}, this);
|
||||||
|
}
|
||||||
|
var Overlay;
|
||||||
|
// For deciding which dimensions to use when creating list data
|
||||||
|
BMapCoordSys.dimensions = BMapCoordSys.prototype.dimensions;
|
||||||
|
function createOverlayCtor() {
|
||||||
|
function Overlay(root) {
|
||||||
|
this._root = root;
|
||||||
|
}
|
||||||
|
Overlay.prototype = new BMap.Overlay();
|
||||||
|
/**
|
||||||
|
* 初始化
|
||||||
|
*
|
||||||
|
* @param {BMap.Map} map
|
||||||
|
* @override
|
||||||
|
*/
|
||||||
|
Overlay.prototype.initialize = function (map) {
|
||||||
|
map.getPanes().labelPane.appendChild(this._root);
|
||||||
|
return this._root;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* @override
|
||||||
|
*/
|
||||||
|
Overlay.prototype.draw = function () {};
|
||||||
|
return Overlay;
|
||||||
|
}
|
||||||
|
BMapCoordSys.create = function (ecModel, api) {
|
||||||
|
var bmapCoordSys;
|
||||||
|
var root = api.getDom();
|
||||||
|
// TODO Dispose
|
||||||
|
ecModel.eachComponent('bmap', function (bmapModel) {
|
||||||
|
var painter = api.getZr().painter;
|
||||||
|
var viewportRoot = painter.getViewportRoot();
|
||||||
|
if (typeof BMap === 'undefined') {
|
||||||
|
throw new Error('BMap api is not loaded');
|
||||||
|
}
|
||||||
|
Overlay = Overlay || createOverlayCtor();
|
||||||
|
if (bmapCoordSys) {
|
||||||
|
throw new Error('Only one bmap component can exist');
|
||||||
|
}
|
||||||
|
var bmap;
|
||||||
|
if (!bmapModel.__bmap) {
|
||||||
|
// Not support IE8
|
||||||
|
var bmapRoot = root.querySelector('.ec-extension-bmap');
|
||||||
|
if (bmapRoot) {
|
||||||
|
// Reset viewport left and top, which will be changed
|
||||||
|
// in moving handler in BMapView
|
||||||
|
viewportRoot.style.left = '0px';
|
||||||
|
viewportRoot.style.top = '0px';
|
||||||
|
root.removeChild(bmapRoot);
|
||||||
|
}
|
||||||
|
bmapRoot = document.createElement('div');
|
||||||
|
bmapRoot.className = 'ec-extension-bmap';
|
||||||
|
// fix #13424
|
||||||
|
bmapRoot.style.cssText = 'position:absolute;width:100%;height:100%';
|
||||||
|
root.appendChild(bmapRoot);
|
||||||
|
// initializes bmap
|
||||||
|
var mapOptions = bmapModel.get('mapOptions');
|
||||||
|
if (mapOptions) {
|
||||||
|
mapOptions = zrUtil.clone(mapOptions);
|
||||||
|
// Not support `mapType`, use `bmap.setMapType(MapType)` instead.
|
||||||
|
delete mapOptions.mapType;
|
||||||
|
}
|
||||||
|
bmap = bmapModel.__bmap = new BMap.Map(bmapRoot, mapOptions);
|
||||||
|
var overlay = new Overlay(viewportRoot);
|
||||||
|
bmap.addOverlay(overlay);
|
||||||
|
// Override
|
||||||
|
painter.getViewportRootOffset = function () {
|
||||||
|
return {
|
||||||
|
offsetLeft: 0,
|
||||||
|
offsetTop: 0
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
bmap = bmapModel.__bmap;
|
||||||
|
// Set bmap options
|
||||||
|
// centerAndZoom before layout and render
|
||||||
|
var center = bmapModel.get('center');
|
||||||
|
var zoom = bmapModel.get('zoom');
|
||||||
|
if (center && zoom) {
|
||||||
|
var bmapCenter = bmap.getCenter();
|
||||||
|
var bmapZoom = bmap.getZoom();
|
||||||
|
var centerOrZoomChanged = bmapModel.centerOrZoomChanged([bmapCenter.lng, bmapCenter.lat], bmapZoom);
|
||||||
|
if (centerOrZoomChanged) {
|
||||||
|
var pt = new BMap.Point(center[0], center[1]);
|
||||||
|
bmap.centerAndZoom(pt, zoom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bmapCoordSys = new BMapCoordSys(bmap, api);
|
||||||
|
bmapCoordSys.setMapOffset(bmapModel.__mapOffset || [0, 0]);
|
||||||
|
bmapCoordSys.setZoom(zoom);
|
||||||
|
bmapCoordSys.setCenter(center);
|
||||||
|
bmapModel.coordinateSystem = bmapCoordSys;
|
||||||
|
});
|
||||||
|
ecModel.eachSeries(function (seriesModel) {
|
||||||
|
if (seriesModel.get('coordinateSystem') === 'bmap') {
|
||||||
|
seriesModel.coordinateSystem = bmapCoordSys;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// return created coordinate systems
|
||||||
|
return bmapCoordSys && [bmapCoordSys];
|
||||||
|
};
|
||||||
|
export default BMapCoordSys;
|
|
@ -0,0 +1,74 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
// @ts-nocheck
|
||||||
|
import * as echarts from 'echarts';
|
||||||
|
function v2Equal(a, b) {
|
||||||
|
return a && b && a[0] === b[0] && a[1] === b[1];
|
||||||
|
}
|
||||||
|
export default echarts.extendComponentModel({
|
||||||
|
type: 'bmap',
|
||||||
|
getBMap: function () {
|
||||||
|
// __bmap is injected when creating BMapCoordSys
|
||||||
|
return this.__bmap;
|
||||||
|
},
|
||||||
|
setCenterAndZoom: function (center, zoom) {
|
||||||
|
this.option.center = center;
|
||||||
|
this.option.zoom = zoom;
|
||||||
|
},
|
||||||
|
centerOrZoomChanged: function (center, zoom) {
|
||||||
|
var option = this.option;
|
||||||
|
return !(v2Equal(center, option.center) && zoom === option.zoom);
|
||||||
|
},
|
||||||
|
defaultOption: {
|
||||||
|
center: [104.114129, 37.550339],
|
||||||
|
zoom: 5,
|
||||||
|
// 2.0 https://lbsyun.baidu.com/custom/index.htm
|
||||||
|
mapStyle: {},
|
||||||
|
// 3.0 https://lbsyun.baidu.com/index.php?title=open/custom
|
||||||
|
mapStyleV2: {},
|
||||||
|
// See https://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html#a0b1
|
||||||
|
mapOptions: {},
|
||||||
|
roam: false
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,146 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
// @ts-nocheck
|
||||||
|
import * as echarts from 'echarts';
|
||||||
|
function isEmptyObject(obj) {
|
||||||
|
for (var key in obj) {
|
||||||
|
if (obj.hasOwnProperty(key)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
export default echarts.extendComponentView({
|
||||||
|
type: 'bmap',
|
||||||
|
render: function (bMapModel, ecModel, api) {
|
||||||
|
var rendering = true;
|
||||||
|
var bmap = bMapModel.getBMap();
|
||||||
|
var viewportRoot = api.getZr().painter.getViewportRoot();
|
||||||
|
var coordSys = bMapModel.coordinateSystem;
|
||||||
|
var moveHandler = function (type, target) {
|
||||||
|
if (rendering) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var offsetEl = viewportRoot.parentNode.parentNode.parentNode;
|
||||||
|
var mapOffset = [-parseInt(offsetEl.style.left, 10) || 0, -parseInt(offsetEl.style.top, 10) || 0];
|
||||||
|
// only update style when map offset changed
|
||||||
|
var viewportRootStyle = viewportRoot.style;
|
||||||
|
var offsetLeft = mapOffset[0] + 'px';
|
||||||
|
var offsetTop = mapOffset[1] + 'px';
|
||||||
|
if (viewportRootStyle.left !== offsetLeft) {
|
||||||
|
viewportRootStyle.left = offsetLeft;
|
||||||
|
}
|
||||||
|
if (viewportRootStyle.top !== offsetTop) {
|
||||||
|
viewportRootStyle.top = offsetTop;
|
||||||
|
}
|
||||||
|
coordSys.setMapOffset(mapOffset);
|
||||||
|
bMapModel.__mapOffset = mapOffset;
|
||||||
|
api.dispatchAction({
|
||||||
|
type: 'bmapRoam',
|
||||||
|
animation: {
|
||||||
|
duration: 0
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
function zoomEndHandler() {
|
||||||
|
if (rendering) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
api.dispatchAction({
|
||||||
|
type: 'bmapRoam',
|
||||||
|
animation: {
|
||||||
|
duration: 0
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
bmap.removeEventListener('moving', this._oldMoveHandler);
|
||||||
|
bmap.removeEventListener('moveend', this._oldMoveHandler);
|
||||||
|
bmap.removeEventListener('zoomend', this._oldZoomEndHandler);
|
||||||
|
bmap.addEventListener('moving', moveHandler);
|
||||||
|
bmap.addEventListener('moveend', moveHandler);
|
||||||
|
bmap.addEventListener('zoomend', zoomEndHandler);
|
||||||
|
this._oldMoveHandler = moveHandler;
|
||||||
|
this._oldZoomEndHandler = zoomEndHandler;
|
||||||
|
var roam = bMapModel.get('roam');
|
||||||
|
if (roam && roam !== 'scale') {
|
||||||
|
bmap.enableDragging();
|
||||||
|
} else {
|
||||||
|
bmap.disableDragging();
|
||||||
|
}
|
||||||
|
if (roam && roam !== 'move') {
|
||||||
|
bmap.enableScrollWheelZoom();
|
||||||
|
bmap.enableDoubleClickZoom();
|
||||||
|
bmap.enablePinchToZoom();
|
||||||
|
} else {
|
||||||
|
bmap.disableScrollWheelZoom();
|
||||||
|
bmap.disableDoubleClickZoom();
|
||||||
|
bmap.disablePinchToZoom();
|
||||||
|
}
|
||||||
|
/* map 2.0 */
|
||||||
|
var originalStyle = bMapModel.__mapStyle;
|
||||||
|
var newMapStyle = bMapModel.get('mapStyle') || {};
|
||||||
|
// FIXME, Not use JSON methods
|
||||||
|
var mapStyleStr = JSON.stringify(newMapStyle);
|
||||||
|
if (JSON.stringify(originalStyle) !== mapStyleStr) {
|
||||||
|
// FIXME May have blank tile when dragging if setMapStyle
|
||||||
|
if (!isEmptyObject(newMapStyle)) {
|
||||||
|
bmap.setMapStyle(echarts.util.clone(newMapStyle));
|
||||||
|
}
|
||||||
|
bMapModel.__mapStyle = JSON.parse(mapStyleStr);
|
||||||
|
}
|
||||||
|
/* map 3.0 */
|
||||||
|
var originalStyle2 = bMapModel.__mapStyle2;
|
||||||
|
var newMapStyle2 = bMapModel.get('mapStyleV2') || {};
|
||||||
|
// FIXME, Not use JSON methods
|
||||||
|
var mapStyleStr2 = JSON.stringify(newMapStyle2);
|
||||||
|
if (JSON.stringify(originalStyle2) !== mapStyleStr2) {
|
||||||
|
// FIXME May have blank tile when dragging if setMapStyle
|
||||||
|
if (!isEmptyObject(newMapStyle2)) {
|
||||||
|
bmap.setMapStyleV2(echarts.util.clone(newMapStyle2));
|
||||||
|
}
|
||||||
|
bMapModel.__mapStyle2 = JSON.parse(mapStyleStr2);
|
||||||
|
}
|
||||||
|
rendering = false;
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,65 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
// @ts-nocheck
|
||||||
|
/**
|
||||||
|
* BMap component extension
|
||||||
|
*/
|
||||||
|
import * as echarts from 'echarts';
|
||||||
|
import BMapCoordSys from './BMapCoordSys.js';
|
||||||
|
import './BMapModel.js';
|
||||||
|
import './BMapView.js';
|
||||||
|
echarts.registerCoordinateSystem('bmap', BMapCoordSys);
|
||||||
|
// Action
|
||||||
|
echarts.registerAction({
|
||||||
|
type: 'bmapRoam',
|
||||||
|
event: 'bmapRoam',
|
||||||
|
update: 'updateLayout'
|
||||||
|
}, function (payload, ecModel) {
|
||||||
|
ecModel.eachComponent('bmap', function (bMapModel) {
|
||||||
|
var bmap = bMapModel.getBMap();
|
||||||
|
var center = bmap.getCenter();
|
||||||
|
bMapModel.setCenterAndZoom([center.lng, center.lat], bmap.getZoom());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
export var version = '1.0.0';
|
|
@ -0,0 +1,203 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
// @ts-nocheck
|
||||||
|
/**
|
||||||
|
* This is a parse of GEXF.
|
||||||
|
*
|
||||||
|
* The spec of GEXF:
|
||||||
|
* https://gephi.org/gexf/1.2draft/gexf-12draft-primer.pdf
|
||||||
|
*/
|
||||||
|
import * as zrUtil from 'zrender/lib/core/util.js';
|
||||||
|
export function parse(xml) {
|
||||||
|
var doc;
|
||||||
|
if (typeof xml === 'string') {
|
||||||
|
var parser = new DOMParser();
|
||||||
|
doc = parser.parseFromString(xml, 'text/xml');
|
||||||
|
} else {
|
||||||
|
doc = xml;
|
||||||
|
}
|
||||||
|
if (!doc || doc.getElementsByTagName('parsererror').length) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var gexfRoot = getChildByTagName(doc, 'gexf');
|
||||||
|
if (!gexfRoot) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var graphRoot = getChildByTagName(gexfRoot, 'graph');
|
||||||
|
var attributes = parseAttributes(getChildByTagName(graphRoot, 'attributes'));
|
||||||
|
var attributesMap = {};
|
||||||
|
for (var i = 0; i < attributes.length; i++) {
|
||||||
|
attributesMap[attributes[i].id] = attributes[i];
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
nodes: parseNodes(getChildByTagName(graphRoot, 'nodes'), attributesMap),
|
||||||
|
links: parseEdges(getChildByTagName(graphRoot, 'edges'))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function parseAttributes(parent) {
|
||||||
|
return parent ? zrUtil.map(getChildrenByTagName(parent, 'attribute'), function (attribDom) {
|
||||||
|
return {
|
||||||
|
id: getAttr(attribDom, 'id'),
|
||||||
|
title: getAttr(attribDom, 'title'),
|
||||||
|
type: getAttr(attribDom, 'type')
|
||||||
|
};
|
||||||
|
}) : [];
|
||||||
|
}
|
||||||
|
function parseNodes(parent, attributesMap) {
|
||||||
|
return parent ? zrUtil.map(getChildrenByTagName(parent, 'node'), function (nodeDom) {
|
||||||
|
var id = getAttr(nodeDom, 'id');
|
||||||
|
var label = getAttr(nodeDom, 'label');
|
||||||
|
var node = {
|
||||||
|
id: id,
|
||||||
|
name: label,
|
||||||
|
itemStyle: {
|
||||||
|
normal: {}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var vizSizeDom = getChildByTagName(nodeDom, 'viz:size');
|
||||||
|
var vizPosDom = getChildByTagName(nodeDom, 'viz:position');
|
||||||
|
var vizColorDom = getChildByTagName(nodeDom, 'viz:color');
|
||||||
|
// let vizShapeDom = getChildByTagName(nodeDom, 'viz:shape');
|
||||||
|
var attvaluesDom = getChildByTagName(nodeDom, 'attvalues');
|
||||||
|
if (vizSizeDom) {
|
||||||
|
node.symbolSize = parseFloat(getAttr(vizSizeDom, 'value'));
|
||||||
|
}
|
||||||
|
if (vizPosDom) {
|
||||||
|
node.x = parseFloat(getAttr(vizPosDom, 'x'));
|
||||||
|
node.y = parseFloat(getAttr(vizPosDom, 'y'));
|
||||||
|
// z
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vizColorDom) {
|
||||||
|
node.itemStyle.normal.color = 'rgb(' + [getAttr(vizColorDom, 'r') | 0, getAttr(vizColorDom, 'g') | 0, getAttr(vizColorDom, 'b') | 0].join(',') + ')';
|
||||||
|
}
|
||||||
|
// if (vizShapeDom) {
|
||||||
|
// node.shape = getAttr(vizShapeDom, 'shape');
|
||||||
|
// }
|
||||||
|
if (attvaluesDom) {
|
||||||
|
var attvalueDomList = getChildrenByTagName(attvaluesDom, 'attvalue');
|
||||||
|
node.attributes = {};
|
||||||
|
for (var j = 0; j < attvalueDomList.length; j++) {
|
||||||
|
var attvalueDom = attvalueDomList[j];
|
||||||
|
var attId = getAttr(attvalueDom, 'for');
|
||||||
|
var attValue = getAttr(attvalueDom, 'value');
|
||||||
|
var attribute = attributesMap[attId];
|
||||||
|
if (attribute) {
|
||||||
|
switch (attribute.type) {
|
||||||
|
case 'integer':
|
||||||
|
case 'long':
|
||||||
|
attValue = parseInt(attValue, 10);
|
||||||
|
break;
|
||||||
|
case 'float':
|
||||||
|
case 'double':
|
||||||
|
attValue = parseFloat(attValue);
|
||||||
|
break;
|
||||||
|
case 'boolean':
|
||||||
|
attValue = attValue.toLowerCase() === 'true';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
node.attributes[attId] = attValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return node;
|
||||||
|
}) : [];
|
||||||
|
}
|
||||||
|
function parseEdges(parent) {
|
||||||
|
return parent ? zrUtil.map(getChildrenByTagName(parent, 'edge'), function (edgeDom) {
|
||||||
|
var id = getAttr(edgeDom, 'id');
|
||||||
|
var label = getAttr(edgeDom, 'label');
|
||||||
|
var sourceId = getAttr(edgeDom, 'source');
|
||||||
|
var targetId = getAttr(edgeDom, 'target');
|
||||||
|
var edge = {
|
||||||
|
id: id,
|
||||||
|
name: label,
|
||||||
|
source: sourceId,
|
||||||
|
target: targetId,
|
||||||
|
lineStyle: {
|
||||||
|
normal: {}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var lineStyle = edge.lineStyle.normal;
|
||||||
|
var vizThicknessDom = getChildByTagName(edgeDom, 'viz:thickness');
|
||||||
|
var vizColorDom = getChildByTagName(edgeDom, 'viz:color');
|
||||||
|
// let vizShapeDom = getChildByTagName(edgeDom, 'viz:shape');
|
||||||
|
if (vizThicknessDom) {
|
||||||
|
lineStyle.width = parseFloat(vizThicknessDom.getAttribute('value'));
|
||||||
|
}
|
||||||
|
if (vizColorDom) {
|
||||||
|
lineStyle.color = 'rgb(' + [getAttr(vizColorDom, 'r') | 0, getAttr(vizColorDom, 'g') | 0, getAttr(vizColorDom, 'b') | 0].join(',') + ')';
|
||||||
|
}
|
||||||
|
// if (vizShapeDom) {
|
||||||
|
// edge.shape = vizShapeDom.getAttribute('shape');
|
||||||
|
// }
|
||||||
|
return edge;
|
||||||
|
}) : [];
|
||||||
|
}
|
||||||
|
function getAttr(el, attrName) {
|
||||||
|
return el.getAttribute(attrName);
|
||||||
|
}
|
||||||
|
function getChildByTagName(parent, tagName) {
|
||||||
|
var node = parent.firstChild;
|
||||||
|
while (node) {
|
||||||
|
if (node.nodeType !== 1 || node.nodeName.toLowerCase() !== tagName.toLowerCase()) {
|
||||||
|
node = node.nextSibling;
|
||||||
|
} else {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
function getChildrenByTagName(parent, tagName) {
|
||||||
|
var node = parent.firstChild;
|
||||||
|
var children = [];
|
||||||
|
while (node) {
|
||||||
|
if (node.nodeName.toLowerCase() === tagName.toLowerCase()) {
|
||||||
|
children.push(node);
|
||||||
|
}
|
||||||
|
node = node.nextSibling;
|
||||||
|
}
|
||||||
|
return children;
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
// @ts-nocheck
|
||||||
|
import * as echarts from 'echarts';
|
||||||
|
import * as gexf from './gexf.js';
|
||||||
|
import prepareBoxplotData from './prepareBoxplotData.js';
|
||||||
|
// import { boxplotTransform } from './boxplotTransform.js';
|
||||||
|
export var version = '1.0.0';
|
||||||
|
export { gexf };
|
||||||
|
export { prepareBoxplotData };
|
||||||
|
// export {boxplotTransform};
|
||||||
|
// For backward compatibility, where the namespace `dataTool` will
|
||||||
|
// be mounted on `echarts` is the extension `dataTool` is imported.
|
||||||
|
// But the old version of echarts do not have `dataTool` namespace,
|
||||||
|
// so check it before mounting.
|
||||||
|
if (echarts.dataTool) {
|
||||||
|
echarts.dataTool.version = version;
|
||||||
|
echarts.dataTool.gexf = gexf;
|
||||||
|
echarts.dataTool.prepareBoxplotData = prepareBoxplotData;
|
||||||
|
// echarts.dataTool.boxplotTransform = boxplotTransform;
|
||||||
|
}
|
|
@ -0,0 +1,116 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
function asc(arr) {
|
||||||
|
arr.sort(function (a, b) {
|
||||||
|
return a - b;
|
||||||
|
});
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
function quantile(ascArr, p) {
|
||||||
|
var H = (ascArr.length - 1) * p + 1;
|
||||||
|
var h = Math.floor(H);
|
||||||
|
var v = +ascArr[h - 1];
|
||||||
|
var e = H - h;
|
||||||
|
return e ? v + e * (ascArr[h] - v) : v;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* See:
|
||||||
|
* <https://en.wikipedia.org/wiki/Box_plot#cite_note-frigge_hoaglin_iglewicz-2>
|
||||||
|
* <http://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/boxplot.stats.html>
|
||||||
|
*
|
||||||
|
* Helper method for preparing data.
|
||||||
|
*
|
||||||
|
* @param {Array.<number>} rawData like
|
||||||
|
* [
|
||||||
|
* [12,232,443], (raw data set for the first box)
|
||||||
|
* [3843,5545,1232], (raw data set for the second box)
|
||||||
|
* ...
|
||||||
|
* ]
|
||||||
|
* @param {Object} [opt]
|
||||||
|
*
|
||||||
|
* @param {(number|string)} [opt.boundIQR=1.5] Data less than min bound is outlier.
|
||||||
|
* default 1.5, means Q1 - 1.5 * (Q3 - Q1).
|
||||||
|
* If 'none'/0 passed, min bound will not be used.
|
||||||
|
* @param {(number|string)} [opt.layout='horizontal']
|
||||||
|
* Box plot layout, can be 'horizontal' or 'vertical'
|
||||||
|
* @return {Object} {
|
||||||
|
* boxData: Array.<Array.<number>>
|
||||||
|
* outliers: Array.<Array.<number>>
|
||||||
|
* axisData: Array.<string>
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
export default function (rawData, opt) {
|
||||||
|
opt = opt || {};
|
||||||
|
var boxData = [];
|
||||||
|
var outliers = [];
|
||||||
|
var axisData = [];
|
||||||
|
var boundIQR = opt.boundIQR;
|
||||||
|
var useExtreme = boundIQR === 'none' || boundIQR === 0;
|
||||||
|
for (var i = 0; i < rawData.length; i++) {
|
||||||
|
axisData.push(i + '');
|
||||||
|
var ascList = asc(rawData[i].slice());
|
||||||
|
var Q1 = quantile(ascList, 0.25);
|
||||||
|
var Q2 = quantile(ascList, 0.5);
|
||||||
|
var Q3 = quantile(ascList, 0.75);
|
||||||
|
var min = ascList[0];
|
||||||
|
var max = ascList[ascList.length - 1];
|
||||||
|
var bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1);
|
||||||
|
var low = useExtreme ? min : Math.max(min, Q1 - bound);
|
||||||
|
var high = useExtreme ? max : Math.min(max, Q3 + bound);
|
||||||
|
boxData.push([low, Q1, Q2, Q3, high]);
|
||||||
|
for (var j = 0; j < ascList.length; j++) {
|
||||||
|
var dataItem = ascList[j];
|
||||||
|
if (dataItem < low || dataItem > high) {
|
||||||
|
var outlier = [i, dataItem];
|
||||||
|
opt.layout === 'vertical' && outlier.reverse();
|
||||||
|
outliers.push(outlier);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
boxData: boxData,
|
||||||
|
outliers: outliers,
|
||||||
|
axisData: axisData
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export * from './types/dist/features';
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export * from './lib/export/features.js';
|
|
@ -0,0 +1,178 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Arabic.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',
|
||||||
|
'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',
|
||||||
|
'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'تحديد الكل',
|
||||||
|
inverse: 'عكس التحديد'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'تحديد صندوقي',
|
||||||
|
polygon: 'تحديد حلقي',
|
||||||
|
lineX: 'تحديد أفقي',
|
||||||
|
lineY: 'تحديد عمودي',
|
||||||
|
keep: 'الاحتفاظ بالمحدد',
|
||||||
|
clear: 'إلغاء التحديد'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'عرض البيانات',
|
||||||
|
lang: ['عرض البيانات', 'إغلاق', 'تحديث']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'تكبير',
|
||||||
|
back: 'استعادة التكبير'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'خطوط',
|
||||||
|
bar: 'أشرطة',
|
||||||
|
stack: 'تكديس',
|
||||||
|
tiled: 'مربعات'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'استعادة'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'حفظ كملف صورة',
|
||||||
|
lang: ['للحفظ كصورة انقر بالزر الأيمن']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'رسم بياني دائري',
|
||||||
|
bar: 'رسم بياني شريطي',
|
||||||
|
line: 'رسم بياني خطي',
|
||||||
|
scatter: 'نقاط مبعثرة',
|
||||||
|
effectScatter: 'نقاط مبعثرة متموجة',
|
||||||
|
radar: 'رسم بياني راداري',
|
||||||
|
tree: 'شجرة',
|
||||||
|
treemap: 'مخطط شجري',
|
||||||
|
boxplot: 'مخطط صندوقي',
|
||||||
|
candlestick: 'مخطط شمعدان',
|
||||||
|
k: 'رسم بياني خطي من النوع K',
|
||||||
|
heatmap: 'خريطة حرارية',
|
||||||
|
map: 'خريطة',
|
||||||
|
parallel: 'خريطة الإحداثيات المتناظرة',
|
||||||
|
lines: 'خطوط',
|
||||||
|
graph: 'مخطط علائقي',
|
||||||
|
sankey: 'مخطط ثعباني',
|
||||||
|
funnel: 'مخطط هرمي',
|
||||||
|
gauge: 'مقياس',
|
||||||
|
pictorialBar: 'مخطط مصوّر',
|
||||||
|
themeRiver: 'نمط خريطة النهر',
|
||||||
|
sunburst: 'مخطط شمسي',
|
||||||
|
custom: 'مخطط مخصص',
|
||||||
|
chart: 'مخطط'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'هذا رسم بياني حول "{title}".',
|
||||||
|
withoutTitle: 'هذا رسم بياني.'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' من النوع {seriesType} اسمه {seriesName}.',
|
||||||
|
withoutName: ' من النوع {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. يتكون من {seriesCount} سلسلة.',
|
||||||
|
withName: ' الـ {seriesId} هي سلسلة من النوع {seriesType} تستعرض {seriesName}.',
|
||||||
|
withoutName: ' الـ {seriesId} هي سلسلة من النوع {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '، ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'البيانات هي كالتالي: ',
|
||||||
|
partialData: 'أول {displayCnt} عناصر هي: ',
|
||||||
|
withName: 'قيمة العنصر {name} هي {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: '، ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,174 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Arabic.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',
|
||||||
|
'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',
|
||||||
|
'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'تحديد الكل',
|
||||||
|
inverse: 'عكس التحديد'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'تحديد صندوقي',
|
||||||
|
polygon: 'تحديد حلقي',
|
||||||
|
lineX: 'تحديد أفقي',
|
||||||
|
lineY: 'تحديد عمودي',
|
||||||
|
keep: 'الاحتفاظ بالمحدد',
|
||||||
|
clear: 'إلغاء التحديد'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'عرض البيانات',
|
||||||
|
lang: ['عرض البيانات', 'إغلاق', 'تحديث']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'تكبير',
|
||||||
|
back: 'استعادة التكبير'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'خطوط',
|
||||||
|
bar: 'أشرطة',
|
||||||
|
stack: 'تكديس',
|
||||||
|
tiled: 'مربعات'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'استعادة'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'حفظ كملف صورة',
|
||||||
|
lang: ['للحفظ كصورة انقر بالزر الأيمن']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'رسم بياني دائري',
|
||||||
|
bar: 'رسم بياني شريطي',
|
||||||
|
line: 'رسم بياني خطي',
|
||||||
|
scatter: 'نقاط مبعثرة',
|
||||||
|
effectScatter: 'نقاط مبعثرة متموجة',
|
||||||
|
radar: 'رسم بياني راداري',
|
||||||
|
tree: 'شجرة',
|
||||||
|
treemap: 'مخطط شجري',
|
||||||
|
boxplot: 'مخطط صندوقي',
|
||||||
|
candlestick: 'مخطط شمعدان',
|
||||||
|
k: 'رسم بياني خطي من النوع K',
|
||||||
|
heatmap: 'خريطة حرارية',
|
||||||
|
map: 'خريطة',
|
||||||
|
parallel: 'خريطة الإحداثيات المتناظرة',
|
||||||
|
lines: 'خطوط',
|
||||||
|
graph: 'مخطط علائقي',
|
||||||
|
sankey: 'مخطط ثعباني',
|
||||||
|
funnel: 'مخطط هرمي',
|
||||||
|
gauge: 'مقياس',
|
||||||
|
pictorialBar: 'مخطط مصوّر',
|
||||||
|
themeRiver: 'نمط خريطة النهر',
|
||||||
|
sunburst: 'مخطط شمسي',
|
||||||
|
custom: 'مخطط مخصص',
|
||||||
|
chart: 'مخطط'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'هذا رسم بياني حول "{title}".',
|
||||||
|
withoutTitle: 'هذا رسم بياني.'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' من النوع {seriesType} اسمه {seriesName}.',
|
||||||
|
withoutName: ' من النوع {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. يتكون من {seriesCount} سلسلة.',
|
||||||
|
withName: ' الـ {seriesId} هي سلسلة من النوع {seriesType} تستعرض {seriesName}.',
|
||||||
|
withoutName: ' الـ {seriesId} هي سلسلة من النوع {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '، ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'البيانات هي كالتالي: ',
|
||||||
|
partialData: 'أول {displayCnt} عناصر هي: ',
|
||||||
|
withName: 'قيمة العنصر {name} هي {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: '، ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('AR', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Czech.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen',
|
||||||
|
'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Led', 'Úno', 'Bře', 'Dub', 'Kvě', 'Čvn',
|
||||||
|
'Čvc', 'Srp', 'Zář', 'Říj', 'Lis', 'Pro'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Ne', 'Po', 'Út', 'St', 'Čt', 'Pá', 'So'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Vše',
|
||||||
|
inverse: 'Inv'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Obdélníkový výběr',
|
||||||
|
polygon: 'Lasso výběr',
|
||||||
|
lineX: 'Horizontální výběr',
|
||||||
|
lineY: 'Vertikální výběr',
|
||||||
|
keep: 'Ponechat výběr',
|
||||||
|
clear: 'Zrušit výběr'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Data',
|
||||||
|
lang: ['Data', 'Zavřít', 'Obnovit']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Přiblížit',
|
||||||
|
back: 'Oddálit'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Změnit na Spojnicový graf',
|
||||||
|
bar: 'Změnit na Sloupcový graf',
|
||||||
|
stack: 'Plošný',
|
||||||
|
tiled: 'Tile'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Obnovit'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Uložit jako obrázek',
|
||||||
|
lang: ['Obrázek uložte pravým kliknutím']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Výsečový graf',
|
||||||
|
bar: 'Sloupcový graf',
|
||||||
|
line: 'Spojnicový graf',
|
||||||
|
scatter: 'XY bodový graf',
|
||||||
|
effectScatter: 'Effect XY bodový graf',
|
||||||
|
radar: 'Paprskový graf',
|
||||||
|
tree: 'Strom',
|
||||||
|
treemap: 'Stromová mapa',
|
||||||
|
boxplot: 'Krabicový graf',
|
||||||
|
candlestick: 'Burzovní graf',
|
||||||
|
k: 'K spojnicový graf',
|
||||||
|
heatmap: 'Teplotní mapa',
|
||||||
|
map: 'Mapa',
|
||||||
|
parallel: 'Rovnoběžné souřadnice',
|
||||||
|
lines: 'Spojnicový graf',
|
||||||
|
graph: 'Graf vztahů',
|
||||||
|
sankey: 'Sankeyův diagram',
|
||||||
|
funnel: 'Trychtýř (Funnel)',
|
||||||
|
gauge: 'Indikátor',
|
||||||
|
pictorialBar: 'Obrázkový sloupcový graf',
|
||||||
|
themeRiver: 'Theme River Map',
|
||||||
|
sunburst: 'Vícevrstvý prstencový graf',
|
||||||
|
custom: 'Graficu persunalizatu',
|
||||||
|
chart: 'Graf'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Toto je graf o "{title}"',
|
||||||
|
withoutTitle: 'Toto je graf'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: '{seriesName} s typem {seriesType}.',
|
||||||
|
withoutName: ' s typem {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Obsahuje {seriesCount} řad.',
|
||||||
|
withName: ' Řada {seriesId} je typu {seriesType} repreyentující {seriesName}.',
|
||||||
|
withoutName: ' Řada {seriesId} je typu {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Všechna data jsou: ',
|
||||||
|
partialData: 'První {displayCnt} položky jsou: ',
|
||||||
|
withName: 'data pro {name} jsou {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Czech.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen',
|
||||||
|
'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Led', 'Úno', 'Bře', 'Dub', 'Kvě', 'Čvn',
|
||||||
|
'Čvc', 'Srp', 'Zář', 'Říj', 'Lis', 'Pro'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Ne', 'Po', 'Út', 'St', 'Čt', 'Pá', 'So'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Vše',
|
||||||
|
inverse: 'Inv'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Obdélníkový výběr',
|
||||||
|
polygon: 'Lasso výběr',
|
||||||
|
lineX: 'Horizontální výběr',
|
||||||
|
lineY: 'Vertikální výběr',
|
||||||
|
keep: 'Ponechat výběr',
|
||||||
|
clear: 'Zrušit výběr'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Data',
|
||||||
|
lang: ['Data', 'Zavřít', 'Obnovit']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Přiblížit',
|
||||||
|
back: 'Oddálit'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Změnit na Spojnicový graf',
|
||||||
|
bar: 'Změnit na Sloupcový graf',
|
||||||
|
stack: 'Plošný',
|
||||||
|
tiled: 'Tile'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Obnovit'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Uložit jako obrázek',
|
||||||
|
lang: ['Obrázek uložte pravým kliknutím']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Výsečový graf',
|
||||||
|
bar: 'Sloupcový graf',
|
||||||
|
line: 'Spojnicový graf',
|
||||||
|
scatter: 'XY bodový graf',
|
||||||
|
effectScatter: 'Effect XY bodový graf',
|
||||||
|
radar: 'Paprskový graf',
|
||||||
|
tree: 'Strom',
|
||||||
|
treemap: 'Stromová mapa',
|
||||||
|
boxplot: 'Krabicový graf',
|
||||||
|
candlestick: 'Burzovní graf',
|
||||||
|
k: 'K spojnicový graf',
|
||||||
|
heatmap: 'Teplotní mapa',
|
||||||
|
map: 'Mapa',
|
||||||
|
parallel: 'Rovnoběžné souřadnice',
|
||||||
|
lines: 'Spojnicový graf',
|
||||||
|
graph: 'Graf vztahů',
|
||||||
|
sankey: 'Sankeyův diagram',
|
||||||
|
funnel: 'Trychtýř (Funnel)',
|
||||||
|
gauge: 'Indikátor',
|
||||||
|
pictorialBar: 'Obrázkový sloupcový graf',
|
||||||
|
themeRiver: 'Theme River Map',
|
||||||
|
sunburst: 'Vícevrstvý prstencový graf',
|
||||||
|
custom: 'Graficu persunalizatu',
|
||||||
|
chart: 'Graf'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Toto je graf o "{title}"',
|
||||||
|
withoutTitle: 'Toto je graf'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: '{seriesName} s typem {seriesType}.',
|
||||||
|
withoutName: ' s typem {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Obsahuje {seriesCount} řad.',
|
||||||
|
withName: ' Řada {seriesId} je typu {seriesType} repreyentující {seriesName}.',
|
||||||
|
withoutName: ' Řada {seriesId} je typu {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Všechna data jsou: ',
|
||||||
|
partialData: 'První {displayCnt} položky jsou: ',
|
||||||
|
withName: 'data pro {name} jsou {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('CS', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: German.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni',
|
||||||
|
'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Jan', 'Feb', 'Mrz', 'Apr', 'Mai', 'Jun',
|
||||||
|
'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Alle',
|
||||||
|
inverse: 'Invertiert'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Box Auswahl',
|
||||||
|
polygon: 'Lasso Auswahl',
|
||||||
|
lineX: 'Horizontale Auswahl',
|
||||||
|
lineY: 'Vertikale Auswahl',
|
||||||
|
keep: 'Bereich Auswahl',
|
||||||
|
clear: 'Auswahl zurücksetzen'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Daten Ansicht',
|
||||||
|
lang: ['Daten Ansicht', 'Schließen', 'Aktualisieren']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Zoom zurücksetzen'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Zu Liniendiagramm wechseln',
|
||||||
|
bar: 'Zu Balkendiagramm wechseln',
|
||||||
|
stack: 'Stapel',
|
||||||
|
tiled: 'Kachel'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Wiederherstellen'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Als Bild speichern',
|
||||||
|
lang: ['Rechtsklick zum Speichern des Bildes']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Tortendiagramm',
|
||||||
|
bar: 'Balkendiagramm',
|
||||||
|
line: 'Liniendiagramm',
|
||||||
|
scatter: 'Streudiagramm',
|
||||||
|
effectScatter: 'Welligkeits-Streudiagramm',
|
||||||
|
radar: 'Radar-Karte',
|
||||||
|
tree: 'Baum',
|
||||||
|
treemap: 'Baumkarte',
|
||||||
|
boxplot: 'Boxplot',
|
||||||
|
candlestick: 'Kerzenständer',
|
||||||
|
k: 'K Liniendiagramm',
|
||||||
|
heatmap: 'Heatmap',
|
||||||
|
map: 'Karte',
|
||||||
|
parallel: 'Parallele Koordinatenkarte',
|
||||||
|
lines: 'Liniendiagramm',
|
||||||
|
graph: 'Beziehungsgrafik',
|
||||||
|
sankey: 'Sankey-Diagramm',
|
||||||
|
funnel: 'Trichterdiagramm',
|
||||||
|
gauge: 'Meßanzeige',
|
||||||
|
pictorialBar: 'Bildlicher Balken',
|
||||||
|
themeRiver: 'Thematische Flusskarte',
|
||||||
|
sunburst: 'Sonnenausbruch',
|
||||||
|
custom: 'Graficu persunalizatu',
|
||||||
|
chart: 'Diagramm'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Dies ist ein Diagramm über "{title}"',
|
||||||
|
withoutTitle: 'Dies ist ein Diagramm'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' mit Typ {seriesType} namens {seriesName}.',
|
||||||
|
withoutName: ' mit Typ {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Es besteht aus {seriesCount} Serienzählung.',
|
||||||
|
withName: ' Die Serie {seriesId} ist ein {seriesType} welcher {seriesName} darstellt.',
|
||||||
|
withoutName: ' Die {seriesId}-Reihe ist ein {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Die Daten sind wie folgt: ',
|
||||||
|
partialData: 'Die ersten {displayCnt} Elemente sind: ',
|
||||||
|
withName: 'die Daten für {name} sind {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ',',
|
||||||
|
end: '.'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: German.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni',
|
||||||
|
'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Jan', 'Feb', 'Mrz', 'Apr', 'Mai', 'Jun',
|
||||||
|
'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Alle',
|
||||||
|
inverse: 'Invertiert'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Box Auswahl',
|
||||||
|
polygon: 'Lasso Auswahl',
|
||||||
|
lineX: 'Horizontale Auswahl',
|
||||||
|
lineY: 'Vertikale Auswahl',
|
||||||
|
keep: 'Bereich Auswahl',
|
||||||
|
clear: 'Auswahl zurücksetzen'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Daten Ansicht',
|
||||||
|
lang: ['Daten Ansicht', 'Schließen', 'Aktualisieren']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Zoom zurücksetzen'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Zu Liniendiagramm wechseln',
|
||||||
|
bar: 'Zu Balkendiagramm wechseln',
|
||||||
|
stack: 'Stapel',
|
||||||
|
tiled: 'Kachel'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Wiederherstellen'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Als Bild speichern',
|
||||||
|
lang: ['Rechtsklick zum Speichern des Bildes']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Tortendiagramm',
|
||||||
|
bar: 'Balkendiagramm',
|
||||||
|
line: 'Liniendiagramm',
|
||||||
|
scatter: 'Streudiagramm',
|
||||||
|
effectScatter: 'Welligkeits-Streudiagramm',
|
||||||
|
radar: 'Radar-Karte',
|
||||||
|
tree: 'Baum',
|
||||||
|
treemap: 'Baumkarte',
|
||||||
|
boxplot: 'Boxplot',
|
||||||
|
candlestick: 'Kerzenständer',
|
||||||
|
k: 'K Liniendiagramm',
|
||||||
|
heatmap: 'Heatmap',
|
||||||
|
map: 'Karte',
|
||||||
|
parallel: 'Parallele Koordinatenkarte',
|
||||||
|
lines: 'Liniendiagramm',
|
||||||
|
graph: 'Beziehungsgrafik',
|
||||||
|
sankey: 'Sankey-Diagramm',
|
||||||
|
funnel: 'Trichterdiagramm',
|
||||||
|
gauge: 'Meßanzeige',
|
||||||
|
pictorialBar: 'Bildlicher Balken',
|
||||||
|
themeRiver: 'Thematische Flusskarte',
|
||||||
|
sunburst: 'Sonnenausbruch',
|
||||||
|
custom: 'Graficu persunalizatu',
|
||||||
|
chart: 'Diagramm'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Dies ist ein Diagramm über "{title}"',
|
||||||
|
withoutTitle: 'Dies ist ein Diagramm'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' mit Typ {seriesType} namens {seriesName}.',
|
||||||
|
withoutName: ' mit Typ {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Es besteht aus {seriesCount} Serienzählung.',
|
||||||
|
withName: ' Die Serie {seriesId} ist ein {seriesType} welcher {seriesName} darstellt.',
|
||||||
|
withoutName: ' Die {seriesId}-Reihe ist ein {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Die Daten sind wie folgt: ',
|
||||||
|
partialData: 'Die ersten {displayCnt} Elemente sind: ',
|
||||||
|
withName: 'die Daten für {name} sind {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ',',
|
||||||
|
end: '.'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('DE', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: English.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'January', 'February', 'March', 'April', 'May', 'June',
|
||||||
|
'July', 'August', 'September', 'October', 'November', 'December'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
|
||||||
|
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'All',
|
||||||
|
inverse: 'Inv'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Box Select',
|
||||||
|
polygon: 'Lasso Select',
|
||||||
|
lineX: 'Horizontally Select',
|
||||||
|
lineY: 'Vertically Select',
|
||||||
|
keep: 'Keep Selections',
|
||||||
|
clear: 'Clear Selections'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Data View',
|
||||||
|
lang: ['Data View', 'Close', 'Refresh']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Zoom Reset'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Switch to Line Chart',
|
||||||
|
bar: 'Switch to Bar Chart',
|
||||||
|
stack: 'Stack',
|
||||||
|
tiled: 'Tile'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Restore'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Save as Image',
|
||||||
|
lang: ['Right Click to Save Image']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Pie chart',
|
||||||
|
bar: 'Bar chart',
|
||||||
|
line: 'Line chart',
|
||||||
|
scatter: 'Scatter plot',
|
||||||
|
effectScatter: 'Ripple scatter plot',
|
||||||
|
radar: 'Radar chart',
|
||||||
|
tree: 'Tree',
|
||||||
|
treemap: 'Treemap',
|
||||||
|
boxplot: 'Boxplot',
|
||||||
|
candlestick: 'Candlestick',
|
||||||
|
k: 'K line chart',
|
||||||
|
heatmap: 'Heat map',
|
||||||
|
map: 'Map',
|
||||||
|
parallel: 'Parallel coordinate map',
|
||||||
|
lines: 'Line graph',
|
||||||
|
graph: 'Relationship graph',
|
||||||
|
sankey: 'Sankey diagram',
|
||||||
|
funnel: 'Funnel chart',
|
||||||
|
gauge: 'Gauge',
|
||||||
|
pictorialBar: 'Pictorial bar',
|
||||||
|
themeRiver: 'Theme River Map',
|
||||||
|
sunburst: 'Sunburst',
|
||||||
|
custom: 'Custom chart',
|
||||||
|
chart: 'Chart'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'This is a chart about "{title}"',
|
||||||
|
withoutTitle: 'This is a chart'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' with type {seriesType} named {seriesName}.',
|
||||||
|
withoutName: ' with type {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. It consists of {seriesCount} series count.',
|
||||||
|
withName: ' The {seriesId} series is a {seriesType} representing {seriesName}.',
|
||||||
|
withoutName: ' The {seriesId} series is a {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'The data is as follows: ',
|
||||||
|
partialData: 'The first {displayCnt} items are: ',
|
||||||
|
withName: 'the data for {name} is {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: English.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'January', 'February', 'March', 'April', 'May', 'June',
|
||||||
|
'July', 'August', 'September', 'October', 'November', 'December'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
|
||||||
|
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'All',
|
||||||
|
inverse: 'Inv'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Box Select',
|
||||||
|
polygon: 'Lasso Select',
|
||||||
|
lineX: 'Horizontally Select',
|
||||||
|
lineY: 'Vertically Select',
|
||||||
|
keep: 'Keep Selections',
|
||||||
|
clear: 'Clear Selections'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Data View',
|
||||||
|
lang: ['Data View', 'Close', 'Refresh']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Zoom Reset'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Switch to Line Chart',
|
||||||
|
bar: 'Switch to Bar Chart',
|
||||||
|
stack: 'Stack',
|
||||||
|
tiled: 'Tile'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Restore'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Save as Image',
|
||||||
|
lang: ['Right Click to Save Image']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Pie chart',
|
||||||
|
bar: 'Bar chart',
|
||||||
|
line: 'Line chart',
|
||||||
|
scatter: 'Scatter plot',
|
||||||
|
effectScatter: 'Ripple scatter plot',
|
||||||
|
radar: 'Radar chart',
|
||||||
|
tree: 'Tree',
|
||||||
|
treemap: 'Treemap',
|
||||||
|
boxplot: 'Boxplot',
|
||||||
|
candlestick: 'Candlestick',
|
||||||
|
k: 'K line chart',
|
||||||
|
heatmap: 'Heat map',
|
||||||
|
map: 'Map',
|
||||||
|
parallel: 'Parallel coordinate map',
|
||||||
|
lines: 'Line graph',
|
||||||
|
graph: 'Relationship graph',
|
||||||
|
sankey: 'Sankey diagram',
|
||||||
|
funnel: 'Funnel chart',
|
||||||
|
gauge: 'Gauge',
|
||||||
|
pictorialBar: 'Pictorial bar',
|
||||||
|
themeRiver: 'Theme River Map',
|
||||||
|
sunburst: 'Sunburst',
|
||||||
|
custom: 'Custom chart',
|
||||||
|
chart: 'Chart'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'This is a chart about "{title}"',
|
||||||
|
withoutTitle: 'This is a chart'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' with type {seriesType} named {seriesName}.',
|
||||||
|
withoutName: ' with type {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. It consists of {seriesCount} series count.',
|
||||||
|
withName: ' The {seriesId} series is a {seriesType} representing {seriesName}.',
|
||||||
|
withoutName: ' The {seriesId} series is a {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'The data is as follows: ',
|
||||||
|
partialData: 'The first {displayCnt} items are: ',
|
||||||
|
withName: 'the data for {name} is {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('EN', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio',
|
||||||
|
'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'ene', 'feb', 'mar', 'abr', 'may', 'jun',
|
||||||
|
'jul', 'ago', 'sep', 'oct', 'nov', 'dic'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'dom', 'lun', 'mar', 'mie', 'jue', 'vie', 'sáb'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Todas',
|
||||||
|
inverse: 'Inversa'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Selección de cuadro',
|
||||||
|
polygon: 'Selección de lazo',
|
||||||
|
lineX: 'Seleccionar horizontalmente',
|
||||||
|
lineY: 'Seleccionar verticalmente',
|
||||||
|
keep: 'Mantener selección',
|
||||||
|
clear: 'Despejar selecciones'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Ver datos',
|
||||||
|
lang: ['Ver datos', 'Cerrar', 'Actualizar']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Restablecer zoom'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Cambiar a gráfico de líneas',
|
||||||
|
bar: 'Cambiar a gráfico de barras',
|
||||||
|
stack: 'Pila',
|
||||||
|
tiled: 'Teja'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Restaurar'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Guardar como imagen',
|
||||||
|
lang: ['Clic derecho para guardar imagen']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Gráfico circular',
|
||||||
|
bar: 'Gráfico de barras',
|
||||||
|
line: 'Gráfico de líneas',
|
||||||
|
scatter: 'Diagrama de dispersión',
|
||||||
|
effectScatter: 'Diagrama de dispersión de ondas',
|
||||||
|
radar: 'Gráfico de radar',
|
||||||
|
tree: 'Árbol',
|
||||||
|
treemap: 'Mapa de árbol',
|
||||||
|
boxplot: 'Diagrama de caja',
|
||||||
|
candlestick: 'Gráfico de velas',
|
||||||
|
k: 'Gráfico de líneas K',
|
||||||
|
heatmap: 'Mapa de calor',
|
||||||
|
map: 'Mapa',
|
||||||
|
parallel: 'Mapa de coordenadas paralelas',
|
||||||
|
lines: 'Gráfico de líneas',
|
||||||
|
graph: 'Gráfico de relaciones',
|
||||||
|
sankey: 'Diagrama de Sankey',
|
||||||
|
funnel: 'Gráfico de embudo',
|
||||||
|
gauge: 'Medidor',
|
||||||
|
pictorialBar: 'Gráfico de barras pictóricas',
|
||||||
|
themeRiver: 'Mapa de río temático',
|
||||||
|
sunburst: 'Sunburst',
|
||||||
|
custom: 'Gráfico personalizado',
|
||||||
|
chart: 'Gráfico'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Este es un gráfico sobre “{title}”',
|
||||||
|
withoutTitle: 'Este es un gráfico'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' con tipo {seriesType} llamado {seriesName}.',
|
||||||
|
withoutName: ' con tipo {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Consta de {seriesCount} series.',
|
||||||
|
withName: ' La serie {seriesId} es un {seriesType} que representa {seriesName}.',
|
||||||
|
withoutName: ' La serie {seriesId} es un {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Los datos son los siguientes: ',
|
||||||
|
partialData: 'Los primeros {displayCnt} elementos son: ',
|
||||||
|
withName: 'los datos para {name} son {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,167 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio',
|
||||||
|
'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'ene', 'feb', 'mar', 'abr', 'may', 'jun',
|
||||||
|
'jul', 'ago', 'sep', 'oct', 'nov', 'dic'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'dom', 'lun', 'mar', 'mie', 'jue', 'vie', 'sáb'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Todas',
|
||||||
|
inverse: 'Inversa'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Selección de cuadro',
|
||||||
|
polygon: 'Selección de lazo',
|
||||||
|
lineX: 'Seleccionar horizontalmente',
|
||||||
|
lineY: 'Seleccionar verticalmente',
|
||||||
|
keep: 'Mantener selección',
|
||||||
|
clear: 'Despejar selecciones'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Ver datos',
|
||||||
|
lang: ['Ver datos', 'Cerrar', 'Actualizar']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Restablecer zoom'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Cambiar a gráfico de líneas',
|
||||||
|
bar: 'Cambiar a gráfico de barras',
|
||||||
|
stack: 'Pila',
|
||||||
|
tiled: 'Teja'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Restaurar'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Guardar como imagen',
|
||||||
|
lang: ['Clic derecho para guardar imagen']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Gráfico circular',
|
||||||
|
bar: 'Gráfico de barras',
|
||||||
|
line: 'Gráfico de líneas',
|
||||||
|
scatter: 'Diagrama de dispersión',
|
||||||
|
effectScatter: 'Diagrama de dispersión de ondas',
|
||||||
|
radar: 'Gráfico de radar',
|
||||||
|
tree: 'Árbol',
|
||||||
|
treemap: 'Mapa de árbol',
|
||||||
|
boxplot: 'Diagrama de caja',
|
||||||
|
candlestick: 'Gráfico de velas',
|
||||||
|
k: 'Gráfico de líneas K',
|
||||||
|
heatmap: 'Mapa de calor',
|
||||||
|
map: 'Mapa',
|
||||||
|
parallel: 'Mapa de coordenadas paralelas',
|
||||||
|
lines: 'Gráfico de líneas',
|
||||||
|
graph: 'Gráfico de relaciones',
|
||||||
|
sankey: 'Diagrama de Sankey',
|
||||||
|
funnel: 'Gráfico de embudo',
|
||||||
|
gauge: 'Medidor',
|
||||||
|
pictorialBar: 'Gráfico de barras pictóricas',
|
||||||
|
themeRiver: 'Mapa de río temático',
|
||||||
|
sunburst: 'Sunburst',
|
||||||
|
custom: 'Gráfico personalizado',
|
||||||
|
chart: 'Gráfico'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Este es un gráfico sobre “{title}”',
|
||||||
|
withoutTitle: 'Este es un gráfico'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' con tipo {seriesType} llamado {seriesName}.',
|
||||||
|
withoutName: ' con tipo {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Consta de {seriesCount} series.',
|
||||||
|
withName: ' La serie {seriesId} es un {seriesType} que representa {seriesName}.',
|
||||||
|
withoutName: ' La serie {seriesId} es un {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Los datos son los siguientes: ',
|
||||||
|
partialData: 'Los primeros {displayCnt} elementos son: ',
|
||||||
|
withName: 'los datos para {name} son {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('ES', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'tammikuuta', 'helmikuuta', 'maaliskuuta', 'huhtikuuta', 'toukokuuta', 'kesäkuuta',
|
||||||
|
'heinäkuuta', 'elokuuta', 'syyskuuta', 'lokakuuta', 'marraskuuta', 'joulukuuta'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'tammik', 'helmik', 'maalisk', 'huhtik', 'toukok', 'kesäk',
|
||||||
|
'heinäk', 'elok', 'syysk', 'lokak', 'marrask', 'jouluk'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'sunnuntaina', 'maanantaina', 'tiistaina', 'keskiviikkona', 'torstaina', 'perjantaina', 'lauantaina'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'su', 'ma', 'ti', 'ke', 'to', 'pe', 'la'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Kaikki',
|
||||||
|
inverse: 'Käänteinen'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Laatikko valinta',
|
||||||
|
polygon: 'Lasso valinta',
|
||||||
|
lineX: 'Vaakataso valinta',
|
||||||
|
lineY: 'Pysty valinta',
|
||||||
|
keep: 'Pidä valinta',
|
||||||
|
clear: 'Poista valinta'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Data näkymä',
|
||||||
|
lang: ['Data näkymä', 'Sulje', 'Päivitä']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoomaa',
|
||||||
|
back: 'Zoomin nollaus'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Vaihda Viivakaavioon',
|
||||||
|
bar: 'Vaihda palkkikaavioon',
|
||||||
|
stack: 'Pinoa',
|
||||||
|
tiled: 'Erottele'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Palauta'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Tallenna kuvana',
|
||||||
|
lang: ['Paina oikeaa hiirennappia tallentaaksesi kuva']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Ympyrädiagrammi',
|
||||||
|
bar: 'Pylväsdiagrammi',
|
||||||
|
line: 'Viivakaavio',
|
||||||
|
scatter: 'Pisteplot',
|
||||||
|
effectScatter: 'Ripple-pisteplot',
|
||||||
|
radar: 'Sädekaavio',
|
||||||
|
tree: 'Puu',
|
||||||
|
treemap: 'Tilastoaluekartta',
|
||||||
|
boxplot: 'Viivadiagrammi',
|
||||||
|
candlestick: 'Kynttiläkaavio',
|
||||||
|
k: 'K-linjakaavio',
|
||||||
|
heatmap: 'Lämpökartta',
|
||||||
|
map: 'Kartta',
|
||||||
|
parallel: 'Rinnakkaiskoordinaattikartta',
|
||||||
|
lines: 'Viivakuvaaja',
|
||||||
|
graph: 'Suhdekuvaaja',
|
||||||
|
sankey: 'Sankey-kaavio',
|
||||||
|
funnel: 'Suppilokaavio',
|
||||||
|
gauge: 'Mittari',
|
||||||
|
pictorialBar: 'Kuvallinen pylväs',
|
||||||
|
themeRiver: 'Teemajokikartta',
|
||||||
|
sunburst: 'Auringonkehä',
|
||||||
|
custom: 'Mukautettu kaavio',
|
||||||
|
chart: 'Kaavio'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Tämä on kaavio “{title}”',
|
||||||
|
withoutTitle: 'Tämä on kaavio'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' tyyppiä {seriesType} nimeltään {seriesName}.',
|
||||||
|
withoutName: ' tyyppiä {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Se koostuu {seriesCount} sarjasta.',
|
||||||
|
withName: ' Sarja {seriesId} on {seriesType}, joka edustaa {seriesName}.',
|
||||||
|
withoutName: ' Sarja {seriesId} on {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Tiedot ovat seuraavat: ',
|
||||||
|
partialData: 'Ensimmäiset {displayCnt} kohtaa ovat: ',
|
||||||
|
withName: 'tiedot nimelle {name} ovat {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,167 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'tammikuuta', 'helmikuuta', 'maaliskuuta', 'huhtikuuta', 'toukokuuta', 'kesäkuuta',
|
||||||
|
'heinäkuuta', 'elokuuta', 'syyskuuta', 'lokakuuta', 'marraskuuta', 'joulukuuta'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'tammik', 'helmik', 'maalisk', 'huhtik', 'toukok', 'kesäk',
|
||||||
|
'heinäk', 'elok', 'syysk', 'lokak', 'marrask', 'jouluk'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'sunnuntaina', 'maanantaina', 'tiistaina', 'keskiviikkona', 'torstaina', 'perjantaina', 'lauantaina'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'su', 'ma', 'ti', 'ke', 'to', 'pe', 'la'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Kaikki',
|
||||||
|
inverse: 'Käänteinen'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Laatikko valinta',
|
||||||
|
polygon: 'Lasso valinta',
|
||||||
|
lineX: 'Vaakataso valinta',
|
||||||
|
lineY: 'Pysty valinta',
|
||||||
|
keep: 'Pidä valinta',
|
||||||
|
clear: 'Poista valinta'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Data näkymä',
|
||||||
|
lang: ['Data näkymä', 'Sulje', 'Päivitä']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoomaa',
|
||||||
|
back: 'Zoomin nollaus'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Vaihda Viivakaavioon',
|
||||||
|
bar: 'Vaihda palkkikaavioon',
|
||||||
|
stack: 'Pinoa',
|
||||||
|
tiled: 'Erottele'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Palauta'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Tallenna kuvana',
|
||||||
|
lang: ['Paina oikeaa hiirennappia tallentaaksesi kuva']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Ympyrädiagrammi',
|
||||||
|
bar: 'Pylväsdiagrammi',
|
||||||
|
line: 'Viivakaavio',
|
||||||
|
scatter: 'Pisteplot',
|
||||||
|
effectScatter: 'Ripple-pisteplot',
|
||||||
|
radar: 'Sädekaavio',
|
||||||
|
tree: 'Puu',
|
||||||
|
treemap: 'Tilastoaluekartta',
|
||||||
|
boxplot: 'Viivadiagrammi',
|
||||||
|
candlestick: 'Kynttiläkaavio',
|
||||||
|
k: 'K-linjakaavio',
|
||||||
|
heatmap: 'Lämpökartta',
|
||||||
|
map: 'Kartta',
|
||||||
|
parallel: 'Rinnakkaiskoordinaattikartta',
|
||||||
|
lines: 'Viivakuvaaja',
|
||||||
|
graph: 'Suhdekuvaaja',
|
||||||
|
sankey: 'Sankey-kaavio',
|
||||||
|
funnel: 'Suppilokaavio',
|
||||||
|
gauge: 'Mittari',
|
||||||
|
pictorialBar: 'Kuvallinen pylväs',
|
||||||
|
themeRiver: 'Teemajokikartta',
|
||||||
|
sunburst: 'Auringonkehä',
|
||||||
|
custom: 'Mukautettu kaavio',
|
||||||
|
chart: 'Kaavio'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Tämä on kaavio “{title}”',
|
||||||
|
withoutTitle: 'Tämä on kaavio'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' tyyppiä {seriesType} nimeltään {seriesName}.',
|
||||||
|
withoutName: ' tyyppiä {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Se koostuu {seriesCount} sarjasta.',
|
||||||
|
withName: ' Sarja {seriesId} on {seriesType}, joka edustaa {seriesName}.',
|
||||||
|
withoutName: ' Sarja {seriesId} on {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Tiedot ovat seuraavat: ',
|
||||||
|
partialData: 'Ensimmäiset {displayCnt} kohtaa ovat: ',
|
||||||
|
withName: 'tiedot nimelle {name} ovat {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('FI', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Français.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
|
||||||
|
'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Jan', 'Fév', 'Mars', 'Avr', 'Mai', 'Juin',
|
||||||
|
'Juil', 'Août', 'Sept', 'Oct', 'Nov', 'Déc'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Tout',
|
||||||
|
inverse: 'Inverse'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Sélection rectangulaire',
|
||||||
|
polygon: 'Sélection au lasso',
|
||||||
|
lineX: 'Sélectionner horizontalement',
|
||||||
|
lineY: 'Sélectionner verticalement',
|
||||||
|
keep: 'Garder la sélection',
|
||||||
|
clear: 'Effacer la sélection'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Visualisation des données',
|
||||||
|
lang: ['Visualisation des données', 'Fermer', 'Rafraîchir']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Zoom Remise à zéro'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Changer pour Ligne',
|
||||||
|
bar: 'Changer pour Histogramme',
|
||||||
|
stack: 'Superposition',
|
||||||
|
tiled: 'Tuile'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Restaurer'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Sauvegarder l\'image',
|
||||||
|
lang: ['Clic droit pour sauvegarder l\'image']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Camembert',
|
||||||
|
bar: 'Histogramme',
|
||||||
|
line: 'Ligne',
|
||||||
|
scatter: 'Nuage de points',
|
||||||
|
effectScatter: 'Nuage de points stylisé',
|
||||||
|
radar: 'Radar',
|
||||||
|
tree: 'Arbre',
|
||||||
|
treemap: 'Treemap',
|
||||||
|
boxplot: 'Boîte à moustaches',
|
||||||
|
candlestick: 'Chandelier',
|
||||||
|
k: 'Linéaire K',
|
||||||
|
heatmap: 'Carte de fréquentation',
|
||||||
|
map: 'Carte',
|
||||||
|
parallel: 'Données parallèles',
|
||||||
|
lines: 'Lignes',
|
||||||
|
graph: 'Graphe',
|
||||||
|
sankey: 'Sankey',
|
||||||
|
funnel: 'Entonnoir',
|
||||||
|
gauge: 'Jauge',
|
||||||
|
pictorialBar: 'Barres à images',
|
||||||
|
themeRiver: 'Stream Graph',
|
||||||
|
sunburst: 'Sunburst',
|
||||||
|
custom: 'Graphique personnalisé',
|
||||||
|
chart: 'Graphique'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Cette carte est intitulée "{title}"',
|
||||||
|
withoutTitle: 'C\'est une carte'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' Avec le type de {seriesType} qui s\'appelle {seriesName}.',
|
||||||
|
withoutName: ' Avec le type de {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: ' Elle comprend {seriesCount} séries.',
|
||||||
|
withName: ' La série {seriesId} représente {seriesName} de {seriesType}.',
|
||||||
|
withoutName: ' La série {seriesId} est un/une {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Les données sont: ',
|
||||||
|
partialData: 'Les premiers {displayCnt} éléments sont : ',
|
||||||
|
withName: 'Les données pour {name} sont {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Français.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
|
||||||
|
'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Jan', 'Fév', 'Mars', 'Avr', 'Mai', 'Juin',
|
||||||
|
'Juil', 'Août', 'Sept', 'Oct', 'Nov', 'Déc'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Tout',
|
||||||
|
inverse: 'Inverse'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Sélection rectangulaire',
|
||||||
|
polygon: 'Sélection au lasso',
|
||||||
|
lineX: 'Sélectionner horizontalement',
|
||||||
|
lineY: 'Sélectionner verticalement',
|
||||||
|
keep: 'Garder la sélection',
|
||||||
|
clear: 'Effacer la sélection'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Visualisation des données',
|
||||||
|
lang: ['Visualisation des données', 'Fermer', 'Rafraîchir']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Zoom Remise à zéro'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Changer pour Ligne',
|
||||||
|
bar: 'Changer pour Histogramme',
|
||||||
|
stack: 'Superposition',
|
||||||
|
tiled: 'Tuile'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Restaurer'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Sauvegarder l\'image',
|
||||||
|
lang: ['Clic droit pour sauvegarder l\'image']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Camembert',
|
||||||
|
bar: 'Histogramme',
|
||||||
|
line: 'Ligne',
|
||||||
|
scatter: 'Nuage de points',
|
||||||
|
effectScatter: 'Nuage de points stylisé',
|
||||||
|
radar: 'Radar',
|
||||||
|
tree: 'Arbre',
|
||||||
|
treemap: 'Treemap',
|
||||||
|
boxplot: 'Boîte à moustaches',
|
||||||
|
candlestick: 'Chandelier',
|
||||||
|
k: 'Linéaire K',
|
||||||
|
heatmap: 'Carte de fréquentation',
|
||||||
|
map: 'Carte',
|
||||||
|
parallel: 'Données parallèles',
|
||||||
|
lines: 'Lignes',
|
||||||
|
graph: 'Graphe',
|
||||||
|
sankey: 'Sankey',
|
||||||
|
funnel: 'Entonnoir',
|
||||||
|
gauge: 'Jauge',
|
||||||
|
pictorialBar: 'Barres à images',
|
||||||
|
themeRiver: 'Stream Graph',
|
||||||
|
sunburst: 'Sunburst',
|
||||||
|
custom: 'Graphique personnalisé',
|
||||||
|
chart: 'Graphique'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Cette carte est intitulée "{title}"',
|
||||||
|
withoutTitle: 'C\'est une carte'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' Avec le type de {seriesType} qui s\'appelle {seriesName}.',
|
||||||
|
withoutName: ' Avec le type de {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: ' Elle comprend {seriesCount} séries.',
|
||||||
|
withName: ' La série {seriesId} représente {seriesName} de {seriesType}.',
|
||||||
|
withoutName: ' La série {seriesId} est un/une {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Les données sont: ',
|
||||||
|
partialData: 'Les premiers {displayCnt} éléments sont : ',
|
||||||
|
withName: 'Les données pour {name} sont {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('FR', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Hungarian.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Január', 'Február', 'Március', 'Április', 'Május', 'Június',
|
||||||
|
'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
|
||||||
|
'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'V', 'H', 'K', 'Sze', 'Csü', 'P', 'Szo'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Mind',
|
||||||
|
inverse: 'Inverz'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Négyzet kijelölés',
|
||||||
|
polygon: 'Lasszó kijelölés',
|
||||||
|
lineX: 'Vízszintes kijelölés',
|
||||||
|
lineY: 'Függőleges kijelölés',
|
||||||
|
keep: 'Kijelölések megtartása',
|
||||||
|
clear: 'Kijelölések törlése'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Adat nézet',
|
||||||
|
lang: ['Adat nézet', 'Bezárás', 'Frissítés']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Nagyítás',
|
||||||
|
back: 'Alapméret'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Váltás vonal diagramra',
|
||||||
|
bar: 'Váltás oszlop diagramra',
|
||||||
|
stack: 'Halmozás',
|
||||||
|
tiled: 'Csempe'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Visszaállítás'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Mentés képként',
|
||||||
|
lang: ['Kattints jobb egérgombbal a mentéshez képként']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Oszlopdiagram',
|
||||||
|
bar: 'Sávdiagram',
|
||||||
|
line: 'Vonaldiagram',
|
||||||
|
scatter: 'Pontdiagram',
|
||||||
|
effectScatter: 'Buborékdiagram',
|
||||||
|
radar: 'Sugárdiagram',
|
||||||
|
tree: 'Fa',
|
||||||
|
treemap: 'Fatérkép',
|
||||||
|
boxplot: 'Dobozdiagram',
|
||||||
|
candlestick: 'Árfolyamdiagram',
|
||||||
|
k: 'K vonaldiagram',
|
||||||
|
heatmap: 'Hőtérkép',
|
||||||
|
map: 'Térkép',
|
||||||
|
parallel: 'Párhuzamos koordináta térkép',
|
||||||
|
lines: 'Vonalgráf',
|
||||||
|
graph: 'Kapcsolatgráf',
|
||||||
|
sankey: 'Sankey-diagram',
|
||||||
|
funnel: 'Vízesésdiagram',
|
||||||
|
gauge: 'Mérőeszköz',
|
||||||
|
pictorialBar: 'Képes sávdiagram',
|
||||||
|
themeRiver: 'Folyó témájú térkép',
|
||||||
|
sunburst: 'Napégés',
|
||||||
|
custom: 'Egyedi diagram',
|
||||||
|
chart: 'Diagram'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Ez egy diagram, amely neve "{title}"',
|
||||||
|
withoutTitle: 'Ez egy diagram'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' típusa {seriesType} és elnevezése {seriesName}.',
|
||||||
|
withoutName: ' típusa {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Az adatsorok száma {seriesCount}.',
|
||||||
|
withName: ' A {seriesId} számú adatsor típusa {seriesType} és neve {seriesName}.',
|
||||||
|
withoutName: ' A {seriesId} számú adatsor típusa {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Az adatok a következők: ',
|
||||||
|
partialData: 'Az első {displayCnt} elemek: ',
|
||||||
|
withName: 'a {name} nevű adat értéke {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Hungarian.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Január', 'Február', 'Március', 'Április', 'Május', 'Június',
|
||||||
|
'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
|
||||||
|
'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'V', 'H', 'K', 'Sze', 'Csü', 'P', 'Szo'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Mind',
|
||||||
|
inverse: 'Inverz'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Négyzet kijelölés',
|
||||||
|
polygon: 'Lasszó kijelölés',
|
||||||
|
lineX: 'Vízszintes kijelölés',
|
||||||
|
lineY: 'Függőleges kijelölés',
|
||||||
|
keep: 'Kijelölések megtartása',
|
||||||
|
clear: 'Kijelölések törlése'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Adat nézet',
|
||||||
|
lang: ['Adat nézet', 'Bezárás', 'Frissítés']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Nagyítás',
|
||||||
|
back: 'Alapméret'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Váltás vonal diagramra',
|
||||||
|
bar: 'Váltás oszlop diagramra',
|
||||||
|
stack: 'Halmozás',
|
||||||
|
tiled: 'Csempe'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Visszaállítás'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Mentés képként',
|
||||||
|
lang: ['Kattints jobb egérgombbal a mentéshez képként']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Oszlopdiagram',
|
||||||
|
bar: 'Sávdiagram',
|
||||||
|
line: 'Vonaldiagram',
|
||||||
|
scatter: 'Pontdiagram',
|
||||||
|
effectScatter: 'Buborékdiagram',
|
||||||
|
radar: 'Sugárdiagram',
|
||||||
|
tree: 'Fa',
|
||||||
|
treemap: 'Fatérkép',
|
||||||
|
boxplot: 'Dobozdiagram',
|
||||||
|
candlestick: 'Árfolyamdiagram',
|
||||||
|
k: 'K vonaldiagram',
|
||||||
|
heatmap: 'Hőtérkép',
|
||||||
|
map: 'Térkép',
|
||||||
|
parallel: 'Párhuzamos koordináta térkép',
|
||||||
|
lines: 'Vonalgráf',
|
||||||
|
graph: 'Kapcsolatgráf',
|
||||||
|
sankey: 'Sankey-diagram',
|
||||||
|
funnel: 'Vízesésdiagram',
|
||||||
|
gauge: 'Mérőeszköz',
|
||||||
|
pictorialBar: 'Képes sávdiagram',
|
||||||
|
themeRiver: 'Folyó témájú térkép',
|
||||||
|
sunburst: 'Napégés',
|
||||||
|
custom: 'Egyedi diagram',
|
||||||
|
chart: 'Diagram'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Ez egy diagram, amely neve "{title}"',
|
||||||
|
withoutTitle: 'Ez egy diagram'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' típusa {seriesType} és elnevezése {seriesName}.',
|
||||||
|
withoutName: ' típusa {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Az adatsorok száma {seriesCount}.',
|
||||||
|
withName: ' A {seriesId} számú adatsor típusa {seriesType} és neve {seriesName}.',
|
||||||
|
withoutName: ' A {seriesId} számú adatsor típusa {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Az adatok a következők: ',
|
||||||
|
partialData: 'Az első {displayCnt} elemek: ',
|
||||||
|
withName: 'a {name} nevű adat értéke {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('HU', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Italian.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno',
|
||||||
|
'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu',
|
||||||
|
'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Tutti',
|
||||||
|
inverse: 'Inverso'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Selezione rettangolare',
|
||||||
|
polygon: 'Selezione lazo',
|
||||||
|
lineX: 'Selezione orizzontale',
|
||||||
|
lineY: 'Selezione verticale',
|
||||||
|
keep: 'Mantieni selezione',
|
||||||
|
clear: 'Rimuovi selezione'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Visualizzazione dati',
|
||||||
|
lang: ['Visualizzazione dati', 'Chiudi', 'Aggiorna']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Resetta zoom'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Passa al grafico a linee',
|
||||||
|
bar: 'Passa al grafico a barre',
|
||||||
|
stack: 'Pila',
|
||||||
|
tiled: 'Piastrella'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Ripristina'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Salva come immagine',
|
||||||
|
lang: ['Tasto destro per salvare l\'immagine']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Grafico a torta',
|
||||||
|
bar: 'Grafico a barre',
|
||||||
|
line: 'Grafico a linee',
|
||||||
|
scatter: 'Grafico a dispersione',
|
||||||
|
effectScatter: 'Ripple scatter plot',
|
||||||
|
radar: 'Grafico radar',
|
||||||
|
tree: 'Albero',
|
||||||
|
treemap: 'Treemap',
|
||||||
|
boxplot: 'Diagramma a scatola e baffi',
|
||||||
|
candlestick: 'Candlestick',
|
||||||
|
k: 'K line chart',
|
||||||
|
heatmap: 'Mappa di calore',
|
||||||
|
map: 'Mappa',
|
||||||
|
parallel: 'Grafico a coordinate parallele',
|
||||||
|
lines: 'Grafico a linee',
|
||||||
|
graph: 'Diagramma delle relazioni',
|
||||||
|
sankey: 'Diagramma di Sankey',
|
||||||
|
funnel: 'Grafico a imbuto',
|
||||||
|
gauge: 'Gauge',
|
||||||
|
pictorialBar: 'Pictorial bar',
|
||||||
|
themeRiver: 'Theme River Map',
|
||||||
|
sunburst: 'Radiale',
|
||||||
|
custom: 'Egyedi diagram',
|
||||||
|
chart: 'Grafico'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Questo è un grafico su "{title}"',
|
||||||
|
withoutTitle: 'Questo è un grafico'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' con il tipo {seriesType} denominato {seriesName}.',
|
||||||
|
withoutName: ' con il tipo {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. È composto da {seriesCount} serie.',
|
||||||
|
withName: ' La {seriesId} serie è un {seriesType} denominata {seriesName}.',
|
||||||
|
withoutName: ' la {seriesId} serie è un {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'I dati sono come segue: ',
|
||||||
|
partialData: 'I primi {displayCnt} elementi sono: ',
|
||||||
|
withName: 'il dato per {name} è {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Italian.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno',
|
||||||
|
'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu',
|
||||||
|
'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Tutti',
|
||||||
|
inverse: 'Inverso'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Selezione rettangolare',
|
||||||
|
polygon: 'Selezione lazo',
|
||||||
|
lineX: 'Selezione orizzontale',
|
||||||
|
lineY: 'Selezione verticale',
|
||||||
|
keep: 'Mantieni selezione',
|
||||||
|
clear: 'Rimuovi selezione'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Visualizzazione dati',
|
||||||
|
lang: ['Visualizzazione dati', 'Chiudi', 'Aggiorna']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Resetta zoom'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Passa al grafico a linee',
|
||||||
|
bar: 'Passa al grafico a barre',
|
||||||
|
stack: 'Pila',
|
||||||
|
tiled: 'Piastrella'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Ripristina'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Salva come immagine',
|
||||||
|
lang: ['Tasto destro per salvare l\'immagine']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Grafico a torta',
|
||||||
|
bar: 'Grafico a barre',
|
||||||
|
line: 'Grafico a linee',
|
||||||
|
scatter: 'Grafico a dispersione',
|
||||||
|
effectScatter: 'Ripple scatter plot',
|
||||||
|
radar: 'Grafico radar',
|
||||||
|
tree: 'Albero',
|
||||||
|
treemap: 'Treemap',
|
||||||
|
boxplot: 'Diagramma a scatola e baffi',
|
||||||
|
candlestick: 'Candlestick',
|
||||||
|
k: 'K line chart',
|
||||||
|
heatmap: 'Mappa di calore',
|
||||||
|
map: 'Mappa',
|
||||||
|
parallel: 'Grafico a coordinate parallele',
|
||||||
|
lines: 'Grafico a linee',
|
||||||
|
graph: 'Diagramma delle relazioni',
|
||||||
|
sankey: 'Diagramma di Sankey',
|
||||||
|
funnel: 'Grafico a imbuto',
|
||||||
|
gauge: 'Gauge',
|
||||||
|
pictorialBar: 'Pictorial bar',
|
||||||
|
themeRiver: 'Theme River Map',
|
||||||
|
sunburst: 'Radiale',
|
||||||
|
custom: 'Egyedi diagram',
|
||||||
|
chart: 'Grafico'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Questo è un grafico su "{title}"',
|
||||||
|
withoutTitle: 'Questo è un grafico'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' con il tipo {seriesType} denominato {seriesName}.',
|
||||||
|
withoutName: ' con il tipo {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. È composto da {seriesCount} serie.',
|
||||||
|
withName: ' La {seriesId} serie è un {seriesType} denominata {seriesName}.',
|
||||||
|
withoutName: ' la {seriesId} serie è un {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'I dati sono come segue: ',
|
||||||
|
partialData: 'I primi {displayCnt} elementi sono: ',
|
||||||
|
withName: 'il dato per {name} è {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('IT', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Japanese.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'一月', '二月', '三月', '四月', '五月', '六月',
|
||||||
|
'七月', '八月', '九月', '十月', '十一月', '十二月'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'1月', '2月', '3月', '4月', '5月', '6月',
|
||||||
|
'7月', '8月', '9月', '10月', '11月', '12月'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'日', '月', '火', '水', '木', '金', '土'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'すべてを選択',
|
||||||
|
inverse: '選択範囲を反転'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: '矩形選択',
|
||||||
|
polygon: 'なげなわ選択',
|
||||||
|
lineX: '横方向に選択',
|
||||||
|
lineY: '縦方向に選択',
|
||||||
|
keep: '選択範囲を維持',
|
||||||
|
clear: '選択範囲をクリア'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'データビュー',
|
||||||
|
lang: ['データビュー', '閉じる', 'リロード']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'ズーム',
|
||||||
|
back: 'リセット'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: '折れ線に切り替え',
|
||||||
|
bar: '棒に切り替え',
|
||||||
|
stack: '積み上げに切り替え',
|
||||||
|
tiled: 'タイル状に切り替え'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: '復元'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: '図として保存',
|
||||||
|
lang: ['右クリックして図を保存']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: '円グラフ',
|
||||||
|
bar: '棒グラフ',
|
||||||
|
line: '折れ線グラフ',
|
||||||
|
scatter: '散布図',
|
||||||
|
effectScatter: 'エフェクト散布図',
|
||||||
|
radar: 'レーダーチャート',
|
||||||
|
tree: '階層グラフ',
|
||||||
|
treemap: 'ツリーマップ',
|
||||||
|
boxplot: '箱ひげ図',
|
||||||
|
candlestick: 'Kチャート',
|
||||||
|
k: 'Kチャート',
|
||||||
|
heatmap: 'ヒートマップ',
|
||||||
|
map: '地図',
|
||||||
|
parallel: 'パラレルチャート',
|
||||||
|
lines: 'ラインチャート',
|
||||||
|
graph: '相関図',
|
||||||
|
sankey: 'サンキーダイアグラム',
|
||||||
|
funnel: 'ファネルグラフ',
|
||||||
|
gauge: 'ゲージ',
|
||||||
|
pictorialBar: '絵入り棒グラフ',
|
||||||
|
themeRiver: 'テーマリバー',
|
||||||
|
sunburst: 'サンバースト',
|
||||||
|
custom: 'カスタムチャート',
|
||||||
|
chart: 'チャート'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'これは「{title}」に関するチャートです。',
|
||||||
|
withoutTitle: 'これはチャートで、'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: 'チャートのタイプは{seriesType}で、{seriesName}を示しています。',
|
||||||
|
withoutName: 'チャートのタイプは{seriesType}です。'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '{seriesCount}つのチャートシリーズによって構成されています。',
|
||||||
|
withName: '{seriesId}番目のシリーズは{seriesName}を示した{seriesType}で、',
|
||||||
|
withoutName: '{seriesId}番目のシリーズは{seriesType}で、',
|
||||||
|
separator: {
|
||||||
|
middle: ';',
|
||||||
|
end: '。'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'データは:',
|
||||||
|
partialData: 'その内、{displayCnt}番目までは:',
|
||||||
|
withName: '{name}のデータは{value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: '、',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Japanese.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'一月', '二月', '三月', '四月', '五月', '六月',
|
||||||
|
'七月', '八月', '九月', '十月', '十一月', '十二月'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'1月', '2月', '3月', '4月', '5月', '6月',
|
||||||
|
'7月', '8月', '9月', '10月', '11月', '12月'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'日', '月', '火', '水', '木', '金', '土'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'すべてを選択',
|
||||||
|
inverse: '選択範囲を反転'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: '矩形選択',
|
||||||
|
polygon: 'なげなわ選択',
|
||||||
|
lineX: '横方向に選択',
|
||||||
|
lineY: '縦方向に選択',
|
||||||
|
keep: '選択範囲を維持',
|
||||||
|
clear: '選択範囲をクリア'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'データビュー',
|
||||||
|
lang: ['データビュー', '閉じる', 'リロード']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'ズーム',
|
||||||
|
back: 'リセット'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: '折れ線に切り替え',
|
||||||
|
bar: '棒に切り替え',
|
||||||
|
stack: '積み上げに切り替え',
|
||||||
|
tiled: 'タイル状に切り替え'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: '復元'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: '図として保存',
|
||||||
|
lang: ['右クリックして図を保存']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: '円グラフ',
|
||||||
|
bar: '棒グラフ',
|
||||||
|
line: '折れ線グラフ',
|
||||||
|
scatter: '散布図',
|
||||||
|
effectScatter: 'エフェクト散布図',
|
||||||
|
radar: 'レーダーチャート',
|
||||||
|
tree: '階層グラフ',
|
||||||
|
treemap: 'ツリーマップ',
|
||||||
|
boxplot: '箱ひげ図',
|
||||||
|
candlestick: 'Kチャート',
|
||||||
|
k: 'Kチャート',
|
||||||
|
heatmap: 'ヒートマップ',
|
||||||
|
map: '地図',
|
||||||
|
parallel: 'パラレルチャート',
|
||||||
|
lines: 'ラインチャート',
|
||||||
|
graph: '相関図',
|
||||||
|
sankey: 'サンキーダイアグラム',
|
||||||
|
funnel: 'ファネルグラフ',
|
||||||
|
gauge: 'ゲージ',
|
||||||
|
pictorialBar: '絵入り棒グラフ',
|
||||||
|
themeRiver: 'テーマリバー',
|
||||||
|
sunburst: 'サンバースト',
|
||||||
|
custom: 'カスタムチャート',
|
||||||
|
chart: 'チャート'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'これは「{title}」に関するチャートです。',
|
||||||
|
withoutTitle: 'これはチャートで、'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: 'チャートのタイプは{seriesType}で、{seriesName}を示しています。',
|
||||||
|
withoutName: 'チャートのタイプは{seriesType}です。'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '{seriesCount}つのチャートシリーズによって構成されています。',
|
||||||
|
withName: '{seriesId}番目のシリーズは{seriesName}を示した{seriesType}で、',
|
||||||
|
withoutName: '{seriesId}番目のシリーズは{seriesType}で、',
|
||||||
|
separator: {
|
||||||
|
middle: ';',
|
||||||
|
end: '。'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'データは:',
|
||||||
|
partialData: 'その内、{displayCnt}番目までは:',
|
||||||
|
withName: '{name}のデータは{value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: '、',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('JA', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Korean.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'1월', '2월', '3월', '4월', '5월', '6월',
|
||||||
|
'7월', '8월', '9월', '10월', '11월', '12월'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'1월', '2월', '3월', '4월', '5월', '6월',
|
||||||
|
'7월', '8월', '9월', '10월', '11월', '12월'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'일', '월', '화', '수', '목', '금', '토'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: '모두 선택',
|
||||||
|
inverse: '선택 범위 반전'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: '사각형 선택',
|
||||||
|
polygon: '올가미 선택',
|
||||||
|
lineX: '수평 선택',
|
||||||
|
lineY: '수직 선택',
|
||||||
|
keep: '선택 유지',
|
||||||
|
clear: '선택 지우기'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: '날짜 보기',
|
||||||
|
lang: ['날짜 보기', '닫기', '새로 고침']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: '확대/축소',
|
||||||
|
back: '확대/축소 초기화'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: '꺽은선 그래프로 변경',
|
||||||
|
bar: '막대 그래프로 변경',
|
||||||
|
stack: '스택',
|
||||||
|
tiled: '타일'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: '복구'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: '이미지로 저장',
|
||||||
|
lang: ['이미지를 저장하려면 마우스 오른쪽 버튼을 클릭하세요.']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: '원 그래프',
|
||||||
|
bar: '막대 그래프',
|
||||||
|
line: '꺽은선 그래프',
|
||||||
|
scatter: '산점도',
|
||||||
|
effectScatter: '물결 효과 산점도',
|
||||||
|
radar: '방사형 그래프',
|
||||||
|
tree: '트리',
|
||||||
|
treemap: '트리맵',
|
||||||
|
boxplot: '상자 수염 그래프',
|
||||||
|
candlestick: '캔들스틱 차트',
|
||||||
|
k: 'K 라인 차트',
|
||||||
|
heatmap: '히트 맵',
|
||||||
|
map: '지도',
|
||||||
|
parallel: '평행 좌표 맵',
|
||||||
|
lines: '선',
|
||||||
|
graph: '관계 그래프',
|
||||||
|
sankey: '산키 다이어그램',
|
||||||
|
funnel: '깔때기형 그래프',
|
||||||
|
gauge: '계기',
|
||||||
|
pictorialBar: '픽토그램 차트',
|
||||||
|
themeRiver: '스트림 그래프',
|
||||||
|
sunburst: '선버스트 차트',
|
||||||
|
custom: '맞춤 차트',
|
||||||
|
chart: '차트'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: '"{title}"에 대한 차트입니다.',
|
||||||
|
withoutTitle: '차트입니다.'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' 차트 유형은 {seriesType}이며 {seriesName}을 표시합니다.',
|
||||||
|
withoutName: ' 차트 유형은 {seriesType}입니다.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. {seriesCount} 하나의 차트 시리즈로 구성됩니다.',
|
||||||
|
withName: ' {seriesId}번째 시리즈는 {seriesName}을 나타내는 {seriesType} representing.',
|
||||||
|
withoutName: ' {seriesId}번째 시리즈는 {seriesType}입니다.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: '데이터: ',
|
||||||
|
partialData: '첫번째 {displayCnt} 아이템: ',
|
||||||
|
withName: '{name}의 데이터는 {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Korean.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'1월', '2월', '3월', '4월', '5월', '6월',
|
||||||
|
'7월', '8월', '9월', '10월', '11월', '12월'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'1월', '2월', '3월', '4월', '5월', '6월',
|
||||||
|
'7월', '8월', '9월', '10월', '11월', '12월'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'일', '월', '화', '수', '목', '금', '토'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: '모두 선택',
|
||||||
|
inverse: '선택 범위 반전'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: '사각형 선택',
|
||||||
|
polygon: '올가미 선택',
|
||||||
|
lineX: '수평 선택',
|
||||||
|
lineY: '수직 선택',
|
||||||
|
keep: '선택 유지',
|
||||||
|
clear: '선택 지우기'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: '날짜 보기',
|
||||||
|
lang: ['날짜 보기', '닫기', '새로 고침']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: '확대/축소',
|
||||||
|
back: '확대/축소 초기화'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: '꺽은선 그래프로 변경',
|
||||||
|
bar: '막대 그래프로 변경',
|
||||||
|
stack: '스택',
|
||||||
|
tiled: '타일'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: '복구'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: '이미지로 저장',
|
||||||
|
lang: ['이미지를 저장하려면 마우스 오른쪽 버튼을 클릭하세요.']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: '원 그래프',
|
||||||
|
bar: '막대 그래프',
|
||||||
|
line: '꺽은선 그래프',
|
||||||
|
scatter: '산점도',
|
||||||
|
effectScatter: '물결 효과 산점도',
|
||||||
|
radar: '방사형 그래프',
|
||||||
|
tree: '트리',
|
||||||
|
treemap: '트리맵',
|
||||||
|
boxplot: '상자 수염 그래프',
|
||||||
|
candlestick: '캔들스틱 차트',
|
||||||
|
k: 'K 라인 차트',
|
||||||
|
heatmap: '히트 맵',
|
||||||
|
map: '지도',
|
||||||
|
parallel: '평행 좌표 맵',
|
||||||
|
lines: '선',
|
||||||
|
graph: '관계 그래프',
|
||||||
|
sankey: '산키 다이어그램',
|
||||||
|
funnel: '깔때기형 그래프',
|
||||||
|
gauge: '계기',
|
||||||
|
pictorialBar: '픽토그램 차트',
|
||||||
|
themeRiver: '스트림 그래프',
|
||||||
|
sunburst: '선버스트 차트',
|
||||||
|
custom: '맞춤 차트',
|
||||||
|
chart: '차트'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: '"{title}"에 대한 차트입니다.',
|
||||||
|
withoutTitle: '차트입니다.'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' 차트 유형은 {seriesType}이며 {seriesName}을 표시합니다.',
|
||||||
|
withoutName: ' 차트 유형은 {seriesType}입니다.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. {seriesCount} 하나의 차트 시리즈로 구성됩니다.',
|
||||||
|
withName: ' {seriesId}번째 시리즈는 {seriesName}을 나타내는 {seriesType} representing.',
|
||||||
|
withoutName: ' {seriesId}번째 시리즈는 {seriesType}입니다.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: '데이터: ',
|
||||||
|
partialData: '첫번째 {displayCnt} 아이템: ',
|
||||||
|
withName: '{name}의 데이터는 {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('KO', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Dutch.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'januari', 'februari', 'maart', 'april', 'mei', 'juni',
|
||||||
|
'juli', 'augustus', 'september', 'oktober', 'november', 'december'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
|
||||||
|
'jul', 'aug', 'sep', 'okt', 'nov', 'dec'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Alle',
|
||||||
|
inverse: 'Omgekeerd'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Vakselectie',
|
||||||
|
polygon: 'Lasso selectie',
|
||||||
|
lineX: 'Horizontale selectie',
|
||||||
|
lineY: 'Verticale selectie',
|
||||||
|
keep: 'Selecties behouden',
|
||||||
|
clear: 'Selecties wissen'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Gegevensweergave',
|
||||||
|
lang: ['Gegevensweergave', 'Sluiten', 'Vernieuwen']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Zoom herstellen'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Omzetten naar lijndiagram',
|
||||||
|
bar: 'Omzetten naar staafdiagram',
|
||||||
|
stack: 'Omzetten naar stapeldiagram',
|
||||||
|
tiled: 'Omzetten naar tegeldiagram'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Herstellen'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Opslaan als afbeelding',
|
||||||
|
lang: ['Klik rechtermuisknop om de afbeelding op te slaan']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Cirkeldiagram',
|
||||||
|
bar: 'Staafdiagram',
|
||||||
|
line: 'Lijndiagram',
|
||||||
|
scatter: 'Spreidingsdiagram',
|
||||||
|
effectScatter: 'Spreidingsdiagram met rimpeleffect',
|
||||||
|
radar: 'Radardiagram',
|
||||||
|
tree: 'Boomdiagram',
|
||||||
|
treemap: 'Boomkaart',
|
||||||
|
boxplot: 'Boxplot',
|
||||||
|
candlestick: 'Kandelaardiagram',
|
||||||
|
k: 'K-lijndiagram',
|
||||||
|
heatmap: 'Hittekaart',
|
||||||
|
map: 'Kaart',
|
||||||
|
parallel: 'Parallele coördinatendiagram',
|
||||||
|
lines: 'Lijnendiagram',
|
||||||
|
graph: 'Relatiediagram',
|
||||||
|
sankey: 'Sankey-diagram',
|
||||||
|
funnel: 'Trechterdiagram',
|
||||||
|
gauge: 'Graadmeter',
|
||||||
|
pictorialBar: 'Staafdiagram met afbeeldingen',
|
||||||
|
themeRiver: 'Thematische rivierdiagram',
|
||||||
|
sunburst: 'Zonnestraaldiagram',
|
||||||
|
custom: 'Aangepast diagram',
|
||||||
|
chart: 'Diagram'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Dit is een diagram over "{title}"',
|
||||||
|
withoutTitle: 'Dit is een diagram'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' van het type {seriesType} genaamd {seriesName}.',
|
||||||
|
withoutName: ' van het type {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Het bestaat uit {seriesCount} series.',
|
||||||
|
withName: ' De serie {seriesId} is een {seriesType} met de naam {seriesName}.',
|
||||||
|
withoutName: ' De serie {seriesId} is een {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'De gegevens zijn als volgt: ',
|
||||||
|
partialData: 'De eerste {displayCnt} items zijn: ',
|
||||||
|
withName: 'de gegevens voor {name} zijn {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Dutch.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'januari', 'februari', 'maart', 'april', 'mei', 'juni',
|
||||||
|
'juli', 'augustus', 'september', 'oktober', 'november', 'december'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
|
||||||
|
'jul', 'aug', 'sep', 'okt', 'nov', 'dec'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Alle',
|
||||||
|
inverse: 'Omgekeerd'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Vakselectie',
|
||||||
|
polygon: 'Lasso selectie',
|
||||||
|
lineX: 'Horizontale selectie',
|
||||||
|
lineY: 'Verticale selectie',
|
||||||
|
keep: 'Selecties behouden',
|
||||||
|
clear: 'Selecties wissen'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Gegevensweergave',
|
||||||
|
lang: ['Gegevensweergave', 'Sluiten', 'Vernieuwen']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Zoom herstellen'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Omzetten naar lijndiagram',
|
||||||
|
bar: 'Omzetten naar staafdiagram',
|
||||||
|
stack: 'Omzetten naar stapeldiagram',
|
||||||
|
tiled: 'Omzetten naar tegeldiagram'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Herstellen'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Opslaan als afbeelding',
|
||||||
|
lang: ['Klik rechtermuisknop om de afbeelding op te slaan']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Cirkeldiagram',
|
||||||
|
bar: 'Staafdiagram',
|
||||||
|
line: 'Lijndiagram',
|
||||||
|
scatter: 'Spreidingsdiagram',
|
||||||
|
effectScatter: 'Spreidingsdiagram met rimpeleffect',
|
||||||
|
radar: 'Radardiagram',
|
||||||
|
tree: 'Boomdiagram',
|
||||||
|
treemap: 'Boomkaart',
|
||||||
|
boxplot: 'Boxplot',
|
||||||
|
candlestick: 'Kandelaardiagram',
|
||||||
|
k: 'K-lijndiagram',
|
||||||
|
heatmap: 'Hittekaart',
|
||||||
|
map: 'Kaart',
|
||||||
|
parallel: 'Parallele coördinatendiagram',
|
||||||
|
lines: 'Lijnendiagram',
|
||||||
|
graph: 'Relatiediagram',
|
||||||
|
sankey: 'Sankey-diagram',
|
||||||
|
funnel: 'Trechterdiagram',
|
||||||
|
gauge: 'Graadmeter',
|
||||||
|
pictorialBar: 'Staafdiagram met afbeeldingen',
|
||||||
|
themeRiver: 'Thematische rivierdiagram',
|
||||||
|
sunburst: 'Zonnestraaldiagram',
|
||||||
|
custom: 'Aangepast diagram',
|
||||||
|
chart: 'Diagram'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Dit is een diagram over "{title}"',
|
||||||
|
withoutTitle: 'Dit is een diagram'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' van het type {seriesType} genaamd {seriesName}.',
|
||||||
|
withoutName: ' van het type {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Het bestaat uit {seriesCount} series.',
|
||||||
|
withName: ' De serie {seriesId} is een {seriesType} met de naam {seriesName}.',
|
||||||
|
withoutName: ' De serie {seriesId} is een {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'De gegevens zijn als volgt: ',
|
||||||
|
partialData: 'De eerste {displayCnt} items zijn: ',
|
||||||
|
withName: 'de gegevens voor {name} zijn {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('NL', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Polish
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec',
|
||||||
|
'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze',
|
||||||
|
'Lip', 'Sie', 'Wrz', 'Paź', 'Lis', 'Gru'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Nie', 'Pon', 'Wto', 'Śro', 'Czw', 'Pią', 'Sob'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Wszystko',
|
||||||
|
inverse: 'Odwróć'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Zaznaczenie prostokątne',
|
||||||
|
polygon: 'Zaznaczanie lasso',
|
||||||
|
lineX: 'Zaznaczenie poziome',
|
||||||
|
lineY: 'Zaznaczenie pionowe',
|
||||||
|
keep: 'Zachowaj zaznaczenie',
|
||||||
|
clear: 'Wyczyść zaznaczenie'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Widok danych',
|
||||||
|
lang: ['Widok danych', 'Zamknij', 'Odśwież']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Przybliżenie',
|
||||||
|
back: 'Resetuj przybliżenie'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Przełącz na wykres liniowy',
|
||||||
|
bar: 'Przełącz na wykres słupkowy',
|
||||||
|
stack: 'Przełącz na wykres słupkowy skumulowany',
|
||||||
|
tiled: 'Przełącz na kafelki'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Przywróć'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Zapisz jako obrazek',
|
||||||
|
lang: ['Kliknij prawym klawiszem myszy aby zapisać']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Wykres kołowy',
|
||||||
|
bar: 'Wykres słupkowy',
|
||||||
|
line: 'Wykres liniowy',
|
||||||
|
scatter: 'Wykres punktowy',
|
||||||
|
effectScatter: 'Wykres punktowy z efektem falowania',
|
||||||
|
radar: 'Wykres radarowy',
|
||||||
|
tree: 'Drzewo',
|
||||||
|
treemap: 'Mapa drzewa',
|
||||||
|
boxplot: 'Wykres pudełkowy',
|
||||||
|
candlestick: 'Wykres świecowy',
|
||||||
|
k: 'Wykres linii K',
|
||||||
|
heatmap: 'Mapa ciepła',
|
||||||
|
map: 'Mapa',
|
||||||
|
parallel: 'Wykres współrzędnych równoległych',
|
||||||
|
lines: 'Diagram linii',
|
||||||
|
graph: 'Graf relacji',
|
||||||
|
sankey: 'Wykres Sankeya',
|
||||||
|
funnel: 'Wykres lejkowy',
|
||||||
|
gauge: 'Wykres zegarowy',
|
||||||
|
pictorialBar: 'Wykres słupkowy obrazkowy',
|
||||||
|
themeRiver: 'Wykres rzeki tematycznej',
|
||||||
|
sunburst: 'Wykres hierarchiczny słonecznikowy',
|
||||||
|
custom: 'Wykres niestandardowy',
|
||||||
|
chart: 'Wykres'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'To jest wykres dotyczący "{title}"',
|
||||||
|
withoutTitle: 'To jest wykres'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' typu {seriesType} nazwana {seriesName}.',
|
||||||
|
withoutName: ' typu {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Składający się z {seriesCount} serii danych.',
|
||||||
|
withName: ' Seria danych {seriesId} jest serią typu {seriesType} przedstawiającą {seriesName}.',
|
||||||
|
withoutName: ' Seria danych {seriesId} jest serią typu {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Dane są następujące: ',
|
||||||
|
partialData: 'Pierwszych {displayCnt} elementów to: ',
|
||||||
|
withName: 'dane dla {name} to {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Polish
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec',
|
||||||
|
'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze',
|
||||||
|
'Lip', 'Sie', 'Wrz', 'Paź', 'Lis', 'Gru'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Nie', 'Pon', 'Wto', 'Śro', 'Czw', 'Pią', 'Sob'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Wszystko',
|
||||||
|
inverse: 'Odwróć'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Zaznaczenie prostokątne',
|
||||||
|
polygon: 'Zaznaczanie lasso',
|
||||||
|
lineX: 'Zaznaczenie poziome',
|
||||||
|
lineY: 'Zaznaczenie pionowe',
|
||||||
|
keep: 'Zachowaj zaznaczenie',
|
||||||
|
clear: 'Wyczyść zaznaczenie'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Widok danych',
|
||||||
|
lang: ['Widok danych', 'Zamknij', 'Odśwież']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Przybliżenie',
|
||||||
|
back: 'Resetuj przybliżenie'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Przełącz na wykres liniowy',
|
||||||
|
bar: 'Przełącz na wykres słupkowy',
|
||||||
|
stack: 'Przełącz na wykres słupkowy skumulowany',
|
||||||
|
tiled: 'Przełącz na kafelki'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Przywróć'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Zapisz jako obrazek',
|
||||||
|
lang: ['Kliknij prawym klawiszem myszy aby zapisać']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Wykres kołowy',
|
||||||
|
bar: 'Wykres słupkowy',
|
||||||
|
line: 'Wykres liniowy',
|
||||||
|
scatter: 'Wykres punktowy',
|
||||||
|
effectScatter: 'Wykres punktowy z efektem falowania',
|
||||||
|
radar: 'Wykres radarowy',
|
||||||
|
tree: 'Drzewo',
|
||||||
|
treemap: 'Mapa drzewa',
|
||||||
|
boxplot: 'Wykres pudełkowy',
|
||||||
|
candlestick: 'Wykres świecowy',
|
||||||
|
k: 'Wykres linii K',
|
||||||
|
heatmap: 'Mapa ciepła',
|
||||||
|
map: 'Mapa',
|
||||||
|
parallel: 'Wykres współrzędnych równoległych',
|
||||||
|
lines: 'Diagram linii',
|
||||||
|
graph: 'Graf relacji',
|
||||||
|
sankey: 'Wykres Sankeya',
|
||||||
|
funnel: 'Wykres lejkowy',
|
||||||
|
gauge: 'Wykres zegarowy',
|
||||||
|
pictorialBar: 'Wykres słupkowy obrazkowy',
|
||||||
|
themeRiver: 'Wykres rzeki tematycznej',
|
||||||
|
sunburst: 'Wykres hierarchiczny słonecznikowy',
|
||||||
|
custom: 'Wykres niestandardowy',
|
||||||
|
chart: 'Wykres'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'To jest wykres dotyczący "{title}"',
|
||||||
|
withoutTitle: 'To jest wykres'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' typu {seriesType} nazwana {seriesName}.',
|
||||||
|
withoutName: ' typu {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Składający się z {seriesCount} serii danych.',
|
||||||
|
withName: ' Seria danych {seriesId} jest serią typu {seriesType} przedstawiającą {seriesName}.',
|
||||||
|
withoutName: ' Seria danych {seriesId} jest serią typu {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Dane są następujące: ',
|
||||||
|
partialData: 'Pierwszych {displayCnt} elementów to: ',
|
||||||
|
withName: 'dane dla {name} to {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('PL', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,176 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Portuguese (Brazil).
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho',
|
||||||
|
'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun',
|
||||||
|
'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira',
|
||||||
|
'Quinta-feira', 'Sexta-feira', 'Sábado'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Todas',
|
||||||
|
inverse: 'Inv'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Seleção retangular',
|
||||||
|
polygon: 'Seleção em laço',
|
||||||
|
lineX: 'Selecionar horizontalmente',
|
||||||
|
lineY: 'Selecionar verticalmente',
|
||||||
|
keep: 'Manter seleções',
|
||||||
|
clear: 'Limpar seleções'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Exibição de dados',
|
||||||
|
lang: ['Exibição de dados', 'Fechar', 'Atualizar']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Restaurar Zoom'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Trocar para gráfico de linhas',
|
||||||
|
bar: 'Trocar para gráfico de barras',
|
||||||
|
stack: 'Empilhar',
|
||||||
|
tiled: 'Tile'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Restore'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Salvar como imagem',
|
||||||
|
lang: ['Clique com o botão direito para salvar imagem']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Gráfico de pizza',
|
||||||
|
bar: 'Gráfico de barras',
|
||||||
|
line: 'Gráfico de linhas',
|
||||||
|
scatter: 'Gráfico de dispersão',
|
||||||
|
effectScatter: 'Gráfico de dispersão ondulado',
|
||||||
|
radar: 'Gráfico radar',
|
||||||
|
tree: 'Árvore',
|
||||||
|
treemap: 'Treemap',
|
||||||
|
boxplot: 'Boxplot',
|
||||||
|
candlestick: 'Candlestick',
|
||||||
|
k: 'Gráfico K line',
|
||||||
|
heatmap: 'Mapa de calor',
|
||||||
|
map: 'Mapa',
|
||||||
|
parallel: 'Coordenadas paralelas',
|
||||||
|
lines: 'Gráfico de linhas',
|
||||||
|
graph: 'Relationship graph',
|
||||||
|
sankey: 'Gráfico Sankey',
|
||||||
|
funnel: 'Gráfico de funil',
|
||||||
|
gauge: 'Gauge',
|
||||||
|
pictorialBar: 'Pictorial bar',
|
||||||
|
themeRiver: 'Theme River Map',
|
||||||
|
sunburst: 'Sunburst',
|
||||||
|
custom: 'Gráfico personalizado',
|
||||||
|
chart: 'Gráfico'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Este é um gráfico entitulado "{title}"',
|
||||||
|
withoutTitle: 'Este é um gráfico'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' do tipo {seriesType} nomeada/nomeado como {seriesName}.',
|
||||||
|
withoutName: ' do tipo {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Consiste de {seriesCount} séries.',
|
||||||
|
withName: ' A {seriesId} série é um/uma {seriesType} representando {seriesName}.',
|
||||||
|
withoutName: ' A {seriesId} series é um/uma {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Os dados são: ',
|
||||||
|
partialData: 'As primeiros {displayCnt} itens são: ',
|
||||||
|
withName: 'os dados para {name} são {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,172 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Portuguese (Brazil).
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho',
|
||||||
|
'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun',
|
||||||
|
'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira',
|
||||||
|
'Quinta-feira', 'Sexta-feira', 'Sábado'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Todas',
|
||||||
|
inverse: 'Inv'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Seleção retangular',
|
||||||
|
polygon: 'Seleção em laço',
|
||||||
|
lineX: 'Selecionar horizontalmente',
|
||||||
|
lineY: 'Selecionar verticalmente',
|
||||||
|
keep: 'Manter seleções',
|
||||||
|
clear: 'Limpar seleções'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Exibição de dados',
|
||||||
|
lang: ['Exibição de dados', 'Fechar', 'Atualizar']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Restaurar Zoom'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Trocar para gráfico de linhas',
|
||||||
|
bar: 'Trocar para gráfico de barras',
|
||||||
|
stack: 'Empilhar',
|
||||||
|
tiled: 'Tile'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Restore'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Salvar como imagem',
|
||||||
|
lang: ['Clique com o botão direito para salvar imagem']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Gráfico de pizza',
|
||||||
|
bar: 'Gráfico de barras',
|
||||||
|
line: 'Gráfico de linhas',
|
||||||
|
scatter: 'Gráfico de dispersão',
|
||||||
|
effectScatter: 'Gráfico de dispersão ondulado',
|
||||||
|
radar: 'Gráfico radar',
|
||||||
|
tree: 'Árvore',
|
||||||
|
treemap: 'Treemap',
|
||||||
|
boxplot: 'Boxplot',
|
||||||
|
candlestick: 'Candlestick',
|
||||||
|
k: 'Gráfico K line',
|
||||||
|
heatmap: 'Mapa de calor',
|
||||||
|
map: 'Mapa',
|
||||||
|
parallel: 'Coordenadas paralelas',
|
||||||
|
lines: 'Gráfico de linhas',
|
||||||
|
graph: 'Relationship graph',
|
||||||
|
sankey: 'Gráfico Sankey',
|
||||||
|
funnel: 'Gráfico de funil',
|
||||||
|
gauge: 'Gauge',
|
||||||
|
pictorialBar: 'Pictorial bar',
|
||||||
|
themeRiver: 'Theme River Map',
|
||||||
|
sunburst: 'Sunburst',
|
||||||
|
custom: 'Gráfico personalizado',
|
||||||
|
chart: 'Gráfico'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Este é um gráfico entitulado "{title}"',
|
||||||
|
withoutTitle: 'Este é um gráfico'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' do tipo {seriesType} nomeada/nomeado como {seriesName}.',
|
||||||
|
withoutName: ' do tipo {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Consiste de {seriesCount} séries.',
|
||||||
|
withName: ' A {seriesId} série é um/uma {seriesType} representando {seriesName}.',
|
||||||
|
withoutName: ' A {seriesId} series é um/uma {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Os dados são: ',
|
||||||
|
partialData: 'As primeiros {displayCnt} itens são: ',
|
||||||
|
withName: 'os dados para {name} são {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('PT-br', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Romanian.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'ianuarie', 'februarie', 'martie', 'aprilie', 'mai', 'iunie',
|
||||||
|
'iulie', 'august', 'septembrie', 'octombrie', 'noiembrie', 'decembrie'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'ian.', 'febr.', 'mart.', 'apr.', 'mai', 'iun.',
|
||||||
|
'iul.', 'aug.', 'sept.', 'oct.', 'nov.', 'dec.'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Duminică', 'Luni', 'Marți', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'du.', 'lu.', 'ma.', 'mi.', 'jo.', 'vi.', 'sâ.'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Toate',
|
||||||
|
inverse: 'Inversează'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Selecție dreptunghiulară',
|
||||||
|
polygon: 'Selecție lasso',
|
||||||
|
lineX: 'Selecție orizontală',
|
||||||
|
lineY: 'Selecție verticală',
|
||||||
|
keep: 'Păstrează selecția',
|
||||||
|
clear: 'Șterge selecția'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Vizualizarea datelor',
|
||||||
|
lang: ['Vizualizarea datelor', 'Închide', 'Reîmprospătează']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Resetează zoom'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Comută la diagramă cu linii',
|
||||||
|
bar: 'Comută la diagramă cu bare',
|
||||||
|
stack: 'Suprapune',
|
||||||
|
tiled: 'Alătură'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Resetează'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Salvează ca imagine',
|
||||||
|
lang: ['Clic dreapta pentru a salva ca imagine']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Diagramă radială',
|
||||||
|
bar: 'Diagramă cu bare',
|
||||||
|
line: 'Diagramă cu linii',
|
||||||
|
scatter: 'Diagramă de dispersie',
|
||||||
|
effectScatter: 'Diagramă de dispersie stilizată',
|
||||||
|
radar: 'Diagramă radar',
|
||||||
|
tree: 'Arbore',
|
||||||
|
treemap: 'Hartă de arbori',
|
||||||
|
boxplot: 'Diagramă boxbare',
|
||||||
|
candlestick: 'Diagramă bursieră',
|
||||||
|
k: 'Diagramă cu linii K',
|
||||||
|
heatmap: 'Hartă termografică',
|
||||||
|
map: 'Hartă',
|
||||||
|
parallel: 'Hartă de coordonate paralele',
|
||||||
|
lines: 'Linii',
|
||||||
|
graph: 'Graf',
|
||||||
|
sankey: 'Diagramă Sankey',
|
||||||
|
funnel: 'Diagramă pâlnie',
|
||||||
|
gauge: 'Calibru',
|
||||||
|
pictorialBar: 'Diagramă cu bare picturale',
|
||||||
|
themeRiver: 'Streamgraph',
|
||||||
|
sunburst: 'Diagramă rază de soare',
|
||||||
|
custom: 'Diagramă personalizată',
|
||||||
|
chart: 'Diagramă'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Aceasta este o diagrmă despre "{title}"',
|
||||||
|
withoutTitle: 'Aceasta este o diagramă'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' de tipul {seriesType} denumită {seriesName}.',
|
||||||
|
withoutName: ' de tipul {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Este alcătuită din {seriesCount} serii.',
|
||||||
|
withName: ' Seria {seriesId} este de tipul {seriesType} și reprezintă {seriesName}.',
|
||||||
|
withoutName: ' Seria {seriesId} este de tipul {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Datele sunt: ',
|
||||||
|
partialData: 'Primele {displayCnt} elemente sunt: ',
|
||||||
|
withName: 'datele pentru {name} sunt {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Romanian.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'ianuarie', 'februarie', 'martie', 'aprilie', 'mai', 'iunie',
|
||||||
|
'iulie', 'august', 'septembrie', 'octombrie', 'noiembrie', 'decembrie'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'ian.', 'febr.', 'mart.', 'apr.', 'mai', 'iun.',
|
||||||
|
'iul.', 'aug.', 'sept.', 'oct.', 'nov.', 'dec.'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Duminică', 'Luni', 'Marți', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'du.', 'lu.', 'ma.', 'mi.', 'jo.', 'vi.', 'sâ.'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Toate',
|
||||||
|
inverse: 'Inversează'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Selecție dreptunghiulară',
|
||||||
|
polygon: 'Selecție lasso',
|
||||||
|
lineX: 'Selecție orizontală',
|
||||||
|
lineY: 'Selecție verticală',
|
||||||
|
keep: 'Păstrează selecția',
|
||||||
|
clear: 'Șterge selecția'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Vizualizarea datelor',
|
||||||
|
lang: ['Vizualizarea datelor', 'Închide', 'Reîmprospătează']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Zoom',
|
||||||
|
back: 'Resetează zoom'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Comută la diagramă cu linii',
|
||||||
|
bar: 'Comută la diagramă cu bare',
|
||||||
|
stack: 'Suprapune',
|
||||||
|
tiled: 'Alătură'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Resetează'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Salvează ca imagine',
|
||||||
|
lang: ['Clic dreapta pentru a salva ca imagine']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Diagramă radială',
|
||||||
|
bar: 'Diagramă cu bare',
|
||||||
|
line: 'Diagramă cu linii',
|
||||||
|
scatter: 'Diagramă de dispersie',
|
||||||
|
effectScatter: 'Diagramă de dispersie stilizată',
|
||||||
|
radar: 'Diagramă radar',
|
||||||
|
tree: 'Arbore',
|
||||||
|
treemap: 'Hartă de arbori',
|
||||||
|
boxplot: 'Diagramă boxbare',
|
||||||
|
candlestick: 'Diagramă bursieră',
|
||||||
|
k: 'Diagramă cu linii K',
|
||||||
|
heatmap: 'Hartă termografică',
|
||||||
|
map: 'Hartă',
|
||||||
|
parallel: 'Hartă de coordonate paralele',
|
||||||
|
lines: 'Linii',
|
||||||
|
graph: 'Graf',
|
||||||
|
sankey: 'Diagramă Sankey',
|
||||||
|
funnel: 'Diagramă pâlnie',
|
||||||
|
gauge: 'Calibru',
|
||||||
|
pictorialBar: 'Diagramă cu bare picturale',
|
||||||
|
themeRiver: 'Streamgraph',
|
||||||
|
sunburst: 'Diagramă rază de soare',
|
||||||
|
custom: 'Diagramă personalizată',
|
||||||
|
chart: 'Diagramă'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Aceasta este o diagrmă despre "{title}"',
|
||||||
|
withoutTitle: 'Aceasta este o diagramă'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' de tipul {seriesType} denumită {seriesName}.',
|
||||||
|
withoutName: ' de tipul {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Este alcătuită din {seriesCount} serii.',
|
||||||
|
withName: ' Seria {seriesId} este de tipul {seriesType} și reprezintă {seriesName}.',
|
||||||
|
withoutName: ' Seria {seriesId} este de tipul {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Datele sunt: ',
|
||||||
|
partialData: 'Primele {displayCnt} elemente sunt: ',
|
||||||
|
withName: 'datele pentru {name} sunt {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('RO', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,176 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Russian.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
|
||||||
|
'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн',
|
||||||
|
'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Всё',
|
||||||
|
inverse: 'Обратить'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Выделить область',
|
||||||
|
polygon: 'Инструмент «Лассо»',
|
||||||
|
lineX: 'Горизонтальное выделение',
|
||||||
|
lineY: 'Вертикальное выделение',
|
||||||
|
keep: 'Оставить выбранное',
|
||||||
|
clear: 'Очистить выбранное'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Данные',
|
||||||
|
lang: ['Данные', 'Закрыть', 'Обновить']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Увеличить',
|
||||||
|
back: 'Сбросить увеличение'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Переключиться на линейный график',
|
||||||
|
bar: 'Переключиться на столбчатую диаграмму',
|
||||||
|
stack: 'Стопка',
|
||||||
|
tiled: 'Плитка'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Восстановить'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Сохранить картинку',
|
||||||
|
lang: ['Правый клик, чтобы сохранить картинку']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Круговая диаграмма',
|
||||||
|
bar: 'Столбчатая диаграмма',
|
||||||
|
line: 'Линейный график',
|
||||||
|
scatter: 'Точечная диаграмма',
|
||||||
|
effectScatter: 'Точечная диаграмма с волнами',
|
||||||
|
radar: 'Лепестковая диаграмма',
|
||||||
|
tree: 'Дерево',
|
||||||
|
treemap: 'Плоское дерево',
|
||||||
|
boxplot: 'Ящик с усами',
|
||||||
|
candlestick: 'Свечной график',
|
||||||
|
k: 'График К-линий',
|
||||||
|
heatmap: 'Тепловая карта',
|
||||||
|
map: 'Карта',
|
||||||
|
parallel: 'Диаграмма параллельных координат',
|
||||||
|
lines: 'Линейный граф',
|
||||||
|
graph: 'Граф отношений',
|
||||||
|
sankey: 'Диаграмма Санкей',
|
||||||
|
funnel: 'Воронкообразная диаграмма',
|
||||||
|
gauge: 'Шкала',
|
||||||
|
pictorialBar: 'Столбец-картинка',
|
||||||
|
themeRiver: 'Тематическая река',
|
||||||
|
sunburst: 'Солнечные лучи',
|
||||||
|
custom: 'Пользовательская диаграмма',
|
||||||
|
chart: 'диаграмма'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Это график, показывающий "{title}"',
|
||||||
|
withoutTitle: 'Это график'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' с типом {seriesType} и именем {seriesName}.',
|
||||||
|
withoutName: ' с типом {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Он состоит из {seriesCount} серий.',
|
||||||
|
withName:
|
||||||
|
' Серия {seriesId} имеет тип {seriesType} и показывает {seriesName}.',
|
||||||
|
withoutName: ' Серия {seriesId} имеет тип {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Данные таковы: ',
|
||||||
|
partialData: 'Первые {displayCnt} элементов: ',
|
||||||
|
withName: 'значение для {name} — {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,172 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Russian.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
|
||||||
|
'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн',
|
||||||
|
'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Всё',
|
||||||
|
inverse: 'Обратить'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Выделить область',
|
||||||
|
polygon: 'Инструмент «Лассо»',
|
||||||
|
lineX: 'Горизонтальное выделение',
|
||||||
|
lineY: 'Вертикальное выделение',
|
||||||
|
keep: 'Оставить выбранное',
|
||||||
|
clear: 'Очистить выбранное'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Данные',
|
||||||
|
lang: ['Данные', 'Закрыть', 'Обновить']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Увеличить',
|
||||||
|
back: 'Сбросить увеличение'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Переключиться на линейный график',
|
||||||
|
bar: 'Переключиться на столбчатую диаграмму',
|
||||||
|
stack: 'Стопка',
|
||||||
|
tiled: 'Плитка'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Восстановить'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Сохранить картинку',
|
||||||
|
lang: ['Правый клик, чтобы сохранить картинку']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Круговая диаграмма',
|
||||||
|
bar: 'Столбчатая диаграмма',
|
||||||
|
line: 'Линейный график',
|
||||||
|
scatter: 'Точечная диаграмма',
|
||||||
|
effectScatter: 'Точечная диаграмма с волнами',
|
||||||
|
radar: 'Лепестковая диаграмма',
|
||||||
|
tree: 'Дерево',
|
||||||
|
treemap: 'Плоское дерево',
|
||||||
|
boxplot: 'Ящик с усами',
|
||||||
|
candlestick: 'Свечной график',
|
||||||
|
k: 'График К-линий',
|
||||||
|
heatmap: 'Тепловая карта',
|
||||||
|
map: 'Карта',
|
||||||
|
parallel: 'Диаграмма параллельных координат',
|
||||||
|
lines: 'Линейный граф',
|
||||||
|
graph: 'Граф отношений',
|
||||||
|
sankey: 'Диаграмма Санкей',
|
||||||
|
funnel: 'Воронкообразная диаграмма',
|
||||||
|
gauge: 'Шкала',
|
||||||
|
pictorialBar: 'Столбец-картинка',
|
||||||
|
themeRiver: 'Тематическая река',
|
||||||
|
sunburst: 'Солнечные лучи',
|
||||||
|
custom: 'Пользовательская диаграмма',
|
||||||
|
chart: 'диаграмма'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Это график, показывающий "{title}"',
|
||||||
|
withoutTitle: 'Это график'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' с типом {seriesType} и именем {seriesName}.',
|
||||||
|
withoutName: ' с типом {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Он состоит из {seriesCount} серий.',
|
||||||
|
withName:
|
||||||
|
' Серия {seriesId} имеет тип {seriesType} и показывает {seriesName}.',
|
||||||
|
withoutName: ' Серия {seriesId} имеет тип {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Данные таковы: ',
|
||||||
|
partialData: 'Первые {displayCnt} элементов: ',
|
||||||
|
withName: 'значение для {name} — {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('RU', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Slovenian.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Januar', 'Februar', 'Marec', 'April', 'Maj', 'Junij',
|
||||||
|
'Julij', 'Avgust', 'September', 'Oktober', 'November', 'December'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun',
|
||||||
|
'Jul', 'Avg', 'Sep', 'Okt', 'Nov', 'Dec'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Nedelja', 'Ponedeljek', 'Torek', 'Sreda', 'Četrtek', 'Petek', 'Sobota'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Ned', 'Pon', 'Tor', 'Sre', 'Čet', 'Pet', 'Sob'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Vsi',
|
||||||
|
inverse: 'Obratno'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Izbor s pravokotnikom',
|
||||||
|
polygon: 'Izbor z lasom',
|
||||||
|
lineX: 'Vodoravni izbor',
|
||||||
|
lineY: 'Navpični izbor',
|
||||||
|
keep: 'Ohrani izbor',
|
||||||
|
clear: 'Počisti izbor'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Pogled podatkov',
|
||||||
|
lang: ['Pogled podatkov', 'Zapri', 'Osveži']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Približaj',
|
||||||
|
back: 'Povrni velikost'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Preklopi na črtni grafikon',
|
||||||
|
bar: 'Preklopi na stolpčni grafikon',
|
||||||
|
stack: 'Naloži',
|
||||||
|
tiled: 'Drug ob drugem'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Povrni'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Shrani kot sliko',
|
||||||
|
lang: ['Z desnim klikom shrani sliko']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Tortni grafikon',
|
||||||
|
bar: 'Stolpčni grafikon',
|
||||||
|
line: 'Črtni grafikon',
|
||||||
|
scatter: 'Raztreseni grafikon',
|
||||||
|
effectScatter: 'Raztreseni grafikon z efektom',
|
||||||
|
radar: 'Radarski grafikon',
|
||||||
|
tree: 'Drevo',
|
||||||
|
treemap: 'Drevesna struktura',
|
||||||
|
boxplot: 'Boxplot grafikon',
|
||||||
|
candlestick: 'Svečni grafikon',
|
||||||
|
k: 'K line grafikon',
|
||||||
|
heatmap: 'Toplotni zemljevid',
|
||||||
|
map: 'Zemljevid',
|
||||||
|
parallel: 'Zemljevid vzporednih koordinat',
|
||||||
|
lines: 'Črtni grafikon',
|
||||||
|
graph: 'Grafikon razmerij',
|
||||||
|
sankey: 'Sankey grafikon',
|
||||||
|
funnel: 'Lijakasti grafikon',
|
||||||
|
gauge: 'Števec',
|
||||||
|
pictorialBar: 'Stolpčni grafikon s podobo',
|
||||||
|
themeRiver: 'Tematski rečni grafikon',
|
||||||
|
sunburst: 'Večnivojski tortni grafikon',
|
||||||
|
custom: 'Grafikon po meri',
|
||||||
|
chart: 'Grafikon'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'To je grafikon z naslovom "{title}"',
|
||||||
|
withoutTitle: 'To je grafikon'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' tipa {seriesType} imenovan {seriesName}.',
|
||||||
|
withoutName: ' tipa {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Sestavljen iz {seriesCount} nizov.',
|
||||||
|
withName: ' Niz {seriesId} je tipa {seriesType} z nazivom {seriesName}.',
|
||||||
|
withoutName: ' Niz {seriesId} je tipa {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Podatki so naslednji: ',
|
||||||
|
partialData: 'Prvih {displayCnt} elementov je: ',
|
||||||
|
withName: 'podatek za {name} je {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Slovenian.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Januar', 'Februar', 'Marec', 'April', 'Maj', 'Junij',
|
||||||
|
'Julij', 'Avgust', 'September', 'Oktober', 'November', 'December'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun',
|
||||||
|
'Jul', 'Avg', 'Sep', 'Okt', 'Nov', 'Dec'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Nedelja', 'Ponedeljek', 'Torek', 'Sreda', 'Četrtek', 'Petek', 'Sobota'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Ned', 'Pon', 'Tor', 'Sre', 'Čet', 'Pet', 'Sob'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Vsi',
|
||||||
|
inverse: 'Obratno'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Izbor s pravokotnikom',
|
||||||
|
polygon: 'Izbor z lasom',
|
||||||
|
lineX: 'Vodoravni izbor',
|
||||||
|
lineY: 'Navpični izbor',
|
||||||
|
keep: 'Ohrani izbor',
|
||||||
|
clear: 'Počisti izbor'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Pogled podatkov',
|
||||||
|
lang: ['Pogled podatkov', 'Zapri', 'Osveži']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Približaj',
|
||||||
|
back: 'Povrni velikost'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Preklopi na črtni grafikon',
|
||||||
|
bar: 'Preklopi na stolpčni grafikon',
|
||||||
|
stack: 'Naloži',
|
||||||
|
tiled: 'Drug ob drugem'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Povrni'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Shrani kot sliko',
|
||||||
|
lang: ['Z desnim klikom shrani sliko']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Tortni grafikon',
|
||||||
|
bar: 'Stolpčni grafikon',
|
||||||
|
line: 'Črtni grafikon',
|
||||||
|
scatter: 'Raztreseni grafikon',
|
||||||
|
effectScatter: 'Raztreseni grafikon z efektom',
|
||||||
|
radar: 'Radarski grafikon',
|
||||||
|
tree: 'Drevo',
|
||||||
|
treemap: 'Drevesna struktura',
|
||||||
|
boxplot: 'Boxplot grafikon',
|
||||||
|
candlestick: 'Svečni grafikon',
|
||||||
|
k: 'K line grafikon',
|
||||||
|
heatmap: 'Toplotni zemljevid',
|
||||||
|
map: 'Zemljevid',
|
||||||
|
parallel: 'Zemljevid vzporednih koordinat',
|
||||||
|
lines: 'Črtni grafikon',
|
||||||
|
graph: 'Grafikon razmerij',
|
||||||
|
sankey: 'Sankey grafikon',
|
||||||
|
funnel: 'Lijakasti grafikon',
|
||||||
|
gauge: 'Števec',
|
||||||
|
pictorialBar: 'Stolpčni grafikon s podobo',
|
||||||
|
themeRiver: 'Tematski rečni grafikon',
|
||||||
|
sunburst: 'Večnivojski tortni grafikon',
|
||||||
|
custom: 'Grafikon po meri',
|
||||||
|
chart: 'Grafikon'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'To je grafikon z naslovom "{title}"',
|
||||||
|
withoutTitle: 'To je grafikon'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' tipa {seriesType} imenovan {seriesName}.',
|
||||||
|
withoutName: ' tipa {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Sestavljen iz {seriesCount} nizov.',
|
||||||
|
withName: ' Niz {seriesId} je tipa {seriesType} z nazivom {seriesName}.',
|
||||||
|
withoutName: ' Niz {seriesId} je tipa {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Podatki so naslednji: ',
|
||||||
|
partialData: 'Prvih {displayCnt} elementov je: ',
|
||||||
|
withName: 'podatek za {name} je {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('SI', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน',
|
||||||
|
'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.',
|
||||||
|
'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'วันอาทิตย์', 'วันจันทร์', 'วันอังคาร', 'วันพุธ', 'วันพฤหัสบดี', 'วันศุกร์', 'วันเสาร์'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'ทั้งหมด',
|
||||||
|
inverse: 'ผกผัน'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'ตัวเลือกแบบกล่อง',
|
||||||
|
polygon: 'ตัวเลือกแบบบ่วงบาศ',
|
||||||
|
lineX: 'ตัวเลือกแบบแนวนอน',
|
||||||
|
lineY: 'ตัวเลือกแบบแนวตั้ง',
|
||||||
|
keep: 'บันทึกตัวเลือก',
|
||||||
|
clear: 'ล้างตัวเลือก'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'มุมมองข้อมูล',
|
||||||
|
lang: ['มุมมองข้อมูล', 'ปิด', 'รีเฟรช']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'ซูม',
|
||||||
|
back: 'ตั้งซูมใหม่'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'สวิตซ์แบบแผนภาพเส้น',
|
||||||
|
bar: 'สวิตซ์แบบแผนภาพแท่ง',
|
||||||
|
stack: 'กองไว้',
|
||||||
|
tiled: 'แยกไว้'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'ตั้งค่าใหม่'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'บันทึกไปยังรูปภาพ',
|
||||||
|
lang: ['คลิกขวาเพื่อบันทึกรูปภาพ']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'แผนภูมิวงกลม',
|
||||||
|
bar: 'แผนภูมิแท่ง',
|
||||||
|
line: 'แผนภูมิเส้น',
|
||||||
|
scatter: 'แผนภูมิกระจาย',
|
||||||
|
effectScatter: 'แผนภูมิกระจายคลื่น',
|
||||||
|
radar: 'แผนภูมิเรดาร์',
|
||||||
|
tree: 'ต้นไม้',
|
||||||
|
treemap: 'แผนที่ต้นไม้',
|
||||||
|
boxplot: 'แผนภูมิกล่อง',
|
||||||
|
candlestick: 'แผนภูมิเทียน',
|
||||||
|
k: 'แผนภูมิเส้น K',
|
||||||
|
heatmap: 'แผนที่ความร้อน',
|
||||||
|
map: 'แผนที่',
|
||||||
|
parallel: 'แผนที่พิกัดขนาน',
|
||||||
|
lines: 'กราฟเส้น',
|
||||||
|
graph: 'กราฟความสัมพันธ์',
|
||||||
|
sankey: 'แผนภูมิซันกีย์',
|
||||||
|
funnel: 'แผนภูมิกรวย',
|
||||||
|
gauge: 'เกจ',
|
||||||
|
pictorialBar: 'แผนภูมิแท่งภาพ',
|
||||||
|
themeRiver: 'แผนที่แม่น้ำธีม',
|
||||||
|
sunburst: 'Sunburst',
|
||||||
|
custom: 'แผนภูมิที่กำหนดเอง',
|
||||||
|
chart: 'แผนภูมิ'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'นี่คือแผนภูมิเกี่ยวกับ “{title}”',
|
||||||
|
withoutTitle: 'นี่คือแผนภูมิ'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' ด้วยประเภท {seriesType} ชื่อ {seriesName} ',
|
||||||
|
withoutName: ' ด้วยประเภท {seriesType} '
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: ' มีทั้งหมด {seriesCount} ชุดข้อมูล ',
|
||||||
|
withName: ' ชุดข้อมูลที่ {seriesId} เป็นประเภท {seriesType} แทน {seriesName} ',
|
||||||
|
withoutName: ' ชุดข้อมูลที่ {seriesId} เป็นประเภท {seriesType} ',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'ข้อมูลดังต่อไปนี้: ',
|
||||||
|
partialData: 'ข้อมูล {displayCnt} รายการแรกคือ: ',
|
||||||
|
withName: 'ข้อมูลสำหรับ {name} คือ {value} ',
|
||||||
|
withoutName: '{value} ',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,167 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน',
|
||||||
|
'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.',
|
||||||
|
'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'วันอาทิตย์', 'วันจันทร์', 'วันอังคาร', 'วันพุธ', 'วันพฤหัสบดี', 'วันศุกร์', 'วันเสาร์'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'ทั้งหมด',
|
||||||
|
inverse: 'ผกผัน'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'ตัวเลือกแบบกล่อง',
|
||||||
|
polygon: 'ตัวเลือกแบบบ่วงบาศ',
|
||||||
|
lineX: 'ตัวเลือกแบบแนวนอน',
|
||||||
|
lineY: 'ตัวเลือกแบบแนวตั้ง',
|
||||||
|
keep: 'บันทึกตัวเลือก',
|
||||||
|
clear: 'ล้างตัวเลือก'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'มุมมองข้อมูล',
|
||||||
|
lang: ['มุมมองข้อมูล', 'ปิด', 'รีเฟรช']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'ซูม',
|
||||||
|
back: 'ตั้งซูมใหม่'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'สวิตซ์แบบแผนภาพเส้น',
|
||||||
|
bar: 'สวิตซ์แบบแผนภาพแท่ง',
|
||||||
|
stack: 'กองไว้',
|
||||||
|
tiled: 'แยกไว้'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'ตั้งค่าใหม่'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'บันทึกไปยังรูปภาพ',
|
||||||
|
lang: ['คลิกขวาเพื่อบันทึกรูปภาพ']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'แผนภูมิวงกลม',
|
||||||
|
bar: 'แผนภูมิแท่ง',
|
||||||
|
line: 'แผนภูมิเส้น',
|
||||||
|
scatter: 'แผนภูมิกระจาย',
|
||||||
|
effectScatter: 'แผนภูมิกระจายคลื่น',
|
||||||
|
radar: 'แผนภูมิเรดาร์',
|
||||||
|
tree: 'ต้นไม้',
|
||||||
|
treemap: 'แผนที่ต้นไม้',
|
||||||
|
boxplot: 'แผนภูมิกล่อง',
|
||||||
|
candlestick: 'แผนภูมิเทียน',
|
||||||
|
k: 'แผนภูมิเส้น K',
|
||||||
|
heatmap: 'แผนที่ความร้อน',
|
||||||
|
map: 'แผนที่',
|
||||||
|
parallel: 'แผนที่พิกัดขนาน',
|
||||||
|
lines: 'กราฟเส้น',
|
||||||
|
graph: 'กราฟความสัมพันธ์',
|
||||||
|
sankey: 'แผนภูมิซันกีย์',
|
||||||
|
funnel: 'แผนภูมิกรวย',
|
||||||
|
gauge: 'เกจ',
|
||||||
|
pictorialBar: 'แผนภูมิแท่งภาพ',
|
||||||
|
themeRiver: 'แผนที่แม่น้ำธีม',
|
||||||
|
sunburst: 'Sunburst',
|
||||||
|
custom: 'แผนภูมิที่กำหนดเอง',
|
||||||
|
chart: 'แผนภูมิ'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'นี่คือแผนภูมิเกี่ยวกับ “{title}”',
|
||||||
|
withoutTitle: 'นี่คือแผนภูมิ'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' ด้วยประเภท {seriesType} ชื่อ {seriesName} ',
|
||||||
|
withoutName: ' ด้วยประเภท {seriesType} '
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: ' มีทั้งหมด {seriesCount} ชุดข้อมูล ',
|
||||||
|
withName: ' ชุดข้อมูลที่ {seriesId} เป็นประเภท {seriesType} แทน {seriesName} ',
|
||||||
|
withoutName: ' ชุดข้อมูลที่ {seriesId} เป็นประเภท {seriesType} ',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'ข้อมูลดังต่อไปนี้: ',
|
||||||
|
partialData: 'ข้อมูล {displayCnt} รายการแรกคือ: ',
|
||||||
|
withName: 'ข้อมูลสำหรับ {name} คือ {value} ',
|
||||||
|
withoutName: '{value} ',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('TH', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Türkçe.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran',
|
||||||
|
'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Oca', 'Şub', 'Mar', 'Nis', 'May', 'Haz',
|
||||||
|
'Tem', 'Agu', 'Eyl', 'Eki', 'Kas', 'Ara'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Pazar', 'Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Paz', 'Pzt', 'Sal', 'Çrş', 'Prş', 'Cum', 'Cts'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Tümünü Seç',
|
||||||
|
inverse: 'Seçimi Ters Çevir'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Dikdörtgen Seçimi',
|
||||||
|
polygon: 'Kement Seçimi',
|
||||||
|
lineX: 'Yatay Seçim',
|
||||||
|
lineY: 'Dikey Seçim',
|
||||||
|
keep: 'Seçimi Koru',
|
||||||
|
clear: 'Seçimi Sil'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Veri Görünümü',
|
||||||
|
lang: ['Veri Görünümü', 'Kapat', 'Yenile']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Yakınlaştır/Uzaklaştır',
|
||||||
|
back: 'Yakınlaştırmayı Sıfırla'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Çizgisel Grafiğe Çevir',
|
||||||
|
bar: 'Çubuk Grafiğe Çevir',
|
||||||
|
stack: 'Yığın',
|
||||||
|
tiled: 'Blok'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Eski Haline Getir'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Resim Olarak Kaydet',
|
||||||
|
lang: ['Resim Olarak Kaydetmek için Sağ Tıklayın']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Pasta Grafiği',
|
||||||
|
bar: 'Çubuk Grafik',
|
||||||
|
line: 'Çizgi Grafiği',
|
||||||
|
scatter: 'Dağılım Grafiği',
|
||||||
|
effectScatter: 'Dalga Efekt Dağılım Grafiği',
|
||||||
|
radar: 'Radar Grafiği',
|
||||||
|
tree: 'Ağaç Grafiği',
|
||||||
|
treemap: 'Ağaç Haritası',
|
||||||
|
boxplot: 'Kutu Grafiği',
|
||||||
|
candlestick: 'Şamdan Grafik',
|
||||||
|
k: 'K Çizgi Grafiği',
|
||||||
|
heatmap: 'Sıcaklık Haritası',
|
||||||
|
map: 'Harita',
|
||||||
|
parallel: 'Paralel Koordinat Haritası',
|
||||||
|
lines: 'Çizgisel Grafik',
|
||||||
|
graph: 'İlişkisel Grafik',
|
||||||
|
sankey: 'Sankey Diagramı',
|
||||||
|
funnel: 'Huni Grafik',
|
||||||
|
gauge: 'Gösterge',
|
||||||
|
pictorialBar: 'Resimli Çubuk Grafiği',
|
||||||
|
themeRiver: 'Akış Haritası',
|
||||||
|
sunburst: 'Güeş Patlaması Tablosu',
|
||||||
|
custom: 'Özel grafik',
|
||||||
|
chart: 'Grafiği'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Bu grafik "{title}" içindir.',
|
||||||
|
withoutTitle: 'Bu Bir Grafiktir.'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' Grafik Türü {seriesType} ve {seriesName} gösteriyor.',
|
||||||
|
withoutName: ' {seriesType} tipinde grafik.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. {seriesCount} kadar grafik sayısından oluşur.',
|
||||||
|
withName: ' {seriesId}.serisi {seriesName} adını temsil eden bir {seriesType} temsil eder.',
|
||||||
|
withoutName: ' {seriesId}. serisi bir {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Veriler Aşağıdaki Gibidir: ',
|
||||||
|
partialData: 'İlk {displayCnt} öğesi: ',
|
||||||
|
withName: ' {value} için {name}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Türkçe.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran',
|
||||||
|
'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Oca', 'Şub', 'Mar', 'Nis', 'May', 'Haz',
|
||||||
|
'Tem', 'Agu', 'Eyl', 'Eki', 'Kas', 'Ara'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Pazar', 'Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'Paz', 'Pzt', 'Sal', 'Çrş', 'Prş', 'Cum', 'Cts'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Tümünü Seç',
|
||||||
|
inverse: 'Seçimi Ters Çevir'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Dikdörtgen Seçimi',
|
||||||
|
polygon: 'Kement Seçimi',
|
||||||
|
lineX: 'Yatay Seçim',
|
||||||
|
lineY: 'Dikey Seçim',
|
||||||
|
keep: 'Seçimi Koru',
|
||||||
|
clear: 'Seçimi Sil'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Veri Görünümü',
|
||||||
|
lang: ['Veri Görünümü', 'Kapat', 'Yenile']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Yakınlaştır/Uzaklaştır',
|
||||||
|
back: 'Yakınlaştırmayı Sıfırla'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Çizgisel Grafiğe Çevir',
|
||||||
|
bar: 'Çubuk Grafiğe Çevir',
|
||||||
|
stack: 'Yığın',
|
||||||
|
tiled: 'Blok'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Eski Haline Getir'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Resim Olarak Kaydet',
|
||||||
|
lang: ['Resim Olarak Kaydetmek için Sağ Tıklayın']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Pasta Grafiği',
|
||||||
|
bar: 'Çubuk Grafik',
|
||||||
|
line: 'Çizgi Grafiği',
|
||||||
|
scatter: 'Dağılım Grafiği',
|
||||||
|
effectScatter: 'Dalga Efekt Dağılım Grafiği',
|
||||||
|
radar: 'Radar Grafiği',
|
||||||
|
tree: 'Ağaç Grafiği',
|
||||||
|
treemap: 'Ağaç Haritası',
|
||||||
|
boxplot: 'Kutu Grafiği',
|
||||||
|
candlestick: 'Şamdan Grafik',
|
||||||
|
k: 'K Çizgi Grafiği',
|
||||||
|
heatmap: 'Sıcaklık Haritası',
|
||||||
|
map: 'Harita',
|
||||||
|
parallel: 'Paralel Koordinat Haritası',
|
||||||
|
lines: 'Çizgisel Grafik',
|
||||||
|
graph: 'İlişkisel Grafik',
|
||||||
|
sankey: 'Sankey Diagramı',
|
||||||
|
funnel: 'Huni Grafik',
|
||||||
|
gauge: 'Gösterge',
|
||||||
|
pictorialBar: 'Resimli Çubuk Grafiği',
|
||||||
|
themeRiver: 'Akış Haritası',
|
||||||
|
sunburst: 'Güeş Patlaması Tablosu',
|
||||||
|
custom: 'Özel grafik',
|
||||||
|
chart: 'Grafiği'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Bu grafik "{title}" içindir.',
|
||||||
|
withoutTitle: 'Bu Bir Grafiktir.'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' Grafik Türü {seriesType} ve {seriesName} gösteriyor.',
|
||||||
|
withoutName: ' {seriesType} tipinde grafik.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. {seriesCount} kadar grafik sayısından oluşur.',
|
||||||
|
withName: ' {seriesId}.serisi {seriesName} adını temsil eden bir {seriesType} temsil eder.',
|
||||||
|
withoutName: ' {seriesId}. serisi bir {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Veriler Aşağıdaki Gibidir: ',
|
||||||
|
partialData: 'İlk {displayCnt} öğesi: ',
|
||||||
|
withName: ' {value} için {name}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('TR', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,176 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Ukrainian.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень',
|
||||||
|
'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Січ', 'Лют', 'Бер', 'Кві', 'Тра', 'Чер',
|
||||||
|
'Лип', 'Сер', 'Вер', 'Жов', 'Лис', 'Гру'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Неділя', 'Понеділок', 'Вівторок', 'Середа', 'Четвер', 'П\'ятниця', 'Субота'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'нд', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Все',
|
||||||
|
inverse: 'Обернути'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Выділити область',
|
||||||
|
polygon: 'Інструмент «Ласо»',
|
||||||
|
lineX: 'Горизонтальне виділення',
|
||||||
|
lineY: 'Вертикальне виділення',
|
||||||
|
keep: 'Залишити обране',
|
||||||
|
clear: 'Очистити обране'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Дані',
|
||||||
|
lang: ['Дані', 'Закрити', 'Оновити']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Збільшити',
|
||||||
|
back: 'Скасувати збільшення'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Переключитися на лінійний графік',
|
||||||
|
bar: 'Переключитися на стовпчикову діаграму',
|
||||||
|
stack: 'Стопка',
|
||||||
|
tiled: 'Плитка'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Відновити'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Зберегти зображення',
|
||||||
|
lang: ['Правий клік, щоб зберегти зображення']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Кругова діаграма',
|
||||||
|
bar: 'Стовпчикова діаграма',
|
||||||
|
line: 'Лінійний графік',
|
||||||
|
scatter: 'Точкова діаграма',
|
||||||
|
effectScatter: 'Точкова діаграма з хвилями',
|
||||||
|
radar: 'Пелюсткова діаграма',
|
||||||
|
tree: 'Дерево',
|
||||||
|
treemap: 'Пласке дерево',
|
||||||
|
boxplot: 'Ящик з вусами',
|
||||||
|
candlestick: 'Свічний графік',
|
||||||
|
k: 'Графік К-ліній',
|
||||||
|
heatmap: 'Теплова мапа',
|
||||||
|
map: 'Мапа',
|
||||||
|
parallel: 'Діаграма паралельних координат',
|
||||||
|
lines: 'Лінійний граф',
|
||||||
|
graph: 'Граф отношений',
|
||||||
|
sankey: 'Діаграма Санкей',
|
||||||
|
funnel: 'Воронкообразна діаграма',
|
||||||
|
gauge: 'Шкала',
|
||||||
|
pictorialBar: 'Стовпчик-картинка',
|
||||||
|
themeRiver: 'Тематична ріка',
|
||||||
|
sunburst: 'Сонячне проміння',
|
||||||
|
custom: 'Спеціальна діаграма',
|
||||||
|
chart: 'діаграма'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Це графік, що відрображує "{title}"',
|
||||||
|
withoutTitle: 'Це графік'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' з типом {seriesType} та іменем {seriesName}.',
|
||||||
|
withoutName: ' з типом {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Він складається з {seriesCount} серій.',
|
||||||
|
withName:
|
||||||
|
' Серія {seriesId} має тип {seriesType} та відображає {seriesName}.',
|
||||||
|
withoutName: ' Серія {seriesId} має тип {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Дані такі: ',
|
||||||
|
partialData: 'Перші {displayCnt} елементів: ',
|
||||||
|
withName: 'значення для {name} — {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,172 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Ukrainian.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень',
|
||||||
|
'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Січ', 'Лют', 'Бер', 'Кві', 'Тра', 'Чер',
|
||||||
|
'Лип', 'Сер', 'Вер', 'Жов', 'Лис', 'Гру'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Неділя', 'Понеділок', 'Вівторок', 'Середа', 'Четвер', 'П\'ятниця', 'Субота'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'нд', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Все',
|
||||||
|
inverse: 'Обернути'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Выділити область',
|
||||||
|
polygon: 'Інструмент «Ласо»',
|
||||||
|
lineX: 'Горизонтальне виділення',
|
||||||
|
lineY: 'Вертикальне виділення',
|
||||||
|
keep: 'Залишити обране',
|
||||||
|
clear: 'Очистити обране'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Дані',
|
||||||
|
lang: ['Дані', 'Закрити', 'Оновити']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Збільшити',
|
||||||
|
back: 'Скасувати збільшення'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Переключитися на лінійний графік',
|
||||||
|
bar: 'Переключитися на стовпчикову діаграму',
|
||||||
|
stack: 'Стопка',
|
||||||
|
tiled: 'Плитка'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Відновити'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Зберегти зображення',
|
||||||
|
lang: ['Правий клік, щоб зберегти зображення']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Кругова діаграма',
|
||||||
|
bar: 'Стовпчикова діаграма',
|
||||||
|
line: 'Лінійний графік',
|
||||||
|
scatter: 'Точкова діаграма',
|
||||||
|
effectScatter: 'Точкова діаграма з хвилями',
|
||||||
|
radar: 'Пелюсткова діаграма',
|
||||||
|
tree: 'Дерево',
|
||||||
|
treemap: 'Пласке дерево',
|
||||||
|
boxplot: 'Ящик з вусами',
|
||||||
|
candlestick: 'Свічний графік',
|
||||||
|
k: 'Графік К-ліній',
|
||||||
|
heatmap: 'Теплова мапа',
|
||||||
|
map: 'Мапа',
|
||||||
|
parallel: 'Діаграма паралельних координат',
|
||||||
|
lines: 'Лінійний граф',
|
||||||
|
graph: 'Граф отношений',
|
||||||
|
sankey: 'Діаграма Санкей',
|
||||||
|
funnel: 'Воронкообразна діаграма',
|
||||||
|
gauge: 'Шкала',
|
||||||
|
pictorialBar: 'Стовпчик-картинка',
|
||||||
|
themeRiver: 'Тематична ріка',
|
||||||
|
sunburst: 'Сонячне проміння',
|
||||||
|
custom: 'Спеціальна діаграма',
|
||||||
|
chart: 'діаграма'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Це графік, що відрображує "{title}"',
|
||||||
|
withoutTitle: 'Це графік'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' з типом {seriesType} та іменем {seriesName}.',
|
||||||
|
withoutName: ' з типом {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Він складається з {seriesCount} серій.',
|
||||||
|
withName:
|
||||||
|
' Серія {seriesId} має тип {seriesType} та відображає {seriesName}.',
|
||||||
|
withoutName: ' Серія {seriesId} має тип {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Дані такі: ',
|
||||||
|
partialData: 'Перші {displayCnt} елементів: ',
|
||||||
|
withName: 'значення для {name} — {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('UK', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,200 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Vietnamese.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Tháng 1',
|
||||||
|
'Tháng 2',
|
||||||
|
'Tháng 3',
|
||||||
|
'Tháng 4',
|
||||||
|
'Tháng 5',
|
||||||
|
'Tháng 6',
|
||||||
|
'Tháng 7',
|
||||||
|
'Tháng 8',
|
||||||
|
'Tháng 9',
|
||||||
|
'Tháng 10',
|
||||||
|
'Tháng 11',
|
||||||
|
'Tháng 12'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Th01',
|
||||||
|
'Th02',
|
||||||
|
'Th03',
|
||||||
|
'Th04',
|
||||||
|
'Th05',
|
||||||
|
'Th06',
|
||||||
|
'Th07',
|
||||||
|
'Th08',
|
||||||
|
'Th09',
|
||||||
|
'Th10',
|
||||||
|
'Th11',
|
||||||
|
'Th12'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Chủ nhật',
|
||||||
|
'Thứ hai',
|
||||||
|
'Thứ ba',
|
||||||
|
'Thứ tư',
|
||||||
|
'Thứ năm',
|
||||||
|
'Thứ sáu',
|
||||||
|
'Thứ bảy'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7']
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Tất cả',
|
||||||
|
inverse: 'Ngược lại'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Chọn theo ô',
|
||||||
|
polygon: 'Chọn theo đường bất kỳ',
|
||||||
|
lineX: 'Chọn theo chiều ngang',
|
||||||
|
lineY: 'Chọn theo chiều dọc',
|
||||||
|
keep: 'Giữ đã chọn',
|
||||||
|
clear: 'Bỏ đã chọn'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Xem dữ liệu',
|
||||||
|
lang: ['Xem dữ liệu', 'Đóng', 'Làm mới']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Phóng to',
|
||||||
|
back: 'Bỏ phóng to'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Chuyển sang biểu đồ đường',
|
||||||
|
bar: 'Chuyển sang biểu đồ cột',
|
||||||
|
stack: 'Xếp chồng',
|
||||||
|
tiled: 'Lát'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Khôi phục'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Lưu thành ảnh',
|
||||||
|
lang: ['Bấm phải chuột để lưu ảnh']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Biều đồ tròn',
|
||||||
|
bar: 'Biểu đồ cột',
|
||||||
|
line: 'Biểu đồ đường',
|
||||||
|
scatter: 'Biểu đồ phân tán',
|
||||||
|
effectScatter: 'Biểu đồ gợn sóng',
|
||||||
|
radar: 'Biểu đồ Radar',
|
||||||
|
tree: 'Biểu đồ cây',
|
||||||
|
treemap: 'Sơ đồ cây',
|
||||||
|
boxplot: 'Biểu đồ hộp',
|
||||||
|
candlestick: 'Biều đồ nến',
|
||||||
|
k: 'Biểu đồ đường K',
|
||||||
|
heatmap: 'Bản đồ nhiệt',
|
||||||
|
map: 'Bản đồ',
|
||||||
|
parallel: 'Bản đồ tọa độ song song',
|
||||||
|
lines: 'Biểu đồ đường',
|
||||||
|
graph: 'Đồ thị quan hệ',
|
||||||
|
sankey: 'Sơ đồ dòng',
|
||||||
|
funnel: 'Biểu đồ hình phễu',
|
||||||
|
gauge: 'Biểu đồ cung tròn',
|
||||||
|
pictorialBar: 'Biểu diễn hình ảnh',
|
||||||
|
themeRiver: 'Bản đồ sông',
|
||||||
|
sunburst: 'Biểu đồ bậc',
|
||||||
|
custom: 'Biểu đồ tùy chỉnh',
|
||||||
|
chart: 'Đồ thị'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Đây là biểu đồ "{title}"',
|
||||||
|
withoutTitle: 'Đây là biểu đồ'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' với kiểu {seriesType} tên là {seriesName}.',
|
||||||
|
withoutName: ' với kiểu {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Nó bao gồm {seriesCount} chuỗi.',
|
||||||
|
withName:
|
||||||
|
' Chuỗi {seriesId} có kiểu {seriesType} đại diện cho {seriesName}.',
|
||||||
|
withoutName: ' Chuỗi {seriesId} có kiểu {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Dữ liệu như sau: ',
|
||||||
|
partialData: 'Các mục {displayCnt} đầu tiên là: ',
|
||||||
|
withName: 'dữ liệu cho {name} là {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,196 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language: Vietnamese.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'Tháng 1',
|
||||||
|
'Tháng 2',
|
||||||
|
'Tháng 3',
|
||||||
|
'Tháng 4',
|
||||||
|
'Tháng 5',
|
||||||
|
'Tháng 6',
|
||||||
|
'Tháng 7',
|
||||||
|
'Tháng 8',
|
||||||
|
'Tháng 9',
|
||||||
|
'Tháng 10',
|
||||||
|
'Tháng 11',
|
||||||
|
'Tháng 12'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'Th01',
|
||||||
|
'Th02',
|
||||||
|
'Th03',
|
||||||
|
'Th04',
|
||||||
|
'Th05',
|
||||||
|
'Th06',
|
||||||
|
'Th07',
|
||||||
|
'Th08',
|
||||||
|
'Th09',
|
||||||
|
'Th10',
|
||||||
|
'Th11',
|
||||||
|
'Th12'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'Chủ nhật',
|
||||||
|
'Thứ hai',
|
||||||
|
'Thứ ba',
|
||||||
|
'Thứ tư',
|
||||||
|
'Thứ năm',
|
||||||
|
'Thứ sáu',
|
||||||
|
'Thứ bảy'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7']
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: 'Tất cả',
|
||||||
|
inverse: 'Ngược lại'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: 'Chọn theo ô',
|
||||||
|
polygon: 'Chọn theo đường bất kỳ',
|
||||||
|
lineX: 'Chọn theo chiều ngang',
|
||||||
|
lineY: 'Chọn theo chiều dọc',
|
||||||
|
keep: 'Giữ đã chọn',
|
||||||
|
clear: 'Bỏ đã chọn'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: 'Xem dữ liệu',
|
||||||
|
lang: ['Xem dữ liệu', 'Đóng', 'Làm mới']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: 'Phóng to',
|
||||||
|
back: 'Bỏ phóng to'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: 'Chuyển sang biểu đồ đường',
|
||||||
|
bar: 'Chuyển sang biểu đồ cột',
|
||||||
|
stack: 'Xếp chồng',
|
||||||
|
tiled: 'Lát'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: 'Khôi phục'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: 'Lưu thành ảnh',
|
||||||
|
lang: ['Bấm phải chuột để lưu ảnh']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: 'Biều đồ tròn',
|
||||||
|
bar: 'Biểu đồ cột',
|
||||||
|
line: 'Biểu đồ đường',
|
||||||
|
scatter: 'Biểu đồ phân tán',
|
||||||
|
effectScatter: 'Biểu đồ gợn sóng',
|
||||||
|
radar: 'Biểu đồ Radar',
|
||||||
|
tree: 'Biểu đồ cây',
|
||||||
|
treemap: 'Sơ đồ cây',
|
||||||
|
boxplot: 'Biểu đồ hộp',
|
||||||
|
candlestick: 'Biều đồ nến',
|
||||||
|
k: 'Biểu đồ đường K',
|
||||||
|
heatmap: 'Bản đồ nhiệt',
|
||||||
|
map: 'Bản đồ',
|
||||||
|
parallel: 'Bản đồ tọa độ song song',
|
||||||
|
lines: 'Biểu đồ đường',
|
||||||
|
graph: 'Đồ thị quan hệ',
|
||||||
|
sankey: 'Sơ đồ dòng',
|
||||||
|
funnel: 'Biểu đồ hình phễu',
|
||||||
|
gauge: 'Biểu đồ cung tròn',
|
||||||
|
pictorialBar: 'Biểu diễn hình ảnh',
|
||||||
|
themeRiver: 'Bản đồ sông',
|
||||||
|
sunburst: 'Biểu đồ bậc',
|
||||||
|
custom: 'Biểu đồ tùy chỉnh',
|
||||||
|
chart: 'Đồ thị'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: 'Đây là biểu đồ "{title}"',
|
||||||
|
withoutTitle: 'Đây là biểu đồ'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: ' với kiểu {seriesType} tên là {seriesName}.',
|
||||||
|
withoutName: ' với kiểu {seriesType}.'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '. Nó bao gồm {seriesCount} chuỗi.',
|
||||||
|
withName:
|
||||||
|
' Chuỗi {seriesId} có kiểu {seriesType} đại diện cho {seriesName}.',
|
||||||
|
withoutName: ' Chuỗi {seriesId} có kiểu {seriesType}.',
|
||||||
|
separator: {
|
||||||
|
middle: '',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: 'Dữ liệu như sau: ',
|
||||||
|
partialData: 'Các mục {displayCnt} đầu tiên là: ',
|
||||||
|
withName: 'dữ liệu cho {name} là {value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ', ',
|
||||||
|
end: '. '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('VI', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({});
|
||||||
|
}
|
||||||
|
})(this, function(exports) {
|
||||||
|
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'一月', '二月', '三月', '四月', '五月', '六月',
|
||||||
|
'七月', '八月', '九月', '十月', '十一月', '十二月'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'1月', '2月', '3月', '4月', '5月', '6月',
|
||||||
|
'7月', '8月', '9月', '10月', '11月', '12月'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'日', '一', '二', '三', '四', '五', '六'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: '全选',
|
||||||
|
inverse: '反选'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: '矩形选择',
|
||||||
|
polygon: '圈选',
|
||||||
|
lineX: '横向选择',
|
||||||
|
lineY: '纵向选择',
|
||||||
|
keep: '保持选择',
|
||||||
|
clear: '清除选择'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: '数据视图',
|
||||||
|
lang: ['数据视图', '关闭', '刷新']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: '区域缩放',
|
||||||
|
back: '区域缩放还原'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: '切换为折线图',
|
||||||
|
bar: '切换为柱状图',
|
||||||
|
stack: '切换为堆叠',
|
||||||
|
tiled: '切换为平铺'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: '还原'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: '保存为图片',
|
||||||
|
lang: ['右键另存为图片']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: '饼图',
|
||||||
|
bar: '柱状图',
|
||||||
|
line: '折线图',
|
||||||
|
scatter: '散点图',
|
||||||
|
effectScatter: '涟漪散点图',
|
||||||
|
radar: '雷达图',
|
||||||
|
tree: '树图',
|
||||||
|
treemap: '矩形树图',
|
||||||
|
boxplot: '箱型图',
|
||||||
|
candlestick: 'K线图',
|
||||||
|
k: 'K线图',
|
||||||
|
heatmap: '热力图',
|
||||||
|
map: '地图',
|
||||||
|
parallel: '平行坐标图',
|
||||||
|
lines: '线图',
|
||||||
|
graph: '关系图',
|
||||||
|
sankey: '桑基图',
|
||||||
|
funnel: '漏斗图',
|
||||||
|
gauge: '仪表盘图',
|
||||||
|
pictorialBar: '象形柱图',
|
||||||
|
themeRiver: '主题河流图',
|
||||||
|
sunburst: '旭日图',
|
||||||
|
custom: '自定义图表',
|
||||||
|
chart: '图表'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: '这是一个关于“{title}”的图表。',
|
||||||
|
withoutTitle: '这是一个图表,'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: '图表类型是{seriesType},表示{seriesName}。',
|
||||||
|
withoutName: '图表类型是{seriesType}。'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '它由{seriesCount}个图表系列组成。',
|
||||||
|
withName: '第{seriesId}个系列是一个表示{seriesName}的{seriesType},',
|
||||||
|
withoutName: '第{seriesId}个系列是一个{seriesType},',
|
||||||
|
separator: {
|
||||||
|
middle: ';',
|
||||||
|
end: '。'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: '其数据是——',
|
||||||
|
partialData: '其中,前{displayCnt}项是——',
|
||||||
|
withName: '{name}的数据是{value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ',',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var key in localeObj) {
|
||||||
|
if (localeObj.hasOwnProperty(key)) {
|
||||||
|
exports[key] = localeObj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,167 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['exports', 'echarts'], factory);
|
||||||
|
} else if (
|
||||||
|
typeof exports === 'object' &&
|
||||||
|
typeof exports.nodeName !== 'string'
|
||||||
|
) {
|
||||||
|
// CommonJS
|
||||||
|
factory(exports, require('echarts/lib/echarts'));
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory({}, root.echarts);
|
||||||
|
}
|
||||||
|
})(this, function(exports, echarts) {
|
||||||
|
|
||||||
|
|
||||||
|
var localeObj = {
|
||||||
|
time: {
|
||||||
|
month: [
|
||||||
|
'一月', '二月', '三月', '四月', '五月', '六月',
|
||||||
|
'七月', '八月', '九月', '十月', '十一月', '十二月'
|
||||||
|
],
|
||||||
|
monthAbbr: [
|
||||||
|
'1月', '2月', '3月', '4月', '5月', '6月',
|
||||||
|
'7月', '8月', '9月', '10月', '11月', '12月'
|
||||||
|
],
|
||||||
|
dayOfWeek: [
|
||||||
|
'星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'
|
||||||
|
],
|
||||||
|
dayOfWeekAbbr: [
|
||||||
|
'日', '一', '二', '三', '四', '五', '六'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
selector: {
|
||||||
|
all: '全选',
|
||||||
|
inverse: '反选'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolbox: {
|
||||||
|
brush: {
|
||||||
|
title: {
|
||||||
|
rect: '矩形选择',
|
||||||
|
polygon: '圈选',
|
||||||
|
lineX: '横向选择',
|
||||||
|
lineY: '纵向选择',
|
||||||
|
keep: '保持选择',
|
||||||
|
clear: '清除选择'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataView: {
|
||||||
|
title: '数据视图',
|
||||||
|
lang: ['数据视图', '关闭', '刷新']
|
||||||
|
},
|
||||||
|
dataZoom: {
|
||||||
|
title: {
|
||||||
|
zoom: '区域缩放',
|
||||||
|
back: '区域缩放还原'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magicType: {
|
||||||
|
title: {
|
||||||
|
line: '切换为折线图',
|
||||||
|
bar: '切换为柱状图',
|
||||||
|
stack: '切换为堆叠',
|
||||||
|
tiled: '切换为平铺'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restore: {
|
||||||
|
title: '还原'
|
||||||
|
},
|
||||||
|
saveAsImage: {
|
||||||
|
title: '保存为图片',
|
||||||
|
lang: ['右键另存为图片']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
typeNames: {
|
||||||
|
pie: '饼图',
|
||||||
|
bar: '柱状图',
|
||||||
|
line: '折线图',
|
||||||
|
scatter: '散点图',
|
||||||
|
effectScatter: '涟漪散点图',
|
||||||
|
radar: '雷达图',
|
||||||
|
tree: '树图',
|
||||||
|
treemap: '矩形树图',
|
||||||
|
boxplot: '箱型图',
|
||||||
|
candlestick: 'K线图',
|
||||||
|
k: 'K线图',
|
||||||
|
heatmap: '热力图',
|
||||||
|
map: '地图',
|
||||||
|
parallel: '平行坐标图',
|
||||||
|
lines: '线图',
|
||||||
|
graph: '关系图',
|
||||||
|
sankey: '桑基图',
|
||||||
|
funnel: '漏斗图',
|
||||||
|
gauge: '仪表盘图',
|
||||||
|
pictorialBar: '象形柱图',
|
||||||
|
themeRiver: '主题河流图',
|
||||||
|
sunburst: '旭日图',
|
||||||
|
custom: '自定义图表',
|
||||||
|
chart: '图表'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aria: {
|
||||||
|
general: {
|
||||||
|
withTitle: '这是一个关于“{title}”的图表。',
|
||||||
|
withoutTitle: '这是一个图表,'
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
single: {
|
||||||
|
prefix: '',
|
||||||
|
withName: '图表类型是{seriesType},表示{seriesName}。',
|
||||||
|
withoutName: '图表类型是{seriesType}。'
|
||||||
|
},
|
||||||
|
multiple: {
|
||||||
|
prefix: '它由{seriesCount}个图表系列组成。',
|
||||||
|
withName: '第{seriesId}个系列是一个表示{seriesName}的{seriesType},',
|
||||||
|
withoutName: '第{seriesId}个系列是一个{seriesType},',
|
||||||
|
separator: {
|
||||||
|
middle: ';',
|
||||||
|
end: '。'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
allData: '其数据是——',
|
||||||
|
partialData: '其中,前{displayCnt}项是——',
|
||||||
|
withName: '{name}的数据是{value}',
|
||||||
|
withoutName: '{value}',
|
||||||
|
separator: {
|
||||||
|
middle: ',',
|
||||||
|
end: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
echarts.registerLocale('ZH', localeObj);
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"type": "commonjs"
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
export * from './lib/echarts.js';
|
|
@ -0,0 +1,68 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { use } from './lib/extension.js';
|
||||||
|
export * from './lib/export/core.js';
|
||||||
|
import { install as SVGRenderer } from './lib/renderer/installSVGRenderer.js';
|
||||||
|
import { install as CanvasRenderer } from './lib/renderer/installCanvasRenderer.js';
|
||||||
|
import { install as LineChart } from './lib/chart/line/install.js';
|
||||||
|
import { install as BarChart } from './lib/chart/bar/install.js';
|
||||||
|
import { install as PieChart } from './lib/chart/pie/install.js';
|
||||||
|
import { install as ScatterChart } from './lib/chart/scatter/install.js';
|
||||||
|
import { install as GridComponent } from './lib/component/grid/install.js';
|
||||||
|
import { install as GraphicComponent } from './lib/component/graphic/install.js';
|
||||||
|
import { install as ToolboxComponent } from './lib/component/toolbox/install.js';
|
||||||
|
import { install as TooltipComponent } from './lib/component/tooltip/install.js';
|
||||||
|
import { install as AxisPointerComponent } from './lib/component/axisPointer/install.js';
|
||||||
|
import { install as TitleComponent } from './lib/component/title/install.js';
|
||||||
|
import { install as MarkPointComponent } from './lib/component/marker/installMarkPoint.js';
|
||||||
|
import { install as MarkLineComponent } from './lib/component/marker/installMarkLine.js';
|
||||||
|
import { install as MarkAreaComponent } from './lib/component/marker/installMarkArea.js';
|
||||||
|
import { install as LegendComponent } from './lib/component/legend/install.js';
|
||||||
|
import { install as DataZoomComponent } from './lib/component/dataZoom/install.js';
|
||||||
|
import { install as AriaComponent } from './lib/component/aria/install.js';
|
||||||
|
import { install as DatasetComponent } from './lib/component/dataset/install.js';
|
||||||
|
use([CanvasRenderer]);
|
||||||
|
use([SVGRenderer]);
|
||||||
|
use([LineChart, BarChart, PieChart, ScatterChart]);
|
||||||
|
use([GraphicComponent, TooltipComponent, AxisPointerComponent, LegendComponent, GridComponent, TitleComponent, MarkPointComponent, MarkLineComponent, MarkAreaComponent, DataZoomComponent, ToolboxComponent, AriaComponent, DatasetComponent]);
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import * as echarts from './types/dist/echarts';
|
||||||
|
// Export for UMD module.
|
||||||
|
export as namespace echarts;
|
||||||
|
export = echarts;
|
|
@ -0,0 +1,250 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { use } from './lib/extension.js';
|
||||||
|
export * from './lib/export/core.js';
|
||||||
|
// ----------------------------------------------
|
||||||
|
// All of the modules that are allowed to be
|
||||||
|
// imported are listed below.
|
||||||
|
//
|
||||||
|
// Users MUST NOT import other modules that are
|
||||||
|
// not included in this list.
|
||||||
|
// ----------------------------------------------
|
||||||
|
import { SVGRenderer, CanvasRenderer } from './lib/export/renderers.js';
|
||||||
|
import { LineChart, BarChart, PieChart, ScatterChart, RadarChart, MapChart, TreeChart, TreemapChart, GraphChart, GaugeChart, FunnelChart, ParallelChart, SankeyChart, BoxplotChart, CandlestickChart, EffectScatterChart, LinesChart, HeatmapChart, PictorialBarChart, ThemeRiverChart, SunburstChart, CustomChart } from './lib/export/charts.js';
|
||||||
|
import { GridComponent, PolarComponent, GeoComponent, SingleAxisComponent, ParallelComponent, CalendarComponent, GraphicComponent, ToolboxComponent, TooltipComponent, AxisPointerComponent, BrushComponent, TitleComponent, TimelineComponent, MarkPointComponent, MarkLineComponent, MarkAreaComponent, LegendComponent, DataZoomComponent, DataZoomInsideComponent, DataZoomSliderComponent, VisualMapComponent, VisualMapContinuousComponent, VisualMapPiecewiseComponent, AriaComponent, DatasetComponent, TransformComponent } from './lib/export/components.js';
|
||||||
|
import { UniversalTransition, LabelLayout } from './lib/export/features.js';
|
||||||
|
// -----------------
|
||||||
|
// Render engines
|
||||||
|
// -----------------
|
||||||
|
// Render via Canvas.
|
||||||
|
// echarts.init(dom, null, { renderer: 'canvas' })
|
||||||
|
use([CanvasRenderer]);
|
||||||
|
// Render via SVG.
|
||||||
|
// echarts.init(dom, null, { renderer: 'svg' })
|
||||||
|
use([SVGRenderer]);
|
||||||
|
// ----------------
|
||||||
|
// Charts (series)
|
||||||
|
// ----------------
|
||||||
|
// All of the series types, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// series: [{
|
||||||
|
// type: 'line' // or 'bar', 'pie', ...
|
||||||
|
// }]
|
||||||
|
// });
|
||||||
|
use([LineChart, BarChart, PieChart, ScatterChart, RadarChart, MapChart, TreeChart, TreemapChart, GraphChart, GaugeChart, FunnelChart, ParallelChart, SankeyChart, BoxplotChart, CandlestickChart, EffectScatterChart, LinesChart, HeatmapChart, PictorialBarChart, ThemeRiverChart, SunburstChart, CustomChart]);
|
||||||
|
// -------------------
|
||||||
|
// Coordinate systems
|
||||||
|
// -------------------
|
||||||
|
// All of the axis modules have been included in the
|
||||||
|
// coordinate system module below, do not need to
|
||||||
|
// make extra import.
|
||||||
|
// `cartesian` coordinate system. For some historical
|
||||||
|
// reasons, it is named as grid, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// grid: {...},
|
||||||
|
// xAxis: {...},
|
||||||
|
// yAxis: {...},
|
||||||
|
// series: [{...}]
|
||||||
|
// });
|
||||||
|
use(GridComponent);
|
||||||
|
// `polar` coordinate system, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// polar: {...},
|
||||||
|
// radiusAxis: {...},
|
||||||
|
// angleAxis: {...},
|
||||||
|
// series: [{
|
||||||
|
// coordinateSystem: 'polar'
|
||||||
|
// }]
|
||||||
|
// });
|
||||||
|
use(PolarComponent);
|
||||||
|
// `geo` coordinate system, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// geo: {...},
|
||||||
|
// series: [{
|
||||||
|
// coordinateSystem: 'geo'
|
||||||
|
// }]
|
||||||
|
// });
|
||||||
|
use(GeoComponent);
|
||||||
|
// `singleAxis` coordinate system (notice, it is a coordinate system
|
||||||
|
// with only one axis, work for chart like theme river), for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// singleAxis: {...}
|
||||||
|
// series: [{type: 'themeRiver', ...}]
|
||||||
|
// });
|
||||||
|
use(SingleAxisComponent);
|
||||||
|
// `parallel` coordinate system, only work for parallel series, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// parallel: {...},
|
||||||
|
// parallelAxis: [{...}, ...],
|
||||||
|
// series: [{
|
||||||
|
// type: 'parallel'
|
||||||
|
// }]
|
||||||
|
// });
|
||||||
|
use(ParallelComponent);
|
||||||
|
// `calendar` coordinate system. for example,
|
||||||
|
// chart.setOption({
|
||||||
|
// calendar: {...},
|
||||||
|
// series: [{
|
||||||
|
// coordinateSystem: 'calendar'
|
||||||
|
// }]
|
||||||
|
// );
|
||||||
|
use(CalendarComponent);
|
||||||
|
// ------------------
|
||||||
|
// Other components
|
||||||
|
// ------------------
|
||||||
|
// `graphic` component, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// graphic: {...}
|
||||||
|
// });
|
||||||
|
use(GraphicComponent);
|
||||||
|
// `toolbox` component, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// toolbox: {...}
|
||||||
|
// });
|
||||||
|
use(ToolboxComponent);
|
||||||
|
// `tooltip` component, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// tooltip: {...}
|
||||||
|
// });
|
||||||
|
use(TooltipComponent);
|
||||||
|
// `axisPointer` component, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// tooltip: {axisPointer: {...}, ...}
|
||||||
|
// });
|
||||||
|
// Or
|
||||||
|
// chart.setOption({
|
||||||
|
// axisPointer: {...}
|
||||||
|
// });
|
||||||
|
use(AxisPointerComponent);
|
||||||
|
// `brush` component, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// brush: {...}
|
||||||
|
// });
|
||||||
|
// Or
|
||||||
|
// chart.setOption({
|
||||||
|
// tooltip: {feature: {brush: {...}}
|
||||||
|
// })
|
||||||
|
use(BrushComponent);
|
||||||
|
// `title` component, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// title: {...}
|
||||||
|
// });
|
||||||
|
use(TitleComponent);
|
||||||
|
// `timeline` component, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// timeline: {...}
|
||||||
|
// });
|
||||||
|
use(TimelineComponent);
|
||||||
|
// `markPoint` component, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// series: [{markPoint: {...}}]
|
||||||
|
// });
|
||||||
|
use(MarkPointComponent);
|
||||||
|
// `markLine` component, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// series: [{markLine: {...}}]
|
||||||
|
// });
|
||||||
|
use(MarkLineComponent);
|
||||||
|
// `markArea` component, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// series: [{markArea: {...}}]
|
||||||
|
// });
|
||||||
|
use(MarkAreaComponent);
|
||||||
|
// `legend` component not scrollable. for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// legend: {...}
|
||||||
|
// });
|
||||||
|
use(LegendComponent);
|
||||||
|
// `dataZoom` component including both `dataZoomInside` and `dataZoomSlider`.
|
||||||
|
use(DataZoomComponent);
|
||||||
|
// `dataZoom` component providing drag, pinch, wheel behaviors
|
||||||
|
// inside coordinate system, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// dataZoom: {type: 'inside'}
|
||||||
|
// });
|
||||||
|
use(DataZoomInsideComponent);
|
||||||
|
// `dataZoom` component providing a slider bar, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// dataZoom: {type: 'slider'}
|
||||||
|
// });
|
||||||
|
use(DataZoomSliderComponent);
|
||||||
|
// `visualMap` component including both `visualMapContinuous` and `visualMapPiecewise`.
|
||||||
|
use(VisualMapComponent);
|
||||||
|
// `visualMap` component providing continuous bar, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// visualMap: {type: 'continuous'}
|
||||||
|
// });
|
||||||
|
use(VisualMapContinuousComponent);
|
||||||
|
// `visualMap` component providing pieces bar, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// visualMap: {type: 'piecewise'}
|
||||||
|
// });
|
||||||
|
use(VisualMapPiecewiseComponent);
|
||||||
|
// `aria` component providing aria, for example:
|
||||||
|
// chart.setOption({
|
||||||
|
// aria: {...}
|
||||||
|
// });
|
||||||
|
use(AriaComponent);
|
||||||
|
// dataset transform
|
||||||
|
// chart.setOption({
|
||||||
|
// dataset: {
|
||||||
|
// transform: []
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
use(TransformComponent);
|
||||||
|
use(DatasetComponent);
|
||||||
|
// universal transition
|
||||||
|
// chart.setOption({
|
||||||
|
// series: {
|
||||||
|
// universalTransition: { enabled: true }
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
use(UniversalTransition);
|
||||||
|
// label layout
|
||||||
|
// chart.setOption({
|
||||||
|
// series: {
|
||||||
|
// labelLayout: { hideOverlap: true }
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
use(LabelLayout);
|
|
@ -0,0 +1,55 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { use } from './lib/extension.js';
|
||||||
|
export * from './lib/export/core.js';
|
||||||
|
import { install as CanvasRenderer } from './lib/renderer/installCanvasRenderer.js';
|
||||||
|
import { install as LineChart } from './lib/chart/line/install.js';
|
||||||
|
import { install as BarChart } from './lib/chart/bar/install.js';
|
||||||
|
import { install as PieChart } from './lib/chart/pie/install.js';
|
||||||
|
import { install as GridSimpleComponent } from './lib/component/grid/installSimple.js';
|
||||||
|
import { install as AriaComponent } from './lib/component/aria/install.js';
|
||||||
|
import { install as DatasetComponent } from './lib/component/dataset/install.js';
|
||||||
|
use([CanvasRenderer]);
|
||||||
|
use([LineChart, BarChart, PieChart]);
|
||||||
|
use([GridSimpleComponent, AriaComponent, DatasetComponent]);
|
|
@ -0,0 +1,80 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
function getCenterCoord(view, point) {
|
||||||
|
// Use projected coord as center because it's linear.
|
||||||
|
return view.pointToProjected ? view.pointToProjected(point) : view.pointToData(point);
|
||||||
|
}
|
||||||
|
export function updateCenterAndZoom(view, payload, zoomLimit, api) {
|
||||||
|
var previousZoom = view.getZoom();
|
||||||
|
var center = view.getCenter();
|
||||||
|
var zoom = payload.zoom;
|
||||||
|
var point = view.projectedToPoint ? view.projectedToPoint(center) : view.dataToPoint(center);
|
||||||
|
if (payload.dx != null && payload.dy != null) {
|
||||||
|
point[0] -= payload.dx;
|
||||||
|
point[1] -= payload.dy;
|
||||||
|
view.setCenter(getCenterCoord(view, point), api);
|
||||||
|
}
|
||||||
|
if (zoom != null) {
|
||||||
|
if (zoomLimit) {
|
||||||
|
var zoomMin = zoomLimit.min || 0;
|
||||||
|
var zoomMax = zoomLimit.max || Infinity;
|
||||||
|
zoom = Math.max(Math.min(previousZoom * zoom, zoomMax), zoomMin) / previousZoom;
|
||||||
|
}
|
||||||
|
// Zoom on given point(originX, originY)
|
||||||
|
view.scaleX *= zoom;
|
||||||
|
view.scaleY *= zoom;
|
||||||
|
var fixX = (payload.originX - view.x) * (zoom - 1);
|
||||||
|
var fixY = (payload.originY - view.y) * (zoom - 1);
|
||||||
|
view.x -= fixX;
|
||||||
|
view.y -= fixY;
|
||||||
|
view.updateTransform();
|
||||||
|
// Get the new center
|
||||||
|
view.setCenter(getCenterCoord(view, point), api);
|
||||||
|
view.setZoom(zoom * previousZoom);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
center: view.getCenter(),
|
||||||
|
zoom: view.getZoom()
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,243 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { isFunction, isObject, retrieve2 } from 'zrender/lib/core/util.js';
|
||||||
|
import { makeInner } from '../util/model.js';
|
||||||
|
// Stored properties for further transition.
|
||||||
|
export var transitionStore = makeInner();
|
||||||
|
/**
|
||||||
|
* Return null if animation is disabled.
|
||||||
|
*/
|
||||||
|
export function getAnimationConfig(animationType, animatableModel, dataIndex,
|
||||||
|
// Extra opts can override the option in animatable model.
|
||||||
|
extraOpts,
|
||||||
|
// TODO It's only for pictorial bar now.
|
||||||
|
extraDelayParams) {
|
||||||
|
var animationPayload;
|
||||||
|
// Check if there is global animation configuration from dataZoom/resize can override the config in option.
|
||||||
|
// If animation is enabled. Will use this animation config in payload.
|
||||||
|
// If animation is disabled. Just ignore it.
|
||||||
|
if (animatableModel && animatableModel.ecModel) {
|
||||||
|
var updatePayload = animatableModel.ecModel.getUpdatePayload();
|
||||||
|
animationPayload = updatePayload && updatePayload.animation;
|
||||||
|
}
|
||||||
|
var animationEnabled = animatableModel && animatableModel.isAnimationEnabled();
|
||||||
|
var isUpdate = animationType === 'update';
|
||||||
|
if (animationEnabled) {
|
||||||
|
var duration = void 0;
|
||||||
|
var easing = void 0;
|
||||||
|
var delay = void 0;
|
||||||
|
if (extraOpts) {
|
||||||
|
duration = retrieve2(extraOpts.duration, 200);
|
||||||
|
easing = retrieve2(extraOpts.easing, 'cubicOut');
|
||||||
|
delay = 0;
|
||||||
|
} else {
|
||||||
|
duration = animatableModel.getShallow(isUpdate ? 'animationDurationUpdate' : 'animationDuration');
|
||||||
|
easing = animatableModel.getShallow(isUpdate ? 'animationEasingUpdate' : 'animationEasing');
|
||||||
|
delay = animatableModel.getShallow(isUpdate ? 'animationDelayUpdate' : 'animationDelay');
|
||||||
|
}
|
||||||
|
// animation from payload has highest priority.
|
||||||
|
if (animationPayload) {
|
||||||
|
animationPayload.duration != null && (duration = animationPayload.duration);
|
||||||
|
animationPayload.easing != null && (easing = animationPayload.easing);
|
||||||
|
animationPayload.delay != null && (delay = animationPayload.delay);
|
||||||
|
}
|
||||||
|
if (isFunction(delay)) {
|
||||||
|
delay = delay(dataIndex, extraDelayParams);
|
||||||
|
}
|
||||||
|
if (isFunction(duration)) {
|
||||||
|
duration = duration(dataIndex);
|
||||||
|
}
|
||||||
|
var config = {
|
||||||
|
duration: duration || 0,
|
||||||
|
delay: delay,
|
||||||
|
easing: easing
|
||||||
|
};
|
||||||
|
return config;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function animateOrSetProps(animationType, el, props, animatableModel, dataIndex, cb, during) {
|
||||||
|
var isFrom = false;
|
||||||
|
var removeOpt;
|
||||||
|
if (isFunction(dataIndex)) {
|
||||||
|
during = cb;
|
||||||
|
cb = dataIndex;
|
||||||
|
dataIndex = null;
|
||||||
|
} else if (isObject(dataIndex)) {
|
||||||
|
cb = dataIndex.cb;
|
||||||
|
during = dataIndex.during;
|
||||||
|
isFrom = dataIndex.isFrom;
|
||||||
|
removeOpt = dataIndex.removeOpt;
|
||||||
|
dataIndex = dataIndex.dataIndex;
|
||||||
|
}
|
||||||
|
var isRemove = animationType === 'leave';
|
||||||
|
if (!isRemove) {
|
||||||
|
// Must stop the remove animation.
|
||||||
|
el.stopAnimation('leave');
|
||||||
|
}
|
||||||
|
var animationConfig = getAnimationConfig(animationType, animatableModel, dataIndex, isRemove ? removeOpt || {} : null, animatableModel && animatableModel.getAnimationDelayParams ? animatableModel.getAnimationDelayParams(el, dataIndex) : null);
|
||||||
|
if (animationConfig && animationConfig.duration > 0) {
|
||||||
|
var duration = animationConfig.duration;
|
||||||
|
var animationDelay = animationConfig.delay;
|
||||||
|
var animationEasing = animationConfig.easing;
|
||||||
|
var animateConfig = {
|
||||||
|
duration: duration,
|
||||||
|
delay: animationDelay || 0,
|
||||||
|
easing: animationEasing,
|
||||||
|
done: cb,
|
||||||
|
force: !!cb || !!during,
|
||||||
|
// Set to final state in update/init animation.
|
||||||
|
// So the post processing based on the path shape can be done correctly.
|
||||||
|
setToFinal: !isRemove,
|
||||||
|
scope: animationType,
|
||||||
|
during: during
|
||||||
|
};
|
||||||
|
isFrom ? el.animateFrom(props, animateConfig) : el.animateTo(props, animateConfig);
|
||||||
|
} else {
|
||||||
|
el.stopAnimation();
|
||||||
|
// If `isFrom`, the props is the "from" props.
|
||||||
|
!isFrom && el.attr(props);
|
||||||
|
// Call during at least once.
|
||||||
|
during && during(1);
|
||||||
|
cb && cb();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Update graphic element properties with or without animation according to the
|
||||||
|
* configuration in series.
|
||||||
|
*
|
||||||
|
* Caution: this method will stop previous animation.
|
||||||
|
* So do not use this method to one element twice before
|
||||||
|
* animation starts, unless you know what you are doing.
|
||||||
|
* @example
|
||||||
|
* graphic.updateProps(el, {
|
||||||
|
* position: [100, 100]
|
||||||
|
* }, seriesModel, dataIndex, function () { console.log('Animation done!'); });
|
||||||
|
* // Or
|
||||||
|
* graphic.updateProps(el, {
|
||||||
|
* position: [100, 100]
|
||||||
|
* }, seriesModel, function () { console.log('Animation done!'); });
|
||||||
|
*/
|
||||||
|
function updateProps(el, props,
|
||||||
|
// TODO: TYPE AnimatableModel
|
||||||
|
animatableModel, dataIndex, cb, during) {
|
||||||
|
animateOrSetProps('update', el, props, animatableModel, dataIndex, cb, during);
|
||||||
|
}
|
||||||
|
export { updateProps };
|
||||||
|
/**
|
||||||
|
* Init graphic element properties with or without animation according to the
|
||||||
|
* configuration in series.
|
||||||
|
*
|
||||||
|
* Caution: this method will stop previous animation.
|
||||||
|
* So do not use this method to one element twice before
|
||||||
|
* animation starts, unless you know what you are doing.
|
||||||
|
*/
|
||||||
|
export function initProps(el, props, animatableModel, dataIndex, cb, during) {
|
||||||
|
animateOrSetProps('enter', el, props, animatableModel, dataIndex, cb, during);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* If element is removed.
|
||||||
|
* It can determine if element is having remove animation.
|
||||||
|
*/
|
||||||
|
export function isElementRemoved(el) {
|
||||||
|
if (!el.__zr) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
for (var i = 0; i < el.animators.length; i++) {
|
||||||
|
var animator = el.animators[i];
|
||||||
|
if (animator.scope === 'leave') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Remove graphic element
|
||||||
|
*/
|
||||||
|
export function removeElement(el, props, animatableModel, dataIndex, cb, during) {
|
||||||
|
// Don't do remove animation twice.
|
||||||
|
if (isElementRemoved(el)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
animateOrSetProps('leave', el, props, animatableModel, dataIndex, cb, during);
|
||||||
|
}
|
||||||
|
function fadeOutDisplayable(el, animatableModel, dataIndex, done) {
|
||||||
|
el.removeTextContent();
|
||||||
|
el.removeTextGuideLine();
|
||||||
|
removeElement(el, {
|
||||||
|
style: {
|
||||||
|
opacity: 0
|
||||||
|
}
|
||||||
|
}, animatableModel, dataIndex, done);
|
||||||
|
}
|
||||||
|
export function removeElementWithFadeOut(el, animatableModel, dataIndex) {
|
||||||
|
function doRemove() {
|
||||||
|
el.parent && el.parent.remove(el);
|
||||||
|
}
|
||||||
|
// Hide label and labelLine first
|
||||||
|
// TODO Also use fade out animation?
|
||||||
|
if (!el.isGroup) {
|
||||||
|
fadeOutDisplayable(el, animatableModel, dataIndex, doRemove);
|
||||||
|
} else {
|
||||||
|
el.traverse(function (disp) {
|
||||||
|
if (!disp.isGroup) {
|
||||||
|
// Can invoke doRemove multiple times.
|
||||||
|
fadeOutDisplayable(disp, animatableModel, dataIndex, doRemove);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Save old style for style transition in universalTransition module.
|
||||||
|
* It's used when element will be reused in each render.
|
||||||
|
* For chart like map, heatmap, which will always create new element.
|
||||||
|
* We don't need to save this because universalTransition can get old style from the old element
|
||||||
|
*/
|
||||||
|
export function saveOldStyle(el) {
|
||||||
|
transitionStore(el).oldStyle = el.style;
|
||||||
|
}
|
||||||
|
export function getOldStyle(el) {
|
||||||
|
return transitionStore(el).oldStyle;
|
||||||
|
}
|
|
@ -0,0 +1,143 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { keys, filter, each, isArray, indexOf } from 'zrender/lib/core/util.js';
|
||||||
|
import { ELEMENT_ANIMATABLE_PROPS } from './customGraphicTransition.js';
|
||||||
|
import { getAnimationConfig } from './basicTransition.js';
|
||||||
|
import { warn } from '../util/log.js';
|
||||||
|
import { makeInner } from '../util/model.js';
|
||||||
|
var getStateToRestore = makeInner();
|
||||||
|
var KEYFRAME_EXCLUDE_KEYS = ['percent', 'easing', 'shape', 'style', 'extra'];
|
||||||
|
/**
|
||||||
|
* Stop previous keyframe animation and restore the attributes.
|
||||||
|
* Avoid new keyframe animation starts with wrong internal state when the percent: 0 is not set.
|
||||||
|
*/
|
||||||
|
export function stopPreviousKeyframeAnimationAndRestore(el) {
|
||||||
|
// Stop previous keyframe animation.
|
||||||
|
el.stopAnimation('keyframe');
|
||||||
|
// Restore
|
||||||
|
el.attr(getStateToRestore(el));
|
||||||
|
}
|
||||||
|
export function applyKeyframeAnimation(el, animationOpts, animatableModel) {
|
||||||
|
if (!animatableModel.isAnimationEnabled() || !animationOpts) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isArray(animationOpts)) {
|
||||||
|
each(animationOpts, function (singleAnimationOpts) {
|
||||||
|
applyKeyframeAnimation(el, singleAnimationOpts, animatableModel);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var keyframes = animationOpts.keyframes;
|
||||||
|
var duration = animationOpts.duration;
|
||||||
|
if (animatableModel && duration == null) {
|
||||||
|
// Default to use duration of config.
|
||||||
|
// NOTE: animation config from payload will be ignored because they are mainly for transitions.
|
||||||
|
var config = getAnimationConfig('enter', animatableModel, 0);
|
||||||
|
duration = config && config.duration;
|
||||||
|
}
|
||||||
|
if (!keyframes || !duration) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var stateToRestore = getStateToRestore(el);
|
||||||
|
each(ELEMENT_ANIMATABLE_PROPS, function (targetPropName) {
|
||||||
|
if (targetPropName && !el[targetPropName]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var animator;
|
||||||
|
var endFrameIsSet = false;
|
||||||
|
// Sort keyframes by percent.
|
||||||
|
keyframes.sort(function (a, b) {
|
||||||
|
return a.percent - b.percent;
|
||||||
|
});
|
||||||
|
each(keyframes, function (kf) {
|
||||||
|
// Stop current animation.
|
||||||
|
var animators = el.animators;
|
||||||
|
var kfValues = targetPropName ? kf[targetPropName] : kf;
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
if (kf.percent >= 1) {
|
||||||
|
endFrameIsSet = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!kfValues) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var propKeys = keys(kfValues);
|
||||||
|
if (!targetPropName) {
|
||||||
|
// PENDING performance?
|
||||||
|
propKeys = filter(propKeys, function (key) {
|
||||||
|
return indexOf(KEYFRAME_EXCLUDE_KEYS, key) < 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (!propKeys.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!animator) {
|
||||||
|
animator = el.animate(targetPropName, animationOpts.loop, true);
|
||||||
|
animator.scope = 'keyframe';
|
||||||
|
}
|
||||||
|
for (var i = 0; i < animators.length; i++) {
|
||||||
|
// Stop all other animation that is not keyframe.
|
||||||
|
if (animators[i] !== animator && animators[i].targetName === animator.targetName) {
|
||||||
|
animators[i].stopTracks(propKeys);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
targetPropName && (stateToRestore[targetPropName] = stateToRestore[targetPropName] || {});
|
||||||
|
var savedTarget = targetPropName ? stateToRestore[targetPropName] : stateToRestore;
|
||||||
|
each(propKeys, function (key) {
|
||||||
|
// Save original value.
|
||||||
|
savedTarget[key] = ((targetPropName ? el[targetPropName] : el) || {})[key];
|
||||||
|
});
|
||||||
|
animator.whenWithKeys(duration * kf.percent, kfValues, propKeys, kf.easing);
|
||||||
|
});
|
||||||
|
if (!animator) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
if (!endFrameIsSet) {
|
||||||
|
warn('End frame with percent: 1 is missing in the keyframeAnimation.', true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
animator.delay(animationOpts.delay || 0).duration(duration).start(animationOpts.easing);
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,481 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { makeInner, normalizeToArray } from '../util/model.js';
|
||||||
|
import { assert, bind, each, eqNaN, extend, hasOwn, indexOf, isArrayLike, keys, reduce } from 'zrender/lib/core/util.js';
|
||||||
|
import { cloneValue } from 'zrender/lib/animation/Animator.js';
|
||||||
|
import Displayable from 'zrender/lib/graphic/Displayable.js';
|
||||||
|
import { getAnimationConfig } from './basicTransition.js';
|
||||||
|
import { Path } from '../util/graphic.js';
|
||||||
|
import { warn } from '../util/log.js';
|
||||||
|
import { TRANSFORMABLE_PROPS } from 'zrender/lib/core/Transformable.js';
|
||||||
|
var LEGACY_TRANSFORM_PROPS_MAP = {
|
||||||
|
position: ['x', 'y'],
|
||||||
|
scale: ['scaleX', 'scaleY'],
|
||||||
|
origin: ['originX', 'originY']
|
||||||
|
};
|
||||||
|
var LEGACY_TRANSFORM_PROPS = keys(LEGACY_TRANSFORM_PROPS_MAP);
|
||||||
|
var TRANSFORM_PROPS_MAP = reduce(TRANSFORMABLE_PROPS, function (obj, key) {
|
||||||
|
obj[key] = 1;
|
||||||
|
return obj;
|
||||||
|
}, {});
|
||||||
|
var transformPropNamesStr = TRANSFORMABLE_PROPS.join(', ');
|
||||||
|
// '' means root
|
||||||
|
export var ELEMENT_ANIMATABLE_PROPS = ['', 'style', 'shape', 'extra'];
|
||||||
|
;
|
||||||
|
var transitionInnerStore = makeInner();
|
||||||
|
;
|
||||||
|
function getElementAnimationConfig(animationType, el, elOption, parentModel, dataIndex) {
|
||||||
|
var animationProp = animationType + "Animation";
|
||||||
|
var config = getAnimationConfig(animationType, parentModel, dataIndex) || {};
|
||||||
|
var userDuring = transitionInnerStore(el).userDuring;
|
||||||
|
// Only set when duration is > 0 and it's need to be animated.
|
||||||
|
if (config.duration > 0) {
|
||||||
|
// For simplicity, if during not specified, the previous during will not work any more.
|
||||||
|
config.during = userDuring ? bind(duringCall, {
|
||||||
|
el: el,
|
||||||
|
userDuring: userDuring
|
||||||
|
}) : null;
|
||||||
|
config.setToFinal = true;
|
||||||
|
config.scope = animationType;
|
||||||
|
}
|
||||||
|
extend(config, elOption[animationProp]);
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
export function applyUpdateTransition(el, elOption, animatableModel, opts) {
|
||||||
|
opts = opts || {};
|
||||||
|
var dataIndex = opts.dataIndex,
|
||||||
|
isInit = opts.isInit,
|
||||||
|
clearStyle = opts.clearStyle;
|
||||||
|
var hasAnimation = animatableModel.isAnimationEnabled();
|
||||||
|
// Save the meta info for further morphing. Like apply on the sub morphing elements.
|
||||||
|
var store = transitionInnerStore(el);
|
||||||
|
var styleOpt = elOption.style;
|
||||||
|
store.userDuring = elOption.during;
|
||||||
|
var transFromProps = {};
|
||||||
|
var propsToSet = {};
|
||||||
|
prepareTransformAllPropsFinal(el, elOption, propsToSet);
|
||||||
|
prepareShapeOrExtraAllPropsFinal('shape', elOption, propsToSet);
|
||||||
|
prepareShapeOrExtraAllPropsFinal('extra', elOption, propsToSet);
|
||||||
|
if (!isInit && hasAnimation) {
|
||||||
|
prepareTransformTransitionFrom(el, elOption, transFromProps);
|
||||||
|
prepareShapeOrExtraTransitionFrom('shape', el, elOption, transFromProps);
|
||||||
|
prepareShapeOrExtraTransitionFrom('extra', el, elOption, transFromProps);
|
||||||
|
prepareStyleTransitionFrom(el, elOption, styleOpt, transFromProps);
|
||||||
|
}
|
||||||
|
propsToSet.style = styleOpt;
|
||||||
|
applyPropsDirectly(el, propsToSet, clearStyle);
|
||||||
|
applyMiscProps(el, elOption);
|
||||||
|
if (hasAnimation) {
|
||||||
|
if (isInit) {
|
||||||
|
var enterFromProps_1 = {};
|
||||||
|
each(ELEMENT_ANIMATABLE_PROPS, function (propName) {
|
||||||
|
var prop = propName ? elOption[propName] : elOption;
|
||||||
|
if (prop && prop.enterFrom) {
|
||||||
|
if (propName) {
|
||||||
|
enterFromProps_1[propName] = enterFromProps_1[propName] || {};
|
||||||
|
}
|
||||||
|
extend(propName ? enterFromProps_1[propName] : enterFromProps_1, prop.enterFrom);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var config = getElementAnimationConfig('enter', el, elOption, animatableModel, dataIndex);
|
||||||
|
if (config.duration > 0) {
|
||||||
|
el.animateFrom(enterFromProps_1, config);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
applyPropsTransition(el, elOption, dataIndex || 0, animatableModel, transFromProps);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Store leave to be used in leave transition.
|
||||||
|
updateLeaveTo(el, elOption);
|
||||||
|
styleOpt ? el.dirty() : el.markRedraw();
|
||||||
|
}
|
||||||
|
export function updateLeaveTo(el, elOption) {
|
||||||
|
// Try merge to previous set leaveTo
|
||||||
|
var leaveToProps = transitionInnerStore(el).leaveToProps;
|
||||||
|
for (var i = 0; i < ELEMENT_ANIMATABLE_PROPS.length; i++) {
|
||||||
|
var propName = ELEMENT_ANIMATABLE_PROPS[i];
|
||||||
|
var prop = propName ? elOption[propName] : elOption;
|
||||||
|
if (prop && prop.leaveTo) {
|
||||||
|
if (!leaveToProps) {
|
||||||
|
leaveToProps = transitionInnerStore(el).leaveToProps = {};
|
||||||
|
}
|
||||||
|
if (propName) {
|
||||||
|
leaveToProps[propName] = leaveToProps[propName] || {};
|
||||||
|
}
|
||||||
|
extend(propName ? leaveToProps[propName] : leaveToProps, prop.leaveTo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export function applyLeaveTransition(el, elOption, animatableModel, onRemove) {
|
||||||
|
if (el) {
|
||||||
|
var parent_1 = el.parent;
|
||||||
|
var leaveToProps = transitionInnerStore(el).leaveToProps;
|
||||||
|
if (leaveToProps) {
|
||||||
|
// TODO TODO use leave after leaveAnimation in series is introduced
|
||||||
|
// TODO Data index?
|
||||||
|
var config = getElementAnimationConfig('update', el, elOption, animatableModel, 0);
|
||||||
|
config.done = function () {
|
||||||
|
parent_1.remove(el);
|
||||||
|
onRemove && onRemove();
|
||||||
|
};
|
||||||
|
el.animateTo(leaveToProps, config);
|
||||||
|
} else {
|
||||||
|
parent_1.remove(el);
|
||||||
|
onRemove && onRemove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export function isTransitionAll(transition) {
|
||||||
|
return transition === 'all';
|
||||||
|
}
|
||||||
|
function applyPropsDirectly(el,
|
||||||
|
// Can be null/undefined
|
||||||
|
allPropsFinal, clearStyle) {
|
||||||
|
var styleOpt = allPropsFinal.style;
|
||||||
|
if (!el.isGroup && styleOpt) {
|
||||||
|
if (clearStyle) {
|
||||||
|
el.useStyle({});
|
||||||
|
// When style object changed, how to trade the existing animation?
|
||||||
|
// It is probably complicated and not needed to cover all the cases.
|
||||||
|
// But still need consider the case:
|
||||||
|
// (1) When using init animation on `style.opacity`, and before the animation
|
||||||
|
// ended users triggers an update by mousewhel. At that time the init
|
||||||
|
// animation should better be continued rather than terminated.
|
||||||
|
// So after `useStyle` called, we should change the animation target manually
|
||||||
|
// to continue the effect of the init animation.
|
||||||
|
// (2) PENDING: If the previous animation targeted at a `val1`, and currently we need
|
||||||
|
// to update the value to `val2` and no animation declared, should be terminate
|
||||||
|
// the previous animation or just modify the target of the animation?
|
||||||
|
// Therotically That will happen not only on `style` but also on `shape` and
|
||||||
|
// `transfrom` props. But we haven't handle this case at present yet.
|
||||||
|
// (3) PENDING: Is it proper to visit `animators` and `targetName`?
|
||||||
|
var animators = el.animators;
|
||||||
|
for (var i = 0; i < animators.length; i++) {
|
||||||
|
var animator = animators[i];
|
||||||
|
// targetName is the "topKey".
|
||||||
|
if (animator.targetName === 'style') {
|
||||||
|
animator.changeTarget(el.style);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
el.setStyle(styleOpt);
|
||||||
|
}
|
||||||
|
if (allPropsFinal) {
|
||||||
|
// Not set style here.
|
||||||
|
allPropsFinal.style = null;
|
||||||
|
// Set el to the final state firstly.
|
||||||
|
allPropsFinal && el.attr(allPropsFinal);
|
||||||
|
allPropsFinal.style = styleOpt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function applyPropsTransition(el, elOption, dataIndex, model,
|
||||||
|
// Can be null/undefined
|
||||||
|
transFromProps) {
|
||||||
|
if (transFromProps) {
|
||||||
|
var config = getElementAnimationConfig('update', el, elOption, model, dataIndex);
|
||||||
|
if (config.duration > 0) {
|
||||||
|
el.animateFrom(transFromProps, config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function applyMiscProps(el, elOption) {
|
||||||
|
// Merge by default.
|
||||||
|
hasOwn(elOption, 'silent') && (el.silent = elOption.silent);
|
||||||
|
hasOwn(elOption, 'ignore') && (el.ignore = elOption.ignore);
|
||||||
|
if (el instanceof Displayable) {
|
||||||
|
hasOwn(elOption, 'invisible') && (el.invisible = elOption.invisible);
|
||||||
|
}
|
||||||
|
if (el instanceof Path) {
|
||||||
|
hasOwn(elOption, 'autoBatch') && (el.autoBatch = elOption.autoBatch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Use it to avoid it be exposed to user.
|
||||||
|
var tmpDuringScope = {};
|
||||||
|
var transitionDuringAPI = {
|
||||||
|
// Usually other props do not need to be changed in animation during.
|
||||||
|
setTransform: function (key, val) {
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
assert(hasOwn(TRANSFORM_PROPS_MAP, key), 'Only ' + transformPropNamesStr + ' available in `setTransform`.');
|
||||||
|
}
|
||||||
|
tmpDuringScope.el[key] = val;
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
getTransform: function (key) {
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
assert(hasOwn(TRANSFORM_PROPS_MAP, key), 'Only ' + transformPropNamesStr + ' available in `getTransform`.');
|
||||||
|
}
|
||||||
|
return tmpDuringScope.el[key];
|
||||||
|
},
|
||||||
|
setShape: function (key, val) {
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
assertNotReserved(key);
|
||||||
|
}
|
||||||
|
var el = tmpDuringScope.el;
|
||||||
|
var shape = el.shape || (el.shape = {});
|
||||||
|
shape[key] = val;
|
||||||
|
el.dirtyShape && el.dirtyShape();
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
getShape: function (key) {
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
assertNotReserved(key);
|
||||||
|
}
|
||||||
|
var shape = tmpDuringScope.el.shape;
|
||||||
|
if (shape) {
|
||||||
|
return shape[key];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setStyle: function (key, val) {
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
assertNotReserved(key);
|
||||||
|
}
|
||||||
|
var el = tmpDuringScope.el;
|
||||||
|
var style = el.style;
|
||||||
|
if (style) {
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
if (eqNaN(val)) {
|
||||||
|
warn('style.' + key + ' must not be assigned with NaN.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
style[key] = val;
|
||||||
|
el.dirtyStyle && el.dirtyStyle();
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
getStyle: function (key) {
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
assertNotReserved(key);
|
||||||
|
}
|
||||||
|
var style = tmpDuringScope.el.style;
|
||||||
|
if (style) {
|
||||||
|
return style[key];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setExtra: function (key, val) {
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
assertNotReserved(key);
|
||||||
|
}
|
||||||
|
var extra = tmpDuringScope.el.extra || (tmpDuringScope.el.extra = {});
|
||||||
|
extra[key] = val;
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
getExtra: function (key) {
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
assertNotReserved(key);
|
||||||
|
}
|
||||||
|
var extra = tmpDuringScope.el.extra;
|
||||||
|
if (extra) {
|
||||||
|
return extra[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function assertNotReserved(key) {
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
if (key === 'transition' || key === 'enterFrom' || key === 'leaveTo') {
|
||||||
|
throw new Error('key must not be "' + key + '"');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function duringCall() {
|
||||||
|
// Do not provide "percent" until some requirements come.
|
||||||
|
// Because consider thies case:
|
||||||
|
// enterFrom: {x: 100, y: 30}, transition: 'x'.
|
||||||
|
// And enter duration is different from update duration.
|
||||||
|
// Thus it might be confused about the meaning of "percent" in during callback.
|
||||||
|
var scope = this;
|
||||||
|
var el = scope.el;
|
||||||
|
if (!el) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// If el is remove from zr by reason like legend, during still need to called,
|
||||||
|
// because el will be added back to zr and the prop value should not be incorrect.
|
||||||
|
var latestUserDuring = transitionInnerStore(el).userDuring;
|
||||||
|
var scopeUserDuring = scope.userDuring;
|
||||||
|
// Ensured a during is only called once in each animation frame.
|
||||||
|
// If a during is called multiple times in one frame, maybe some users' calculation logic
|
||||||
|
// might be wrong (not sure whether this usage exists).
|
||||||
|
// The case of a during might be called twice can be: by default there is a animator for
|
||||||
|
// 'x', 'y' when init. Before the init animation finished, call `setOption` to start
|
||||||
|
// another animators for 'style'/'shape'/'extra'.
|
||||||
|
if (latestUserDuring !== scopeUserDuring) {
|
||||||
|
// release
|
||||||
|
scope.el = scope.userDuring = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tmpDuringScope.el = el;
|
||||||
|
// Give no `this` to user in "during" calling.
|
||||||
|
scopeUserDuring(transitionDuringAPI);
|
||||||
|
// FIXME: if in future meet the case that some prop will be both modified in `during` and `state`,
|
||||||
|
// consider the issue that the prop might be incorrect when return to "normal" state.
|
||||||
|
}
|
||||||
|
|
||||||
|
function prepareShapeOrExtraTransitionFrom(mainAttr, fromEl, elOption, transFromProps) {
|
||||||
|
var attrOpt = elOption[mainAttr];
|
||||||
|
if (!attrOpt) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var elPropsInAttr = fromEl[mainAttr];
|
||||||
|
var transFromPropsInAttr;
|
||||||
|
if (elPropsInAttr) {
|
||||||
|
var transition = elOption.transition;
|
||||||
|
var attrTransition = attrOpt.transition;
|
||||||
|
if (attrTransition) {
|
||||||
|
!transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {});
|
||||||
|
if (isTransitionAll(attrTransition)) {
|
||||||
|
extend(transFromPropsInAttr, elPropsInAttr);
|
||||||
|
} else {
|
||||||
|
var transitionKeys = normalizeToArray(attrTransition);
|
||||||
|
for (var i = 0; i < transitionKeys.length; i++) {
|
||||||
|
var key = transitionKeys[i];
|
||||||
|
var elVal = elPropsInAttr[key];
|
||||||
|
transFromPropsInAttr[key] = elVal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (isTransitionAll(transition) || indexOf(transition, mainAttr) >= 0) {
|
||||||
|
!transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {});
|
||||||
|
var elPropsInAttrKeys = keys(elPropsInAttr);
|
||||||
|
for (var i = 0; i < elPropsInAttrKeys.length; i++) {
|
||||||
|
var key = elPropsInAttrKeys[i];
|
||||||
|
var elVal = elPropsInAttr[key];
|
||||||
|
if (isNonStyleTransitionEnabled(attrOpt[key], elVal)) {
|
||||||
|
transFromPropsInAttr[key] = elVal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function prepareShapeOrExtraAllPropsFinal(mainAttr, elOption, allProps) {
|
||||||
|
var attrOpt = elOption[mainAttr];
|
||||||
|
if (!attrOpt) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var allPropsInAttr = allProps[mainAttr] = {};
|
||||||
|
var keysInAttr = keys(attrOpt);
|
||||||
|
for (var i = 0; i < keysInAttr.length; i++) {
|
||||||
|
var key = keysInAttr[i];
|
||||||
|
// To avoid share one object with different element, and
|
||||||
|
// to avoid user modify the object inexpectedly, have to clone.
|
||||||
|
allPropsInAttr[key] = cloneValue(attrOpt[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function prepareTransformTransitionFrom(el, elOption, transFromProps) {
|
||||||
|
var transition = elOption.transition;
|
||||||
|
var transitionKeys = isTransitionAll(transition) ? TRANSFORMABLE_PROPS : normalizeToArray(transition || []);
|
||||||
|
for (var i = 0; i < transitionKeys.length; i++) {
|
||||||
|
var key = transitionKeys[i];
|
||||||
|
if (key === 'style' || key === 'shape' || key === 'extra') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var elVal = el[key];
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
checkTransformPropRefer(key, 'el.transition');
|
||||||
|
}
|
||||||
|
// Do not clone, animator will perform that clone.
|
||||||
|
transFromProps[key] = elVal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function prepareTransformAllPropsFinal(el, elOption, allProps) {
|
||||||
|
for (var i = 0; i < LEGACY_TRANSFORM_PROPS.length; i++) {
|
||||||
|
var legacyName = LEGACY_TRANSFORM_PROPS[i];
|
||||||
|
var xyName = LEGACY_TRANSFORM_PROPS_MAP[legacyName];
|
||||||
|
var legacyArr = elOption[legacyName];
|
||||||
|
if (legacyArr) {
|
||||||
|
allProps[xyName[0]] = legacyArr[0];
|
||||||
|
allProps[xyName[1]] = legacyArr[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var i = 0; i < TRANSFORMABLE_PROPS.length; i++) {
|
||||||
|
var key = TRANSFORMABLE_PROPS[i];
|
||||||
|
if (elOption[key] != null) {
|
||||||
|
allProps[key] = elOption[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function prepareStyleTransitionFrom(fromEl, elOption, styleOpt, transFromProps) {
|
||||||
|
if (!styleOpt) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var fromElStyle = fromEl.style;
|
||||||
|
var transFromStyleProps;
|
||||||
|
if (fromElStyle) {
|
||||||
|
var styleTransition = styleOpt.transition;
|
||||||
|
var elTransition = elOption.transition;
|
||||||
|
if (styleTransition && !isTransitionAll(styleTransition)) {
|
||||||
|
var transitionKeys = normalizeToArray(styleTransition);
|
||||||
|
!transFromStyleProps && (transFromStyleProps = transFromProps.style = {});
|
||||||
|
for (var i = 0; i < transitionKeys.length; i++) {
|
||||||
|
var key = transitionKeys[i];
|
||||||
|
var elVal = fromElStyle[key];
|
||||||
|
// Do not clone, see `checkNonStyleTansitionRefer`.
|
||||||
|
transFromStyleProps[key] = elVal;
|
||||||
|
}
|
||||||
|
} else if (fromEl.getAnimationStyleProps && (isTransitionAll(elTransition) || isTransitionAll(styleTransition) || indexOf(elTransition, 'style') >= 0)) {
|
||||||
|
var animationProps = fromEl.getAnimationStyleProps();
|
||||||
|
var animationStyleProps = animationProps ? animationProps.style : null;
|
||||||
|
if (animationStyleProps) {
|
||||||
|
!transFromStyleProps && (transFromStyleProps = transFromProps.style = {});
|
||||||
|
var styleKeys = keys(styleOpt);
|
||||||
|
for (var i = 0; i < styleKeys.length; i++) {
|
||||||
|
var key = styleKeys[i];
|
||||||
|
if (animationStyleProps[key]) {
|
||||||
|
var elVal = fromElStyle[key];
|
||||||
|
transFromStyleProps[key] = elVal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function isNonStyleTransitionEnabled(optVal, elVal) {
|
||||||
|
// The same as `checkNonStyleTansitionRefer`.
|
||||||
|
return !isArrayLike(optVal) ? optVal != null && isFinite(optVal) : optVal !== elVal;
|
||||||
|
}
|
||||||
|
var checkTransformPropRefer;
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
checkTransformPropRefer = function (key, usedIn) {
|
||||||
|
if (!hasOwn(TRANSFORM_PROPS_MAP, key)) {
|
||||||
|
warn('Prop `' + key + '` is not a permitted in `' + usedIn + '`. ' + 'Only `' + keys(TRANSFORM_PROPS_MAP).join('`, `') + '` are permitted.');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,203 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { separateMorph, combineMorph, morphPath, isCombineMorphing } from 'zrender/lib/tool/morphPath.js';
|
||||||
|
import { Path } from '../util/graphic.js';
|
||||||
|
import { defaults, isArray } from 'zrender/lib/core/util.js';
|
||||||
|
import { getAnimationConfig } from './basicTransition.js';
|
||||||
|
import { clonePath } from 'zrender/lib/tool/path.js';
|
||||||
|
function isMultiple(elements) {
|
||||||
|
return isArray(elements[0]);
|
||||||
|
}
|
||||||
|
function prepareMorphBatches(one, many) {
|
||||||
|
var batches = [];
|
||||||
|
var batchCount = one.length;
|
||||||
|
for (var i = 0; i < batchCount; i++) {
|
||||||
|
batches.push({
|
||||||
|
one: one[i],
|
||||||
|
many: []
|
||||||
|
});
|
||||||
|
}
|
||||||
|
for (var i = 0; i < many.length; i++) {
|
||||||
|
var len = many[i].length;
|
||||||
|
var k = void 0;
|
||||||
|
for (k = 0; k < len; k++) {
|
||||||
|
batches[k % batchCount].many.push(many[i][k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var off = 0;
|
||||||
|
// If one has more paths than each one of many. average them.
|
||||||
|
for (var i = batchCount - 1; i >= 0; i--) {
|
||||||
|
if (!batches[i].many.length) {
|
||||||
|
var moveFrom = batches[off].many;
|
||||||
|
if (moveFrom.length <= 1) {
|
||||||
|
// Not enough
|
||||||
|
// Start from the first one.
|
||||||
|
if (off) {
|
||||||
|
off = 0;
|
||||||
|
} else {
|
||||||
|
return batches;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var len = moveFrom.length;
|
||||||
|
var mid = Math.ceil(len / 2);
|
||||||
|
batches[i].many = moveFrom.slice(mid, len);
|
||||||
|
batches[off].many = moveFrom.slice(0, mid);
|
||||||
|
off++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return batches;
|
||||||
|
}
|
||||||
|
var pathDividers = {
|
||||||
|
clone: function (params) {
|
||||||
|
var ret = [];
|
||||||
|
// Fitting the alpha
|
||||||
|
var approxOpacity = 1 - Math.pow(1 - params.path.style.opacity, 1 / params.count);
|
||||||
|
for (var i = 0; i < params.count; i++) {
|
||||||
|
var cloned = clonePath(params.path);
|
||||||
|
cloned.setStyle('opacity', approxOpacity);
|
||||||
|
ret.push(cloned);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
},
|
||||||
|
// Use the default divider
|
||||||
|
split: null
|
||||||
|
};
|
||||||
|
export function applyMorphAnimation(from, to, divideShape, seriesModel, dataIndex, animateOtherProps) {
|
||||||
|
if (!from.length || !to.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var updateAnimationCfg = getAnimationConfig('update', seriesModel, dataIndex);
|
||||||
|
if (!(updateAnimationCfg && updateAnimationCfg.duration > 0)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var animationDelay = seriesModel.getModel('universalTransition').get('delay');
|
||||||
|
var animationCfg = Object.assign({
|
||||||
|
// Need to setToFinal so the further calculation based on the style can be correct.
|
||||||
|
// Like emphasis color.
|
||||||
|
setToFinal: true
|
||||||
|
}, updateAnimationCfg);
|
||||||
|
var many;
|
||||||
|
var one;
|
||||||
|
if (isMultiple(from)) {
|
||||||
|
// manyToOne
|
||||||
|
many = from;
|
||||||
|
one = to;
|
||||||
|
}
|
||||||
|
if (isMultiple(to)) {
|
||||||
|
// oneToMany
|
||||||
|
many = to;
|
||||||
|
one = from;
|
||||||
|
}
|
||||||
|
function morphOneBatch(batch, fromIsMany, animateIndex, animateCount, forceManyOne) {
|
||||||
|
var batchMany = batch.many;
|
||||||
|
var batchOne = batch.one;
|
||||||
|
if (batchMany.length === 1 && !forceManyOne) {
|
||||||
|
// Is one to one
|
||||||
|
var batchFrom = fromIsMany ? batchMany[0] : batchOne;
|
||||||
|
var batchTo = fromIsMany ? batchOne : batchMany[0];
|
||||||
|
if (isCombineMorphing(batchFrom)) {
|
||||||
|
// Keep doing combine animation.
|
||||||
|
morphOneBatch({
|
||||||
|
many: [batchFrom],
|
||||||
|
one: batchTo
|
||||||
|
}, true, animateIndex, animateCount, true);
|
||||||
|
} else {
|
||||||
|
var individualAnimationCfg = animationDelay ? defaults({
|
||||||
|
delay: animationDelay(animateIndex, animateCount)
|
||||||
|
}, animationCfg) : animationCfg;
|
||||||
|
morphPath(batchFrom, batchTo, individualAnimationCfg);
|
||||||
|
animateOtherProps(batchFrom, batchTo, batchFrom, batchTo, individualAnimationCfg);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var separateAnimationCfg = defaults({
|
||||||
|
dividePath: pathDividers[divideShape],
|
||||||
|
individualDelay: animationDelay && function (idx, count, fromPath, toPath) {
|
||||||
|
return animationDelay(idx + animateIndex, animateCount);
|
||||||
|
}
|
||||||
|
}, animationCfg);
|
||||||
|
var _a = fromIsMany ? combineMorph(batchMany, batchOne, separateAnimationCfg) : separateMorph(batchOne, batchMany, separateAnimationCfg),
|
||||||
|
fromIndividuals = _a.fromIndividuals,
|
||||||
|
toIndividuals = _a.toIndividuals;
|
||||||
|
var count = fromIndividuals.length;
|
||||||
|
for (var k = 0; k < count; k++) {
|
||||||
|
var individualAnimationCfg = animationDelay ? defaults({
|
||||||
|
delay: animationDelay(k, count)
|
||||||
|
}, animationCfg) : animationCfg;
|
||||||
|
animateOtherProps(fromIndividuals[k], toIndividuals[k], fromIsMany ? batchMany[k] : batch.one, fromIsMany ? batch.one : batchMany[k], individualAnimationCfg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var fromIsMany = many ? many === from
|
||||||
|
// Is one to one. If the path number not match. also needs do merge and separate morphing.
|
||||||
|
: from.length > to.length;
|
||||||
|
var morphBatches = many ? prepareMorphBatches(one, many) : prepareMorphBatches(fromIsMany ? to : from, [fromIsMany ? from : to]);
|
||||||
|
var animateCount = 0;
|
||||||
|
for (var i = 0; i < morphBatches.length; i++) {
|
||||||
|
animateCount += morphBatches[i].many.length;
|
||||||
|
}
|
||||||
|
var animateIndex = 0;
|
||||||
|
for (var i = 0; i < morphBatches.length; i++) {
|
||||||
|
morphOneBatch(morphBatches[i], fromIsMany, animateIndex, animateCount);
|
||||||
|
animateIndex += morphBatches[i].many.length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export function getPathList(elements) {
|
||||||
|
if (!elements) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
if (isArray(elements)) {
|
||||||
|
var pathList_1 = [];
|
||||||
|
for (var i = 0; i < elements.length; i++) {
|
||||||
|
pathList_1.push(getPathList(elements[i]));
|
||||||
|
}
|
||||||
|
return pathList_1;
|
||||||
|
}
|
||||||
|
var pathList = [];
|
||||||
|
elements.traverse(function (el) {
|
||||||
|
if (el instanceof Path && !el.disableMorphing && !el.invisible && !el.ignore) {
|
||||||
|
pathList.push(el);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return pathList;
|
||||||
|
}
|
|
@ -0,0 +1,650 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
// Universal transitions that can animate between any shapes(series) and any properties in any amounts.
|
||||||
|
import { SERIES_UNIVERSAL_TRANSITION_PROP } from '../model/Series.js';
|
||||||
|
import { createHashMap, each, map, filter, isArray, extend } from 'zrender/lib/core/util.js';
|
||||||
|
import { applyMorphAnimation, getPathList } from './morphTransitionHelper.js';
|
||||||
|
import Path from 'zrender/lib/graphic/Path.js';
|
||||||
|
import { initProps } from '../util/graphic.js';
|
||||||
|
import DataDiffer from '../data/DataDiffer.js';
|
||||||
|
import { makeInner, normalizeToArray } from '../util/model.js';
|
||||||
|
import { warn } from '../util/log.js';
|
||||||
|
import { getAnimationConfig, getOldStyle } from './basicTransition.js';
|
||||||
|
import Displayable from 'zrender/lib/graphic/Displayable.js';
|
||||||
|
var DATA_COUNT_THRESHOLD = 1e4;
|
||||||
|
var TRANSITION_NONE = 0;
|
||||||
|
var TRANSITION_P2C = 1;
|
||||||
|
var TRANSITION_C2P = 2;
|
||||||
|
;
|
||||||
|
var getUniversalTransitionGlobalStore = makeInner();
|
||||||
|
function getDimension(data, visualDimension) {
|
||||||
|
var dimensions = data.dimensions;
|
||||||
|
for (var i = 0; i < dimensions.length; i++) {
|
||||||
|
var dimInfo = data.getDimensionInfo(dimensions[i]);
|
||||||
|
if (dimInfo && dimInfo.otherDims[visualDimension] === 0) {
|
||||||
|
return dimensions[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// get value by dimension. (only get value of itemGroupId or childGroupId, so convert it to string)
|
||||||
|
function getValueByDimension(data, dataIndex, dimension) {
|
||||||
|
var dimInfo = data.getDimensionInfo(dimension);
|
||||||
|
var dimOrdinalMeta = dimInfo && dimInfo.ordinalMeta;
|
||||||
|
if (dimInfo) {
|
||||||
|
var value = data.get(dimInfo.name, dataIndex);
|
||||||
|
if (dimOrdinalMeta) {
|
||||||
|
return dimOrdinalMeta.categories[value] || value + '';
|
||||||
|
}
|
||||||
|
return value + '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function getGroupId(data, dataIndex, dataGroupId, isChild) {
|
||||||
|
// try to get groupId from encode
|
||||||
|
var visualDimension = isChild ? 'itemChildGroupId' : 'itemGroupId';
|
||||||
|
var groupIdDim = getDimension(data, visualDimension);
|
||||||
|
if (groupIdDim) {
|
||||||
|
var groupId = getValueByDimension(data, dataIndex, groupIdDim);
|
||||||
|
return groupId;
|
||||||
|
}
|
||||||
|
// try to get groupId from raw data item
|
||||||
|
var rawDataItem = data.getRawDataItem(dataIndex);
|
||||||
|
var property = isChild ? 'childGroupId' : 'groupId';
|
||||||
|
if (rawDataItem && rawDataItem[property]) {
|
||||||
|
return rawDataItem[property] + '';
|
||||||
|
}
|
||||||
|
// fallback
|
||||||
|
if (isChild) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// try to use series.dataGroupId as groupId, otherwise use dataItem's id as groupId
|
||||||
|
return dataGroupId || data.getId(dataIndex);
|
||||||
|
}
|
||||||
|
// flatten all data items from different serieses into one arrary
|
||||||
|
function flattenDataDiffItems(list) {
|
||||||
|
var items = [];
|
||||||
|
each(list, function (seriesInfo) {
|
||||||
|
var data = seriesInfo.data;
|
||||||
|
var dataGroupId = seriesInfo.dataGroupId;
|
||||||
|
if (data.count() > DATA_COUNT_THRESHOLD) {
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
warn('Universal transition is disabled on large data > 10k.');
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var indices = data.getIndices();
|
||||||
|
for (var dataIndex = 0; dataIndex < indices.length; dataIndex++) {
|
||||||
|
items.push({
|
||||||
|
data: data,
|
||||||
|
groupId: getGroupId(data, dataIndex, dataGroupId, false),
|
||||||
|
childGroupId: getGroupId(data, dataIndex, dataGroupId, true),
|
||||||
|
divide: seriesInfo.divide,
|
||||||
|
dataIndex: dataIndex
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
function fadeInElement(newEl, newSeries, newIndex) {
|
||||||
|
newEl.traverse(function (el) {
|
||||||
|
if (el instanceof Path) {
|
||||||
|
// TODO use fade in animation for target element.
|
||||||
|
initProps(el, {
|
||||||
|
style: {
|
||||||
|
opacity: 0
|
||||||
|
}
|
||||||
|
}, newSeries, {
|
||||||
|
dataIndex: newIndex,
|
||||||
|
isFrom: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function removeEl(el) {
|
||||||
|
if (el.parent) {
|
||||||
|
// Bake parent transform to element.
|
||||||
|
// So it can still have proper transform to transition after it's removed.
|
||||||
|
var computedTransform = el.getComputedTransform();
|
||||||
|
el.setLocalTransform(computedTransform);
|
||||||
|
el.parent.remove(el);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function stopAnimation(el) {
|
||||||
|
el.stopAnimation();
|
||||||
|
if (el.isGroup) {
|
||||||
|
el.traverse(function (child) {
|
||||||
|
child.stopAnimation();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function animateElementStyles(el, dataIndex, seriesModel) {
|
||||||
|
var animationConfig = getAnimationConfig('update', seriesModel, dataIndex);
|
||||||
|
animationConfig && el.traverse(function (child) {
|
||||||
|
if (child instanceof Displayable) {
|
||||||
|
var oldStyle = getOldStyle(child);
|
||||||
|
if (oldStyle) {
|
||||||
|
child.animateFrom({
|
||||||
|
style: oldStyle
|
||||||
|
}, animationConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function isAllIdSame(oldDiffItems, newDiffItems) {
|
||||||
|
var len = oldDiffItems.length;
|
||||||
|
if (len !== newDiffItems.length) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (var i = 0; i < len; i++) {
|
||||||
|
var oldItem = oldDiffItems[i];
|
||||||
|
var newItem = newDiffItems[i];
|
||||||
|
if (oldItem.data.getId(oldItem.dataIndex) !== newItem.data.getId(newItem.dataIndex)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
function transitionBetween(oldList, newList, api) {
|
||||||
|
var oldDiffItems = flattenDataDiffItems(oldList);
|
||||||
|
var newDiffItems = flattenDataDiffItems(newList);
|
||||||
|
function updateMorphingPathProps(from, to, rawFrom, rawTo, animationCfg) {
|
||||||
|
if (rawFrom || from) {
|
||||||
|
to.animateFrom({
|
||||||
|
style: rawFrom && rawFrom !== from
|
||||||
|
// dividingMethod like clone may override the style(opacity)
|
||||||
|
// So extend it to raw style.
|
||||||
|
? extend(extend({}, rawFrom.style), from.style) : from.style
|
||||||
|
}, animationCfg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var hasMorphAnimation = false;
|
||||||
|
/**
|
||||||
|
* With groupId and childGroupId, we can build parent-child relationships between dataItems.
|
||||||
|
* However, we should mind the parent-child "direction" between old and new options.
|
||||||
|
*
|
||||||
|
* For example, suppose we have two dataItems from two series.data:
|
||||||
|
*
|
||||||
|
* dataA: [ dataB: [
|
||||||
|
* { {
|
||||||
|
* value: 5, value: 3,
|
||||||
|
* groupId: 'creatures', groupId: 'animals',
|
||||||
|
* childGroupId: 'animals' childGroupId: 'dogs'
|
||||||
|
* }, },
|
||||||
|
* ... ...
|
||||||
|
* ] ]
|
||||||
|
*
|
||||||
|
* where dataA is belong to optionA and dataB is belong to optionB.
|
||||||
|
*
|
||||||
|
* When we `setOption(optionB)` from optionA, we choose childGroupId of dataItemA and groupId of
|
||||||
|
* dataItemB as keys so the two keys are matched (both are 'animals'), then universalTransition
|
||||||
|
* will work. This derection is "parent -> child".
|
||||||
|
*
|
||||||
|
* If we `setOption(optionA)` from optionB, we also choose groupId of dataItemB and childGroupId
|
||||||
|
* of dataItemA as keys and universalTransition will work. This derection is "child -> parent".
|
||||||
|
*
|
||||||
|
* If there is no childGroupId specified, which means no multiLevelDrillDown/Up is needed and no
|
||||||
|
* parent-child relationship exists. This direction is "none".
|
||||||
|
*
|
||||||
|
* So we need to know whether to use groupId or childGroupId as the key when we call the keyGetter
|
||||||
|
* functions. Thus, we need to decide the direction first.
|
||||||
|
*
|
||||||
|
* The rule is:
|
||||||
|
*
|
||||||
|
* if (all childGroupIds in oldDiffItems and all groupIds in newDiffItems have common value) {
|
||||||
|
* direction = 'parent -> child';
|
||||||
|
* } else if (all groupIds in oldDiffItems and all childGroupIds in newDiffItems have common value) {
|
||||||
|
* direction = 'child -> parent';
|
||||||
|
* } else {
|
||||||
|
* direction = 'none';
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
var direction = TRANSITION_NONE;
|
||||||
|
// find all groupIds and childGroupIds from oldDiffItems
|
||||||
|
var oldGroupIds = createHashMap();
|
||||||
|
var oldChildGroupIds = createHashMap();
|
||||||
|
oldDiffItems.forEach(function (item) {
|
||||||
|
item.groupId && oldGroupIds.set(item.groupId, true);
|
||||||
|
item.childGroupId && oldChildGroupIds.set(item.childGroupId, true);
|
||||||
|
});
|
||||||
|
// traverse newDiffItems and decide the direction according to the rule
|
||||||
|
for (var i = 0; i < newDiffItems.length; i++) {
|
||||||
|
var newGroupId = newDiffItems[i].groupId;
|
||||||
|
if (oldChildGroupIds.get(newGroupId)) {
|
||||||
|
direction = TRANSITION_P2C;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var newChildGroupId = newDiffItems[i].childGroupId;
|
||||||
|
if (newChildGroupId && oldGroupIds.get(newChildGroupId)) {
|
||||||
|
direction = TRANSITION_C2P;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function createKeyGetter(isOld, onlyGetId) {
|
||||||
|
return function (diffItem) {
|
||||||
|
var data = diffItem.data;
|
||||||
|
var dataIndex = diffItem.dataIndex;
|
||||||
|
// TODO if specified dim
|
||||||
|
if (onlyGetId) {
|
||||||
|
return data.getId(dataIndex);
|
||||||
|
}
|
||||||
|
if (isOld) {
|
||||||
|
return direction === TRANSITION_P2C ? diffItem.childGroupId : diffItem.groupId;
|
||||||
|
} else {
|
||||||
|
return direction === TRANSITION_C2P ? diffItem.childGroupId : diffItem.groupId;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// Use id if it's very likely to be an one to one animation
|
||||||
|
// It's more robust than groupId
|
||||||
|
// TODO Check if key dimension is specified.
|
||||||
|
var useId = isAllIdSame(oldDiffItems, newDiffItems);
|
||||||
|
var isElementStillInChart = {};
|
||||||
|
if (!useId) {
|
||||||
|
// We may have different diff strategy with basicTransition if we use other dimension as key.
|
||||||
|
// If so, we can't simply check if oldEl is same with newEl. We need a map to check if oldEl is still being used in the new chart.
|
||||||
|
// We can't use the elements that already being morphed. Let it keep it's original basic transition.
|
||||||
|
for (var i = 0; i < newDiffItems.length; i++) {
|
||||||
|
var newItem = newDiffItems[i];
|
||||||
|
var el = newItem.data.getItemGraphicEl(newItem.dataIndex);
|
||||||
|
if (el) {
|
||||||
|
isElementStillInChart[el.id] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function updateOneToOne(newIndex, oldIndex) {
|
||||||
|
var oldItem = oldDiffItems[oldIndex];
|
||||||
|
var newItem = newDiffItems[newIndex];
|
||||||
|
var newSeries = newItem.data.hostModel;
|
||||||
|
// TODO Mark this elements is morphed and don't morph them anymore
|
||||||
|
var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex);
|
||||||
|
var newEl = newItem.data.getItemGraphicEl(newItem.dataIndex);
|
||||||
|
// Can't handle same elements.
|
||||||
|
if (oldEl === newEl) {
|
||||||
|
newEl && animateElementStyles(newEl, newItem.dataIndex, newSeries);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
// We can't use the elements that already being morphed
|
||||||
|
oldEl && isElementStillInChart[oldEl.id]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (newEl) {
|
||||||
|
// TODO: If keep animating the group in case
|
||||||
|
// some of the elements don't want to be morphed.
|
||||||
|
// TODO Label?
|
||||||
|
stopAnimation(newEl);
|
||||||
|
if (oldEl) {
|
||||||
|
stopAnimation(oldEl);
|
||||||
|
// If old element is doing leaving animation. stop it and remove it immediately.
|
||||||
|
removeEl(oldEl);
|
||||||
|
hasMorphAnimation = true;
|
||||||
|
applyMorphAnimation(getPathList(oldEl), getPathList(newEl), newItem.divide, newSeries, newIndex, updateMorphingPathProps);
|
||||||
|
} else {
|
||||||
|
fadeInElement(newEl, newSeries, newIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// else keep oldEl leaving animation.
|
||||||
|
}
|
||||||
|
|
||||||
|
new DataDiffer(oldDiffItems, newDiffItems, createKeyGetter(true, useId), createKeyGetter(false, useId), null, 'multiple').update(updateOneToOne).updateManyToOne(function (newIndex, oldIndices) {
|
||||||
|
var newItem = newDiffItems[newIndex];
|
||||||
|
var newData = newItem.data;
|
||||||
|
var newSeries = newData.hostModel;
|
||||||
|
var newEl = newData.getItemGraphicEl(newItem.dataIndex);
|
||||||
|
var oldElsList = filter(map(oldIndices, function (idx) {
|
||||||
|
return oldDiffItems[idx].data.getItemGraphicEl(oldDiffItems[idx].dataIndex);
|
||||||
|
}), function (oldEl) {
|
||||||
|
return oldEl && oldEl !== newEl && !isElementStillInChart[oldEl.id];
|
||||||
|
});
|
||||||
|
if (newEl) {
|
||||||
|
stopAnimation(newEl);
|
||||||
|
if (oldElsList.length) {
|
||||||
|
// If old element is doing leaving animation. stop it and remove it immediately.
|
||||||
|
each(oldElsList, function (oldEl) {
|
||||||
|
stopAnimation(oldEl);
|
||||||
|
removeEl(oldEl);
|
||||||
|
});
|
||||||
|
hasMorphAnimation = true;
|
||||||
|
applyMorphAnimation(getPathList(oldElsList), getPathList(newEl), newItem.divide, newSeries, newIndex, updateMorphingPathProps);
|
||||||
|
} else {
|
||||||
|
fadeInElement(newEl, newSeries, newItem.dataIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// else keep oldEl leaving animation.
|
||||||
|
}).updateOneToMany(function (newIndices, oldIndex) {
|
||||||
|
var oldItem = oldDiffItems[oldIndex];
|
||||||
|
var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex);
|
||||||
|
// We can't use the elements that already being morphed
|
||||||
|
if (oldEl && isElementStillInChart[oldEl.id]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var newElsList = filter(map(newIndices, function (idx) {
|
||||||
|
return newDiffItems[idx].data.getItemGraphicEl(newDiffItems[idx].dataIndex);
|
||||||
|
}), function (el) {
|
||||||
|
return el && el !== oldEl;
|
||||||
|
});
|
||||||
|
var newSeris = newDiffItems[newIndices[0]].data.hostModel;
|
||||||
|
if (newElsList.length) {
|
||||||
|
each(newElsList, function (newEl) {
|
||||||
|
return stopAnimation(newEl);
|
||||||
|
});
|
||||||
|
if (oldEl) {
|
||||||
|
stopAnimation(oldEl);
|
||||||
|
// If old element is doing leaving animation. stop it and remove it immediately.
|
||||||
|
removeEl(oldEl);
|
||||||
|
hasMorphAnimation = true;
|
||||||
|
applyMorphAnimation(getPathList(oldEl), getPathList(newElsList), oldItem.divide,
|
||||||
|
// Use divide on old.
|
||||||
|
newSeris, newIndices[0], updateMorphingPathProps);
|
||||||
|
} else {
|
||||||
|
each(newElsList, function (newEl) {
|
||||||
|
return fadeInElement(newEl, newSeris, newIndices[0]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// else keep oldEl leaving animation.
|
||||||
|
}).updateManyToMany(function (newIndices, oldIndices) {
|
||||||
|
// If two data are same and both have groupId.
|
||||||
|
// Normally they should be diff by id.
|
||||||
|
new DataDiffer(oldIndices, newIndices, function (rawIdx) {
|
||||||
|
return oldDiffItems[rawIdx].data.getId(oldDiffItems[rawIdx].dataIndex);
|
||||||
|
}, function (rawIdx) {
|
||||||
|
return newDiffItems[rawIdx].data.getId(newDiffItems[rawIdx].dataIndex);
|
||||||
|
}).update(function (newIndex, oldIndex) {
|
||||||
|
// Use the original index
|
||||||
|
updateOneToOne(newIndices[newIndex], oldIndices[oldIndex]);
|
||||||
|
}).execute();
|
||||||
|
}).execute();
|
||||||
|
if (hasMorphAnimation) {
|
||||||
|
each(newList, function (_a) {
|
||||||
|
var data = _a.data;
|
||||||
|
var seriesModel = data.hostModel;
|
||||||
|
var view = seriesModel && api.getViewOfSeriesModel(seriesModel);
|
||||||
|
var animationCfg = getAnimationConfig('update', seriesModel, 0); // use 0 index.
|
||||||
|
if (view && seriesModel.isAnimationEnabled() && animationCfg && animationCfg.duration > 0) {
|
||||||
|
view.group.traverse(function (el) {
|
||||||
|
if (el instanceof Path && !el.animators.length) {
|
||||||
|
// We can't accept there still exists element that has no animation
|
||||||
|
// if universalTransition is enabled
|
||||||
|
el.animateFrom({
|
||||||
|
style: {
|
||||||
|
opacity: 0
|
||||||
|
}
|
||||||
|
}, animationCfg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function getSeriesTransitionKey(series) {
|
||||||
|
var seriesKey = series.getModel('universalTransition').get('seriesKey');
|
||||||
|
if (!seriesKey) {
|
||||||
|
// Use series id by default.
|
||||||
|
return series.id;
|
||||||
|
}
|
||||||
|
return seriesKey;
|
||||||
|
}
|
||||||
|
function convertArraySeriesKeyToString(seriesKey) {
|
||||||
|
if (isArray(seriesKey)) {
|
||||||
|
// Order independent.
|
||||||
|
return seriesKey.sort().join(',');
|
||||||
|
}
|
||||||
|
return seriesKey;
|
||||||
|
}
|
||||||
|
function getDivideShapeFromData(data) {
|
||||||
|
if (data.hostModel) {
|
||||||
|
return data.hostModel.getModel('universalTransition').get('divideShape');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function findTransitionSeriesBatches(globalStore, params) {
|
||||||
|
var updateBatches = createHashMap();
|
||||||
|
var oldDataMap = createHashMap();
|
||||||
|
// Map that only store key in array seriesKey.
|
||||||
|
// Which is used to query the old data when transition from one to multiple series.
|
||||||
|
var oldDataMapForSplit = createHashMap();
|
||||||
|
each(globalStore.oldSeries, function (series, idx) {
|
||||||
|
var oldDataGroupId = globalStore.oldDataGroupIds[idx];
|
||||||
|
var oldData = globalStore.oldData[idx];
|
||||||
|
var transitionKey = getSeriesTransitionKey(series);
|
||||||
|
var transitionKeyStr = convertArraySeriesKeyToString(transitionKey);
|
||||||
|
oldDataMap.set(transitionKeyStr, {
|
||||||
|
dataGroupId: oldDataGroupId,
|
||||||
|
data: oldData
|
||||||
|
});
|
||||||
|
if (isArray(transitionKey)) {
|
||||||
|
// Same key can't in different array seriesKey.
|
||||||
|
each(transitionKey, function (key) {
|
||||||
|
oldDataMapForSplit.set(key, {
|
||||||
|
key: transitionKeyStr,
|
||||||
|
dataGroupId: oldDataGroupId,
|
||||||
|
data: oldData
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
function checkTransitionSeriesKeyDuplicated(transitionKeyStr) {
|
||||||
|
if (updateBatches.get(transitionKeyStr)) {
|
||||||
|
warn("Duplicated seriesKey in universalTransition " + transitionKeyStr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
each(params.updatedSeries, function (series) {
|
||||||
|
if (series.isUniversalTransitionEnabled() && series.isAnimationEnabled()) {
|
||||||
|
var newDataGroupId = series.get('dataGroupId');
|
||||||
|
var newData = series.getData();
|
||||||
|
var transitionKey = getSeriesTransitionKey(series);
|
||||||
|
var transitionKeyStr = convertArraySeriesKeyToString(transitionKey);
|
||||||
|
// Only transition between series with same id.
|
||||||
|
var oldData = oldDataMap.get(transitionKeyStr);
|
||||||
|
// string transition key is the best match.
|
||||||
|
if (oldData) {
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
checkTransitionSeriesKeyDuplicated(transitionKeyStr);
|
||||||
|
}
|
||||||
|
// TODO check if data is same?
|
||||||
|
updateBatches.set(transitionKeyStr, {
|
||||||
|
oldSeries: [{
|
||||||
|
dataGroupId: oldData.dataGroupId,
|
||||||
|
divide: getDivideShapeFromData(oldData.data),
|
||||||
|
data: oldData.data
|
||||||
|
}],
|
||||||
|
newSeries: [{
|
||||||
|
dataGroupId: newDataGroupId,
|
||||||
|
divide: getDivideShapeFromData(newData),
|
||||||
|
data: newData
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Transition from multiple series.
|
||||||
|
// e.g. 'female', 'male' -> ['female', 'male']
|
||||||
|
if (isArray(transitionKey)) {
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
checkTransitionSeriesKeyDuplicated(transitionKeyStr);
|
||||||
|
}
|
||||||
|
var oldSeries_1 = [];
|
||||||
|
each(transitionKey, function (key) {
|
||||||
|
var oldData = oldDataMap.get(key);
|
||||||
|
if (oldData.data) {
|
||||||
|
oldSeries_1.push({
|
||||||
|
dataGroupId: oldData.dataGroupId,
|
||||||
|
divide: getDivideShapeFromData(oldData.data),
|
||||||
|
data: oldData.data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (oldSeries_1.length) {
|
||||||
|
updateBatches.set(transitionKeyStr, {
|
||||||
|
oldSeries: oldSeries_1,
|
||||||
|
newSeries: [{
|
||||||
|
dataGroupId: newDataGroupId,
|
||||||
|
data: newData,
|
||||||
|
divide: getDivideShapeFromData(newData)
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Try transition to multiple series.
|
||||||
|
// e.g. ['female', 'male'] -> 'female', 'male'
|
||||||
|
var oldData_1 = oldDataMapForSplit.get(transitionKey);
|
||||||
|
if (oldData_1) {
|
||||||
|
var batch = updateBatches.get(oldData_1.key);
|
||||||
|
if (!batch) {
|
||||||
|
batch = {
|
||||||
|
oldSeries: [{
|
||||||
|
dataGroupId: oldData_1.dataGroupId,
|
||||||
|
data: oldData_1.data,
|
||||||
|
divide: getDivideShapeFromData(oldData_1.data)
|
||||||
|
}],
|
||||||
|
newSeries: []
|
||||||
|
};
|
||||||
|
updateBatches.set(oldData_1.key, batch);
|
||||||
|
}
|
||||||
|
batch.newSeries.push({
|
||||||
|
dataGroupId: newDataGroupId,
|
||||||
|
data: newData,
|
||||||
|
divide: getDivideShapeFromData(newData)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return updateBatches;
|
||||||
|
}
|
||||||
|
function querySeries(series, finder) {
|
||||||
|
for (var i = 0; i < series.length; i++) {
|
||||||
|
var found = finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id;
|
||||||
|
if (found) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function transitionSeriesFromOpt(transitionOpt, globalStore, params, api) {
|
||||||
|
var from = [];
|
||||||
|
var to = [];
|
||||||
|
each(normalizeToArray(transitionOpt.from), function (finder) {
|
||||||
|
var idx = querySeries(globalStore.oldSeries, finder);
|
||||||
|
if (idx >= 0) {
|
||||||
|
from.push({
|
||||||
|
dataGroupId: globalStore.oldDataGroupIds[idx],
|
||||||
|
data: globalStore.oldData[idx],
|
||||||
|
// TODO can specify divideShape in transition.
|
||||||
|
divide: getDivideShapeFromData(globalStore.oldData[idx]),
|
||||||
|
groupIdDim: finder.dimension
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
each(normalizeToArray(transitionOpt.to), function (finder) {
|
||||||
|
var idx = querySeries(params.updatedSeries, finder);
|
||||||
|
if (idx >= 0) {
|
||||||
|
var data = params.updatedSeries[idx].getData();
|
||||||
|
to.push({
|
||||||
|
dataGroupId: globalStore.oldDataGroupIds[idx],
|
||||||
|
data: data,
|
||||||
|
divide: getDivideShapeFromData(data),
|
||||||
|
groupIdDim: finder.dimension
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (from.length > 0 && to.length > 0) {
|
||||||
|
transitionBetween(from, to, api);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export function installUniversalTransition(registers) {
|
||||||
|
registers.registerUpdateLifecycle('series:beforeupdate', function (ecMOdel, api, params) {
|
||||||
|
each(normalizeToArray(params.seriesTransition), function (transOpt) {
|
||||||
|
each(normalizeToArray(transOpt.to), function (finder) {
|
||||||
|
var series = params.updatedSeries;
|
||||||
|
for (var i = 0; i < series.length; i++) {
|
||||||
|
if (finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id) {
|
||||||
|
series[i][SERIES_UNIVERSAL_TRANSITION_PROP] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
registers.registerUpdateLifecycle('series:transition', function (ecModel, api, params) {
|
||||||
|
// TODO api provide an namespace that can save stuff per instance
|
||||||
|
var globalStore = getUniversalTransitionGlobalStore(api);
|
||||||
|
// TODO multiple to multiple series.
|
||||||
|
if (globalStore.oldSeries && params.updatedSeries && params.optionChanged) {
|
||||||
|
// TODO transitionOpt was used in an old implementation and can be removed now
|
||||||
|
// Use give transition config if its' give;
|
||||||
|
var transitionOpt = params.seriesTransition;
|
||||||
|
if (transitionOpt) {
|
||||||
|
each(normalizeToArray(transitionOpt), function (opt) {
|
||||||
|
transitionSeriesFromOpt(opt, globalStore, params, api);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Else guess from series based on transition series key.
|
||||||
|
var updateBatches_1 = findTransitionSeriesBatches(globalStore, params);
|
||||||
|
each(updateBatches_1.keys(), function (key) {
|
||||||
|
var batch = updateBatches_1.get(key);
|
||||||
|
transitionBetween(batch.oldSeries, batch.newSeries, api);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// Reset
|
||||||
|
each(params.updatedSeries, function (series) {
|
||||||
|
// Reset;
|
||||||
|
if (series[SERIES_UNIVERSAL_TRANSITION_PROP]) {
|
||||||
|
series[SERIES_UNIVERSAL_TRANSITION_PROP] = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// Save all series of current update. Not only the updated one.
|
||||||
|
var allSeries = ecModel.getSeries();
|
||||||
|
var savedSeries = globalStore.oldSeries = [];
|
||||||
|
var savedDataGroupIds = globalStore.oldDataGroupIds = [];
|
||||||
|
var savedData = globalStore.oldData = [];
|
||||||
|
for (var i = 0; i < allSeries.length; i++) {
|
||||||
|
var data = allSeries[i].getData();
|
||||||
|
// Only save the data that can have transition.
|
||||||
|
// Avoid large data costing too much extra memory
|
||||||
|
if (data.count() < DATA_COUNT_THRESHOLD) {
|
||||||
|
savedSeries.push(allSeries[i]);
|
||||||
|
savedDataGroupIds.push(allSeries[i].get('dataGroupId'));
|
||||||
|
savedData.push(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { use } from '../extension.js';
|
||||||
|
import { install } from './bar/install.js';
|
||||||
|
use(install);
|
|
@ -0,0 +1,112 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { __extends } from "tslib";
|
||||||
|
import BaseBarSeriesModel from './BaseBarSeries.js';
|
||||||
|
import createSeriesData from '../helper/createSeriesData.js';
|
||||||
|
import { inheritDefaultOption } from '../../util/component.js';
|
||||||
|
var BarSeriesModel = /** @class */function (_super) {
|
||||||
|
__extends(BarSeriesModel, _super);
|
||||||
|
function BarSeriesModel() {
|
||||||
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||||||
|
_this.type = BarSeriesModel.type;
|
||||||
|
return _this;
|
||||||
|
}
|
||||||
|
BarSeriesModel.prototype.getInitialData = function () {
|
||||||
|
return createSeriesData(null, this, {
|
||||||
|
useEncodeDefaulter: true,
|
||||||
|
createInvertedIndices: !!this.get('realtimeSort', true) || null
|
||||||
|
});
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* @override
|
||||||
|
*/
|
||||||
|
BarSeriesModel.prototype.getProgressive = function () {
|
||||||
|
// Do not support progressive in normal mode.
|
||||||
|
return this.get('large') ? this.get('progressive') : false;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* @override
|
||||||
|
*/
|
||||||
|
BarSeriesModel.prototype.getProgressiveThreshold = function () {
|
||||||
|
// Do not support progressive in normal mode.
|
||||||
|
var progressiveThreshold = this.get('progressiveThreshold');
|
||||||
|
var largeThreshold = this.get('largeThreshold');
|
||||||
|
if (largeThreshold > progressiveThreshold) {
|
||||||
|
progressiveThreshold = largeThreshold;
|
||||||
|
}
|
||||||
|
return progressiveThreshold;
|
||||||
|
};
|
||||||
|
BarSeriesModel.prototype.brushSelector = function (dataIndex, data, selectors) {
|
||||||
|
return selectors.rect(data.getItemLayout(dataIndex));
|
||||||
|
};
|
||||||
|
BarSeriesModel.type = 'series.bar';
|
||||||
|
BarSeriesModel.dependencies = ['grid', 'polar'];
|
||||||
|
BarSeriesModel.defaultOption = inheritDefaultOption(BaseBarSeriesModel.defaultOption, {
|
||||||
|
// If clipped
|
||||||
|
// Only available on cartesian2d
|
||||||
|
clip: true,
|
||||||
|
roundCap: false,
|
||||||
|
showBackground: false,
|
||||||
|
backgroundStyle: {
|
||||||
|
color: 'rgba(180, 180, 180, 0.2)',
|
||||||
|
borderColor: null,
|
||||||
|
borderWidth: 0,
|
||||||
|
borderType: 'solid',
|
||||||
|
borderRadius: 0,
|
||||||
|
shadowBlur: 0,
|
||||||
|
shadowColor: null,
|
||||||
|
shadowOffsetX: 0,
|
||||||
|
shadowOffsetY: 0,
|
||||||
|
opacity: 1
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
itemStyle: {
|
||||||
|
borderColor: '#212121'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
realtimeSort: false
|
||||||
|
});
|
||||||
|
return BarSeriesModel;
|
||||||
|
}(BaseBarSeriesModel);
|
||||||
|
export default BarSeriesModel;
|
|
@ -0,0 +1,892 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { __extends } from "tslib";
|
||||||
|
import Path from 'zrender/lib/graphic/Path.js';
|
||||||
|
import Group from 'zrender/lib/graphic/Group.js';
|
||||||
|
import { extend, each, map } from 'zrender/lib/core/util.js';
|
||||||
|
import { Rect, Sector, updateProps, initProps, removeElementWithFadeOut, traverseElements } from '../../util/graphic.js';
|
||||||
|
import { getECData } from '../../util/innerStore.js';
|
||||||
|
import { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js';
|
||||||
|
import { setLabelStyle, getLabelStatesModels, setLabelValueAnimation, labelInner } from '../../label/labelStyle.js';
|
||||||
|
import { throttle } from '../../util/throttle.js';
|
||||||
|
import { createClipPath } from '../helper/createClipPathFromCoordSys.js';
|
||||||
|
import Sausage from '../../util/shape/sausage.js';
|
||||||
|
import ChartView from '../../view/Chart.js';
|
||||||
|
import { isCoordinateSystemType } from '../../coord/CoordinateSystem.js';
|
||||||
|
import { getDefaultLabel, getDefaultInterpolatedLabel } from '../helper/labelHelper.js';
|
||||||
|
import { warn } from '../../util/log.js';
|
||||||
|
import { createSectorCalculateTextPosition, setSectorTextRotation } from '../../label/sectorLabel.js';
|
||||||
|
import { saveOldStyle } from '../../animation/basicTransition.js';
|
||||||
|
import { getSectorCornerRadius } from '../helper/sectorHelper.js';
|
||||||
|
var mathMax = Math.max;
|
||||||
|
var mathMin = Math.min;
|
||||||
|
function getClipArea(coord, data) {
|
||||||
|
var coordSysClipArea = coord.getArea && coord.getArea();
|
||||||
|
if (isCoordinateSystemType(coord, 'cartesian2d')) {
|
||||||
|
var baseAxis = coord.getBaseAxis();
|
||||||
|
// When boundaryGap is false or using time axis. bar may exceed the grid.
|
||||||
|
// We should not clip this part.
|
||||||
|
// See test/bar2.html
|
||||||
|
if (baseAxis.type !== 'category' || !baseAxis.onBand) {
|
||||||
|
var expandWidth = data.getLayout('bandWidth');
|
||||||
|
if (baseAxis.isHorizontal()) {
|
||||||
|
coordSysClipArea.x -= expandWidth;
|
||||||
|
coordSysClipArea.width += expandWidth * 2;
|
||||||
|
} else {
|
||||||
|
coordSysClipArea.y -= expandWidth;
|
||||||
|
coordSysClipArea.height += expandWidth * 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return coordSysClipArea;
|
||||||
|
}
|
||||||
|
var BarView = /** @class */function (_super) {
|
||||||
|
__extends(BarView, _super);
|
||||||
|
function BarView() {
|
||||||
|
var _this = _super.call(this) || this;
|
||||||
|
_this.type = BarView.type;
|
||||||
|
_this._isFirstFrame = true;
|
||||||
|
return _this;
|
||||||
|
}
|
||||||
|
BarView.prototype.render = function (seriesModel, ecModel, api, payload) {
|
||||||
|
this._model = seriesModel;
|
||||||
|
this._removeOnRenderedListener(api);
|
||||||
|
this._updateDrawMode(seriesModel);
|
||||||
|
var coordinateSystemType = seriesModel.get('coordinateSystem');
|
||||||
|
if (coordinateSystemType === 'cartesian2d' || coordinateSystemType === 'polar') {
|
||||||
|
// Clear previously rendered progressive elements.
|
||||||
|
this._progressiveEls = null;
|
||||||
|
this._isLargeDraw ? this._renderLarge(seriesModel, ecModel, api) : this._renderNormal(seriesModel, ecModel, api, payload);
|
||||||
|
} else if (process.env.NODE_ENV !== 'production') {
|
||||||
|
warn('Only cartesian2d and polar supported for bar.');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
BarView.prototype.incrementalPrepareRender = function (seriesModel) {
|
||||||
|
this._clear();
|
||||||
|
this._updateDrawMode(seriesModel);
|
||||||
|
// incremental also need to clip, otherwise might be overlow.
|
||||||
|
// But must not set clip in each frame, otherwise all of the children will be marked redraw.
|
||||||
|
this._updateLargeClip(seriesModel);
|
||||||
|
};
|
||||||
|
BarView.prototype.incrementalRender = function (params, seriesModel) {
|
||||||
|
// Reset
|
||||||
|
this._progressiveEls = [];
|
||||||
|
// Do not support progressive in normal mode.
|
||||||
|
this._incrementalRenderLarge(params, seriesModel);
|
||||||
|
};
|
||||||
|
BarView.prototype.eachRendered = function (cb) {
|
||||||
|
traverseElements(this._progressiveEls || this.group, cb);
|
||||||
|
};
|
||||||
|
BarView.prototype._updateDrawMode = function (seriesModel) {
|
||||||
|
var isLargeDraw = seriesModel.pipelineContext.large;
|
||||||
|
if (this._isLargeDraw == null || isLargeDraw !== this._isLargeDraw) {
|
||||||
|
this._isLargeDraw = isLargeDraw;
|
||||||
|
this._clear();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
BarView.prototype._renderNormal = function (seriesModel, ecModel, api, payload) {
|
||||||
|
var group = this.group;
|
||||||
|
var data = seriesModel.getData();
|
||||||
|
var oldData = this._data;
|
||||||
|
var coord = seriesModel.coordinateSystem;
|
||||||
|
var baseAxis = coord.getBaseAxis();
|
||||||
|
var isHorizontalOrRadial;
|
||||||
|
if (coord.type === 'cartesian2d') {
|
||||||
|
isHorizontalOrRadial = baseAxis.isHorizontal();
|
||||||
|
} else if (coord.type === 'polar') {
|
||||||
|
isHorizontalOrRadial = baseAxis.dim === 'angle';
|
||||||
|
}
|
||||||
|
var animationModel = seriesModel.isAnimationEnabled() ? seriesModel : null;
|
||||||
|
var realtimeSortCfg = shouldRealtimeSort(seriesModel, coord);
|
||||||
|
if (realtimeSortCfg) {
|
||||||
|
this._enableRealtimeSort(realtimeSortCfg, data, api);
|
||||||
|
}
|
||||||
|
var needsClip = seriesModel.get('clip', true) || realtimeSortCfg;
|
||||||
|
var coordSysClipArea = getClipArea(coord, data);
|
||||||
|
// If there is clipPath created in large mode. Remove it.
|
||||||
|
group.removeClipPath();
|
||||||
|
// We don't use clipPath in normal mode because we needs a perfect animation
|
||||||
|
// And don't want the label are clipped.
|
||||||
|
var roundCap = seriesModel.get('roundCap', true);
|
||||||
|
var drawBackground = seriesModel.get('showBackground', true);
|
||||||
|
var backgroundModel = seriesModel.getModel('backgroundStyle');
|
||||||
|
var barBorderRadius = backgroundModel.get('borderRadius') || 0;
|
||||||
|
var bgEls = [];
|
||||||
|
var oldBgEls = this._backgroundEls;
|
||||||
|
var isInitSort = payload && payload.isInitSort;
|
||||||
|
var isChangeOrder = payload && payload.type === 'changeAxisOrder';
|
||||||
|
function createBackground(dataIndex) {
|
||||||
|
var bgLayout = getLayout[coord.type](data, dataIndex);
|
||||||
|
var bgEl = createBackgroundEl(coord, isHorizontalOrRadial, bgLayout);
|
||||||
|
bgEl.useStyle(backgroundModel.getItemStyle());
|
||||||
|
// Only cartesian2d support borderRadius.
|
||||||
|
if (coord.type === 'cartesian2d') {
|
||||||
|
bgEl.setShape('r', barBorderRadius);
|
||||||
|
} else {
|
||||||
|
bgEl.setShape('cornerRadius', barBorderRadius);
|
||||||
|
}
|
||||||
|
bgEls[dataIndex] = bgEl;
|
||||||
|
return bgEl;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
data.diff(oldData).add(function (dataIndex) {
|
||||||
|
var itemModel = data.getItemModel(dataIndex);
|
||||||
|
var layout = getLayout[coord.type](data, dataIndex, itemModel);
|
||||||
|
if (drawBackground) {
|
||||||
|
createBackground(dataIndex);
|
||||||
|
}
|
||||||
|
// If dataZoom in filteMode: 'empty', the baseValue can be set as NaN in "axisProxy".
|
||||||
|
if (!data.hasValue(dataIndex) || !isValidLayout[coord.type](layout)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var isClipped = false;
|
||||||
|
if (needsClip) {
|
||||||
|
// Clip will modify the layout params.
|
||||||
|
// And return a boolean to determine if the shape are fully clipped.
|
||||||
|
isClipped = clip[coord.type](coordSysClipArea, layout);
|
||||||
|
}
|
||||||
|
var el = elementCreator[coord.type](seriesModel, data, dataIndex, layout, isHorizontalOrRadial, animationModel, baseAxis.model, false, roundCap);
|
||||||
|
if (realtimeSortCfg) {
|
||||||
|
/**
|
||||||
|
* Force label animation because even if the element is
|
||||||
|
* ignored because it's clipped, it may not be clipped after
|
||||||
|
* changing order. Then, if not using forceLabelAnimation,
|
||||||
|
* the label animation was never started, in which case,
|
||||||
|
* the label will be the final value and doesn't have label
|
||||||
|
* animation.
|
||||||
|
*/
|
||||||
|
el.forceLabelAnimation = true;
|
||||||
|
}
|
||||||
|
updateStyle(el, data, dataIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, coord.type === 'polar');
|
||||||
|
if (isInitSort) {
|
||||||
|
el.attr({
|
||||||
|
shape: layout
|
||||||
|
});
|
||||||
|
} else if (realtimeSortCfg) {
|
||||||
|
updateRealtimeAnimation(realtimeSortCfg, animationModel, el, layout, dataIndex, isHorizontalOrRadial, false, false);
|
||||||
|
} else {
|
||||||
|
initProps(el, {
|
||||||
|
shape: layout
|
||||||
|
}, seriesModel, dataIndex);
|
||||||
|
}
|
||||||
|
data.setItemGraphicEl(dataIndex, el);
|
||||||
|
group.add(el);
|
||||||
|
el.ignore = isClipped;
|
||||||
|
}).update(function (newIndex, oldIndex) {
|
||||||
|
var itemModel = data.getItemModel(newIndex);
|
||||||
|
var layout = getLayout[coord.type](data, newIndex, itemModel);
|
||||||
|
if (drawBackground) {
|
||||||
|
var bgEl = void 0;
|
||||||
|
if (oldBgEls.length === 0) {
|
||||||
|
bgEl = createBackground(oldIndex);
|
||||||
|
} else {
|
||||||
|
bgEl = oldBgEls[oldIndex];
|
||||||
|
bgEl.useStyle(backgroundModel.getItemStyle());
|
||||||
|
// Only cartesian2d support borderRadius.
|
||||||
|
if (coord.type === 'cartesian2d') {
|
||||||
|
bgEl.setShape('r', barBorderRadius);
|
||||||
|
} else {
|
||||||
|
bgEl.setShape('cornerRadius', barBorderRadius);
|
||||||
|
}
|
||||||
|
bgEls[newIndex] = bgEl;
|
||||||
|
}
|
||||||
|
var bgLayout = getLayout[coord.type](data, newIndex);
|
||||||
|
var shape = createBackgroundShape(isHorizontalOrRadial, bgLayout, coord);
|
||||||
|
updateProps(bgEl, {
|
||||||
|
shape: shape
|
||||||
|
}, animationModel, newIndex);
|
||||||
|
}
|
||||||
|
var el = oldData.getItemGraphicEl(oldIndex);
|
||||||
|
if (!data.hasValue(newIndex) || !isValidLayout[coord.type](layout)) {
|
||||||
|
group.remove(el);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var isClipped = false;
|
||||||
|
if (needsClip) {
|
||||||
|
isClipped = clip[coord.type](coordSysClipArea, layout);
|
||||||
|
if (isClipped) {
|
||||||
|
group.remove(el);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!el) {
|
||||||
|
el = elementCreator[coord.type](seriesModel, data, newIndex, layout, isHorizontalOrRadial, animationModel, baseAxis.model, !!el, roundCap);
|
||||||
|
} else {
|
||||||
|
saveOldStyle(el);
|
||||||
|
}
|
||||||
|
if (realtimeSortCfg) {
|
||||||
|
el.forceLabelAnimation = true;
|
||||||
|
}
|
||||||
|
if (isChangeOrder) {
|
||||||
|
var textEl = el.getTextContent();
|
||||||
|
if (textEl) {
|
||||||
|
var labelInnerStore = labelInner(textEl);
|
||||||
|
if (labelInnerStore.prevValue != null) {
|
||||||
|
/**
|
||||||
|
* Set preValue to be value so that no new label
|
||||||
|
* should be started, otherwise, it will take a full
|
||||||
|
* `animationDurationUpdate` time to finish the
|
||||||
|
* animation, which is not expected.
|
||||||
|
*/
|
||||||
|
labelInnerStore.prevValue = labelInnerStore.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Not change anything if only order changed.
|
||||||
|
// Especially not change label.
|
||||||
|
else {
|
||||||
|
updateStyle(el, data, newIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, coord.type === 'polar');
|
||||||
|
}
|
||||||
|
if (isInitSort) {
|
||||||
|
el.attr({
|
||||||
|
shape: layout
|
||||||
|
});
|
||||||
|
} else if (realtimeSortCfg) {
|
||||||
|
updateRealtimeAnimation(realtimeSortCfg, animationModel, el, layout, newIndex, isHorizontalOrRadial, true, isChangeOrder);
|
||||||
|
} else {
|
||||||
|
updateProps(el, {
|
||||||
|
shape: layout
|
||||||
|
}, seriesModel, newIndex, null);
|
||||||
|
}
|
||||||
|
data.setItemGraphicEl(newIndex, el);
|
||||||
|
el.ignore = isClipped;
|
||||||
|
group.add(el);
|
||||||
|
}).remove(function (dataIndex) {
|
||||||
|
var el = oldData.getItemGraphicEl(dataIndex);
|
||||||
|
el && removeElementWithFadeOut(el, seriesModel, dataIndex);
|
||||||
|
}).execute();
|
||||||
|
var bgGroup = this._backgroundGroup || (this._backgroundGroup = new Group());
|
||||||
|
bgGroup.removeAll();
|
||||||
|
for (var i = 0; i < bgEls.length; ++i) {
|
||||||
|
bgGroup.add(bgEls[i]);
|
||||||
|
}
|
||||||
|
group.add(bgGroup);
|
||||||
|
this._backgroundEls = bgEls;
|
||||||
|
this._data = data;
|
||||||
|
};
|
||||||
|
BarView.prototype._renderLarge = function (seriesModel, ecModel, api) {
|
||||||
|
this._clear();
|
||||||
|
createLarge(seriesModel, this.group);
|
||||||
|
this._updateLargeClip(seriesModel);
|
||||||
|
};
|
||||||
|
BarView.prototype._incrementalRenderLarge = function (params, seriesModel) {
|
||||||
|
this._removeBackground();
|
||||||
|
createLarge(seriesModel, this.group, this._progressiveEls, true);
|
||||||
|
};
|
||||||
|
BarView.prototype._updateLargeClip = function (seriesModel) {
|
||||||
|
// Use clipPath in large mode.
|
||||||
|
var clipPath = seriesModel.get('clip', true) && createClipPath(seriesModel.coordinateSystem, false, seriesModel);
|
||||||
|
var group = this.group;
|
||||||
|
if (clipPath) {
|
||||||
|
group.setClipPath(clipPath);
|
||||||
|
} else {
|
||||||
|
group.removeClipPath();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
BarView.prototype._enableRealtimeSort = function (realtimeSortCfg, data, api) {
|
||||||
|
var _this = this;
|
||||||
|
// If no data in the first frame, wait for data to initSort
|
||||||
|
if (!data.count()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var baseAxis = realtimeSortCfg.baseAxis;
|
||||||
|
if (this._isFirstFrame) {
|
||||||
|
this._dispatchInitSort(data, realtimeSortCfg, api);
|
||||||
|
this._isFirstFrame = false;
|
||||||
|
} else {
|
||||||
|
var orderMapping_1 = function (idx) {
|
||||||
|
var el = data.getItemGraphicEl(idx);
|
||||||
|
var shape = el && el.shape;
|
||||||
|
return shape &&
|
||||||
|
// The result should be consistent with the initial sort by data value.
|
||||||
|
// Do not support the case that both positive and negative exist.
|
||||||
|
Math.abs(baseAxis.isHorizontal() ? shape.height : shape.width)
|
||||||
|
// If data is NaN, shape.xxx may be NaN, so use || 0 here in case
|
||||||
|
|| 0;
|
||||||
|
};
|
||||||
|
this._onRendered = function () {
|
||||||
|
_this._updateSortWithinSameData(data, orderMapping_1, baseAxis, api);
|
||||||
|
};
|
||||||
|
api.getZr().on('rendered', this._onRendered);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
BarView.prototype._dataSort = function (data, baseAxis, orderMapping) {
|
||||||
|
var info = [];
|
||||||
|
data.each(data.mapDimension(baseAxis.dim), function (ordinalNumber, dataIdx) {
|
||||||
|
var mappedValue = orderMapping(dataIdx);
|
||||||
|
mappedValue = mappedValue == null ? NaN : mappedValue;
|
||||||
|
info.push({
|
||||||
|
dataIndex: dataIdx,
|
||||||
|
mappedValue: mappedValue,
|
||||||
|
ordinalNumber: ordinalNumber
|
||||||
|
});
|
||||||
|
});
|
||||||
|
info.sort(function (a, b) {
|
||||||
|
// If NaN, it will be treated as min val.
|
||||||
|
return b.mappedValue - a.mappedValue;
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
ordinalNumbers: map(info, function (item) {
|
||||||
|
return item.ordinalNumber;
|
||||||
|
})
|
||||||
|
};
|
||||||
|
};
|
||||||
|
BarView.prototype._isOrderChangedWithinSameData = function (data, orderMapping, baseAxis) {
|
||||||
|
var scale = baseAxis.scale;
|
||||||
|
var ordinalDataDim = data.mapDimension(baseAxis.dim);
|
||||||
|
var lastValue = Number.MAX_VALUE;
|
||||||
|
for (var tickNum = 0, len = scale.getOrdinalMeta().categories.length; tickNum < len; ++tickNum) {
|
||||||
|
var rawIdx = data.rawIndexOf(ordinalDataDim, scale.getRawOrdinalNumber(tickNum));
|
||||||
|
var value = rawIdx < 0
|
||||||
|
// If some tick have no bar, the tick will be treated as min.
|
||||||
|
? Number.MIN_VALUE
|
||||||
|
// PENDING: if dataZoom on baseAxis exits, is it a performance issue?
|
||||||
|
: orderMapping(data.indexOfRawIndex(rawIdx));
|
||||||
|
if (value > lastValue) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
lastValue = value;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
* Consider the case when A and B changed order, whose representing
|
||||||
|
* bars are both out of sight, we don't wish to trigger reorder action
|
||||||
|
* as long as the order in the view doesn't change.
|
||||||
|
*/
|
||||||
|
BarView.prototype._isOrderDifferentInView = function (orderInfo, baseAxis) {
|
||||||
|
var scale = baseAxis.scale;
|
||||||
|
var extent = scale.getExtent();
|
||||||
|
var tickNum = Math.max(0, extent[0]);
|
||||||
|
var tickMax = Math.min(extent[1], scale.getOrdinalMeta().categories.length - 1);
|
||||||
|
for (; tickNum <= tickMax; ++tickNum) {
|
||||||
|
if (orderInfo.ordinalNumbers[tickNum] !== scale.getRawOrdinalNumber(tickNum)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
BarView.prototype._updateSortWithinSameData = function (data, orderMapping, baseAxis, api) {
|
||||||
|
if (!this._isOrderChangedWithinSameData(data, orderMapping, baseAxis)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var sortInfo = this._dataSort(data, baseAxis, orderMapping);
|
||||||
|
if (this._isOrderDifferentInView(sortInfo, baseAxis)) {
|
||||||
|
this._removeOnRenderedListener(api);
|
||||||
|
api.dispatchAction({
|
||||||
|
type: 'changeAxisOrder',
|
||||||
|
componentType: baseAxis.dim + 'Axis',
|
||||||
|
axisId: baseAxis.index,
|
||||||
|
sortInfo: sortInfo
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
BarView.prototype._dispatchInitSort = function (data, realtimeSortCfg, api) {
|
||||||
|
var baseAxis = realtimeSortCfg.baseAxis;
|
||||||
|
var sortResult = this._dataSort(data, baseAxis, function (dataIdx) {
|
||||||
|
return data.get(data.mapDimension(realtimeSortCfg.otherAxis.dim), dataIdx);
|
||||||
|
});
|
||||||
|
api.dispatchAction({
|
||||||
|
type: 'changeAxisOrder',
|
||||||
|
componentType: baseAxis.dim + 'Axis',
|
||||||
|
isInitSort: true,
|
||||||
|
axisId: baseAxis.index,
|
||||||
|
sortInfo: sortResult
|
||||||
|
});
|
||||||
|
};
|
||||||
|
BarView.prototype.remove = function (ecModel, api) {
|
||||||
|
this._clear(this._model);
|
||||||
|
this._removeOnRenderedListener(api);
|
||||||
|
};
|
||||||
|
BarView.prototype.dispose = function (ecModel, api) {
|
||||||
|
this._removeOnRenderedListener(api);
|
||||||
|
};
|
||||||
|
BarView.prototype._removeOnRenderedListener = function (api) {
|
||||||
|
if (this._onRendered) {
|
||||||
|
api.getZr().off('rendered', this._onRendered);
|
||||||
|
this._onRendered = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
BarView.prototype._clear = function (model) {
|
||||||
|
var group = this.group;
|
||||||
|
var data = this._data;
|
||||||
|
if (model && model.isAnimationEnabled() && data && !this._isLargeDraw) {
|
||||||
|
this._removeBackground();
|
||||||
|
this._backgroundEls = [];
|
||||||
|
data.eachItemGraphicEl(function (el) {
|
||||||
|
removeElementWithFadeOut(el, model, getECData(el).dataIndex);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
group.removeAll();
|
||||||
|
}
|
||||||
|
this._data = null;
|
||||||
|
this._isFirstFrame = true;
|
||||||
|
};
|
||||||
|
BarView.prototype._removeBackground = function () {
|
||||||
|
this.group.remove(this._backgroundGroup);
|
||||||
|
this._backgroundGroup = null;
|
||||||
|
};
|
||||||
|
BarView.type = 'bar';
|
||||||
|
return BarView;
|
||||||
|
}(ChartView);
|
||||||
|
var clip = {
|
||||||
|
cartesian2d: function (coordSysBoundingRect, layout) {
|
||||||
|
var signWidth = layout.width < 0 ? -1 : 1;
|
||||||
|
var signHeight = layout.height < 0 ? -1 : 1;
|
||||||
|
// Needs positive width and height
|
||||||
|
if (signWidth < 0) {
|
||||||
|
layout.x += layout.width;
|
||||||
|
layout.width = -layout.width;
|
||||||
|
}
|
||||||
|
if (signHeight < 0) {
|
||||||
|
layout.y += layout.height;
|
||||||
|
layout.height = -layout.height;
|
||||||
|
}
|
||||||
|
var coordSysX2 = coordSysBoundingRect.x + coordSysBoundingRect.width;
|
||||||
|
var coordSysY2 = coordSysBoundingRect.y + coordSysBoundingRect.height;
|
||||||
|
var x = mathMax(layout.x, coordSysBoundingRect.x);
|
||||||
|
var x2 = mathMin(layout.x + layout.width, coordSysX2);
|
||||||
|
var y = mathMax(layout.y, coordSysBoundingRect.y);
|
||||||
|
var y2 = mathMin(layout.y + layout.height, coordSysY2);
|
||||||
|
var xClipped = x2 < x;
|
||||||
|
var yClipped = y2 < y;
|
||||||
|
// When xClipped or yClipped, the element will be marked as `ignore`.
|
||||||
|
// But we should also place the element at the edge of the coord sys bounding rect.
|
||||||
|
// Because if data changed and the bar shows again, its transition animation
|
||||||
|
// will begin at this place.
|
||||||
|
layout.x = xClipped && x > coordSysX2 ? x2 : x;
|
||||||
|
layout.y = yClipped && y > coordSysY2 ? y2 : y;
|
||||||
|
layout.width = xClipped ? 0 : x2 - x;
|
||||||
|
layout.height = yClipped ? 0 : y2 - y;
|
||||||
|
// Reverse back
|
||||||
|
if (signWidth < 0) {
|
||||||
|
layout.x += layout.width;
|
||||||
|
layout.width = -layout.width;
|
||||||
|
}
|
||||||
|
if (signHeight < 0) {
|
||||||
|
layout.y += layout.height;
|
||||||
|
layout.height = -layout.height;
|
||||||
|
}
|
||||||
|
return xClipped || yClipped;
|
||||||
|
},
|
||||||
|
polar: function (coordSysClipArea, layout) {
|
||||||
|
var signR = layout.r0 <= layout.r ? 1 : -1;
|
||||||
|
// Make sure r is larger than r0
|
||||||
|
if (signR < 0) {
|
||||||
|
var tmp = layout.r;
|
||||||
|
layout.r = layout.r0;
|
||||||
|
layout.r0 = tmp;
|
||||||
|
}
|
||||||
|
var r = mathMin(layout.r, coordSysClipArea.r);
|
||||||
|
var r0 = mathMax(layout.r0, coordSysClipArea.r0);
|
||||||
|
layout.r = r;
|
||||||
|
layout.r0 = r0;
|
||||||
|
var clipped = r - r0 < 0;
|
||||||
|
// Reverse back
|
||||||
|
if (signR < 0) {
|
||||||
|
var tmp = layout.r;
|
||||||
|
layout.r = layout.r0;
|
||||||
|
layout.r0 = tmp;
|
||||||
|
}
|
||||||
|
return clipped;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var elementCreator = {
|
||||||
|
cartesian2d: function (seriesModel, data, newIndex, layout, isHorizontal, animationModel, axisModel, isUpdate, roundCap) {
|
||||||
|
var rect = new Rect({
|
||||||
|
shape: extend({}, layout),
|
||||||
|
z2: 1
|
||||||
|
});
|
||||||
|
rect.__dataIndex = newIndex;
|
||||||
|
rect.name = 'item';
|
||||||
|
if (animationModel) {
|
||||||
|
var rectShape = rect.shape;
|
||||||
|
var animateProperty = isHorizontal ? 'height' : 'width';
|
||||||
|
rectShape[animateProperty] = 0;
|
||||||
|
}
|
||||||
|
return rect;
|
||||||
|
},
|
||||||
|
polar: function (seriesModel, data, newIndex, layout, isRadial, animationModel, axisModel, isUpdate, roundCap) {
|
||||||
|
var ShapeClass = !isRadial && roundCap ? Sausage : Sector;
|
||||||
|
var sector = new ShapeClass({
|
||||||
|
shape: layout,
|
||||||
|
z2: 1
|
||||||
|
});
|
||||||
|
sector.name = 'item';
|
||||||
|
var positionMap = createPolarPositionMapping(isRadial);
|
||||||
|
sector.calculateTextPosition = createSectorCalculateTextPosition(positionMap, {
|
||||||
|
isRoundCap: ShapeClass === Sausage
|
||||||
|
});
|
||||||
|
// Animation
|
||||||
|
if (animationModel) {
|
||||||
|
var sectorShape = sector.shape;
|
||||||
|
var animateProperty = isRadial ? 'r' : 'endAngle';
|
||||||
|
var animateTarget = {};
|
||||||
|
sectorShape[animateProperty] = isRadial ? layout.r0 : layout.startAngle;
|
||||||
|
animateTarget[animateProperty] = layout[animateProperty];
|
||||||
|
(isUpdate ? updateProps : initProps)(sector, {
|
||||||
|
shape: animateTarget
|
||||||
|
// __value: typeof dataValue === 'string' ? parseInt(dataValue, 10) : dataValue
|
||||||
|
}, animationModel);
|
||||||
|
}
|
||||||
|
return sector;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function shouldRealtimeSort(seriesModel, coordSys) {
|
||||||
|
var realtimeSortOption = seriesModel.get('realtimeSort', true);
|
||||||
|
var baseAxis = coordSys.getBaseAxis();
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
if (realtimeSortOption) {
|
||||||
|
if (baseAxis.type !== 'category') {
|
||||||
|
warn('`realtimeSort` will not work because this bar series is not based on a category axis.');
|
||||||
|
}
|
||||||
|
if (coordSys.type !== 'cartesian2d') {
|
||||||
|
warn('`realtimeSort` will not work because this bar series is not on cartesian2d.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (realtimeSortOption && baseAxis.type === 'category' && coordSys.type === 'cartesian2d') {
|
||||||
|
return {
|
||||||
|
baseAxis: baseAxis,
|
||||||
|
otherAxis: coordSys.getOtherAxis(baseAxis)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function updateRealtimeAnimation(realtimeSortCfg, seriesAnimationModel, el, layout, newIndex, isHorizontal, isUpdate, isChangeOrder) {
|
||||||
|
var seriesTarget;
|
||||||
|
var axisTarget;
|
||||||
|
if (isHorizontal) {
|
||||||
|
axisTarget = {
|
||||||
|
x: layout.x,
|
||||||
|
width: layout.width
|
||||||
|
};
|
||||||
|
seriesTarget = {
|
||||||
|
y: layout.y,
|
||||||
|
height: layout.height
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
axisTarget = {
|
||||||
|
y: layout.y,
|
||||||
|
height: layout.height
|
||||||
|
};
|
||||||
|
seriesTarget = {
|
||||||
|
x: layout.x,
|
||||||
|
width: layout.width
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (!isChangeOrder) {
|
||||||
|
// Keep the original growth animation if only axis order changed.
|
||||||
|
// Not start a new animation.
|
||||||
|
(isUpdate ? updateProps : initProps)(el, {
|
||||||
|
shape: seriesTarget
|
||||||
|
}, seriesAnimationModel, newIndex, null);
|
||||||
|
}
|
||||||
|
var axisAnimationModel = seriesAnimationModel ? realtimeSortCfg.baseAxis.model : null;
|
||||||
|
(isUpdate ? updateProps : initProps)(el, {
|
||||||
|
shape: axisTarget
|
||||||
|
}, axisAnimationModel, newIndex);
|
||||||
|
}
|
||||||
|
function checkPropertiesNotValid(obj, props) {
|
||||||
|
for (var i = 0; i < props.length; i++) {
|
||||||
|
if (!isFinite(obj[props[i]])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var rectPropties = ['x', 'y', 'width', 'height'];
|
||||||
|
var polarPropties = ['cx', 'cy', 'r', 'startAngle', 'endAngle'];
|
||||||
|
var isValidLayout = {
|
||||||
|
cartesian2d: function (layout) {
|
||||||
|
return !checkPropertiesNotValid(layout, rectPropties);
|
||||||
|
},
|
||||||
|
polar: function (layout) {
|
||||||
|
return !checkPropertiesNotValid(layout, polarPropties);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var getLayout = {
|
||||||
|
// itemModel is only used to get borderWidth, which is not needed
|
||||||
|
// when calculating bar background layout.
|
||||||
|
cartesian2d: function (data, dataIndex, itemModel) {
|
||||||
|
var layout = data.getItemLayout(dataIndex);
|
||||||
|
var fixedLineWidth = itemModel ? getLineWidth(itemModel, layout) : 0;
|
||||||
|
// fix layout with lineWidth
|
||||||
|
var signX = layout.width > 0 ? 1 : -1;
|
||||||
|
var signY = layout.height > 0 ? 1 : -1;
|
||||||
|
return {
|
||||||
|
x: layout.x + signX * fixedLineWidth / 2,
|
||||||
|
y: layout.y + signY * fixedLineWidth / 2,
|
||||||
|
width: layout.width - signX * fixedLineWidth,
|
||||||
|
height: layout.height - signY * fixedLineWidth
|
||||||
|
};
|
||||||
|
},
|
||||||
|
polar: function (data, dataIndex, itemModel) {
|
||||||
|
var layout = data.getItemLayout(dataIndex);
|
||||||
|
return {
|
||||||
|
cx: layout.cx,
|
||||||
|
cy: layout.cy,
|
||||||
|
r0: layout.r0,
|
||||||
|
r: layout.r,
|
||||||
|
startAngle: layout.startAngle,
|
||||||
|
endAngle: layout.endAngle,
|
||||||
|
clockwise: layout.clockwise
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function isZeroOnPolar(layout) {
|
||||||
|
return layout.startAngle != null && layout.endAngle != null && layout.startAngle === layout.endAngle;
|
||||||
|
}
|
||||||
|
function createPolarPositionMapping(isRadial) {
|
||||||
|
return function (isRadial) {
|
||||||
|
var arcOrAngle = isRadial ? 'Arc' : 'Angle';
|
||||||
|
return function (position) {
|
||||||
|
switch (position) {
|
||||||
|
case 'start':
|
||||||
|
case 'insideStart':
|
||||||
|
case 'end':
|
||||||
|
case 'insideEnd':
|
||||||
|
return position + arcOrAngle;
|
||||||
|
default:
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}(isRadial);
|
||||||
|
}
|
||||||
|
function updateStyle(el, data, dataIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, isPolar) {
|
||||||
|
var style = data.getItemVisual(dataIndex, 'style');
|
||||||
|
if (!isPolar) {
|
||||||
|
var borderRadius = itemModel.get(['itemStyle', 'borderRadius']) || 0;
|
||||||
|
el.setShape('r', borderRadius);
|
||||||
|
} else if (!seriesModel.get('roundCap')) {
|
||||||
|
var sectorShape = el.shape;
|
||||||
|
var cornerRadius = getSectorCornerRadius(itemModel.getModel('itemStyle'), sectorShape, true);
|
||||||
|
extend(sectorShape, cornerRadius);
|
||||||
|
el.setShape(sectorShape);
|
||||||
|
}
|
||||||
|
el.useStyle(style);
|
||||||
|
var cursorStyle = itemModel.getShallow('cursor');
|
||||||
|
cursorStyle && el.attr('cursor', cursorStyle);
|
||||||
|
var labelPositionOutside = isPolar ? isHorizontalOrRadial ? layout.r >= layout.r0 ? 'endArc' : 'startArc' : layout.endAngle >= layout.startAngle ? 'endAngle' : 'startAngle' : isHorizontalOrRadial ? layout.height >= 0 ? 'bottom' : 'top' : layout.width >= 0 ? 'right' : 'left';
|
||||||
|
var labelStatesModels = getLabelStatesModels(itemModel);
|
||||||
|
setLabelStyle(el, labelStatesModels, {
|
||||||
|
labelFetcher: seriesModel,
|
||||||
|
labelDataIndex: dataIndex,
|
||||||
|
defaultText: getDefaultLabel(seriesModel.getData(), dataIndex),
|
||||||
|
inheritColor: style.fill,
|
||||||
|
defaultOpacity: style.opacity,
|
||||||
|
defaultOutsidePosition: labelPositionOutside
|
||||||
|
});
|
||||||
|
var label = el.getTextContent();
|
||||||
|
if (isPolar && label) {
|
||||||
|
var position = itemModel.get(['label', 'position']);
|
||||||
|
el.textConfig.inside = position === 'middle' ? true : null;
|
||||||
|
setSectorTextRotation(el, position === 'outside' ? labelPositionOutside : position, createPolarPositionMapping(isHorizontalOrRadial), itemModel.get(['label', 'rotate']));
|
||||||
|
}
|
||||||
|
setLabelValueAnimation(label, labelStatesModels, seriesModel.getRawValue(dataIndex), function (value) {
|
||||||
|
return getDefaultInterpolatedLabel(data, value);
|
||||||
|
});
|
||||||
|
var emphasisModel = itemModel.getModel(['emphasis']);
|
||||||
|
toggleHoverEmphasis(el, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));
|
||||||
|
setStatesStylesFromModel(el, itemModel);
|
||||||
|
if (isZeroOnPolar(layout)) {
|
||||||
|
el.style.fill = 'none';
|
||||||
|
el.style.stroke = 'none';
|
||||||
|
each(el.states, function (state) {
|
||||||
|
if (state.style) {
|
||||||
|
state.style.fill = state.style.stroke = 'none';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// In case width or height are too small.
|
||||||
|
function getLineWidth(itemModel, rawLayout) {
|
||||||
|
// Has no border.
|
||||||
|
var borderColor = itemModel.get(['itemStyle', 'borderColor']);
|
||||||
|
if (!borderColor || borderColor === 'none') {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
var lineWidth = itemModel.get(['itemStyle', 'borderWidth']) || 0;
|
||||||
|
// width or height may be NaN for empty data
|
||||||
|
var width = isNaN(rawLayout.width) ? Number.MAX_VALUE : Math.abs(rawLayout.width);
|
||||||
|
var height = isNaN(rawLayout.height) ? Number.MAX_VALUE : Math.abs(rawLayout.height);
|
||||||
|
return Math.min(lineWidth, width, height);
|
||||||
|
}
|
||||||
|
var LagePathShape = /** @class */function () {
|
||||||
|
function LagePathShape() {}
|
||||||
|
return LagePathShape;
|
||||||
|
}();
|
||||||
|
var LargePath = /** @class */function (_super) {
|
||||||
|
__extends(LargePath, _super);
|
||||||
|
function LargePath(opts) {
|
||||||
|
var _this = _super.call(this, opts) || this;
|
||||||
|
_this.type = 'largeBar';
|
||||||
|
return _this;
|
||||||
|
}
|
||||||
|
LargePath.prototype.getDefaultShape = function () {
|
||||||
|
return new LagePathShape();
|
||||||
|
};
|
||||||
|
LargePath.prototype.buildPath = function (ctx, shape) {
|
||||||
|
// Drawing lines is more efficient than drawing
|
||||||
|
// a whole line or drawing rects.
|
||||||
|
var points = shape.points;
|
||||||
|
var baseDimIdx = this.baseDimIdx;
|
||||||
|
var valueDimIdx = 1 - this.baseDimIdx;
|
||||||
|
var startPoint = [];
|
||||||
|
var size = [];
|
||||||
|
var barWidth = this.barWidth;
|
||||||
|
for (var i = 0; i < points.length; i += 3) {
|
||||||
|
size[baseDimIdx] = barWidth;
|
||||||
|
size[valueDimIdx] = points[i + 2];
|
||||||
|
startPoint[baseDimIdx] = points[i + baseDimIdx];
|
||||||
|
startPoint[valueDimIdx] = points[i + valueDimIdx];
|
||||||
|
ctx.rect(startPoint[0], startPoint[1], size[0], size[1]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return LargePath;
|
||||||
|
}(Path);
|
||||||
|
function createLarge(seriesModel, group, progressiveEls, incremental) {
|
||||||
|
// TODO support polar
|
||||||
|
var data = seriesModel.getData();
|
||||||
|
var baseDimIdx = data.getLayout('valueAxisHorizontal') ? 1 : 0;
|
||||||
|
var largeDataIndices = data.getLayout('largeDataIndices');
|
||||||
|
var barWidth = data.getLayout('size');
|
||||||
|
var backgroundModel = seriesModel.getModel('backgroundStyle');
|
||||||
|
var bgPoints = data.getLayout('largeBackgroundPoints');
|
||||||
|
if (bgPoints) {
|
||||||
|
var bgEl = new LargePath({
|
||||||
|
shape: {
|
||||||
|
points: bgPoints
|
||||||
|
},
|
||||||
|
incremental: !!incremental,
|
||||||
|
silent: true,
|
||||||
|
z2: 0
|
||||||
|
});
|
||||||
|
bgEl.baseDimIdx = baseDimIdx;
|
||||||
|
bgEl.largeDataIndices = largeDataIndices;
|
||||||
|
bgEl.barWidth = barWidth;
|
||||||
|
bgEl.useStyle(backgroundModel.getItemStyle());
|
||||||
|
group.add(bgEl);
|
||||||
|
progressiveEls && progressiveEls.push(bgEl);
|
||||||
|
}
|
||||||
|
var el = new LargePath({
|
||||||
|
shape: {
|
||||||
|
points: data.getLayout('largePoints')
|
||||||
|
},
|
||||||
|
incremental: !!incremental,
|
||||||
|
ignoreCoarsePointer: true,
|
||||||
|
z2: 1
|
||||||
|
});
|
||||||
|
el.baseDimIdx = baseDimIdx;
|
||||||
|
el.largeDataIndices = largeDataIndices;
|
||||||
|
el.barWidth = barWidth;
|
||||||
|
group.add(el);
|
||||||
|
el.useStyle(data.getVisual('style'));
|
||||||
|
// Enable tooltip and user mouse/touch event handlers.
|
||||||
|
getECData(el).seriesIndex = seriesModel.seriesIndex;
|
||||||
|
if (!seriesModel.get('silent')) {
|
||||||
|
el.on('mousedown', largePathUpdateDataIndex);
|
||||||
|
el.on('mousemove', largePathUpdateDataIndex);
|
||||||
|
}
|
||||||
|
progressiveEls && progressiveEls.push(el);
|
||||||
|
}
|
||||||
|
// Use throttle to avoid frequently traverse to find dataIndex.
|
||||||
|
var largePathUpdateDataIndex = throttle(function (event) {
|
||||||
|
var largePath = this;
|
||||||
|
var dataIndex = largePathFindDataIndex(largePath, event.offsetX, event.offsetY);
|
||||||
|
getECData(largePath).dataIndex = dataIndex >= 0 ? dataIndex : null;
|
||||||
|
}, 30, false);
|
||||||
|
function largePathFindDataIndex(largePath, x, y) {
|
||||||
|
var baseDimIdx = largePath.baseDimIdx;
|
||||||
|
var valueDimIdx = 1 - baseDimIdx;
|
||||||
|
var points = largePath.shape.points;
|
||||||
|
var largeDataIndices = largePath.largeDataIndices;
|
||||||
|
var startPoint = [];
|
||||||
|
var size = [];
|
||||||
|
var barWidth = largePath.barWidth;
|
||||||
|
for (var i = 0, len = points.length / 3; i < len; i++) {
|
||||||
|
var ii = i * 3;
|
||||||
|
size[baseDimIdx] = barWidth;
|
||||||
|
size[valueDimIdx] = points[ii + 2];
|
||||||
|
startPoint[baseDimIdx] = points[ii + baseDimIdx];
|
||||||
|
startPoint[valueDimIdx] = points[ii + valueDimIdx];
|
||||||
|
if (size[valueDimIdx] < 0) {
|
||||||
|
startPoint[valueDimIdx] += size[valueDimIdx];
|
||||||
|
size[valueDimIdx] = -size[valueDimIdx];
|
||||||
|
}
|
||||||
|
if (x >= startPoint[0] && x <= startPoint[0] + size[0] && y >= startPoint[1] && y <= startPoint[1] + size[1]) {
|
||||||
|
return largeDataIndices[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
function createBackgroundShape(isHorizontalOrRadial, layout, coord) {
|
||||||
|
if (isCoordinateSystemType(coord, 'cartesian2d')) {
|
||||||
|
var rectShape = layout;
|
||||||
|
var coordLayout = coord.getArea();
|
||||||
|
return {
|
||||||
|
x: isHorizontalOrRadial ? rectShape.x : coordLayout.x,
|
||||||
|
y: isHorizontalOrRadial ? coordLayout.y : rectShape.y,
|
||||||
|
width: isHorizontalOrRadial ? rectShape.width : coordLayout.width,
|
||||||
|
height: isHorizontalOrRadial ? coordLayout.height : rectShape.height
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
var coordLayout = coord.getArea();
|
||||||
|
var sectorShape = layout;
|
||||||
|
return {
|
||||||
|
cx: coordLayout.cx,
|
||||||
|
cy: coordLayout.cy,
|
||||||
|
r0: isHorizontalOrRadial ? coordLayout.r0 : sectorShape.r0,
|
||||||
|
r: isHorizontalOrRadial ? coordLayout.r : sectorShape.r,
|
||||||
|
startAngle: isHorizontalOrRadial ? sectorShape.startAngle : 0,
|
||||||
|
endAngle: isHorizontalOrRadial ? sectorShape.endAngle : Math.PI * 2
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function createBackgroundEl(coord, isHorizontalOrRadial, layout) {
|
||||||
|
var ElementClz = coord.type === 'polar' ? Sector : Rect;
|
||||||
|
return new ElementClz({
|
||||||
|
shape: createBackgroundShape(isHorizontalOrRadial, layout, coord),
|
||||||
|
silent: true,
|
||||||
|
z2: 0
|
||||||
|
});
|
||||||
|
}
|
||||||
|
export default BarView;
|
|
@ -0,0 +1,159 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { __extends } from "tslib";
|
||||||
|
import SeriesModel from '../../model/Series.js';
|
||||||
|
import createSeriesData from '../helper/createSeriesData.js';
|
||||||
|
import { each } from 'zrender/lib/core/util.js';
|
||||||
|
var BaseBarSeriesModel = /** @class */function (_super) {
|
||||||
|
__extends(BaseBarSeriesModel, _super);
|
||||||
|
function BaseBarSeriesModel() {
|
||||||
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||||||
|
_this.type = BaseBarSeriesModel.type;
|
||||||
|
return _this;
|
||||||
|
}
|
||||||
|
BaseBarSeriesModel.prototype.getInitialData = function (option, ecModel) {
|
||||||
|
return createSeriesData(null, this, {
|
||||||
|
useEncodeDefaulter: true
|
||||||
|
});
|
||||||
|
};
|
||||||
|
BaseBarSeriesModel.prototype.getMarkerPosition = function (value, dims, startingAtTick) {
|
||||||
|
var coordSys = this.coordinateSystem;
|
||||||
|
if (coordSys && coordSys.clampData) {
|
||||||
|
// PENDING if clamp ?
|
||||||
|
var clampData_1 = coordSys.clampData(value);
|
||||||
|
var pt_1 = coordSys.dataToPoint(clampData_1);
|
||||||
|
if (startingAtTick) {
|
||||||
|
each(coordSys.getAxes(), function (axis, idx) {
|
||||||
|
// If axis type is category, use tick coords instead
|
||||||
|
if (axis.type === 'category' && dims != null) {
|
||||||
|
var tickCoords = axis.getTicksCoords();
|
||||||
|
var alignTicksWithLabel = axis.getTickModel().get('alignWithLabel');
|
||||||
|
var targetTickId = clampData_1[idx];
|
||||||
|
// The index of rightmost tick of markArea is 1 larger than x1/y1 index
|
||||||
|
var isEnd = dims[idx] === 'x1' || dims[idx] === 'y1';
|
||||||
|
if (isEnd && !alignTicksWithLabel) {
|
||||||
|
targetTickId += 1;
|
||||||
|
}
|
||||||
|
// The only contains one tick, tickCoords is
|
||||||
|
// like [{coord: 0, tickValue: 0}, {coord: 0}]
|
||||||
|
// to the length should always be larger than 1
|
||||||
|
if (tickCoords.length < 2) {
|
||||||
|
return;
|
||||||
|
} else if (tickCoords.length === 2) {
|
||||||
|
// The left value and right value of the axis are
|
||||||
|
// the same. coord is 0 in both items. Use the max
|
||||||
|
// value of the axis as the coord
|
||||||
|
pt_1[idx] = axis.toGlobalCoord(axis.getExtent()[isEnd ? 1 : 0]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var leftCoord = void 0;
|
||||||
|
var coord = void 0;
|
||||||
|
var stepTickValue = 1;
|
||||||
|
for (var i = 0; i < tickCoords.length; i++) {
|
||||||
|
var tickCoord = tickCoords[i].coord;
|
||||||
|
// The last item of tickCoords doesn't contain
|
||||||
|
// tickValue
|
||||||
|
var tickValue = i === tickCoords.length - 1 ? tickCoords[i - 1].tickValue + stepTickValue : tickCoords[i].tickValue;
|
||||||
|
if (tickValue === targetTickId) {
|
||||||
|
coord = tickCoord;
|
||||||
|
break;
|
||||||
|
} else if (tickValue < targetTickId) {
|
||||||
|
leftCoord = tickCoord;
|
||||||
|
} else if (leftCoord != null && tickValue > targetTickId) {
|
||||||
|
coord = (tickCoord + leftCoord) / 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (i === 1) {
|
||||||
|
// Here we assume the step of category axes is
|
||||||
|
// the same
|
||||||
|
stepTickValue = tickValue - tickCoords[0].tickValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (coord == null) {
|
||||||
|
if (!leftCoord) {
|
||||||
|
// targetTickId is smaller than all tick ids in the
|
||||||
|
// visible area, use the leftmost tick coord
|
||||||
|
coord = tickCoords[0].coord;
|
||||||
|
} else if (leftCoord) {
|
||||||
|
// targetTickId is larger than all tick ids in the
|
||||||
|
// visible area, use the rightmost tick coord
|
||||||
|
coord = tickCoords[tickCoords.length - 1].coord;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pt_1[idx] = axis.toGlobalCoord(coord);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
var data = this.getData();
|
||||||
|
var offset = data.getLayout('offset');
|
||||||
|
var size = data.getLayout('size');
|
||||||
|
var offsetIndex = coordSys.getBaseAxis().isHorizontal() ? 0 : 1;
|
||||||
|
pt_1[offsetIndex] += offset + size / 2;
|
||||||
|
}
|
||||||
|
return pt_1;
|
||||||
|
}
|
||||||
|
return [NaN, NaN];
|
||||||
|
};
|
||||||
|
BaseBarSeriesModel.type = 'series.__base_bar__';
|
||||||
|
BaseBarSeriesModel.defaultOption = {
|
||||||
|
// zlevel: 0,
|
||||||
|
z: 2,
|
||||||
|
coordinateSystem: 'cartesian2d',
|
||||||
|
legendHoverLink: true,
|
||||||
|
// stack: null
|
||||||
|
// Cartesian coordinate system
|
||||||
|
// xAxisIndex: 0,
|
||||||
|
// yAxisIndex: 0,
|
||||||
|
barMinHeight: 0,
|
||||||
|
barMinAngle: 0,
|
||||||
|
// cursor: null,
|
||||||
|
large: false,
|
||||||
|
largeThreshold: 400,
|
||||||
|
progressive: 3e3,
|
||||||
|
progressiveChunkMode: 'mod'
|
||||||
|
};
|
||||||
|
return BaseBarSeriesModel;
|
||||||
|
}(SeriesModel);
|
||||||
|
SeriesModel.registerClass(BaseBarSeriesModel);
|
||||||
|
export default BaseBarSeriesModel;
|
|
@ -0,0 +1,95 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { __extends } from "tslib";
|
||||||
|
import BaseBarSeriesModel from './BaseBarSeries.js';
|
||||||
|
import { inheritDefaultOption } from '../../util/component.js';
|
||||||
|
var PictorialBarSeriesModel = /** @class */function (_super) {
|
||||||
|
__extends(PictorialBarSeriesModel, _super);
|
||||||
|
function PictorialBarSeriesModel() {
|
||||||
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||||||
|
_this.type = PictorialBarSeriesModel.type;
|
||||||
|
_this.hasSymbolVisual = true;
|
||||||
|
_this.defaultSymbol = 'roundRect';
|
||||||
|
return _this;
|
||||||
|
}
|
||||||
|
PictorialBarSeriesModel.prototype.getInitialData = function (option) {
|
||||||
|
// Disable stack.
|
||||||
|
option.stack = null;
|
||||||
|
return _super.prototype.getInitialData.apply(this, arguments);
|
||||||
|
};
|
||||||
|
PictorialBarSeriesModel.type = 'series.pictorialBar';
|
||||||
|
PictorialBarSeriesModel.dependencies = ['grid'];
|
||||||
|
PictorialBarSeriesModel.defaultOption = inheritDefaultOption(BaseBarSeriesModel.defaultOption, {
|
||||||
|
symbol: 'circle',
|
||||||
|
symbolSize: null,
|
||||||
|
symbolRotate: null,
|
||||||
|
symbolPosition: null,
|
||||||
|
symbolOffset: null,
|
||||||
|
symbolMargin: null,
|
||||||
|
symbolRepeat: false,
|
||||||
|
symbolRepeatDirection: 'end',
|
||||||
|
symbolClip: false,
|
||||||
|
symbolBoundingData: null,
|
||||||
|
symbolPatternSize: 400,
|
||||||
|
barGap: '-100%',
|
||||||
|
// Pictorial bar do not clip by default because in many cases
|
||||||
|
// xAxis and yAxis are not displayed and it's expected not to clip
|
||||||
|
clip: false,
|
||||||
|
// z can be set in data item, which is z2 actually.
|
||||||
|
// Disable progressive
|
||||||
|
progressive: 0,
|
||||||
|
emphasis: {
|
||||||
|
// By default pictorialBar do not hover scale. Hover scale is not suitable
|
||||||
|
// for the case that both has foreground and background.
|
||||||
|
scale: false
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
itemStyle: {
|
||||||
|
borderColor: '#212121'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return PictorialBarSeriesModel;
|
||||||
|
}(BaseBarSeriesModel);
|
||||||
|
export default PictorialBarSeriesModel;
|
|
@ -0,0 +1,630 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { __extends } from "tslib";
|
||||||
|
import * as zrUtil from 'zrender/lib/core/util.js';
|
||||||
|
import * as graphic from '../../util/graphic.js';
|
||||||
|
import { toggleHoverEmphasis } from '../../util/states.js';
|
||||||
|
import { createSymbol, normalizeSymbolOffset } from '../../util/symbol.js';
|
||||||
|
import { parsePercent, isNumeric } from '../../util/number.js';
|
||||||
|
import ChartView from '../../view/Chart.js';
|
||||||
|
import { getDefaultLabel } from '../helper/labelHelper.js';
|
||||||
|
import { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';
|
||||||
|
import ZRImage from 'zrender/lib/graphic/Image.js';
|
||||||
|
import { getECData } from '../../util/innerStore.js';
|
||||||
|
import { createClipPath } from '../helper/createClipPathFromCoordSys.js';
|
||||||
|
var BAR_BORDER_WIDTH_QUERY = ['itemStyle', 'borderWidth'];
|
||||||
|
// index: +isHorizontal
|
||||||
|
var LAYOUT_ATTRS = [{
|
||||||
|
xy: 'x',
|
||||||
|
wh: 'width',
|
||||||
|
index: 0,
|
||||||
|
posDesc: ['left', 'right']
|
||||||
|
}, {
|
||||||
|
xy: 'y',
|
||||||
|
wh: 'height',
|
||||||
|
index: 1,
|
||||||
|
posDesc: ['top', 'bottom']
|
||||||
|
}];
|
||||||
|
var pathForLineWidth = new graphic.Circle();
|
||||||
|
var PictorialBarView = /** @class */function (_super) {
|
||||||
|
__extends(PictorialBarView, _super);
|
||||||
|
function PictorialBarView() {
|
||||||
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||||||
|
_this.type = PictorialBarView.type;
|
||||||
|
return _this;
|
||||||
|
}
|
||||||
|
PictorialBarView.prototype.render = function (seriesModel, ecModel, api) {
|
||||||
|
var group = this.group;
|
||||||
|
var data = seriesModel.getData();
|
||||||
|
var oldData = this._data;
|
||||||
|
var cartesian = seriesModel.coordinateSystem;
|
||||||
|
var baseAxis = cartesian.getBaseAxis();
|
||||||
|
var isHorizontal = baseAxis.isHorizontal();
|
||||||
|
var coordSysRect = cartesian.master.getRect();
|
||||||
|
var opt = {
|
||||||
|
ecSize: {
|
||||||
|
width: api.getWidth(),
|
||||||
|
height: api.getHeight()
|
||||||
|
},
|
||||||
|
seriesModel: seriesModel,
|
||||||
|
coordSys: cartesian,
|
||||||
|
coordSysExtent: [[coordSysRect.x, coordSysRect.x + coordSysRect.width], [coordSysRect.y, coordSysRect.y + coordSysRect.height]],
|
||||||
|
isHorizontal: isHorizontal,
|
||||||
|
valueDim: LAYOUT_ATTRS[+isHorizontal],
|
||||||
|
categoryDim: LAYOUT_ATTRS[1 - +isHorizontal]
|
||||||
|
};
|
||||||
|
data.diff(oldData).add(function (dataIndex) {
|
||||||
|
if (!data.hasValue(dataIndex)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var itemModel = getItemModel(data, dataIndex);
|
||||||
|
var symbolMeta = getSymbolMeta(data, dataIndex, itemModel, opt);
|
||||||
|
var bar = createBar(data, opt, symbolMeta);
|
||||||
|
data.setItemGraphicEl(dataIndex, bar);
|
||||||
|
group.add(bar);
|
||||||
|
updateCommon(bar, opt, symbolMeta);
|
||||||
|
}).update(function (newIndex, oldIndex) {
|
||||||
|
var bar = oldData.getItemGraphicEl(oldIndex);
|
||||||
|
if (!data.hasValue(newIndex)) {
|
||||||
|
group.remove(bar);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var itemModel = getItemModel(data, newIndex);
|
||||||
|
var symbolMeta = getSymbolMeta(data, newIndex, itemModel, opt);
|
||||||
|
var pictorialShapeStr = getShapeStr(data, symbolMeta);
|
||||||
|
if (bar && pictorialShapeStr !== bar.__pictorialShapeStr) {
|
||||||
|
group.remove(bar);
|
||||||
|
data.setItemGraphicEl(newIndex, null);
|
||||||
|
bar = null;
|
||||||
|
}
|
||||||
|
if (bar) {
|
||||||
|
updateBar(bar, opt, symbolMeta);
|
||||||
|
} else {
|
||||||
|
bar = createBar(data, opt, symbolMeta, true);
|
||||||
|
}
|
||||||
|
data.setItemGraphicEl(newIndex, bar);
|
||||||
|
bar.__pictorialSymbolMeta = symbolMeta;
|
||||||
|
// Add back
|
||||||
|
group.add(bar);
|
||||||
|
updateCommon(bar, opt, symbolMeta);
|
||||||
|
}).remove(function (dataIndex) {
|
||||||
|
var bar = oldData.getItemGraphicEl(dataIndex);
|
||||||
|
bar && removeBar(oldData, dataIndex, bar.__pictorialSymbolMeta.animationModel, bar);
|
||||||
|
}).execute();
|
||||||
|
// Do clipping
|
||||||
|
var clipPath = seriesModel.get('clip', true) ? createClipPath(seriesModel.coordinateSystem, false, seriesModel) : null;
|
||||||
|
if (clipPath) {
|
||||||
|
group.setClipPath(clipPath);
|
||||||
|
} else {
|
||||||
|
group.removeClipPath();
|
||||||
|
}
|
||||||
|
this._data = data;
|
||||||
|
return this.group;
|
||||||
|
};
|
||||||
|
PictorialBarView.prototype.remove = function (ecModel, api) {
|
||||||
|
var group = this.group;
|
||||||
|
var data = this._data;
|
||||||
|
if (ecModel.get('animation')) {
|
||||||
|
if (data) {
|
||||||
|
data.eachItemGraphicEl(function (bar) {
|
||||||
|
removeBar(data, getECData(bar).dataIndex, ecModel, bar);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
group.removeAll();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
PictorialBarView.type = 'pictorialBar';
|
||||||
|
return PictorialBarView;
|
||||||
|
}(ChartView);
|
||||||
|
// Set or calculate default value about symbol, and calculate layout info.
|
||||||
|
function getSymbolMeta(data, dataIndex, itemModel, opt) {
|
||||||
|
var layout = data.getItemLayout(dataIndex);
|
||||||
|
var symbolRepeat = itemModel.get('symbolRepeat');
|
||||||
|
var symbolClip = itemModel.get('symbolClip');
|
||||||
|
var symbolPosition = itemModel.get('symbolPosition') || 'start';
|
||||||
|
var symbolRotate = itemModel.get('symbolRotate');
|
||||||
|
var rotation = (symbolRotate || 0) * Math.PI / 180 || 0;
|
||||||
|
var symbolPatternSize = itemModel.get('symbolPatternSize') || 2;
|
||||||
|
var isAnimationEnabled = itemModel.isAnimationEnabled();
|
||||||
|
var symbolMeta = {
|
||||||
|
dataIndex: dataIndex,
|
||||||
|
layout: layout,
|
||||||
|
itemModel: itemModel,
|
||||||
|
symbolType: data.getItemVisual(dataIndex, 'symbol') || 'circle',
|
||||||
|
style: data.getItemVisual(dataIndex, 'style'),
|
||||||
|
symbolClip: symbolClip,
|
||||||
|
symbolRepeat: symbolRepeat,
|
||||||
|
symbolRepeatDirection: itemModel.get('symbolRepeatDirection'),
|
||||||
|
symbolPatternSize: symbolPatternSize,
|
||||||
|
rotation: rotation,
|
||||||
|
animationModel: isAnimationEnabled ? itemModel : null,
|
||||||
|
hoverScale: isAnimationEnabled && itemModel.get(['emphasis', 'scale']),
|
||||||
|
z2: itemModel.getShallow('z', true) || 0
|
||||||
|
};
|
||||||
|
prepareBarLength(itemModel, symbolRepeat, layout, opt, symbolMeta);
|
||||||
|
prepareSymbolSize(data, dataIndex, layout, symbolRepeat, symbolClip, symbolMeta.boundingLength, symbolMeta.pxSign, symbolPatternSize, opt, symbolMeta);
|
||||||
|
prepareLineWidth(itemModel, symbolMeta.symbolScale, rotation, opt, symbolMeta);
|
||||||
|
var symbolSize = symbolMeta.symbolSize;
|
||||||
|
var symbolOffset = normalizeSymbolOffset(itemModel.get('symbolOffset'), symbolSize);
|
||||||
|
prepareLayoutInfo(itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, symbolPosition, symbolMeta.valueLineWidth, symbolMeta.boundingLength, symbolMeta.repeatCutLength, opt, symbolMeta);
|
||||||
|
return symbolMeta;
|
||||||
|
}
|
||||||
|
// bar length can be negative.
|
||||||
|
function prepareBarLength(itemModel, symbolRepeat, layout, opt, outputSymbolMeta) {
|
||||||
|
var valueDim = opt.valueDim;
|
||||||
|
var symbolBoundingData = itemModel.get('symbolBoundingData');
|
||||||
|
var valueAxis = opt.coordSys.getOtherAxis(opt.coordSys.getBaseAxis());
|
||||||
|
var zeroPx = valueAxis.toGlobalCoord(valueAxis.dataToCoord(0));
|
||||||
|
var pxSignIdx = 1 - +(layout[valueDim.wh] <= 0);
|
||||||
|
var boundingLength;
|
||||||
|
if (zrUtil.isArray(symbolBoundingData)) {
|
||||||
|
var symbolBoundingExtent = [convertToCoordOnAxis(valueAxis, symbolBoundingData[0]) - zeroPx, convertToCoordOnAxis(valueAxis, symbolBoundingData[1]) - zeroPx];
|
||||||
|
symbolBoundingExtent[1] < symbolBoundingExtent[0] && symbolBoundingExtent.reverse();
|
||||||
|
boundingLength = symbolBoundingExtent[pxSignIdx];
|
||||||
|
} else if (symbolBoundingData != null) {
|
||||||
|
boundingLength = convertToCoordOnAxis(valueAxis, symbolBoundingData) - zeroPx;
|
||||||
|
} else if (symbolRepeat) {
|
||||||
|
boundingLength = opt.coordSysExtent[valueDim.index][pxSignIdx] - zeroPx;
|
||||||
|
} else {
|
||||||
|
boundingLength = layout[valueDim.wh];
|
||||||
|
}
|
||||||
|
outputSymbolMeta.boundingLength = boundingLength;
|
||||||
|
if (symbolRepeat) {
|
||||||
|
outputSymbolMeta.repeatCutLength = layout[valueDim.wh];
|
||||||
|
}
|
||||||
|
// if 'pxSign' means sign of pixel, it can't be zero, or symbolScale will be zero
|
||||||
|
// and when borderWidth be settled, the actual linewidth will be NaN
|
||||||
|
outputSymbolMeta.pxSign = boundingLength > 0 ? 1 : -1;
|
||||||
|
}
|
||||||
|
function convertToCoordOnAxis(axis, value) {
|
||||||
|
return axis.toGlobalCoord(axis.dataToCoord(axis.scale.parse(value)));
|
||||||
|
}
|
||||||
|
// Support ['100%', '100%']
|
||||||
|
function prepareSymbolSize(data, dataIndex, layout, symbolRepeat, symbolClip, boundingLength, pxSign, symbolPatternSize, opt, outputSymbolMeta) {
|
||||||
|
var valueDim = opt.valueDim;
|
||||||
|
var categoryDim = opt.categoryDim;
|
||||||
|
var categorySize = Math.abs(layout[categoryDim.wh]);
|
||||||
|
var symbolSize = data.getItemVisual(dataIndex, 'symbolSize');
|
||||||
|
var parsedSymbolSize;
|
||||||
|
if (zrUtil.isArray(symbolSize)) {
|
||||||
|
parsedSymbolSize = symbolSize.slice();
|
||||||
|
} else {
|
||||||
|
if (symbolSize == null) {
|
||||||
|
// will parse to number below
|
||||||
|
parsedSymbolSize = ['100%', '100%'];
|
||||||
|
} else {
|
||||||
|
parsedSymbolSize = [symbolSize, symbolSize];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Note: percentage symbolSize (like '100%') do not consider lineWidth, because it is
|
||||||
|
// to complicated to calculate real percent value if considering scaled lineWidth.
|
||||||
|
// So the actual size will bigger than layout size if lineWidth is bigger than zero,
|
||||||
|
// which can be tolerated in pictorial chart.
|
||||||
|
parsedSymbolSize[categoryDim.index] = parsePercent(parsedSymbolSize[categoryDim.index], categorySize);
|
||||||
|
parsedSymbolSize[valueDim.index] = parsePercent(parsedSymbolSize[valueDim.index], symbolRepeat ? categorySize : Math.abs(boundingLength));
|
||||||
|
outputSymbolMeta.symbolSize = parsedSymbolSize;
|
||||||
|
// If x or y is less than zero, show reversed shape.
|
||||||
|
var symbolScale = outputSymbolMeta.symbolScale = [parsedSymbolSize[0] / symbolPatternSize, parsedSymbolSize[1] / symbolPatternSize];
|
||||||
|
// Follow convention, 'right' and 'top' is the normal scale.
|
||||||
|
symbolScale[valueDim.index] *= (opt.isHorizontal ? -1 : 1) * pxSign;
|
||||||
|
}
|
||||||
|
function prepareLineWidth(itemModel, symbolScale, rotation, opt, outputSymbolMeta) {
|
||||||
|
// In symbols are drawn with scale, so do not need to care about the case that width
|
||||||
|
// or height are too small. But symbol use strokeNoScale, where acture lineWidth should
|
||||||
|
// be calculated.
|
||||||
|
var valueLineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0;
|
||||||
|
if (valueLineWidth) {
|
||||||
|
pathForLineWidth.attr({
|
||||||
|
scaleX: symbolScale[0],
|
||||||
|
scaleY: symbolScale[1],
|
||||||
|
rotation: rotation
|
||||||
|
});
|
||||||
|
pathForLineWidth.updateTransform();
|
||||||
|
valueLineWidth /= pathForLineWidth.getLineScale();
|
||||||
|
valueLineWidth *= symbolScale[opt.valueDim.index];
|
||||||
|
}
|
||||||
|
outputSymbolMeta.valueLineWidth = valueLineWidth || 0;
|
||||||
|
}
|
||||||
|
function prepareLayoutInfo(itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, symbolPosition, valueLineWidth, boundingLength, repeatCutLength, opt, outputSymbolMeta) {
|
||||||
|
var categoryDim = opt.categoryDim;
|
||||||
|
var valueDim = opt.valueDim;
|
||||||
|
var pxSign = outputSymbolMeta.pxSign;
|
||||||
|
var unitLength = Math.max(symbolSize[valueDim.index] + valueLineWidth, 0);
|
||||||
|
var pathLen = unitLength;
|
||||||
|
// Note: rotation will not effect the layout of symbols, because user may
|
||||||
|
// want symbols to rotate on its center, which should not be translated
|
||||||
|
// when rotating.
|
||||||
|
if (symbolRepeat) {
|
||||||
|
var absBoundingLength = Math.abs(boundingLength);
|
||||||
|
var symbolMargin = zrUtil.retrieve(itemModel.get('symbolMargin'), '15%') + '';
|
||||||
|
var hasEndGap = false;
|
||||||
|
if (symbolMargin.lastIndexOf('!') === symbolMargin.length - 1) {
|
||||||
|
hasEndGap = true;
|
||||||
|
symbolMargin = symbolMargin.slice(0, symbolMargin.length - 1);
|
||||||
|
}
|
||||||
|
var symbolMarginNumeric = parsePercent(symbolMargin, symbolSize[valueDim.index]);
|
||||||
|
var uLenWithMargin = Math.max(unitLength + symbolMarginNumeric * 2, 0);
|
||||||
|
// When symbol margin is less than 0, margin at both ends will be subtracted
|
||||||
|
// to ensure that all of the symbols will not be overflow the given area.
|
||||||
|
var endFix = hasEndGap ? 0 : symbolMarginNumeric * 2;
|
||||||
|
// Both final repeatTimes and final symbolMarginNumeric area calculated based on
|
||||||
|
// boundingLength.
|
||||||
|
var repeatSpecified = isNumeric(symbolRepeat);
|
||||||
|
var repeatTimes = repeatSpecified ? symbolRepeat : toIntTimes((absBoundingLength + endFix) / uLenWithMargin);
|
||||||
|
// Adjust calculate margin, to ensure each symbol is displayed
|
||||||
|
// entirely in the given layout area.
|
||||||
|
var mDiff = absBoundingLength - repeatTimes * unitLength;
|
||||||
|
symbolMarginNumeric = mDiff / 2 / (hasEndGap ? repeatTimes : Math.max(repeatTimes - 1, 1));
|
||||||
|
uLenWithMargin = unitLength + symbolMarginNumeric * 2;
|
||||||
|
endFix = hasEndGap ? 0 : symbolMarginNumeric * 2;
|
||||||
|
// Update repeatTimes when not all symbol will be shown.
|
||||||
|
if (!repeatSpecified && symbolRepeat !== 'fixed') {
|
||||||
|
repeatTimes = repeatCutLength ? toIntTimes((Math.abs(repeatCutLength) + endFix) / uLenWithMargin) : 0;
|
||||||
|
}
|
||||||
|
pathLen = repeatTimes * uLenWithMargin - endFix;
|
||||||
|
outputSymbolMeta.repeatTimes = repeatTimes;
|
||||||
|
outputSymbolMeta.symbolMargin = symbolMarginNumeric;
|
||||||
|
}
|
||||||
|
var sizeFix = pxSign * (pathLen / 2);
|
||||||
|
var pathPosition = outputSymbolMeta.pathPosition = [];
|
||||||
|
pathPosition[categoryDim.index] = layout[categoryDim.wh] / 2;
|
||||||
|
pathPosition[valueDim.index] = symbolPosition === 'start' ? sizeFix : symbolPosition === 'end' ? boundingLength - sizeFix : boundingLength / 2; // 'center'
|
||||||
|
if (symbolOffset) {
|
||||||
|
pathPosition[0] += symbolOffset[0];
|
||||||
|
pathPosition[1] += symbolOffset[1];
|
||||||
|
}
|
||||||
|
var bundlePosition = outputSymbolMeta.bundlePosition = [];
|
||||||
|
bundlePosition[categoryDim.index] = layout[categoryDim.xy];
|
||||||
|
bundlePosition[valueDim.index] = layout[valueDim.xy];
|
||||||
|
var barRectShape = outputSymbolMeta.barRectShape = zrUtil.extend({}, layout);
|
||||||
|
barRectShape[valueDim.wh] = pxSign * Math.max(Math.abs(layout[valueDim.wh]), Math.abs(pathPosition[valueDim.index] + sizeFix));
|
||||||
|
barRectShape[categoryDim.wh] = layout[categoryDim.wh];
|
||||||
|
var clipShape = outputSymbolMeta.clipShape = {};
|
||||||
|
// Consider that symbol may be overflow layout rect.
|
||||||
|
clipShape[categoryDim.xy] = -layout[categoryDim.xy];
|
||||||
|
clipShape[categoryDim.wh] = opt.ecSize[categoryDim.wh];
|
||||||
|
clipShape[valueDim.xy] = 0;
|
||||||
|
clipShape[valueDim.wh] = layout[valueDim.wh];
|
||||||
|
}
|
||||||
|
function createPath(symbolMeta) {
|
||||||
|
var symbolPatternSize = symbolMeta.symbolPatternSize;
|
||||||
|
var path = createSymbol(
|
||||||
|
// Consider texture img, make a big size.
|
||||||
|
symbolMeta.symbolType, -symbolPatternSize / 2, -symbolPatternSize / 2, symbolPatternSize, symbolPatternSize);
|
||||||
|
path.attr({
|
||||||
|
culling: true
|
||||||
|
});
|
||||||
|
path.type !== 'image' && path.setStyle({
|
||||||
|
strokeNoScale: true
|
||||||
|
});
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
function createOrUpdateRepeatSymbols(bar, opt, symbolMeta, isUpdate) {
|
||||||
|
var bundle = bar.__pictorialBundle;
|
||||||
|
var symbolSize = symbolMeta.symbolSize;
|
||||||
|
var valueLineWidth = symbolMeta.valueLineWidth;
|
||||||
|
var pathPosition = symbolMeta.pathPosition;
|
||||||
|
var valueDim = opt.valueDim;
|
||||||
|
var repeatTimes = symbolMeta.repeatTimes || 0;
|
||||||
|
var index = 0;
|
||||||
|
var unit = symbolSize[opt.valueDim.index] + valueLineWidth + symbolMeta.symbolMargin * 2;
|
||||||
|
eachPath(bar, function (path) {
|
||||||
|
path.__pictorialAnimationIndex = index;
|
||||||
|
path.__pictorialRepeatTimes = repeatTimes;
|
||||||
|
if (index < repeatTimes) {
|
||||||
|
updateAttr(path, null, makeTarget(index), symbolMeta, isUpdate);
|
||||||
|
} else {
|
||||||
|
updateAttr(path, null, {
|
||||||
|
scaleX: 0,
|
||||||
|
scaleY: 0
|
||||||
|
}, symbolMeta, isUpdate, function () {
|
||||||
|
bundle.remove(path);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// updateHoverAnimation(path, symbolMeta);
|
||||||
|
index++;
|
||||||
|
});
|
||||||
|
for (; index < repeatTimes; index++) {
|
||||||
|
var path = createPath(symbolMeta);
|
||||||
|
path.__pictorialAnimationIndex = index;
|
||||||
|
path.__pictorialRepeatTimes = repeatTimes;
|
||||||
|
bundle.add(path);
|
||||||
|
var target = makeTarget(index);
|
||||||
|
updateAttr(path, {
|
||||||
|
x: target.x,
|
||||||
|
y: target.y,
|
||||||
|
scaleX: 0,
|
||||||
|
scaleY: 0
|
||||||
|
}, {
|
||||||
|
scaleX: target.scaleX,
|
||||||
|
scaleY: target.scaleY,
|
||||||
|
rotation: target.rotation
|
||||||
|
}, symbolMeta, isUpdate);
|
||||||
|
}
|
||||||
|
function makeTarget(index) {
|
||||||
|
var position = pathPosition.slice();
|
||||||
|
// (start && pxSign > 0) || (end && pxSign < 0): i = repeatTimes - index
|
||||||
|
// Otherwise: i = index;
|
||||||
|
var pxSign = symbolMeta.pxSign;
|
||||||
|
var i = index;
|
||||||
|
if (symbolMeta.symbolRepeatDirection === 'start' ? pxSign > 0 : pxSign < 0) {
|
||||||
|
i = repeatTimes - 1 - index;
|
||||||
|
}
|
||||||
|
position[valueDim.index] = unit * (i - repeatTimes / 2 + 0.5) + pathPosition[valueDim.index];
|
||||||
|
return {
|
||||||
|
x: position[0],
|
||||||
|
y: position[1],
|
||||||
|
scaleX: symbolMeta.symbolScale[0],
|
||||||
|
scaleY: symbolMeta.symbolScale[1],
|
||||||
|
rotation: symbolMeta.rotation
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function createOrUpdateSingleSymbol(bar, opt, symbolMeta, isUpdate) {
|
||||||
|
var bundle = bar.__pictorialBundle;
|
||||||
|
var mainPath = bar.__pictorialMainPath;
|
||||||
|
if (!mainPath) {
|
||||||
|
mainPath = bar.__pictorialMainPath = createPath(symbolMeta);
|
||||||
|
bundle.add(mainPath);
|
||||||
|
updateAttr(mainPath, {
|
||||||
|
x: symbolMeta.pathPosition[0],
|
||||||
|
y: symbolMeta.pathPosition[1],
|
||||||
|
scaleX: 0,
|
||||||
|
scaleY: 0,
|
||||||
|
rotation: symbolMeta.rotation
|
||||||
|
}, {
|
||||||
|
scaleX: symbolMeta.symbolScale[0],
|
||||||
|
scaleY: symbolMeta.symbolScale[1]
|
||||||
|
}, symbolMeta, isUpdate);
|
||||||
|
} else {
|
||||||
|
updateAttr(mainPath, null, {
|
||||||
|
x: symbolMeta.pathPosition[0],
|
||||||
|
y: symbolMeta.pathPosition[1],
|
||||||
|
scaleX: symbolMeta.symbolScale[0],
|
||||||
|
scaleY: symbolMeta.symbolScale[1],
|
||||||
|
rotation: symbolMeta.rotation
|
||||||
|
}, symbolMeta, isUpdate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// bar rect is used for label.
|
||||||
|
function createOrUpdateBarRect(bar, symbolMeta, isUpdate) {
|
||||||
|
var rectShape = zrUtil.extend({}, symbolMeta.barRectShape);
|
||||||
|
var barRect = bar.__pictorialBarRect;
|
||||||
|
if (!barRect) {
|
||||||
|
barRect = bar.__pictorialBarRect = new graphic.Rect({
|
||||||
|
z2: 2,
|
||||||
|
shape: rectShape,
|
||||||
|
silent: true,
|
||||||
|
style: {
|
||||||
|
stroke: 'transparent',
|
||||||
|
fill: 'transparent',
|
||||||
|
lineWidth: 0
|
||||||
|
}
|
||||||
|
});
|
||||||
|
barRect.disableMorphing = true;
|
||||||
|
bar.add(barRect);
|
||||||
|
} else {
|
||||||
|
updateAttr(barRect, null, {
|
||||||
|
shape: rectShape
|
||||||
|
}, symbolMeta, isUpdate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function createOrUpdateClip(bar, opt, symbolMeta, isUpdate) {
|
||||||
|
// If not clip, symbol will be remove and rebuilt.
|
||||||
|
if (symbolMeta.symbolClip) {
|
||||||
|
var clipPath = bar.__pictorialClipPath;
|
||||||
|
var clipShape = zrUtil.extend({}, symbolMeta.clipShape);
|
||||||
|
var valueDim = opt.valueDim;
|
||||||
|
var animationModel = symbolMeta.animationModel;
|
||||||
|
var dataIndex = symbolMeta.dataIndex;
|
||||||
|
if (clipPath) {
|
||||||
|
graphic.updateProps(clipPath, {
|
||||||
|
shape: clipShape
|
||||||
|
}, animationModel, dataIndex);
|
||||||
|
} else {
|
||||||
|
clipShape[valueDim.wh] = 0;
|
||||||
|
clipPath = new graphic.Rect({
|
||||||
|
shape: clipShape
|
||||||
|
});
|
||||||
|
bar.__pictorialBundle.setClipPath(clipPath);
|
||||||
|
bar.__pictorialClipPath = clipPath;
|
||||||
|
var target = {};
|
||||||
|
target[valueDim.wh] = symbolMeta.clipShape[valueDim.wh];
|
||||||
|
graphic[isUpdate ? 'updateProps' : 'initProps'](clipPath, {
|
||||||
|
shape: target
|
||||||
|
}, animationModel, dataIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function getItemModel(data, dataIndex) {
|
||||||
|
var itemModel = data.getItemModel(dataIndex);
|
||||||
|
itemModel.getAnimationDelayParams = getAnimationDelayParams;
|
||||||
|
itemModel.isAnimationEnabled = isAnimationEnabled;
|
||||||
|
return itemModel;
|
||||||
|
}
|
||||||
|
function getAnimationDelayParams(path) {
|
||||||
|
// The order is the same as the z-order, see `symbolRepeatDiretion`.
|
||||||
|
return {
|
||||||
|
index: path.__pictorialAnimationIndex,
|
||||||
|
count: path.__pictorialRepeatTimes
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function isAnimationEnabled() {
|
||||||
|
// `animation` prop can be set on itemModel in pictorial bar chart.
|
||||||
|
return this.parentModel.isAnimationEnabled() && !!this.getShallow('animation');
|
||||||
|
}
|
||||||
|
function createBar(data, opt, symbolMeta, isUpdate) {
|
||||||
|
// bar is the main element for each data.
|
||||||
|
var bar = new graphic.Group();
|
||||||
|
// bundle is used for location and clip.
|
||||||
|
var bundle = new graphic.Group();
|
||||||
|
bar.add(bundle);
|
||||||
|
bar.__pictorialBundle = bundle;
|
||||||
|
bundle.x = symbolMeta.bundlePosition[0];
|
||||||
|
bundle.y = symbolMeta.bundlePosition[1];
|
||||||
|
if (symbolMeta.symbolRepeat) {
|
||||||
|
createOrUpdateRepeatSymbols(bar, opt, symbolMeta);
|
||||||
|
} else {
|
||||||
|
createOrUpdateSingleSymbol(bar, opt, symbolMeta);
|
||||||
|
}
|
||||||
|
createOrUpdateBarRect(bar, symbolMeta, isUpdate);
|
||||||
|
createOrUpdateClip(bar, opt, symbolMeta, isUpdate);
|
||||||
|
bar.__pictorialShapeStr = getShapeStr(data, symbolMeta);
|
||||||
|
bar.__pictorialSymbolMeta = symbolMeta;
|
||||||
|
return bar;
|
||||||
|
}
|
||||||
|
function updateBar(bar, opt, symbolMeta) {
|
||||||
|
var animationModel = symbolMeta.animationModel;
|
||||||
|
var dataIndex = symbolMeta.dataIndex;
|
||||||
|
var bundle = bar.__pictorialBundle;
|
||||||
|
graphic.updateProps(bundle, {
|
||||||
|
x: symbolMeta.bundlePosition[0],
|
||||||
|
y: symbolMeta.bundlePosition[1]
|
||||||
|
}, animationModel, dataIndex);
|
||||||
|
if (symbolMeta.symbolRepeat) {
|
||||||
|
createOrUpdateRepeatSymbols(bar, opt, symbolMeta, true);
|
||||||
|
} else {
|
||||||
|
createOrUpdateSingleSymbol(bar, opt, symbolMeta, true);
|
||||||
|
}
|
||||||
|
createOrUpdateBarRect(bar, symbolMeta, true);
|
||||||
|
createOrUpdateClip(bar, opt, symbolMeta, true);
|
||||||
|
}
|
||||||
|
function removeBar(data, dataIndex, animationModel, bar) {
|
||||||
|
// Not show text when animating
|
||||||
|
var labelRect = bar.__pictorialBarRect;
|
||||||
|
labelRect && labelRect.removeTextContent();
|
||||||
|
var paths = [];
|
||||||
|
eachPath(bar, function (path) {
|
||||||
|
paths.push(path);
|
||||||
|
});
|
||||||
|
bar.__pictorialMainPath && paths.push(bar.__pictorialMainPath);
|
||||||
|
// I do not find proper remove animation for clip yet.
|
||||||
|
bar.__pictorialClipPath && (animationModel = null);
|
||||||
|
zrUtil.each(paths, function (path) {
|
||||||
|
graphic.removeElement(path, {
|
||||||
|
scaleX: 0,
|
||||||
|
scaleY: 0
|
||||||
|
}, animationModel, dataIndex, function () {
|
||||||
|
bar.parent && bar.parent.remove(bar);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
data.setItemGraphicEl(dataIndex, null);
|
||||||
|
}
|
||||||
|
function getShapeStr(data, symbolMeta) {
|
||||||
|
return [data.getItemVisual(symbolMeta.dataIndex, 'symbol') || 'none', !!symbolMeta.symbolRepeat, !!symbolMeta.symbolClip].join(':');
|
||||||
|
}
|
||||||
|
function eachPath(bar, cb, context) {
|
||||||
|
// Do not use Group#eachChild, because it do not support remove.
|
||||||
|
zrUtil.each(bar.__pictorialBundle.children(), function (el) {
|
||||||
|
el !== bar.__pictorialBarRect && cb.call(context, el);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function updateAttr(el, immediateAttrs, animationAttrs, symbolMeta, isUpdate, cb) {
|
||||||
|
immediateAttrs && el.attr(immediateAttrs);
|
||||||
|
// when symbolCip used, only clip path has init animation, otherwise it would be weird effect.
|
||||||
|
if (symbolMeta.symbolClip && !isUpdate) {
|
||||||
|
animationAttrs && el.attr(animationAttrs);
|
||||||
|
} else {
|
||||||
|
animationAttrs && graphic[isUpdate ? 'updateProps' : 'initProps'](el, animationAttrs, symbolMeta.animationModel, symbolMeta.dataIndex, cb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function updateCommon(bar, opt, symbolMeta) {
|
||||||
|
var dataIndex = symbolMeta.dataIndex;
|
||||||
|
var itemModel = symbolMeta.itemModel;
|
||||||
|
// Color must be excluded.
|
||||||
|
// Because symbol provide setColor individually to set fill and stroke
|
||||||
|
var emphasisModel = itemModel.getModel('emphasis');
|
||||||
|
var emphasisStyle = emphasisModel.getModel('itemStyle').getItemStyle();
|
||||||
|
var blurStyle = itemModel.getModel(['blur', 'itemStyle']).getItemStyle();
|
||||||
|
var selectStyle = itemModel.getModel(['select', 'itemStyle']).getItemStyle();
|
||||||
|
var cursorStyle = itemModel.getShallow('cursor');
|
||||||
|
var focus = emphasisModel.get('focus');
|
||||||
|
var blurScope = emphasisModel.get('blurScope');
|
||||||
|
var hoverScale = emphasisModel.get('scale');
|
||||||
|
eachPath(bar, function (path) {
|
||||||
|
if (path instanceof ZRImage) {
|
||||||
|
var pathStyle = path.style;
|
||||||
|
path.useStyle(zrUtil.extend({
|
||||||
|
// TODO other properties like dx, dy ?
|
||||||
|
image: pathStyle.image,
|
||||||
|
x: pathStyle.x,
|
||||||
|
y: pathStyle.y,
|
||||||
|
width: pathStyle.width,
|
||||||
|
height: pathStyle.height
|
||||||
|
}, symbolMeta.style));
|
||||||
|
} else {
|
||||||
|
path.useStyle(symbolMeta.style);
|
||||||
|
}
|
||||||
|
var emphasisState = path.ensureState('emphasis');
|
||||||
|
emphasisState.style = emphasisStyle;
|
||||||
|
if (hoverScale) {
|
||||||
|
// NOTE: Must after scale is set after updateAttr
|
||||||
|
emphasisState.scaleX = path.scaleX * 1.1;
|
||||||
|
emphasisState.scaleY = path.scaleY * 1.1;
|
||||||
|
}
|
||||||
|
path.ensureState('blur').style = blurStyle;
|
||||||
|
path.ensureState('select').style = selectStyle;
|
||||||
|
cursorStyle && (path.cursor = cursorStyle);
|
||||||
|
path.z2 = symbolMeta.z2;
|
||||||
|
});
|
||||||
|
var barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)];
|
||||||
|
var barRect = bar.__pictorialBarRect;
|
||||||
|
barRect.ignoreClip = true;
|
||||||
|
setLabelStyle(barRect, getLabelStatesModels(itemModel), {
|
||||||
|
labelFetcher: opt.seriesModel,
|
||||||
|
labelDataIndex: dataIndex,
|
||||||
|
defaultText: getDefaultLabel(opt.seriesModel.getData(), dataIndex),
|
||||||
|
inheritColor: symbolMeta.style.fill,
|
||||||
|
defaultOpacity: symbolMeta.style.opacity,
|
||||||
|
defaultOutsidePosition: barPositionOutside
|
||||||
|
});
|
||||||
|
toggleHoverEmphasis(bar, focus, blurScope, emphasisModel.get('disabled'));
|
||||||
|
}
|
||||||
|
function toIntTimes(times) {
|
||||||
|
var roundedTimes = Math.round(times);
|
||||||
|
// Escapse accurate error
|
||||||
|
return Math.abs(times - roundedTimes) < 1e-4 ? roundedTimes : Math.ceil(times);
|
||||||
|
}
|
||||||
|
export default PictorialBarView;
|
|
@ -0,0 +1,81 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import * as zrUtil from 'zrender/lib/core/util.js';
|
||||||
|
import { layout, createProgressiveLayout } from '../../layout/barGrid.js';
|
||||||
|
import dataSample from '../../processor/dataSample.js';
|
||||||
|
import BarSeries from './BarSeries.js';
|
||||||
|
import BarView from './BarView.js';
|
||||||
|
export function install(registers) {
|
||||||
|
registers.registerChartView(BarView);
|
||||||
|
registers.registerSeriesModel(BarSeries);
|
||||||
|
registers.registerLayout(registers.PRIORITY.VISUAL.LAYOUT, zrUtil.curry(layout, 'bar'));
|
||||||
|
// Do layout after other overall layout, which can prepare some information.
|
||||||
|
registers.registerLayout(registers.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT, createProgressiveLayout('bar'));
|
||||||
|
// Down sample after filter
|
||||||
|
registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, dataSample('bar'));
|
||||||
|
/**
|
||||||
|
* @payload
|
||||||
|
* @property {string} [componentType=series]
|
||||||
|
* @property {number} [dx]
|
||||||
|
* @property {number} [dy]
|
||||||
|
* @property {number} [zoom]
|
||||||
|
* @property {number} [originX]
|
||||||
|
* @property {number} [originY]
|
||||||
|
*/
|
||||||
|
registers.registerAction({
|
||||||
|
type: 'changeAxisOrder',
|
||||||
|
event: 'changeAxisOrder',
|
||||||
|
update: 'update'
|
||||||
|
}, function (payload, ecModel) {
|
||||||
|
var componentType = payload.componentType || 'series';
|
||||||
|
ecModel.eachComponent({
|
||||||
|
mainType: componentType,
|
||||||
|
query: payload
|
||||||
|
}, function (componentModel) {
|
||||||
|
if (payload.sortInfo) {
|
||||||
|
componentModel.axis.setCategorySortInfo(payload.sortInfo);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import PictorialBarView from './PictorialBarView.js';
|
||||||
|
import PictorialBarSeriesModel from './PictorialBarSeries.js';
|
||||||
|
import { createProgressiveLayout, layout } from '../../layout/barGrid.js';
|
||||||
|
import { curry } from 'zrender/lib/core/util.js';
|
||||||
|
export function install(registers) {
|
||||||
|
registers.registerChartView(PictorialBarView);
|
||||||
|
registers.registerSeriesModel(PictorialBarSeriesModel);
|
||||||
|
registers.registerLayout(registers.PRIORITY.VISUAL.LAYOUT, curry(layout, 'pictorialBar'));
|
||||||
|
// Do layout after other overall layout, which can prepare some information.
|
||||||
|
registers.registerLayout(registers.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT, createProgressiveLayout('pictorialBar'));
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { use } from '../extension.js';
|
||||||
|
import { install } from './boxplot/install.js';
|
||||||
|
use(install);
|
|
@ -0,0 +1,108 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { __extends } from "tslib";
|
||||||
|
import SeriesModel from '../../model/Series.js';
|
||||||
|
import { WhiskerBoxCommonMixin } from '../helper/whiskerBoxCommon.js';
|
||||||
|
import { mixin } from 'zrender/lib/core/util.js';
|
||||||
|
var BoxplotSeriesModel = /** @class */function (_super) {
|
||||||
|
__extends(BoxplotSeriesModel, _super);
|
||||||
|
function BoxplotSeriesModel() {
|
||||||
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||||||
|
_this.type = BoxplotSeriesModel.type;
|
||||||
|
// TODO
|
||||||
|
// box width represents group size, so dimension should have 'size'.
|
||||||
|
/**
|
||||||
|
* @see <https://en.wikipedia.org/wiki/Box_plot>
|
||||||
|
* The meanings of 'min' and 'max' depend on user,
|
||||||
|
* and echarts do not need to know it.
|
||||||
|
* @readOnly
|
||||||
|
*/
|
||||||
|
_this.defaultValueDimensions = [{
|
||||||
|
name: 'min',
|
||||||
|
defaultTooltip: true
|
||||||
|
}, {
|
||||||
|
name: 'Q1',
|
||||||
|
defaultTooltip: true
|
||||||
|
}, {
|
||||||
|
name: 'median',
|
||||||
|
defaultTooltip: true
|
||||||
|
}, {
|
||||||
|
name: 'Q3',
|
||||||
|
defaultTooltip: true
|
||||||
|
}, {
|
||||||
|
name: 'max',
|
||||||
|
defaultTooltip: true
|
||||||
|
}];
|
||||||
|
_this.visualDrawType = 'stroke';
|
||||||
|
return _this;
|
||||||
|
}
|
||||||
|
BoxplotSeriesModel.type = 'series.boxplot';
|
||||||
|
BoxplotSeriesModel.dependencies = ['xAxis', 'yAxis', 'grid'];
|
||||||
|
BoxplotSeriesModel.defaultOption = {
|
||||||
|
// zlevel: 0,
|
||||||
|
z: 2,
|
||||||
|
coordinateSystem: 'cartesian2d',
|
||||||
|
legendHoverLink: true,
|
||||||
|
layout: null,
|
||||||
|
boxWidth: [7, 50],
|
||||||
|
itemStyle: {
|
||||||
|
color: '#fff',
|
||||||
|
borderWidth: 1
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
scale: true,
|
||||||
|
itemStyle: {
|
||||||
|
borderWidth: 2,
|
||||||
|
shadowBlur: 5,
|
||||||
|
shadowOffsetX: 1,
|
||||||
|
shadowOffsetY: 1,
|
||||||
|
shadowColor: 'rgba(0,0,0,0.2)'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
animationDuration: 800
|
||||||
|
};
|
||||||
|
return BoxplotSeriesModel;
|
||||||
|
}(SeriesModel);
|
||||||
|
mixin(BoxplotSeriesModel, WhiskerBoxCommonMixin, true);
|
||||||
|
export default BoxplotSeriesModel;
|
|
@ -0,0 +1,172 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { __extends } from "tslib";
|
||||||
|
import * as zrUtil from 'zrender/lib/core/util.js';
|
||||||
|
import ChartView from '../../view/Chart.js';
|
||||||
|
import * as graphic from '../../util/graphic.js';
|
||||||
|
import { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js';
|
||||||
|
import Path from 'zrender/lib/graphic/Path.js';
|
||||||
|
import { saveOldStyle } from '../../animation/basicTransition.js';
|
||||||
|
var BoxplotView = /** @class */function (_super) {
|
||||||
|
__extends(BoxplotView, _super);
|
||||||
|
function BoxplotView() {
|
||||||
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||||||
|
_this.type = BoxplotView.type;
|
||||||
|
return _this;
|
||||||
|
}
|
||||||
|
BoxplotView.prototype.render = function (seriesModel, ecModel, api) {
|
||||||
|
var data = seriesModel.getData();
|
||||||
|
var group = this.group;
|
||||||
|
var oldData = this._data;
|
||||||
|
// There is no old data only when first rendering or switching from
|
||||||
|
// stream mode to normal mode, where previous elements should be removed.
|
||||||
|
if (!this._data) {
|
||||||
|
group.removeAll();
|
||||||
|
}
|
||||||
|
var constDim = seriesModel.get('layout') === 'horizontal' ? 1 : 0;
|
||||||
|
data.diff(oldData).add(function (newIdx) {
|
||||||
|
if (data.hasValue(newIdx)) {
|
||||||
|
var itemLayout = data.getItemLayout(newIdx);
|
||||||
|
var symbolEl = createNormalBox(itemLayout, data, newIdx, constDim, true);
|
||||||
|
data.setItemGraphicEl(newIdx, symbolEl);
|
||||||
|
group.add(symbolEl);
|
||||||
|
}
|
||||||
|
}).update(function (newIdx, oldIdx) {
|
||||||
|
var symbolEl = oldData.getItemGraphicEl(oldIdx);
|
||||||
|
// Empty data
|
||||||
|
if (!data.hasValue(newIdx)) {
|
||||||
|
group.remove(symbolEl);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var itemLayout = data.getItemLayout(newIdx);
|
||||||
|
if (!symbolEl) {
|
||||||
|
symbolEl = createNormalBox(itemLayout, data, newIdx, constDim);
|
||||||
|
} else {
|
||||||
|
saveOldStyle(symbolEl);
|
||||||
|
updateNormalBoxData(itemLayout, symbolEl, data, newIdx);
|
||||||
|
}
|
||||||
|
group.add(symbolEl);
|
||||||
|
data.setItemGraphicEl(newIdx, symbolEl);
|
||||||
|
}).remove(function (oldIdx) {
|
||||||
|
var el = oldData.getItemGraphicEl(oldIdx);
|
||||||
|
el && group.remove(el);
|
||||||
|
}).execute();
|
||||||
|
this._data = data;
|
||||||
|
};
|
||||||
|
BoxplotView.prototype.remove = function (ecModel) {
|
||||||
|
var group = this.group;
|
||||||
|
var data = this._data;
|
||||||
|
this._data = null;
|
||||||
|
data && data.eachItemGraphicEl(function (el) {
|
||||||
|
el && group.remove(el);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
BoxplotView.type = 'boxplot';
|
||||||
|
return BoxplotView;
|
||||||
|
}(ChartView);
|
||||||
|
var BoxPathShape = /** @class */function () {
|
||||||
|
function BoxPathShape() {}
|
||||||
|
return BoxPathShape;
|
||||||
|
}();
|
||||||
|
var BoxPath = /** @class */function (_super) {
|
||||||
|
__extends(BoxPath, _super);
|
||||||
|
function BoxPath(opts) {
|
||||||
|
var _this = _super.call(this, opts) || this;
|
||||||
|
_this.type = 'boxplotBoxPath';
|
||||||
|
return _this;
|
||||||
|
}
|
||||||
|
BoxPath.prototype.getDefaultShape = function () {
|
||||||
|
return new BoxPathShape();
|
||||||
|
};
|
||||||
|
BoxPath.prototype.buildPath = function (ctx, shape) {
|
||||||
|
var ends = shape.points;
|
||||||
|
var i = 0;
|
||||||
|
ctx.moveTo(ends[i][0], ends[i][1]);
|
||||||
|
i++;
|
||||||
|
for (; i < 4; i++) {
|
||||||
|
ctx.lineTo(ends[i][0], ends[i][1]);
|
||||||
|
}
|
||||||
|
ctx.closePath();
|
||||||
|
for (; i < ends.length; i++) {
|
||||||
|
ctx.moveTo(ends[i][0], ends[i][1]);
|
||||||
|
i++;
|
||||||
|
ctx.lineTo(ends[i][0], ends[i][1]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return BoxPath;
|
||||||
|
}(Path);
|
||||||
|
function createNormalBox(itemLayout, data, dataIndex, constDim, isInit) {
|
||||||
|
var ends = itemLayout.ends;
|
||||||
|
var el = new BoxPath({
|
||||||
|
shape: {
|
||||||
|
points: isInit ? transInit(ends, constDim, itemLayout) : ends
|
||||||
|
}
|
||||||
|
});
|
||||||
|
updateNormalBoxData(itemLayout, el, data, dataIndex, isInit);
|
||||||
|
return el;
|
||||||
|
}
|
||||||
|
function updateNormalBoxData(itemLayout, el, data, dataIndex, isInit) {
|
||||||
|
var seriesModel = data.hostModel;
|
||||||
|
var updateMethod = graphic[isInit ? 'initProps' : 'updateProps'];
|
||||||
|
updateMethod(el, {
|
||||||
|
shape: {
|
||||||
|
points: itemLayout.ends
|
||||||
|
}
|
||||||
|
}, seriesModel, dataIndex);
|
||||||
|
el.useStyle(data.getItemVisual(dataIndex, 'style'));
|
||||||
|
el.style.strokeNoScale = true;
|
||||||
|
el.z2 = 100;
|
||||||
|
var itemModel = data.getItemModel(dataIndex);
|
||||||
|
var emphasisModel = itemModel.getModel('emphasis');
|
||||||
|
setStatesStylesFromModel(el, itemModel);
|
||||||
|
toggleHoverEmphasis(el, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));
|
||||||
|
}
|
||||||
|
function transInit(points, dim, itemLayout) {
|
||||||
|
return zrUtil.map(points, function (point) {
|
||||||
|
point = point.slice();
|
||||||
|
point[dim] = itemLayout.initBaseline;
|
||||||
|
return point;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
export default BoxplotView;
|
|
@ -0,0 +1,181 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import * as zrUtil from 'zrender/lib/core/util.js';
|
||||||
|
import { parsePercent } from '../../util/number.js';
|
||||||
|
var each = zrUtil.each;
|
||||||
|
export default function boxplotLayout(ecModel) {
|
||||||
|
var groupResult = groupSeriesByAxis(ecModel);
|
||||||
|
each(groupResult, function (groupItem) {
|
||||||
|
var seriesModels = groupItem.seriesModels;
|
||||||
|
if (!seriesModels.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
calculateBase(groupItem);
|
||||||
|
each(seriesModels, function (seriesModel, idx) {
|
||||||
|
layoutSingleSeries(seriesModel, groupItem.boxOffsetList[idx], groupItem.boxWidthList[idx]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Group series by axis.
|
||||||
|
*/
|
||||||
|
function groupSeriesByAxis(ecModel) {
|
||||||
|
var result = [];
|
||||||
|
var axisList = [];
|
||||||
|
ecModel.eachSeriesByType('boxplot', function (seriesModel) {
|
||||||
|
var baseAxis = seriesModel.getBaseAxis();
|
||||||
|
var idx = zrUtil.indexOf(axisList, baseAxis);
|
||||||
|
if (idx < 0) {
|
||||||
|
idx = axisList.length;
|
||||||
|
axisList[idx] = baseAxis;
|
||||||
|
result[idx] = {
|
||||||
|
axis: baseAxis,
|
||||||
|
seriesModels: []
|
||||||
|
};
|
||||||
|
}
|
||||||
|
result[idx].seriesModels.push(seriesModel);
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Calculate offset and box width for each series.
|
||||||
|
*/
|
||||||
|
function calculateBase(groupItem) {
|
||||||
|
var baseAxis = groupItem.axis;
|
||||||
|
var seriesModels = groupItem.seriesModels;
|
||||||
|
var seriesCount = seriesModels.length;
|
||||||
|
var boxWidthList = groupItem.boxWidthList = [];
|
||||||
|
var boxOffsetList = groupItem.boxOffsetList = [];
|
||||||
|
var boundList = [];
|
||||||
|
var bandWidth;
|
||||||
|
if (baseAxis.type === 'category') {
|
||||||
|
bandWidth = baseAxis.getBandWidth();
|
||||||
|
} else {
|
||||||
|
var maxDataCount_1 = 0;
|
||||||
|
each(seriesModels, function (seriesModel) {
|
||||||
|
maxDataCount_1 = Math.max(maxDataCount_1, seriesModel.getData().count());
|
||||||
|
});
|
||||||
|
var extent = baseAxis.getExtent();
|
||||||
|
bandWidth = Math.abs(extent[1] - extent[0]) / maxDataCount_1;
|
||||||
|
}
|
||||||
|
each(seriesModels, function (seriesModel) {
|
||||||
|
var boxWidthBound = seriesModel.get('boxWidth');
|
||||||
|
if (!zrUtil.isArray(boxWidthBound)) {
|
||||||
|
boxWidthBound = [boxWidthBound, boxWidthBound];
|
||||||
|
}
|
||||||
|
boundList.push([parsePercent(boxWidthBound[0], bandWidth) || 0, parsePercent(boxWidthBound[1], bandWidth) || 0]);
|
||||||
|
});
|
||||||
|
var availableWidth = bandWidth * 0.8 - 2;
|
||||||
|
var boxGap = availableWidth / seriesCount * 0.3;
|
||||||
|
var boxWidth = (availableWidth - boxGap * (seriesCount - 1)) / seriesCount;
|
||||||
|
var base = boxWidth / 2 - availableWidth / 2;
|
||||||
|
each(seriesModels, function (seriesModel, idx) {
|
||||||
|
boxOffsetList.push(base);
|
||||||
|
base += boxGap + boxWidth;
|
||||||
|
boxWidthList.push(Math.min(Math.max(boxWidth, boundList[idx][0]), boundList[idx][1]));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Calculate points location for each series.
|
||||||
|
*/
|
||||||
|
function layoutSingleSeries(seriesModel, offset, boxWidth) {
|
||||||
|
var coordSys = seriesModel.coordinateSystem;
|
||||||
|
var data = seriesModel.getData();
|
||||||
|
var halfWidth = boxWidth / 2;
|
||||||
|
var cDimIdx = seriesModel.get('layout') === 'horizontal' ? 0 : 1;
|
||||||
|
var vDimIdx = 1 - cDimIdx;
|
||||||
|
var coordDims = ['x', 'y'];
|
||||||
|
var cDim = data.mapDimension(coordDims[cDimIdx]);
|
||||||
|
var vDims = data.mapDimensionsAll(coordDims[vDimIdx]);
|
||||||
|
if (cDim == null || vDims.length < 5) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) {
|
||||||
|
var axisDimVal = data.get(cDim, dataIndex);
|
||||||
|
var median = getPoint(axisDimVal, vDims[2], dataIndex);
|
||||||
|
var end1 = getPoint(axisDimVal, vDims[0], dataIndex);
|
||||||
|
var end2 = getPoint(axisDimVal, vDims[1], dataIndex);
|
||||||
|
var end4 = getPoint(axisDimVal, vDims[3], dataIndex);
|
||||||
|
var end5 = getPoint(axisDimVal, vDims[4], dataIndex);
|
||||||
|
var ends = [];
|
||||||
|
addBodyEnd(ends, end2, false);
|
||||||
|
addBodyEnd(ends, end4, true);
|
||||||
|
ends.push(end1, end2, end5, end4);
|
||||||
|
layEndLine(ends, end1);
|
||||||
|
layEndLine(ends, end5);
|
||||||
|
layEndLine(ends, median);
|
||||||
|
data.setItemLayout(dataIndex, {
|
||||||
|
initBaseline: median[vDimIdx],
|
||||||
|
ends: ends
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function getPoint(axisDimVal, dim, dataIndex) {
|
||||||
|
var val = data.get(dim, dataIndex);
|
||||||
|
var p = [];
|
||||||
|
p[cDimIdx] = axisDimVal;
|
||||||
|
p[vDimIdx] = val;
|
||||||
|
var point;
|
||||||
|
if (isNaN(axisDimVal) || isNaN(val)) {
|
||||||
|
point = [NaN, NaN];
|
||||||
|
} else {
|
||||||
|
point = coordSys.dataToPoint(p);
|
||||||
|
point[cDimIdx] += offset;
|
||||||
|
}
|
||||||
|
return point;
|
||||||
|
}
|
||||||
|
function addBodyEnd(ends, point, start) {
|
||||||
|
var point1 = point.slice();
|
||||||
|
var point2 = point.slice();
|
||||||
|
point1[cDimIdx] += halfWidth;
|
||||||
|
point2[cDimIdx] -= halfWidth;
|
||||||
|
start ? ends.push(point1, point2) : ends.push(point2, point1);
|
||||||
|
}
|
||||||
|
function layEndLine(ends, endCenter) {
|
||||||
|
var from = endCenter.slice();
|
||||||
|
var to = endCenter.slice();
|
||||||
|
from[cDimIdx] -= halfWidth;
|
||||||
|
to[cDimIdx] += halfWidth;
|
||||||
|
ends.push(from, to);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import prepareBoxplotData from './prepareBoxplotData.js';
|
||||||
|
import { throwError, makePrintable } from '../../util/log.js';
|
||||||
|
import { SOURCE_FORMAT_ARRAY_ROWS } from '../../util/types.js';
|
||||||
|
export var boxplotTransform = {
|
||||||
|
type: 'echarts:boxplot',
|
||||||
|
transform: function transform(params) {
|
||||||
|
var upstream = params.upstream;
|
||||||
|
if (upstream.sourceFormat !== SOURCE_FORMAT_ARRAY_ROWS) {
|
||||||
|
var errMsg = '';
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
errMsg = makePrintable('source data is not applicable for this boxplot transform. Expect number[][].');
|
||||||
|
}
|
||||||
|
throwError(errMsg);
|
||||||
|
}
|
||||||
|
var result = prepareBoxplotData(upstream.getRawData(), params.config);
|
||||||
|
return [{
|
||||||
|
dimensions: ['ItemName', 'Low', 'Q1', 'Q2', 'Q3', 'High'],
|
||||||
|
data: result.boxData
|
||||||
|
}, {
|
||||||
|
data: result.outliers
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,53 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import BoxplotSeriesModel from './BoxplotSeries.js';
|
||||||
|
import BoxplotView from './BoxplotView.js';
|
||||||
|
import boxplotLayout from './boxplotLayout.js';
|
||||||
|
import { boxplotTransform } from './boxplotTransform.js';
|
||||||
|
export function install(registers) {
|
||||||
|
registers.registerSeriesModel(BoxplotSeriesModel);
|
||||||
|
registers.registerChartView(BoxplotView);
|
||||||
|
registers.registerLayout(boxplotLayout);
|
||||||
|
registers.registerTransform(boxplotTransform);
|
||||||
|
}
|
|
@ -0,0 +1,96 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { quantile, asc } from '../../util/number.js';
|
||||||
|
import { isFunction, isString } from 'zrender/lib/core/util.js';
|
||||||
|
/**
|
||||||
|
* See:
|
||||||
|
* <https://en.wikipedia.org/wiki/Box_plot#cite_note-frigge_hoaglin_iglewicz-2>
|
||||||
|
* <http://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/boxplot.stats.html>
|
||||||
|
*
|
||||||
|
* Helper method for preparing data.
|
||||||
|
*
|
||||||
|
* @param rawData like
|
||||||
|
* [
|
||||||
|
* [12,232,443], (raw data set for the first box)
|
||||||
|
* [3843,5545,1232], (raw data set for the second box)
|
||||||
|
* ...
|
||||||
|
* ]
|
||||||
|
* @param opt.boundIQR=1.5 Data less than min bound is outlier.
|
||||||
|
* default 1.5, means Q1 - 1.5 * (Q3 - Q1).
|
||||||
|
* If 'none'/0 passed, min bound will not be used.
|
||||||
|
*/
|
||||||
|
export default function prepareBoxplotData(rawData, opt) {
|
||||||
|
opt = opt || {};
|
||||||
|
var boxData = [];
|
||||||
|
var outliers = [];
|
||||||
|
var boundIQR = opt.boundIQR;
|
||||||
|
var useExtreme = boundIQR === 'none' || boundIQR === 0;
|
||||||
|
for (var i = 0; i < rawData.length; i++) {
|
||||||
|
var ascList = asc(rawData[i].slice());
|
||||||
|
var Q1 = quantile(ascList, 0.25);
|
||||||
|
var Q2 = quantile(ascList, 0.5);
|
||||||
|
var Q3 = quantile(ascList, 0.75);
|
||||||
|
var min = ascList[0];
|
||||||
|
var max = ascList[ascList.length - 1];
|
||||||
|
var bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1);
|
||||||
|
var low = useExtreme ? min : Math.max(min, Q1 - bound);
|
||||||
|
var high = useExtreme ? max : Math.min(max, Q3 + bound);
|
||||||
|
var itemNameFormatter = opt.itemNameFormatter;
|
||||||
|
var itemName = isFunction(itemNameFormatter) ? itemNameFormatter({
|
||||||
|
value: i
|
||||||
|
}) : isString(itemNameFormatter) ? itemNameFormatter.replace('{value}', i + '') : i + '';
|
||||||
|
boxData.push([itemName, low, Q1, Q2, Q3, high]);
|
||||||
|
for (var j = 0; j < ascList.length; j++) {
|
||||||
|
var dataItem = ascList[j];
|
||||||
|
if (dataItem < low || dataItem > high) {
|
||||||
|
var outlier = [itemName, dataItem];
|
||||||
|
outliers.push(outlier);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
boxData: boxData,
|
||||||
|
outliers: outliers
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { use } from '../extension.js';
|
||||||
|
import { install } from './candlestick/install.js';
|
||||||
|
use(install);
|
|
@ -0,0 +1,120 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { __extends } from "tslib";
|
||||||
|
import SeriesModel from '../../model/Series.js';
|
||||||
|
import { WhiskerBoxCommonMixin } from '../helper/whiskerBoxCommon.js';
|
||||||
|
import { mixin } from 'zrender/lib/core/util.js';
|
||||||
|
var CandlestickSeriesModel = /** @class */function (_super) {
|
||||||
|
__extends(CandlestickSeriesModel, _super);
|
||||||
|
function CandlestickSeriesModel() {
|
||||||
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||||||
|
_this.type = CandlestickSeriesModel.type;
|
||||||
|
_this.defaultValueDimensions = [{
|
||||||
|
name: 'open',
|
||||||
|
defaultTooltip: true
|
||||||
|
}, {
|
||||||
|
name: 'close',
|
||||||
|
defaultTooltip: true
|
||||||
|
}, {
|
||||||
|
name: 'lowest',
|
||||||
|
defaultTooltip: true
|
||||||
|
}, {
|
||||||
|
name: 'highest',
|
||||||
|
defaultTooltip: true
|
||||||
|
}];
|
||||||
|
return _this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get dimension for shadow in dataZoom
|
||||||
|
* @return dimension name
|
||||||
|
*/
|
||||||
|
CandlestickSeriesModel.prototype.getShadowDim = function () {
|
||||||
|
return 'open';
|
||||||
|
};
|
||||||
|
CandlestickSeriesModel.prototype.brushSelector = function (dataIndex, data, selectors) {
|
||||||
|
var itemLayout = data.getItemLayout(dataIndex);
|
||||||
|
return itemLayout && selectors.rect(itemLayout.brushRect);
|
||||||
|
};
|
||||||
|
CandlestickSeriesModel.type = 'series.candlestick';
|
||||||
|
CandlestickSeriesModel.dependencies = ['xAxis', 'yAxis', 'grid'];
|
||||||
|
CandlestickSeriesModel.defaultOption = {
|
||||||
|
// zlevel: 0,
|
||||||
|
z: 2,
|
||||||
|
coordinateSystem: 'cartesian2d',
|
||||||
|
legendHoverLink: true,
|
||||||
|
// xAxisIndex: 0,
|
||||||
|
// yAxisIndex: 0,
|
||||||
|
layout: null,
|
||||||
|
clip: true,
|
||||||
|
itemStyle: {
|
||||||
|
color: '#eb5454',
|
||||||
|
color0: '#47b262',
|
||||||
|
borderColor: '#eb5454',
|
||||||
|
borderColor0: '#47b262',
|
||||||
|
borderColorDoji: null,
|
||||||
|
// borderColor: '#d24040',
|
||||||
|
// borderColor0: '#398f4f',
|
||||||
|
borderWidth: 1
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
scale: true,
|
||||||
|
itemStyle: {
|
||||||
|
borderWidth: 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
barMaxWidth: null,
|
||||||
|
barMinWidth: null,
|
||||||
|
barWidth: null,
|
||||||
|
large: true,
|
||||||
|
largeThreshold: 600,
|
||||||
|
progressive: 3e3,
|
||||||
|
progressiveThreshold: 1e4,
|
||||||
|
progressiveChunkMode: 'mod',
|
||||||
|
animationEasing: 'linear',
|
||||||
|
animationDuration: 300
|
||||||
|
};
|
||||||
|
return CandlestickSeriesModel;
|
||||||
|
}(SeriesModel);
|
||||||
|
mixin(CandlestickSeriesModel, WhiskerBoxCommonMixin, true);
|
||||||
|
export default CandlestickSeriesModel;
|
|
@ -0,0 +1,332 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { __extends } from "tslib";
|
||||||
|
import * as zrUtil from 'zrender/lib/core/util.js';
|
||||||
|
import ChartView from '../../view/Chart.js';
|
||||||
|
import * as graphic from '../../util/graphic.js';
|
||||||
|
import { setStatesStylesFromModel } from '../../util/states.js';
|
||||||
|
import Path from 'zrender/lib/graphic/Path.js';
|
||||||
|
import { createClipPath } from '../helper/createClipPathFromCoordSys.js';
|
||||||
|
import { saveOldStyle } from '../../animation/basicTransition.js';
|
||||||
|
var SKIP_PROPS = ['color', 'borderColor'];
|
||||||
|
var CandlestickView = /** @class */function (_super) {
|
||||||
|
__extends(CandlestickView, _super);
|
||||||
|
function CandlestickView() {
|
||||||
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||||||
|
_this.type = CandlestickView.type;
|
||||||
|
return _this;
|
||||||
|
}
|
||||||
|
CandlestickView.prototype.render = function (seriesModel, ecModel, api) {
|
||||||
|
// If there is clipPath created in large mode. Remove it.
|
||||||
|
this.group.removeClipPath();
|
||||||
|
// Clear previously rendered progressive elements.
|
||||||
|
this._progressiveEls = null;
|
||||||
|
this._updateDrawMode(seriesModel);
|
||||||
|
this._isLargeDraw ? this._renderLarge(seriesModel) : this._renderNormal(seriesModel);
|
||||||
|
};
|
||||||
|
CandlestickView.prototype.incrementalPrepareRender = function (seriesModel, ecModel, api) {
|
||||||
|
this._clear();
|
||||||
|
this._updateDrawMode(seriesModel);
|
||||||
|
};
|
||||||
|
CandlestickView.prototype.incrementalRender = function (params, seriesModel, ecModel, api) {
|
||||||
|
this._progressiveEls = [];
|
||||||
|
this._isLargeDraw ? this._incrementalRenderLarge(params, seriesModel) : this._incrementalRenderNormal(params, seriesModel);
|
||||||
|
};
|
||||||
|
CandlestickView.prototype.eachRendered = function (cb) {
|
||||||
|
graphic.traverseElements(this._progressiveEls || this.group, cb);
|
||||||
|
};
|
||||||
|
CandlestickView.prototype._updateDrawMode = function (seriesModel) {
|
||||||
|
var isLargeDraw = seriesModel.pipelineContext.large;
|
||||||
|
if (this._isLargeDraw == null || isLargeDraw !== this._isLargeDraw) {
|
||||||
|
this._isLargeDraw = isLargeDraw;
|
||||||
|
this._clear();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CandlestickView.prototype._renderNormal = function (seriesModel) {
|
||||||
|
var data = seriesModel.getData();
|
||||||
|
var oldData = this._data;
|
||||||
|
var group = this.group;
|
||||||
|
var isSimpleBox = data.getLayout('isSimpleBox');
|
||||||
|
var needsClip = seriesModel.get('clip', true);
|
||||||
|
var coord = seriesModel.coordinateSystem;
|
||||||
|
var clipArea = coord.getArea && coord.getArea();
|
||||||
|
// There is no old data only when first rendering or switching from
|
||||||
|
// stream mode to normal mode, where previous elements should be removed.
|
||||||
|
if (!this._data) {
|
||||||
|
group.removeAll();
|
||||||
|
}
|
||||||
|
data.diff(oldData).add(function (newIdx) {
|
||||||
|
if (data.hasValue(newIdx)) {
|
||||||
|
var itemLayout = data.getItemLayout(newIdx);
|
||||||
|
if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var el = createNormalBox(itemLayout, newIdx, true);
|
||||||
|
graphic.initProps(el, {
|
||||||
|
shape: {
|
||||||
|
points: itemLayout.ends
|
||||||
|
}
|
||||||
|
}, seriesModel, newIdx);
|
||||||
|
setBoxCommon(el, data, newIdx, isSimpleBox);
|
||||||
|
group.add(el);
|
||||||
|
data.setItemGraphicEl(newIdx, el);
|
||||||
|
}
|
||||||
|
}).update(function (newIdx, oldIdx) {
|
||||||
|
var el = oldData.getItemGraphicEl(oldIdx);
|
||||||
|
// Empty data
|
||||||
|
if (!data.hasValue(newIdx)) {
|
||||||
|
group.remove(el);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var itemLayout = data.getItemLayout(newIdx);
|
||||||
|
if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) {
|
||||||
|
group.remove(el);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!el) {
|
||||||
|
el = createNormalBox(itemLayout, newIdx);
|
||||||
|
} else {
|
||||||
|
graphic.updateProps(el, {
|
||||||
|
shape: {
|
||||||
|
points: itemLayout.ends
|
||||||
|
}
|
||||||
|
}, seriesModel, newIdx);
|
||||||
|
saveOldStyle(el);
|
||||||
|
}
|
||||||
|
setBoxCommon(el, data, newIdx, isSimpleBox);
|
||||||
|
group.add(el);
|
||||||
|
data.setItemGraphicEl(newIdx, el);
|
||||||
|
}).remove(function (oldIdx) {
|
||||||
|
var el = oldData.getItemGraphicEl(oldIdx);
|
||||||
|
el && group.remove(el);
|
||||||
|
}).execute();
|
||||||
|
this._data = data;
|
||||||
|
};
|
||||||
|
CandlestickView.prototype._renderLarge = function (seriesModel) {
|
||||||
|
this._clear();
|
||||||
|
createLarge(seriesModel, this.group);
|
||||||
|
var clipPath = seriesModel.get('clip', true) ? createClipPath(seriesModel.coordinateSystem, false, seriesModel) : null;
|
||||||
|
if (clipPath) {
|
||||||
|
this.group.setClipPath(clipPath);
|
||||||
|
} else {
|
||||||
|
this.group.removeClipPath();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CandlestickView.prototype._incrementalRenderNormal = function (params, seriesModel) {
|
||||||
|
var data = seriesModel.getData();
|
||||||
|
var isSimpleBox = data.getLayout('isSimpleBox');
|
||||||
|
var dataIndex;
|
||||||
|
while ((dataIndex = params.next()) != null) {
|
||||||
|
var itemLayout = data.getItemLayout(dataIndex);
|
||||||
|
var el = createNormalBox(itemLayout, dataIndex);
|
||||||
|
setBoxCommon(el, data, dataIndex, isSimpleBox);
|
||||||
|
el.incremental = true;
|
||||||
|
this.group.add(el);
|
||||||
|
this._progressiveEls.push(el);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CandlestickView.prototype._incrementalRenderLarge = function (params, seriesModel) {
|
||||||
|
createLarge(seriesModel, this.group, this._progressiveEls, true);
|
||||||
|
};
|
||||||
|
CandlestickView.prototype.remove = function (ecModel) {
|
||||||
|
this._clear();
|
||||||
|
};
|
||||||
|
CandlestickView.prototype._clear = function () {
|
||||||
|
this.group.removeAll();
|
||||||
|
this._data = null;
|
||||||
|
};
|
||||||
|
CandlestickView.type = 'candlestick';
|
||||||
|
return CandlestickView;
|
||||||
|
}(ChartView);
|
||||||
|
var NormalBoxPathShape = /** @class */function () {
|
||||||
|
function NormalBoxPathShape() {}
|
||||||
|
return NormalBoxPathShape;
|
||||||
|
}();
|
||||||
|
var NormalBoxPath = /** @class */function (_super) {
|
||||||
|
__extends(NormalBoxPath, _super);
|
||||||
|
function NormalBoxPath(opts) {
|
||||||
|
var _this = _super.call(this, opts) || this;
|
||||||
|
_this.type = 'normalCandlestickBox';
|
||||||
|
return _this;
|
||||||
|
}
|
||||||
|
NormalBoxPath.prototype.getDefaultShape = function () {
|
||||||
|
return new NormalBoxPathShape();
|
||||||
|
};
|
||||||
|
NormalBoxPath.prototype.buildPath = function (ctx, shape) {
|
||||||
|
var ends = shape.points;
|
||||||
|
if (this.__simpleBox) {
|
||||||
|
ctx.moveTo(ends[4][0], ends[4][1]);
|
||||||
|
ctx.lineTo(ends[6][0], ends[6][1]);
|
||||||
|
} else {
|
||||||
|
ctx.moveTo(ends[0][0], ends[0][1]);
|
||||||
|
ctx.lineTo(ends[1][0], ends[1][1]);
|
||||||
|
ctx.lineTo(ends[2][0], ends[2][1]);
|
||||||
|
ctx.lineTo(ends[3][0], ends[3][1]);
|
||||||
|
ctx.closePath();
|
||||||
|
ctx.moveTo(ends[4][0], ends[4][1]);
|
||||||
|
ctx.lineTo(ends[5][0], ends[5][1]);
|
||||||
|
ctx.moveTo(ends[6][0], ends[6][1]);
|
||||||
|
ctx.lineTo(ends[7][0], ends[7][1]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return NormalBoxPath;
|
||||||
|
}(Path);
|
||||||
|
function createNormalBox(itemLayout, dataIndex, isInit) {
|
||||||
|
var ends = itemLayout.ends;
|
||||||
|
return new NormalBoxPath({
|
||||||
|
shape: {
|
||||||
|
points: isInit ? transInit(ends, itemLayout) : ends
|
||||||
|
},
|
||||||
|
z2: 100
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function isNormalBoxClipped(clipArea, itemLayout) {
|
||||||
|
var clipped = true;
|
||||||
|
for (var i = 0; i < itemLayout.ends.length; i++) {
|
||||||
|
// If any point are in the region.
|
||||||
|
if (clipArea.contain(itemLayout.ends[i][0], itemLayout.ends[i][1])) {
|
||||||
|
clipped = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return clipped;
|
||||||
|
}
|
||||||
|
function setBoxCommon(el, data, dataIndex, isSimpleBox) {
|
||||||
|
var itemModel = data.getItemModel(dataIndex);
|
||||||
|
el.useStyle(data.getItemVisual(dataIndex, 'style'));
|
||||||
|
el.style.strokeNoScale = true;
|
||||||
|
el.__simpleBox = isSimpleBox;
|
||||||
|
setStatesStylesFromModel(el, itemModel);
|
||||||
|
}
|
||||||
|
function transInit(points, itemLayout) {
|
||||||
|
return zrUtil.map(points, function (point) {
|
||||||
|
point = point.slice();
|
||||||
|
point[1] = itemLayout.initBaseline;
|
||||||
|
return point;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var LargeBoxPathShape = /** @class */function () {
|
||||||
|
function LargeBoxPathShape() {}
|
||||||
|
return LargeBoxPathShape;
|
||||||
|
}();
|
||||||
|
var LargeBoxPath = /** @class */function (_super) {
|
||||||
|
__extends(LargeBoxPath, _super);
|
||||||
|
function LargeBoxPath(opts) {
|
||||||
|
var _this = _super.call(this, opts) || this;
|
||||||
|
_this.type = 'largeCandlestickBox';
|
||||||
|
return _this;
|
||||||
|
}
|
||||||
|
LargeBoxPath.prototype.getDefaultShape = function () {
|
||||||
|
return new LargeBoxPathShape();
|
||||||
|
};
|
||||||
|
LargeBoxPath.prototype.buildPath = function (ctx, shape) {
|
||||||
|
// Drawing lines is more efficient than drawing
|
||||||
|
// a whole line or drawing rects.
|
||||||
|
var points = shape.points;
|
||||||
|
for (var i = 0; i < points.length;) {
|
||||||
|
if (this.__sign === points[i++]) {
|
||||||
|
var x = points[i++];
|
||||||
|
ctx.moveTo(x, points[i++]);
|
||||||
|
ctx.lineTo(x, points[i++]);
|
||||||
|
} else {
|
||||||
|
i += 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return LargeBoxPath;
|
||||||
|
}(Path);
|
||||||
|
function createLarge(seriesModel, group, progressiveEls, incremental) {
|
||||||
|
var data = seriesModel.getData();
|
||||||
|
var largePoints = data.getLayout('largePoints');
|
||||||
|
var elP = new LargeBoxPath({
|
||||||
|
shape: {
|
||||||
|
points: largePoints
|
||||||
|
},
|
||||||
|
__sign: 1,
|
||||||
|
ignoreCoarsePointer: true
|
||||||
|
});
|
||||||
|
group.add(elP);
|
||||||
|
var elN = new LargeBoxPath({
|
||||||
|
shape: {
|
||||||
|
points: largePoints
|
||||||
|
},
|
||||||
|
__sign: -1,
|
||||||
|
ignoreCoarsePointer: true
|
||||||
|
});
|
||||||
|
group.add(elN);
|
||||||
|
var elDoji = new LargeBoxPath({
|
||||||
|
shape: {
|
||||||
|
points: largePoints
|
||||||
|
},
|
||||||
|
__sign: 0,
|
||||||
|
ignoreCoarsePointer: true
|
||||||
|
});
|
||||||
|
group.add(elDoji);
|
||||||
|
setLargeStyle(1, elP, seriesModel, data);
|
||||||
|
setLargeStyle(-1, elN, seriesModel, data);
|
||||||
|
setLargeStyle(0, elDoji, seriesModel, data);
|
||||||
|
if (incremental) {
|
||||||
|
elP.incremental = true;
|
||||||
|
elN.incremental = true;
|
||||||
|
}
|
||||||
|
if (progressiveEls) {
|
||||||
|
progressiveEls.push(elP, elN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function setLargeStyle(sign, el, seriesModel, data) {
|
||||||
|
// TODO put in visual?
|
||||||
|
var borderColor = seriesModel.get(['itemStyle', sign > 0 ? 'borderColor' : 'borderColor0'])
|
||||||
|
// Use color for border color by default.
|
||||||
|
|| seriesModel.get(['itemStyle', sign > 0 ? 'color' : 'color0']);
|
||||||
|
if (sign === 0) {
|
||||||
|
borderColor = seriesModel.get(['itemStyle', 'borderColorDoji']);
|
||||||
|
}
|
||||||
|
// Color must be excluded.
|
||||||
|
// Because symbol provide setColor individually to set fill and stroke
|
||||||
|
var itemStyle = seriesModel.getModel('itemStyle').getItemStyle(SKIP_PROPS);
|
||||||
|
el.useStyle(itemStyle);
|
||||||
|
el.style.fill = null;
|
||||||
|
el.style.stroke = borderColor;
|
||||||
|
}
|
||||||
|
export default CandlestickView;
|
|
@ -0,0 +1,204 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { subPixelOptimize } from '../../util/graphic.js';
|
||||||
|
import createRenderPlanner from '../helper/createRenderPlanner.js';
|
||||||
|
import { parsePercent } from '../../util/number.js';
|
||||||
|
import { map, retrieve2 } from 'zrender/lib/core/util.js';
|
||||||
|
import { createFloat32Array } from '../../util/vendor.js';
|
||||||
|
var candlestickLayout = {
|
||||||
|
seriesType: 'candlestick',
|
||||||
|
plan: createRenderPlanner(),
|
||||||
|
reset: function (seriesModel) {
|
||||||
|
var coordSys = seriesModel.coordinateSystem;
|
||||||
|
var data = seriesModel.getData();
|
||||||
|
var candleWidth = calculateCandleWidth(seriesModel, data);
|
||||||
|
var cDimIdx = 0;
|
||||||
|
var vDimIdx = 1;
|
||||||
|
var coordDims = ['x', 'y'];
|
||||||
|
var cDimI = data.getDimensionIndex(data.mapDimension(coordDims[cDimIdx]));
|
||||||
|
var vDimsI = map(data.mapDimensionsAll(coordDims[vDimIdx]), data.getDimensionIndex, data);
|
||||||
|
var openDimI = vDimsI[0];
|
||||||
|
var closeDimI = vDimsI[1];
|
||||||
|
var lowestDimI = vDimsI[2];
|
||||||
|
var highestDimI = vDimsI[3];
|
||||||
|
data.setLayout({
|
||||||
|
candleWidth: candleWidth,
|
||||||
|
// The value is experimented visually.
|
||||||
|
isSimpleBox: candleWidth <= 1.3
|
||||||
|
});
|
||||||
|
if (cDimI < 0 || vDimsI.length < 4) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
progress: seriesModel.pipelineContext.large ? largeProgress : normalProgress
|
||||||
|
};
|
||||||
|
function normalProgress(params, data) {
|
||||||
|
var dataIndex;
|
||||||
|
var store = data.getStore();
|
||||||
|
while ((dataIndex = params.next()) != null) {
|
||||||
|
var axisDimVal = store.get(cDimI, dataIndex);
|
||||||
|
var openVal = store.get(openDimI, dataIndex);
|
||||||
|
var closeVal = store.get(closeDimI, dataIndex);
|
||||||
|
var lowestVal = store.get(lowestDimI, dataIndex);
|
||||||
|
var highestVal = store.get(highestDimI, dataIndex);
|
||||||
|
var ocLow = Math.min(openVal, closeVal);
|
||||||
|
var ocHigh = Math.max(openVal, closeVal);
|
||||||
|
var ocLowPoint = getPoint(ocLow, axisDimVal);
|
||||||
|
var ocHighPoint = getPoint(ocHigh, axisDimVal);
|
||||||
|
var lowestPoint = getPoint(lowestVal, axisDimVal);
|
||||||
|
var highestPoint = getPoint(highestVal, axisDimVal);
|
||||||
|
var ends = [];
|
||||||
|
addBodyEnd(ends, ocHighPoint, 0);
|
||||||
|
addBodyEnd(ends, ocLowPoint, 1);
|
||||||
|
ends.push(subPixelOptimizePoint(highestPoint), subPixelOptimizePoint(ocHighPoint), subPixelOptimizePoint(lowestPoint), subPixelOptimizePoint(ocLowPoint));
|
||||||
|
var itemModel = data.getItemModel(dataIndex);
|
||||||
|
var hasDojiColor = !!itemModel.get(['itemStyle', 'borderColorDoji']);
|
||||||
|
data.setItemLayout(dataIndex, {
|
||||||
|
sign: getSign(store, dataIndex, openVal, closeVal, closeDimI, hasDojiColor),
|
||||||
|
initBaseline: openVal > closeVal ? ocHighPoint[vDimIdx] : ocLowPoint[vDimIdx],
|
||||||
|
ends: ends,
|
||||||
|
brushRect: makeBrushRect(lowestVal, highestVal, axisDimVal)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function getPoint(val, axisDimVal) {
|
||||||
|
var p = [];
|
||||||
|
p[cDimIdx] = axisDimVal;
|
||||||
|
p[vDimIdx] = val;
|
||||||
|
return isNaN(axisDimVal) || isNaN(val) ? [NaN, NaN] : coordSys.dataToPoint(p);
|
||||||
|
}
|
||||||
|
function addBodyEnd(ends, point, start) {
|
||||||
|
var point1 = point.slice();
|
||||||
|
var point2 = point.slice();
|
||||||
|
point1[cDimIdx] = subPixelOptimize(point1[cDimIdx] + candleWidth / 2, 1, false);
|
||||||
|
point2[cDimIdx] = subPixelOptimize(point2[cDimIdx] - candleWidth / 2, 1, true);
|
||||||
|
start ? ends.push(point1, point2) : ends.push(point2, point1);
|
||||||
|
}
|
||||||
|
function makeBrushRect(lowestVal, highestVal, axisDimVal) {
|
||||||
|
var pmin = getPoint(lowestVal, axisDimVal);
|
||||||
|
var pmax = getPoint(highestVal, axisDimVal);
|
||||||
|
pmin[cDimIdx] -= candleWidth / 2;
|
||||||
|
pmax[cDimIdx] -= candleWidth / 2;
|
||||||
|
return {
|
||||||
|
x: pmin[0],
|
||||||
|
y: pmin[1],
|
||||||
|
width: vDimIdx ? candleWidth : pmax[0] - pmin[0],
|
||||||
|
height: vDimIdx ? pmax[1] - pmin[1] : candleWidth
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function subPixelOptimizePoint(point) {
|
||||||
|
point[cDimIdx] = subPixelOptimize(point[cDimIdx], 1);
|
||||||
|
return point;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function largeProgress(params, data) {
|
||||||
|
// Structure: [sign, x, yhigh, ylow, sign, x, yhigh, ylow, ...]
|
||||||
|
var points = createFloat32Array(params.count * 4);
|
||||||
|
var offset = 0;
|
||||||
|
var point;
|
||||||
|
var tmpIn = [];
|
||||||
|
var tmpOut = [];
|
||||||
|
var dataIndex;
|
||||||
|
var store = data.getStore();
|
||||||
|
var hasDojiColor = !!seriesModel.get(['itemStyle', 'borderColorDoji']);
|
||||||
|
while ((dataIndex = params.next()) != null) {
|
||||||
|
var axisDimVal = store.get(cDimI, dataIndex);
|
||||||
|
var openVal = store.get(openDimI, dataIndex);
|
||||||
|
var closeVal = store.get(closeDimI, dataIndex);
|
||||||
|
var lowestVal = store.get(lowestDimI, dataIndex);
|
||||||
|
var highestVal = store.get(highestDimI, dataIndex);
|
||||||
|
if (isNaN(axisDimVal) || isNaN(lowestVal) || isNaN(highestVal)) {
|
||||||
|
points[offset++] = NaN;
|
||||||
|
offset += 3;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
points[offset++] = getSign(store, dataIndex, openVal, closeVal, closeDimI, hasDojiColor);
|
||||||
|
tmpIn[cDimIdx] = axisDimVal;
|
||||||
|
tmpIn[vDimIdx] = lowestVal;
|
||||||
|
point = coordSys.dataToPoint(tmpIn, null, tmpOut);
|
||||||
|
points[offset++] = point ? point[0] : NaN;
|
||||||
|
points[offset++] = point ? point[1] : NaN;
|
||||||
|
tmpIn[vDimIdx] = highestVal;
|
||||||
|
point = coordSys.dataToPoint(tmpIn, null, tmpOut);
|
||||||
|
points[offset++] = point ? point[1] : NaN;
|
||||||
|
}
|
||||||
|
data.setLayout('largePoints', points);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* Get the sign of a single data.
|
||||||
|
*
|
||||||
|
* @returns 0 for doji with hasDojiColor: true,
|
||||||
|
* 1 for positive,
|
||||||
|
* -1 for negative.
|
||||||
|
*/
|
||||||
|
function getSign(store, dataIndex, openVal, closeVal, closeDimI, hasDojiColor) {
|
||||||
|
var sign;
|
||||||
|
if (openVal > closeVal) {
|
||||||
|
sign = -1;
|
||||||
|
} else if (openVal < closeVal) {
|
||||||
|
sign = 1;
|
||||||
|
} else {
|
||||||
|
sign = hasDojiColor
|
||||||
|
// When doji color is set, use it instead of color/color0.
|
||||||
|
? 0 : dataIndex > 0
|
||||||
|
// If close === open, compare with close of last record
|
||||||
|
? store.get(closeDimI, dataIndex - 1) <= closeVal ? 1 : -1
|
||||||
|
// No record of previous, set to be positive
|
||||||
|
: 1;
|
||||||
|
}
|
||||||
|
return sign;
|
||||||
|
}
|
||||||
|
function calculateCandleWidth(seriesModel, data) {
|
||||||
|
var baseAxis = seriesModel.getBaseAxis();
|
||||||
|
var extent;
|
||||||
|
var bandWidth = baseAxis.type === 'category' ? baseAxis.getBandWidth() : (extent = baseAxis.getExtent(), Math.abs(extent[1] - extent[0]) / data.count());
|
||||||
|
var barMaxWidth = parsePercent(retrieve2(seriesModel.get('barMaxWidth'), bandWidth), bandWidth);
|
||||||
|
var barMinWidth = parsePercent(retrieve2(seriesModel.get('barMinWidth'), 1), bandWidth);
|
||||||
|
var barWidth = seriesModel.get('barWidth');
|
||||||
|
return barWidth != null ? parsePercent(barWidth, bandWidth)
|
||||||
|
// Put max outer to ensure bar visible in spite of overlap.
|
||||||
|
: Math.max(Math.min(bandWidth / 2, barMaxWidth), barMinWidth);
|
||||||
|
}
|
||||||
|
export default candlestickLayout;
|
|
@ -0,0 +1,84 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import createRenderPlanner from '../helper/createRenderPlanner.js';
|
||||||
|
import { extend } from 'zrender/lib/core/util.js';
|
||||||
|
var positiveBorderColorQuery = ['itemStyle', 'borderColor'];
|
||||||
|
var negativeBorderColorQuery = ['itemStyle', 'borderColor0'];
|
||||||
|
var dojiBorderColorQuery = ['itemStyle', 'borderColorDoji'];
|
||||||
|
var positiveColorQuery = ['itemStyle', 'color'];
|
||||||
|
var negativeColorQuery = ['itemStyle', 'color0'];
|
||||||
|
var candlestickVisual = {
|
||||||
|
seriesType: 'candlestick',
|
||||||
|
plan: createRenderPlanner(),
|
||||||
|
// For legend.
|
||||||
|
performRawSeries: true,
|
||||||
|
reset: function (seriesModel, ecModel) {
|
||||||
|
function getColor(sign, model) {
|
||||||
|
return model.get(sign > 0 ? positiveColorQuery : negativeColorQuery);
|
||||||
|
}
|
||||||
|
function getBorderColor(sign, model) {
|
||||||
|
return model.get(sign === 0 ? dojiBorderColorQuery : sign > 0 ? positiveBorderColorQuery : negativeBorderColorQuery);
|
||||||
|
}
|
||||||
|
// Only visible series has each data be visual encoded
|
||||||
|
if (ecModel.isSeriesFiltered(seriesModel)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var isLargeRender = seriesModel.pipelineContext.large;
|
||||||
|
return !isLargeRender && {
|
||||||
|
progress: function (params, data) {
|
||||||
|
var dataIndex;
|
||||||
|
while ((dataIndex = params.next()) != null) {
|
||||||
|
var itemModel = data.getItemModel(dataIndex);
|
||||||
|
var sign = data.getItemLayout(dataIndex).sign;
|
||||||
|
var style = itemModel.getItemStyle();
|
||||||
|
style.fill = getColor(sign, itemModel);
|
||||||
|
style.stroke = getBorderColor(sign, itemModel) || style.fill;
|
||||||
|
var existsStyle = data.ensureUniqueItemVisual(dataIndex, 'style');
|
||||||
|
extend(existsStyle, style);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
export default candlestickVisual;
|
|
@ -0,0 +1,55 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import CandlestickView from './CandlestickView.js';
|
||||||
|
import CandlestickSeriesModel from './CandlestickSeries.js';
|
||||||
|
import preprocessor from './preprocessor.js';
|
||||||
|
import candlestickVisual from './candlestickVisual.js';
|
||||||
|
import candlestickLayout from './candlestickLayout.js';
|
||||||
|
export function install(registers) {
|
||||||
|
registers.registerChartView(CandlestickView);
|
||||||
|
registers.registerSeriesModel(CandlestickSeriesModel);
|
||||||
|
registers.registerPreprocessor(preprocessor);
|
||||||
|
registers.registerVisual(candlestickVisual);
|
||||||
|
registers.registerLayout(candlestickLayout);
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import * as zrUtil from 'zrender/lib/core/util.js';
|
||||||
|
export default function candlestickPreprocessor(option) {
|
||||||
|
if (!option || !zrUtil.isArray(option.series)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Translate 'k' to 'candlestick'.
|
||||||
|
zrUtil.each(option.series, function (seriesItem) {
|
||||||
|
if (zrUtil.isObject(seriesItem) && seriesItem.type === 'k') {
|
||||||
|
seriesItem.type = 'candlestick';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import { use } from '../extension.js';
|
||||||
|
import { install } from './custom/install.js';
|
||||||
|
use(install);
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue