demo.js 5.1 KB
Newer Older
C
codecalm 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
'use strict';

class TablerDemo {
  constructor() {
    this.init();

    this.form = document.querySelector('.js-layout-form');

    if(this.form) {
      this.form.addEventListener('submit', (e) => {
        e.preventDefault();
        this.onSubmitForm();
      });

      var inputs = this.form.querySelectorAll('input[type="radio"]');
      for (var i = 0; i < inputs.length; i++) {
        inputs[i].addEventListener('change', () => {
          this.onSubmitForm();
        });
      }

      this.initFormControls();
    }
  };

  init() {
    this.config = this.getConfig();
  };

  getConfig = function () {
    return {
      colorScheme: (localStorage.getItem('tablerColorScheme')) ? localStorage.getItem('tablerColorScheme') : 'light',
      sidebarColor: (localStorage.getItem('tablerSidebarColor')) ? localStorage.getItem('tablerSidebarColor') : 'light',
      headerColor: (localStorage.getItem('tablerHeaderColor')) ? localStorage.getItem('tablerHeaderColor') : 'light',
      navPosition: (localStorage.getItem('tablerNavPosition')) ? localStorage.getItem('tablerNavPosition') : 'side',
      sidebarSize: (localStorage.getItem('tablerSidebarSize')) ? localStorage.getItem('tablerSidebarSize') : 'default',
      sidebarPosition: (localStorage.getItem('tablerSidebarPosition')) ? localStorage.getItem('tablerSidebarPosition') : 'left'
    };
  };

  setConfig = function (key, value, availableValues, onSuccess) {
    if (availableValues && availableValues.indexOf(value) !== -1) {
      key = 'tabler' + key.charAt(0).toUpperCase() + key.slice(1);

      localStorage.setItem(key, value);

      onSuccess && onSuccess(value);
    }

    return this.getConfig();
  };

  onSubmitForm = function () {
    const form = this.form;

    this.toggleColorScheme(form.querySelector('[name="color-scheme"]:checked').value);
    this.toggleNavPosition(form.querySelector('[name="nav-position"]:checked').value);
    this.toggleSidebarPosition(form.querySelector('[name="sidebar-position"]:checked').value);
    this.toggleSidebarSize(form.querySelector('[name="sidebar-size"]:checked').value);
    this.toggleSidebarColor(form.querySelector('[name="sidebar-color"]:checked').value);
    this.toggleHeaderColor(form.querySelector('[name="header-color"]:checked').value);
  };

  initFormControls = function() {
    const config = this.getConfig();

    this.toggleColorScheme(config.colorScheme);
    this.toggleNavPosition(config.navPosition);
    this.toggleSidebarPosition(config.sidebarPosition);
    this.toggleSidebarSize(config.sidebarSize);
    this.toggleSidebarColor(config.sidebarColor);
    this.toggleHeaderColor(config.headerColor);
  };

  setFormValue = function(name, value,) {
    let elements = this.form.querySelectorAll(`[name="${name}"]`);

    if(elements) {
      elements.forEach((e) => e.checked = false);
      this.form.querySelector(`[name="${name}"][value="${value}"]`).checked = true;
    }
  };

  renderManagerHtml(elem) {
    elem.innerHTML = 'test2';
  };

  /*
  Color scheme toggle
   */
  toggleColorScheme(color) {
    return this.setConfig('colorScheme', color, ['dark', 'light'], () => {
      if (color === 'dark') {
        document.body.classList.add('theme-dark');
      } else {
        document.body.classList.remove('theme-dark');
      }

      this.setFormValue('color-scheme', color);
    });
  };

  toggleNavPosition(position) {
    return this.setConfig('navPosition', position, ['top', 'side'], () => {
      this.setFormValue('nav-position', position);
    });
  };

  toggleSidebarPosition(position) {
    return this.setConfig('sidebarPosition', position, ['left', 'right'], () => {
      if (position === 'right') {
        document.querySelector('.js-sidebar').classList.add('navbar-right');
      } else {
        document.querySelector('.js-sidebar').classList.remove('navbar-right');
      }

      this.setFormValue('sidebar-position', position);
    });
  };

  toggleSidebarSize(size) {
    return this.setConfig('sidebarSize', size, ['default', 'folded'], () => {
      if (size === 'folded') {
        document.querySelector('.js-sidebar').classList.add('navbar-folded');
      } else {
        document.querySelector('.js-sidebar').classList.remove('navbar-folded');
      }

      this.setFormValue('sidebar-size', size);
    });
  };

  toggleSidebarColor(color) {
    return this.setConfig('sidebarColor', color, ['dark', 'light'], () => {
      if (color === 'dark') {
        document.querySelector('.js-sidebar').classList.add('navbar-dark');
      } else {
        document.querySelector('.js-sidebar').classList.remove('navbar-dark');
      }

      this.setFormValue('sidebar-color', color);
    });
  };

  toggleHeaderColor(color) {
    return this.setConfig('headerColor', color, ['dark', 'light'], () => {
      if (color === 'dark') {
        document.querySelector('.js-header').classList.add('navbar-dark');
      } else {
        document.querySelector('.js-header').classList.remove('navbar-dark');
      }

      this.setFormValue('header-color', color);
    });
  };
}

/*
Init demo
 */


(function () {
  const demo = new TablerDemo();
  window.DEMO = demo;

  let elem = document.getElementById('layout-manager');

  if (elem) {
    demo.renderManagerHtml(elem);
  }
})();