瀏覽代碼

Merge 9f5cd3b00218da49b869e1ae224d86881f048f9f into 55c5c285558c410bb35ebf421245d320ab9ee9fa

Christhoval Barba 1 年之前
父節點
當前提交
3e40bdd9cc
沒有帳戶連結到提交者的電子郵件
共有 9 個文件被更改,包括 1742 次插入667 次删除
  1. 2
    0
      .gitignore
  2. 1
    1
      Makefile
  3. 15
    0
      README.md
  4. 97
    0
      chart.json
  5. 834
    604
      gitstats
  6. 118
    57
      gitstats.css
  7. 448
    0
      html.py
  8. 5
    5
      sortable.js
  9. 222
    0
      tailwind.json

+ 2
- 0
.gitignore 查看文件

@@ -0,0 +1,2 @@
1
+
2
+.DS_Store

+ 1
- 1
Makefile 查看文件

@@ -1,7 +1,7 @@
1 1
 PREFIX=/usr/local
2 2
 BINDIR=$(PREFIX)/bin
3 3
 RESOURCEDIR=$(PREFIX)/share/gitstats
4
-RESOURCES=gitstats.css sortable.js *.gif
4
+RESOURCES=gitstats.css sortable.js *.gif tailwind.json html.py
5 5
 BINARIES=gitstats
6 6
 VERSION=$(shell git describe 2>/dev/null || git rev-parse --short HEAD 2>/dev/null || date +%Y-%m-%d)
7 7
 SEDVERSION=perl -pi -e 's/VERSION = 0/VERSION = "$(VERSION)"/' --

+ 15
- 0
README.md 查看文件

@@ -0,0 +1,15 @@
1
+# Gitstats - meaningful data for your git repository. 
2
+
3
+## How to run
4
+1. Clone this repo and `cd` into it
5
+2. Create a output directory for your output
6
+3. `./gitstats [path_to_git_repo] [path_to_output_folder]`
7
+4. Open the `index.html` within your `ouptut_folder`
8
+
9
+## Dependencies
10
+
11
+* Gnuplot
12
+  * MacOS: `brew install gnuplot`
13
+  * Ubuntu: `sudo apt-get install gnuplot`
14
+* Git
15
+* Python >= 3.0

+ 97
- 0
chart.json 查看文件

@@ -0,0 +1,97 @@
1
+{
2
+  "series": [
3
+    {
4
+      "data": []
5
+    }
6
+  ],
7
+  "colors": ["#3C50E0"],
8
+  "chart": {
9
+    "fontFamily": "Satoshi, sans-serif",
10
+    "type": "bar",
11
+    "height": 350,
12
+    "toolbar": {
13
+      "show": false
14
+    }
15
+  },
16
+  "plotOptions": {
17
+    "bar": {
18
+      "horizontal": false,
19
+      "columnWidth": "55%",
20
+      "endingShape": "rounded",
21
+      "borderRadius": 2
22
+    },
23
+    "heatmap": {
24
+      "enableShades": false
25
+    }
26
+  },
27
+  "dataLabels": {
28
+    "enabled": false
29
+  },
30
+  "stroke": {
31
+    "show": true,
32
+    "width": 4,
33
+    "colors": ["transparent"]
34
+  },
35
+  "xaxis": {
36
+    "categories": [],
37
+    "floating": false,
38
+    "labels": {
39
+      "show": true,
40
+      "style": {
41
+        "fontFamily": "Inter, sans-serif",
42
+        "cssClass": "text-xs font-normal !fill-body dark:!fill-bodydark"
43
+      }
44
+    },
45
+    "axisBorder": {
46
+      "show": false
47
+    },
48
+    "axisTicks": {
49
+      "show": false
50
+    }
51
+  },
52
+  "legend": {
53
+    "show": true,
54
+    "position": "top",
55
+    "horizontalAlign": "left",
56
+    "fontFamily": "Satoshi",
57
+    "markers": {
58
+      "radius": 99
59
+    }
60
+  },
61
+  "yaxis": {
62
+    "title": false,
63
+    "labels": {
64
+      "show": true,
65
+      "style": {
66
+        "fontFamily": "Inter, sans-serif",
67
+        "cssClass": "text-xs font-normal !fill-body dark:!fill-bodydark"
68
+      }
69
+    }
70
+  },
71
+  "grid": {
72
+    "show": false,
73
+    "strokeDashArray": 4,
74
+    "padding": {
75
+      "left": 2,
76
+      "right": 2,
77
+      "top": -14
78
+    },
79
+    "yaxis": {
80
+      "lines": {
81
+        "show": false
82
+      }
83
+    }
84
+  },
85
+  "fill": {
86
+    "opacity": 1
87
+  },
88
+
89
+  "tooltip": {
90
+    "shared": true,
91
+    "intersect": false,
92
+    "x": {
93
+      "show": false
94
+    },
95
+    "y": {}
96
+  }
97
+}

