{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-drawio/src/client/preferences.js"],"names":["components","Preferences","defaults","GridSize","default","short","SnapSize","SnapPaddingSize","SnapWindowsInGrid","ShowFixedBrowser","InteractiveLayer","ShowDocumentGrid","DisableAExpWorkspace","DisableAltGrab","UseAsyncWorkspace","OfflineFirst","GraffleMode","FileIndex","SWXKeepAlive","LogBoot","PiTerminalURL","PiTerminalCWD","PiTerminalSecret","load","console","info","list","Object","keys","listBooleans","filter","ea","_","isBoolean","shortDescription","preferenceKey","pref","get","error","read","JSON","parse","hasOwnProperty","set","value","write","stringify","prefsNode","node","document","body","querySelector","log","createElement","classList","add","openInBody","dataset","undefined","preferenceValue","setAttribute","enable","applyPreference","disable","msg","lively","config","loadPreferences","forEach","getURLParameter","theParameter","params","window","location","search","substr","split","i","length","p","decodeURIComponent"],"mappings":"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","file":"preferences.js","sourcesContent":["import components from './morphic/component-loader.js';\n\n/*\n * Stores page-specific preferences in the body, so it gets saved/loaded with other content\n */\n\nexport default class Preferences {\n  \n  static get defaults() {\n    return  {\n      GridSize: {default: 100, short: \"grid size\"},\n      SnapSize: {default: 20, short: \"snap size\"},\n      SnapPaddingSize: {default: 20, short: \"padding while snapping size\"},\n      SnapWindowsInGrid: {default: false, short: \"snap windows in grid\"},\n      ShowFixedBrowser: {default: true, short: \"show fixed browser\"},\n      InteractiveLayer: {default: false, short: \"dev methods\"},\n      ShowDocumentGrid: {default: false, short: \"show grid\"},\n      DisableAExpWorkspace: {default: false, short: \"disable AExp in workspace\"},\n      DisableAltGrab: {default: false, short: \"disable alt grab with hand\"},\n      UseAsyncWorkspace: {default: false, short: \"support await in eval\"},\n      OfflineFirst: {default: false, short: \"use offline first swx cache\"},\n      GraffleMode: {default: false, short: \"create shapes by drag and hold S/C/F/D\"},\n      FileIndex: {default: false, short: \"local file index\"},\n      SWXKeepAlive: {default: true, short: \"keep SWX alive\"},\n      LogBoot: {default: false, short: \"keep bootlog\"},\n      PiTerminalURL: {default: \"http://localhost:3000/\", short: \"url of pi terminal\"},\n      PiTerminalCWD: {default: \"\", short: \"current working directory of pi terminal\"},\n      PiTerminalSecret: {default: \"\", short: \"pi terminal credentials\"},\n      \n    }\n  }\n  \n  \n  static load() {\n    console.info('Load preferences')\n  }\n  \n  // List all avaiable preferences\n  static list () {\n    return Object\n      .keys(this.defaults)\n  }\n\n  static listBooleans () {\n    return Object\n      .keys(this.defaults).filter(ea => _.isBoolean(this.defaults[ea].default))\n  }\n\n  \n  static shortDescription(preferenceKey) {\n    var pref = this.defaults[preferenceKey]\n    if (pref && pref.short) \n      return pref.short\n    else\n      return preferenceKey\n  }\n  \n  /* get preference, consider defaults */\n  static get (preferenceKey) {\n    if (!preferenceKey) {\n      console.error('No preference key was specified')\n      return\n    }\n    \n    let pref = this.read(preferenceKey)\n    if (typeof pref === 'string') {\n      return JSON.parse(pref)\n    }\n    \n    pref = this.defaults[preferenceKey]\n    if (!pref) {\n      console.error(`Preference \"${preferenceKey}\" does not exist`)\n      return\n    }\n    \n    if(pref.hasOwnProperty('default')) {\n      return pref.default\n    }\n  }\n  \n  \n  static set(preferenceKey, value) {\n    var pref = this.write(preferenceKey, JSON.stringify(value))     \n  }\n  \n  static get prefsNode() {\n    // #BUG: reloading Preferences causes dataset to be not defined anymore\n    let node = document.body.querySelector('.lively-preferences');\n    if (!node) {\n      console.log(\"Create prefereces\")\n      node = document.createElement('div'); // we cannot use custom comps they are async\n      node.classList.add(\"lively-preferences\")\n      node.classList.add(\"lively-content\")\n      components.openInBody(node)\n    }\n    return node\n  }\n  \n  static read(preferenceKey) {\n    return this.prefsNode && this.prefsNode.dataset ?\n      this.prefsNode.dataset[preferenceKey] :\n      undefined;\n  }\n  \n  static write(preferenceKey, preferenceValue) {\n    if(!this.prefsNode) { return; }\n    if (!this.prefsNode.dataset) {\n      this.prefsNode.setAttribute(\"data-foo\", true); // force dataset\n    }\n    this.prefsNode.dataset[preferenceKey] = preferenceValue;\n  }\n  \n  static enable(preferenceKey) {\n    Preferences.write(preferenceKey, \"true\")\n    this.applyPreference(preferenceKey)\n  }\n\n  static disable(preferenceKey) {\n    Preferences.write(preferenceKey, \"false\")\n    this.applyPreference(preferenceKey)\n  }\n  \n  static applyPreference (preferenceKey) {\n    if (!preferenceKey) {\n      console.error('No preference key was specified')\n      return\n    }\n    \n    const msg = `on${preferenceKey}Preference`\n    if (!lively[msg]) { \n      // console.warn(`[preference] No event handler registered for \"${preferenceKey}\"`)\n      return\n    }\n    \n    const config = this.get(preferenceKey)\n    lively[msg](config)\n  }\n  \n  static loadPreferences() {\n    Object.keys(Preferences.defaults).forEach(preferenceKey => {\n      this.applyPreference(preferenceKey)\n    })\n  }\n\n  static getURLParameter(theParameter) {\n    var params = window.location.search.substr(1).split('&');\n  \n    for (var i = 0; i < params.length; i++) {\n      var p=params[i].split('=');\n      if (p[0] == theParameter) {\n        return decodeURIComponent(p[1]);\n      }\n    }\n    return false;\n  }\n}\n\nPreferences.load()\n\n"]}