Blob Blame Raw
{% extends "master.html" %}
{% from "_render_repo.html" import render_repos_as_card %}

{% block title %}Group {{ group.group_name }}{% endblock %}
{% set tag = "groups" %}
{% from "_browseheader.html" import browse_header %}

{% block header %}
<link href="{{ url_for('static', filename='vendor/selectize/selectize.bootstrap3.css') }}"
  rel="stylesheet" />
{% endblock %}

{% block content %}
<div class="repo-header p-t-1">
  <div class="container">
        {{browse_header(select=tag)}}
  </div>
</div>
<div class="p-t-2">
  <div class="container">
    <header>
        <h2 class="repo-name m-b-0">
            <span class="oi" data-glyph="people"></span> &nbsp;{{
                 group.display_name }}
            {% if g.authenticated and (member or g.admin)
                and config.get('ENABLE_GROUP_MNGT') %}
              <div class="pull-xs-right btn-group">
                <a href="{{ url_for('ui_ns.edit_group', group=group.group_name) }}">
                  <button class="btn btn-sm btn-secondary">
                    <span class="oi" data-glyph="pencil" title="Edit group">
                    </span>  &nbsp;Edit Group </button>
                </a>
                <form method="POST" action="{{ url_for('ui_ns.group_delete',
                      group=group.group_name) }}">
              {% if g.admin %}
              {% endif %}
                  {{ form.csrf_token }}
                  <button
                    onclick="return confirm('Are you sure you want to delete the group `{{group.group_name}}`?');"
                    title="Delete group"
                    class="btn btn-sm btn-danger">
                    <span class="oi" data-glyph="trash"></span> &nbsp;Delete group
                  </button>
                </form>
              </div>
             {% endif %}
        </h2>
        <div class="m-t-0">
          {% if group.description %}<p>{{ group.description }}</p>{% endif %}
          created {{ group.created |humanize }}
          by {{ group.creator.fullname }} ({{ group.creator.user }})
        </div>
        <div class="projectinfo m-t-1">
        </div>
    </header>
    <div class="row">
      <div class="col-md-8">
            {{ render_repos_as_card(group.projects, group.projects|count, 'Projects') }}
      </div>
      <div class="col-md-4">
        <div class="card">
          <div class="card-header">
            Group Members <span class="label label-default">{{group.users|count}}</span>
            {% if g.authenticated and (member or admin)
                  and config.get('ENABLE_GROUP_MNGT') %}
              <div id="add_user_button" class="btn btn-secondary btn-sm pull-xs-right">
                <span class="oi" data-glyph="plus"></span>
              </div>
            {% endif %}
          </div>
          <div class="list-group list-group-flush">

            {% if g.authenticated and (member or g.admin)
                  and config.get('ENABLE_GROUP_MNGT') %}
            <div class="list-group-item" id="add_user_form_wrapper" style="display:none;">
              <form action="{{ url_for('ui_ns.view_group', group=group.group_name)
                }}" method="post" id="add_user_form">
                  <input placeholder="search for user" class="form-control" id="user" name="user" title="User name"/>
                </div>
                {{ form.csrf_token }}
              </form>
            </div>
            {% endif %}

            {% for user in group.users %}
            <div class="list-group-item">
              <a href="{{ url_for('ui_ns.view_user', username=user.user)}}" title="{{ user.fullname }}" data-toggle="tooltip">
                {{ user.default_email | avatar(28) | safe }}
                {{ user.user }}
              </a>
              {% if g.authenticated and user != group.creator
                    and (member or g.admin)
                    and config.get('ENABLE_GROUP_MNGT') %}
               <form class="pull-xs-right" method="POST" style="display: inline-block"
                action="{{ url_for('ui_ns.group_user_delete',
                    group=group.group_name, user=user.user) }}">
                {{ form.csrf_token }}
                <button
                  onclick="return confirm('Are you sure to remove user `{{
                    user.user}}` from the group `{{group.group_name}}`?');"
                  title="Remove user from group"
                  class="btn btn-sm btn-danger">
                  <span class="oi" data-glyph="trash"></span>
                </button>
              </form>
              {% endif %}
            </div>
            {% endfor %}
          </div> <!--list-group-->
        </div> <!--card-->
      </div> <!--col-md-4 -->
    </div> <!--row-->
  </div> <!--container-->
</div>

{% endblock %}

{% block jscripts %}
  {{ super() }}
  <script src="{{ url_for('static', filename='vendor/selectize/selectize.min.js') }}" type="text/javascript"> </script>
  <script type="text/javascript">
  $(document).ready(function() {
    $('#headerSearch').on('keypress keydown keyup', function(e) {
      if (e.which == 13) {
          e.preventDefault();
          return false;
      }
    });
    $('#term').selectize({
      valueField: 'group',
      labelField: 'group',
      searchField: 'group',
      onType: function(value){
        if (value == ""){
        this.close();
        }
      },
      onChange: function(value){
        if (value != ""){
          $('#headerSearch').submit();
        }
      },
      maxItems: 1,
      create: false,
      load: function(query, callback) {
        if (!query.length) return callback();
        $.getJSON(
          "{{ url_for('api_ns.api_groups') }}", {
            pattern: query
          },
          function( data ) {
            callback( data.groups.map(function(x) { return { group: x }; }) );
          }
        );
      }
    });

    var usersearch = $('#user').selectize({
      valueField: 'user',
      labelField: 'user',
      searchField: 'user',
      onChange: function(value){
        if (value != ""){
          $('#add_user_form').submit();
        }
      },
      maxItems: 1,
      create: false,
      preload: 'focus',
      load: function(query, callback) {
        $.getJSON(
          "{{ url_for('api_ns.api_users') }}",
          function( data ) {
            callback( data.users.map(function(x) { return { user: x }; }) );
          }
        );
      },
      render: {
        option: function(item, escape) {
        return '<div>' +
            '<div>' +
              '<span><strong>' + escape(item.user) + '</strong></span>' +
            '</div>' +
          '</div>';
        }
      },
    });

    $('#add_user_button').click(function(){
      $('#add_user_button').hide();
      $('#add_user_form_wrapper').show();
      usersearch[0].selectize.focus();
    });

  });
</script>
{% endblock %}