From 4202b9c7176a2dc8bfd542fc7dcee6a13044d601 Mon Sep 17 00:00:00 2001
From: Alasdair Smith <ali@alasdairsmith.co.uk>
Date: Mon, 16 Jul 2018 13:55:07 +0100
Subject: [PATCH 1/7] Use hard-coded feature flag for rich text

---
 .../web/app/coffee/Features/Project/ProjectController.coffee  | 3 ++-
 services/web/app/coffee/infrastructure/Features.coffee        | 4 ++++
 services/web/app/views/project/editor.pug                     | 1 +
 services/web/app/views/project/editor/editor.pug              | 2 +-
 4 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/services/web/app/coffee/Features/Project/ProjectController.coffee b/services/web/app/coffee/Features/Project/ProjectController.coffee
index e2c71a956e..026f55156b 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.richTextEnabled()
 					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..52b27a73fd 100644
--- a/services/web/app/coffee/infrastructure/Features.coffee
+++ b/services/web/app/coffee/infrastructure/Features.coffee
@@ -4,6 +4,10 @@ module.exports = Features =
 	externalAuthenticationSystemUsed: ->
 		Settings.ldap? or Settings.saml? or Settings.overleaf?.oauth?
 
+	richTextEnabled: ->
+		isEnabled = true # Switch to false to disable
+		Settings.overleaf? and isEnabled
+
 	hasFeature: (feature) ->
 		switch feature
 			when 'homepage'
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",

From 85313f1b5a696b88ac9be6538c33201cc2c109a2 Mon Sep 17 00:00:00 2001
From: Alasdair Smith <ali@alasdairsmith.co.uk>
Date: Mon, 16 Jul 2018 13:55:44 +0100
Subject: [PATCH 2/7] Check if rich text is enabled before using stored mode

---
 .../web/public/coffee/ide/editor/EditorManager.coffee    | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

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

From 9cd3f32365950f210a4ec8c2c7935e09a9538cb4 Mon Sep 17 00:00:00 2001
From: Alasdair Smith <ali@alasdairsmith.co.uk>
Date: Mon, 16 Jul 2018 14:20:53 +0100
Subject: [PATCH 3/7] Use hasFeature function instead of new standalone
 function

---
 .../app/coffee/Features/Project/ProjectController.coffee   | 2 +-
 services/web/app/coffee/infrastructure/Features.coffee     | 7 +++----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/services/web/app/coffee/Features/Project/ProjectController.coffee b/services/web/app/coffee/Features/Project/ProjectController.coffee
index 026f55156b..301a1ed916 100644
--- a/services/web/app/coffee/Features/Project/ProjectController.coffee
+++ b/services/web/app/coffee/Features/Project/ProjectController.coffee
@@ -345,7 +345,7 @@ module.exports = ProjectController =
 					themes: THEME_LIST
 					maxDocLength: Settings.max_doc_length
 					useV2History: !!project.overleaf?.history?.display
-					richTextEnabled: Features.richTextEnabled()
+					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 52b27a73fd..bdb68b9480 100644
--- a/services/web/app/coffee/infrastructure/Features.coffee
+++ b/services/web/app/coffee/infrastructure/Features.coffee
@@ -4,10 +4,6 @@ module.exports = Features =
 	externalAuthenticationSystemUsed: ->
 		Settings.ldap? or Settings.saml? or Settings.overleaf?.oauth?
 
-	richTextEnabled: ->
-		isEnabled = true # Switch to false to disable
-		Settings.overleaf? and isEnabled
-
 	hasFeature: (feature) ->
 		switch feature
 			when 'homepage'
@@ -26,5 +22,8 @@ module.exports = Features =
 				return !Settings.overleaf?
 			when 'affiliations'
 				return Settings?.apis?.v1?.url?
+			when 'rich-text'
+				isEnabled = false # Switch to false to disable
+				Settings.overleaf? and isEnabled
 			else
 				throw new Error("unknown feature: #{feature}")

