import { iconLoading, iconError, iconTimeout, iconSuccess, tagGroup, tagLabel, resultsTitle, outputBlock, } from './components.es6'; import jQuery from '../node_modules/jquery'; import hgConf from './frontend.json'; import { resetResults } from './util.es6'; const $ = jQuery; function queryApp(queryType, queryTypeName, locationList, queryTarget, queryVrf) { // $('#hg-results-title').html( // tagGroup( // tagLabel( // 'loading', // 'query-type', // queryTypeName, // ), // tagLabel( // 'primary', // 'query-target', // queryTarget, // ), // ) // + tagGroup( // tagLabel( // 'loading', // 'query-vrf-loc', // locationList.join(', '), // ), // tagLabel( // 'secondary', // 'query-target', // queryVrf, // ), // ), // ); $('#hg-results-title').html( resultsTitle(queryTarget, queryTypeName, queryVrf, hgConf.config.branding.text.query_vrf), ); $('#hg-submit-icon') .empty() .removeClass('hg-loading') .html(''); $.each(locationList, (n, loc) => { const locationName = $(`#${loc}`).data('display-name'); const contentHtml = outputBlock(loc); if ($(`#${loc}-output`).length) { $(`#${loc}-output`).replaceWith(contentHtml); } else { $('#hg-accordion').append(contentHtml); } $(`#${loc}-heading-text`).text(locationName); $(`#${loc}-status-container`) .addClass('hg-loading') .find('.hg-status-btn') .empty() .html(iconLoading(loc)); const generateError = (errorClass, locError, text) => { $(`#${locError}-heading`) .removeClass('bg-overlay') .addClass(`bg-${errorClass}`); $(`#${locError}-heading`) .find('.hg-menu-btn') .removeClass('btn-loading') .addClass(`btn-${errorClass}`); $(`#${locError}-status-container`) .removeClass('hg-loading') .find('.hg-status-btn') .empty() .html(iconError) .addClass('hg-done'); $(`#${locError}-text`).html(text); }; const timeoutError = (locError, text) => { $(`#${locError}-heading`) .removeClass('bg-overlay') .addClass('bg-warning'); $(`#${locError}-heading`) .find('.hg-menu-btn') .removeClass('btn-loading') .addClass('btn-warning'); $(`#${locError}-status-container`) .removeClass('hg-loading') .find('.hg-status-btn') .empty() .html(iconTimeout) .addClass('hg-done'); $(`#${locError}-text`) .empty() .html(text); }; $.ajax({ url: '/query', method: 'POST', data: JSON.stringify({ query_location: loc, query_type: queryType, query_target: queryTarget, query_vrf: queryVrf, response_format: 'html', }), contentType: 'application/json; charset=utf-8', context: document.body, async: true, timeout: hgConf.config.general.request_timeout * 1000, }) .done((data, textStatus, jqXHR) => { const displayHtml = `
${data.output}
`; $(`#${loc}-heading`) .removeClass('bg-overlay') .addClass('bg-primary'); $(`#${loc}-heading`) .find('.hg-menu-btn') .removeClass('btn-loading') .addClass('btn-primary'); $(`#${loc}-status-container`) .removeClass('hg-loading') .find('.hg-status-btn') .empty() .html(iconSuccess) .addClass('hg-done'); $(`#${loc}-text`) .empty() .html(displayHtml); }) .fail((jqXHR, textStatus, errorThrown) => { const statusCode = jqXHR.status; if (textStatus === 'timeout') { timeoutError(loc, hgConf.config.messages.request_timeout); } else if (jqXHR.status === 429) { resetResults(); $('#hg-ratelimit-query').modal('show'); } else if (statusCode === 500 && textStatus !== 'timeout') { timeoutError(loc, hgConf.config.messages.request_timeout); } else if ( jqXHR.responseJSON.alert === 'danger' || jqXHR.responseJSON.alert === 'warning' ) { generateError(jqXHR.responseJSON.alert, loc, jqXHR.responseJSON.output); } }) .always(() => { $(`#${loc}-status-btn`).removeAttr('disabled'); $(`#${loc}-copy-btn`).removeAttr('disabled'); }); $(`#${locationList[0]}-content`).collapse('show'); }); } module.exports = { queryApp, };