<div class="panel panel-default">
  <div class="panel-heading">
    <h3 class="panel-title">${_('Authentication Tokens')}</h3>
  </div>
  <div class="panel-body">
      <p>
         ${_('Each token can have a role. Token with a role can be used only in given context, '
         'e.g. VCS tokens can be used together with the authtoken auth plugin for git/hg/svn operations only.')}
      </p>
      <table class="rctable auth_tokens">
        %if c.user_auth_tokens:
            <tr>
                <th>${_('Token')}</th>
                <th>${_('Scope')}</th>
                <th>${_('Description')}</th>
                <th>${_('Role')}</th>
                <th>${_('Expiration')}</th>
                <th>${_('Action')}</th>
            </tr>
            %for auth_token in c.user_auth_tokens:
              <tr class="${'expired' if auth_token.expired else ''}">
                <td class="truncate-wrap td-authtoken">
                    <div class="user_auth_tokens truncate autoexpand">
                    <code>${auth_token.api_key}</code>
                    </div>
                </td>
                <td class="td">${auth_token.scope_humanized}</td>
                <td class="td-wrap">${auth_token.description}</td>
                <td class="td-tags">
                    <span class="tag disabled">${auth_token.role_humanized}</span>
                </td>
                <td class="td-exp">
                     %if auth_token.expires == -1:
                      ${_('never')}
                     %else:
                        %if auth_token.expired:
                            <span style="text-decoration: line-through">${h.age_component(h.time_to_utcdatetime(auth_token.expires))}</span>
                        %else:
                            ${h.age_component(h.time_to_utcdatetime(auth_token.expires))}
                        %endif
                     %endif
                </td>
                <td class="td-action">
                    ${h.secure_form(h.route_path('my_account_auth_tokens_delete'), method='post')}
                        ${h.hidden('del_auth_token',auth_token.api_key)}
                        <button class="btn btn-link btn-danger" type="submit"
                                onclick="return confirm('${_('Confirm to remove this auth token: %s') % auth_token.api_key}');">
                            ${_('Delete')}
                        </button>
                    ${h.end_form()}
                </td>
              </tr>
            %endfor
        %else:
        <tr><td><div class="ip">${_('No additional auth token specified')}</div></td></tr>
        %endif
      </table>

        <div class="user_auth_tokens">
            ${h.secure_form(h.route_path('my_account_auth_tokens_add'), method='post')}
            <div class="form form-vertical">
                <!-- fields -->
                <div class="fields">
                     <div class="field">
                        <div class="label">
                            <label for="new_email">${_('New authentication token')}:</label>
                        </div>
                        <div class="input">
                            ${h.text('description', placeholder=_('Description'))}
                            ${h.select('lifetime', '', c.lifetime_options)}
                            ${h.select('role', '', c.role_options)}

                            % if c.allow_scoped_tokens:
                                ${h.hidden('scope_repo_id')}
                            % else:
                                ${h.select('scope_repo_id_disabled', '', ['Scopes available in EE edition'], disabled='disabled')}
                            % endif
                        </div>
                         <p class="help-block">
                             ${_('Repository scope works only with tokens with VCS type.')}
                         </p>
                     </div>
                    <div class="buttons">
                      ${h.submit('save',_('Add'),class_="btn")}
                      ${h.reset('reset',_('Reset'),class_="btn")}
                    </div>
                </div>
            </div>
            ${h.end_form()}
        </div>
    </div>
</div>
<script>
$(document).ready(function(){

var select2Options = {
    'containerCssClass': "drop-menu",
    'dropdownCssClass': "drop-menu-dropdown",
    'dropdownAutoWidth': true
};
$("#lifetime").select2(select2Options);
$("#role").select2(select2Options);

var repoFilter = function(data) {
    var results = [];

    if (!data.results[0]) {
        return data
    }

    $.each(data.results[0].children, function() {
        // replace name to ID for submision
        this.id = this.obj.repo_id;
        results.push(this);
    });

    data.results[0].children = results;
    return data;
};

$("#scope_repo_id_disabled").select2(select2Options);

$("#scope_repo_id").select2({
    cachedDataSource: {},
    minimumInputLength: 2,
    placeholder: "${_('repository scope')}",
    dropdownAutoWidth: true,
    containerCssClass: "drop-menu",
    dropdownCssClass: "drop-menu-dropdown",
    formatResult: formatResult,
    query: $.debounce(250, function(query){
        self = this;
        var cacheKey = query.term;
        var cachedData = self.cachedDataSource[cacheKey];

        if (cachedData) {
            query.callback({results: cachedData.results});
        } else {
            $.ajax({
                url: "${h.url('repo_list_data')}",
                data: {'query': query.term},
                dataType: 'json',
                type: 'GET',
                success: function(data) {
                    data = repoFilter(data);
                    self.cachedDataSource[cacheKey] = data;
                    query.callback({results: data.results});
                },
                error: function(data, textStatus, errorThrown) {
                    alert("Error while fetching entries.\nError code {0} ({1}).".format(data.status, data.statusText));
                }
            })
        }
    })
});

});
</script>