Showing 5 changed files with 87 additions and 4 deletions
+41
lib/Gitprep/API.pm
... ...
@@ -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
   
+3 -3
templates/include/issue_message.html.ep
... ...
@@ -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>
+22
templates/include/js/issue.html.ep
... ...
@@ -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 () {
+11 -1
templates/issue.html.ep
... ...
@@ -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>
+10
templates/pull.html.ep
... ...
@@ -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
     }