tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ui.js (3117B)


      1 const UI = {
      2  createElement: config => {
      3    if (!config) return;
      4    const elementType = config.element || "div";
      5    const element = document.createElement(elementType);
      6 
      7    Object.keys(config).forEach(property => {
      8      const value = config[property];
      9      switch (property.toLowerCase()) {
     10        case "id":
     11        case "src":
     12        case "style":
     13        case "placeholder":
     14        case "title":
     15        case "accept":
     16          element.setAttribute(property, value);
     17          return;
     18        case "classname":
     19          element.setAttribute("class", value);
     20          return;
     21        case "colspan":
     22          element.setAttribute("colspan", value);
     23          return;
     24        case "text":
     25          element.innerText = value;
     26          return;
     27        case "value":
     28          element.value = value;
     29          return;
     30        case "html":
     31          element.innerHTML = value;
     32          return;
     33        case "onclick":
     34          element.onclick = value.bind(element);
     35          return;
     36        case "onchange":
     37          element.onchange = value.bind(element);
     38          return;
     39        case "onkeydown":
     40          element.onkeydown = value.bind(element);
     41          return;
     42        case "onkeyup":
     43          element.onkeyup = value.bind(element);
     44          return;
     45        case "type":
     46          if (elementType === "input") element.setAttribute("type", value);
     47          return;
     48        case "children":
     49          if (value instanceof Array) {
     50            value.forEach(child => {
     51              const childElement =
     52                child instanceof Element ? child : UI.createElement(child);
     53              if (!childElement) return;
     54              element.appendChild(childElement);
     55            });
     56          } else {
     57            const child = value;
     58            const childElement =
     59              child instanceof Element ? child : UI.createElement(child);
     60            if (!childElement) return;
     61            element.appendChild(childElement);
     62            element.appendChild(childElement);
     63          }
     64          return;
     65        case "disabled":
     66          if (value) element.setAttribute("disabled", true);
     67          return;
     68        case "checked":
     69          if (value) element.setAttribute("checked", true);
     70          return;
     71        case "indeterminate":
     72          element.indeterminate = value;
     73          return;
     74      }
     75    });
     76    return element;
     77  },
     78  getElement: id => {
     79    return document.getElementById(id);
     80  },
     81  getRoot: () => {
     82    return document.getElementsByTagName("body")[0];
     83  },
     84  scrollPositions: {},
     85  saveScrollPosition: elementId => {
     86    let scrollElement = UI.getElement(elementId);
     87    if (!scrollElement) return;
     88    UI.scrollPositions[elementId] = {
     89      scrollLeft: scrollElement.scrollLeft,
     90      scrollRight: scrollElement.scrollRight
     91    };
     92  },
     93  loadScrollPosition: elementId => {
     94    let scrollElement = UI.getElement(elementId);
     95    if (!scrollElement) return;
     96    if (!UI.scrollPositions[elementId]) return;
     97    scrollElement.scrollLeft = UI.scrollPositions[elementId].scrollLeft;
     98    scrollElement.scrollRight = UI.scrollPositions[elementId].scrollRight;
     99  }
    100 };