From 823e12e4a874da73616c803f9a58b9869e298702 Mon Sep 17 00:00:00 2001
From: Alasdair Smith <ali@alasdairsmith.co.uk>
Date: Mon, 16 Jul 2018 14:21:10 +0100
Subject: [PATCH 4/7] Fix tests to add new Features dependency

---
 .../web/test/unit/coffee/Project/ProjectControllerTests.coffee | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/services/web/test/unit/coffee/Project/ProjectControllerTests.coffee b/services/web/test/unit/coffee/Project/ProjectControllerTests.coffee
index bfd67e42d2..3f81c9d62c 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 =

From 62f69a4bcd5ff7c18d1528b03aabe420b8d09916 Mon Sep 17 00:00:00 2001
From: Alasdair Smith <ali@alasdairsmith.co.uk>
Date: Mon, 16 Jul 2018 15:53:28 +0100
Subject: [PATCH 5/7] Fix case sensitivity

---
 .../web/app/coffee/Features/Project/ProjectController.coffee    | 2 +-
 .../web/test/unit/coffee/Project/ProjectControllerTests.coffee  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/services/web/app/coffee/Features/Project/ProjectController.coffee b/services/web/app/coffee/Features/Project/ProjectController.coffee
index 301a1ed916..8efdf9f218 100644
--- a/services/web/app/coffee/Features/Project/ProjectController.coffee
+++ b/services/web/app/coffee/Features/Project/ProjectController.coffee
@@ -28,7 +28,7 @@ Modules = require '../../infrastructure/Modules'
 ProjectEntityHandler = require './ProjectEntityHandler'
 crypto = require 'crypto'
 { V1ConnectionError } = require '../Errors/Errors'
-Features = require('../../Infrastructure/Features')
+Features = require('../../infrastructure/Features')
 
 module.exports = ProjectController =
 
diff --git a/services/web/test/unit/coffee/Project/ProjectControllerTests.coffee b/services/web/test/unit/coffee/Project/ProjectControllerTests.coffee
index 3f81c9d62c..1acd1c8128 100644
--- a/services/web/test/unit/coffee/Project/ProjectControllerTests.coffee
+++ b/services/web/test/unit/coffee/Project/ProjectControllerTests.coffee
@@ -104,7 +104,7 @@ describe "ProjectController", ->
 			"../../infrastructure/Modules": @Modules
 			"./ProjectEntityHandler": @ProjectEntityHandler
 			"../Errors/Errors": Errors
-			"../../Infrastructure/Features": @Features
+			"../../infrastructure/Features": @Features
 
 		@projectName = "£12321jkj9ujkljds"
 		@req =

From ffe3bc297713713d560ede4852ff6359dd81e881 Mon Sep 17 00:00:00 2001
From: Alasdair Smith <ali@alasdairsmith.co.uk>
Date: Tue, 17 Jul 2018 17:19:42 +0100
Subject: [PATCH 6/7] Switch review panel to use richTextEnabled variable

---
 services/web/app/views/project/editor/review-panel.pug | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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

From d36d3f2a0eaaf05612c187cecfbb3c5696c570df Mon Sep 17 00:00:00 2001
From: Alasdair Smith <ali@alasdairsmith.co.uk>
Date: Tue, 17 Jul 2018 17:33:41 +0100
Subject: [PATCH 7/7] Actually enable rich text

---
 services/web/app/coffee/infrastructure/Features.coffee | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/services/web/app/coffee/infrastructure/Features.coffee b/services/web/app/coffee/infrastructure/Features.coffee
index bdb68b9480..ffc60604e6 100644
--- a/services/web/app/coffee/infrastructure/Features.coffee
+++ b/services/web/app/coffee/infrastructure/Features.coffee
@@ -23,7 +23,7 @@ module.exports = Features =
 			when 'affiliations'
 				return Settings?.apis?.v1?.url?
 			when 'rich-text'
-				isEnabled = false # Switch to false to disable
+				isEnabled = true # Switch to false to disable
 				Settings.overleaf? and isEnabled
 			else
 				throw new Error("unknown feature: #{feature}")