Просмотр исходного кода

Merge pull request #11332 from overleaf/td-remove-ace-split-test

Add handling for source-editor-legacy split test

GitOrigin-RevId: 9575087c34bc3f2e8b490846984bc97641c560aa
Tim Down 3 лет назад
Родитель
Сommit
a05438d9c7

+ 9 - 10
services/web/app/src/Features/Project/ProjectController.js

@@ -981,16 +981,15 @@ const ProjectController = {
             }
           )
         },
-        newSourceEditorAssignment(cb) {
+        legacySourceEditorAssignment(cb) {
           SplitTestHandler.getAssignment(
             req,
             res,
-            'source-editor',
-            {},
+            'source-editor-legacy',
             (error, assignment) => {
               // do not fail editor load if assignment fails
               if (error) {
-                cb(null)
+                cb(null, { variant: 'default' })
               } else {
                 cb(null, assignment)
               }
@@ -1159,7 +1158,7 @@ const ProjectController = {
           isTokenMember,
           isInvitedMember,
           brandVariation,
-          newSourceEditorAssignment,
+          legacySourceEditorAssignment,
           pdfjsAssignment,
           editorLeftMenuAssignment,
           richTextAssignment,
@@ -1239,10 +1238,10 @@ const ProjectController = {
 
             const detachRole = req.params.detachRole
 
-            const showNewSourceEditorOption =
-              newSourceEditorAssignment?.variant === 'codemirror' ||
-              user.betaProgram ||
-              shouldDisplayFeature('new_source_editor', false) // also allow override via ?new_source_editor=true
+            const showLegacySourceEditor =
+              legacySourceEditorAssignment.variant === 'default' ||
+              // Also allow override via legacy_source_editor=true in query string
+              shouldDisplayFeature('legacy_source_editor')
 
             const editorLeftMenuReact =
               editorLeftMenuAssignment?.variant === 'react'
@@ -1335,7 +1334,7 @@ const ProjectController = {
               showSupport: Features.hasFeature('support'),
               pdfjsVariant: pdfjsAssignment.variant,
               debugPdfDetach,
-              showNewSourceEditorOption,
+              showLegacySourceEditor,
               showSymbolPalette,
               galileoEnabled,
               galileoFeatures,

+ 1 - 1
services/web/app/views/project/editor/meta.pug

@@ -22,7 +22,7 @@ meta(name="ol-useShareJsHash" data-type="boolean" content=true)
 meta(name="ol-wsRetryHandshake" data-type="json" content=settings.wsRetryHandshake)
 meta(name="ol-pdfjsVariant" content=pdfjsVariant)
 meta(name="ol-debugPdfDetach" data-type="boolean" content=debugPdfDetach)
-meta(name="ol-showNewSourceEditorOption" data-type="boolean" content=showNewSourceEditorOption)
+meta(name="ol-showLegacySourceEditor", data-type="boolean" content=showLegacySourceEditor)
 meta(name="ol-showSymbolPalette" data-type="boolean" content=showSymbolPalette)
 meta(name="ol-galileoEnabled" data-type="string" content=galileoEnabled)
 meta(name="ol-galileoPromptWords" data-type="string" content=galileoPromptWords)

+ 0 - 6
services/web/frontend/js/features/source-editor/components/cm6-switch-away-survey.tsx

@@ -1,7 +1,6 @@
 import { useCallback, useEffect, useRef, useState } from 'react'
 import { Button } from 'react-bootstrap'
 import useScopeValue from '../../../shared/hooks/use-scope-value'
-import getMeta from '../../../utils/meta'
 import {
   hasSeenCM6SwitchAwaySurvey,
   setHasSeenCM6SwitchAwaySurvey,
@@ -17,11 +16,6 @@ export default function CM6SwitchAwaySurvey() {
   const initialRichTextPreference = useRef<boolean>(richText)
 
   useEffect(() => {
-    // If cm6 is not available, don't show the survey
-    if (!getMeta('ol-showNewSourceEditorOption')) {
-      return
-    }
-
     // If the user has previously seen any switch-away survey, then don't show
     // the current one
     if (hasSeenCM6SwitchAwaySurvey()) return

+ 18 - 12
services/web/frontend/js/features/source-editor/components/editor-switch.tsx

@@ -38,6 +38,8 @@ function Badge() {
   )
 }
 
+const showLegacySourceEditor: boolean = getMeta('ol-showLegacySourceEditor')
+
 function EditorSwitch() {
   const [newSourceEditor, setNewSourceEditor] = useScopeValue(
     'editor.newSourceEditor'
@@ -103,18 +105,22 @@ function EditorSwitch() {
           <span>Source</span>
         </label>
 
-        <input
-          type="radio"
-          name="editor"
-          value="ace"
-          id="editor-switch-ace"
-          className="toggle-switch-input"
-          checked={!richTextOrVisual && !newSourceEditor}
-          onChange={handleChange}
-        />
-        <label htmlFor="editor-switch-ace" className="toggle-switch-label">
-          <span>Source (legacy)</span>
-        </label>
+        {showLegacySourceEditor ? (
+          <>
+            <input
+              type="radio"
+              name="editor"
+              value="ace"
+              id="editor-switch-ace"
+              className="toggle-switch-input"
+              checked={!richTextOrVisual && !newSourceEditor}
+              onChange={handleChange}
+            />
+            <label htmlFor="editor-switch-ace" className="toggle-switch-label">
+              <span>Source (legacy)</span>
+            </label>
+          </>
+        ) : null}
 
         <input
           type="radio"

+ 0 - 5
services/web/frontend/js/features/source-editor/components/grammarly-warning.tsx

@@ -4,7 +4,6 @@ import { Nullable } from '../../../../../types/utils'
 import customLocalStorage from '../../../infrastructure/local-storage'
 import useScopeValue from '../../../shared/hooks/use-scope-value'
 import grammarlyExtensionPresent from '../../../shared/utils/grammarly'
-import getMeta from '../../../utils/meta'
 
 type GrammarlyWarningProps = {
   delay: number
@@ -55,10 +54,6 @@ export default function GrammarlyWarning({ delay }: GrammarlyWarningProps) {
     customLocalStorage.setItem('editor.has_dismissed_grammarly_warning', true)
   }, [])
 
-  if (!getMeta('ol-showNewSourceEditorOption')) {
-    return null
-  }
-
   if (!show) {
     return null
   }

+ 3 - 3
services/web/frontend/js/ide/editor/EditorManager.js

@@ -195,9 +195,9 @@ export default EditorManager = (function () {
     }
 
     newSourceEditor() {
-      // only use the new source editor if the option to switch is available
-      if (!getMeta('ol-showNewSourceEditorOption')) {
-        return false
+      // Use the new source editor if the legacy editor is disabled
+      if (!getMeta('ol-showLegacySourceEditor')) {
+        return true
       }
 
       const storedPrefIsCM6 = () => {

+ 0 - 21
services/web/test/frontend/features/source-editor/components/grammarly-warning.test.js

@@ -27,7 +27,6 @@ describe('<GrammarlyWarning />', function () {
 
   it('shows warning when grammarly is available', async function () {
     grammarlyStub.returns(true)
-    window.metaAttributesCache.set('ol-showNewSourceEditorOption', true)
 
     renderWithEditorContext(<GrammarlyWarning delay={100} />, {
       scope: {
@@ -46,7 +45,6 @@ describe('<GrammarlyWarning />', function () {
 
   it('does not show warning when grammarly is not available', async function () {
     grammarlyStub.returns(false)
-    window.metaAttributesCache.set('ol-showNewSourceEditorOption', true)
 
     renderWithEditorContext(<GrammarlyWarning delay={100} />, {
       scope: {
@@ -68,7 +66,6 @@ describe('<GrammarlyWarning />', function () {
   it('does not show warning when user has dismissed the warning', async function () {
     grammarlyStub.returns(true)
     localStorage.setItem('editor.has_dismissed_grammarly_warning', true)
-    window.metaAttributesCache.set('ol-showNewSourceEditorOption', true)
 
     renderWithEditorContext(<GrammarlyWarning delay={100} />, {
       scope: {
@@ -87,24 +84,8 @@ describe('<GrammarlyWarning />', function () {
     })
   })
 
-  it('does not show warning when user does not have CM6', async function () {
-    grammarlyStub.returns(true)
-    window.metaAttributesCache.set('ol-showNewSourceEditorOption', false)
-
-    renderWithEditorContext(<GrammarlyWarning delay={100} />)
-
-    await waitFor(() => {
-      expect(
-        screen.queryByText(
-          'A browser extension, for example Grammarly, may be slowing down Overleaf.'
-        )
-      ).to.not.exist
-    })
-  })
-
   it('does not show warning when user have ace as their preference', async function () {
     grammarlyStub.returns(true)
-    window.metaAttributesCache.set('ol-showNewSourceEditorOption', true)
 
     renderWithEditorContext(<GrammarlyWarning delay={100} />, {
       scope: {
@@ -125,7 +106,6 @@ describe('<GrammarlyWarning />', function () {
 
   it('does not show warning when user have rich text as their preference', async function () {
     grammarlyStub.returns(true)
-    window.metaAttributesCache.set('ol-showNewSourceEditorOption', true)
 
     renderWithEditorContext(<GrammarlyWarning delay={100} />, {
       scope: {
@@ -147,7 +127,6 @@ describe('<GrammarlyWarning />', function () {
 
   it('hides warning if close button is pressed', async function () {
     grammarlyStub.returns(true)
-    window.metaAttributesCache.set('ol-showNewSourceEditorOption', true)
 
     renderWithEditorContext(<GrammarlyWarning delay={100} />, {
       scope: {