gitprep / templates / issue.html.ep /
Newer Older
328 lines | 10.935kb
add new issue feature
Yuki Kimoto authored on 2016-06-20
1
<%
2
  # API
3
  my $api = gitprep_api;
4

            
5
  # Parameters
6
  my $user_id = param('user');
7
  my $project_id = param('project');
8
  my $issue_number = param('number');
can add new issue message an...
Yuki Kimoto authored on 2016-07-06
9
  my $op = param('op') // '';
add label apply
Yuki Kimoto authored on 2016-08-01
10

            
11
  my $project_row_id = $api->get_project_row_id($user_id, $project_id);
add issue message delete fea...
Yuki Kimoto authored on 2016-07-14
12
  
13
  my $session_id = $api->session_user_id;
add new issue feature
Yuki Kimoto authored on 2016-06-20
14

            
add issue messages page
Yuki Kimoto authored on 2016-06-21
15
  # Issue
16
  my $issue = app->dbi->model('issue')->select(
17
    [
18
      {__MY__ => '*'},
19
      {open_user => ['id']}
20
    ],
21
    where => {
add label apply
Yuki Kimoto authored on 2016-08-01
22
      project => $project_row_id,
add issue messages page
Yuki Kimoto authored on 2016-06-21
23
      'issue.number' => $issue_number
24
    }
25
  )->one;
add label apply
Yuki Kimoto authored on 2016-08-01
26
  my $issue_row_id = $issue->{row_id};
can add new issue message an...
Yuki Kimoto authored on 2016-07-06
27
  
28
  my $errors;
add comment form
Yuki Kimoto authored on 2016-07-06
29
  if (lc $self->req->method eq 'post') {
can add new issue message an...
Yuki Kimoto authored on 2016-07-06
30
    if ($op eq 'reopen-issue') {
31
      app->dbi->model('issue')->update({open => 1}, where => {row_id => $issue_row_id});
32
      
33
      $self->redirect_to;
34
      return;
35
    }
36
    elsif ($op eq 'close-issue') {
37
      app->dbi->model('issue')->update({open => 0}, where => {row_id => $issue_row_id});
38
      
39
      $self->redirect_to;
40
      return;
41
    }
42
    elsif ($op eq 'add-comment') {
43

            
44
      # Parameters
45
      my $message = param('message');
46
      
47
      # Validation
48
      my $vc = app->vc;
49
      my $validation = $vc->validation;
50
      
51
      # Check Message
52
      if (!length $message) {
53
        $validation->add_failed(message => 'message is empty');
54
      }
55
      elsif (length $message > 1000) {
56
        $validation->add_failed(message => 'message is too long');
57
      }
58
      
59
      if ($validation->is_valid) {
60

            
improve pull request. add co...
Yuki Kimoto authored on 2016-07-11
61
        $api->add_issue_message($user_id, $project_id, $number, $message);
62
        
63
        $self->redirect_to;
64
        return;
can add new issue message an...
Yuki Kimoto authored on 2016-07-06
65
      }
66
      else {
67
        $errors = $validation->messages;
68
      }
69
    }
cleanup issue and pull page
Yuki Kimoto authored on 2016-07-16
70
    elsif ($op eq 'api-delete-issue-message') {
add issue message delete fea...
Yuki Kimoto authored on 2016-07-14
71
      my $issue_message_row_id = param('issue_message_row_id');
72
      
add issue message delete fea...
Yuki Kimoto authored on 2016-07-16
73
      my $json = $api->api_delete_issue_message($issue_message_row_id, $user_id);
improve comment delete authe...
Yuki Kimoto authored on 2016-07-15
74
      
implement issue comment upda...
Yuki Kimoto authored on 2016-07-25
75
      $self->render(json => $json);
76
      return;
77
    }
78
    elsif ($op eq 'api-update-issue-message') {
79
      
80
      my $issue_message_row_id = param('issue_message_row_id');
81
      my $message = param('message');
82
      
83
      my $json = $api->api_update_issue_message($issue_message_row_id, $message, $user_id);
84
      
add label apply
Yuki Kimoto authored on 2016-08-01
85
      $self->render(json => $json);
86
      return;
87
    }
88
    elsif ($op eq 'api-toggle-label') {
improve label adding design
Yuki Kimoto authored on 2016-08-02
89
      my $label_row_id = param('popup-label-row-id');
add label apply
Yuki Kimoto authored on 2016-08-01
90
      
91
      my $label_checked = app->dbi->model('issue_label')->select(
92
        where => {issue => $issue_row_id, label => $label_row_id}
93
      )->one;
94
      
95
      my $json = {};
96
      if ($label_checked) {
97
        app->dbi->model('issue_label')->delete(where => {issue => $issue_row_id, label => $label_row_id});
98
        $json->{checked} = 0;
99
      }
100
      else {
101
        app->dbi->model('issue_label')->insert({issue => $issue_row_id, label => $label_row_id});
improve label adding design
Yuki Kimoto authored on 2016-08-02
102
        my $label = app->dbi->model('label')->select(where => {row_id => $label_row_id})->one;
103
        $json->{checked} = 1;
104
        $json->{id} = $label->{id};
105
        $json->{color} = $label->{color};
add label apply
Yuki Kimoto authored on 2016-08-01
106
      }
107
      $json->{success} = 1;
108
      
add issue message delete fea...
Yuki Kimoto authored on 2016-07-16
109
      $self->render(json => $json);
add issue message delete fea...
Yuki Kimoto authored on 2016-07-14
110
      return;
111
    }
add comment form
Yuki Kimoto authored on 2016-07-06
112
  }
