@plotdb/chart 0.0.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/CHANGELOG.md +34 -1
  2. package/README.md +3 -3
  3. package/{dist/data → data}/index.js +0 -0
  4. package/{dist/chart.css → index.css} +0 -0
  5. package/{dist/chart.js → index.js} +3 -1
  6. package/{dist/chart.min.css → index.min.css} +0 -0
  7. package/index.min.js +1 -0
  8. package/package.json +1 -89
  9. package/{dist/utils → utils}/axis.js +6 -0
  10. package/utils/axis.min.js +1 -0
  11. package/{dist/utils → utils}/config.js +0 -0
  12. package/utils/config.min.js +1 -0
  13. package/{dist/utils → utils}/data.js +0 -0
  14. package/utils/data.min.js +1 -0
  15. package/{dist/utils → utils}/format.js +0 -0
  16. package/utils/format.min.js +1 -0
  17. package/{dist/utils → utils}/legend.css +0 -0
  18. package/{dist/utils → utils}/legend.js +0 -0
  19. package/{dist/utils → utils}/legend.min.css +0 -0
  20. package/utils/legend.min.js +1 -0
  21. package/{dist/utils → utils}/tint.js +0 -0
  22. package/utils/tint.min.js +1 -0
  23. package/{dist/utils → utils}/tip.js +0 -0
  24. package/utils/tip.min.js +1 -0
  25. package/build +0 -39
  26. package/dist/chart.min.js +0 -1
  27. package/dist/utils/axis.min.js +0 -1
  28. package/dist/utils/config.min.js +0 -1
  29. package/dist/utils/data.min.js +0 -1
  30. package/dist/utils/format.min.js +0 -1
  31. package/dist/utils/legend.min.js +0 -1
  32. package/dist/utils/tint.min.js +0 -1
  33. package/dist/utils/tip.min.js +0 -1
  34. package/doc/charts.md +0 -58
  35. package/doc/config.md +0 -44
  36. package/doc/draft/chart.md +0 -146
  37. package/doc/draft/data.md +0 -8
  38. package/doc/draft/definition.md +0 -0
  39. package/doc/draft/events.md +0 -0
  40. package/doc/draft/filter.md +0 -0
  41. package/doc/draft/lifecycle.md +0 -89
  42. package/doc/spec.md +0 -89
  43. package/doc/todo.md +0 -27
  44. package/doc/utils/tip.md +0 -84
  45. package/src/chart.ls +0 -323
  46. package/src/chart.styl +0 -6
  47. package/src/data/en-US/category +0 -20
  48. package/src/data/en-US/fruit +0 -39
  49. package/src/data/en-US/movie +0 -125
  50. package/src/data/en-US/name +0 -58
  51. package/src/data/index.ls +0 -34
  52. package/src/data/zh-TW/category +0 -20
  53. package/src/data/zh-TW/fruits +0 -38
  54. package/src/data/zh-TW/movie +0 -125
  55. package/src/data/zh-TW/names +0 -105
  56. package/src/utils/axis.ls +0 -229
  57. package/src/utils/config.ls +0 -11
  58. package/src/utils/data.ls +0 -104
  59. package/src/utils/format.ls +0 -30
  60. package/src/utils/legend.ls +0 -134
  61. package/src/utils/legend.styl +0 -37
  62. package/src/utils/tint.ls +0 -66
  63. package/src/utils/tip.ls +0 -97
  64. package/web/src/pug/base.pug +0 -20
  65. package/web/src/pug/block/axis/0.0.1/index.ls +0 -38
  66. package/web/src/pug/block/axis/0.0.1/index.pug +0 -1
  67. package/web/src/pug/block/axis-bubble/0.0.1/index.ls +0 -141
  68. package/web/src/pug/block/axis-bubble/0.0.1/index.pug +0 -1
  69. package/web/src/pug/block/bar/0.0.1/index.ls +0 -274
  70. package/web/src/pug/block/bar/0.0.1/index.pug +0 -35
  71. package/web/src/pug/block/bar-list/0.0.1/index.ls +0 -85
  72. package/web/src/pug/block/bar-list/0.0.1/index.pug +0 -30
  73. package/web/src/pug/block/bar-race/0.0.1/index.ls +0 -83
  74. package/web/src/pug/block/bar-race/0.0.1/index.pug +0 -21
  75. package/web/src/pug/block/base/0.0.1/index.ls +0 -67
  76. package/web/src/pug/block/base/0.0.1/index.pug +0 -5
  77. package/web/src/pug/block/blank/0.0.1/index.ls +0 -25
  78. package/web/src/pug/block/blank/0.0.1/index.pug +0 -1
  79. package/web/src/pug/block/bubble/0.0.1/index.ls +0 -220
  80. package/web/src/pug/block/bubble/0.0.1/index.pug +0 -28
  81. package/web/src/pug/block/curve-bar/0.0.1/index.ls +0 -89
  82. package/web/src/pug/block/curve-bar/0.0.1/index.pug +0 -16
  83. package/web/src/pug/block/curve-bar/0.0.1/sample.js +0 -338
  84. package/web/src/pug/block/dumbbell/0.0.1/index.ls +0 -90
  85. package/web/src/pug/block/dumbbell/0.0.1/index.pug +0 -1
  86. package/web/src/pug/block/empty/0.0.1/index.ls +0 -27
  87. package/web/src/pug/block/empty/0.0.1/index.pug +0 -2
  88. package/web/src/pug/block/gauge/0.0.1/index.ls +0 -100
  89. package/web/src/pug/block/gauge/0.0.1/index.pug +0 -31
  90. package/web/src/pug/block/gauge/0.0.1/sample.js +0 -338
  91. package/web/src/pug/block/line/0.0.1/index.ls +0 -302
  92. package/web/src/pug/block/line/0.0.1/index.pug +0 -33
  93. package/web/src/pug/block/number/0.0.1/index.ls +0 -69
  94. package/web/src/pug/block/number/0.0.1/index.pug +0 -20
  95. package/web/src/pug/block/percent-list/0.0.1/index.ls +0 -167
  96. package/web/src/pug/block/percent-list/0.0.1/index.pug +0 -34
  97. package/web/src/pug/block/pie/0.0.1/index.ls +0 -125
  98. package/web/src/pug/block/pie/0.0.1/index.pug +0 -19
  99. package/web/src/pug/block/pie/0.0.1/sample.js +0 -338
  100. package/web/src/pug/block/pie-bubble/0.0.1/index.ls +0 -185
  101. package/web/src/pug/block/pie-bubble/0.0.1/index.pug +0 -40
  102. package/web/src/pug/block/radar/0.0.1/index.ls +0 -113
  103. package/web/src/pug/block/radar/0.0.1/index.pug +0 -1
  104. package/web/src/pug/block/radar/0.0.1/xx +0 -285
  105. package/web/src/pug/block/scatter/0.0.1/index.ls +0 -128
  106. package/web/src/pug/block/scatter/0.0.1/index.pug +0 -30
  107. package/web/src/pug/block/sheet/0.0.1/index.ls +0 -38
  108. package/web/src/pug/block/sheet/0.0.1/index.pug +0 -5
  109. package/web/src/pug/block/table/0.0.1/index.ls +0 -40
  110. package/web/src/pug/block/table/0.0.1/index.pug +0 -3
  111. package/web/src/pug/block/taiwancounty/0.0.1/index.ls +0 -74
  112. package/web/src/pug/block/taiwancounty/0.0.1/index.pug +0 -64
  113. package/web/src/pug/block/taiwantown/0.0.1/index.ls +0 -48
  114. package/web/src/pug/block/taiwantown/0.0.1/index.pug +0 -52
  115. package/web/src/pug/block/taiwanvillage/0.0.1/index.ls +0 -53
  116. package/web/src/pug/block/taiwanvillage/0.0.1/index.pug +0 -52
  117. package/web/src/pug/block/treemap/0.0.1/index.ls +0 -172
  118. package/web/src/pug/block/treemap/0.0.1/index.pug +0 -42
  119. package/web/src/pug/block/voronoi-treemap/0.0.1/index.ls +0 -174
  120. package/web/src/pug/block/voronoi-treemap/0.0.1/index.pug +0 -17
  121. package/web/src/pug/block/voronoi-treemap/0.0.1/sample.js +0 -241
  122. package/web/src/pug/block/wordcloud/0.0.1/index.ls +0 -61
  123. package/web/src/pug/block/wordcloud/0.0.1/index.pug +0 -1
  124. package/web/src/pug/block/worldmap/0.0.1/index.ls +0 -81
  125. package/web/src/pug/block/worldmap/0.0.1/index.pug +0 -12
  126. package/web/src/pug/index.ls +0 -72
  127. package/web/src/pug/index.pug +0 -51
  128. package/web/src/styl/index.styl +0 -0
  129. package/web/static/assets/block/cache.js +0 -4
  130. package/web/static/assets/custom-lib/d3/d3-array.v2.js +0 -1182
  131. package/web/static/assets/custom-lib/d3/d3-array.v2.min.js +0 -2
  132. package/web/static/assets/custom-lib/d3/d3-array.v3.js +0 -1273
  133. package/web/static/assets/custom-lib/d3/d3-array.v3.min.js +0 -1273
  134. package/web/static/assets/custom-lib/d3/d3-axis.v2.min.js +0 -2
  135. package/web/static/assets/custom-lib/d3/d3-brush.v2.min.js +0 -2
  136. package/web/static/assets/custom-lib/d3/d3-color.v2.min.js +0 -2
  137. package/web/static/assets/custom-lib/d3/d3-dispatch.v2.min.js +0 -2
  138. package/web/static/assets/custom-lib/d3/d3-drag.v2.min.js +0 -2
  139. package/web/static/assets/custom-lib/d3/d3-ease.v2.min.js +0 -2
  140. package/web/static/assets/custom-lib/d3/d3-force-boundary.v0.0.1.min.js +0 -2
  141. package/web/static/assets/custom-lib/d3/d3-force.v2.min.js +0 -2
  142. package/web/static/assets/custom-lib/d3/d3-format.v2.min.js +0 -2
  143. package/web/static/assets/custom-lib/d3/d3-geo.v2.js +0 -3127
  144. package/web/static/assets/custom-lib/d3/d3-geo.v2.min.js +0 -2
  145. package/web/static/assets/custom-lib/d3/d3-hierarchy.v2.min.js +0 -2
  146. package/web/static/assets/custom-lib/d3/d3-interpolate.v2.min.js +0 -2
  147. package/web/static/assets/custom-lib/d3/d3-path.v2.min.js +0 -2
  148. package/web/static/assets/custom-lib/d3/d3-quadtree.v2.min.js +0 -2
  149. package/web/static/assets/custom-lib/d3/d3-random.v2.min.js +0 -2
  150. package/web/static/assets/custom-lib/d3/d3-scale-chromatic.v1.min.js +0 -2
  151. package/web/static/assets/custom-lib/d3/d3-selection.v2.min.js +0 -2
  152. package/web/static/assets/custom-lib/d3/d3-shape.v2.min.js +0 -2
  153. package/web/static/assets/custom-lib/d3/d3-timer.v2.min.js +0 -2
  154. package/web/static/assets/custom-lib/d3/d3-transition.v2.min.js +0 -2
  155. package/web/static/assets/custom-lib/d3/d3.v4.js +0 -17178
  156. package/web/static/assets/custom-lib/d3/d3.v4.min.js +0 -2
  157. package/web/static/assets/custom-lib/d3/d3.v6.js +0 -19708
  158. package/web/static/assets/data/countrycode.json +0 -1
  159. package/web/static/assets/data/world-110m.json +0 -1
  160. package/web/static/assets/data/zh-to-alpha2.json +0 -1
  161. package/web/static/assets/img/fluid.svg +0 -16
  162. package/web/static/block/axis/0.0.1/index.html +0 -79
  163. package/web/static/block/axis-bubble/0.0.1/index.html +0 -222
  164. package/web/static/block/bar/0.0.1/index.html +0 -581
  165. package/web/static/block/bar-list/0.0.1/index.html +0 -231
  166. package/web/static/block/bar-race/0.0.1/index.html +0 -184
  167. package/web/static/block/base/0.0.1/index.html +0 -197
  168. package/web/static/block/blank/0.0.1/index.html +0 -42
  169. package/web/static/block/bubble/0.0.1/index.html +0 -402
  170. package/web/static/block/bubble/0.0.1/test.html +0 -0
  171. package/web/static/block/curve-bar/0.0.1/index.html +0 -148
  172. package/web/static/block/dumbbell/0.0.1/index.html +0 -178
  173. package/web/static/block/empty/0.0.1/index.html +0 -76
  174. package/web/static/block/gauge/0.0.1/index.html +0 -150
  175. package/web/static/block/line/0.0.1/index.html +0 -571
  176. package/web/static/block/number/0.0.1/index.html +0 -152
  177. package/web/static/block/percent-list/0.0.1/index.html +0 -316
  178. package/web/static/block/pie/0.0.1/index.html +0 -281
  179. package/web/static/block/pie-bubble/0.0.1/index.html +0 -358
  180. package/web/static/block/radar/0.0.1/index.html +0 -149
  181. package/web/static/block/scatter/0.0.1/index.html +0 -251
  182. package/web/static/block/sheet/0.0.1/index.html +0 -103
  183. package/web/static/block/table/0.0.1/index.html +0 -73
  184. package/web/static/block/taiwancounty/0.0.1/index.html +0 -202
  185. package/web/static/block/taiwantown/0.0.1/index.html +0 -210
  186. package/web/static/block/taiwanvillage/0.0.1/index.html +0 -220
  187. package/web/static/block/treemap/0.0.1/index.html +0 -360
  188. package/web/static/block/voronoi-treemap/0.0.1/index.html +0 -350
  189. package/web/static/block/wordcloud/0.0.1/index.html +0 -92
  190. package/web/static/block/worldmap/0.0.1/index.html +0 -207
  191. package/web/static/css/index.css +0 -0
  192. package/web/static/css/index.min.css +0 -0
  193. package/web/static/favicon.ico +0 -0
  194. package/web/static/index.html +0 -153
