diff --git a/services/web/app/coffee/Features/Project/ProjectController.coffee b/services/web/app/coffee/Features/Project/ProjectController.coffee index e2c71a956e..8efdf9f218 100644 --- a/services/web/app/coffee/Features/Project/ProjectController.coffee +++ b/services/web/app/coffee/Features/Project/ProjectController.coffee @@ -28,6 +28,7 @@ Modules = require '../../infrastructure/Modules' ProjectEntityHandler = require './ProjectEntityHandler' crypto = require 'crypto' { V1ConnectionError } = require '../Errors/Errors' +Features = require('../../infrastructure/Features') module.exports = ProjectController = @@ -344,7 +345,7 @@ module.exports = ProjectController = themes: THEME_LIST maxDocLength: Settings.max_doc_length useV2History: !!project.overleaf?.history?.display - showRichText: req.query?.rt == 'true' + richTextEnabled: Features.hasFeature('rich-text') showTestControls: req.query?.tc == 'true' || user.isAdmin showPublishModal: req.query?.pm == 'true' timer.done() diff --git a/services/web/app/coffee/infrastructure/Features.coffee b/services/web/app/coffee/infrastructure/Features.coffee index 311d8943c9..ffc60604e6 100644 --- a/services/web/app/coffee/infrastructure/Features.coffee +++ b/services/web/app/coffee/infrastructure/Features.coffee @@ -22,5 +22,8 @@ module.exports = Features = return !Settings.overleaf? when 'affiliations' return Settings?.apis?.v1?.url? + when 'rich-text' + isEnabled = true # Switch to false to disable + Settings.overleaf? and isEnabled else throw new Error("unknown feature: #{feature}") diff --git a/services/web/app/views/project/editor.pug b/services/web/app/views/project/editor.pug index 190ba57cf6..6d7d18687d 100644 --- a/services/web/app/views/project/editor.pug +++ b/services/web/app/views/project/editor.pug @@ -133,6 +133,7 @@ block requirejs window.maxDocLength = #{maxDocLength}; window.trackChangesState = data.trackChangesState; window.wikiEnabled = #{!!(settings.apis.wiki && settings.apis.wiki.url)}; + window.richTextEnabled = #{richTextEnabled} window.requirejs = { "paths" : { "moment": "libs/#{lib('moment')}", diff --git a/services/web/app/views/project/editor/editor.pug b/services/web/app/views/project/editor/editor.pug index 63f3e78c5b..69a874cc05 100644 --- a/services/web/app/views/project/editor/editor.pug +++ b/services/web/app/views/project/editor/editor.pug @@ -43,7 +43,7 @@ div.full-size( ace-editor="editor", ng-if="!editor.showRichText", ng-show="!!editor.sharejs_doc && !editor.opening", - style=showRichText ? "top: 32px" : "", + style=richTextEnabled ? "top: 32px" : "", theme="settings.theme", keybindings="settings.mode", font-size="settings.fontSize", diff --git a/services/web/app/views/project/editor/review-panel.pug b/services/web/app/views/project/editor/review-panel.pug index f7650a2328..8328d313e5 100644 --- a/services/web/app/views/project/editor/review-panel.pug +++ b/services/web/app/views/project/editor/review-panel.pug @@ -1,4 +1,4 @@ -#review-panel(style=showRichText ? "top: 32px" : "") +#review-panel(style=richTextEnabled ? "top: 32px" : "") .rp-in-editor-widgets a.rp-track-changes-indicator( href diff --git a/services/web/public/coffee/ide/editor/EditorManager.coffee b/services/web/public/coffee/ide/editor/EditorManager.coffee index 26ddc7dd33..5130e4796d 100644 --- a/services/web/public/coffee/ide/editor/EditorManager.coffee +++ b/services/web/public/coffee/ide/editor/EditorManager.coffee @@ -6,7 +6,7 @@ define [ "ide/editor/controllers/SavingNotificationController" ], (Document) -> class EditorManager - constructor: (@ide, @$scope, localStorage) -> + constructor: (@ide, @$scope, @localStorage) -> @$scope.editor = { sharejs_doc: null open_doc_id: null @@ -14,7 +14,7 @@ define [ opening: true trackChanges: false wantTrackChanges: false - showRichText: localStorage("editor.mode.#{@$scope.project_id}") == 'rich-text' + showRichText: @showRichText() } @$scope.$on "entity:selected", (event, entity) => @@ -41,6 +41,11 @@ define [ return if !value? @_syncTrackChangesState(@$scope.editor.sharejs_doc) + showRichText: () -> + if !window.richTextEnabled + return false + @localStorage("editor.mode.#{@$scope.project_id}") == 'rich-text' + autoOpenDoc: () -> open_doc_id = @ide.localStorage("doc.open_id.#{@$scope.project_id}") or diff --git a/services/web/test/unit/coffee/Project/ProjectControllerTests.coffee b/services/web/test/unit/coffee/Project/ProjectControllerTests.coffee index bfd67e42d2..1acd1c8128 100644 --- a/services/web/test/unit/coffee/Project/ProjectControllerTests.coffee +++ b/services/web/test/unit/coffee/Project/ProjectControllerTests.coffee @@ -72,6 +72,8 @@ describe "ProjectController", -> @Modules = hooks: fire: sinon.stub() + @Features = + hasFeature: sinon.stub() @ProjectController = SandboxedModule.require modulePath, requires: "settings-sharelatex":@settings "logger-sharelatex": @@ -102,6 +104,7 @@ describe "ProjectController", -> "../../infrastructure/Modules": @Modules "./ProjectEntityHandler": @ProjectEntityHandler "../Errors/Errors": Errors + "../../infrastructure/Features": @Features @projectName = "£12321jkj9ujkljds" @req =