JAVASCRIPT 36
Db.js Guest on 23rd April 2021 03:15:11 PM
  1. (function () {
  2.     'use strict';
  3.  
  4.     var on = function (element, event, handler) {
  5.             if (element instanceof NodeList) {
  6.                 for (var i = 0, len = element.length; i < len; i++) {
  7.                     element[i].addEventListener(event, handler, false);
  8.                 }
  9.                 return;
  10.             }
  11.             if (!(element instanceof Array)) {
  12.                 element = [element];
  13.             }
  14.             for (var i in element) {
  15.                 if (typeof element[i].addEventListener !== 'function') {
  16.                     continue;
  17.                 }
  18.                 element[i].addEventListener(event, handler, false);
  19.             }
  20.         },
  21.         ajax = function (url, settings) {
  22.             var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
  23.             settings = settings || {};
  24.             xhr.open(settings.method || 'GET', url, true);
  25.             xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  26.             xhr.setRequestHeader('Accept', 'text/html');
  27.             xhr.onreadystatechange = function () {
  28.                 if (xhr.readyState === 4) {
  29.                     if (xhr.status === 200 && settings.success) {
  30.                         settings.success(xhr);
  31.                     } else if (xhr.status !== 200 && settings.error) {
  32.                         settings.error(xhr);
  33.                     }
  34.                 }
  35.             };
  36.             xhr.send(settings.data || '');
  37.         };
  38.  
  39.     on(document.querySelectorAll('.db-explain a'), 'click', function (e) {
  40.         if (e.target.tagName.toLowerCase() !== 'a') {
  41.             return;
  42.         }
  43.  
  44.         e.preventDefault();
  45.  
  46.         var $explain = e.target.parentElement.parentElement.querySelector('.db-explain-text'),
  47.             self = this;
  48.  
  49.         // hidden (see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent)
  50.         if ($explain.offsetParent === null) {
  51.             ajax(this.href, {
  52.                 success: function (xhr) {
  53.                     $explain.innerHTML = xhr.responseText;
  54.                     $explain.style.display = 'block';
  55.                     self.textContent = '[-] Explain';
  56.                 }
  57.             })
  58.         } else {
  59.             $explain.style.display = 'none';
  60.             this.textContent = '[+] Explain';
  61.         }
  62.     });
  63.  
  64.     on(document.getElementById('db-explain-all').querySelector('a'), 'click', function () {
  65.         var event = new MouseEvent('click', {
  66.             cancelable: true,
  67.             bubbles: true
  68.         });
  69.  
  70.         var elements = document.querySelectorAll('.db-explain a');
  71.         for (var i = 0, len = elements.length; i < len; i++) {
  72.             item.dispatchEvent(elements[i]);
  73.         }
  74.     });
  75. })();

Paste-bin is for source code and general debugging text.

Login or Register to edit, delete and keep track of your pastes and more.

Raw Paste

Login or Register to edit or fork this paste. It's free.