mirror of
https://github.com/macports/macports-webapp.git
synced 2026-07-13 03:18:42 -07:00
347 lines
12 KiB
JavaScript
347 lines
12 KiB
JavaScript
$(function () {
|
|
let searchParams = new URLSearchParams(window.location.search);
|
|
if(searchParams.has("selected_facets")) {
|
|
let values = searchParams.getAll("selected_facets");
|
|
for(let index = 0; index<values.length; index++) {
|
|
let v = values[index];
|
|
let sections = v.split(':');
|
|
let facet_query = sections[0];
|
|
let facet_value = sections[1];
|
|
switch(facet_query) {
|
|
case "maintainers_exact":
|
|
if (sections.length < 2 || searchParams.get("nomaintainer") === "on") {
|
|
$('#m-facets').html("");
|
|
} else {
|
|
appendMaintainerFilter(facet_value);
|
|
}
|
|
break;
|
|
case "categories_exact":
|
|
if (sections.length < 2) {
|
|
$('#c-facets').html("");
|
|
} else {
|
|
appendCategoryFilter(facet_value);
|
|
}
|
|
break;
|
|
case "variants_exact":
|
|
if (sections.length < 2) {
|
|
$('#v-facets').html("");
|
|
} else {
|
|
appendVariantFilter(facet_value);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(searchParams.has("installed_file")) {
|
|
let ifValue = searchParams.get("installed_file");
|
|
if (ifValue !== "") {
|
|
$('#clear-installed-files-filter').show();
|
|
}
|
|
}
|
|
|
|
if(searchParams.has("livecheck_outdated") || searchParams.has("livecheck_broken") || searchParams.has("livecheck_uptodate")) {
|
|
let loValue = searchParams.get("livecheck_outdated");
|
|
let lbValue = searchParams.get("livecheck_broken");
|
|
let luValue = searchParams.get("livecheck_uptodate");
|
|
if (loValue !== "" || lbValue !== "" || luValue !== "") {
|
|
$('#clear-livecheck-filters').show();
|
|
}
|
|
}
|
|
|
|
$('#remove-maintainers-filter').on('click', function () {
|
|
$('#m-facets').html("");
|
|
$('#super-submit').click();
|
|
});
|
|
$('#remove-categories-filter').on('click', function () {
|
|
$('#c-facets').html("");
|
|
$('#super-submit').click();
|
|
});
|
|
$('#remove-variants-filter').on('click', function () {
|
|
$('#v-facets').html("");
|
|
$('#super-submit').click();
|
|
});
|
|
|
|
async function setFollowUnfollowButtons() {
|
|
const response = await fetch( "/api/v1/user/followed_ports/");
|
|
const data = await response.json();
|
|
let ports = [];
|
|
if ("ports" in data) ports = data.ports;
|
|
const ports_object = {};
|
|
for (let i=0; i<ports.length; i++) {
|
|
ports_object[ports[i]] = 1;
|
|
}
|
|
|
|
for (let i=1; i<=20; i++) {
|
|
let box_id = "follow_port_" + i.toString();
|
|
let e = document.getElementById(box_id);
|
|
if (e === undefined) break;
|
|
let port_name = e.getAttribute("data-name");
|
|
if(!(port_name in ports_object)) {
|
|
e.innerHTML = `<button onclick="ajaxFollowUnfollow('${port_name}', '${box_id}', 'follow');" class='btn text-light'><i class='fa fa-plus-circle'></i></button>`;
|
|
} else {
|
|
e.innerHTML = `<button onclick="ajaxFollowUnfollow('${port_name}', '${box_id}', 'unfollow');" class='btn text-secondary'><i class='fa fa-minus-circle'></i></button>`;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
setFollowUnfollowButtons();
|
|
});
|
|
|
|
|
|
$(document).ready(function () {
|
|
var queryMaintainers = new Bloodhound({
|
|
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('github'),
|
|
queryTokenizer: Bloodhound.tokenizers.whitespace,
|
|
limit: 20,
|
|
rateLimitWait: 800,
|
|
remote: {
|
|
url: '/api/v1/autocomplete/maintainer/?q=%QUERY',
|
|
wildcard: '%QUERY',
|
|
filter: function (response) {
|
|
return response.results;
|
|
}
|
|
}
|
|
});
|
|
|
|
var queryCategories = new Bloodhound({
|
|
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
|
|
queryTokenizer: Bloodhound.tokenizers.whitespace,
|
|
limit: 20,
|
|
rateLimitWait: 800,
|
|
remote: {
|
|
url: '/api/v1/autocomplete/category/?q=%QUERY',
|
|
wildcard: '%QUERY',
|
|
filter: function (response) {
|
|
return response.results;
|
|
}
|
|
}
|
|
});
|
|
|
|
var queryVariants = new Bloodhound({
|
|
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('variant'),
|
|
queryTokenizer: Bloodhound.tokenizers.whitespace,
|
|
limit: 20,
|
|
rateLimitWait: 800,
|
|
remote: {
|
|
url: '/api/v1/autocomplete/variant/?q=%QUERY',
|
|
wildcard: '%QUERY',
|
|
filter: function (response) {
|
|
return response.results;
|
|
}
|
|
}
|
|
});
|
|
|
|
queryMaintainers.initialize();
|
|
queryCategories.initialize();
|
|
queryVariants.initialize();
|
|
|
|
$('#maintainer-q').typeahead({
|
|
hint: true,
|
|
highlight: true,
|
|
minLength: 2,
|
|
},
|
|
{
|
|
name: 'results',
|
|
limit: 10,
|
|
display: 'github',
|
|
source: queryMaintainers.ttAdapter(),
|
|
templates: {
|
|
empty: [].join('\n'),
|
|
suggestion: Handlebars.compile(
|
|
'<div class="border-bottom text-left">' +
|
|
'<div class="card-body py-1 px-2">' +
|
|
'{{ github }}' +
|
|
'</div>' +
|
|
'</div>'
|
|
)
|
|
}
|
|
}).on('typeahead:asyncrequest', function () {
|
|
$('#maintainer-autocomplete-spinner').show();
|
|
}).on('typeahead:asynccancel typeahead:asyncreceive', function () {
|
|
$('#maintainer-autocomplete-spinner').hide();
|
|
}).on('typeahead:select', function (evt, itm) {
|
|
appendMaintainerFilter(itm.github);
|
|
$('#super-submit').click();
|
|
}).on('keydown', function (event) {
|
|
if (event.keyCode == 13) {
|
|
appendMaintainerFilter($('#maintainer-q').val());
|
|
$('#super-submit').click();
|
|
}
|
|
});
|
|
|
|
$('#category-q').typeahead({
|
|
hint: true,
|
|
highlight: true,
|
|
minLength: 2,
|
|
},
|
|
{
|
|
name: 'results',
|
|
limit: 10,
|
|
display: 'name',
|
|
source: queryCategories.ttAdapter(),
|
|
templates: {
|
|
empty: [].join('\n'),
|
|
suggestion: Handlebars.compile(
|
|
'<div class="border-bottom text-left">' +
|
|
'<div class="card-body py-1 px-2">' +
|
|
'{{ name }}' +
|
|
'</div>' +
|
|
'</div>'
|
|
)
|
|
}
|
|
}).on('typeahead:asyncrequest', function () {
|
|
$('#category-autocomplete-spinner').show();
|
|
}).on('typeahead:asynccancel typeahead:asyncreceive', function () {
|
|
$('#category-autocomplete-spinner').hide();
|
|
}).on('typeahead:select', function (evt, itm) {
|
|
appendCategoryFilter(itm.name);
|
|
$('#super-submit').click();
|
|
}).on('keydown', function (event) {
|
|
if (event.keyCode == 13) {
|
|
appendCategoryFilter($('#category-q').val());
|
|
$('#super-submit').click();
|
|
}
|
|
});
|
|
|
|
$('#variant-q').typeahead({
|
|
hint: true,
|
|
highlight: true,
|
|
minLength: 2,
|
|
},
|
|
{
|
|
name: 'results',
|
|
limit: 10,
|
|
display: 'variant',
|
|
source: queryVariants.ttAdapter(),
|
|
templates: {
|
|
empty: [].join('\n'),
|
|
suggestion: Handlebars.compile(
|
|
'<div class="border-bottom text-left">' +
|
|
'<div class="card-body py-1 px-2">' +
|
|
'{{ variant }}' +
|
|
'</div>' +
|
|
'</div>'
|
|
)
|
|
}
|
|
}).on('typeahead:asyncrequest', function () {
|
|
$('#variant-autocomplete-spinner').show();
|
|
}).on('typeahead:asynccancel typeahead:asyncreceive', function () {
|
|
$('#variant-autocomplete-spinner').hide();
|
|
}).on('typeahead:select', function (evt, itm) {
|
|
appendVariantFilter(itm.variant);
|
|
$('#super-submit').click();
|
|
}).on('keydown', function (event) {
|
|
if (event.keyCode == 13) {
|
|
appendVariantFilter($('#variant-q').val());
|
|
$('#super-submit').click();
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
function appendMaintainerFilter(facet_value) {
|
|
if (facet_value === "") {
|
|
$('#m-facets').html("");
|
|
} else {
|
|
$('#m-facets').html([
|
|
'Selected maintainer: <strong>',
|
|
facet_value,
|
|
'</strong> <input form="super-form" style="display: none" class="disabled" name="selected_facets" value=',
|
|
'maintainers_exact:' + facet_value,
|
|
'>',
|
|
'<button id="remove-maintainers-filter"',
|
|
'class="btn btn-lg p-0 text-danger btn-link"><i class="fa fa-window-close"></i></button>'
|
|
].join(' ')
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
function appendCategoryFilter(facet_value) {
|
|
if (facet_value === "") {
|
|
$('#c-facets').html("");
|
|
} else {
|
|
$('#c-facets').html([
|
|
'Selected category: <strong>',
|
|
facet_value,
|
|
'</strong> <input form="super-form" style="display: none" class="disabled" name="selected_facets" value=',
|
|
'categories_exact:' + facet_value,
|
|
'>',
|
|
'<button id="remove-categories-filter"',
|
|
'class="btn btn-lg p-0 text-danger btn-link"><i class="fa fa-window-close"></i></button>'
|
|
].join(' ')
|
|
);
|
|
}
|
|
|
|
}
|
|
|
|
function appendVariantFilter(facet_value) {
|
|
if (facet_value === "") {
|
|
$('#v-facets').html("");
|
|
} else {
|
|
$('#v-facets').html([
|
|
'Selected variant <strong>',
|
|
facet_value,
|
|
'</strong> <input form="super-form" style="display: none" class="disabled" name="selected_facets" value=',
|
|
'variants_exact:' + facet_value,
|
|
'>',
|
|
'<button id="remove-variants-filter"',
|
|
'class="btn btn-lg p-0 text-danger btn-link"><i class="fa fa-window-close"></i></button>'
|
|
].join(' ')
|
|
);
|
|
}
|
|
}
|
|
|
|
function clearLivecheck() {
|
|
$("#id_livecheck_broken").prop("checked", false);
|
|
$("#id_livecheck_outdated").prop("checked", false);
|
|
$("#id_livecheck_uptodate").prop("checked", false);
|
|
$("#super-submit").click();
|
|
}
|
|
|
|
function applyInstalledFilesFilter() {
|
|
$("#super-submit").click();
|
|
}
|
|
|
|
function clearInstalledFilesFilter() {
|
|
$("#id_installed_file").val("");
|
|
$("#super-submit").click();
|
|
}
|
|
|
|
function ajaxFollowUnfollow(port_name, box_id, query) {
|
|
let url = `/port/${port_name}/${query}/`;
|
|
$.ajax({
|
|
type: 'GET',
|
|
url: url,
|
|
indexValue: {
|
|
port_name: port_name,
|
|
box_id: box_id,
|
|
query: query
|
|
},
|
|
data: {
|
|
'basic': "on"
|
|
},
|
|
success: function () {
|
|
let box_id = this.indexValue.box_id;
|
|
let port_name = this.indexValue.port_name;
|
|
let query = this.indexValue.query;
|
|
let box = document.getElementById(box_id);
|
|
setTimeout(function () {
|
|
if (query === 'unfollow') {
|
|
box.innerHTML = `<button onclick="ajaxFollowUnfollow('${port_name}', '${box_id}', 'follow');" class='btn text-light'><i class='fa fa-plus-circle'></i></button>`;
|
|
} else if (query === 'follow') {
|
|
box.innerHTML = `<button onclick="ajaxFollowUnfollow('${port_name}', '${box_id}', 'unfollow');" class='btn text-secondary'><i class='fa fa-minus-circle'></i></button>`;
|
|
}
|
|
}, 800);
|
|
},
|
|
beforeSend: function () {
|
|
let box = document.getElementById(box_id);
|
|
box.innerHTML = "";
|
|
box.innerHTML = '<button class="btn"><img width="22" src="/static/images/tspinner.gif"></button>';
|
|
},
|
|
dataType: 'html'
|
|
});
|
|
}
|