MMichał Szymaniaksubsync online
668c7bc1创建于 2020年3月30日历史提交
import Cookies from 'js-cookie';

export class Settings {

  constructor() {
    this.assign(this.defaults);

    let url = [ location.origin ];
    if (typeof baseurl !== 'undefined') {
      url = url.concat(baseurl.split('/'));
    } else {
      const pathname = location.pathname.split('/');
      pathname.pop();
      url = url.concat(pathname);
    }
    this.url = url.filter(x => x !== '' && x !== '.').join('/') + '/';
    this.lang = typeof user_language !== 'undefined' ? user_language : 'en';
  }

  assign(settings) {
    for (const [key, val] of Object.entries(settings)) {
      this[key] = val;
    }
  }

  get defaultJobsNo() {
    if (navigator.hardwareConcurrency && navigator.hardwareConcurrency > 1) {
      return Math.min(navigator.hardwareConcurrency, 6);
    }
    return 2;
  }

  get defaults() {
    return {
      lang: 'pl',
      url: undefined,
      logLevel: 20,
      jobsNo: undefined,
      maxPointDist: 2,
      minPointsNo: 20,
      windowSize: 30 * 60,
      minWordProb: 0.3,
      minWordLen: 5,
      minCorrelation: 0.9999,
      minWordsSim: 0.6,
    }
  }

  get keys() {
    return Object.keys(this.defaults);
  }

  serialize() {
    const res = {}
    for (const key of this.keys) {
      if (key in this) {
        res[key] = this[key];
      }
    }
    return res;
  }

  save() {
    const settings = {};
    const keys = [ 'jobsNo', 'maxPointDist', 'minPointsNo', 'windowSize',
      'minWordProb', 'minWordLen', 'minCorrelation', 'minWordsSim' ];
    for (const key of keys) {
      settings[key] = this[key];
    }
    Cookies.set('settings', settings, { expires: 30 });
  }

  load() {
    const settings = Cookies.getJSON('settings');
    settings && this.assign(settings);
  }
}

export default new Settings();