@worktile/gantt 11.0.2 → 12.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/.all-contributorsrc +53 -0
  2. package/.angulardoc.json +4 -0
  3. package/.circleci/config.yml +17 -0
  4. package/.coveralls.yml +1 -0
  5. package/.docgenirc.js +64 -0
  6. package/.editorconfig +22 -0
  7. package/.prettierrc +24 -0
  8. package/.travis.yml +23 -0
  9. package/CHANGELOG.md +564 -0
  10. package/Dockerfile +4 -0
  11. package/LICENSE +21 -0
  12. package/README.md +116 -13
  13. package/angular.json +136 -0
  14. package/docs/guides/basic/components.md +54 -0
  15. package/docs/guides/basic/event.md +70 -0
  16. package/docs/guides/basic/index.md +4 -0
  17. package/docs/guides/basic/style.md +68 -0
  18. package/docs/guides/basic/type.md +70 -0
  19. package/docs/guides/basic/usage.md +189 -0
  20. package/docs/guides/index.md +5 -0
  21. package/docs/guides/intro/getting-started.md +79 -0
  22. package/docs/guides/intro/index.md +51 -0
  23. package/docs/index.md +0 -0
  24. package/example/browserslist +12 -0
  25. package/example/src/app/app-routing.module.ts +26 -0
  26. package/example/src/app/app.component.html +2 -0
  27. package/example/src/app/app.component.ts +11 -0
  28. package/example/src/app/app.module.ts +57 -0
  29. package/example/src/app/components/components.component.html +6 -0
  30. package/example/src/app/components/components.component.ts +33 -0
  31. package/example/src/app/configuration/parameters/api/zh-cn.js +350 -0
  32. package/example/src/app/configuration/parameters/doc/zh-cn.md +5 -0
  33. package/example/src/app/gantt/gantt.component.html +51 -0
  34. package/example/src/app/gantt/gantt.component.ts +119 -0
  35. package/example/src/app/gantt-advanced/component/flat.component.html +30 -0
  36. package/example/src/app/gantt-advanced/component/flat.component.ts +72 -0
  37. package/example/src/app/gantt-advanced/component/flat.scss +31 -0
  38. package/example/src/app/gantt-advanced/gantt-advanced.component.html +32 -0
  39. package/example/src/app/gantt-advanced/gantt-advanced.component.ts +34 -0
  40. package/example/src/app/gantt-advanced/mocks.ts +158 -0
  41. package/example/src/app/gantt-groups/gantt-groups.component.html +42 -0
  42. package/example/src/app/gantt-groups/gantt-groups.component.ts +62 -0
  43. package/example/src/app/gantt-range/gantt-range.component.html +66 -0
  44. package/example/src/app/gantt-range/gantt-range.component.ts +67 -0
  45. package/example/src/app/gantt-range/mocks.ts +150 -0
  46. package/example/src/app/helper.ts +38 -0
  47. package/example/src/assets/.gitkeep +0 -0
  48. package/example/src/environments/environment.prod.ts +3 -0
  49. package/example/src/environments/environment.ts +16 -0
  50. package/example/src/favicon.ico +0 -0
  51. package/example/src/index.html +13 -0
  52. package/example/src/main.ts +12 -0
  53. package/example/src/polyfills.ts +63 -0
  54. package/example/src/styles.scss +56 -0
  55. package/example/tsconfig.app.json +18 -0
  56. package/nginx.conf +17 -0
  57. package/package.json +113 -17
  58. package/packages/gantt/README.md +24 -0
  59. package/packages/gantt/karma.conf.js +46 -0
  60. package/packages/gantt/ng-package.json +7 -0
  61. package/packages/gantt/ng-package.prod.json +7 -0
  62. package/packages/gantt/package.json +16 -0
  63. package/packages/gantt/src/class/date-point.ts +14 -0
  64. package/{class/event.d.ts → packages/gantt/src/class/event.ts} +12 -6
  65. package/packages/gantt/src/class/group.ts +36 -0
  66. package/{class/index.d.ts → packages/gantt/src/class/index.ts} +0 -0
  67. package/packages/gantt/src/class/item.ts +129 -0
  68. package/packages/gantt/src/class/test/group.spec.ts +21 -0
  69. package/packages/gantt/src/class/test/item.spec.ts +102 -0
  70. package/packages/gantt/src/class/view-type.ts +7 -0
  71. package/packages/gantt/src/components/bar/bar-drag.ts +298 -0
  72. package/packages/gantt/src/components/bar/bar.component.html +17 -0
  73. package/packages/gantt/src/components/bar/bar.component.scss +169 -0
  74. package/packages/gantt/src/components/bar/bar.component.ts +109 -0
  75. package/packages/gantt/src/components/bar/test/bar.component.spec.ts +54 -0
  76. package/packages/gantt/src/components/bar/test/bar.drag.spec.ts +196 -0
  77. package/packages/gantt/src/components/calendar/calendar.component.html +52 -0
  78. package/packages/gantt/src/components/calendar/calendar.component.scss +77 -0
  79. package/packages/gantt/src/components/calendar/calendar.component.ts +100 -0
  80. package/packages/gantt/src/components/drag-backdrop/drag-backdrop.component.html +6 -0
  81. package/packages/gantt/src/components/drag-backdrop/drag-backdrop.component.scss +48 -0
  82. package/packages/gantt/src/components/drag-backdrop/drag-backdrop.component.ts +13 -0
  83. package/packages/gantt/src/components/icon/icon.component.scss +13 -0
  84. package/packages/gantt/src/components/icon/icon.component.ts +28 -0
  85. package/packages/gantt/src/components/icon/icons.ts +86 -0
  86. package/packages/gantt/src/components/links/links.component.html +19 -0
  87. package/packages/gantt/src/components/links/links.component.scss +27 -0
  88. package/packages/gantt/src/components/links/links.component.ts +263 -0
  89. package/packages/gantt/src/components/main/gantt-main.component.html +35 -0
  90. package/packages/gantt/src/components/main/gantt-main.component.ts +35 -0
  91. package/packages/gantt/src/components/range/range.component.html +8 -0
  92. package/packages/gantt/src/components/range/range.component.scss +35 -0
  93. package/packages/gantt/src/components/range/range.component.ts +27 -0
  94. package/packages/gantt/src/components/range/test/range.component.spec.ts +80 -0
  95. package/packages/gantt/src/components/table/gantt-table.component.html +105 -0
  96. package/packages/gantt/src/components/table/gantt-table.component.scss +144 -0
  97. package/packages/gantt/src/components/table/gantt-table.component.ts +166 -0
  98. package/packages/gantt/src/components/table/test/table.spec.ts +129 -0
  99. package/packages/gantt/src/gantt-abstract.ts +14 -0
  100. package/packages/gantt/src/gantt-dom.service.ts +134 -0
  101. package/packages/gantt/src/gantt-drag-container.ts +73 -0
  102. package/packages/gantt/src/gantt-item-upper.ts +50 -0
  103. package/packages/gantt/src/gantt-print.service.ts +104 -0
  104. package/packages/gantt/src/gantt-upper.ts +289 -0
  105. package/packages/gantt/src/gantt.component.html +18 -0
  106. package/packages/gantt/src/gantt.component.scss +77 -0
  107. package/packages/gantt/src/gantt.component.ts +134 -0
  108. package/packages/gantt/src/gantt.module.ts +47 -0
  109. package/packages/gantt/src/gantt.pipe.ts +31 -0
  110. package/packages/gantt/src/gantt.styles.ts +28 -0
  111. package/{public-api.d.ts → packages/gantt/src/public-api.ts} +6 -0
  112. package/packages/gantt/src/root.component.html +12 -0
  113. package/packages/gantt/src/root.component.ts +121 -0
  114. package/packages/gantt/src/styles/index.scss +9 -0
  115. package/packages/gantt/src/styles/variables.scss +46 -0
  116. package/packages/gantt/src/table/gantt-column.component.ts +25 -0
  117. package/packages/gantt/src/table/gantt-table.component.ts +14 -0
  118. package/packages/gantt/src/table/test/table.spec.ts +56 -0
  119. package/packages/gantt/src/test/gantt.component.spec.ts +404 -0
  120. package/packages/gantt/src/test/mocks/data.ts +303 -0
  121. package/packages/gantt/src/test.ts +21 -0
  122. package/packages/gantt/src/utils/date.ts +276 -0
  123. package/packages/gantt/src/utils/helpers.ts +66 -0
  124. package/packages/gantt/src/utils/test/date.spec.ts +105 -0
  125. package/packages/gantt/src/utils/test/helpers.spec.ts +73 -0
  126. package/packages/gantt/src/utils/testing.ts +64 -0
  127. package/packages/gantt/src/views/day.ts +74 -0
  128. package/packages/gantt/src/views/factory.ts +25 -0
  129. package/packages/gantt/src/views/month.ts +66 -0
  130. package/packages/gantt/src/views/quarter.ts +68 -0
  131. package/packages/gantt/src/views/test/day.spec.ts +45 -0
  132. package/packages/gantt/src/views/test/factory.spec.ts +41 -0
  133. package/packages/gantt/src/views/test/mock.ts +14 -0
  134. package/packages/gantt/src/views/test/month.spec.ts +45 -0
  135. package/packages/gantt/src/views/test/quarter.spec.ts +45 -0
  136. package/packages/gantt/src/views/test/view.spec.ts +144 -0
  137. package/packages/gantt/src/views/test/week.spec.ts +45 -0
  138. package/packages/gantt/src/views/test/year.spec.ts +45 -0
  139. package/packages/gantt/src/views/view.ts +186 -0
  140. package/packages/gantt/src/views/week.ts +66 -0
  141. package/packages/gantt/src/views/year.ts +62 -0
  142. package/packages/gantt/tsconfig.lib.json +20 -0
  143. package/packages/gantt/tsconfig.lib.prod.json +9 -0
  144. package/packages/gantt/tsconfig.schematics.json +25 -0
  145. package/packages/gantt/tsconfig.spec.json +17 -0
  146. package/packages/gantt/tslint.json +18 -0
  147. package/scss-bundle.config.json +7 -0
  148. package/tsconfig.json +26 -0
  149. package/tslint.json +51 -0
  150. package/bundles/worktile-gantt.umd.js +0 -3129
  151. package/bundles/worktile-gantt.umd.js.map +0 -1
  152. package/bundles/worktile-gantt.umd.min.js +0 -16
  153. package/bundles/worktile-gantt.umd.min.js.map +0 -1
  154. package/class/date-point.d.ts +0 -15
  155. package/class/group.d.ts +0 -22
  156. package/class/item.d.ts +0 -70
  157. package/class/view-type.d.ts +0 -7
  158. package/components/bar/bar-drag.d.ts +0 -34
  159. package/components/bar/bar.component.d.ts +0 -23
  160. package/components/calendar/calendar.component.d.ts +0 -25
  161. package/components/drag-backdrop/drag-backdrop.component.d.ts +0 -6
  162. package/components/icon/icon.component.d.ts +0 -10
  163. package/components/icon/icons.d.ts +0 -8
  164. package/components/links/links.component.d.ts +0 -44
  165. package/components/main/gantt-main.component.d.ts +0 -18
  166. package/components/range/range.component.d.ts +0 -10
  167. package/components/table/gantt-table.component.d.ts +0 -31
  168. package/esm2015/class/date-point.js +0 -10
  169. package/esm2015/class/event.js +0 -13
  170. package/esm2015/class/group.js +0 -17
  171. package/esm2015/class/index.js +0 -6
  172. package/esm2015/class/item.js +0 -78
  173. package/esm2015/class/view-type.js +0 -9
  174. package/esm2015/components/bar/bar-drag.js +0 -266
  175. package/esm2015/components/bar/bar.component.js +0 -91
  176. package/esm2015/components/calendar/calendar.component.js +0 -82
  177. package/esm2015/components/drag-backdrop/drag-backdrop.component.js +0 -18
  178. package/esm2015/components/icon/icon.component.js +0 -36
  179. package/esm2015/components/icon/icons.js +0 -87
  180. package/esm2015/components/links/links.component.js +0 -207
  181. package/esm2015/components/main/gantt-main.component.js +0 -35
  182. package/esm2015/components/range/range.component.js +0 -32
  183. package/esm2015/components/table/gantt-table.component.js +0 -128
  184. package/esm2015/gantt-dom.service.js +0 -101
  185. package/esm2015/gantt-drag-container.js +0 -57
  186. package/esm2015/gantt-item-upper.js +0 -55
  187. package/esm2015/gantt-print.service.js +0 -92
  188. package/esm2015/gantt-upper.js +0 -231
  189. package/esm2015/gantt.component.js +0 -105
  190. package/esm2015/gantt.module.js +0 -43
  191. package/esm2015/gantt.pipe.js +0 -33
  192. package/esm2015/gantt.styles.js +0 -15
  193. package/esm2015/public-api.js +0 -16
  194. package/esm2015/root.component.js +0 -111
  195. package/esm2015/table/gantt-column.component.js +0 -28
  196. package/esm2015/table/gantt-table.component.js +0 -18
  197. package/esm2015/utils/date.js +0 -160
  198. package/esm2015/utils/helpers.js +0 -45
  199. package/esm2015/views/day.js +0 -54
  200. package/esm2015/views/factory.js +0 -23
  201. package/esm2015/views/month.js +0 -48
  202. package/esm2015/views/quarter.js +0 -51
  203. package/esm2015/views/view.js +0 -121
  204. package/esm2015/views/week.js +0 -49
  205. package/esm2015/views/year.js +0 -50
  206. package/esm2015/worktile-gantt.js +0 -16
  207. package/fesm2015/worktile-gantt.js +0 -2491
  208. package/fesm2015/worktile-gantt.js.map +0 -1
  209. package/gantt-dom.service.d.ts +0 -29
  210. package/gantt-drag-container.d.ts +0 -20
  211. package/gantt-item-upper.d.ts +0 -17
  212. package/gantt-print.service.d.ts +0 -10
  213. package/gantt-upper.d.ts +0 -62
  214. package/gantt.component.d.ts +0 -28
  215. package/gantt.module.d.ts +0 -2
  216. package/gantt.pipe.d.ts +0 -11
  217. package/gantt.styles.d.ts +0 -15
  218. package/root.component.d.ts +0 -25
  219. package/style.scss +0 -645
  220. package/table/gantt-column.component.d.ts +0 -12
  221. package/table/gantt-table.component.d.ts +0 -7
  222. package/utils/date.d.ts +0 -59
  223. package/utils/helpers.d.ts +0 -11
  224. package/views/day.d.ts +0 -14
  225. package/views/factory.d.ts +0 -8
  226. package/views/month.d.ts +0 -12
  227. package/views/quarter.d.ts +0 -12
  228. package/views/view.d.ts +0 -56
  229. package/views/week.d.ts +0 -12
  230. package/views/year.d.ts +0 -12
  231. package/worktile-gantt.d.ts +0 -15
  232. package/worktile-gantt.metadata.json +0 -1
