Home Reference Source

scripts/config/const.js

let _clipdata = {
  name: "nothing",
  mime: "nothing",
  data: undefined
};

let _clipboards = {};

import * as ctrlconfig from '../path-controller/config/config.js';

window.setInterval(() => {
  let cb = navigator.clipboard;

  if (!cb || !cb.read) {
    return;
  }

  cb.read().then((data) => {
    for (let item of data) {
      for (let i = 0; i < item.types.length; i++) {
        let type = item.types[i];

        if (!(type in _clipboards)) {
          _clipboards[type] = {
            name: type,
            mime: type,
            data: undefined
          };
        }
        ;

        item.getType(type).then((blob) => new Response(blob).text()).then((text) => {
          _clipboards[type].data = text;
        });
      }

      //item.getType("text/css").then((blob) => blob.text()).then((text) => {
      //  console.log("text", text);
      //});
    }
    //_clipdata.mime =
  }).catch(function () {
  });
}, 200);

let exports = {
  /*client code can override this using .loadConstants, here is a simple implementation
    that just handles color data

    desiredMimes is either a string, or an array of strings
   */
  getClipboardData(desiredMimes = "text/plain") {
    if (typeof desiredMimes === "string") {
      desiredMimes = [desiredMimes];
    }

    for (let m of desiredMimes) {
      let cb = _clipboards[m];

      if (cb && cb.data) {
        return cb;
      }
    }
  },
  /*client code can override this, here is a simple implementation
    that just handles color data
   */
  setClipboardData(name, mime, data) {
    _clipboards[mime] = {
      name: name,
      mime: mime,
      data: data
    };

    let clipboard = navigator.clipboard;
    if (!clipboard) {
      return;
    }

    try {
      clipboard.write([new ClipboardItem({
        [mime]: new Blob([data], {type: mime})
      })]).catch((error) => {
        //try pushing through text/plain
        if (mime.startsWith("text") && mime !== "text/plain") {
          this.setClipboardData(name, "text/plain", data);
        } else {
          console.error(error);
        }
      });
    } catch (error) {
      console.log(error.stack);
      console.log("failed to write to system clipboard");
    }
  },
  colorSchemeType: "light",
  docManualPath  : "../simple_docsys/doc_build/",

  //add textboxes to rollar sliders,
  //note that  users can also double click them to
  //enter text as well
  useNumSliderTextboxes: true,

  numSliderArrowLimit: 3, //threshold to check if numslider arrow was clicked
  simpleNumSliders   : false,

  menusCanPopupAbove: false,
  menu_close_time   : 500,
  doubleClickTime   : 500,

  //timeout for press-and-hold (touch) version of double clicking
  doubleClickHoldTime: 750,
  DEBUG              : {
    paranoidEvents      : false,
    screenborders       : false,
    areaContextPushes   : false,
    allBordersMovable   : false,
    doOnce              : false,
    modalEvents         : false,
    areaConstraintSolver: false,
    datapaths           : false,

    domEvents        : false,
    domEventAddRemove: false,

    debugUIUpdatePerf: false, //turns async FrameManager.update_intern loop into sync

    screenAreaPosSizeAccesses: false,
    buttonEvents             : false,

    /*
    customWindowSize: {
      width: 2048, height: 2048
    },
    //*/
  },

  //auto load 1d bspline templates, can hurt startup time
  autoLoadSplineTemplates: true,

  addHelpPickers: true,

  useAreaTabSwitcher : false,
  autoSizeUpdate     : true,
  showPathsInToolTips: true,

  enableThemeAutoUpdate: true,

  loadConstants: function (args) {
    for (let k in args) {
      if (k === "loadConstants")
        continue;

      this[k] = args[k];
    }

    ctrlconfig.setConfig(this);
  }
};

export default exports;
window.DEBUG = exports.DEBUG;

let cfg = document.getElementById("pathux-config");
if (cfg) {
  console.error("CONFIG CONFIG", cfg.innerText);
  exports.loadConstants(JSON.parse(cfg.innerText));
}