UserSettingsHelper.mjs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import SplitTestHandler from '../SplitTests/SplitTestHandler.mjs'
  2. // Copied from services/web/frontend/js/features/ide-redesign/utils/new-editor-utils.ts
  3. const SPLIT_TEST_USER_CUTOFF_DATE = new Date(Date.UTC(2025, 8, 23, 13, 0, 0)) // 2pm British Summer Time on September 23, 2025
  4. const NEW_USER_CUTOFF_DATE = new Date(Date.UTC(2025, 10, 12, 12, 0, 0)) // 12pm GMT on November 12, 2025
  5. async function getEnableNewEditorLegacyDefault(req, res, user) {
  6. if (req.query['existing-user-override'] === 'true') {
  7. return false
  8. }
  9. if (req.query['skip-new-user-check'] === 'true') {
  10. return true
  11. }
  12. if (user.signUpDate >= NEW_USER_CUTOFF_DATE) {
  13. return true
  14. }
  15. if (user.signUpDate >= SPLIT_TEST_USER_CUTOFF_DATE) {
  16. const assignment = await SplitTestHandler.promises.getAssignment(
  17. req,
  18. res,
  19. 'editor-redesign-new-users'
  20. )
  21. return assignment.variant !== 'default'
  22. }
  23. return false
  24. }
  25. async function buildUserSettings(req, res, user) {
  26. const defaultLegacyEnableNewEditor = await getEnableNewEditorLegacyDefault(
  27. req,
  28. res,
  29. user
  30. )
  31. const enableNewEditorStageFour = user.ace.enableNewEditorStageFour ?? true
  32. const enableNewEditorLegacy =
  33. user.ace.enableNewEditor ?? defaultLegacyEnableNewEditor
  34. return {
  35. mode: user.ace.mode,
  36. editorTheme: user.ace.theme,
  37. editorLightTheme: user.ace.lightTheme,
  38. editorDarkTheme: user.ace.darkTheme,
  39. fontSize: user.ace.fontSize,
  40. autoComplete: user.ace.autoComplete,
  41. autoPairDelimiters: user.ace.autoPairDelimiters,
  42. pdfViewer: user.ace.pdfViewer,
  43. syntaxValidation: user.ace.syntaxValidation,
  44. fontFamily: user.ace.fontFamily || 'lucida',
  45. lineHeight: user.ace.lineHeight || 'normal',
  46. overallTheme: user.ace.overallTheme,
  47. mathPreview: user.ace.mathPreview,
  48. breadcrumbs: user.ace.breadcrumbs,
  49. referencesSearchMode: user.ace.referencesSearchMode,
  50. enableNewEditor: enableNewEditorStageFour,
  51. enableNewEditorLegacy,
  52. darkModePdf: user.ace.darkModePdf ?? false,
  53. }
  54. }
  55. export default {
  56. buildUserSettings,
  57. }