113

            
add issue messages page
Yuki Kimoto authored on 2016-06-21
114
  # Issue message
115
  my $issue_messages = app->dbi->model('issue_message')->select(
116
    [
117
      {__MY__ => '*'},
118
      {user => ['id']}
119
    ],
120
    where => {issue => $issue->{row_id}},
121
    append => 'order by number'
122
  )->all;
add participates
Yuki Kimoto authored on 2016-07-16
123
  
124
  # Issue message count
add issue messages page
Yuki Kimoto authored on 2016-06-21
125
  my $issue_messages_count = app->dbi->model('issue_message')->select(
126
    'count(*)',
127
    where => {issue => $issue->{row_id}},
128
  )->value;
129
  
add participates
Yuki Kimoto authored on 2016-07-16
130
  # Participants
131
  my $participants = app->dbi->model('issue_message')->select(
132
    ['distinct user.id'],
133
    where => {issue => $issue->{row_id}},
134
  )->values;
135
  
add label apply
Yuki Kimoto authored on 2016-08-01
136
  # Labels
137
  my $labels = app->dbi->model('label')->select(
138
    {__MY__ => '*'},
139
    where => {project => $project_row_id}
140
  )->all;
141
  
show added labels
Yuki Kimoto authored on 2016-08-01
142
  # Issue labels
143
  my $issue_labels = app->dbi->model('issue_label')->select(
144
    {label => '*'},
145
    where => {'issue_label.issue' => $issue_row_id},
146
    appden => 'order by label.id'
147
  )->all;
148
  
add new issue feature
Yuki Kimoto authored on 2016-06-20
149
  layout 'common', title => "Issue - $user_id/$project_id #$issue_number";
150
%>
151

            
add previewã€area
Yuki Kimoto authored on 2016-07-08
152
%= javascript begin
153
  $(document).ready(function() {
cleanup issue and pull page
Yuki Kimoto authored on 2016-07-16
154
    %= include '/include/js/issue';
add label apply
Yuki Kimoto authored on 2016-08-01
155
    
156
    // Click labels btn
157
    $('.issue-labels-setting-btn').on('click', function () {
complete label
Yuki Kimoto authored on 2016-08-01
158
      var popup = $('.issue-labels-popup');
159
      popup.css('display', 'block');
160
      
161
      var top = $('.issue-labels').offset().top;
162
      var left = $('.issue-labels').offset().left;
163
      
164
      popup.css('top', (top + 30) + 'px');
165
      popup.css('left', (left - 165) + 'px');
add label apply
Yuki Kimoto authored on 2016-08-01
166
    });
167
    
complete label
Yuki Kimoto authored on 2016-08-01
168
    // Click label check button
add label apply
Yuki Kimoto authored on 2016-08-01
169
    $('.issue-labels-popup-body li').on('click', function () {
170
      var that = this;
171
      
improve label adding design
Yuki Kimoto authored on 2016-08-02
172
      var label_row_id = $(this).attr('popup-label-row-id');
173
      $.post('<%= url_for %>', {'popup-label-row-id' : label_row_id, op : 'api-toggle-label'}, function (result) {
add label apply
Yuki Kimoto authored on 2016-08-01
174
        if (result.success) {
175
          if (result.checked) {
176
            $(that).find('.issue-labels-popup-check i').css('display', 'block');
improve label adding design
Yuki Kimoto authored on 2016-08-02
177
            var li = '<li label-row-id="' + label_row_id + '" style="background:' + result.color + '">' + result.id + '</li>';
178
            $('.issue-labels-setting-pallet').append(li);
add label apply
Yuki Kimoto authored on 2016-08-01
179
          }
180
          else {
181
            $(that).find('.issue-labels-popup-check i').css('display', 'none');
improve label adding design
Yuki Kimoto authored on 2016-08-02
182
            $('.issue-labels-setting-pallet li').each(function () {
183
              if ($(this).attr('label-row-id') === label_row_id) {
184
                $(this).remove();
185
              }
186
            });
add label apply
Yuki Kimoto authored on 2016-08-01
187
          }
188
        }
189
      });
190
    });
complete label
Yuki Kimoto authored on 2016-08-01
191
    
192
    // Click label popup close button
193
    $('.issue-labels-popup-close-btn').on('click', function () {
194
      $('.issue-labels-popup').hide();
195
    });
add previewã€area
Yuki Kimoto authored on 2016-07-08
196
  });