@@ -1,125 +0,0 @@
1
- 完美風暴
2
- 費城故事
3
- 人猿星球
4
- 巴頓將軍
5
- 風中奇緣
6
- 木偶奇遇記
7
- 鵝毛筆
8
- 奪寶奇兵
9
- 羅密歐與朱麗葉
10
- 白雪公主
11
- 鋼琴師
12
- 熱情如火
13
- 星塵
14
- 星艦奇航記
15
- 七年之癢
16
- 真善美
17
- 龍鳳配
18
- 第六感
19
- 沉默的羔羊
20
- 星際之門系列
21
- 日落大道
22
- 超人
23
- 時光倒流七十年
24
- 刺激1995
25
- 莎翁情史
26
- 星銀島
27
- 變形金剛
28
- 玩具總動員
29
- 玩具總動員2
30
- 計程車司機
31
- 大白鯊
32
- 家族企業
33
- 偷天換日
34
- 冰河世紀
35
- 他不笨,他是我爸爸
36
- 鋼鐵俠
37
- 西部開拓史
38
- 花木蘭
39
- 幻想曲
40
- 綠巨人
41
- 好萊塢式結局
42
- 沉默的羔羊
43
- 海上鋼琴師
44
- 黃金時代
45
- 後窗
46
- 虎豹小霸王
47
- 憤怒的葡萄
48
- 畢業生
49
- 教父第1至3集
50
- 桂河大橋
51
- 關山飛渡
52
- 公主日記
53
- 失戀排行榜
54
- 葛底士堡
55
- 光榮戰役
56
- 過關斬將
57
- 鬼霧
58
- 哥吉拉
59
- 隔山有眼
60
- 鬼娃新娘
61
- 葛倫米勒傳
62
- 第五元素
63
- 阿甘正傳
64
- 海底總動員
65
- 變蠅人
66
- 第一滴血
67
- 浮生若夢
68
- 年度風雲人物
69
- 開膛手
70
- 逍遙騎士
71
- 英倫情人
72
- E.T.外星人
73
- 剪刀手愛德華
74
- 太陽帝國
75
- 第三類接觸
76
- 伊莉莎白2:黃金時代
77
- 諜影疑雲
78
- 大衛與麗莎
79
- 大河戀
80
- 東方西方
81
- 斷頭谷
82
- 明天過後
83
- 大毒梟
84
- 燈塔驚魂記
85
- 霹靂嬌娃
86
- 哭泣遊戲
87
- 蟲蟲危機
88
- 城市之光
89
- 柯萊利上尉的曼陀鈴
90
- 重歸天堂
91
- 蠢貨
92
- 擒凶記
93
- 赤膽屠龍
94
- 唐人街
95
- 大國民
96
- 冷山
97
- 發條桔子
98
- 寶貝兒
99
- 奔騰年代
100
- 黑鷹墜落
101
- 一個國家的誕生
102
- 美麗心靈
103
- 變人
104
- 兵人
105
- 變相怪傑
106
- 冰凍蜘蛛
107
- 北西北
108
- 藍絲絨
109
- 雌雄大盜
110
- 7月4日誕生
111
- 第凡內早餐
112
- 初戀的回憶
113
- 復仇者聯盟
114
- 安娜與國王
115
- 安妮·霍爾
116
- 阿凡達
117
- 美國風情畫
118
- 西線無戰事
119
- 美國甜心
120
- 桃色公寓
121
- 莫扎特
122
- 異形
123
- 彗星美人
124
- 人工智慧
125
- 邊城英烈傳
@@ -1,105 +0,0 @@
1
- 林彥娥
2
- 韋敬宇
3
- 蔡亭竹
4
- 陳耿威
5
- 吳尊
6
- 李治瑋
7
- 陳嘉豪
8
- 姜建廷
9
- 祖秉勳
10
- 黃政哲
11
- 黃建新
12
- 楊帆
13
- 張威宇
14
- 李明珠
15
- 吳薇儀
16
- 杜家銘
17
- 任采林
18
- 林美茹
19
- 黃佩璇
20
- 張柏亨
21
- 黃怡杰
22
- 王書娟
23
- 曹桂潔
24
- 蔡聖凱
25
- 王怡伶
26
- 林彥劭
27
- 李貴芬
28
- 陳志元
29
- 蔡禮易
30
- 王彥博
31
- 林依辰
32
- 劉俊純
33
- 臧雅雯
34
- 黃博文
35
- 陳冠羽
36
- 何台芝
37
- 韓慶江
38
- 吳秋年
39
- 張文東
40
- 林奕辰
41
- 曾雅玲
42
- 陳惠文
43
- 陳慧惟
44
- 葛泓夫
45
- 李佩妏
46
- 林夕
47
- 傅淑娟
48
- 陳佳慧
49
- 侯伊然
50
- 劉佩君
51
- 韓羽
52
- 林雅筑
53
- 劉星禮
54
- 丁初茜
55
- 林丹紫
56
- 陳威軍
57
- 陳珮甄
58
- 黎昱宏
59
- 曾哲銘
60
- 洪姿穎
61
- 王新睿
62
- 李偉翔
63
- 宋雅竹
64
- 荊雅惠
65
- 黃淑卿
66
- 詹雅書
67
- 童佳雯
68
- 柏華仁
69
- 蔡金霖
70
- 費俊逸
71
- 謝佳伶
72
- 吳欣偉
73
- 陳志香
74
- 張惠泉
75
- 陳恒芳
76
- 謝邦其
77
- 吳士怡
78
- 杜仰彬
79
- 林冠良
80
- 謝佩劭
81
- 張建智
82
- 韓大芸
83
- 梁志宇
84
- 丁美慧
85
- 朱哲豪
86
- 欒維倫
87
- 陳金念
88
- 陳瑋婷
89
- 陳奇邦
90
- 郭淑文
91
- 楊旻善
92
- 賴延江
93
- 林宜臻
94
- 姚慧娟
95
- 簡志喬
96
- 楊家宏
97
- 黃惠敏
98
- 黃郁紹
99
- 阮綺生
100
- 蔡紫秀
101
- 吳雅文
102
- 張良
103
- 郭芝名
104
- 郭永心
105
- 楊筱婷
package/src/utils/axis.ls DELETED
@@ -1,229 +0,0 @@
1
- ceNS = -> document.createElementNS("http://www.w3.org/2000/svg", it)
2
-
3
- axis = (opt={}) ->
4
- @dir = {"bottom": 0, "left": 2}[opt.direction or 'bottom']
5
- @name = opt.name or \axis
6
- # unlike legend, we don't use n.layout to layout things, only use its primary size.
7
- # we will update n.layout's secondary size, it won't affect how we layout things.
8
- # so we don't need layout.update before rendering.
9
- # layout.update is still needed after rendering for stuff outside axis to work.
10
- # TODO still yaxis and xaxis may affect each other to cause a recursive update,
11
- # so we have to be careful and have some constraint over this. (e.g., set max size of n.layout)
12
- @layout = opt.layout or new layout root: @root
13
- @_ticks = []
14
- @_scale = opt.scale or (->it)
15
- @_format = opt.format or if chart? => chart.utils.format.simple else (->it)
16
- @cfg = {tick-size: 8} <<< opt.cfg
17
- @_map = {} # tick value -> object{v,c,t,n,g}
18
- @_n = n =
19
- root: ceNS \g # root node, appended to render node
20
- layout: @layout.get-node(@name) # decide render region size
21
- render: @layout.get-group(@name) # render region node
22
- wrap: null # for wrapping tick text
23
- domain: ceNS \path # axis domain line
24
- n.render.appendChild n.root
25
- n.root.appendChild n.domain
26
-
27
- n.label = ceNS \text
28
- n.label.textContent = ''
29
- n.label
30
- ..setAttribute \dominant-baseline, \hanging
31
- ..setAttribute \text-anchor, \middle
32
- n.root.appendChild n.label
33
- @wrapper!
34
- @layout
35
- ..on \update, ~> @update!
36
- ..on \render, ~> @render!
37
- @
38
-
39
-
40
- axis.prototype = Object.create(Object.prototype) <<< do
41
- # while we may only need to update `white-space` and `width`,
42
- # strangely style changing only works if we replace node with a new one.
43
- # this is a workaround before we find the root cause.
44
- wrapper: ->
45
- n = @_n
46
- if n.wrap and n.wrap.parentNode => n.wrap.parentNode.removeChild n.wrap
47
- n.wrap = document.createElement \div
48
- n.wrap.style <<< {
49
- visibility: \hidden
50
- position: \absolute
51
- top: 0
52
- left: 0
53
- pointerEvents: \none
54
- userSelect: \none
55
- zIndex: 0
56
- wordBreak: "break-all"
57
- lineHeight: \.95em
58
- } <<< (if @dir < 2 and @cfg.textWidth? => {
59
- whiteSpace: 'wrap'
60
- width: "#{@cfg.textWidth >? 1}em"
61
- } else {whiteSpace: \pre, width: \4em})
62
- n.layout.appendChild n.wrap
63
-
64
- config: ->
65
- if !(it?) => return @cfg
66
- @cfg <<< it
67
- if @cfg.format => @format @cfg.format
68
- @wrapper!
69
-
70
- format: -> if it? => @_format = it else @_format
71
- scale: -> if it? => @_scale = it else @_scale
72
- caption: ->
73
- if @cfg.show-caption? and !@cfg.show-caption => @_n.label.textContent = ''
74
- else @_n.label.textContent = it
75
- update: ->
76
- ticks: (ticks) ->
77
- /* (v)alue -> (c)oordinate -> (t)ext -> (n)odes: { g(group), p(path), t(text) } */
78
- map = {}
79
- size = @_n.layout.getBoundingClientRect![if @dir < 2 => \width else \height]
80
- count = Math.round(size / 25)
81
- itr = Math.round(ticks.length / (count >? 1)) >? 1
82
- @_ticks = ticks
83
- .filter (d,i) -> !(i % itr) or i == (ticks.length - 1)
84
- .map (o) ~>
85
- if typeof(o) != \object => o = {v: o}
86
- map[o.v] = @_map{}[o.v] <<< o
87
- for k,v of @_map => if !map[k] => v.n.g.parentNode.removeChild v.n.g
88
- @_map = map
89
- @_ticks
90
- .filter (o) -> !o.n
91
- .map (o) ~>
92
- o.n = g: ceNS(\g), p: ceNS(\path), t: ceNS(\g)
93
- o.n.g.appendChild o.n.p
94
- o.n.g.appendChild o.n.t
95
- @_n.root.appendChild o.n.g
96
- if isNaN(+o.v) => o.t = o.v
97
-
98
- render: ->
99
- n = @_n
100
- is-horizon = (@dir < 2)
101
- wrap = n.wrap
102
- ticks = @_ticks
103
- if @cfg.enabled? and !@cfg.enabled =>
104
- if is-horizon => n.layout.style <<< height: "0px", paddingTop: "0", paddingBottom: "0"
105
- else n.layout.style <<< width: "0px", paddingLeft: "0", paddingRight: "0"
106
- n.domain.style.display = 'none'
107
- return
108
- else
109
- if is-horizon => n.layout.style <<< height: "", paddingTop: "", paddingBottom: ""
110
- else n.layout.style <<< width: "", paddingLeft: "", paddingRight: ""
111
- n.domain.style.display = ''
112
- font-size = getComputedStyle(wrap).font-size
113
- box = n.layout.getBoundingClientRect!
114
- n.domain.style <<< strokeWidth: 1, stroke: \currentColor, fill: \none
115
- ticks.map (o, idx) ~>
116
- pos = if !idx => 0 else if idx == ticks.length - 1 => 2 else 1
117
- o._c = if o.c? => o.c else @_scale(o.v) + (if @_scale.bandwidth => @_scale.bandwidth!/2 else 0)
118
- o._t = if o.t? => o.t else @_format o.v
119
- o.n.p.style <<< strokeWidth: 1, stroke: \currentColor, fill: \none
120
- wrap.textContent = o._t
121
- wrap.style.textAlign = if is-horizon => <[left center right]>[pos] else <[right left]>[@dir - 2]
122
- o.n.tt = wrap-svg-text {node: wrap}
123
- o.n.t.style.font-size = font-size
124
- o.n.t.textContent = ''
125
- o.n.t.appendChild o.n.tt
126
- ticks.sort (a,b) -> a._c - b._c
127
-
128
- if is-horizon =>
129
- n.domain.setAttribute \d, "M0 0L#{box.width} 0Z"
130
- n.label.setAttribute \x, box.width / 2
131
- else
132
- n.domain.setAttribute \d, "M0 0L0 #{box.height}Z"
133
- n.label.setAttribute "transform", "translate(0,#{box.height/2}) rotate(90)"
134
- ticks.map (o) -> o.box = o.n.t.getBBox!
135
- @adjust!
136
-
137
- adjust: ->
138
- ticks = @_ticks
139
- is-horizon = (@dir < 2)
140
- insert = (idx, lv, lc) ~>
141
- if lc.checked[idx] => return else lc.checked[idx] = true
142
- tick = ticks[idx]
143
- # 0: smallest 'screen coord' tick / 1: middle tick / 2: biggest 'screen coord' tick
144
- # top(0) -> down(2) / left(0) -> right(0)
145
- pos = if !idx => 0 else if idx == ticks.length - 1 => 2 else 1
146
-
147
- [coord,text] = [tick._c, tick._t]
148
- box = tick.box
149
- offset = {x: -box.x, y: -box.y}
150
- do-offset = if @_scale.bandwidth => false
151
- else if @cfg.boundary-tick-offset? => !!@cfg.boundary-tick-offset
152
- else if @dir < 2 => true else false
153
- r = if do-offset => pos/2 else 1/2
154
- if is-horizon => offset.x -= box.width * r # start: 0w, middle: -.5w, end: -w ( left to right )
155
- else offset.y -= box.height * r # start: 0h, middle: .5h, end: -h ( top to bottom )
156
- tick.n.tt.setAttribute \transform, "translate(#{offset.x},#{offset.y})"
157
-
158
- box =
159
- size: box[if is-horizon => \width else \height]
160
- size-alt: box[if is-horizon => \height else \width]
161
- lv: lv, tick: tick, idx: idx
162
- box.coord = coord - (box.size * r) #(if is-horizon => pos else (2 - pos)) / 2)
163
-
164
- if is-horizon =>
165
- tick.n.g.setAttribute \transform, "translate(#{coord},0)"
166
- tick.n.p.setAttribute \d, "M0 0L0 #{@cfg.tick-size}"
167
- tick.n.t.setAttribute \transform, "translate(0,#{@cfg.tick-size})"
168
- else
169
- tick.n.g.setAttribute \transform, "translate(0,#{coord})"
170
- tick.n.p.setAttribute \d, "M0 0L-#{@cfg.tick-size} 0"
171
- tick.n.t.setAttribute \transform, "translate(#{-@cfg.tick-size - box.size-alt - 1},0)"
172
-
173
- m = 2
174
- [ip1, ip2] = [ box.coord, box.coord + box.size ]
175
- [op1, op2] = [ ip1 - m, ip2 + m]
176
-
177
- overlap = lc.picked
178
- .filter (b) ->
179
- [iq1, iq2] = [b.coord, b.coord + b.size]
180
- [oq1, oq2] = [iq1 - m, iq2 + m]
181
- return (ip1 > oq1 and ip1 < oq2) or (iq1 > op1 and iq1 < op2)
182
- .length
183
-
184
- tick.n.t.style.opacity = if overlap => 0 else 1
185
- lc.picked.push box
186
- return !overlap # return true if insert successfully
187
-
188
- # align lv ( see below commented codes )
189
- # try to only show ticks in the same level.
190
- # yet current implementation doesn't work well
191
- # since we may have different size in each interval even in the same level
192
-
193
- bfs = (maxlv = 1) ~>
194
- [lc,fifo] = [{checked:{}, picked: [], node: @_n.wrap}, []]
195
- lc.font-size = getComputedStyle(lc.node).font-size
196
- # align lv
197
- ticks.map -> it.n.t.style.opacity = 0
198
- if ticks.length =>
199
- fifo.push [0, ticks.length - 1, 0]
200
- [0, ticks.length - 1].map -> insert it, 0, lc
201
- while fifo.length =>
202
- [L, R, D] = fifo.splice 0, 1 .0
203
- if D >= maxlv => continue
204
- M = Math.floor(( L + R ) / 2)
205
- # align lv
206
- #if !insert(M, D, lc) => maxlv = D
207
- insert(M, D, lc)
208
- if M > L + 1 => fifo.push [L, M, D + 1]
209
- if R > M + 1 => fifo.push [M, R, D + 1]
210
-
211
- /* align lv
212
- lc.picked.map -> if it.lv >= maxlv => it.tick.n.t.style.opacity = 0
213
- lc.picked = lc.picked.filter -> it.lv < maxlv
214
- */
215
-
216
- size = Math.max.apply(Math, [0] ++ lc.picked.map(-> it.size-alt))
217
- if @dir < 2 =>
218
- @_n.label.setAttribute \y, size + @cfg.tick-size
219
- @_n.layout.style.height = "#{(size + @cfg.tick-size + @_n.label.getBoundingClientRect!height)}px"
220
- else
221
- @_n.label.setAttribute \x, 0
222
- @_n.label.setAttribute \y, 0
223
- @_n.layout.style.width = "#{(size + @cfg.tick-size + @_n.label.getBoundingClientRect!width)}px"
224
- box = @_n.layout.getBoundingClientRect!
225
- @_n.label.setAttribute \transform, "translate(#{-(size + @cfg.tick-size)},#{box.height/2}) rotate(90)"
226
- @_n.root.setAttribute \transform "translate(#{box.width},0)"
227
- bfs 5
228
-
229
- if chart? => chart.{}utils.axis = axis
@@ -1,11 +0,0 @@
1
- config = preset:
2
- default:
3
- margin: type: \number
4
- font:
5
- size: type: \number, min: 1, max: 256, step: 1, default: 16
6
- color: type: \color
7
- palette: type: \palette
8
- background: type: \color
9
-
10
- if chart? => chart.{}utils.config = config
11
-
package/src/utils/data.ls DELETED
@@ -1,104 +0,0 @@
1
- main =
2
- number: (opt = {}) ->
3
- data = opt.data
4
- .filter -> !(!it or "#{it}".trim! == '')
5
- len = data
6
- .filter -> !isNaN(parseFloat(it))
7
- .length
8
- (len / data.length)
9
-
10
- serial: (opt = {}) ->
11
- data = [] ++ opt.data
12
- data.sort (a,b) -> b - a
13
- hash = {}
14
- for i from 1 til data.length =>
15
- if isNaN(data[i]) or isNaN(data[i - 1]) =>
16
- hash[if data[i] > data[i - 1] => "#{data[i]}:#{data[i - 1]}" else "#{data[i - 1]}:#{data[i]}"] = true
17
- else delta = data[i] - data[i - 1]
18
- hash[delta] = true
19
- return 1 / ([k for k of hash].filter(->it != \0).length or 2)
20
-
21
- text: (opt={}) -> 1 - (@number opt)
22
-
23
- category: (opt={}) ->
24
- len = Array.from(new Set(opt.data)).length
25
- maxlen = opt.data.length
26
- ret = (1 - (((len - 2) >? 0) / maxlen) - (1 / maxlen)) >? 0 <? 1
27
- if @number(opt) => ret = ret * 0.9
28
- return ret
29
-
30
- parse: (data) ->
31
- if Array.isArray(data) =>
32
- head = data.slice 0, 1 .0
33
- body = data.slice 1
34
- body = body.map (d,i) ->
35
- ret = {}
36
- head.map (h,j) -> ret[h] = d[j]
37
- ret
38
- return {head, body}
39
- return data
40
-
41
- autotype: (data = []) ->
42
- head = [k for k of data.0 or {}]
43
- type = []
44
- for key in head =>
45
- d = data.map -> it[key]
46
- ret = do
47
- key: key
48
- types:
49
- R: main.number({data: d})
50
- O: main.serial({data: d})
51
- N: main.text({data: d})
52
- C: main.category({data: d})
53
- list = <[R O N C]>.map -> [it, ret.types[it]]
54
- list.sort (a,b) -> b.1 - a.1
55
- ret.type = list.0.0
56
- type.push ret
57
-
58
- return type
59
-
60
- autobind: (data = [], dimension = {}) ->
61
- datatypes = @autotype data
62
- dims = [{k,v} for k,v of dimension].filter -> !it.v.passive
63
- dims.sort (a,b) ->
64
- ret = (a.v.priority or 100) - (b.v.priority or 100)
65
- if ret != 0 => return ret
66
- [ma,mb] = [(a.v.type or \R), (b.v.type or \R)].map (t) ->
67
- Math.min.apply Math, [0 til t.length].map (i) -> "CONR".indexOf(t[i])
68
- return ma - mb
69
- for dim in dims =>
70
- dim.bind = null
71
- ts = dim.v.type or \RNOC
72
- for i from 0 til ts.length =>
73
- t = ts[i]
74
- datatypes.sort (a, b) ->
75
- ret = (b.types[t] or 0) - (a.types[t] or 0)
76
- if b.types[t] == a.types[t] and t == \R => return (a.types.O or 0) - (b.types.O or 0)
77
- return ret
78
- for i from 0 til datatypes.length =>
79
- dt = datatypes[i]
80
- if dt.types[t] < 0.5 or dt.used or (t == \C and dt.types.R > 0.5) => continue
81
- dim.bind = if dim.v.multiple => [dt] else dt
82
- dt.used = true
83
- break
84
- for dim in dims =>
85
- if !dim.v.multiple => continue
86
- ts = dim.v.type or \RNOC
87
- for i from 0 til ts.length =>
88
- t = ts[i]
89
- datatypes.sort (a, b) ->
90
- ret = (b[t] or 0) - (a[t] or 0)
91
- if b[t] == a[t] and t == \R => return (a.O or 0) - (b.O or 0)
92
- return ret
93
- for i from 0 til datatypes.length =>
94
- dt = datatypes[i]
95
- if dt.types[t] < 0.5 or dt.used or (t == \C and dt.types.R > 0.5) => continue
96
- dim.bind.push dt
97
- dt.used = true
98
- ret = {}
99
- for dim in dims => if dim.bind =>
100
- ret[dim.k] = dim.bind
101
- (if Array.isArray(dim.bind) => dim.bind else [dim.bind]).map -> delete it.used
102
- return ret
103
-
104
- if chart? => chart.{}utils.data = main
@@ -1,30 +0,0 @@
1
- format = {}
2
- format.auto = (list = []) ->
3
- return d3.format ".3s"
4
- list = list.map(->+it).filter -> !isNaN(it)
5
- if !list.length => return d3.format "d"
6
- list.sort (a,b) -> a - b
7
- s = Math.max.apply Math, list.map ->
8
- s = 1
9
- while it
10
- if it % 10 => break
11
- it = Math.floor(it / 10)
12
- s++
13
- Math.ceil((Math.log(it or 1) / Math.log(10)) - s) >? 0
14
- int-rate = list.filter(-> Math.floor(it) == it).length / list.length
15
- diffs = [Math.abs(list[i] - list[i - 1]) for i from 1 til list.length].map ->
16
- Math.log(if it => it else 1) / Math.log(10)
17
- diff-avg = diffs.reduce(((a,b) -> a + b),0) / list.length
18
- type = if int-rate > 0.9 => "s" else "f"
19
- size = (if diff-avg >= 0 => (s >? 0) else Math.ceil(Math.abs(diff-avg)))
20
- return d3.format ".#size#type"
21
-
22
- format.simple = (v) ->
23
- if isNaN(v = +v) => return v
24
- return if v >= 1000000000 => (v / 1000000000).toFixed(0) + "G"
25
- else if v >= 1000000 => (v / 1000000).toFixed(0) + "M"
26
- else if v >= 1000 => (v / 1000).toFixed(0) + "K"
27
- else if Math.floor(v) == v => (v).toFixed(0)
28
- else v.toFixed(2)
29
-
30
- if chart? => chart.{}utils.format = format