96e6fc70b4
Removes set favicon related methods from global scope Improves test related with favicon Removes convertPermissionToBoolean from global scope. Adds tests for convertPermissionToBoolean - were non existant Removes setParamInURL from gl.utils Removes parseIntPagination from gl.utils namespace Remove normalizeCRLFHeaders from gl.utils namespace Removes normalizeHeaders from gl.utils namespace Use gl.utils for filtered search Fix bad import Fix broken test by cleaning window.history namespace Adds changelog
121 lines
4.1 KiB
JavaScript
121 lines
4.1 KiB
JavaScript
/* eslint-disable func-names, space-before-function-paren, no-var, wrap-iife, one-var,
|
|
camelcase, one-var-declaration-per-line, quotes, object-shorthand,
|
|
prefer-arrow-callback, comma-dangle, consistent-return, yoda,
|
|
prefer-rest-params, prefer-spread, no-unused-vars, prefer-template,
|
|
promise/catch-or-return */
|
|
import Api from './api';
|
|
import { normalizeCRLFHeaders } from './lib/utils/common_utils';
|
|
|
|
var slice = [].slice;
|
|
|
|
window.GroupsSelect = (function() {
|
|
function GroupsSelect() {
|
|
$('.ajax-groups-select').each((function(_this) {
|
|
const self = _this;
|
|
|
|
return function(i, select) {
|
|
var all_available, skip_groups;
|
|
const $select = $(select);
|
|
all_available = $select.data('all-available');
|
|
skip_groups = $select.data('skip-groups') || [];
|
|
|
|
$select.select2({
|
|
placeholder: "Search for a group",
|
|
multiple: $select.hasClass('multiselect'),
|
|
minimumInputLength: 0,
|
|
ajax: {
|
|
url: Api.buildUrl(Api.groupsPath),
|
|
dataType: 'json',
|
|
quietMillis: 250,
|
|
transport: function (params) {
|
|
$.ajax(params).then((data, status, xhr) => {
|
|
const results = data || [];
|
|
|
|
const headers = normalizeCRLFHeaders(xhr.getAllResponseHeaders());
|
|
const currentPage = parseInt(headers['X-PAGE'], 10) || 0;
|
|
const totalPages = parseInt(headers['X-TOTAL-PAGES'], 10) || 0;
|
|
const more = currentPage < totalPages;
|
|
|
|
return {
|
|
results,
|
|
pagination: {
|
|
more,
|
|
},
|
|
};
|
|
}).then(params.success).fail(params.error);
|
|
},
|
|
data: function (search, page) {
|
|
return {
|
|
search,
|
|
page,
|
|
per_page: GroupsSelect.PER_PAGE,
|
|
all_available,
|
|
};
|
|
},
|
|
results: function (data, page) {
|
|
if (data.length) return { results: [] };
|
|
|
|
const groups = data.length ? data : data.results || [];
|
|
const more = data.pagination ? data.pagination.more : false;
|
|
const results = groups.filter(group => skip_groups.indexOf(group.id) === -1);
|
|
|
|
return {
|
|
results,
|
|
page,
|
|
more,
|
|
};
|
|
},
|
|
},
|
|
initSelection: function(element, callback) {
|
|
var id;
|
|
id = $(element).val();
|
|
if (id !== "") {
|
|
return Api.group(id, callback);
|
|
}
|
|
},
|
|
formatResult: function() {
|
|
var args;
|
|
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
return self.formatResult.apply(self, args);
|
|
},
|
|
formatSelection: function() {
|
|
var args;
|
|
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
return self.formatSelection.apply(self, args);
|
|
},
|
|
dropdownCssClass: "ajax-groups-dropdown select2-infinite",
|
|
// we do not want to escape markup since we are displaying html in results
|
|
escapeMarkup: function(m) {
|
|
return m;
|
|
}
|
|
});
|
|
|
|
self.dropdown = document.querySelector('.select2-infinite .select2-results');
|
|
|
|
$select.on('select2-loaded', self.forceOverflow.bind(self));
|
|
};
|
|
})(this));
|
|
}
|
|
|
|
GroupsSelect.prototype.formatResult = function(group) {
|
|
var avatar;
|
|
if (group.avatar_url) {
|
|
avatar = group.avatar_url;
|
|
} else {
|
|
avatar = gon.default_avatar_url;
|
|
}
|
|
return "<div class='group-result'> <div class='group-name'>" + group.full_name + "</div> <div class='group-path'>" + group.full_path + "</div> </div>";
|
|
};
|
|
|
|
GroupsSelect.prototype.formatSelection = function(group) {
|
|
return group.full_name;
|
|
};
|
|
|
|
GroupsSelect.prototype.forceOverflow = function (e) {
|
|
this.dropdown.style.height = `${Math.floor(this.dropdown.scrollHeight)}px`;
|
|
};
|
|
|
|
GroupsSelect.PER_PAGE = 20;
|
|
|
|
return GroupsSelect;
|
|
})();
|