+ 834
- 604
gitstats
文件差異過大導致無法顯示
查看文件


+ 118
- 57
gitstats.css 查看文件

@@ -1,75 +1,71 @@
1 1
 /**
2 2
  * GitStats - default style
3 3
  */
4
-body {
5
-	color: black;
6
-	background-color: #dfd;
7
-}
8 4
 
9 5
 dt {
10
-	font-weight: bold;
11
-	float: left;
12
-	margin-right: 1em;
6
+  font-weight: bold;
7
+  float: left;
8
+  margin-right: 1em;
13 9
 }
14 10
 
15 11
 dt:after {
16
-	content: ': ';
12
+  content: ": ";
17 13
 }
18 14
 
19 15
 dd {
20
-	display: block;
21
-	clear: left;
16
+  display: block;
17
+  clear: left;
22 18
 }
23 19
 
24 20
 table {
25
-	border: 1px solid black;
26
-	border-collapse: collapse;
27
-	font-size: 80%;
28
-	margin-bottom: 1em;
21
+  border: 1px solid black;
22
+  border-collapse: collapse;
23
+  font-size: 80%;
24
+  margin-bottom: 1em;
29 25
 }
30 26
 
31 27
 table.noborders {
32
-	border: none;
28
+  border: none;
33 29
 }
34 30
 
35 31
 table.noborders td {
36
-	border: none;
32
+  border: none;
37 33
 }
38 34
 
39 35
 .vtable {
40
-	float: right;
41
-	clear: both;
36
+  float: right;
37
+  clear: both;
42 38
 }
43 39
 
44 40
 table.tags td {
45
-	vertical-align: top;
41
+  vertical-align: top;
46 42
 }
47 43
 
48 44
 td {
49
-	background-color: white;
45
+  background-color: white;
50 46
 }
51 47
 
52 48
 th {
53
-	background-color: #ddf;
49
+  background-color: #ddf;
54 50
 }
55 51
 
56 52
 th a {
57
-	text-decoration: none;
53
+  text-decoration: none;
58 54
 }
59 55
 
60 56
 tr:hover {
61
-	background-color: #ddf;
57
+  background-color: #ddf;
62 58
 }
63 59
 
64 60
 td {
65
-	border: 1px solid black;
66
-	padding: 0.2em;
67
-	padding-left: 0.3em;
68
-	padding-right: 0.2em;
61
+  border: 1px solid black;
62
+  padding: 0.2em;
63
+  padding-left: 0.3em;
64
+  padding-right: 0.2em;
69 65
 }
70 66
 
71 67
 /* Navigation bar; tabbed style */
