zitgit 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +0 -1
- data/README.md +11 -2
- data/lib/grit/status.rb +36 -0
- data/lib/zitgit.rb +22 -32
- data/lib/zitgit/helpers/git.rb +37 -0
- data/lib/zitgit/helpers/views.rb +17 -0
- data/lib/zitgit/version.rb +1 -1
- data/public/coffee/application.coffee +139 -24
- data/public/css/app.css +75 -15
- data/public/images/refresh.png +0 -0
- data/public/js/application.js +186 -19
- data/public/scss/app.scss +90 -10
- data/views/commits/detail.slim +14 -4
- data/views/commits/labels.slim +6 -6
- data/views/commits/list.slim +5 -4
- data/views/diffs/image.slim +11 -0
- data/views/diffs/large.slim +12 -0
- data/views/diffs/line.slim +5 -0
- data/views/diffs/list.slim +30 -21
- data/views/index.slim +6 -1
- data/views/layout.slim +1 -0
- data/views/refs/dropdown.slim +2 -1
- data/views/status/added.slim +10 -0
- data/views/status/changed.slim +21 -0
- data/views/status/deleted.slim +9 -0
- data/views/status/list.slim +30 -0
- data/zitgit.gemspec +1 -0
- metadata +30 -3
Binary file
|
data/public/js/application.js
CHANGED
@@ -1,13 +1,32 @@
|
|
1
1
|
(function() {
|
2
|
-
var ChangeCommit, SetHeight, UpdateDiffsWidth;
|
2
|
+
var ChangeBranch, ChangeCommit, CommitArrows, LoadStatus, RefreshContent, RefreshStatus, SelectDiff, SelectRow, SetHeight, SwitchBranch, TableArrows, UpdateDiffsWidth;
|
3
3
|
|
4
4
|
ChangeCommit = function($commit) {
|
5
5
|
var $target_commit;
|
6
6
|
|
7
7
|
$target_commit = $commit.clone();
|
8
8
|
$('.commits-table tr.selected').removeClass('selected');
|
9
|
+
$('.status').removeClass('selected');
|
9
10
|
$commit.parents('tr').addClass('selected');
|
10
11
|
$('.show_commit').html($target_commit);
|
12
|
+
$('.show_commit .diffs li').niceScroll({
|
13
|
+
cursorcolor: '#ccc',
|
14
|
+
cursorwidth: 14
|
15
|
+
});
|
16
|
+
return UpdateDiffsWidth();
|
17
|
+
};
|
18
|
+
|
19
|
+
LoadStatus = function() {
|
20
|
+
var $status_content;
|
21
|
+
|
22
|
+
$('.commits-table tr.selected').removeClass('selected');
|
23
|
+
$('.status').addClass('selected');
|
24
|
+
$status_content = $('.status .status_content').clone();
|
25
|
+
$('.show_commit').html($status_content);
|
26
|
+
$('.show_commit .diffs li').niceScroll({
|
27
|
+
cursorcolor: '#ccc',
|
28
|
+
cursorwidth: 14
|
29
|
+
});
|
11
30
|
return UpdateDiffsWidth();
|
12
31
|
};
|
13
32
|
|
@@ -26,31 +45,178 @@
|
|
26
45
|
});
|
27
46
|
};
|
28
47
|
|
29
|
-
|
48
|
+
SelectDiff = function($diff) {
|
49
|
+
var index;
|
50
|
+
|
51
|
+
$('.show_commit .diff-names .selected').removeClass('selected');
|
52
|
+
$diff.addClass('selected');
|
53
|
+
if ($diff.hasClass('all')) {
|
54
|
+
return $('.show_commit .diffs li').removeClass('hidden');
|
55
|
+
} else {
|
56
|
+
index = $diff.index() - 1;
|
57
|
+
$('.show_commit .diffs li').addClass('hidden');
|
58
|
+
return $('.show_commit .diffs li:eq(' + index + ')').removeClass('hidden');
|
59
|
+
}
|
60
|
+
};
|
61
|
+
|
62
|
+
ChangeBranch = function($link) {
|
63
|
+
var timeout;
|
64
|
+
|
65
|
+
timeout = setTimeout(function() {
|
66
|
+
$('.loader').show();
|
67
|
+
return $('.main').hide();
|
68
|
+
}, 1500);
|
69
|
+
return $.get($link.attr('href'), function(data) {
|
70
|
+
var list_class;
|
71
|
+
|
72
|
+
clearTimeout(timeout);
|
73
|
+
$('.loader').hide();
|
74
|
+
$('.current_branch').text('');
|
75
|
+
if ($link.parents('.ref_label').length) {
|
76
|
+
list_class = $link.parents('.ref_label').attr('data-dropdown-name');
|
77
|
+
$('.dropdown.' + list_class + '').parent('.has-dropdown').find('.current_branch').text($link.text());
|
78
|
+
} else {
|
79
|
+
$link.parents('.has-dropdown').find('.current_branch').text($link.text());
|
80
|
+
}
|
81
|
+
$('.commits-table').replaceWith(data);
|
82
|
+
$('.main').show();
|
83
|
+
return ChangeCommit($('.commits-table tbody tr:first .commit'));
|
84
|
+
});
|
85
|
+
};
|
86
|
+
|
87
|
+
SwitchBranch = function() {
|
30
88
|
$('.top-bar .dropdown li a').on('click', function(e) {
|
31
|
-
|
89
|
+
e.preventDefault();
|
90
|
+
return ChangeBranch($(this));
|
91
|
+
});
|
92
|
+
return $('body').on('click', '.ref_label a', function(e) {
|
93
|
+
e.preventDefault();
|
94
|
+
return ChangeBranch($(this));
|
95
|
+
});
|
96
|
+
};
|
97
|
+
|
98
|
+
RefreshStatus = function() {
|
99
|
+
return $.get('/status/', function(data) {
|
100
|
+
return $('.status').replaceWith(data);
|
101
|
+
});
|
102
|
+
};
|
103
|
+
|
104
|
+
RefreshContent = function() {
|
105
|
+
RefreshStatus();
|
106
|
+
return $('.current_branch').each(function(index) {
|
107
|
+
var branch_name;
|
108
|
+
|
109
|
+
if ($(this).text() !== '') {
|
110
|
+
branch_name = $(this).text();
|
111
|
+
$(this).parent('.has-dropdown').find('.dropdown li a').each(function(index) {
|
112
|
+
if ($(this).text() === branch_name) {
|
113
|
+
ChangeBranch($(this));
|
114
|
+
return false;
|
115
|
+
}
|
116
|
+
});
|
117
|
+
return false;
|
118
|
+
}
|
119
|
+
});
|
120
|
+
};
|
121
|
+
|
122
|
+
SelectRow = function($row) {
|
123
|
+
var current_scroll, offset;
|
32
124
|
|
125
|
+
if ($row.offset().top < $('.history').offset().top) {
|
126
|
+
current_scroll = $('.history').scrollTop();
|
127
|
+
$('.history').scrollTop(current_scroll + $row.offset().top - $('.history').offset().top);
|
128
|
+
}
|
129
|
+
offset = $row.offset().top - $('.history').offset().top;
|
130
|
+
if (offset + $row.outerHeight() > $('.history').outerHeight()) {
|
131
|
+
current_scroll = $('.history').scrollTop();
|
132
|
+
$('.history').scrollTop(current_scroll + offset + $row.outerHeight() - $('.history').outerHeight());
|
133
|
+
}
|
134
|
+
return ChangeCommit($row.find('.commit'));
|
135
|
+
};
|
136
|
+
|
137
|
+
TableArrows = function() {
|
138
|
+
var motions;
|
139
|
+
|
140
|
+
motions = [38, 40, 33, 34, 35, 36];
|
141
|
+
return $('.history').on('keydown', function(e) {
|
142
|
+
var $next, $next_rows;
|
143
|
+
|
144
|
+
if (motions.indexOf(e.keyCode) === -1) {
|
145
|
+
return;
|
146
|
+
}
|
33
147
|
e.preventDefault();
|
34
|
-
|
35
|
-
|
36
|
-
$('.
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
$
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
148
|
+
e.stopPropagation();
|
149
|
+
if (e.keyCode === 38) {
|
150
|
+
$next = $('.commits-table tr.selected').prev();
|
151
|
+
} else if (e.keyCode === 40) {
|
152
|
+
$next = $('.commits-table tr.selected').next();
|
153
|
+
} else if (e.keyCode === 33) {
|
154
|
+
$next_rows = $('.commits-table tr.selected').prevAll();
|
155
|
+
if ($next_rows.length >= 10) {
|
156
|
+
$next = $next_rows.eq(9);
|
157
|
+
} else {
|
158
|
+
$next = $next_rows.last();
|
159
|
+
}
|
160
|
+
} else if (e.keyCode === 34) {
|
161
|
+
$next_rows = $('.commits-table tr.selected').nextAll();
|
162
|
+
if ($next_rows.length >= 10) {
|
163
|
+
$next = $next_rows.eq(9);
|
164
|
+
} else {
|
165
|
+
$next = $next_rows.last();
|
166
|
+
}
|
167
|
+
} else if (e.keyCode === 36) {
|
168
|
+
$next = $('.commits-table tbody tr:first');
|
169
|
+
} else if (e.keyCode === 35) {
|
170
|
+
$next = $('.commits-table tr:last');
|
171
|
+
}
|
172
|
+
if ($next && $next.length > 0) {
|
173
|
+
return SelectRow($next);
|
174
|
+
}
|
48
175
|
});
|
176
|
+
};
|
177
|
+
|
178
|
+
CommitArrows = function() {
|
179
|
+
var motions;
|
180
|
+
|
181
|
+
motions = [38, 40];
|
182
|
+
return $('.show_commit').on('keydown', function(e) {
|
183
|
+
var $next;
|
184
|
+
|
185
|
+
if (motions.indexOf(e.keyCode) === -1) {
|
186
|
+
return;
|
187
|
+
}
|
188
|
+
e.preventDefault();
|
189
|
+
e.stopPropagation();
|
190
|
+
if (e.keyCode === 38) {
|
191
|
+
$next = $('.show_commit .diff-names li.selected').prev();
|
192
|
+
} else if (e.keyCode === 40) {
|
193
|
+
$next = $('.show_commit .diff-names li.selected').next();
|
194
|
+
}
|
195
|
+
if ($next && $next.length > 0) {
|
196
|
+
return SelectDiff($next);
|
197
|
+
}
|
198
|
+
});
|
199
|
+
};
|
200
|
+
|
201
|
+
$(function() {
|
49
202
|
$('.history').on('click', '.commits-table tr', function(e) {
|
50
203
|
return ChangeCommit($(this).find('.commit'));
|
51
204
|
});
|
52
|
-
|
205
|
+
$('.history').on('click', '.status-link', function(e) {
|
206
|
+
e.preventDefault();
|
207
|
+
return LoadStatus();
|
208
|
+
});
|
209
|
+
$('.refresh').on('click', function(e) {
|
210
|
+
e.preventDefault();
|
211
|
+
return RefreshContent();
|
212
|
+
});
|
213
|
+
$('.show_commit').on('click', '.diff-names li', function(e) {
|
214
|
+
return SelectDiff($(this));
|
215
|
+
});
|
216
|
+
SwitchBranch();
|
53
217
|
SetHeight();
|
218
|
+
TableArrows();
|
219
|
+
CommitArrows();
|
54
220
|
$(window).resize(function() {
|
55
221
|
return SetHeight();
|
56
222
|
});
|
@@ -64,10 +230,11 @@
|
|
64
230
|
railalign: 'left',
|
65
231
|
horizrailenabled: false
|
66
232
|
});
|
67
|
-
|
233
|
+
$('.show_commit .diffs li').niceScroll({
|
68
234
|
cursorcolor: '#ccc',
|
69
235
|
cursorwidth: 14
|
70
236
|
});
|
237
|
+
return UpdateDiffsWidth();
|
71
238
|
});
|
72
239
|
|
73
240
|
}).call(this);
|
data/public/scss/app.scss
CHANGED
@@ -2,8 +2,14 @@
|
|
2
2
|
|
3
3
|
.top-bar {
|
4
4
|
z-index: 6;
|
5
|
+
.refresh{
|
6
|
+
img{
|
7
|
+
position: relative;
|
8
|
+
top: 8px;
|
9
|
+
}
|
10
|
+
}
|
5
11
|
}
|
6
|
-
.
|
12
|
+
.main .history.columns{
|
7
13
|
padding: 0 0 0 15px;
|
8
14
|
}
|
9
15
|
.ref_label{
|
@@ -12,15 +18,30 @@
|
|
12
18
|
border-radius: 12px;
|
13
19
|
padding: 2px 4px;
|
14
20
|
float: left;
|
21
|
+
a{
|
22
|
+
color: #000;
|
23
|
+
}
|
15
24
|
}
|
16
25
|
.branch_label{
|
17
|
-
background:
|
26
|
+
background: #ffeeee;
|
27
|
+
border-color: #581313;
|
28
|
+
a{
|
29
|
+
color: #581313;
|
30
|
+
}
|
18
31
|
}
|
19
32
|
.remote_label{
|
20
|
-
background:
|
33
|
+
background: #ffe3e3;
|
34
|
+
border-color: #b32222;
|
35
|
+
a{
|
36
|
+
color: #b32222;
|
37
|
+
}
|
21
38
|
}
|
22
39
|
.tag_label{
|
23
|
-
background: #
|
40
|
+
background: #ffe6bc;
|
41
|
+
border-color: #ff9800;
|
42
|
+
a{
|
43
|
+
color: #ff9800;
|
44
|
+
}
|
24
45
|
}
|
25
46
|
.commits-table{
|
26
47
|
thead{
|
@@ -44,11 +65,22 @@
|
|
44
65
|
font-size: 12px;
|
45
66
|
border-radius: 8px;
|
46
67
|
padding: 0 2px;
|
68
|
+
max-width: 134px;
|
69
|
+
word-wrap: break-word;
|
70
|
+
text-align: center;
|
71
|
+
}
|
72
|
+
.sha{
|
73
|
+
font-size:10px;
|
47
74
|
}
|
48
75
|
}
|
49
76
|
.author{
|
50
77
|
width: 180px;
|
51
78
|
}
|
79
|
+
.message{
|
80
|
+
div{
|
81
|
+
max-height: 56px;
|
82
|
+
}
|
83
|
+
}
|
52
84
|
tbody{
|
53
85
|
tr.selected{
|
54
86
|
background: #c3e2ff;
|
@@ -75,7 +107,8 @@
|
|
75
107
|
padding-top: 14px;
|
76
108
|
list-style-type: none;
|
77
109
|
li{
|
78
|
-
margin-bottom: -
|
110
|
+
margin-bottom: -4px;
|
111
|
+
padding: 0 4px;
|
79
112
|
.new_file{
|
80
113
|
color: green;
|
81
114
|
}
|
@@ -83,10 +116,14 @@
|
|
83
116
|
color: red;
|
84
117
|
}
|
85
118
|
}
|
119
|
+
.selected{
|
120
|
+
background: #a7d5ff;
|
121
|
+
}
|
86
122
|
}
|
87
123
|
.diffs{
|
88
124
|
background: #fff;
|
89
125
|
list-style-type: none;
|
126
|
+
font-family: monospace;
|
90
127
|
li{
|
91
128
|
border-bottom: solid #ddd 8px;
|
92
129
|
overflow-x: scroll;
|
@@ -96,16 +133,19 @@
|
|
96
133
|
}
|
97
134
|
.diff-first-line{
|
98
135
|
font-weight: bold;
|
99
|
-
background: #
|
100
|
-
border-bottom: 1px solid
|
136
|
+
background: #eee;
|
137
|
+
border-bottom: 1px solid #777;
|
101
138
|
}
|
102
139
|
.diff-summ-line{
|
103
|
-
background: #
|
140
|
+
background: #eee;
|
104
141
|
font-weight: bold;
|
105
142
|
}
|
106
143
|
.diff-added-line{
|
107
144
|
color: #096707;
|
108
145
|
background: #87f49f;
|
146
|
+
.trailing{
|
147
|
+
background: #036420;
|
148
|
+
}
|
109
149
|
}
|
110
150
|
.diff-removed-line{
|
111
151
|
position: relative;
|
@@ -113,8 +153,14 @@
|
|
113
153
|
right: 0;
|
114
154
|
color: #742b2b;
|
115
155
|
background: #ffb1cb;
|
156
|
+
.trailing{
|
157
|
+
background: #c10000;
|
158
|
+
}
|
116
159
|
}
|
117
160
|
}
|
161
|
+
img{
|
162
|
+
display: block;
|
163
|
+
}
|
118
164
|
}
|
119
165
|
.hidden{
|
120
166
|
display: none;
|
@@ -126,23 +172,36 @@
|
|
126
172
|
background: #ddd;
|
127
173
|
border-radius: 16px;
|
128
174
|
.author_info{
|
129
|
-
/*width: 50%;*/
|
130
175
|
float: left;
|
131
176
|
font-weight: bold;
|
177
|
+
clear: left;
|
178
|
+
color: #eee;
|
179
|
+
text-shadow: 1px 1px 0px #333, 1px -1px 0px #333, -1px 1px 0px #333, -1px -1px 0px #333;
|
132
180
|
}
|
133
181
|
.commit_sha{
|
134
182
|
margin-bottom:14px;
|
135
|
-
margin-top: -14px;
|
136
183
|
clear: left;
|
184
|
+
float: left;
|
185
|
+
}
|
186
|
+
.commit_date{
|
187
|
+
margin-bottom:14px;
|
188
|
+
float: right;
|
137
189
|
}
|
138
190
|
.stats{
|
139
191
|
float: right;
|
192
|
+
text-align: right;
|
140
193
|
.additions{
|
141
194
|
color: green;
|
142
195
|
}
|
143
196
|
.deletions{
|
144
197
|
color: red;
|
145
198
|
}
|
199
|
+
.merge_commit{
|
200
|
+
font-weight: bold;
|
201
|
+
position: relative;
|
202
|
+
top: 8px;
|
203
|
+
color: #0300ff;
|
204
|
+
}
|
146
205
|
}
|
147
206
|
}
|
148
207
|
}
|
@@ -153,3 +212,24 @@
|
|
153
212
|
background: url('/images/loader.gif') no-repeat;
|
154
213
|
display: none;
|
155
214
|
}
|
215
|
+
.status{
|
216
|
+
margin-bottom: 8px;
|
217
|
+
padding: 4px 0;
|
218
|
+
.status_content{
|
219
|
+
display: none;
|
220
|
+
}
|
221
|
+
.status-link{
|
222
|
+
display: block;
|
223
|
+
font-weight: bold;
|
224
|
+
color: #000;
|
225
|
+
padding-left: 16px;
|
226
|
+
font-size: 20px;
|
227
|
+
}
|
228
|
+
&.selected{
|
229
|
+
background: #c3e2ff;
|
230
|
+
border-bottom: 2px solid #78c3ff;
|
231
|
+
border-top: 2px solid #78c3ff;
|
232
|
+
border-left: 1px solid #78c3ff;
|
233
|
+
border-right: 1px solid #78c3ff;
|
234
|
+
}
|
235
|
+
}
|
data/views/commits/detail.slim
CHANGED
@@ -1,12 +1,22 @@
|
|
1
1
|
.commit
|
2
|
-
h4=commit.message
|
2
|
+
h4=strip_message(commit.message, 120)
|
3
3
|
== slim :'commits/labels', :locals => {commit: commit}, :layout => false
|
4
4
|
.commit_sha =commit.sha
|
5
|
+
.commit_date =commit.date.strftime("%d.%m.%Y %H:%M")
|
5
6
|
.author_info
|
6
7
|
div = commit.author.name
|
7
8
|
div = commit.author.email
|
8
9
|
.stats
|
9
|
-
|
10
|
-
|
10
|
+
- if merge_commit?(commit)
|
11
|
+
div.merge_commit merge
|
12
|
+
-else
|
13
|
+
div.additions = "#{ commit.stats.additions } additions"
|
14
|
+
div.deletions = "#{ commit.stats.deletions } deletions"
|
11
15
|
|
12
|
-
|
16
|
+
- if large_commit?(commit)
|
17
|
+
.diff-names
|
18
|
+
.large
|
19
|
+
=' commit.diffs.count
|
20
|
+
| files changed
|
21
|
+
- else
|
22
|
+
== slim(:'diffs/list', :locals => {diffs: commit.diffs}, :layout => false).force_encoding('utf-8')
|