... | ... |
@@ -6,6 +6,47 @@ use Text::Markdown::Hoedown qw(HOEDOWN_EXT_FENCED_CODE HOEDOWN_EXT_TABLES HOEDOW |
6 | 6 |
|
7 | 7 |
has 'cntl'; |
8 | 8 |
|
9 |
+sub api_update_issue_message { |
|
10 |
+ my ($self, $issue_message_row_id, $message, $user_id) = @_; |
|
11 |
+ |
|
12 |
+ my $issue_message = $self->app->dbi->model('issue_message')->select( |
|
13 |
+ {user => ['id']}, where => {'issue_message.row_id' => $issue_message_row_id} |
|
14 |
+ )->one; |
|
15 |
+ |
|
16 |
+ my $session_user_id = $self->session_user_id; |
|
17 |
+ |
|
18 |
+ my $is_my_project = $user_id eq $session_user_id; |
|
19 |
+ my $is_my_comment = $issue_message->{'user.id'} eq $session_user_id; |
|
20 |
+ my $can_modify = $is_my_project || $is_my_comment; |
|
21 |
+ |
|
22 |
+ my $json; |
|
23 |
+ if ($can_modify) { |
|
24 |
+ my $now_tm = Time::Moment->now; |
|
25 |
+ my $update_time = $now_tm->epoch; |
|
26 |
+ $self->app->log->info($update_time); |
|
27 |
+ |
|
28 |
+ $self->app->dbi->model('issue_message')->update( |
|
29 |
+ { |
|
30 |
+ message => $message, |
|
31 |
+ update_time => $update_time |
|
32 |
+ }, |
|
33 |
+ where => {row_id => $issue_message_row_id} |
|
34 |
+ ); |
|
35 |
+ |
|
36 |
+ my $markdown_message = $self->markdown($message); |
|
37 |
+ |
|
38 |
+ $json = { |
|
39 |
+ success => 1, |
|
40 |
+ markdown_message => $markdown_message |
|
41 |
+ }; |
|
42 |
+ } |
|
43 |
+ else { |
|
44 |
+ $json = {success => 0}; |
|
45 |
+ } |
|
46 |
+ |
|
47 |
+ return $json; |
|
48 |
+} |
|
49 |
+ |
|
9 | 50 |
sub api_delete_issue_message { |
10 | 51 |
my ($self, $issue_message_row_id, $user_id) = @_; |
11 | 52 |
|
... | ... |
@@ -16,7 +16,7 @@ |
16 | 16 |
<div class="issue-message <%= $is_owner_comment ? 'issue-message-owner' : '' %>"> |
17 | 17 |
<div class="issue-message-header <%= $is_owner_comment ? 'issue-message-header-owner' : '' %>"> |
18 | 18 |
<div class="issue-message-header-left"> |
19 |
- <b><%= $issue_message->{'user.id'} %></b> <span style="color:#767676;">commented <%= $api->age_string($issue_message->{create_time}) %></span> |
|
19 |
+ <b><%= $issue_message->{'user.id'} %></b> <span style="color:#767676;">commented <%= $api->age_string($issue_message->{update_time}) %></span> |
|
20 | 20 |
</div> |
21 | 21 |
<div class="issue-message-header-right"> |
22 | 22 |
% if ($is_owner_comment) { |
... | ... |
@@ -60,8 +60,8 @@ |
60 | 60 |
Styling with Markdown is supported |
61 | 61 |
</div> |
62 | 62 |
<div class="issue-add-comment-button"> |
63 |
- <button class="issue-message-update-cancel btn" onclick="javascript:void(0)" >Cancel</button> |
|
64 |
- <input type="submit" value="Update comment" onclick="$(this).closest('form').find('[name=op]').val('update-comment'); $(this).closest('form').submit();" class="btn btn-success"> |
|
63 |
+ <button class="issue-message-update-cancel btn" onclick="javascript:return false;" >Cancel</button> |
|
64 |
+ <button class="issue-message-update-btn btn btn-success" onclick="javascript:return false">Update comment</button> |
|
65 | 65 |
</div> |
66 | 66 |
</div> |
67 | 67 |
</div> |
... | ... |
@@ -75,7 +75,29 @@ $('.issue-message-update-cancel').on('click', function () { |
75 | 75 |
|
76 | 76 |
return false; |
77 | 77 |
}); |
78 |
+$('.issue-message-update-btn').on('click', function () { |
|
79 |
+ |
|
80 |
+ var issue_message_row_id_div = $(this).closest('.issue-message-row-id'); |
|
81 |
+ var issue_message_row_id_str = issue_message_row_id_div.attr('id'); |
|
82 |
+ |
|
83 |
+ var issue_message_row_id = (issue_message_row_id_str.match(/row-(.+)/))[1]; |
|
84 |
+ var message = $('#row-' + issue_message_row_id).find('[name=message]').val(); |
|
78 | 85 |
|
86 |
+ $.post( |
|
87 |
+ '<%= url_for %>', |
|
88 |
+ {op : 'api-update-issue-message', issue_message_row_id : issue_message_row_id, message : message}, |
|
89 |
+ function (result) { |
|
90 |
+ if (result.success) { |
|
91 |
+ $('#row-' + issue_message_row_id).find('.issue-message-body').html(result.markdown_message); |
|
92 |
+ $('#row-' + issue_message_row_id).find('.issue-message').css('display', 'block'); |
|
93 |
+ $('#row-' + issue_message_row_id).find('.issue-message-update').css('display', 'none'); |
|
94 |
+ } |
|
95 |
+ return false; |
|
96 |
+ } |
|
97 |
+ ); |
|
98 |
+ |
|
99 |
+ return false; |
|
100 |
+}); |
|
79 | 101 |
|
80 | 102 |
// Comment icon |
81 | 103 |
$('.issue-icon-add-header-text').on('click', function () { |
... | ... |
@@ -87,6 +87,16 @@ |
87 | 87 |
|
88 | 88 |
my $json = $api->api_delete_issue_message($issue_message_row_id, $user_id); |
89 | 89 |
|
90 |
+ $self->render(json => $json); |
|
91 |
+ return; |
|
92 |
+ } |
|
93 |
+ elsif ($op eq 'api-update-issue-message') { |
|
94 |
+ |
|
95 |
+ my $issue_message_row_id = param('issue_message_row_id'); |
|
96 |
+ my $message = param('message'); |
|
97 |
+ |
|
98 |
+ my $json = $api->api_update_issue_message($issue_message_row_id, $message, $user_id); |
|
99 |
+ |
|
90 | 100 |
$self->render(json => $json); |
91 | 101 |
return; |
92 | 102 |
} |
... | ... |
@@ -173,7 +183,7 @@ |
173 | 183 |
</div> |
174 | 184 |
<div class="issue-add-comment-body"> |
175 | 185 |
<div class="issue-message-write-area issue-add-comment-message"> |
176 |
- <%= text_area 'message' %> |
|
186 |
+ <%= text_area 'message' => '' %> |
|
177 | 187 |
</div> |
178 | 188 |
<div class="issue-message-preview-area issue-add-comment-preview markdown-body" style="padding:10px"> |
179 | 189 |
</div> |
... | ... |
@@ -203,6 +203,16 @@ |
203 | 203 |
|
204 | 204 |
my $json = $api->api_delete_issue_message($issue_message_row_id, $base_user_id); |
205 | 205 |
|
206 |
+ $self->render(json => $json); |
|
207 |
+ return; |
|
208 |
+ } |
|
209 |
+ elsif ($op eq 'api-update-issue-message') { |
|
210 |
+ |
|
211 |
+ my $issue_message_row_id = param('issue_message_row_id'); |
|
212 |
+ my $message = param('message'); |
|
213 |
+ |
|
214 |
+ my $json = $api->api_update_issue_message($issue_message_row_id, $message, $base_user_id); |
|
215 |
+ |
|
206 | 216 |
$self->render(json => $json); |
207 | 217 |
return; |
208 | 218 |
} |