UserSettingsHelper.mjs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 getEnableNewEditorDefault(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 defaultEnableNewEditor = await getEnableNewEditorDefault(req, res, user)
  27. return {
  28. mode: user.ace.mode,
  29. editorTheme: user.ace.theme,
  30. fontSize: user.ace.fontSize,
  31. autoComplete: user.ace.autoComplete,
  32. autoPairDelimiters: user.ace.autoPairDelimiters,
  33. pdfViewer: user.ace.pdfViewer,
  34. syntaxValidation: user.ace.syntaxValidation,
  35. fontFamily: user.ace.fontFamily || 'lucida',
  36. lineHeight: user.ace.lineHeight || 'normal',
  37. overallTheme: user.ace.overallTheme,
  38. mathPreview: user.ace.mathPreview,
  39. breadcrumbs: user.ace.breadcrumbs,
  40. referencesSearchMode: user.ace.referencesSearchMode,
  41. enableNewEditor: user.ace.enableNewEditor ?? defaultEnableNewEditor,
  42. }
  43. }
  44. export default {
  45. buildUserSettings,
  46. }