197
% end
198

            
add new issue feature
Yuki Kimoto authored on 2016-06-20
199
%= include '/include/header';
200

            
201
<div class="container">
can add new issue message an...
Yuki Kimoto authored on 2016-07-06
202
  %= include '/include/errors', errors => $errors;
add participates
Yuki Kimoto authored on 2016-07-16
203

            
204
  <div class="issue-title-panel">
205
    <div class="issue-title">
206
      Some <%= $issue->{title} %> <span style="color:#aaa;">#<%= $issue->{number} %></span>
207
    </div>
208
    <div>
209
      % if ($issue->{open}) {
210
        <div class="issue-open">Open</div>
211
      % } else {
212
        <div class="issue-close">Close</div>
213
      % }
214
      <b><%= $issue->{'open_user.id'} %></b> <span style="color:#767676;">opened this issue <%= $api->age_string($issue->{open_time}) %> / <%= $issue_messages_count %> comment</span>
215
    </div>
216
  </div>
217
  
218
  <div class="issue">
219
    <div class="issue-left">
220
      <div class="issue-panel">
add comment form
Yuki Kimoto authored on 2016-07-06
221
        <div>
add participates
Yuki Kimoto authored on 2016-07-16
222
          % for my $issue_message (@$issue_messages) {
223
            <%
224
              my %issue_message_param = (
225
                user_id => $user_id,
226
                issue_message => $issue_message
227
              );
228
            %>
229
            
230
            %= include '/include/issue_message', %issue_message_param;
add comment form
Yuki Kimoto authored on 2016-07-06
231
          % }
add issue messages page
Yuki Kimoto authored on 2016-06-21
232
        </div>
233
      </div>
add participates
Yuki Kimoto authored on 2016-07-16
234
      
235
      % if ($api->logined) {
236
        <div class="issue-add-comment">
237
          <form action="<%= url_for %>" method="post">
238
            <%= hidden_field 'op' %>
239
            <div class="issue-add-comment-header">
cleanup issue preview
Yuki Kimoto authored on 2016-07-25
240
              <div class="issue-message-write-tab issue-add-comment-header-tab"><a href="javascript:void(0)">Write</a></div>
241
              <div class="issue-message-preview-tab issue-add-comment-header-tab"><a class="disable" href="javascript:void(0)">Preview</a></div>
add id to issue icon
Yuki Kimoto authored on 2016-07-23
242
              %= include '/include/issue_comment_icon';
add comment form
Yuki Kimoto authored on 2016-07-06
243
            </div>
add participates
Yuki Kimoto authored on 2016-07-16
244
            <div class="issue-add-comment-body">
cleanup issue preview
Yuki Kimoto authored on 2016-07-25
245
              <div class="issue-message-write-area issue-add-comment-message">
implement issue comment upda...
Yuki Kimoto authored on 2016-07-25
246
                <%= text_area 'message' => '' %>
add participates
Yuki Kimoto authored on 2016-07-16
247
              </div>
cleanup issue preview
Yuki Kimoto authored on 2016-07-25
248
              <div class="issue-message-preview-area issue-add-comment-preview markdown-body" style="padding:10px">
add write prview tab
Yuki Kimoto authored on 2016-07-07
249
              </div>
add participates
Yuki Kimoto authored on 2016-07-16
250
              <div class="issue-add-comment-bottom">
251
                <div class="issue-add-comment-button-left">
252
                  Styling with Markdown is supported
253
                </div>
254
                <div class="issue-add-comment-button">
255
                  % if ($issue->{open}) {
256
                    <input type="submit" value="Close issue" onclick="$(this).closest('form').find('[name=op]').val('close-issue'); $(this).closest('form').submit();" class="btn">
257
                  % } else {
258
                    <input type="submit" value="Reopen issue" onclick="$(this).closest('form').find('[name=op]').val('reopen-issue'); $(this).closest('form').submit();" class="btn">
259
                  % }
rename btn-success to btn-gr...
Yuki Kimoto authored on 2016-11-30
260
                  <input type="submit" value="Comment" onclick="$(this).closest('form').find('[name=op]').val('add-comment'); $(this).closest('form').submit();" class="btn btn-green">
add participates
Yuki Kimoto authored on 2016-07-16
261
                </div>
add write prview tab
Yuki Kimoto authored on 2016-07-07
262
              </div>
add comment form
Yuki Kimoto authored on 2016-07-06
263
            </div>
add participates
Yuki Kimoto authored on 2016-07-16
264
          </form>
265
        </div>
266
      % }
