• Edit
  • Download
  • <!DOCTYPE html>
    <html class="zg-html">
    
    <head>
      <meta charset="utf-8">
      <title>ZingSoft Demo</title>
      <script nonce="undefined" src="https://cdn.zinggrid.com/zinggrid.min.js"></script>
      <style>
        body {
          background: #e2e2e2;
        }
    
        /* RANDOM
    ----------------------------------------------------- */
        .caption-row {
          display: flex;
          align-items: center;
        }
    
        .caption-row [random] {
          margin-left: auto;
        }
    
        .caption-row [theme] {
          margin-left: 15px;
        }
    
        @keyframes bodyGradient {
          0% {
            background-position: 52% 0;
          }
    
          50% {
            background-position: 49% 100%;
          }
    
          100% {
            background-position: 52% 0;
          }
        }
    
        /* RANDOM BUTTON */
        @keyframes RANDOM {
          0% {
            color: red;
          }
    
          16.667% {
            color: orange;
          }
    
          33.334% {
            color: yellow;
          }
    
          50% {
            color: green;
          }
    
          66.667% {
            color: blue;
          }
    
          83.334% {
            color: purple;
          }
        }
    
        [random] {
          background: #fff;
          border: 1px solid #e6e6e6;
          border-radius: 4px;
          cursor: pointer;
          height: 50px;
          font-size: 1rem;
          outline: none;
        }
    
        [random]>* {
          padding: 0 1px;
        }
    
        .r {
          color: red;
          animation: RANDOM 5s infinite linear;
        }
    
        .a {
          color: orange;
          animation: RANDOM 4s .6s infinite linear;
        }
    
        .n {
          color: yellow;
          animation: RANDOM 5s .3s infinite linear;
        }
    
        .d {
          color: green;
          animation: RANDOM 3s .8s infinite linear;
        }
    
        .o {
          color: blue;
          animation: RANDOM 6s .6s infinite linear;
        }
    
        .m {
          color: purple;
          animation: RANDOM 5s 1.5s infinite linear;
        }
    
        zing-grid[loading] {
          height: 469px;
        }
    
        zing-grid[loading] {
          height: 469px;
        }
      </style>
    </head>
    ​
    
    <body class="zg-body">
      <zing-grid theme id="randomGrid" sort filter pager page-size="5" src="https://jsdocs-9d00d.firebaseio.com/browsers">
        <zg-caption>
          <div class="caption-row">
            <span>Theme Switcher</span>
            <select theme>
              <option value="default">Default</option>
              <option value="dark">Dark</option>
              <option value="android">Android</option>
              <option value="ios">iOS</option>
              <option value="random">Random</option>
            </select>
            <button random>
              <span class="r">R</span>
              <span class="a">A</span>
              <span class="n">N</span>
              <span class="d">D</span>
              <span class="o">O</span>
              <span class="m">M</span>
            </button>
          </div>
        </zg-caption>
      </zing-grid>
      <script>
        ZingGrid.setLicense(['26ccbfec16b8be9ee98c7d57bee6e498']); // Get grid style element
        let zgRef, zgStyle, zgStyleText, themeRandom = 'random';
        window.addEventListener('load', () => {
          zgRef = document.querySelector('zing-grid');
          zgStyle = zgRef.shadowRoot.querySelector('style');
          zgStyleText = zgStyle.textContent;
          // Theme <select> change
          const $themeSel = document.querySelector('select[theme]');
          zgRef.setAttribute('theme', 'defa©ult');
          $themeSel.addEventListener('change', setTheme);
          // `Random` button click event
          document.querySelector('button[random]').addEventListener('click', e => randomize(data => {
            // Set 'theme' dropdown to 'random'
            $themeSel.value = 'random';
          }), {
            passive: true
          });
        });
    
        function randomize(cb) {
          // Set theme to 'random' to accept `newStyle` styles
          randomGrid.setAttribute('theme', themeRandom);
          // Set styles
          const newStyle = `
          :host([theme="${themeRandom}"]) {
          /* BACKGROUND */
          --theme-background-color: ${randRGBa(.2)};
          /* BORDER */
          --theme-border-color: ${randRGBa(.7)};
          /* COLOR */
          --theme-color-primary: ${randRGBa(1)};
          --theme-color-secondary: var(--theme-color-primary);
          /* FONT */
          --theme-color: ${randRGBa(1)};
          --theme-color_alt: ${randRGBa(1)};
          --theme-font-family: 'Roboto', verdana, sans-serif;
          --theme-font-size: ${rand(.7, 1.2)}rem;
          --theme-font-style: normal;
          --theme-font-weight: normal;
          --theme-line-height: 1rem;
          /* --------------------------------------- */
          /* ZG-CAPTION
          ------------------------------------------ */
          --zg-caption-background: ${randRGBa(1)};
          /* ZG-HEAD-CELL
          ------------------------------------------ */
          --zg-head-cell-background: ${randRGBa(.2)};
          --zg-head-cell-parent-background: ${randRGBa(.2)};
          /* ZG-INPUT
          ------------------------------------------ */
          --zg-input-background: ${randRGBa(.2)};
          /* ZG-PAGER
          ------------------------------------------ */
          --zg-pager-background: ${randRGBa(1)};
          /* ZG-ROW
          ------------------------------------------ */
          --zg-row-body-background_even: ${randRGBa(.2)};
          --zg-row-body-background_odd: ${randRGBa(.2)};
          /* ZG-SELECT
          ------------------------------------------ */
          --zg-select-text-background: ${randRGBa(.2)};
          }
        `;
          zgStyle.innerHTML = '';
          zgStyle.insertAdjacentText('afterbegin', `${newStyle} ${zgStyleText}`);
        }
        // Set <zing-grid> [theme]
        function setTheme(e) {
          const $EL = e.nodeName ? e : e.srcElement;
          const VALUE = $EL.value;
          if (!VALUE)
            return;
          // If 'random' theme
          if (VALUE === 'random')
            randomize();
          // Otherwise, set internal theme
          else {
            let theme = zgRef.getAttribute('theme');
            console.log(theme);
            zgRef.setAttribute('theme', VALUE);
          }
        }
        // Random fn
        function rand(min, max) {
          min = Math.ceil(min);
          max = Math.floor(max);
          return Math.floor(Math.random() * (max - min + 1)) + min;
        }
        // Set random rgba value
        function randRGBa(opacity) {
          return `rgba(${rand(1, 255)}, ${rand(1, 255)}, ${rand(1, 255)}, ${opacity})`;
        }
      </script>
    </body>
    
    </html>
    <!DOCTYPE html>
    <html class="zg-html">
    
    <head>
      <meta charset="utf-8">
      <title>ZingSoft Demo</title>
      <script src="https://cdn.zinggrid.com/zinggrid.min.js"></script>
    </head>
    ​
    
    <body class="zg-body">
      <zing-grid theme id="randomGrid" sort filter pager page-size="5" src="https://jsdocs-9d00d.firebaseio.com/browsers">
        <zg-caption>
          <div class="caption-row">
            <span>Theme Switcher</span>
            <select theme>
              <option value="default">Default</option>
              <option value="dark">Dark</option>
              <option value="android">Android</option>
              <option value="ios">iOS</option>
              <option value="random">Random</option>
            </select>
            <button random>
              <span class="r">R</span>
              <span class="a">A</span>
              <span class="n">N</span>
              <span class="d">D</span>
              <span class="o">O</span>
              <span class="m">M</span>
            </button>
          </div>
        </zg-caption>
      </zing-grid>
    </body>
    
    </html>
    body {
      background: #e2e2e2;
    }
    
    /* RANDOM
    ----------------------------------------------------- */
    .caption-row {
      display: flex;
      align-items: center;
    }
    
    .caption-row [random] {
      margin-left: auto;
    }
    
    .caption-row [theme] {
      margin-left: 15px;
    }
    
    @keyframes bodyGradient {
      0% {
        background-position: 52% 0;
      }
    
      50% {
        background-position: 49% 100%;
      }
    
      100% {
        background-position: 52% 0;
      }
    }
    
    /* RANDOM BUTTON */
    @keyframes RANDOM {
      0% {
        color: red;
      }
    
      16.667% {
        color: orange;
      }
    
      33.334% {
        color: yellow;
      }
    
      50% {
        color: green;
      }
    
      66.667% {
        color: blue;
      }
    
      83.334% {
        color: purple;
      }
    }
    
    [random] {
      background: #fff;
      border: 1px solid #e6e6e6;
      border-radius: 4px;
      cursor: pointer;
      height: 50px;
      font-size: 1rem;
      outline: none;
    }
    
    [random]>* {
      padding: 0 1px;
    }
    
    .r {
      color: red;
      animation: RANDOM 5s infinite linear;
    }
    
    .a {
      color: orange;
      animation: RANDOM 4s .6s infinite linear;
    }
    
    .n {
      color: yellow;
      animation: RANDOM 5s .3s infinite linear;
    }
    
    .d {
      color: green;
      animation: RANDOM 3s .8s infinite linear;
    }
    
    .o {
      color: blue;
      animation: RANDOM 6s .6s infinite linear;
    }
    
    .m {
      color: purple;
      animation: RANDOM 5s 1.5s infinite linear;
    }
    
    zing-grid[loading] {
      height: 469px;
    }
    // Get grid style element
    let zgRef, zgStyle, zgStyleText, themeRandom = 'random';
    window.addEventListener('load', () => {
      zgRef = document.querySelector('zing-grid');
      zgStyle = zgRef.shadowRoot.querySelector('style');
      zgStyleText = zgStyle.textContent;
      // Theme <select> change
      const $themeSel = document.querySelector('select[theme]');
      zgRef.setAttribute('theme', 'defa©ult');
      $themeSel.addEventListener('change', setTheme);
      // `Random` button click event
      document.querySelector('button[random]').addEventListener('click', e => randomize(data => {
        // Set 'theme' dropdown to 'random'
        $themeSel.value = 'random';
      }), {
        passive: true
      });
    });
    
    function randomize(cb) {
      // Set theme to 'random' to accept `newStyle` styles
      randomGrid.setAttribute('theme', themeRandom);
      // Set styles
      const newStyle = `
          :host([theme="${themeRandom}"]) {
          /* BACKGROUND */
          --theme-background-color: ${randRGBa(.2)};
          /* BORDER */
          --theme-border-color: ${randRGBa(.7)};
          /* COLOR */
          --theme-color-primary: ${randRGBa(1)};
          --theme-color-secondary: var(--theme-color-primary);
          /* FONT */
          --theme-color: ${randRGBa(1)};
          --theme-color_alt: ${randRGBa(1)};
          --theme-font-family: 'Roboto', verdana, sans-serif;
          --theme-font-size: ${rand(.7, 1.2)}rem;
          --theme-font-style: normal;
          --theme-font-weight: normal;
          --theme-line-height: 1rem;
          /* --------------------------------------- */
          /* ZG-CAPTION
          ------------------------------------------ */
          --zg-caption-background: ${randRGBa(1)};
          /* ZG-HEAD-CELL
          ------------------------------------------ */
          --zg-head-cell-background: ${randRGBa(.2)};
          --zg-head-cell-parent-background: ${randRGBa(.2)};
          /* ZG-INPUT
          ------------------------------------------ */
          --zg-input-background: ${randRGBa(.2)};
          /* ZG-PAGER
          ------------------------------------------ */
          --zg-pager-background: ${randRGBa(1)};
          /* ZG-ROW
          ------------------------------------------ */
          --zg-row-body-background_even: ${randRGBa(.2)};
          --zg-row-body-background_odd: ${randRGBa(.2)};
          /* ZG-SELECT
          ------------------------------------------ */
          --zg-select-text-background: ${randRGBa(.2)};
          }
        `;
      zgStyle.innerHTML = '';
      zgStyle.insertAdjacentText('afterbegin', `${newStyle} ${zgStyleText}`);
    }
    // Set <zing-grid> [theme]
    function setTheme(e) {
      const $EL = e.nodeName ? e : e.srcElement;
      const VALUE = $EL.value;
      if (!VALUE)
        return;
      // If 'random' theme
      if (VALUE === 'random')
        randomize();
      // Otherwise, set internal theme
      else {
        let theme = zgRef.getAttribute('theme');
        console.log(theme);
        zgRef.setAttribute('theme', VALUE);
      }
    }
    // Random fn
    function rand(min, max) {
      min = Math.ceil(min);
      max = Math.floor(max);
      return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    // Set random rgba value
    function randRGBa(opacity) {
      return `rgba(${rand(1, 255)}, ${rand(1, 255)}, ${rand(1, 255)}, ${opacity})`;
    }