Ver Fonte

Merge pull request #25060 from overleaf/mj-core-pug-bs5

[web] Convert various pug pages to BS5

GitOrigin-RevId: f42de89eca778db19d5faa8a19fa8a210c7a749b
Mathias Jakobsen há 1 ano atrás
pai
commit
d7bd665bee

+ 5 - 0
services/web/app/src/Features/Collaborators/CollaboratorsInviteController.mjs

@@ -16,6 +16,7 @@ import ProjectAuditLogHandler from '../Project/ProjectAuditLogHandler.js'
 import Errors from '../Errors/Errors.js'
 import AuthenticationController from '../Authentication/AuthenticationController.js'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
+import SplitTestHandler from '../SplitTests/SplitTestHandler.js'
 
 // This rate limiter allows a different number of requests depending on the
 // number of callaborators a user is allowed. This is implemented by providing
@@ -244,6 +245,10 @@ async function generateNewInvite(req, res) {
 async function viewInvite(req, res) {
   const projectId = req.params.Project_id
   const { token } = req.params
+
+  // Read split test assignment so that it's available for Pug to read
+  await SplitTestHandler.promises.getAssignment(req, res, 'core-pug-bs5')
+
   const _renderInvalidPage = function () {
     res.status(404)
     logger.debug({ projectId }, 'invite not valid, rendering not-valid page')

+ 7 - 3
services/web/app/src/Features/Templates/TemplatesController.js

@@ -4,9 +4,13 @@ const TemplatesManager = require('./TemplatesManager')
 const ProjectHelper = require('../Project/ProjectHelper')
 const logger = require('@overleaf/logger')
 const { expressify } = require('@overleaf/promise-utils')
+const SplitTestHandler = require('../SplitTests/SplitTestHandler')
 
 const TemplatesController = {
-  getV1Template(req, res) {
+  async getV1Template(req, res) {
+    // Read split test assignment so that it's available for Pug to read
+    await SplitTestHandler.promises.getAssignment(req, res, 'core-pug-bs5')
+
     const templateVersionId = req.params.Template_version_id
     const templateId = req.query.id
     if (!/^[0-9]+$/.test(templateVersionId) || !/^[0-9]+$/.test(templateId)) {
@@ -25,7 +29,7 @@ const TemplatesController = {
       mainFile: req.query.mainFile,
       brandVariationId: req.query.brandVariationId,
     }
-    return res.render(
+    res.render(
       path.resolve(
         __dirname,
         '../../../views/project/editor/new_from_template'
@@ -55,7 +59,7 @@ const TemplatesController = {
 }
 
 module.exports = {
-  getV1Template: TemplatesController.getV1Template,
+  getV1Template: expressify(TemplatesController.getV1Template),
   createProjectFromV1Template: expressify(
     TemplatesController.createProjectFromV1Template
   ),

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

@@ -4,7 +4,8 @@ block vars
   - var suppressFooter = true
   - var suppressCookieBanner = true
   - var suppressSkipToContent = true
-  - bootstrap5PageStatus = 'disabled'
+  - bootstrap5PageStatus = 'enabled'
+  - bootstrap5PageSplitTest = 'core-pug-bs5'
 
 block content
   .editor.full-size

+ 13 - 12
services/web/app/views/project/invite/not-valid.pug

@@ -1,21 +1,22 @@
 extends ../../layout-marketing
 
 block vars
-	- bootstrap5PageStatus = 'disabled'
+	- bootstrap5PageStatus = 'enabled'
+	- bootstrap5PageSplitTest = 'core-pug-bs5'
 
 block content
 	main.content.content-alt#main-content
 		.container
 			.row
-				.col-md-8.col-md-offset-2
+				.col-md-8.col-md-offset-2.offset-md-2
 					.card.project-invite-invalid
-						.page-header.text-centered
-							h1  #{translate("invite_not_valid")}
-						.row.text-center
-							.col-md-12
-								p
-									| #{translate("invite_not_valid_description")}.
-						.row.text-center.actions
-							.col-md-12
-								a.btn.btn-secondary-info.btn-secondary(href="/project") #{translate("back_to_your_projects")}
-							
+						.card-body
+							.page-header.text-center
+								h1  #{translate("invite_not_valid")}
+							.row.text-center
+								.col-12.col-md-12
+									p
+										| #{translate("invite_not_valid_description")}.
+							.row.text-center.actions
+								.col-12.col-md-12
+									a.btn.btn-secondary-info.btn-secondary(href="/project") #{translate("back_to_your_projects")}

+ 30 - 28
services/web/app/views/project/invite/show.pug

@@ -1,37 +1,39 @@
 extends ../../layout-marketing
 
 block vars
-	- bootstrap5PageStatus = 'disabled'
+	- bootstrap5PageStatus = 'enabled'
+	- bootstrap5PageSplitTest = 'core-pug-bs5'
 
 block content
 	main.content.content-alt#main-content
 		.container
 			.row
-				.col-md-8.col-md-offset-2
+				.col-12.col-md-8.col-md-offset-2.offset-md-2
 					.card.project-invite-accept
-						.page-header.text-centered
-							h1 #{translate("user_wants_you_to_see_project", {username:owner.first_name, projectname:""})}
-								br
-								em #{project.name}
-						.row.text-center
-							.col-md-12
-								p
-									| #{translate("accepting_invite_as")} 
-									em #{user.email}
-						.row
-							.col-md-12
-								form.form(
-									data-ol-regular-form
-									method="POST",
-									action="/project/"+invite.projectId+"/invite/token/"+token+"/accept"
-								)
-									input(name='_csrf', type='hidden', value=csrfToken)
-									input(name='token', type='hidden', value=token)
-									.form-group.text-center
-										button.btn.btn-lg.btn-primary(
-											type="submit"
-											data-ol-disabled-inflight
-										)
-											span(data-ol-inflight="idle") #{translate("join_project")}
-											span(hidden data-ol-inflight="pending") #{translate("joining")}…
-									.form-group.text-center
+						.card-body
+							.page-header.text-center
+								h1 #{translate("user_wants_you_to_see_project", {username:owner.first_name, projectname:""})}
+									br
+									em #{project.name}
+							.row.text-center
+								.col-12.col-md-12
+									p
+										| #{translate("accepting_invite_as")} 
+										em #{user.email}
+							.row
+								.col-12.col-md-12
+									form.form(
+										data-ol-regular-form
+										method="POST",
+										action="/project/"+invite.projectId+"/invite/token/"+token+"/accept"
+									)
+										input(name='_csrf', type='hidden', value=csrfToken)
+										input(name='token', type='hidden', value=token)
+										.form-group.text-center
+											button.btn.btn-lg.btn-primary(
+												type="submit"
+												data-ol-disabled-inflight
+											)
+												span(data-ol-inflight="idle") #{translate("join_project")}
+												span(hidden data-ol-inflight="pending") #{translate("joining")}…
+										.form-group.text-center

+ 1 - 0
services/web/test/unit/src/Collaborators/CollaboratorsInviteControllerTests.mjs

@@ -117,6 +117,7 @@ describe('CollaboratorsInviteController', function () {
 
     this.SplitTestHandler = {
       promises: {
+        getAssignment: sinon.stub().resolves({ variant: 'default' }),
         getAssignmentForUser: sinon.stub().resolves({ variant: 'default' }),
       },
     }

+ 5 - 0
services/web/test/unit/src/Templates/TemplatesControllerTests.js

@@ -18,6 +18,11 @@ describe('TemplatesController', function () {
         './TemplatesManager': (this.TemplatesManager = {
           promises: { createProjectFromV1Template: sinon.stub() },
         }),
+        '../SplitTests/SplitTestHandler': (this.SplitTestHandler = {
+          promises: {
+            getAssignment: sinon.stub().resolves({ variant: 'default' }),
+          },
+        }),
       },
     })
     this.next = sinon.stub()