UserSettingsHelper.mjs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import SplitTestHandler from '../SplitTests/SplitTestHandler.mjs'
  2. const SYSTEM_THEME_USER_CUTOFF_DATE = new Date(Date.UTC(2026, 2, 2, 12, 0, 0)) // 12pm GMT on March 2, 2026
  3. async function getOverallTheme(req, res, user) {
  4. if (user.ace.overallTheme != null) {
  5. return user.ace.overallTheme
  6. }
  7. if (user.signUpDate < SYSTEM_THEME_USER_CUTOFF_DATE) {
  8. // default / dark
  9. return ''
  10. }
  11. const systemOverallSplitTestAssignment =
  12. await SplitTestHandler.promises.getAssignment(
  13. req,
  14. res,
  15. 'new-user-system-overall-theme'
  16. )
  17. if (systemOverallSplitTestAssignment.variant === 'system') {
  18. return 'system'
  19. }
  20. // default / dark
  21. return ''
  22. }
  23. async function buildUserSettings(req, res, user) {
  24. return {
  25. mode: user.ace.mode,
  26. editorTheme: user.ace.theme,
  27. editorLightTheme: user.ace.lightTheme,
  28. editorDarkTheme: user.ace.darkTheme,
  29. fontSize: user.ace.fontSize,
  30. autoComplete: user.ace.autoComplete,
  31. autoPairDelimiters: user.ace.autoPairDelimiters,
  32. pdfViewer: user.ace.pdfViewer,
  33. syntaxValidation: user.ace.syntaxValidation,
  34. previewTabs: user.ace.previewTabs ?? false,
  35. fontFamily: user.ace.fontFamily || 'lucida',
  36. lineHeight: user.ace.lineHeight || 'normal',
  37. overallTheme: await getOverallTheme(req, res, user),
  38. mathPreview: user.ace.mathPreview,
  39. breadcrumbs: user.ace.breadcrumbs,
  40. nonBlinkingCursor: user.ace.nonBlinkingCursor ?? false,
  41. referencesSearchMode: user.ace.referencesSearchMode,
  42. darkModePdf: user.ace.darkModePdf ?? false,
  43. zotero: user.ace.zotero,
  44. mendeley: user.ace.mendeley,
  45. papers: user.ace.papers,
  46. }
  47. }
  48. export default {
  49. buildUserSettings,
  50. }