Mercurial > kallithea
changeset 4783:2145dfdc3af3
pullrequests: make top pane one big form with one save button
This will temporarily break the PR update functionality.
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Wed, 21 Jan 2015 17:35:11 +0100 |
parents | 531ff6651672 |
children | d42d7b2a3b2f |
files | kallithea/config/routing.py kallithea/controllers/pullrequests.py kallithea/model/forms.py kallithea/public/js/base.js kallithea/templates/pullrequests/pullrequest_show.html |
diffstat | 5 files changed, 37 insertions(+), 76 deletions(-) [+] |
line wrap: on
line diff
--- a/kallithea/config/routing.py Wed Jan 21 17:35:11 2015 +0100 +++ b/kallithea/config/routing.py Wed Jan 21 17:35:11 2015 +0100 @@ -713,11 +713,6 @@ controller='pullrequests', action='post', conditions=dict(function=check_repo, method=["POST"])) - rmap.connect('pullrequest_update', - '/{repo_name:.*?}/pull-request/{pull_request_id}', - controller='pullrequests', - action='update', conditions=dict(function=check_repo, - method=["PUT"])) rmap.connect('pullrequest_delete', '/{repo_name:.*?}/pull-request/{pull_request_id}', controller='pullrequests',
--- a/kallithea/controllers/pullrequests.py Wed Jan 21 17:35:11 2015 +0100 +++ b/kallithea/controllers/pullrequests.py Wed Jan 21 17:35:11 2015 +0100 @@ -486,43 +486,29 @@ @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', 'repository.admin') def post(self, repo_name, pull_request_id): - repo = RepoModel()._get_repo(repo_name) - pull_request = PullRequest.get_or_404(pull_request_id) - old_description = pull_request.description - - _form = PullRequestPostForm()().to_python(request.POST) - - pull_request.title = _form['pullrequest_title'] - pull_request.description = _form['pullrequest_desc'].strip() or _('No description') - - PullRequestModel().mention_from_description(pull_request, old_description) - - Session().commit() - h.flash(_('Pull request updated'), category='success') - - return redirect(pull_request.url()) - - # pullrequest_update for updating reviewer list - @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') - @jsonify - def update(self, repo_name, pull_request_id): pull_request = PullRequest.get_or_404(pull_request_id) if pull_request.is_closed(): raise HTTPForbidden() #only owner or admin can update it owner = pull_request.author.user_id == c.authuser.user_id repo_admin = h.HasRepoPermissionAny('repository.admin')(c.repo_name) - if h.HasPermissionAny('hg.admin') or repo_admin or owner: - reviewers_ids = map(int, filter(lambda v: v not in [None, ''], - request.POST.get('reviewers_ids', '').split(','))) + if not (h.HasPermissionAny('hg.admin') or repo_admin or owner): + raise HTTPForbidden() + + _form = PullRequestPostForm()().to_python(request.POST) - PullRequestModel().update_reviewers(pull_request_id, reviewers_ids) - Session().commit() - return True - raise HTTPForbidden() + old_description = pull_request.description + pull_request.title = _form['pullrequest_title'] + pull_request.description = _form['pullrequest_desc'].strip() or _('No description') + PullRequestModel().mention_from_description(pull_request, old_description) + + reviewers_ids = [int(s) for s in _form['review_members']] + PullRequestModel().update_reviewers(pull_request_id, reviewers_ids) + + Session().commit() + h.flash(_('Pull request updated'), category='success') + + return redirect(pull_request.url()) @LoginRequired() @NotAnonymous()
--- a/kallithea/model/forms.py Wed Jan 21 17:35:11 2015 +0100 +++ b/kallithea/model/forms.py Wed Jan 21 17:35:11 2015 +0100 @@ -485,7 +485,6 @@ allow_extra_fields = True filter_extra_fields = True - user = v.UnicodeString(strip=True, required=True) org_repo = v.UnicodeString(strip=True, required=True) org_ref = v.UnicodeString(strip=True, required=True) other_repo = v.UnicodeString(strip=True, required=True) @@ -505,6 +504,7 @@ pullrequest_title = v.UnicodeString(strip=True, required=True) pullrequest_desc = v.UnicodeString(strip=True, required=False) + review_members = v.Set() return _PullRequestPostForm
--- a/kallithea/public/js/base.js Wed Jan 21 17:35:11 2015 +0100 +++ b/kallithea/public/js/base.js Wed Jan 21 17:35:11 2015 +0100 @@ -1489,28 +1489,10 @@ var removeReviewMember = function(reviewer_id, repo_name, pull_request_id){ var $li = $('#reviewer_{0}'.format(reviewer_id)); $li.find('div div').css("text-decoration", "line-through"); - $li.find('input').remove(); + $li.find('input').attr('name', 'review_members_removed'); $li.find('.reviewer_member_remove').replaceWith(' (remove not saved)'); } -/* handle "Save Changes" of addReviewMember and removeReviewMember on PR */ -var updateReviewers = function(reviewers_ids, repo_name, pull_request_id){ - if (reviewers_ids === undefined){ - var reviewers_ids = []; - $('#review_members').find('input').each(function(){ - reviewers_ids.push(this.value); - }); - } - var url = pyroutes.url('pullrequest_update', {"repo_name":repo_name, - "pull_request_id": pull_request_id}); - var postData = {'_method':'put', - 'reviewers_ids': reviewers_ids}; - var success = function(o){ - window.location.reload(); - } - ajaxPOST(url,postData,success); -} - /* activate auto completion of users and groups ... but only used for users as PR reviewers */ var PullRequestAutoComplete = function (divid, cont, users_list, groups_list) { var myUsers = users_list;
--- a/kallithea/templates/pullrequests/pullrequest_show.html Wed Jan 21 17:35:11 2015 +0100 +++ b/kallithea/templates/pullrequests/pullrequest_show.html Wed Jan 21 17:35:11 2015 +0100 @@ -24,6 +24,7 @@ ${self.breadcrumbs()} </div> + ${h.form(url('pullrequest_post', repo_name=c.repo_name, pull_request_id=c.pull_request.pull_request_id), method='post', id='pull_request_form')} <div class="form pr-box" style="float: left"> <div class="pr-details-title ${'closed' if c.pull_request.is_closed() else ''}"> ${_('Title')}: ${c.pull_request.title} @@ -49,8 +50,6 @@ %if editable: <div id="pr-edit-form" style="display:none"> - ${h.form(url('pullrequest_post', repo_name=c.repo_name, pull_request_id=c.pull_request.pull_request_id), method='post', id='pull_request_form')} - <div class="field"> <div class="label-summary"> <label for="pullrequest_title">${_('Title')}:</label> @@ -67,13 +66,7 @@ <div class="textarea text-area editor"> ${h.textarea('pullrequest_desc',size=30,content=c.pull_request.description,placeholder=_('Write a short description on this pull request'))} </div> - <div class="buttons"> - ${h.submit('save',_('Save'),class_="btn btn-mini")} - ${h.reset('reset',_('Cancel'),class_="btn btn-mini",onclick="YUD.setStyle('pr-edit-form','display','none');YUD.setStyle(YUD.getElementsByClassName('pr-not-edit'),'display','')")} - </div> </div> - - ${h.end_form()} </div> %endif @@ -173,8 +166,7 @@ </div> </div> - ${h.form(url('pullrequest_copy_update',repo_name=c.repo_name,pull_request_id=c.pull_request.pull_request_id), method='post')} - <div class="field"> + <div class="field"> <div class="label-summary"> <label>${_('Update')}:</label> </div> @@ -200,9 +192,7 @@ ${h.submit('copy_update',_('Create Pull Request Update'),class_="btn btn-small")} </div> %endif - </div> - ${h.end_form()} - + </div> </div> </div> ## REVIEWERS @@ -237,15 +227,21 @@ ${h.text('user', class_='yui-ac-input',placeholder=_('Type name of reviewer to add'))} <div id="reviewers_container"></div> </div> - <div style="padding:0px 10px"> - <span id="update_pull_request" class="btn btn-small">${_('Save Changes')}</span> - </div> </div> %endif </div> </div> - - <div style="clear: both"></div> + <div class="form" style="clear:both"> + <div class="fields"> + %if editable: + <div class="buttons"> + ${h.submit('pr-form-save',_('Save'),class_="btn btn-small")} + ${h.reset('pr-form-reset',_('Cancel'),class_="btn btn-small")} + </div> + %endif + </div> + </div> + ${h.end_form()} </div> <div class="box"> @@ -306,7 +302,6 @@ pyroutes.register('pullrequest_comment', "${url('pullrequest_comment',repo_name='%(repo_name)s',pull_request_id='%(pull_request_id)s')}", ['repo_name', 'pull_request_id']); pyroutes.register('pullrequest_comment_delete', "${url('pullrequest_comment_delete',repo_name='%(repo_name)s',comment_id='%(comment_id)s')}", ['repo_name', 'comment_id']); - pyroutes.register('pullrequest_update', "${url('pullrequest_update',repo_name='%(repo_name)s',pull_request_id='%(pull_request_id)s')}", ['repo_name', 'pull_request_id']); </script> @@ -349,8 +344,11 @@ linkInlineComments(document.getElementsByClassName('firstlink'), document.getElementsByClassName("inline-comment")); - $('#update_pull_request').click(function(e){ - updateReviewers(undefined, "${c.repo_name}", "${c.pull_request.pull_request_id}"); + var $org_review_members = $('#review_members').clone(); + $('#pr-form-reset').click(function(e){ + $('#pr-edit-form').hide(); + $('.pr-not-edit').show(); + $('#review_members').html($org_review_members); }); // hack: re-navigate to target after JS is done ... if a target is set and setting href thus won't reload