Show More
@@ -877,11 +877,17 b' input.filediff-collapse-state {' | |||
|
877 | 877 | .show-comment-button { |
|
878 | 878 | display: inline; |
|
879 | 879 | } |
|
880 |
. |
|
|
880 | .hide-comment-button { | |
|
881 | 881 | display: none; |
|
882 | 882 | } |
|
883 | 883 | } |
|
884 | 884 | } |
|
885 | ||
|
886 | .hide-line-comments { | |
|
887 | .inline-comments { | |
|
888 | display: none; | |
|
889 | } | |
|
890 | } | |
|
885 | 891 | .inline-comments { |
|
886 | 892 | border-radius: @border-radius; |
|
887 | 893 | background: @grey6; |
@@ -1037,6 +1043,9 b' table.cb {' | |||
|
1037 | 1043 | white-space: pre-wrap; |
|
1038 | 1044 | font-family: @font-family-monospace; |
|
1039 | 1045 | word-break: break-word; |
|
1046 | .nonl { | |
|
1047 | color: @color5; | |
|
1048 | } | |
|
1040 | 1049 | } |
|
1041 | 1050 | |
|
1042 | 1051 | &> button.cb-comment-box-opener { |
@@ -1061,6 +1070,22 b' table.cb {' | |||
|
1061 | 1070 | } |
|
1062 | 1071 | } |
|
1063 | 1072 | |
|
1073 | &.cb-data { | |
|
1074 | text-align: right; | |
|
1075 | width: 30px; | |
|
1076 | font-family: @font-family-monospace; | |
|
1077 | ||
|
1078 | .icon-comment { | |
|
1079 | cursor: pointer; | |
|
1080 | } | |
|
1081 | &.cb-line-selected > div { | |
|
1082 | display: block; | |
|
1083 | background: @comment-highlight-color !important; | |
|
1084 | line-height: @cb-line-height; | |
|
1085 | color: rgba(0, 0, 0, 0.3); | |
|
1086 | } | |
|
1087 | } | |
|
1088 | ||
|
1064 | 1089 | &.cb-lineno { |
|
1065 | 1090 | padding: 0; |
|
1066 | 1091 | width: 50px; |
@@ -292,6 +292,7 b' function scrollToElement(element, percen' | |||
|
292 | 292 | $('.cb-line-selected').removeClass('cb-line-selected'); |
|
293 | 293 | var td = $(this).parent(); |
|
294 | 294 | td.addClass('cb-line-selected'); // line number td |
|
295 | td.prev().addClass('cb-line-selected'); // line data td | |
|
295 | 296 | td.next().addClass('cb-line-selected'); // line content td |
|
296 | 297 | |
|
297 | 298 | // Replace URL without jumping to it if browser supports. |
@@ -475,6 +476,7 b' function scrollToElement(element, percen' | |||
|
475 | 476 | } |
|
476 | 477 | $.each(highlightable_line_tds, function (i, $td) { |
|
477 | 478 | $td.addClass('cb-line-selected'); // line number td |
|
479 | $td.prev().addClass('cb-line-selected'); // line data | |
|
478 | 480 | $td.next().addClass('cb-line-selected'); // line content |
|
479 | 481 | }); |
|
480 | 482 |
@@ -670,3 +670,228 b' var CommentForm = (function() {' | |||
|
670 | 670 | |
|
671 | 671 | return CommentForm; |
|
672 | 672 | })(); |
|
673 | ||
|
674 | var CommentsController = function() { /* comments controller */ | |
|
675 | var self = this; | |
|
676 | ||
|
677 | this.cancelComment = function(node) { | |
|
678 | var $node = $(node); | |
|
679 | var $td = $node.closest('td'); | |
|
680 | $node.closest('.comment-inline-form').removeClass('comment-inline-form-open'); | |
|
681 | return false; | |
|
682 | } | |
|
683 | this.getLineNumber = function(node) { | |
|
684 | var $node = $(node); | |
|
685 | return $node.closest('td').attr('data-line-number'); | |
|
686 | } | |
|
687 | this.scrollToComment = function(node, offset) { | |
|
688 | if (!node) { | |
|
689 | node = $('.comment-selected'); | |
|
690 | if (!node.length) { | |
|
691 | node = $('comment-current') | |
|
692 | } | |
|
693 | } | |
|
694 | $comment = $(node).closest('.comment-current'); | |
|
695 | $comments = $('.comment-current'); | |
|
696 | ||
|
697 | $('.comment-selected').removeClass('comment-selected'); | |
|
698 | ||
|
699 | var nextIdx = $('.comment-current').index($comment) + offset; | |
|
700 | if (nextIdx >= $comments.length) { | |
|
701 | nextIdx = 0; | |
|
702 | } | |
|
703 | var $next = $('.comment-current').eq(nextIdx); | |
|
704 | var $cb = $next.closest('.cb'); | |
|
705 | $cb.removeClass('cb-collapsed') | |
|
706 | ||
|
707 | var $filediffCollapseState = $cb.closest('.filediff').prev(); | |
|
708 | $filediffCollapseState.prop('checked', false); | |
|
709 | $next.addClass('comment-selected'); | |
|
710 | scrollToElement($next); | |
|
711 | return false; | |
|
712 | } | |
|
713 | this.nextComment = function(node) { | |
|
714 | return self.scrollToComment(node, 1); | |
|
715 | } | |
|
716 | this.prevComment = function(node) { | |
|
717 | return self.scrollToComment(node, -1); | |
|
718 | } | |
|
719 | this.deleteComment = function(node) { | |
|
720 | if (!confirm(_gettext('Delete this comment?'))) { | |
|
721 | return false; | |
|
722 | } | |
|
723 | var $node = $(node); | |
|
724 | var $td = $node.closest('td'); | |
|
725 | var $comment = $node.closest('.comment'); | |
|
726 | var comment_id = $comment.attr('data-comment-id'); | |
|
727 | var url = AJAX_COMMENT_DELETE_URL.replace('__COMMENT_ID__', comment_id); | |
|
728 | var postData = { | |
|
729 | '_method': 'delete', | |
|
730 | 'csrf_token': CSRF_TOKEN | |
|
731 | }; | |
|
732 | ||
|
733 | $comment.addClass('comment-deleting'); | |
|
734 | $comment.hide('fast'); | |
|
735 | ||
|
736 | var success = function(response) { | |
|
737 | $comment.remove(); | |
|
738 | return false; | |
|
739 | }; | |
|
740 | var failure = function(data, textStatus, xhr) { | |
|
741 | alert("error processing request: " + textStatus); | |
|
742 | $comment.show('fast'); | |
|
743 | $comment.removeClass('comment-deleting'); | |
|
744 | return false; | |
|
745 | }; | |
|
746 | ajaxPOST(url, postData, success, failure); | |
|
747 | } | |
|
748 | this.toggleComments = function(node, show) { | |
|
749 | var $filediff = $(node).closest('.filediff'); | |
|
750 | if (show === true) { | |
|
751 | $filediff.removeClass('hide-comments'); | |
|
752 | } else if (show === false) { | |
|
753 | $filediff.find('.hide-line-comments').removeClass('hide-line-comments'); | |
|
754 | $filediff.addClass('hide-comments'); | |
|
755 | } else { | |
|
756 | $filediff.find('.hide-line-comments').removeClass('hide-line-comments'); | |
|
757 | $filediff.toggleClass('hide-comments'); | |
|
758 | } | |
|
759 | return false; | |
|
760 | } | |
|
761 | this.toggleLineComments = function(node) { | |
|
762 | self.toggleComments(node, true); | |
|
763 | var $node = $(node); | |
|
764 | $node.closest('tr').toggleClass('hide-line-comments'); | |
|
765 | } | |
|
766 | this.createComment = function(node) { | |
|
767 | var $node = $(node); | |
|
768 | var $td = $node.closest('td'); | |
|
769 | var $form = $td.find('.comment-inline-form'); | |
|
770 | ||
|
771 | if (!$form.length) { | |
|
772 | var tmpl = $('#cb-comment-inline-form-template').html(); | |
|
773 | var $filediff = $node.closest('.filediff'); | |
|
774 | $filediff.removeClass('hide-comments'); | |
|
775 | var f_path = $filediff.attr('data-f-path'); | |
|
776 | var lineno = self.getLineNumber(node); | |
|
777 | tmpl = tmpl.format(f_path, lineno); | |
|
778 | $form = $(tmpl); | |
|
779 | ||
|
780 | var $comments = $td.find('.inline-comments'); | |
|
781 | if (!$comments.length) { | |
|
782 | $comments = $( | |
|
783 | $('#cb-comments-inline-container-template').html()); | |
|
784 | $td.append($comments); | |
|
785 | } | |
|
786 | ||
|
787 | $td.find('.cb-comment-add-button').before($form); | |
|
788 | ||
|
789 | var pullRequestId = templateContext.pull_request_data.pull_request_id; | |
|
790 | var commitId = templateContext.commit_data.commit_id; | |
|
791 | var _form = $form[0]; | |
|
792 | var commentForm = new CommentForm(_form, commitId, pullRequestId, lineno, false); | |
|
793 | var cm = commentForm.getCmInstance(); | |
|
794 | ||
|
795 | // set a CUSTOM submit handler for inline comments. | |
|
796 | commentForm.setHandleFormSubmit(function(o) { | |
|
797 | var text = commentForm.cm.getValue(); | |
|
798 | ||
|
799 | if (text === "") { | |
|
800 | return; | |
|
801 | } | |
|
802 | ||
|
803 | if (lineno === undefined) { | |
|
804 | alert('missing line !'); | |
|
805 | return; | |
|
806 | } | |
|
807 | if (f_path === undefined) { | |
|
808 | alert('missing file path !'); | |
|
809 | return; | |
|
810 | } | |
|
811 | ||
|
812 | var excludeCancelBtn = false; | |
|
813 | var submitEvent = true; | |
|
814 | commentForm.setActionButtonsDisabled(true, excludeCancelBtn, submitEvent); | |
|
815 | commentForm.cm.setOption("readOnly", true); | |
|
816 | var postData = { | |
|
817 | 'text': text, | |
|
818 | 'f_path': f_path, | |
|
819 | 'line': lineno, | |
|
820 | 'csrf_token': CSRF_TOKEN | |
|
821 | }; | |
|
822 | var submitSuccessCallback = function(json_data) { | |
|
823 | $form.remove(); | |
|
824 | console.log(json_data) | |
|
825 | try { | |
|
826 | var html = json_data.rendered_text; | |
|
827 | var lineno = json_data.line_no; | |
|
828 | var target_id = json_data.target_id; | |
|
829 | ||
|
830 | $comments.find('.cb-comment-add-button').before(html); | |
|
831 | console.log(lineno, target_id, $comments); | |
|
832 | ||
|
833 | } catch (e) { | |
|
834 | console.error(e); | |
|
835 | } | |
|
836 | ||
|
837 | ||
|
838 | // re trigger the linkification of next/prev navigation | |
|
839 | linkifyComments($('.inline-comment-injected')); | |
|
840 | timeagoActivate(); | |
|
841 | bindDeleteCommentButtons(); | |
|
842 | commentForm.setActionButtonsDisabled(false); | |
|
843 | ||
|
844 | }; | |
|
845 | var submitFailCallback = function(){ | |
|
846 | commentForm.resetCommentFormState(text) | |
|
847 | }; | |
|
848 | commentForm.submitAjaxPOST( | |
|
849 | commentForm.submitUrl, postData, submitSuccessCallback, submitFailCallback); | |
|
850 | }); | |
|
851 | ||
|
852 | setTimeout(function() { | |
|
853 | // callbacks | |
|
854 | if (cm !== undefined) { | |
|
855 | cm.focus(); | |
|
856 | } | |
|
857 | }, 10); | |
|
858 | ||
|
859 | $.Topic('/ui/plugins/code/comment_form_built').prepareOrPublish({ | |
|
860 | form: _form, | |
|
861 | parent: $td[0], | |
|
862 | lineno: lineno, | |
|
863 | f_path: f_path} | |
|
864 | ); | |
|
865 | } | |
|
866 | ||
|
867 | $form.addClass('comment-inline-form-open'); | |
|
868 | } | |
|
869 | ||
|
870 | this.renderInlineComments = function(file_comments) { | |
|
871 | show_add_button = typeof show_add_button !== 'undefined' ? show_add_button : true; | |
|
872 | ||
|
873 | for (var i = 0; i < file_comments.length; i++) { | |
|
874 | var box = file_comments[i]; | |
|
875 | ||
|
876 | var target_id = $(box).attr('target_id'); | |
|
877 | ||
|
878 | // actually comments with line numbers | |
|
879 | var comments = box.children; | |
|
880 | ||
|
881 | for (var j = 0; j < comments.length; j++) { | |
|
882 | var data = { | |
|
883 | 'rendered_text': comments[j].outerHTML, | |
|
884 | 'line_no': $(comments[j]).attr('line'), | |
|
885 | 'target_id': target_id | |
|
886 | }; | |
|
887 | } | |
|
888 | } | |
|
889 | ||
|
890 | // since order of injection is random, we're now re-iterating | |
|
891 | // from correct order and filling in links | |
|
892 | linkifyComments($('.inline-comment-injected')); | |
|
893 | bindDeleteCommentButtons(); | |
|
894 | firefoxAnchorFix(); | |
|
895 | }; | |
|
896 | ||
|
897 | } No newline at end of file |
@@ -115,217 +115,6 b" c.template_context['visual']['default_re" | |||
|
115 | 115 | } |
|
116 | 116 | }; |
|
117 | 117 | |
|
118 | ||
|
119 | Rhodecode = (function() { | |
|
120 | function _Rhodecode() { | |
|
121 | this.comments = new (function() { /* comments controller */ | |
|
122 | var self = this; | |
|
123 | ||
|
124 | this.cancelComment = function(node) { | |
|
125 | var $node = $(node); | |
|
126 | var $td = $node.closest('td'); | |
|
127 | $node.closest('.comment-inline-form').removeClass('comment-inline-form-open'); | |
|
128 | return false; | |
|
129 | } | |
|
130 | this.getLineNumber = function(node) { | |
|
131 | var $node = $(node); | |
|
132 | return $node.closest('td').attr('data-line-number'); | |
|
133 | } | |
|
134 | this.scrollToComment = function(node, offset) { | |
|
135 | if (!node) { | |
|
136 | node = $('.comment-selected'); | |
|
137 | if (!node.length) { | |
|
138 | node = $('comment-current') | |
|
139 | } | |
|
140 | } | |
|
141 | $comment = $(node).closest('.comment-current'); | |
|
142 | $comments = $('.comment-current'); | |
|
143 | ||
|
144 | $('.comment-selected').removeClass('comment-selected'); | |
|
145 | ||
|
146 | var nextIdx = $('.comment-current').index($comment) + offset; | |
|
147 | if (nextIdx >= $comments.length) { | |
|
148 | nextIdx = 0; | |
|
149 | } | |
|
150 | var $next = $('.comment-current').eq(nextIdx); | |
|
151 | var $cb = $next.closest('.cb'); | |
|
152 | $cb.removeClass('cb-collapsed') | |
|
153 | ||
|
154 | var $filediffCollapseState = $cb.closest('.filediff').prev(); | |
|
155 | $filediffCollapseState.prop('checked', false); | |
|
156 | $next.addClass('comment-selected'); | |
|
157 | scrollToElement($next); | |
|
158 | return false; | |
|
159 | } | |
|
160 | this.nextComment = function(node) { | |
|
161 | return self.scrollToComment(node, 1); | |
|
162 | } | |
|
163 | this.prevComment = function(node) { | |
|
164 | return self.scrollToComment(node, -1); | |
|
165 | } | |
|
166 | this.deleteComment = function(node) { | |
|
167 | if (!confirm(_gettext('Delete this comment?'))) { | |
|
168 | return false; | |
|
169 | } | |
|
170 | var $node = $(node); | |
|
171 | var $td = $node.closest('td'); | |
|
172 | var $comment = $node.closest('.comment'); | |
|
173 | var comment_id = $comment.attr('data-comment-id'); | |
|
174 | var url = AJAX_COMMENT_DELETE_URL.replace('__COMMENT_ID__', comment_id); | |
|
175 | var postData = { | |
|
176 | '_method': 'delete', | |
|
177 | 'csrf_token': CSRF_TOKEN | |
|
178 | }; | |
|
179 | ||
|
180 | $comment.addClass('comment-deleting'); | |
|
181 | $comment.hide('fast'); | |
|
182 | ||
|
183 | var success = function(response) { | |
|
184 | $comment.remove(); | |
|
185 | return false; | |
|
186 | }; | |
|
187 | var failure = function(data, textStatus, xhr) { | |
|
188 | alert("error processing request: " + textStatus); | |
|
189 | $comment.show('fast'); | |
|
190 | $comment.removeClass('comment-deleting'); | |
|
191 | return false; | |
|
192 | }; | |
|
193 | ajaxPOST(url, postData, success, failure); | |
|
194 | } | |
|
195 | this.createComment = function(node) { | |
|
196 | var $node = $(node); | |
|
197 | var $td = $node.closest('td'); | |
|
198 | var $form = $td.find('.comment-inline-form'); | |
|
199 | ||
|
200 | if (!$form.length) { | |
|
201 | var tmpl = $('#cb-comment-inline-form-template').html(); | |
|
202 | var f_path = $node.closest('.filediff').attr('data-f-path'); | |
|
203 | var lineno = self.getLineNumber(node); | |
|
204 | tmpl = tmpl.format(f_path, lineno); | |
|
205 | $form = $(tmpl); | |
|
206 | ||
|
207 | var $comments = $td.find('.inline-comments'); | |
|
208 | if (!$comments.length) { | |
|
209 | $comments = $( | |
|
210 | $('#cb-comments-inline-container-template').html()); | |
|
211 | $td.append($comments); | |
|
212 | } | |
|
213 | ||
|
214 | $td.find('.cb-comment-add-button').before($form); | |
|
215 | ||
|
216 | var pullRequestId = templateContext.pull_request_data.pull_request_id; | |
|
217 | var commitId = templateContext.commit_data.commit_id; | |
|
218 | var _form = $form[0]; | |
|
219 | var commentForm = new CommentForm(_form, commitId, pullRequestId, lineno, false); | |
|
220 | var cm = commentForm.getCmInstance(); | |
|
221 | ||
|
222 | // set a CUSTOM submit handler for inline comments. | |
|
223 | commentForm.setHandleFormSubmit(function(o) { | |
|
224 | var text = commentForm.cm.getValue(); | |
|
225 | ||
|
226 | if (text === "") { | |
|
227 | return; | |
|
228 | } | |
|
229 | ||
|
230 | if (lineno === undefined) { | |
|
231 | alert('missing line !'); | |
|
232 | return; | |
|
233 | } | |
|
234 | if (f_path === undefined) { | |
|
235 | alert('missing file path !'); | |
|
236 | return; | |
|
237 | } | |
|
238 | ||
|
239 | var excludeCancelBtn = false; | |
|
240 | var submitEvent = true; | |
|
241 | commentForm.setActionButtonsDisabled(true, excludeCancelBtn, submitEvent); | |
|
242 | commentForm.cm.setOption("readOnly", true); | |
|
243 | var postData = { | |
|
244 | 'text': text, | |
|
245 | 'f_path': f_path, | |
|
246 | 'line': lineno, | |
|
247 | 'csrf_token': CSRF_TOKEN | |
|
248 | }; | |
|
249 | var submitSuccessCallback = function(json_data) { | |
|
250 | $form.remove(); | |
|
251 | console.log(json_data) | |
|
252 | try { | |
|
253 | var html = json_data.rendered_text; | |
|
254 | var lineno = json_data.line_no; | |
|
255 | var target_id = json_data.target_id; | |
|
256 | ||
|
257 | $comments.find('.cb-comment-add-button').before(html); | |
|
258 | console.log(lineno, target_id, $comments); | |
|
259 | ||
|
260 | } catch (e) { | |
|
261 | console.error(e); | |
|
262 | } | |
|
263 | ||
|
264 | ||
|
265 | // re trigger the linkification of next/prev navigation | |
|
266 | linkifyComments($('.inline-comment-injected')); | |
|
267 | timeagoActivate(); | |
|
268 | bindDeleteCommentButtons(); | |
|
269 | commentForm.setActionButtonsDisabled(false); | |
|
270 | ||
|
271 | }; | |
|
272 | var submitFailCallback = function(){ | |
|
273 | commentForm.resetCommentFormState(text) | |
|
274 | }; | |
|
275 | commentForm.submitAjaxPOST( | |
|
276 | commentForm.submitUrl, postData, submitSuccessCallback, submitFailCallback); | |
|
277 | }); | |
|
278 | ||
|
279 | setTimeout(function() { | |
|
280 | // callbacks | |
|
281 | if (cm !== undefined) { | |
|
282 | cm.focus(); | |
|
283 | } | |
|
284 | }, 10); | |
|
285 | ||
|
286 | $.Topic('/ui/plugins/code/comment_form_built').prepareOrPublish({ | |
|
287 | form: _form, | |
|
288 | parent: $td[0], | |
|
289 | lineno: lineno, | |
|
290 | f_path: f_path} | |
|
291 | ); | |
|
292 | } | |
|
293 | ||
|
294 | $form.addClass('comment-inline-form-open'); | |
|
295 | } | |
|
296 | ||
|
297 | this.renderInlineComments = function(file_comments) { | |
|
298 | show_add_button = typeof show_add_button !== 'undefined' ? show_add_button : true; | |
|
299 | ||
|
300 | for (var i = 0; i < file_comments.length; i++) { | |
|
301 | var box = file_comments[i]; | |
|
302 | ||
|
303 | var target_id = $(box).attr('target_id'); | |
|
304 | ||
|
305 | // actually comments with line numbers | |
|
306 | var comments = box.children; | |
|
307 | ||
|
308 | for (var j = 0; j < comments.length; j++) { | |
|
309 | var data = { | |
|
310 | 'rendered_text': comments[j].outerHTML, | |
|
311 | 'line_no': $(comments[j]).attr('line'), | |
|
312 | 'target_id': target_id | |
|
313 | }; | |
|
314 | } | |
|
315 | } | |
|
316 | ||
|
317 | // since order of injection is random, we're now re-iterating | |
|
318 | // from correct order and filling in links | |
|
319 | linkifyComments($('.inline-comment-injected')); | |
|
320 | bindDeleteCommentButtons(); | |
|
321 | firefoxAnchorFix(); | |
|
322 | }; | |
|
323 | ||
|
324 | })(); | |
|
325 | } | |
|
326 | return new _Rhodecode(); | |
|
327 | })(); | |
|
328 | ||
|
329 | 118 | </script> |
|
330 | 119 | <%include file="/base/plugins_base.html"/> |
|
331 | 120 | <!--[if lt IE 9]> |
@@ -342,6 +131,13 b' Rhodecode = (function() {' | |||
|
342 | 131 | ${self.js_extra()} |
|
343 | 132 | |
|
344 | 133 | <script type="text/javascript"> |
|
134 | Rhodecode = (function() { | |
|
135 | function _Rhodecode() { | |
|
136 | this.comments = new CommentsController(); | |
|
137 | } | |
|
138 | return new _Rhodecode(); | |
|
139 | })(); | |
|
140 | ||
|
345 | 141 | $(document).ready(function(){ |
|
346 | 142 | show_more_event(); |
|
347 | 143 | timeagoActivate(); |
@@ -192,7 +192,7 b' collapse_all = len(diffset.files) > coll' | |||
|
192 | 192 | %endif |
|
193 | 193 | %if over_lines_changed_limit: |
|
194 | 194 | <tr class="cb-warning cb-collapser"> |
|
195 |
<td class="cb-text" ${c.diffmode == 'unified' and 'colspan= |
|
|
195 | <td class="cb-text" ${c.diffmode == 'unified' and 'colspan=4' or 'colspan=4'}> | |
|
196 | 196 | ${_('This diff has been collapsed as it changes many lines, (%i lines changed)' % lines_changed)} |
|
197 | 197 | <a href="#" class="cb-expand" |
|
198 | 198 | onclick="$(this).closest('table').removeClass('cb-collapsed'); return false;">${_('Show them')} |
@@ -205,20 +205,20 b' collapse_all = len(diffset.files) > coll' | |||
|
205 | 205 | %endif |
|
206 | 206 | %if filediff.patch['is_limited_diff']: |
|
207 | 207 | <tr class="cb-warning cb-collapser"> |
|
208 |
<td class="cb-text" ${c.diffmode == 'unified' and 'colspan= |
|
|
208 | <td class="cb-text" ${c.diffmode == 'unified' and 'colspan=4' or 'colspan=4'}> | |
|
209 | 209 | ${_('The requested commit is too big and content was truncated.')} <a href="${link_for(fulldiff=1)}" onclick="return confirm('${_("Showing a big diff might take some time and resources, continue?")}')">${_('Show full diff')}</a> |
|
210 | 210 | </td> |
|
211 | 211 | </tr> |
|
212 | 212 | %endif |
|
213 | 213 | %for hunk in filediff.hunks: |
|
214 | 214 | <tr class="cb-hunk"> |
|
215 |
<td ${c.diffmode == 'unified' and 'colspan= |
|
|
215 | <td ${c.diffmode == 'unified' and 'colspan=3' or ''}> | |
|
216 | 216 | ## TODO: dan: add ajax loading of more context here |
|
217 | 217 | ## <a href="#"> |
|
218 | 218 | <i class="icon-more"></i> |
|
219 | 219 | ## </a> |
|
220 | 220 | </td> |
|
221 |
<td ${c.diffmode == 'sideside' and 'colspan= |
|
|
221 | <td ${c.diffmode == 'sideside' and 'colspan=5' or ''}> | |
|
222 | 222 | @@ |
|
223 | 223 | -${hunk.source_start},${hunk.source_length} |
|
224 | 224 | +${hunk.target_start},${hunk.target_length} |
@@ -377,7 +377,7 b' from rhodecode.lib.diffs import NEW_FILE' | |||
|
377 | 377 | |
|
378 | 378 | |
|
379 | 379 | %if use_comments: |
|
380 | <a href="#" onclick="$(this).closest('.filediff').toggleClass('hide-comments'); return false;"> | |
|
380 | <a href="#" onclick="return Rhodecode.comments.toggleComments(this);"> | |
|
381 | 381 | <span class="show-comment-button">${_('Show comments')}</span><span class="hide-comment-button">${_('Hide comments')}</span> |
|
382 | 382 | </a> |
|
383 | 383 | %endif |
@@ -410,6 +410,15 b' from rhodecode.lib.diffs import NEW_FILE' | |||
|
410 | 410 | new_line_anchor = diff_line_anchor(hunk.filediff.target_file_path, line.modified.lineno, 'n') |
|
411 | 411 | %> |
|
412 | 412 | <tr class="cb-line"> |
|
413 | <td class="cb-data ${action_class(line.original.action)}" | |
|
414 | data-line-number="${line.original.lineno}" | |
|
415 | > | |
|
416 | <div> | |
|
417 | %if line.original.comments: | |
|
418 | <i class="icon-comment" onclick="return Rhodecode.comments.toggleLineComments(this)"></i> | |
|
419 | %endif | |
|
420 | </div> | |
|
421 | </td> | |
|
413 | 422 | <td class="cb-lineno ${action_class(line.original.action)}" |
|
414 | 423 | data-line-number="${line.original.lineno}" |
|
415 | 424 | %if old_line_anchor: |
@@ -431,6 +440,15 b' from rhodecode.lib.diffs import NEW_FILE' | |||
|
431 | 440 | ${inline_comments_container(line.original.comments)} |
|
432 | 441 | %endif |
|
433 | 442 | </td> |
|
443 | <td class="cb-data ${action_class(line.modified.action)}" | |
|
444 | data-line-number="${line.modified.lineno}" | |
|
445 | > | |
|
446 | <div> | |
|
447 | %if line.modified.comments: | |
|
448 | <i class="icon-comment" onclick="return Rhodecode.comments.toggleLineComments(this)"></i> | |
|
449 | %endif | |
|
450 | </div> | |
|
451 | </td> | |
|
434 | 452 | <td class="cb-lineno ${action_class(line.modified.action)}" |
|
435 | 453 | data-line-number="${line.modified.lineno}" |
|
436 | 454 | %if new_line_anchor: |
@@ -467,6 +485,13 b' from rhodecode.lib.diffs import NEW_FILE' | |||
|
467 | 485 | new_line_anchor = diff_line_anchor(hunk.filediff.target_file_path, new_line_no, 'n') |
|
468 | 486 | %> |
|
469 | 487 | <tr class="cb-line"> |
|
488 | <td class="cb-data ${action_class(action)}"> | |
|
489 | <div> | |
|
490 | %if comments: | |
|
491 | <i class="icon-comment" onclick="return Rhodecode.comments.toggleLineComments(this)"></i> | |
|
492 | %endif | |
|
493 | </div> | |
|
494 | </td> | |
|
470 | 495 | <td class="cb-lineno ${action_class(action)}" |
|
471 | 496 | data-line-number="${old_line_no}" |
|
472 | 497 | %if old_line_anchor: |
@@ -506,7 +531,7 b' from rhodecode.lib.diffs import NEW_FILE' | |||
|
506 | 531 | <button |
|
507 | 532 | class="btn btn-small btn-primary cb-comment-box-opener" |
|
508 | 533 | onclick="return Rhodecode.comments.createComment(this)" |
|
509 | >+</button> | |
|
534 | ><span>+</span></button> | |
|
510 | 535 | </%def> |
|
511 | 536 | |
|
512 | 537 | <%def name="render_diffset_menu()"> |
General Comments 0
You need to be logged in to leave comments.
Login now