@@ -0,0 +1,105 @@
1
+ import { GanttDate, GanttDateUtil } from '../date';
2
+
3
+ describe('tiny-date', () => {
4
+ const date = new GanttDate('2020-2-2 20:20:20');
5
+
6
+ it('support getTime', () => expect(date.getTime()).toBe(date.value.getTime()));
7
+
8
+ it('support getDate', () => expect(date.getDate()).toBe(date.value.getDate()));
9
+
10
+ it('support getMilliseconds', () => expect(date.getMilliseconds()).toBe(date.value.getMilliseconds()));
11
+
12
+ it('support getDaysInMonth', () => {
13
+ expect(date.getDaysInMonth()).toBe(29);
14
+ });
15
+
16
+ it('support getDaysInQuarter', () => {
17
+ expect(date.getDaysInQuarter()).toBe(91);
18
+ });
19
+
20
+ it('support setDate', () => {
21
+ expect(date.setDate(10).getUnixTime()).toBe(new GanttDate('2020-02-10 20:20:20').getUnixTime());
22
+ });
23
+
24
+ it('support startOf', () => {
25
+ expect(date.startOfDay().getUnixTime()).toBe(new GanttDate('2020-02-02 00:00:00').getUnixTime());
26
+ expect(date.startOfMonth().getUnixTime()).toBe(new GanttDate('2020-02-01 00:00:00').getUnixTime());
27
+ });
28
+
29
+ it('support endOf', () => {
30
+ expect(date.endOfDay().getUnixTime()).toBe(new GanttDate('2020-02-02 23:59:59').getUnixTime());
31
+ expect(date.endOfMonth().getUnixTime()).toBe(new GanttDate('2020-02-29 23:59:59').getUnixTime());
32
+ });
33
+
34
+ it('support is', () => {
35
+ expect(date.isToday()).toBe(false);
36
+ expect(date.isWeekend()).toBe(true);
37
+ });
38
+
39
+ it('support add', () => {
40
+ let newGanttDate: GanttDate;
41
+
42
+ newGanttDate = date.addYears(1);
43
+ expect(newGanttDate.getYear()).toBe(date.getYear() + 1);
44
+
45
+ newGanttDate = date.addQuarters(1);
46
+ expect(newGanttDate.getUnixTime()).toBe(new GanttDate('2020-05-02 20:20:20').getUnixTime());
47
+
48
+ newGanttDate = date.addMonths(1);
49
+ expect(newGanttDate.getMonth()).toBe(date.getMonth() + 1);
50
+
51
+ newGanttDate = date.addWeeks(1);
52
+ expect(newGanttDate.getWeek()).toBe(date.getWeek() + 1);
53
+
54
+ newGanttDate = date.addDays(1);
55
+ expect(newGanttDate.getDay()).toBe(date.getDay() + 1);
56
+
57
+ newGanttDate = date.addHours(1);
58
+ expect(newGanttDate.getHours()).toBe(date.getHours() + 1);
59
+
60
+ newGanttDate = date.addMinutes(1);
61
+ expect(newGanttDate.getMinutes()).toBe(date.getMinutes() + 1);
62
+
63
+ newGanttDate = date.addSeconds(1);
64
+ expect(newGanttDate.getSeconds()).toBe(date.getSeconds() + 1);
65
+ });
66
+
67
+ it('support add by type', () => {
68
+ let newGanttDate: GanttDate;
69
+
70
+ newGanttDate = date.add(1, 'year');
71
+ expect(newGanttDate.getYear()).toBe(date.getYear() + 1);
72
+
73
+ newGanttDate = date.add(1, 'quarter');
74
+ expect(newGanttDate.getUnixTime()).toBe(new GanttDate('2020-05-02 20:20:20').getUnixTime());
75
+
76
+ newGanttDate = date.add(1, 'month');
77
+ expect(newGanttDate.getMonth()).toBe(date.getMonth() + 1);
78
+
79
+ newGanttDate = date.add(1, 'week');
80
+ expect(newGanttDate.getWeek()).toBe(date.getWeek() + 1);
81
+
82
+ newGanttDate = date.add(1, 'day');
83
+ expect(newGanttDate.getDay()).toBe(date.getDay() + 1);
84
+
85
+ newGanttDate = date.add(1, 'hour');
86
+ expect(newGanttDate.getHours()).toBe(date.getHours() + 1);
87
+
88
+ newGanttDate = date.add(1, 'minute');
89
+ expect(newGanttDate.getMinutes()).toBe(date.getMinutes() + 1);
90
+
91
+ newGanttDate = date.add(1, 'second');
92
+ expect(newGanttDate.getSeconds()).toBe(date.getSeconds() + 1);
93
+
94
+ newGanttDate = date.add(1);
95
+ expect(newGanttDate.getSeconds()).toBe(date.getSeconds() + 1);
96
+ });
97
+
98
+ it('support clone', () => {
99
+ expect(date.getTime()).toBe(date.clone().getTime());
100
+ });
101
+
102
+ it('support format', () => {
103
+ expect(date.format('yyyy年QQQ')).toBe('2020年Q1');
104
+ });
105
+ });
@@ -0,0 +1,73 @@
1
+ import { GanttItemInternal } from '../../class';
2
+ import { isNumber, isString, isUndefined, hexToRgb, uniqBy, flatten, recursiveItems } from '../helpers';
3
+
4
+ describe('helpers', () => {
5
+ it('isNumber', () => {
6
+ const result = isNumber('111');
7
+ const result1 = isNumber(111);
8
+
9
+ expect(result).toBe(false);
10
+ expect(result1).toBe(true);
11
+ });
12
+
13
+ it('isString', () => {
14
+ const result = isString('111');
15
+ const result1 = isString(111);
16
+
17
+ expect(result).toBe(true);
18
+ expect(result1).toBe(false);
19
+ });
20
+
21
+ it('isUndefined', () => {
22
+ const result = isUndefined('111');
23
+ const result1 = isUndefined(undefined);
24
+
25
+ expect(result).toBe(false);
26
+ expect(result1).toBe(true);
27
+ });
28
+
29
+ it('hexToRgb', () => {
30
+ const result = hexToRgb('#cccccc');
31
+ const result1 = hexToRgb('rgba(255,255,255)');
32
+
33
+ expect(result).toBe('rgba(204,204,204,1)');
34
+ expect(result1).toBe('rgba(255,255,255)');
35
+ });
36
+
37
+ it('uniqBy', () => {
38
+ const result = uniqBy([{ id: '3333' }, { id: '2222' }, { id: '3333' }], 'id');
39
+
40
+ expect(result.length).toBe(2);
41
+ });
42
+
43
+ it('flatten', () => {
44
+ const result = flatten([[{ id: '3333' }], [{ id: '2222' }], { id: '3333' }]);
45
+ result.forEach((value) => {
46
+ expect(value.length).toBe(undefined);
47
+ });
48
+ });
49
+
50
+ it('recursiveItems', () => {
51
+ const result = recursiveItems([
52
+ {
53
+ id: '3333',
54
+ expanded: true,
55
+ children: [
56
+ {
57
+ id: '3333-1'
58
+ }
59
+ ]
60
+ } as GanttItemInternal,
61
+ {
62
+ id: '2222',
63
+ expanded: false,
64
+ children: [
65
+ {
66
+ id: '2222-1'
67
+ }
68
+ ]
69
+ } as GanttItemInternal
70
+ ]);
71
+ expect(result.length).toBe(3);
72
+ });
73
+ });
@@ -0,0 +1,64 @@
1
+ import { ModifierKeys } from '@angular/cdk/testing';
2
+
3
+ function createMouseEvent(type: string, clientX = 0, clientY = 0, button = 0, modifiers: ModifierKeys = {}, relatedTarget?: Element) {
4
+ const event = document.createEvent('MouseEvent');
5
+ const originalPreventDefault = event.preventDefault.bind(event);
6
+
7
+ // Note: We cannot determine the position of the mouse event based on the screen
8
+ // because the dimensions and position of the browser window are not available
9
+ // To provide reasonable `screenX` and `screenY` coordinates, we simply use the
10
+ // client coordinates as if the browser is opened in fullscreen.
11
+ const screenX = clientX;
12
+ const screenY = clientY;
13
+
14
+ event.initMouseEvent(
15
+ type,
16
+ /* canBubble */ true,
17
+ /* cancelable */ true,
18
+ /* view */ window,
19
+ /* detail */ 0,
20
+ /* screenX */ screenX,
21
+ /* screenY */ screenY,
22
+ /* clientX */ clientX,
23
+ /* clientY */ clientY,
24
+ /* ctrlKey */ !!modifiers.control,
25
+ /* altKey */ !!modifiers.alt,
26
+ /* shiftKey */ !!modifiers.shift,
27
+ /* metaKey */ !!modifiers.meta,
28
+ /* button */ button,
29
+ /* relatedTarget */ relatedTarget
30
+ );
31
+
32
+ // `initMouseEvent` doesn't allow us to pass the `buttons` and
33
+ // defaults it to 0 which looks like a fake event.
34
+ defineReadonlyEventProperty(event, 'buttons', 1);
35
+
36
+ // IE won't set `defaultPrevented` on synthetic events so we need to do it manually.
37
+ event.preventDefault = function () {
38
+ defineReadonlyEventProperty(event, 'defaultPrevented', true);
39
+ return originalPreventDefault();
40
+ };
41
+
42
+ return event;
43
+ }
44
+
45
+ function defineReadonlyEventProperty(event: Event, propertyName: string, value: any) {
46
+ Object.defineProperty(event, propertyName, { get: () => value, configurable: true });
47
+ }
48
+
49
+ export function dispatchEvent<T extends Event>(node: Node | Window, event: T): T {
50
+ node.dispatchEvent(event);
51
+ return event;
52
+ }
53
+
54
+ export function dispatchMouseEvent(
55
+ node: Node,
56
+ type: string,
57
+ clientX = 0,
58
+ clientY = 0,
59
+ button?: number,
60
+ modifiers?: ModifierKeys,
61
+ relatedTarget?: Element
62
+ ): MouseEvent {
63
+ return dispatchEvent(node, createMouseEvent(type, clientX, clientY, button, modifiers, relatedTarget));
64
+ }
@@ -0,0 +1,74 @@
1
+ import { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';
2
+ import { GanttDate, eachWeekOfInterval, eachDayOfInterval } from '../utils/date';
3
+ import { GanttDatePoint } from '../class/date-point';
4
+
5
+ const viewOptions: GanttViewOptions = {
6
+ cellWidth: 35,
7
+ start: new GanttDate().startOfYear().startOfWeek({ weekStartsOn: 1 }),
8
+ end: new GanttDate().endOfYear().endOfWeek({ weekStartsOn: 1 }),
9
+ addAmount: 1,
10
+ addUnit: 'month'
11
+ };
12
+
13
+ export class GanttViewDay extends GanttView {
14
+ showWeekBackdrop = true;
15
+
16
+ showTimeline = false;
17
+
18
+ constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {
19
+ super(start, end, Object.assign({}, viewOptions, options));
20
+ }
21
+
22
+ startOf(date: GanttDate) {
23
+ return date.startOfWeek({ weekStartsOn: 1 });
24
+ }
25
+
26
+ endOf(date: GanttDate) {
27
+ return date.endOfWeek({ weekStartsOn: 1 });
28
+ }
29
+
30
+ getPrimaryWidth() {
31
+ return this.getCellWidth() * 7;
32
+ }
33
+
34
+ getDayOccupancyWidth(): number {
35
+ return this.cellWidth;
36
+ }
37
+
38
+ getPrimaryDatePoints(): GanttDatePoint[] {
39
+ const weeks = eachWeekOfInterval({ start: this.start.value, end: this.end.addSeconds(1).value }, { weekStartsOn: 1 });
40
+ const points: GanttDatePoint[] = [];
41
+ for (let i = 0; i < weeks.length; i++) {
42
+ const weekStart = new GanttDate(weeks[i]);
43
+ const increaseWeek = weekStart.getDaysInMonth() - weekStart.getDate() >= 3 ? 0 : 1;
44
+ const point = new GanttDatePoint(
45
+ weekStart,
46
+ weekStart.addWeeks(increaseWeek).format('yyyy年MM月'),
47
+ (this.getCellWidth() * 7) / 2 + i * (this.getCellWidth() * 7),
48
+ primaryDatePointTop
49
+ );
50
+ points.push(point);
51
+ }
52
+ return points;
53
+ }
54
+
55
+ getSecondaryDatePoints(): GanttDatePoint[] {
56
+ const days = eachDayOfInterval({ start: this.start.value, end: this.end.value });
57
+ const points: GanttDatePoint[] = [];
58
+ for (let i = 0; i < days.length; i++) {
59
+ const start = new GanttDate(days[i]);
60
+ const point = new GanttDatePoint(
61
+ start,
62
+ start.getDate().toString(),
63
+ i * this.getCellWidth() + this.getCellWidth() / 2,
64
+ secondaryDatePointTop,
65
+ {
66
+ isWeekend: start.isWeekend(),
67
+ isToday: start.isToday()
68
+ }
69
+ );
70
+ points.push(point);
71
+ }
72
+ return points;
73
+ }
74
+ }
@@ -0,0 +1,25 @@
1
+ import { GanttViewOptions, GanttViewDate } from './view';
2
+ import { GanttViewMonth } from './month';
3
+ import { GanttDate } from '../utils/date';
4
+ import { GanttViewType } from '../class/view-type';
5
+ import { GanttViewQuarter } from './quarter';
6
+ import { GanttViewDay } from './day';
7
+ import { GanttViewWeek } from './week';
8
+ import { GanttViewYear } from './year';
9
+
10
+ export function createViewFactory(type: GanttViewType, start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {
11
+ switch (type) {
12
+ case GanttViewType.month:
13
+ return new GanttViewMonth(start, end, options);
14
+ case GanttViewType.week:
15
+ return new GanttViewWeek(start, end, options);
16
+ case GanttViewType.quarter:
17
+ return new GanttViewQuarter(start, end, options);
18
+ case GanttViewType.day:
19
+ return new GanttViewDay(start, end, options);
20
+ case GanttViewType.year:
21
+ return new GanttViewYear(start, end, options);
22
+ default:
23
+ throw new Error('gantt view type invalid');
24
+ }
25
+ }
@@ -0,0 +1,66 @@
1
+ import { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';
2
+ import { GanttDate, differenceInCalendarQuarters, eachMonthOfInterval } from '../utils/date';
3
+ import { GanttDatePoint } from '../class/date-point';
4
+
5
+ const viewOptions: GanttViewOptions = {
6
+ start: new GanttDate().startOfQuarter().addQuarters(-1),
7
+ end: new GanttDate().endOfQuarter().addQuarters(2),
8
+ cellWidth: 280,
9
+ addAmount: 1,
10
+ addUnit: 'quarter'
11
+ };
12
+
13
+ export class GanttViewMonth extends GanttView {
14
+ constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {
15
+ super(start, end, Object.assign({}, viewOptions, options));
16
+ }
17
+
18
+ startOf(date: GanttDate) {
19
+ return date.startOfQuarter();
20
+ }
21
+
22
+ endOf(date: GanttDate) {
23
+ return date.endOfQuarter();
24
+ }
25
+
26
+ getPrimaryWidth() {
27
+ return this.getCellWidth() * 3;
28
+ }
29
+
30
+ getDayOccupancyWidth(date: GanttDate): number {
31
+ return this.cellWidth / date.getDaysInMonth();
32
+ }
33
+
34
+ getPrimaryDatePoints(): GanttDatePoint[] {
35
+ const quarters = differenceInCalendarQuarters(this.end.addSeconds(1).value, this.start.value);
36
+ const points: GanttDatePoint[] = [];
37
+ for (let i = 0; i < quarters; i++) {
38
+ const start = this.start.addQuarters(i);
39
+ const point = new GanttDatePoint(
40
+ start,
41
+ start.format('yyyy年QQQ'),
42
+ (this.getCellWidth() * 3) / 2 + i * (this.getCellWidth() * 3),
43
+ primaryDatePointTop
44
+ );
45
+ points.push(point);
46
+ }
47
+
48
+ return points;
49
+ }
50
+
51
+ getSecondaryDatePoints(): GanttDatePoint[] {
52
+ const months = eachMonthOfInterval({ start: this.start.value, end: this.end.value });
53
+ const points: GanttDatePoint[] = [];
54
+ for (let i = 0; i < months.length; i++) {
55
+ const start = new GanttDate(months[i]);
56
+ const point = new GanttDatePoint(
57
+ start,
58
+ `${start.getMonth() + 1}月`,
59
+ i * this.getCellWidth() + this.getCellWidth() / 2,
60
+ secondaryDatePointTop
61
+ );
62
+ points.push(point);
63
+ }
64
+ return points;
65
+ }
66
+ }
@@ -0,0 +1,68 @@
1
+ import { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';
2
+ import { GanttDate } from '../utils/date';
3
+ import { GanttDatePoint } from '../class/date-point';
4
+ import { eachYearOfInterval, differenceInCalendarQuarters } from 'date-fns';
5
+
6
+ const viewOptions: GanttViewOptions = {
7
+ start: new GanttDate().addYears(-1).startOfYear(),
8
+ end: new GanttDate().addYears(1).endOfYear(),
9
+ min: new GanttDate().addYears(-2).startOfYear(),
10
+ max: new GanttDate().addYears(2).endOfYear(),
11
+ cellWidth: 500,
12
+ addAmount: 1,
13
+ addUnit: 'year'
14
+ };
15
+
16
+ export class GanttViewQuarter extends GanttView {
17
+ constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {
18
+ super(start, end, Object.assign({}, viewOptions, options));
19
+ }
20
+
21
+ startOf(date: GanttDate) {
22
+ return date.startOfYear();
23
+ }
24
+
25
+ endOf(date: GanttDate) {
26
+ return date.endOfYear();
27
+ }
28
+
29
+ getPrimaryWidth() {
30
+ return this.getCellWidth() * 4;
31
+ }
32
+
33
+ getDayOccupancyWidth(date: GanttDate): number {
34
+ return this.cellWidth / date.getDaysInQuarter();
35
+ }
36
+
37
+ getPrimaryDatePoints(): GanttDatePoint[] {
38
+ const years = eachYearOfInterval({ start: this.start.value, end: this.end.value });
39
+ const points: GanttDatePoint[] = [];
40
+ for (let i = 0; i < years.length; i++) {
41
+ const start = new GanttDate(years[i]);
42
+ const point = new GanttDatePoint(
43
+ start,
44
+ `${start.format('yyyy')}年`,
45
+ (this.getCellWidth() * 4) / 2 + i * (this.getCellWidth() * 4),
46
+ primaryDatePointTop
47
+ );
48
+ points.push(point);
49
+ }
50
+ return points;
51
+ }
52
+
53
+ getSecondaryDatePoints(): GanttDatePoint[] {
54
+ const quarters = differenceInCalendarQuarters(this.end.value, this.start.value);
55
+ const points: GanttDatePoint[] = [];
56
+ for (let i = 0; i <= quarters; i++) {
57
+ const start = this.start.addQuarters(i);
58
+ const point = new GanttDatePoint(
59
+ start,
60
+ start.format('QQQ'),
61
+ i * this.getCellWidth() + this.getCellWidth() / 2,
62
+ secondaryDatePointTop
63
+ );
64
+ points.push(point);
65
+ }
66
+ return points;
67
+ }
68
+ }
@@ -0,0 +1,45 @@
1
+ import { GanttViewDay } from '../day';
2
+ import { GanttDate } from '../../utils/date';
3
+ import { date, today } from './mock';
4
+
5
+ describe('GanttViewDay', () => {
6
+ let ganttViewDay: GanttViewDay;
7
+
8
+ beforeEach(() => {
9
+ ganttViewDay = new GanttViewDay(date.start, date.end, {
10
+ cellWidth: 20,
11
+ start: today.startOfYear().startOfWeek({ weekStartsOn: 1 }),
12
+ end: today.endOfYear().endOfWeek({ weekStartsOn: 1 })
13
+ });
14
+ });
15
+
16
+ it(`should has correct view start`, () => {
17
+ const startOfDay = ganttViewDay.startOf(date.start.date).getUnixTime();
18
+ expect(startOfDay).toEqual(new GanttDate('2019-12-30 00:00:00').getUnixTime());
19
+ });
20
+
21
+ it(`should has correct view end`, () => {
22
+ const endOfDay = ganttViewDay.endOf(date.end.date).getUnixTime();
23
+ expect(endOfDay).toEqual(new GanttDate('2021-01-03 23:59:59').getUnixTime());
24
+ });
25
+
26
+ it(`should has correct cell width`, () => {
27
+ const dayCellWidth = ganttViewDay.getDayOccupancyWidth();
28
+ expect(dayCellWidth).toEqual(20);
29
+ });
30
+
31
+ it(`should has correct primary width`, () => {
32
+ const dayPrimaryWidth = ganttViewDay.getPrimaryWidth();
33
+ expect(dayPrimaryWidth).toEqual(140);
34
+ });
35
+
36
+ it(`should has correct primary date points`, () => {
37
+ const dayPoints = ganttViewDay.getPrimaryDatePoints();
38
+ expect(dayPoints.length).toBe(54);
39
+ });
40
+
41
+ it(`should has correct secondary date points`, () => {
42
+ const dayPoints = ganttViewDay.getSecondaryDatePoints();
43
+ expect(dayPoints.length).toBe(371);
44
+ });
45
+ });
@@ -0,0 +1,41 @@
1
+ import { GanttViewMonth } from '../month';
2
+ import { GanttViewDay } from '../day';
3
+ import { GanttViewQuarter } from '../quarter';
4
+ import { createViewFactory } from '../factory';
5
+ import { GanttViewType } from '../../class';
6
+ import { date } from './mock';
7
+ import { GanttViewYear } from '../year';
8
+ import { GanttViewWeek } from '../week';
9
+
10
+ describe('CreateViewFactory', () => {
11
+ it(`should be day view`, () => {
12
+ const dayView = createViewFactory(GanttViewType.day, date.start, date.end);
13
+ expect(dayView).toEqual(jasmine.any(GanttViewDay));
14
+ });
15
+
16
+ it(`should be week view`, () => {
17
+ const weekView = createViewFactory(GanttViewType.week, date.start, date.end);
18
+ expect(weekView).toEqual(jasmine.any(GanttViewWeek));
19
+ });
20
+
21
+ it(`should be month view`, () => {
22
+ const monthView = createViewFactory(GanttViewType.month, date.start, date.end);
23
+ expect(monthView).toEqual(jasmine.any(GanttViewMonth));
24
+ });
25
+
26
+ it(`should be quarter view`, () => {
27
+ const quarterView = createViewFactory(GanttViewType.quarter, date.start, date.end);
28
+ expect(quarterView).toEqual(jasmine.any(GanttViewQuarter));
29
+ });
30
+
31
+ it('should be year view', () => {
32
+ const yearView = createViewFactory(GanttViewType.year, date.start, date.end);
33
+ expect(yearView).toEqual(jasmine.any(GanttViewYear));
34
+ });
35
+
36
+ // it(`should throw error`, () => {
37
+ // expect(() => {
38
+ // createViewFactory(GanttViewType.year, date.start, date.end);
39
+ // }).toThrow(new Error('gantt view type invalid'));
40
+ // });
41
+ });
@@ -0,0 +1,14 @@
1
+ import { GanttDate } from '../../utils/date';
2
+
3
+ export const today = new GanttDate('2020-02-01 00:00:00');
4
+
5
+ export const date = {
6
+ start: {
7
+ date: new GanttDate('2020-01-01 00:00:00'),
8
+ isCustom: true
9
+ },
10
+ end: {
11
+ date: new GanttDate('2020-12-31 00:00:00'),
12
+ isCustom: true
13
+ }
14
+ };
@@ -0,0 +1,45 @@
1
+ import { GanttViewMonth } from '../month';
2
+ import { GanttDate } from '../../utils/date';
3
+ import { date, today } from './mock';
4
+
5
+ describe('GanttViewMonth', () => {
6
+ let ganttViewMonth: GanttViewMonth;
7
+
8
+ beforeEach(() => {
9
+ ganttViewMonth = new GanttViewMonth(date.start, date.end, {
10
+ cellWidth: 310,
11
+ start: today.startOfQuarter().addQuarters(-1),
12
+ end: today.endOfQuarter().addQuarters(2)
13
+ });
14
+ });
15
+
16
+ it(`should has correct view start`, () => {
17
+ const startOfMonth = ganttViewMonth.startOf(date.start.date).getUnixTime();
18
+ expect(startOfMonth).toEqual(new GanttDate('2020-01-01 00:00:00').getUnixTime());
19
+ });
20
+
21
+ it(`should has correct view end`, () => {
22
+ const endOfMonth = ganttViewMonth.endOf(date.end.date).getUnixTime();
23
+ expect(endOfMonth).toEqual(new GanttDate('2020-12-31 23:59:59').getUnixTime());
24
+ });
25
+
26
+ it(`should has correct cell width`, () => {
27
+ const monthCellWidth = ganttViewMonth.getDayOccupancyWidth(date.start.date);
28
+ expect(monthCellWidth).toEqual(10);
29
+ });
30
+
31
+ it(`should has correct primary width`, () => {
32
+ const monthPrimaryWidth = ganttViewMonth.getPrimaryWidth();
33
+ expect(monthPrimaryWidth).toEqual(930);
34
+ });
35
+
36
+ it(`should has correct primary date points`, () => {
37
+ const monthPoints = ganttViewMonth.getPrimaryDatePoints();
38
+ expect(monthPoints.length).toBe(4);
39
+ });
40
+
41
+ it(`should has correct secondary date points`, () => {
42
+ const monthPoints = ganttViewMonth.getSecondaryDatePoints();
43
+ expect(monthPoints.length).toBe(12);
44
+ });
45
+ });
@@ -0,0 +1,45 @@
1
+ import { GanttDate } from '../../utils/date';
2
+ import { GanttViewQuarter } from '../quarter';
3
+ import { date, today } from './mock';
4
+
5
+ describe('GanttViewQuarter', () => {
6
+ let ganttViewQuarter: GanttViewQuarter;
7
+
8
+ beforeEach(() => {
9
+ ganttViewQuarter = new GanttViewQuarter(date.start, date.end, {
10
+ cellWidth: 910,
11
+ start: today.addYears(-1).startOfYear(),
12
+ end: today.addYears(1).endOfYear()
13
+ });
14
+ });
15
+
16
+ it(`should has correct view start`, () => {
17
+ const startOfQuarter = ganttViewQuarter.startOf(date.start.date).getUnixTime();
18
+ expect(startOfQuarter).toEqual(new GanttDate('2020-01-01 00:00:00').getUnixTime());
19
+ });
20
+
21
+ it(`should has correct view end`, () => {
22
+ const endOfQuarter = ganttViewQuarter.endOf(date.end.date).getUnixTime();
23
+ expect(endOfQuarter).toEqual(new GanttDate('2020-12-31 23:59:59').getUnixTime());
24
+ });
25
+
26
+ it(`should has correct cell width`, () => {
27
+ const quarterCellWidth = ganttViewQuarter.getDayOccupancyWidth(date.start.date);
28
+ expect(quarterCellWidth).toEqual(10);
29
+ });
30
+
31
+ it(`should has correct primary width`, () => {
32
+ const quarterPrimaryWidth = ganttViewQuarter.getPrimaryWidth();
33
+ expect(quarterPrimaryWidth).toEqual(3640);
34
+ });
35
+
36
+ it(`should has correct primary date points`, () => {
37
+ const quarterPoints = ganttViewQuarter.getPrimaryDatePoints();
38
+ expect(quarterPoints.length).toBe(1);
39
+ });
40
+
41
+ it(`should has correct secondary date points`, () => {
42
+ const quarterPoints = ganttViewQuarter.getSecondaryDatePoints();
43
+ expect(quarterPoints.length).toBe(4);
44
+ });
45
+ });