| {% extends 'layout.html' %} | {% set title = 'sharing' %} | {% block page_title %}Sharing: {{ project.name }}{% endblock %} | {% block body %} #project-container #project-side-container #project_sidebar ul.project-tabs li.tabs-thumbnail( title="About", data-toggle="tooltip", data-placement="left", class="{% if title == 'about' %}active {% endif %}{% if project.picture_square %}image{% endif %}") a(href="{{url_for('projects.about', project_url=project.url, _external=True)}}") #project-loading i.pi-spin | {% if project.picture_square %} img(src="{{ project.picture_square.thumbnail('b', api=api) }}") | {% else %} i.pi-home | {% endif %} li.tabs-browse( title="Browse", data-toggle="tooltip", data-placement="left") a(href="{{url_for('projects.view', project_url=project.url, _external=True)}}") i.pi-tree-flow | {% if not project.is_private %} li.tabs-search( title="Search", data-toggle="tooltip", data-placement="left") a(href="{{url_for('projects.search', project_url=project.url, _external=True)}}") i.pi-search | {% endif %} .project_nav-toggle-btn( title="Expand Navigation [T]", data-toggle="tooltip", data-placement="right") i.pi-angle-double-left #project_nav #project_nav-container #project_nav-header .project-title a(href="{{url_for('projects.view', project_url=project.url, _external=True)}}") | {{ project.name }} // TODO - make list a macro #project_tree.edit ul.project_nav-edit-list li(class="{% if title == 'edit' %}active{% endif %}") a(href="{{ url_for('projects.edit', project_url=project.url) }}") i.pi-list | Overview li(class="{% if title == 'sharing' %}active{% endif %}") a(href="{{ url_for('projects.sharing', project_url=project.url) }}") i.pi-share | Sharing li(class="{% if title == 'edit_node_types' %}active{% endif %}") a(href="{{ url_for('projects.edit_node_types', project_url=project.url) }}") i.pi-puzzle | Node Types .project_split(title="Toggle Navigation [T]") #project_context-container #project_context-header span#project-statusbar span#project-edit-title | Manage team members for this project #project_context #node-edit-container #node-edit-form .col-md-6 | {% if (project.user == current_user.objectid or current_user.has_role('admin')) %} .sharing-users-search .form-group input#user-select.form-control( name='contacts', type='text', placeholder='Add team members by name') | {% else %} .sharing-users-search .disabled Only project owners & admins can manage users | {% endif %} ul.sharing-users-list | {% for user in users %} li.sharing-users-item( user-id="{{ user['_id'] }}", class="{% if current_user.objectid == user['_id'] %}self{% endif %}") .sharing-users-avatar img(src="{{ user['avatar'] }}") .sharing-users-details span.sharing-users-name | {{user['full_name']}} | {% if project.user == user['_id'] and current_user.objectid == user['_id'] %} small (You, owner) | {% elif project.user == user['_id'] %} small (Owner) | {% elif current_user.objectid == user['_id'] %} small (You) | {% endif %} span.sharing-users-extra {{user['username']}} .sharing-users-action | {# Only allow deletion if we are: admin, project owners, or current_user in the team #} | {% if current_user.has_role('admin') or (project.user == current_user.objectid) or (current_user.objectid == user['_id']) %} | {% if project.user == user['_id'] %} span i.pi-happy(title="Hi boss!") | {% elif current_user.objectid == user['_id'] %} button.user-remove(title="Leave this project") Leave | {% else %} button.user-remove(title="Remove this user from your project") i.pi-trash | {% endif %} | {% endif %} | {% endfor %} .col-md-6 .sharing-users-info h4 What can team members do? p. Team members are able to upload new content to the project, as well as view, edit, delete, and comment on the content previously created. | {% endblock %} | {% block footer_navigation %} | {% endblock %} | {% block footer_scripts %} | {% if (project.user == current_user.objectid or current_user.has_role('admin')) %} script(src='//cdn.jsdelivr.net/autocomplete.js/0/autocomplete.jquery.min.js') script. $(document).ready(function() { var APPLICATION_ID = '{{config.ALGOLIA_USER}}' var SEARCH_ONLY_API_KEY = '{{config.ALGOLIA_PUBLIC_KEY}}'; var INDEX_NAME = '{{config.ALGOLIA_INDEX_USERS}}'; var client = algoliasearch(APPLICATION_ID, SEARCH_ONLY_API_KEY); var index = client.initIndex(INDEX_NAME); $('#user-select').autocomplete({hint: false}, [ { source: function (q, cb) { index.search(q, {hitsPerPage: 5}, function (error, content) { if (error) { cb([]); return; } cb(content.hits, content); }); }, displayKey: 'full_name', minLength: 2, limit: 10, templates: { suggestion: function (hit) { return hit._highlightResult.full_name.value + ' (' + hit._highlightResult.username.value + ')'; } } } ]).on('autocomplete:selected', function (event, hit, dataset) { var lis = document.getElementsByClassName('sharing-users-item'); var has_match = false; for (var i = 0; i < lis.length; ++i) { // Check if the user already is in the list if ($(lis[i]).attr('user-id') == hit.objectID){ $(lis[i]).addClass('active'); setTimeout(function(){ $('.sharing-users-item').removeClass('active');}, 350); statusBarSet('info', 'User is already part of the project', 'pi-info'); has_match = false; break; } else { has_match = true; continue; } }; if (has_match){ addUser(hit.objectID); } }); function addUser(userId){ if (userId && userId.length > 0) { $.post("{{url_for('projects.sharing', project_url=project.url)}}", {user_id: userId, action: 'add'}) .done(function (data) { $("ul.sharing-users-list").prepend('' + '