<%inherit file="/base/base.mako"/> <%namespace name="base" file="/base/base.mako"/> <%def name="title()"> ${_('%s Pull Request #%s') % (c.repo_name, c.pull_request.pull_request_id)} %if c.rhodecode_name: · ${h.branding(c.rhodecode_name)} %endif </%def> <%def name="breadcrumbs_links()"> <span id="pr-title"> ${c.pull_request.title} %if c.pull_request.is_closed(): (${_('Closed')}) %endif </span> <div id="pr-title-edit" class="input" style="display: none;"> ${h.text('pullrequest_title', id_="pr-title-input", class_="large", value=c.pull_request.title)} </div> </%def> <%def name="menu_bar_nav()"> ${self.menu_items(active='repositories')} </%def> <%def name="menu_bar_subnav()"> ${self.repo_menu(active='showpullrequest')} </%def> <%def name="main()"> <script type="text/javascript"> // TODO: marcink switch this to pyroutes AJAX_COMMENT_DELETE_URL = "${h.route_path('pullrequest_comment_delete',repo_name=c.repo_name,pull_request_id=c.pull_request.pull_request_id,comment_id='__COMMENT_ID__')}"; templateContext.pull_request_data.pull_request_id = ${c.pull_request.pull_request_id}; </script> <div class="box"> <div class="title"> ${self.repo_page_title(c.rhodecode_db_repo)} </div> ${self.breadcrumbs()} <div class="box pr-summary"> <div class="summary-details block-left"> <% summary = lambda n:{False:'summary-short'}.get(n) %> <div class="pr-details-title"> <a href="${h.route_path('pull_requests_global', pull_request_id=c.pull_request.pull_request_id)}">${_('Pull request #%s') % c.pull_request.pull_request_id}</a> ${_('From')} ${h.format_date(c.pull_request.created_on)} %if c.allowed_to_update: <div id="delete_pullrequest" class="pull-right action_button ${'' if c.allowed_to_delete else 'disabled' }" style="clear:inherit;padding: 0"> % if c.allowed_to_delete: ${h.secure_form(h.route_path('pullrequest_delete', repo_name=c.pull_request.target_repo.repo_name, pull_request_id=c.pull_request.pull_request_id), request=request)} ${h.submit('remove_%s' % c.pull_request.pull_request_id, _('Delete'), class_="btn btn-link btn-danger no-margin",onclick="return confirm('"+_('Confirm to delete this pull request')+"');")} ${h.end_form()} % else: ${_('Delete')} % endif </div> <div id="open_edit_pullrequest" class="pull-right action_button">${_('Edit')}</div> <div id="close_edit_pullrequest" class="pull-right action_button" style="display: none;padding: 0">${_('Cancel')}</div> %endif </div> <div id="summary" class="fields pr-details-content"> <div class="field"> <div class="label-summary"> <label>${_('Source')}:</label> </div> <div class="input"> <div class="pr-origininfo"> ## branch link is only valid if it is a branch <span class="tag"> %if c.pull_request.source_ref_parts.type == 'branch': <a href="${h.route_path('repo_changelog', repo_name=c.pull_request.source_repo.repo_name, _query=dict(branch=c.pull_request.source_ref_parts.name))}">${c.pull_request.source_ref_parts.type}: ${c.pull_request.source_ref_parts.name}</a> %else: ${c.pull_request.source_ref_parts.type}: ${c.pull_request.source_ref_parts.name} %endif </span> <span class="clone-url"> <a href="${h.route_path('repo_summary', repo_name=c.pull_request.source_repo.repo_name)}">${c.pull_request.source_repo.clone_url()}</a> </span> <br/> % if c.ancestor_commit: ${_('Common ancestor')}: <code><a href="${h.route_path('repo_commit', repo_name=c.target_repo.repo_name, commit_id=c.ancestor_commit.raw_id)}">${h.show_id(c.ancestor_commit)}</a></code> % endif </div> %if h.is_hg(c.pull_request.source_repo): <% clone_url = 'hg pull -r {} {}'.format(h.short_id(c.source_ref), c.pull_request.source_repo.clone_url()) %> %elif h.is_git(c.pull_request.source_repo): <% clone_url = 'git pull {} {}'.format(c.pull_request.source_repo.clone_url(), c.pull_request.source_ref_parts.name) %> %endif <div class=""> <input type="text" class="input-monospace pr-pullinfo" value="${clone_url}" readonly="readonly"> <i class="tooltip icon-clipboard clipboard-action pull-right pr-pullinfo-copy" data-clipboard-text="${clone_url}" title="${_('Copy the pull url')}"></i> </div> </div> </div> <div class="field"> <div class="label-summary"> <label>${_('Target')}:</label> </div> <div class="input"> <div class="pr-targetinfo"> ## branch link is only valid if it is a branch <span class="tag"> %if c.pull_request.target_ref_parts.type == 'branch': <a href="${h.route_path('repo_changelog', repo_name=c.pull_request.target_repo.repo_name, _query=dict(branch=c.pull_request.target_ref_parts.name))}">${c.pull_request.target_ref_parts.type}: ${c.pull_request.target_ref_parts.name}</a> %else: ${c.pull_request.target_ref_parts.type}: ${c.pull_request.target_ref_parts.name} %endif </span> <span class="clone-url"> <a href="${h.route_path('repo_summary', repo_name=c.pull_request.target_repo.repo_name)}">${c.pull_request.target_repo.clone_url()}</a> </span> </div> </div> </div> ## Link to the shadow repository. <div class="field"> <div class="label-summary"> <label>${_('Merge')}:</label> </div> <div class="input"> % if not c.pull_request.is_closed() and c.pull_request.shadow_merge_ref: %if h.is_hg(c.pull_request.target_repo): <% clone_url = 'hg clone --update {} {} pull-request-{}'.format(c.pull_request.shadow_merge_ref.name, c.shadow_clone_url, c.pull_request.pull_request_id) %> %elif h.is_git(c.pull_request.target_repo): <% clone_url = 'git clone --branch {} {} pull-request-{}'.format(c.pull_request.shadow_merge_ref.name, c.shadow_clone_url, c.pull_request.pull_request_id) %> %endif <div class=""> <input type="text" class="input-monospace pr-mergeinfo" value="${clone_url}" readonly="readonly"> <i class="tooltip icon-clipboard clipboard-action pull-right pr-mergeinfo-copy" data-clipboard-text="${clone_url}" title="${_('Copy the clone url')}"></i> </div> % else: <div class=""> ${_('Shadow repository data not available')}. </div> % endif </div> </div> <div class="field"> <div class="label-summary"> <label>${_('Review')}:</label> </div> <div class="input"> %if c.pull_request_review_status: <div class="${'flag_status %s' % c.pull_request_review_status} tooltip pull-left"></div> <span class="changeset-status-lbl tooltip"> %if c.pull_request.is_closed(): ${_('Closed')}, %endif ${h.commit_status_lbl(c.pull_request_review_status)} </span> - ${_ungettext('calculated based on %s reviewer vote', 'calculated based on %s reviewers votes', len(c.pull_request_reviewers)) % len(c.pull_request_reviewers)} %endif </div> </div> <div class="field"> <div class="pr-description-label label-summary"> <label>${_('Description')}:</label> </div> <div id="pr-desc" class="input"> <div class="pr-description">${h.urlify_commit_message(c.pull_request.description, c.repo_name)}</div> </div> <div id="pr-desc-edit" class="input textarea editor" style="display: none;"> <textarea id="pr-description-input" size="30">${c.pull_request.description}</textarea> </div> </div> <div class="field"> <div class="label-summary"> <label>${_('Versions')}:</label> </div> <% outdated_comm_count_ver = len(c.inline_versions[None]['outdated']) %> <% general_outdated_comm_count_ver = len(c.comment_versions[None]['outdated']) %> <div class="pr-versions"> % if c.show_version_changes: <% outdated_comm_count_ver = len(c.inline_versions[c.at_version_num]['outdated']) %> <% general_outdated_comm_count_ver = len(c.comment_versions[c.at_version_num]['outdated']) %> <a id="show-pr-versions" class="input" onclick="return versionController.toggleVersionView(this)" href="#show-pr-versions" data-toggle-on="${_ungettext('{} version available for this pull request, show it.', '{} versions available for this pull request, show them.', len(c.versions)).format(len(c.versions))}" data-toggle-off="${_('Hide all versions of this pull request')}"> ${_ungettext('{} version available for this pull request, show it.', '{} versions available for this pull request, show them.', len(c.versions)).format(len(c.versions))} </a> <table> ## SHOW ALL VERSIONS OF PR <% ver_pr = None %> % for data in reversed(list(enumerate(c.versions, 1))): <% ver_pos = data[0] %> <% ver = data[1] %> <% ver_pr = ver.pull_request_version_id %> <% display_row = '' if c.at_version and (c.at_version_num == ver_pr or c.from_version_num == ver_pr) else 'none' %> <tr class="version-pr" style="display: ${display_row}"> <td> <code> <a href="${request.current_route_path(_query=dict(version=ver_pr or 'latest'))}">v${ver_pos}</a> </code> </td> <td> <input ${'checked="checked"' if c.from_version_num == ver_pr else ''} class="compare-radio-button" type="radio" name="ver_source" value="${ver_pr or 'latest'}" data-ver-pos="${ver_pos}"/> <input ${'checked="checked"' if c.at_version_num == ver_pr else ''} class="compare-radio-button" type="radio" name="ver_target" value="${ver_pr or 'latest'}" data-ver-pos="${ver_pos}"/> </td> <td> <% review_status = c.review_versions[ver_pr].status if ver_pr in c.review_versions else 'not_reviewed' %> <div class="${'flag_status %s' % review_status} tooltip pull-left" title="${_('Your review status at this version')}"> </div> </td> <td> % if c.at_version_num != ver_pr: <i class="icon-comment"></i> <code class="tooltip" title="${_('Comment from pull request version {0}, general:{1} inline:{2}').format(ver_pos, len(c.comment_versions[ver_pr]['at']), len(c.inline_versions[ver_pr]['at']))}"> G:${len(c.comment_versions[ver_pr]['at'])} / I:${len(c.inline_versions[ver_pr]['at'])} </code> % endif </td> <td> ##<code>${ver.source_ref_parts.commit_id[:6]}</code> </td> <td> ${h.age_component(ver.updated_on, time_is_local=True)} </td> </tr> % endfor <tr> <td colspan="6"> <button id="show-version-diff" onclick="return versionController.showVersionDiff()" class="btn btn-sm" style="display: none" data-label-text-locked="${_('select versions to show changes')}" data-label-text-diff="${_('show changes between versions')}" data-label-text-show="${_('show pull request for this version')}" > ${_('select versions to show changes')} </button> </td> </tr> ## show comment/inline comments summary <%def name="comments_summary()"> <tr> <td colspan="6" class="comments-summary-td"> % if c.at_version: <% inline_comm_count_ver = len(c.inline_versions[c.at_version_num]['display']) %> <% general_comm_count_ver = len(c.comment_versions[c.at_version_num]['display']) %> ${_('Comments at this version')}: % else: <% inline_comm_count_ver = len(c.inline_versions[c.at_version_num]['until']) %> <% general_comm_count_ver = len(c.comment_versions[c.at_version_num]['until']) %> ${_('Comments for this pull request')}: % endif %if general_comm_count_ver: <a href="#comments">${_("%d General ") % general_comm_count_ver}</a> %else: ${_("%d General ") % general_comm_count_ver} %endif %if inline_comm_count_ver: , <a href="#" onclick="return Rhodecode.comments.nextComment();" id="inline-comments-counter">${_("%d Inline") % inline_comm_count_ver}</a> %else: , ${_("%d Inline") % inline_comm_count_ver} %endif %if outdated_comm_count_ver: , <a href="#" onclick="showOutdated(); Rhodecode.comments.nextOutdatedComment(); return false;">${_("%d Outdated") % outdated_comm_count_ver}</a> <a href="#" class="showOutdatedComments" onclick="showOutdated(this); return false;"> | ${_('show outdated comments')}</a> <a href="#" class="hideOutdatedComments" style="display: none" onclick="hideOutdated(this); return false;"> | ${_('hide outdated comments')}</a> %else: , ${_("%d Outdated") % outdated_comm_count_ver} %endif </td> </tr> </%def> ${comments_summary()} </table> % else: <div class="input"> ${_('Pull request versions not available')}. </div> <div> <table> ${comments_summary()} </table> </div> % endif </div> </div> <div id="pr-save" class="field" style="display: none;"> <div class="label-summary"></div> <div class="input"> <span id="edit_pull_request" class="btn btn-small no-margin">${_('Save Changes')}</span> </div> </div> </div> </div> <div> ## AUTHOR <div class="reviewers-title block-right"> <div class="pr-details-title"> ${_('Author of this pull request')} </div> </div> <div class="block-right pr-details-content reviewers"> <ul class="group_members"> <li> ${self.gravatar_with_user(c.pull_request.author.email, 16)} </li> </ul> </div> ## REVIEW RULES <div id="review_rules" style="display: none" class="reviewers-title block-right"> <div class="pr-details-title"> ${_('Reviewer rules')} %if c.allowed_to_update: <span id="close_edit_reviewers" class="block-right action_button last-item" style="display: none;">${_('Close')}</span> %endif </div> <div class="pr-reviewer-rules"> ## review rules will be appended here, by default reviewers logic </div> <input id="review_data" type="hidden" name="review_data" value=""> </div> ## REVIEWERS <div class="reviewers-title block-right"> <div class="pr-details-title"> ${_('Pull request reviewers')} %if c.allowed_to_update: <span id="open_edit_reviewers" class="block-right action_button last-item">${_('Edit')}</span> %endif </div> </div> <div id="reviewers" class="block-right pr-details-content reviewers"> ## members redering block <input type="hidden" name="__start__" value="review_members:sequence"> <ul id="review_members" class="group_members"> % for review_obj, member, reasons, mandatory, status in c.pull_request_reviewers: <script> var member = ${h.json.dumps(h.reviewer_as_json(member, reasons=reasons, mandatory=mandatory, user_group=review_obj.rule_user_group_data()))|n}; var status = "${(status[0][1].status if status else 'not_reviewed')}"; var status_lbl = "${h.commit_status_lbl(status[0][1].status if status else 'not_reviewed')}"; var allowed_to_update = ${h.json.dumps(c.allowed_to_update)}; var entry = renderTemplate('reviewMemberEntry', { 'member': member, 'mandatory': member.mandatory, 'reasons': member.reasons, 'allowed_to_update': allowed_to_update, 'review_status': status, 'review_status_label': status_lbl, 'user_group': member.user_group, 'create': false }); $('#review_members').append(entry) </script> % endfor </ul> <input type="hidden" name="__end__" value="review_members:sequence"> ## end members redering block %if not c.pull_request.is_closed(): <div id="add_reviewer" class="ac" style="display: none;"> %if c.allowed_to_update: % if not c.forbid_adding_reviewers: <div id="add_reviewer_input" class="reviewer_ac"> ${h.text('user', class_='ac-input', placeholder=_('Add reviewer or reviewer group'))} <div id="reviewers_container"></div> </div> % endif <div class="pull-right"> <button id="update_pull_request" class="btn btn-small no-margin">${_('Save Changes')}</button> </div> %endif </div> %endif </div> </div> </div> <div class="box"> ##DIFF <div class="table" > <div id="changeset_compare_view_content"> ##CS % if c.missing_requirements: <div class="box"> <div class="alert alert-warning"> <div> <strong>${_('Missing requirements:')}</strong> ${_('These commits cannot be displayed, because this repository uses the Mercurial largefiles extension, which was not enabled.')} </div> </div> </div> % elif c.missing_commits: <div class="box"> <div class="alert alert-warning"> <div> <strong>${_('Missing commits')}:</strong> ${_('This pull request cannot be displayed, because one or more commits no longer exist in the source repository.')} ${_('Please update this pull request, push the commits back into the source repository, or consider closing this pull request.')} </div> </div> </div> % endif <div class="compare_view_commits_title"> % if not c.compare_mode: % if c.at_version_pos: <h4> ${_('Showing changes at v%d, commenting is disabled.') % c.at_version_pos} </h4> % endif <div class="pull-left"> <div class="btn-group"> <a class="btn" href="#" onclick="$('.compare_select').show();$('.compare_select_hidden').hide(); return false"> ${_ungettext('Expand %s commit','Expand %s commits', len(c.commit_ranges)) % len(c.commit_ranges)} </a> <a class="btn" href="#" onclick="$('.compare_select').hide();$('.compare_select_hidden').show(); return false"> ${_ungettext('Collapse %s commit','Collapse %s commits', len(c.commit_ranges)) % len(c.commit_ranges)} </a> </div> </div> <div class="pull-right"> % if c.allowed_to_update and not c.pull_request.is_closed(): <a id="update_commits" class="btn btn-primary no-margin pull-right">${_('Update commits')}</a> % else: <a class="tooltip btn disabled pull-right" disabled="disabled" title="${_('Update is disabled for current view')}">${_('Update commits')}</a> % endif </div> % endif </div> % if not c.missing_commits: % if c.compare_mode: % if c.at_version: <h4> ${_('Commits and changes between v{ver_from} and {ver_to} of this pull request, commenting is disabled').format(ver_from=c.from_version_pos, ver_to=c.at_version_pos if c.at_version_pos else 'latest')}: </h4> <div class="subtitle-compare"> ${_('commits added: {}, removed: {}').format(len(c.commit_changes_summary.added), len(c.commit_changes_summary.removed))} </div> <div class="container"> <table class="rctable compare_view_commits"> <tr> <th></th> <th>${_('Time')}</th> <th>${_('Author')}</th> <th>${_('Commit')}</th> <th></th> <th>${_('Description')}</th> </tr> % for c_type, commit in c.commit_changes: % if c_type in ['a', 'r']: <% if c_type == 'a': cc_title = _('Commit added in displayed changes') elif c_type == 'r': cc_title = _('Commit removed in displayed changes') else: cc_title = '' %> <tr id="row-${commit.raw_id}" commit_id="${commit.raw_id}" class="compare_select"> <td> <div class="commit-change-indicator color-${c_type}-border"> <div class="commit-change-content color-${c_type} tooltip" title="${h.tooltip(cc_title)}"> ${c_type.upper()} </div> </div> </td> <td class="td-time"> ${h.age_component(commit.date)} </td> <td class="td-user"> ${base.gravatar_with_user(commit.author, 16)} </td> <td class="td-hash"> <code> <a href="${h.route_path('repo_commit', repo_name=c.target_repo.repo_name, commit_id=commit.raw_id)}"> r${commit.revision}:${h.short_id(commit.raw_id)} </a> ${h.hidden('revisions', commit.raw_id)} </code> </td> <td class="expand_commit" data-commit-id="${commit.raw_id}" title="${_( 'Expand commit message')}"> <div class="show_more_col"> <i class="show_more"></i> </div> </td> <td class="mid td-description"> <div class="log-container truncate-wrap"> <div class="message truncate" id="c-${commit.raw_id}" data-message-raw="${commit.message}"> ${h.urlify_commit_message(commit.message, c.repo_name)} </div> </div> </td> </tr> % endif % endfor </table> </div> <script> $('.expand_commit').on('click',function(e){ var target_expand = $(this); var cid = target_expand.data('commitId'); if (target_expand.hasClass('open')){ $('#c-'+cid).css({ 'height': '1.5em', 'white-space': 'nowrap', 'text-overflow': 'ellipsis', 'overflow':'hidden' }); target_expand.removeClass('open'); } else { $('#c-'+cid).css({ 'height': 'auto', 'white-space': 'pre-line', 'text-overflow': 'initial', 'overflow':'visible' }); target_expand.addClass('open'); } }); </script> % endif % else: <%include file="/compare/compare_commits.mako" /> % endif <div class="cs_files"> <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/> ${cbdiffs.render_diffset_menu()} ${cbdiffs.render_diffset( c.diffset, use_comments=True, collapse_when_files_over=30, disable_new_comments=not c.allowed_to_comment, deleted_files_comments=c.deleted_files_comments, inline_comments=c.inline_comments)} </div> % else: ## skipping commits we need to clear the view for missing commits <div style="clear:both;"></div> % endif </div> </div> ## template for inline comment form <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/> ## render general comments <div id="comment-tr-show"> <div class="comment"> % if general_outdated_comm_count_ver: <div class="meta"> % if general_outdated_comm_count_ver == 1: ${_('there is {num} general comment from older versions').format(num=general_outdated_comm_count_ver)}, <a href="#show-hidden-comments" onclick="$('.comment-general.comment-outdated').show(); $(this).parent().hide(); return false;">${_('show it')}</a> % else: ${_('there are {num} general comments from older versions').format(num=general_outdated_comm_count_ver)}, <a href="#show-hidden-comments" onclick="$('.comment-general.comment-outdated').show(); $(this).parent().hide(); return false;">${_('show them')}</a> % endif </div> % endif </div> </div> ${comment.generate_comments(c.comments, include_pull_request=True, is_pull_request=True)} % if not c.pull_request.is_closed(): ## merge status, and merge action <div class="pull-request-merge"> <%include file="/pullrequests/pullrequest_merge_checks.mako"/> </div> ## main comment form and it status ${comment.comments(h.route_path('pullrequest_comment_create', repo_name=c.repo_name, pull_request_id=c.pull_request.pull_request_id), c.pull_request_review_status, is_pull_request=True, change_status=c.allowed_to_change_status)} %endif <script type="text/javascript"> if (location.hash) { var result = splitDelimitedHash(location.hash); var line = $('html').find(result.loc); // show hidden comments if we use location.hash if (line.hasClass('comment-general')) { $(line).show(); } else if (line.hasClass('comment-inline')) { $(line).show(); var $cb = $(line).closest('.cb'); $cb.removeClass('cb-collapsed') } if (line.length > 0){ offsetScroll(line, 70); } } versionController = new VersionController(); versionController.init(); reviewersController = new ReviewersController(); $(function(){ // custom code mirror var codeMirrorInstance = initPullRequestsCodeMirror('#pr-description-input'); var PRDetails = { editButton: $('#open_edit_pullrequest'), closeButton: $('#close_edit_pullrequest'), deleteButton: $('#delete_pullrequest'), viewFields: $('#pr-desc, #pr-title'), editFields: $('#pr-desc-edit, #pr-title-edit, #pr-save'), init: function() { var that = this; this.editButton.on('click', function(e) { that.edit(); }); this.closeButton.on('click', function(e) { that.view(); }); }, edit: function(event) { this.viewFields.hide(); this.editButton.hide(); this.deleteButton.hide(); this.closeButton.show(); this.editFields.show(); codeMirrorInstance.refresh(); }, view: function(event) { this.editButton.show(); this.deleteButton.show(); this.editFields.hide(); this.closeButton.hide(); this.viewFields.show(); } }; var ReviewersPanel = { editButton: $('#open_edit_reviewers'), closeButton: $('#close_edit_reviewers'), addButton: $('#add_reviewer'), removeButtons: $('.reviewer_member_remove,.reviewer_member_mandatory_remove'), init: function() { var self = this; this.editButton.on('click', function(e) { self.edit(); }); this.closeButton.on('click', function(e) { self.close(); }); }, edit: function(event) { this.editButton.hide(); this.closeButton.show(); this.addButton.show(); this.removeButtons.css('visibility', 'visible'); // review rules reviewersController.loadReviewRules( ${c.pull_request.reviewer_data_json | n}); }, close: function(event) { this.editButton.show(); this.closeButton.hide(); this.addButton.hide(); this.removeButtons.css('visibility', 'hidden'); // hide review rules reviewersController.hideReviewRules() } }; PRDetails.init(); ReviewersPanel.init(); showOutdated = function(self){ $('.comment-inline.comment-outdated').show(); $('.filediff-outdated').show(); $('.showOutdatedComments').hide(); $('.hideOutdatedComments').show(); }; hideOutdated = function(self){ $('.comment-inline.comment-outdated').hide(); $('.filediff-outdated').hide(); $('.hideOutdatedComments').hide(); $('.showOutdatedComments').show(); }; refreshMergeChecks = function(){ var loadUrl = "${request.current_route_path(_query=dict(merge_checks=1))}"; $('.pull-request-merge').css('opacity', 0.3); $('.action-buttons-extra').css('opacity', 0.3); $('.pull-request-merge').load( loadUrl, function() { $('.pull-request-merge').css('opacity', 1); $('.action-buttons-extra').css('opacity', 1); injectCloseAction(); } ); }; injectCloseAction = function() { var closeAction = $('#close-pull-request-action').html(); var $actionButtons = $('.action-buttons-extra'); // clear the action before $actionButtons.html(""); $actionButtons.html(closeAction); }; closePullRequest = function (status) { // inject closing flag $('.action-buttons-extra').append('<input type="hidden" class="close-pr-input" id="close_pull_request" value="1">'); $(generalCommentForm.statusChange).select2("val", status).trigger('change'); $(generalCommentForm.submitForm).submit(); }; $('#show-outdated-comments').on('click', function(e){ var button = $(this); var outdated = $('.comment-outdated'); if (button.html() === "(Show)") { button.html("(Hide)"); outdated.show(); } else { button.html("(Show)"); outdated.hide(); } }); $('.show-inline-comments').on('change', function(e){ var show = 'none'; var target = e.currentTarget; if(target.checked){ show = '' } var boxid = $(target).attr('id_for'); var comments = $('#{0} .inline-comments'.format(boxid)); var fn_display = function(idx){ $(this).css('display', show); }; $(comments).each(fn_display); var btns = $('#{0} .inline-comments-button'.format(boxid)); $(btns).each(fn_display); }); $('#merge_pull_request_form').submit(function() { if (!$('#merge_pull_request').attr('disabled')) { $('#merge_pull_request').attr('disabled', 'disabled'); } return true; }); $('#edit_pull_request').on('click', function(e){ var title = $('#pr-title-input').val(); var description = codeMirrorInstance.getValue(); editPullRequest( "${c.repo_name}", "${c.pull_request.pull_request_id}", title, description); }); $('#update_pull_request').on('click', function(e){ $(this).attr('disabled', 'disabled'); $(this).addClass('disabled'); $(this).html(_gettext('Saving...')); reviewersController.updateReviewers( "${c.repo_name}", "${c.pull_request.pull_request_id}"); }); $('#update_commits').on('click', function(e){ var isDisabled = !$(e.currentTarget).attr('disabled'); $(e.currentTarget).attr('disabled', 'disabled'); $(e.currentTarget).addClass('disabled'); $(e.currentTarget).removeClass('btn-primary'); $(e.currentTarget).text(_gettext('Updating...')); if(isDisabled){ updateCommits( "${c.repo_name}", "${c.pull_request.pull_request_id}"); } }); // fixing issue with caches on firefox $('#update_commits').removeAttr("disabled"); $('.show-inline-comments').on('click', function(e){ var boxid = $(this).attr('data-comment-id'); var button = $(this); if(button.hasClass("comments-visible")) { $('#{0} .inline-comments'.format(boxid)).each(function(index){ $(this).hide(); }); button.removeClass("comments-visible"); } else { $('#{0} .inline-comments'.format(boxid)).each(function(index){ $(this).show(); }); button.addClass("comments-visible"); } }); // register submit callback on commentForm form to track TODOs window.commentFormGlobalSubmitSuccessCallback = function(){ refreshMergeChecks(); }; // initial injection injectCloseAction(); ReviewerAutoComplete('#user'); }) </script> </div> </div> </%def>