{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-livelyenergy/src/client/preferences.js"],"names":["Preferences","defaults","GridSize","default","short","SnapSize","SnapPaddingSize","SnapWindowsInGrid","ShowFixedBrowser","InteractiveLayer","ShowDocumentGrid","UseRP19JSX","DisableAExpWorkspace","UseProxiesForAExprs","DisableAltGrab","UseAsyncWorkspace","OfflineFirst","GraffleMode","FileIndex","SWXKeepAlive","LogBoot","PiTerminalURL","PiTerminalCWD","PiTerminalSecret","ExtraSearchRoots","TipOfTheDay","load","console","info","list","Object","keys","listBooleans","filter","ea","_","isBoolean","shortDescription","preferenceKey","pref","get","error","read","JSON","parse","hasOwnProperty","set","value","write","stringify","prefsNode","window","document","node","body","querySelector","log","createElement","classList","add","insertBefore","firstChild","dataset","undefined","preferenceValue","setAttribute","enable","applyPreference","disable","msg","lively","config","loadPreferences","forEach","getURLParameter","theParameter","params","location","search","substr","split","i","length","p","decodeURIComponent"],"mappings":";;;;;;AAAA;;;;AAIe,YAAMA,WAAN,CAAkB;;AAE/B,mBAAWC,QAAX,GAAsB;AACpB,iBAAQ;AACNC,sBAAU,EAACC,SAAS,GAAV,EAAeC,OAAO,WAAtB,EADJ;AAENC,sBAAU,EAACF,SAAS,EAAV,EAAcC,OAAO,WAArB,EAFJ;AAGNE,6BAAiB,EAACH,SAAS,EAAV,EAAcC,OAAO,6BAArB,EAHX;AAING,+BAAmB,EAACJ,SAAS,KAAV,EAAiBC,OAAO,sBAAxB,EAJb;AAKNI,8BAAkB,EAACL,SAAS,IAAV,EAAgBC,OAAO,oBAAvB,EALZ;AAMNK,8BAAkB,EAACN,SAAS,KAAV,EAAiBC,OAAO,aAAxB,EANZ;AAONM,8BAAkB,EAACP,SAAS,IAAV,EAAgBC,OAAO,WAAvB,EAPZ;AAQNO,wBAAY,EAACR,SAAS,KAAV,EAAiBC,OAAO,iCAAxB,EARN;AASNQ,kCAAsB,EAACT,SAAS,KAAV,EAAiBC,OAAO,2BAAxB,EAThB;AAUNS,iCAAqB,EAACV,SAAS,KAAV,EAAiBC,OAAO,gCAAxB,EAVf;AAWNU,4BAAgB,EAACX,SAAS,KAAV,EAAiBC,OAAO,4BAAxB,EAXV;AAYNW,+BAAmB,EAACZ,SAAS,KAAV,EAAiBC,OAAO,uBAAxB,EAZb;AAaNY,0BAAc,EAACb,SAAS,KAAV,EAAiBC,OAAO,6BAAxB,EAbR;AAcNa,yBAAa,EAACd,SAAS,KAAV,EAAiBC,OAAO,wCAAxB,EAdP;AAeNc,uBAAW,EAACf,SAAS,IAAV,EAAgBC,OAAO,kBAAvB,EAfL;AAgBNe,0BAAc,EAAChB,SAAS,KAAV,EAAiBC,OAAO,gBAAxB,EAhBR;AAiBNgB,qBAAS,EAACjB,SAAS,KAAV,EAAiBC,OAAO,cAAxB,EAjBH;AAkBNiB,2BAAe,EAAClB,SAAS,wBAAV,EAAoCC,OAAO,oBAA3C,EAlBT;AAmBNkB,2BAAe,EAACnB,SAAS,EAAV,EAAcC,OAAO,0CAArB,EAnBT;AAoBNmB,8BAAkB,EAACpB,SAAS,EAAV,EAAcC,OAAO,yBAArB,EApBZ;AAqBNoB,8BAAkB,EAACrB,SAAS,EAAV,EAAcC,OAAO,oBAArB,EArBZ;AAsBNqB,yBAAa,EAACtB,SAAS,IAAV,EAAgBC,OAAO,gCAAvB;AAtBP,WAAR;AAwBD;;AAED,eAAOsB,IAAP,GAAc;AACZC,kBAAQC,IAAR,CAAa,kBAAb;AACD;;AAED;AACA,eAAOC,IAAP,GAAe;AACb,iBAAOC,OACJC,IADI,CACC,KAAK9B,QADN,CAAP;AAED;;AAED,eAAO+B,YAAP,GAAuB;AACrB,iBAAOF,OACJC,IADI,CACC,KAAK9B,QADN,EACgBgC,MADhB,CACuBC,MAAMC,EAAEC,SAAF,CAAY,KAAKnC,QAAL,CAAciC,EAAd,EAAkB/B,OAA9B,CAD7B,CAAP;AAED;;AAGD,eAAOkC,gBAAP,CAAwBC,aAAxB,EAAuC;AACrC,cAAIC,OAAO,KAAKtC,QAAL,CAAcqC,aAAd,CAAX;AACA,cAAIC,QAAQA,KAAKnC,KAAjB,EACE,OAAOmC,KAAKnC,KAAZ,CADF,KAGE,OAAOkC,aAAP;AACH;;AAED;AACA,eAAOE,GAAP,CAAYF,aAAZ,EAA2B;AACzB,cAAI,CAACA,aAAL,EAAoB;AAClBX,oBAAQc,KAAR,CAAc,iCAAd;AACA;AACD;;AAED,cAAIF,OAAO,KAAKG,IAAL,CAAUJ,aAAV,CAAX;AACA,cAAI,OAAOC,IAAP,KAAgB,QAApB,EAA8B;AAC5B,mBAAOI,KAAKC,KAAL,CAAWL,IAAX,CAAP;AACD;;AAEDA,iBAAO,KAAKtC,QAAL,CAAcqC,aAAd,CAAP;AACA,cAAI,CAACC,IAAL,EAAW;AACTZ,oBAAQc,KAAR,CAAe,eAAcH,aAAc,kBAA3C;AACA;AACD;;AAED,cAAGC,KAAKM,cAAL,CAAoB,SAApB,CAAH,EAAmC;AACjC,mBAAON,KAAKpC,OAAZ;AACD;AACF;;AAGD,eAAO2C,GAAP,CAAWR,aAAX,EAA0BS,KAA1B,EAAiC;AAC/B,cAAIR,OAAO,KAAKS,KAAL,CAAWV,aAAX,EAA0BK,KAAKM,SAAL,CAAeF,KAAf,CAA1B,CAAX;AACD;;AAED,mBAAWG,SAAX,GAAuB;AACrB;AACA,cAAI,CAACC,OAAOC,QAAZ,EAAsB,OAAO,IAAP;;AAEtB,cAAIC,OAAOD,SAASE,IAAT,CAAcC,aAAd,CAA4B,qBAA5B,CAAX;AACA,cAAI,CAACF,IAAL,EAAW;AACT1B,oBAAQ6B,GAAR,CAAY,mBAAZ;AACAH,mBAAOD,SAASK,aAAT,CAAuB,KAAvB,CAAP,CAFS,CAE6B;AACtCJ,iBAAKK,SAAL,CAAeC,GAAf,CAAmB,oBAAnB;AACAN,iBAAKK,SAAL,CAAeC,GAAf,CAAmB,gBAAnB;AACAP,qBAASE,IAAT,CAAcM,YAAd,CAA2BP,IAA3B,EAAiCD,SAASE,IAAT,CAAcO,UAA/C;AACD;AACD,iBAAOR,IAAP;AACD;;AAED,eAAOX,IAAP,CAAYJ,aAAZ,EAA2B;AACzB,iBAAO,KAAKY,SAAL,IAAkB,KAAKA,SAAL,CAAeY,OAAjC,GACL,KAAKZ,SAAL,CAAeY,OAAf,CAAuBxB,aAAvB,CADK,GAELyB,SAFF;AAGD;;AAED,eAAOf,KAAP,CAAaV,aAAb,EAA4B0B,eAA5B,EAA6C;AAC3C,cAAG,CAAC,KAAKd,SAAT,EAAoB;AAAE;AAAS;AAC/B,cAAI,CAAC,KAAKA,SAAL,CAAeY,OAApB,EAA6B;AAC3B,iBAAKZ,SAAL,CAAee,YAAf,CAA4B,UAA5B,EAAwC,IAAxC,EAD2B,CACoB;AAChD;AACD,eAAKf,SAAL,CAAeY,OAAf,CAAuBxB,aAAvB,IAAwC0B,eAAxC;AACD;;AAED,eAAOE,MAAP,CAAc5B,aAAd,EAA6B;AAC3BtC,sBAAYgD,KAAZ,CAAkBV,aAAlB,EAAiC,MAAjC;AACA,eAAK6B,eAAL,CAAqB7B,aAArB;AACD;;AAED,eAAO8B,OAAP,CAAe9B,aAAf,EAA8B;AAC5BtC,sBAAYgD,KAAZ,CAAkBV,aAAlB,EAAiC,OAAjC;AACA,eAAK6B,eAAL,CAAqB7B,aAArB;AACD;;AAED,eAAO6B,eAAP,CAAwB7B,aAAxB,EAAuC;AACrC,cAAI,CAACA,aAAL,EAAoB;AAClBX,oBAAQc,KAAR,CAAc,iCAAd;AACA;AACD;;AAED,gBAAM4B,MAAO,KAAI/B,aAAc,YAA/B;AACA,cAAI,CAACgC,OAAOD,GAAP,CAAL,EAAkB;AAChB;AACA;AACD;;AAED,gBAAME,SAAS,KAAK/B,GAAL,CAASF,aAAT,CAAf;AACAgC,iBAAOD,GAAP,EAAYE,MAAZ;AACD;;AAED,eAAOC,eAAP,GAAyB;AACvB1C,iBAAOC,IAAP,CAAY/B,YAAYC,QAAxB,EAAkCwE,OAAlC,CAA0CnC,iBAAiB;AACzD,iBAAK6B,eAAL,CAAqB7B,aAArB;AACD,WAFD;AAGD;;AAED,eAAOoC,eAAP,CAAuBC,YAAvB,EAAqC;AACnC,cAAIC,SAASzB,OAAO0B,QAAP,CAAgBC,MAAhB,CAAuBC,MAAvB,CAA8B,CAA9B,EAAiCC,KAAjC,CAAuC,GAAvC,CAAb;;AAEA,eAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIL,OAAOM,MAA3B,EAAmCD,GAAnC,EAAwC;AACtC,gBAAIE,IAAEP,OAAOK,CAAP,EAAUD,KAAV,CAAgB,GAAhB,CAAN;AACA,gBAAIG,EAAE,CAAF,KAAQR,YAAZ,EAA0B;AACxB,qBAAOS,mBAAmBD,EAAE,CAAF,CAAnB,CAAP;AACD;AACF;AACD,iBAAO,KAAP;AACD;AAxJ8B;;yBAAZnF,W;;AA2JrBA,kBAAY0B,IAAZ","file":"preferences.js","sourcesContent":["/*\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: true, short: \"show grid\"},\n      UseRP19JSX: {default: false, short: \"use rp19 implementation for jsx\"},\n      DisableAExpWorkspace: {default: false, short: \"disable AExp in workspace\"},\n      UseProxiesForAExprs: {default: false, short: \"proxy-based Active Expressions\"},\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: true, short: \"local file index\"},\n      SWXKeepAlive: {default: false, 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      ExtraSearchRoots: {default: [], short: \"extra search roots\"},\n      TipOfTheDay: {default: true, short: \"show tip of the day on startup\"}\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    if (!window.document) return null;\n    \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      document.body.insertBefore(node, document.body.firstChild);\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"]}