72
-.nav {
68
+/* .nav {
73 69
 	border-bottom: 1px solid black;
74 70
 	padding: 0.3em;
75 71
 }
@@ -97,49 +93,114 @@ td {
97 93
 .nav li a:hover {
98 94
 	background-color: #ddd;
99 95
 	border-bottom: 1px solid #ddf;
100
-}
96
+} */
101 97
 
102
-img {
103
-	border: 1px solid black;
104
-	padding: 0.5em;
105
-	background-color: white;
98
+main img {
99
+  border: 1px solid black;
100
+  padding: 0.5em;
101
+  background-color: white;
106 102
 }
107 103
 
108 104
 th img {
109
-	border: 0px;
110
-	padding: 0px;
111
-	background-color: #ddf;
105
+  border: 0px;
106
+  padding: 0px;
107
+  background-color: #ddf;
112 108
 }
113 109
 
114
-h1 a, h2 a {
115
-	color: black;
116
-	text-decoration: none;
110
+h1 a,
111
+h2 a {
112
+  color: black;
113
+  text-decoration: none;
117 114
 }
118 115
 
119
-h1:hover a:after,
120
-h2:hover a:after {
121
-	content: '¶';
122
-	color: #555;
116
+main h1:hover a:after,
117
+main h2:hover a:after {
118
+  content: "¶";
119
+  color: #555;
123 120
 }
124 121
 
125
-h1 {
126
-	font-size: x-large;
122
+main h1 {
123
+  font-size: x-large;
127 124
 }
128 125
 
129
-h2 {
130
-	background-color: #564;
131
-	border: 1px solid black;
132
-	padding-left: 0.5em;
133
-	padding-right: 0.5em;
134
-	color: white;
135
-	font-size: large;
136
-	clear: both;
126
+main h2 {
127
+  background-color: #564;
128
+  border: 1px solid black;
129
+  padding-left: 0.5em;
130
+  padding-right: 0.5em;
131
+  color: white;
132
+  font-size: large;
133
+  clear: both;
137 134
 }
138 135
 
139
-h2 a {
140
-	color: white;
136
+main h2 a {
137
+  color: white;
138
+}
139
+
140
+main .moreauthors {
141
+  font-size: 80%;
141 142
 }
142 143
 
143
-.moreauthors {
144
-	font-size: 80%;
144
+.dark .apexcharts-canvas .apexcharts-legend-text {
145
+  color: #aeb7c0 !important;
146
+}
147
+.apexcharts-canvas .apexcharts-legend-text {
148
+  color: #64748b !important;
149
+}
150
+
151
+.dark .apexcharts-canvas .apexcharts-text {
152
+  fill: #aeb7c0 !important;
153
+}
154
+
155
+.apexcharts-canvas .apexcharts-text {
156
+  fill: #64748b !important;
157
+}
158
+
159
+.dark .apexcharts-canvas .apexcharts-xcrosshairs {
160
+  fill: #2e3a47 !important;
161
+}
162
+.apexcharts-canvas .apexcharts-xcrosshairs {
163
+  fill: #e2e8f0 !important;
164
+}
165
+
166
+
167
+.dark .apexcharts-canvas .apexcharts-gridline {
168
+  stroke: #2e3a47 !important;
169
+}
170
+.apexcharts-canvas .apexcharts-gridline {
171
+  stroke: #e2e8f0 !important;
172
+}
173
+
174
+.dark .apexcharts-canvas .apexcharts-series.apexcharts-pie-series path {
175
+  stroke: transparent !important;
176
+}
177
+
178
+.apexcharts-canvas .apexcharts-legend-series {
179
+  display: inline-flex;
180
+  gap: 0.375rem
181
+}
182
+
183
+/*
184
+.apexcharts-tooltip.apexcharts-theme-light {
185
+  @apply dark:!border-strokedark dark:!bg-boxdark;
186
+}
187
+.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {
188
+  @apply dark:!border-strokedark dark:!bg-meta-4;
189
+}
190
+.apexcharts-xaxistooltip,
191
+.apexcharts-yaxistooltip {
192
+  @apply dark:!border-meta-4 dark:!bg-meta-4 dark:!text-bodydark1;
193
+}
194
+.apexcharts-xaxistooltip-bottom:after {
195
+  @apply !border-b-gray dark:!border-b-meta-4;
196
+}
197
+.apexcharts-xaxistooltip-bottom:before {
198
+  @apply !border-b-gray dark:!border-b-meta-4;
199
+}
200
+.apexcharts-xaxistooltip-bottom {
201
+  @apply !rounded !border-none !bg-gray !text-xs !font-medium !text-black dark:!text-white;
202
+}
203
+.apexcharts-tooltip-series-group {
204
+  @apply !pl-1.5;
145 205
 }
206
+*/

+ 448
- 0
html.py
文件差異過大導致無法顯示
查看文件


+ 5
- 5
sortable.js 查看文件

@@ -50,7 +50,7 @@ function ts_makeSortable(t) {
50 50
 		var cell = firstRow.cells[i];
51 51
 		var txt = ts_getInnerText(cell);
52 52
 		if (cell.className != "unsortable" && cell.className.indexOf("unsortable") == -1) {
53
-			cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this, '+i+');return false;">'+txt+'<span class="sortarrow">&nbsp;&nbsp;<img src="'+ image_path + image_none + '" alt="&darr;"/></span></a>';
53
+			cell.innerHTML = '<a href="#" class="sortheader flex flex-column items-center justify-between" onclick="ts_resortTable(this, '+i+');return false;">'+txt+'<span class="sortarrow"><img src="'+ image_path + image_none + '" alt="&darr;"/></span></a>';
54 54
 		}
55 55
 	}
56 56
 	if (alternate_row_colors) {
@@ -104,7 +104,7 @@ function ts_resortTable(lnk, clid) {
104 104
 	sortfn = ts_sort_caseinsensitive;
105 105
 	if (itm.match(/^\d\d[\/\.-][a-zA-z][a-zA-Z][a-zA-Z][\/\.-]\d\d\d\d$/)) sortfn = ts_sort_date;
106 106
 	if (itm.match(/^\d\d[\/\.-]\d\d[\/\.-]\d\d\d{2}?$/)) sortfn = ts_sort_date;
107
-	if (itm.match(/^-?[£$€Û¢´]\d/)) sortfn = ts_sort_numeric;
107
+	if (itm.match(/^-?[�$�ۢ�]\d/)) sortfn = ts_sort_numeric;
108 108
 	// ignore stuff in () after the numbers.
109 109
 	if (itm.match(/^-?(\d+[,\.]?)+(E[-+][\d]+)?%?( \(.*\))?$/)) sortfn = ts_sort_numeric;
110 110
 	SORT_COLUMN_INDEX = column;
@@ -130,11 +130,11 @@ function ts_resortTable(lnk, clid) {
130 130
 	}
131 131
 	newRows.sort(sortfn);
132 132
 	if (span.getAttribute("sortdir") == 'down') {
133
-			ARROW = '&nbsp;&nbsp;<img src="'+ image_path + image_down + '" alt="&darr;"/>';
133
+			ARROW = '<img src="'+ image_path + image_down + '" alt="&darr;"/>';
134 134
 			newRows.reverse();
135 135
 			span.setAttribute('sortdir','up');
136 136
 	} else {
137
-			ARROW = '&nbsp;&nbsp;<img src="'+ image_path + image_up + '" alt="&uarr;"/>';
137
+			ARROW = '<img src="'+ image_path + image_up + '" alt="&uarr;"/>';
138 138
 			span.setAttribute('sortdir','down');
139 139
 	} 
140 140
     // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
@@ -154,7 +154,7 @@ function ts_resortTable(lnk, clid) {
154 154
 	for (var ci=0;ci<allspans.length;ci++) {
155 155
 		if (allspans[ci].className == 'sortarrow') {
156 156
 			if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
157
-				allspans[ci].innerHTML = '&nbsp;&nbsp;<img src="'+ image_path + image_none + '" alt="&darr;"/>';
157
+				allspans[ci].innerHTML = '<img src="'+ image_path + image_none + '" alt="&darr;"/>';
158 158
 			}
159 159
 		}
160 160
 	}		

+ 222
- 0
tailwind.json 查看文件

@@ -0,0 +1,222 @@
1
+{
2
+    "darkMode": "class",
3
+    "theme": {
4
+      "extend": {
5
+        "colors": {
6
+          "current": "currentColor",
7
+          "transparent": "transparent",
8
+          "white": "#FFFFFF",
9
+          "black": "#1C2434",
10
+          "black-2": "#010101",
11
+          "body": "#64748B",
12
+          "bodydark": "#AEB7C0",
13
+          "bodydark1": "#DEE4EE",
14
+          "bodydark2": "#8A99AF",
15
+          "primary": "#3C50E0",
16
+          "secondary": "#80CAEE",
17
+          "stroke": "#E2E8F0",
18
+          "gray": "#EFF4FB",
19
+          "graydark": "#333A48",
20
+          "gray-2": "#F7F9FC",
21
+          "gray-3": "#FAFAFA",
22
+          "whiten": "#F1F5F9",
23
+          "whiter": "#F5F7FD",
24
+          "boxdark": "#24303F",
25
+          "boxdark-2": "#1A222C",
26
+          "strokedark": "#2E3A47",
27
+          "form-strokedark": "#3d4d60",
28
+          "form-input": "#1d2a39",
29
+          "meta-1": "#DC3545",
30
+          "meta-2": "#EFF2F7",
31
+          "meta-3": "#10B981",
32
+          "meta-4": "#313D4A",
33
+          "meta-5": "#259AE6",
34
+          "meta-6": "#FFBA00",
35
+          "meta-7": "#FF6766",
36
+          "meta-8": "#F0950C",
37
+          "meta-9": "#E5E7EB",
38
+          "success": "#219653",
39
+          "danger": "#D34053",
40
+          "warning": "#FFA70B"
41
+      },
42
+      "fontSize": {
43
+          "title-xxl": ["44px", "55px"],
44
+          "title-xl": ["36px", "45px"],
45
+          "title-xl2": ["33px", "45px"],
46
+          "title-lg": ["28px", "35px"],
47
+          "title-md": ["24px", "30px"],
48
+          "title-md2": ["26px", "30px"],
49
+          "title-sm": ["20px", "26px"],
50
+          "title-xsm": ["18px", "24px"]
51
+      },
52
+      "spacing": {
53
+          "4.5": "1.125rem",
54
+          "5.5": "1.375rem",
55
+          "6.5": "1.625rem",
56
+          "7.5": "1.875rem",
57
+          "8.5": "2.125rem",
58
+          "9.5": "2.375rem",
59
+          "10.5": "2.625rem",
60
+          "11": "2.75rem",
61
+          "11.5": "2.875rem",
62
+          "12.5": "3.125rem",
63
+          "13": "3.25rem",
64
+          "13.5": "3.375rem",
65
+          "14": "3.5rem",
66
+          "14.5": "3.625rem",
67
+          "15": "3.75rem",
68
+          "15.5": "3.875rem",
69
+          "16": "4rem",
70
+          "16.5": "4.125rem",
71
+          "17": "4.25rem",
72
+          "17.5": "4.375rem",
73
+          "18": "4.5rem",
74
+          "18.5": "4.625rem",
75
+          "19": "4.75rem",
76
+          "19.5": "4.875rem",
77
+          "21": "5.25rem",
78
+          "21.5": "5.375rem",
79
+          "22": "5.5rem",
80
+          "22.5": "5.625rem",
81
+          "24.5": "6.125rem",
82
+          "25": "6.25rem",
83
+          "25.5": "6.375rem",
84
+          "26": "6.5rem",
85
+          "27": "6.75rem",
86
+          "27.5": "6.875rem",
87
+          "29": "7.25rem",
88
+          "29.5": "7.375rem",
89
+          "30": "7.5rem",
90
+          "31": "7.75rem",
91
+          "32.5": "8.125rem",
92
+          "34": "8.5rem",
93
+          "34.5": "8.625rem",
94
+          "35": "8.75rem",
95
+          "36.5": "9.125rem",
96
+          "37.5": "9.375rem",
97
+          "39": "9.75rem",
98
+          "39.5": "9.875rem",
99
+          "40": "10rem",
100
+          "42.5": "10.625rem",
101
+          "44": "11rem",
102
+          "45": "11.25rem",
103
+          "46": "11.5rem",
104
+          "47.5": "11.875rem",
105
+          "49": "12.25rem",
106
+          "50": "12.5rem",
107
+          "52": "13rem",
108
+          "52.5": "13.125rem",
109
+          "54": "13.5rem",
110
+          "54.5": "13.625rem",
111
+          "55": "13.75rem",
112
+          "55.5": "13.875rem",
113
+          "59": "14.75rem",
114
+          "60": "15rem",
115
+          "62.5": "15.625rem",
116
+          "65": "16.25rem",
117
+          "67": "16.75rem",
118
+          "67.5": "16.875rem",
119
+          "70": "17.5rem",
120
+          "72.5": "18.125rem",
121
+          "73": "18.25rem",
122
+          "75": "18.75rem",
123
+          "90": "22.5rem",
124
+          "94": "23.5rem",
125
+          "95": "23.75rem",
126
+          "100": "25rem",
127
+          "115": "28.75rem",
128
+          "125": "31.25rem",
129
+          "132.5": "33.125rem",
130
+          "150": "37.5rem",
131
+          "171.5": "42.875rem",
132
+          "180": "45rem",
133
+          "187.5": "46.875rem",
134
+          "203": "50.75rem",
135
+          "230": "57.5rem",
136
+          "242.5": "60.625rem"
137
+      },
138
+      "maxWidth": {
139
+          "2.5": "0.625rem",
140
+          "3": "0.75rem",
141
+          "4": "1rem",
142
+          "11": "2.75rem",
143
+          "13": "3.25rem",
144
+          "14": "3.5rem",
145
+          "15": "3.75rem",
146
+          "22.5": "5.625rem",
147
+          "25": "6.25rem",
148
+          "30": "7.5rem",
149
+          "34": "8.5rem",
150
+          "35": "8.75rem",
151
+          "40": "10rem",
152
+          "42.5": "10.625rem",
153
+          "44": "11rem",
154
+          "45": "11.25rem",
155
+          "60": "15rem",
156
+          "70": "17.5rem",
157
+          "90": "22.5rem",
158
+          "94": "23.5rem",
159
+          "125": "31.25rem",
160
+          "132.5": "33.125rem",
161
+          "142.5": "35.625rem",
162
+          "150": "37.5rem",
163
+          "180": "45rem",
164
+          "203": "50.75rem",
165
+          "230": "57.5rem",
166
+          "242.5": "60.625rem",
167
+          "270": "67.5rem",
168
+          "280": "70rem",
169
+          "292.5": "73.125rem"
170
+      },
171
+      "maxHeight": {
172
+          "35": "8.75rem",
173
+          "70": "17.5rem",
174
+          "90": "22.5rem",
175
+          "550": "34.375rem",
176
+          "300": "18.75rem"
177
+      },
178
+      "minWidth": {
179
+          "22.5": "5.625rem",
180
+          "42.5": "10.625rem",
181
+          "47.5": "11.875rem",
182
+          "75": "18.75rem"
183
+      },
184
+      "zIndex": {
185
+          "999999": "999999",
186
+          "99999": "99999",
187
+          "9999": "9999",
188
+          "999": "999",
189
+          "99": "99",
190
+          "9": "9",
191
+          "1": "1"
192
+      },
193
+      "opacity": {
194
+          "65": ".65"
195
+      },
196
+      "transitionProperty": { "width": "width", "stroke": "stroke" },
197
+      "borderWidth": {
198
+          "6": "6px"
199
+      },
200
+      "boxShadow": {
201
+          "default": "0px 8px 13px -3px rgba(0, 0, 0, 0.07)",
202
+          "card": "0px 1px 3px rgba(0, 0, 0, 0.12)",
203
+          "card-2": "0px 1px 2px rgba(0, 0, 0, 0.05)",
204
+          "switcher":
205
+          "0px 2px 4px rgba(0, 0, 0, 0.2), inset 0px 2px 2px #FFFFFF, inset 0px -1px 1px rgba(0, 0, 0, 0.1)",
206
+          "switch-1": "0px 0px 5px rgba(0, 0, 0, 0.15)",
207
+          "1": "0px 1px 3px rgba(0, 0, 0, 0.08)",
208
+          "2": "0px 1px 4px rgba(0, 0, 0, 0.12)",
209
+          "3": "0px 1px 5px rgba(0, 0, 0, 0.14)",
210
+          "4": "0px 4px 10px rgba(0, 0, 0, 0.12)",
211
+          "5": "0px 1px 1px rgba(0, 0, 0, 0.15)",
212
+          "6": "0px 3px 15px rgba(0, 0, 0, 0.1)",
213
+          "7": "-5px 0 0 #313D4A, 5px 0 0 #313D4A",
214
+          "8": "1px 0 0 #313D4A, -1px 0 0 #313D4A, 0 1px 0 #313D4A, 0 -1px 0 #313D4A, 0 3px 13px rgb(0 0 0 / 8%)"
215
+      },
216
+      "dropShadow": {
217
+          "1": "0px 1px 0px #E2E8F0",
218
+          "2": "0px 1px 4px rgba(0, 0, 0, 0.12)"
219
+      }
220
+      }
221
+    }
222
+  }