{% extends "repo_master.html" %}
{% from "_formhelper.html" import show_comment, show_pr_initial_comment, render_bootstrap_field %}
{% from "_repo_renderdiff.html" import repo_renderdiff %}
{% from "_projectstring.html" import projectstring, projecticon %}
{% block title %}
{%- if pull_request -%}
PR#{{ requestid }}: {{ pull_request.title | noJS(ignore="img") | safe }}
{%- elif form and (g.repo_committer or remote_git) -%}
Create new Pull Request for {{ branch_to }}
{%- else -%}
Diff from {{ branch_from }} to {{ branch_to }}
{%- endif
%} - {{ repo.url_path }}
{% endblock %}
{% set tag = "home" %}
{% block header %}
<link type="text/css" rel="stylesheet" nonce="{{ g.nonce }}" href="{{
url_for('static', filename='vendor/emojione/emojione.sprites.css') }}?version={{ g.version}}"/>
<link type="text/css" rel="stylesheet" nonce="{{ g.nonce }}" href="{{
url_for('static', filename='vendor/selectize/selectize.bootstrap3.css') }}?version={{ g.version}}"/>
<link type="text/css" rel="stylesheet" nonce="{{ g.nonce }}" href="{{
url_for('static', filename='vendor/jquery.atwho/jquery.atwho.css') }}?version={{ g.version}}"/>
{% endblock %}
{% block repo %}
<h4 class="font-weight-bold">
<div class="d-flex align-items-center">
<div>
{% if form and (g.repo_committer or remote_git) %}
Create Pull Request
{% else %}
Diff
{% endif%}
</div>
<div class="ml-auto">
<div class="btn btn-outline-secondary border-0 disabled opacity-100 font-weight-bold">
{% if diff %}
{{diff_commits | length}} commit{{'s' if diff_commits | length > 1 }},
{{diff.stats.files_changed}} file{{'s' if diff.stats.files_changed > 1 }} changed
{% else %}
no changes
{% endif %}
</div>
</div>
<div class="btn-group">
{% if diff %}
<span class="font-weight-bold btn btn-sm btn-success disabled opacity-100">+{{diff.stats.insertions}}</span>
<span class="font-weight-bold btn btn-sm btn-danger disabled opacity-100">-{{diff.stats.deletions}}</span>
{% else %}
<span class="font-weight-bold btn btn-sm btn-success disabled">+0</span>
<span class="font-weight-bold btn btn-sm btn-danger disabled">-0</span>
{% endif %}
</div>
</div>
</h4>
<div class="row" id="pr-wrapper">
<div class="col-md-12">
{% if form and (g.repo_committer or remote_git) %}
<section class="new_project">
{% if remote_git and not (config.get('DISABLE_REMOTE_PR', True)) %}
<form action="{{ url_for('ui_ns.new_remote_request_pull',
repo=repo.name,
username=username,
namespace=repo.namespace,
confirm=True) }}" id="new_remote_form" method="post">
<input type="hidden" value="{{ branch_from }}" name="branch_from" />
<input type="hidden" value="{{ branch_to }}" name="branch_to" />
<input type="hidden" value="{{ remote_git }}" name="git_repo" />
{% else %}
<form action="{{ url_for('ui_ns.new_request_pull',
repo=repo.name,
username=username,
namespace=repo.namespace,
commitid=commitid,
branch_from=branch_from,
project_to=project_to,
branch_to=branch_to) }}" method="post">
{% endif %}
<div class="p-b-1">
Pull from
<span class="badge badge-light badge-pill border border-secondary font-1em">
{%- if remote_git -%}
{{ remote_git }}
{%- else -%}
{%- if repo.is_fork -%}
<i class="fa fa-code-fork"></i>
{%- else -%}
<i class="fa {{projecticon()}}"></i>
{%- endif -%}
{%- if repo.namespace -%}
{{repo.namespace}}/
{%- endif -%}
{%- if repo.is_fork -%}
{{ repo.user.user }}/
{%- endif -%}
{{repo.name}}
{%- endif -%}
</span>
<span class="dropdown dropdown-btn">
<a class="badge badge-secondary badge-pill border border-secondary dropdown-toggle pointer font-1em"
data-toggle="dropdown">
<span class="fa fa-random"></span>
{{ branch_from }}
</a>
<div class="dropdown-menu">
{% for br in parent_branches |reverse %}
{% if br != branch_from %}
<a class="dropdown-item branch_from_item pointer" data-value="{{br}}"><span class="fa fa-random"></span> {{ br }}</a>
{% endif %}
{% endfor %}
</div>
</span>
to
<span>
<span class="badge badge-light badge-pill border border-secondary dropdown-toggle font-1em" id="family-toggle" data-toggle="dropdown">
{%- if parent.is_fork -%}
<i class="fa fa-code-fork"></i>
{%- else -%}
<i class="fa {{projecticon()}}"></i>
{%- endif -%}
{%- if parent.namespace -%}
{{parent.namespace}}/
{%- endif -%}
{%- if parent.is_fork -%}
{{ parent.user.user }}/
{%- endif -%}
{{parent.name}}
</span>
<div class="dropdown-menu" id="family-list">
<div id="family-spinner py-3 text-center"><i class="fa fa-circle-o-notch fa-spin fa-2x fa-fw"></i></div>
</div>
</span>
<span class="dropdown dropdown-btn">
<a class="badge badge-secondary badge-pill border border-secondary dropdown-toggle pointer font-1em"
data-toggle="dropdown">
<span class="fa fa-random"></span>
{{ branch_to }}
</a>
<div class="dropdown-menu">
{% for branch in g.branches |reverse %}
{% if branch != branch_to %}
<a class="dropdown-item branch_to_item pointer" data-value="{{branch}}"><span class="fa fa-random"></span> {{ branch }}</a>
{% endif %}
{% endfor %}
</div>
</span>
</div>
{% if contributing %}
<div id="contributing">
{{ contributing | markdown | noJS | safe}}
</div>
{% endif %}
<div class="mt-4">
{{ form.title(class_="form-control", placeholder="Pull Request Title", required="required")|safe }}
{% if form.title.errors %}
<span class="float-right text-danger">
<small>
{% for error in form.title.errors %}
{{ error }}
{% endfor %}
</small>
</span>
{% endif %}
<div class="card mt-2">
<div class="card-header pb-0 pt-1 bg-light">
<div class="row">
<div class="col align-self-center">
</div>
<div class="col d-flex">
<ul class="nav nav-tabs ml-auto border-bottom-0">
<li class="nav-item">
<a class="nav-link pointer" id="previewinmarkdown" >Preview</a>
</li>
<li class="nav-item">
<a class="nav-link active pointer" id="editinmarkdown" >Edit</a>
</li>
</ul>
</div>
</div>
</div>
<div class="card-body">
<textarea class="form-control" rows=8 id="initial_comment" name="initial_comment"
placeholder="Describe your changes" tabindex=1>
{{- form.initial_comment.data if form.initial_comment.data else '' -}}
</textarea>
{% if form.initial_comment.errors %}
<span class="float-right text-danger">
<small>
{% for error in form.initial_comment.errors %}
{{ error }}
{% endfor %}
</small>
</span>
{% endif %}
<div id="preview" class="p-1">
</div>
<div class="form-control">
<label for="allow_rebase">Allow rebasing</label>
<label class="c-input c-checkbox">
<input checked id="allow_rebase" name="allow_rebase" type="checkbox" value="y">
</label>
<small class="text-muted">
Let the maintainer of the target project to rebase the pull-request
</small>
</div>
</div>
<div class="card-footer bg-light">
<div class="d-flex align-items-center">
<small>Comments use <a href="https://docs.pagure.org/pagure/usage/markdown.html"
target="_blank" rel="noopener noreferrer" class="notblue">Markdown Syntax</a></small>
<div class="ml-auto">
<div class="btn-group">
<input type="submit" class="btn btn-primary" value="Create Pull Request"{%
if not diff %} disabled title="There appear to be no diff, so nothing to request pulling"{% endif %}>
</div>
</div>
</div>
</div>
</div>
{{ form.csrf_token }}
</div>
</form>
</section>
{% endif %}
<ul class="nav nav-tabs nav-small my-4 border-bottom" role="tablist" id="pr-tabs">
<li class="nav-item">
<a class="nav-link {% if not pull_request %}active{%
endif %}" data-toggle="tab" role="tab" href="#request_diff">
<span>Files Changed </span>
<span class="badge badge-secondary badge-pill">
{{ diff|length if diff else 0}}
</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" role="tab" href="#commit_list">
<span>Commits </span>
<span class="badge badge-secondary badge-pill">
{{ diff_commits|length }}
</span>
</a>
</li>
</ul>
<div class="tab-content mb-5">
<div class="tab-pane" role="tabpanel" id="commit_list">
<div class="list-group">
{% for commit in diff_commits %}
{% set commit_link = url_for('ui_ns.view_commit',
repo=repo.name,
username=username,
namespace=repo.namespace,
commitid=commit.oid.hex) %}
{% set tree_link = url_for(
'ui_ns.view_tree', username=username, namespace=repo.namespace,
repo=repo.name, identifier=commit.hex) %}
<div class="list-group-item">
<div class="row align-items-center">
<div class="col">
{% if commit_link %}
<a class="notblue" href="{{commit_link}}">
{% endif %}
<strong>{{ commit.message.strip().split('\n')[0] }}</strong>
{% if commit_link %}
</a>
{% endif %}
<div>
{{commit.author|author2user_commits(
link=url_for('ui_ns.view_commits',
repo=repo.name,
branchname=branchname,
username=username,
namespace=repo.namespace,
author=commit.author.email),
cssclass="notblue")|safe}}
<span class="commitdate"
title="{{ commit.commit_time|format_ts }}"> •
{{ commit.commit_time|humanize }}</span>
</div>
</div>
<div class="col-xs-auto pr-3 text-right">
<div class="btn-group">
<a href="{{ commit_link }}"
class="btn btn-outline-primary font-weight-bold {{'disabled' if not commit_link}}">
<code>{{ commit.hex|short }}</code>
</a>
<a class="btn btn-outline-primary font-weight-bold {{'disabled' if not commit_link}}" href="{{tree_link}}"><span class="fa fa-file-code-o fa-fw"></span></a>
</div>
</div>
</div>
</div>
{% else %}
<p class="error"> No commits found </p>
{% endfor %}
</div>
</div>
<div class="tab-pane {%
if not pull_request %}active{%
endif %}" role="tabpanel" id="request_diff">
{{repo_renderdiff(diff=diff,
diff_commits=diff_commits,
pull_request=pull_request,
repo=repo,
username=username,
namespace=namespace)}}
</div>
</div> <!-- tab content-->
</div>
{# modal to change the target repo
<div class="modal fade" id="target_modal" tabindex="-1"
role="dialog" aria-labelledby="Change target project" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
<span class="sr-only">Close</span>
</button>
<h4 class="modal-title" id="myModalLabel">Change Target Project</h4>
</div>
<div class="modal-body">
<form action="{{ url_for(
'ui_ns.new_request_pull',
repo=repo.name,
username=username,
namespace=repo.namespace,
branch_from=branch_from,
branch_to=branch_to) }}" method="GET">
<fieldset class="form-group" id="family_list">
<div class="content-loading"></div>
</fieldset>
<button class="btn btn-primary" type="submit"
title="Change the target project for this pull-request">
Update
</button>
</form>
</div>
</div>
</div>
</div>
</div>#}
{% endblock %}
{% block jscripts %}
{{ super() }}
<script type="text/javascript" nonce="{{ g.nonce }}" src="{{
url_for('static', filename='vendor/jquery.textcomplete/jquery.textcomplete.min.js') }}?version={{ g.version}}"></script>
<script type="text/javascript" nonce="{{ g.nonce }}" src="{{
url_for('static', filename='vendor/emojione/emojione.min.js') }}?version={{ g.version}}"></script>
<script type="text/javascript" nonce="{{ g.nonce }}" src="{{
url_for('static', filename='emoji/emojicomplete.js') }}?version={{ g.version}}"></script>
<script type="text/javascript" nonce="{{ g.nonce }}" src="{{
url_for('static', filename='vendor/selectize/selectize.min.js') }}?version={{ g.version}}"> </script>
<script type="text/javascript" nonce="{{ g.nonce }}" src="{{
url_for('static', filename='vendor/jquery.caret/jquery.caret.min.js') }}?version={{ g.version}}"></script>
<script type="text/javascript" nonce="{{ g.nonce }}" src="{{
url_for('static', filename='vendor/jquery.atwho/jquery.atwho.min.js') }}?version={{ g.version}}"></script>
<script type="text/javascript" nonce="{{ g.nonce }}" src="{{
url_for('static', filename='request_ev.js') }}?version={{ g.version}}"></script>
<script type="text/javascript" nonce="{{ g.nonce }}">
function showTab(){
$('#pr-tabs a[href="#request_diff"]').tab('show')
}
$(document).ready(function() {
$('.inline_comment_link_btn').click(function() { showTab() });
$('.delete_comment_btn').click(function() {
return confirm('Do you really want to remove this comment?');
});
$('.branch_from_item').click(function(e){
{% if remote_git and not (config.get('DISABLE_REMOTE_PR', True)) %}
var _form = $("#new_remote_form");
var final_url = "{{ url_for('ui_ns.new_remote_request_pull',
repo=repo.name,
username=username,
namespace=repo.namespace,
) }}";
_form.attr('action', final_url);
var _branch_from = $(
"#new_remote_form [name=branch_from]").val($(this).attr("data-value"));
_form.submit();
{% else %}
var final_url = "{{ url_for('ui_ns.new_request_pull', username=username,
namespace=repo.namespace, repo=repo.name,
branch_from='--', branch_to=branch_to, project_to=project_to) }}";
final_url = final_url.replace('--', $(this).attr("data-value"));
window.location.href = final_url;
{% endif %}
});
$('.branch_to_item').click(function(e){
{% if remote_git and not (config.get('DISABLE_REMOTE_PR', True)) %}
var _form = $("#new_remote_form");
var final_url = "{{ url_for('ui_ns.new_remote_request_pull',
repo=repo.name,
username=username,
namespace=repo.namespace,
) }}";
_form.attr('action', final_url);
var _branch_to = $(
"#new_remote_form [name=branch_to]").val($(this).attr("data-value"));
_form.submit();
{% else %}
var final_url = "{{ url_for('ui_ns.new_request_pull', username=username,
namespace=repo.namespace, repo=repo.name,
branch_from=branch_from, branch_to='--', project_to=project_to) }}";
final_url = final_url.replace('--', $(this).attr("data-value"));
window.location.href = final_url;
{% endif %}
});
{% if form %}
$('#family-toggle').click( function (e) {
$('#family-spinner').show();
var _url = '{{ url_for(
'internal_ns.get_project_family',
repo=repo.name,
username=username,
namespace=repo.namespace) }}'
$.ajax({
url: _url,
type: 'POST',
dataType: 'json',
data: {
csrf_token: "{{ g.confirmationform.csrf_token.current_token }}",
'allows_pr': '1',
},
success: function(res) {
$('#family-spinner').hide();
var _text = ''
for (el in res.family) {
var _t = '<a class="dropdown-item" href="'
+ '{{ url_for("ui_ns.new_request_pull",repo=repo.name, username=username, namespace=repo.namespace, branch_from=branch_from, branch_to=branch_to, project_to="---") }}">'
+ res.family[el]
+ '</a>';
_t = _t.replace('---', res.family[el]);
_text += _t;
}
var _el = $('#family-list');
_el.html(_text);
},
});
});
$( "#preview" ).hide();
$( "#previewinmarkdown" ).click(
function(event, ui) {
var _text = $( "#initial_comment" ).val();
var _url = "{{ url_for('ui_ns.markdown_preview',
repo=repo.name,
user=repo.user.user if repo.is_fork,
namespace=repo.namespace) | safe}}";
$.ajax({
url: _url ,
type: 'POST',
data: {
content: _text,
csrf_token: "{{ g.confirmationform.csrf_token.current_token }}",
},
dataType: 'html',
success: function(res) {
var preview = emojione.toImage(res);
$( "#preview" ).html(preview);
$( "#previewinmarkdown" ).addClass("active");
$( "#editinmarkdown" ).removeClass("active");
$( "#initial_comment" ).hide();
$( "#preview" ).show();
},
error: function(error) {
alert('Unable to generate preview!'+error);
console.log(error);
}
});
return false;
}
);
$( "#editinmarkdown" ).click(
function(event, ui) {
$( "#editinmarkdown" ).addClass("active");
$( "#previewinmarkdown" ).removeClass("active");
$( "#initial_comment" ).show();
$( "#preview" ).hide();
}
);
{% endif %}
});
</script>
{% endblock %}