main.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. let data = {
  2. report: {},
  3. browser: {},
  4. instance: {},
  5. headers: {},
  6. latency: {},
  7. meta: {}
  8. };
  9. function render() {
  10. $('#pasteCollapse .card').html((btoa(JSON.stringify(data, null, 2))));
  11. let b = data['browser'];
  12. $('.browser-version').text(b['version']);
  13. $('.browser-language').text(b['language']);
  14. $('.browser-platform').text(b['platform']);
  15. $('.browser-product').text(b['product']);
  16. $('.browser-ua').text(b['userAgent']);
  17. }
  18. function browserInfo() {
  19. data['browser']['browser'] = navigator.appName;
  20. data['browser']['codename'] = navigator.appCodeName;
  21. data['browser']['version'] = navigator.appVersion;
  22. data['browser']['online'] = navigator.onLine;
  23. data['browser']['language'] = navigator.language;
  24. data['browser']['platform'] = navigator.platform;
  25. data['browser']['product'] = navigator.product;
  26. data['browser']['userAgent'] = navigator.userAgent;
  27. render();
  28. }
  29. function instanceForm() {
  30. $('#instanceInput').on('change keyup paste', function() {
  31. let el = $(this);
  32. let val = el.val();
  33. try {
  34. let parser = new URL(val);
  35. if(parser.protocol !== 'https:' || !parser.hostname || parser.hostname.indexOf('.') == -1) {
  36. return;
  37. }
  38. $('#instanceForm button[type="submit"]').removeAttr('disabled').removeClass('disabled');
  39. } catch(e) {
  40. }
  41. });
  42. }
  43. function fetchInstanceData(baseUrl) {
  44. let instanceUrl = baseUrl + '/api/nodeinfo/2.0.json';
  45. axios.get(instanceUrl)
  46. .then(function(res) {
  47. data['instance']['url'] = baseUrl;
  48. data['instance']['nodeinfo'] = res.data;
  49. data['headers'] = res.headers;
  50. let card = '<p class="mb-0 text-success">Successfully reached this instance.</p>';
  51. $('.instance-card').html(card);
  52. Object.keys(data['headers']).forEach(k => {
  53. let el = $('<p>').addClass('mb-0');
  54. let type = $('<span>').addClass('font-weight-bold').text(k + ': ');
  55. let val = $('<span>').text(data['headers'][k]);
  56. el = el.append(type, val);
  57. $('.response-headers').append(el);
  58. });
  59. }).catch(function(err) {
  60. console.log('error: ' + err);
  61. });
  62. }
  63. $('#instanceForm').submit(function(e) {
  64. e.preventDefault();
  65. e.stopPropagation()
  66. $('#instanceForm button').attr('disabled', 'disabled').addClass('disabled');
  67. let instance = $('#instanceInput').val();
  68. let issue = $('#instanceIssue').val();
  69. data['report']['issue'] = issue;
  70. let parser = new URL(instance);
  71. fetchInstanceData(parser.origin);
  72. $('.results').removeClass('d-none');
  73. return false;
  74. });
  75. function init() {
  76. data['meta']['timestamp'] = (new Date().toJSON());
  77. browserInfo();
  78. instanceForm();
  79. }
  80. init();
  81. setInterval(function() {
  82. init();
  83. }, 5000);