// Module Imports
global.jQuery = require('jquery');
const $ = jQuery;
const Popper = require('popper.js');
const bootstrap = require('bootstrap');
const selectpicker = require('bootstrap-select');
const animsition = require('animsition');
const ClipboardJS = require('clipboard');
const queryLocation = $('#location');
const queryType = $('#query_type');
const queryTarget = $('#query_target');
const resultsContainer = $('#hg-results');
const formContainer = $('#hg-form');
const resultsAccordion = $('#hg-accordion');
const backButton = $('#hg-back-btn');
const resetResults = () => {
queryLocation.selectpicker('deselectAll');
queryLocation.selectpicker('val', '');
queryType.selectpicker('val', '');
queryTarget.val('');
resultsContainer.animsition('out', formContainer, '#');
resultsContainer.hide();
formContainer.show();
formContainer.animsition('in');
backButton.hide();
resultsAccordion.empty();
};
const reloadPage = () => {
queryLocation.selectpicker('deselectAll');
queryLocation.selectpicker('val', '');
queryType.selectpicker('val', '');
queryTarget.val('');
resultsAccordion.empty();
};
queryLocation.selectpicker({
liveSearchNormalize: true,
style: '',
styleBase: 'form-control',
iconBase: '',
tickIcon: 'remixicon-check-line',
});
queryType.selectpicker({
liveSearchNormalize: true,
style: '',
styleBase: 'form-control',
iconBase: '',
tickIcon: 'remixicon-check-line',
});
$(document).ready(() => {
reloadPage();
resultsContainer.hide();
$('#hg-ratelimit-query').modal('hide');
backButton.hide();
$('.animsition').animsition({
inClass: 'fade-in',
outClass: 'fade-out',
inDuration: 800,
outDuration: 800,
transition: (url) => { window.location.href = url; },
});
formContainer.animsition('in');
});
const queryApp = (queryType, queryTypeName, locationList, queryTarget) => {
const resultsTitle = `${queryTypeName} Query for ${queryTarget}`;
$('#hg-results-title').html(resultsTitle);
$('#hg-submit-icon').empty().removeClass('hg-loading').html('');
$.each(locationList, (n, loc) => {
const locationName = $(`#${loc}`).data('display-name');
const networkName = $(`#${loc}`).data('netname');
const contentHtml = `
`;
if ($(`#${loc}-output`).length) {
$(`#${loc}-output`).replaceWith(contentHtml);
} else {
$('#hg-accordion').append(contentHtml);
}
const iconLoading = ``;
$(`#${loc}-heading-text`).text(locationName);
$(`#${loc}-status-container`)
.addClass('hg-loading')
.find('.hg-status-btn')
.empty()
.html(iconLoading);
const generateError = (errorClass, locError, text) => {
const iconError = '';
$(`#${locError}-heading`).removeClass('text-secondary bg-light').addClass(`bg-${errorClass}`);
$(`#${locError}-heading-text`).removeClass('text-secondary');
$(`#${locError}-heading`).find('.hg-menu-btn').removeClass('btn-light').addClass(`btn-${errorClass}`);
$(`#${locError}-status-container`)
.removeClass('hg-loading')
.find('.hg-status-btn')
.empty()
.html(iconError);
$(`#${locError}-text`).html(text);
}
$.ajax({
url: '/lg',
type: 'POST',
data: JSON.stringify({
location: loc,
query_type: queryType,
target: queryTarget,
}),
contentType: 'application/json; charset=utf-8',
context: document.body,
async: true,
timeout: 15000,
})
.done((data, textStatus, jqXHR) => {
const displayHtml = `${jqXHR.responseText}
`;
const iconSuccess = '';
$(`#${loc}-heading`).removeClass('text-secondary bg-light').addClass('bg-primary');
$(`#${loc}-heading-text`).removeClass('text-secondary');
$(`#${loc}-heading`).find('.hg-menu-btn').removeClass('btn-light').addClass('btn-primary');
$(`#${loc}-status-container`)
.removeClass('hg-loading')
.find('.hg-status-btn')
.empty()
.html(iconSuccess);
$(`#${loc}-text`).empty().html(displayHtml);
})
.fail((jqXHR, textStatus, errorThrown) => {
const codesDanger = [401, 415, 500, 501, 503];
const codesWarning = [405];
if (textStatus === 'timeout') {
const displayText = 'Request timed out.';
const displayHtml = `${displayText}
`;
const iconTimeout = '';
$(`#${loc}-heading`).removeClass('text-secondary bg-light').addClass('bg-warning');
$(`#${loc}-heading-text`).removeClass('text-secondary');
$(`#${loc}-status-container`).empty().removeClass('hg-loading').html(iconTimeout);
$(`#${loc}-heading`).find('.hg-menu-btn').removeClass('btn-light').addClass('btn-warning');
$(`#${loc}-text`).html(displayHtml);
} else if (codesDanger.includes(jqXHR.status)) {
generateError('danger', loc, jqXHR.responseText);
} else if (codesWarning.includes(jqXHR.status)) {
generateError('warning', loc, jqXHR.responseText);
} else if (jqXHR.status === 429) {
resetResults();
$('#hg-ratelimit-query').modal('show');
}
})
.always(() => {
$(`#${loc}-status-btn`).removeAttr('disabled');
$(`#${loc}-copy-btn`).removeAttr('disabled');
});
$(`#${locationList[0]}-content`).collapse('show');
});
};
// Submit Form Action
$('#lgForm').submit((event) => {
event.preventDefault();
$('#hg-submit-icon').empty().html('').addClass('hg-loading');
const queryType = $('#query_type').val();
const queryTypeTitle = $(`#${queryType}`).data('display-name');
const queryLocation = $('#location').val();
const queryTarget = $('#query_target').val();
queryApp(queryType, queryTypeTitle, queryLocation, queryTarget);
$('#hg-form').animsition('out', $('#hg-results'), '#');
$('#hg-form').hide();
$('#hg-results').show();
$('#hg-results').animsition('in');
$('#hg-submit-spinner').remove();
$('#hg-back-btn').show();
$('#hg-back-btn').animsition('in');
});
$('#hg-back-btn').click(() => {
resetResults();
});
const clipboard = new ClipboardJS('.hg-copy-btn');
clipboard.on('success', (e) => {
$(e.trigger).find('.hg-copy-icon').removeClass('remixicon-checkbox-multiple-blank-line').addClass('remixicon-checkbox-multiple-line');
e.clearSelection();
setTimeout(() => {
$(e.trigger).find('.hg-copy-icon').removeClass('remixicon-checkbox-multiple-line').addClass('remixicon-checkbox-multiple-blank-line');
}, 800);
});
clipboard.on('error', (e) => {
console.log(e);
});
$('#hg-accordion').on('mouseenter', '.hg-status-btn', (e) => {
$(e.currentTarget)
.find('.hg-status-icon')
.addClass('remixicon-repeat-line');
});
$('#hg-accordion').on('mouseleave', '.hg-status-btn', (e) => {
$(e.currentTarget)
.find('.hg-status-icon')
.removeClass('remixicon-repeat-line');
});
$('#hg-accordion').on('click', '.hg-status-btn', (e) => {
const thisLocation = $(e.currentTarget).data('location');
console.log(`Refreshing ${thisLocation}`);
const queryType = $('#query_type').val();
const queryTypeTitle = $(`#${queryType}`).data('display-name');
const queryTarget = $('#query_target').val();
queryApp(queryType, queryTypeTitle, [thisLocation,], queryTarget);
});
$('#hg-ratelimit-query').on('shown.bs.modal', () => {
$('#hg-ratelimit-query').trigger('focus');
});
$('#hg-ratelimit-query').find('btn').on('click', () => {
$('#hg-ratelimit-query').modal('hide');
});