UserSettingsHelper.mjs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. const assignment = await SplitTestHandler.promises.getAssignment(
  35. req,
  36. res,
  37. 'editor-redesign-opt-out'
  38. )
  39. const isOptOutEnabled = assignment.variant === 'enabled'
  40. return {
  41. mode: user.ace.mode,
  42. editorTheme: user.ace.theme,
  43. fontSize: user.ace.fontSize,
  44. autoComplete: user.ace.autoComplete,
  45. autoPairDelimiters: user.ace.autoPairDelimiters,
  46. pdfViewer: user.ace.pdfViewer,
  47. syntaxValidation: user.ace.syntaxValidation,
  48. fontFamily: user.ace.fontFamily || 'lucida',
  49. lineHeight: user.ace.lineHeight || 'normal',
  50. overallTheme: user.ace.overallTheme,
  51. mathPreview: user.ace.mathPreview,
  52. breadcrumbs: user.ace.breadcrumbs,
  53. referencesSearchMode: user.ace.referencesSearchMode,
  54. enableNewEditor: isOptOutEnabled
  55. ? enableNewEditorStageFour
  56. : enableNewEditorLegacy,
  57. enableNewEditorLegacy,
  58. darkModePdf: user.ace.darkModePdf ?? false,
  59. }
  60. }
  61. export default {
  62. buildUserSettings,
  63. }