267
    </div>
268
    <div class="issue-right">
add issue labels btn
Yuki Kimoto authored on 2016-07-30
269
      <div class="issue-labels">
270
        <div class="issue-labels-title-area">
271
          <div class="issue-labels-title">
272
            labels
273
          </div>
274
          <div class="issue-labels-setting-btn">
275
            <a href="javascript:void(0)"><i class="icon icon-cog"></i></a>
276
          </div>
277
        </div>
complete label
Yuki Kimoto authored on 2016-08-01
278
        <div class="issue-labels-popup">
279
          <div class="issue-labels-popup-title-area">
280
            <div class="issue-labels-popup-title">
281
              Apply labels to this issue
282
            </div>
283
            <div class="issue-labels-popup-close-btn">
284
              <a href="javascript:void(0)"><i class="icon icon-remove"></i></a>
285
            </div>
286
          </div>
287
          <ul class="issue-labels-popup-body">
288
            % for my $label (@$labels) {
289
              % my $checked = app->dbi->model('issue_label')->select(where => {issue => $issue_row_id, label => $label->{row_id}})->one;
improve label adding design
Yuki Kimoto authored on 2016-08-02
290
              <li popup-label-row-id="<%= $label->{row_id} %>">
complete label
Yuki Kimoto authored on 2016-08-01
291
                <div class="issue-labels-popup-check"><i class="icon icon-ok" style="display:<%= $checked ? 'block' : 'none' %>"></i></div>
292
                <div class="issue-labels-popup-pallet" style="background:<%= $label->{color} %>"></div>
293
                <div class="issue-labels-popup-pallet-id"><%= $label->{id} %></div>
294
              </li>
295
            % }
296
          </ul>
297
        </div>
show added labels
Yuki Kimoto authored on 2016-08-01
298
        % if (@$labels) {
299
          <ul class="issue-labels-setting-pallet">
300
            % for my $issue_label (@$issue_labels) {
improve label adding design
Yuki Kimoto authored on 2016-08-02
301
              <li label-row-id="<%= $issue_label->{'label.row_id'} %>" style="background:<%= $issue_label->{'label.color'} %>">
show added labels
Yuki Kimoto authored on 2016-08-01
302
                <%= $issue_label->{'label.id'} %>
303
              </li>
304
            % }
305
          </ul>
306
        % } else {
307
          <ul>
308
            <li>
309
              None yet
310
            </li>
311
          </ul>
312
        % }
add issue labels btn
Yuki Kimoto authored on 2016-07-30
313
      </div>
add participates
Yuki Kimoto authored on 2016-07-16
314
      <div style="font-weight:bold;padding-bottom:3px"><%= @$participants %> participants</div>
315
      <ul>
316
        % for my $participant (@$participants) {
317
          <li>
318
            <a href="<%= url_for("/$participant") %>"><%= $participant %></a>
319
          </li>
320
        % }
321
      </ul>
322
    </div>
add issue messages page
Yuki Kimoto authored on 2016-06-21
323
  </div>
add new issue feature
Yuki Kimoto authored on 2016-06-20
324
</div>
325

            
add label apply
Yuki Kimoto authored on 2016-08-01
326

            
327

            
add new issue feature
Yuki Kimoto authored on 2016-06-20
328
%= include '/include/footer';