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

Merge pull request #26456 from overleaf/td-limit-browser-translate-non-react-icons

Prevent browser translation of icons in Pug pages

GitOrigin-RevId: 97e4d3ba70a4c95bed2c9f52e66038911625613d
Tim Down 1 год назад
Родитель
Сommit
19dc71f414

+ 6 - 4
services/web/app/views/_mixins/formMessages.pug

@@ -1,3 +1,5 @@
+include ./material_symbol
+
 mixin formMessages()
 mixin formMessages()
 	div(
 	div(
 		data-ol-form-messages='',
 		data-ol-form-messages='',
@@ -48,7 +50,7 @@ mixin customFormMessageNewStyle(key, kind, extraClass = 'mb-3')
 			aria-live="polite"
 			aria-live="polite"
 		)
 		)
 			div.notification-icon
 			div.notification-icon
-				span.material-symbols(aria-hidden="true") check_circle
+				+material-symbol("check_circle")
 			div.notification-content.text-left
 			div.notification-content.text-left
 				block
 				block
 	else if kind === 'danger'
 	else if kind === 'danger'
@@ -60,7 +62,7 @@ mixin customFormMessageNewStyle(key, kind, extraClass = 'mb-3')
 			aria-live="polite"
 			aria-live="polite"
 		)
 		)
 			div.notification-icon
 			div.notification-icon
-				span.material-symbols(aria-hidden="true") error
+				+material-symbol("error")
 			div.notification-content.text-left
 			div.notification-content.text-left
 				block
 				block
 	else
 	else
@@ -72,7 +74,7 @@ mixin customFormMessageNewStyle(key, kind, extraClass = 'mb-3')
 			aria-live="polite"
 			aria-live="polite"
 		)
 		)
 			div.notification-icon
 			div.notification-icon
-				span.material-symbols(aria-hidden="true") warning
+				+material-symbol("warning")
 			div.notification-content.text-left
 			div.notification-content.text-left
 				block
 				block
 
 
@@ -91,6 +93,6 @@ mixin customValidationMessageNewStyle(key)
 			data-ol-custom-form-message=key
 			data-ol-custom-form-message=key
 		)
 		)
 		div.notification-icon
 		div.notification-icon
-			span.material-symbols(aria-hidden="true") error
+			+material-symbol("error")
 		div.notification-content.text-left.small
 		div.notification-content.text-left.small
 			block
 			block

+ 3 - 1
services/web/app/views/_mixins/links.pug

@@ -1,3 +1,5 @@
+include ./material_symbol
+
 mixin linkAdvisors(linkText, linkClass, track)
 mixin linkAdvisors(linkText, linkClass, track)
 	//- To Do: verify path
 	//- To Do: verify path
 	- var gaCategory = track && track.category ? track.category : 'All'
 	- var gaCategory = track && track.category ? track.category : 'All'
@@ -120,4 +122,4 @@ mixin linkUniversities(linkText, linkClass)
 mixin linkWithArrow({text, href, eventTracking, eventSegmentation, eventTrackingTrigger})
 mixin linkWithArrow({text, href, eventTracking, eventSegmentation, eventTrackingTrigger})
 	a.link-with-arrow(href=href event-tracking=eventTracking event-segmentation=eventSegmentation, event-tracking-trigger=eventTrackingTrigger event-tracking-mb)
 	a.link-with-arrow(href=href event-tracking=eventTracking event-segmentation=eventSegmentation, event-tracking-trigger=eventTrackingTrigger event-tracking-mb)
 		| #{text}
 		| #{text}
-		i.material-symbols(aria-hidden="true") arrow_right_alt
+		+material-symbol("arrow_right_alt")

+ 11 - 0
services/web/app/views/_mixins/material_symbol.pug

@@ -0,0 +1,11 @@
+mixin material-symbol(icon, extraClass = null)
+	- extraClass = extraClass ? ' ' + extraClass : ''
+	span(aria-hidden="true", translate="no", class="material-symbols" + extraClass)&attributes(attributes) #{icon}
+	
+mixin material-symbol-outlined(icon, extraClass = null)
+	- extraClass = extraClass ? ' ' + extraClass : ''
+	+material-symbol(icon, 'material-symbols-outlined' + extraClass)&attributes(attributes)
+
+mixin material-symbol-rounded(icon, extraClass = null)
+	- extraClass = extraClass ? ' ' + extraClass : ''
+	+material-symbol(icon, 'material-symbols-rounded' + extraClass)&attributes(attributes)

+ 6 - 5
services/web/app/views/_mixins/notification.pug

@@ -1,14 +1,15 @@
 //- to be kept in sync with frontend/js/shared/components/notification.tsx
 //- to be kept in sync with frontend/js/shared/components/notification.tsx
+include ./material_symbol
 
 
 mixin notificationIcon(type)
 mixin notificationIcon(type)
 	if type === 'info'
 	if type === 'info'
-		span.material-symbols(aria-hidden="true") info
+		+material-symbol("info")
 	else if type === 'success'
 	else if type === 'success'
-		span.material-symbols(aria-hidden="true") check_circle
+		+material-symbol("check_circle")
 	else if type === 'error'
 	else if type === 'error'
-		span.material-symbols(aria-hidden="true") error
+		+material-symbol("error")
 	else if type === 'warning'
 	else if type === 'warning'
-		span.material-symbols(aria-hidden="true") warning
+		+material-symbol("warning")
 
 
 
 
 mixin notification(options)
 mixin notification(options)
@@ -39,4 +40,4 @@ mixin notification(options)
 		//- if isDismissible
 		//- if isDismissible
 		//- 	.notification-close-btn
 		//- 	.notification-close-btn
 		//- 		button(aria-label=translate('close'))
 		//- 		button(aria-label=translate('close'))
-		//- 			span.material-symbols(aria-hidden="true") close
+		//- 			+material-symbol("close")

+ 3 - 1
services/web/app/views/_mixins/previous_page_link.pug

@@ -1,4 +1,6 @@
+include ./material_symbol
+
 mixin previous-page-link(href, text)
 mixin previous-page-link(href, text)
 	a.previous-page-link(href=href)
 	a.previous-page-link(href=href)
-		i.material-symbols.material-symbols-rounded(aria-hidden="true") arrow_left_alt
+		+material-symbol-rounded("arrow_left_alt")
 		| #{text}
 		| #{text}

+ 4 - 2
services/web/app/views/layout/language-picker-bootstrap-5.pug

@@ -1,3 +1,5 @@
+include ../_mixins/material_symbol
+
 li.dropdown.dropup.subdued(dropdown).language-picker
 li.dropdown.dropup.subdued(dropdown).language-picker
 	button#language-picker-toggle.btn.btn-link.btn-inline-link(
 	button#language-picker-toggle.btn.btn-link.btn-inline-link(
 		dropdown-toggle,
 		dropdown-toggle,
@@ -9,7 +11,7 @@ li.dropdown.dropup.subdued(dropdown).language-picker
 		tooltip=translate('language')
 		tooltip=translate('language')
 		title=translate('language')
 		title=translate('language')
 	)
 	)
-		span.material-symbols(aria-hidden="true") translate
+		+material-symbol("translate")
 		|  
 		|  
 		span.language-picker-text #{settings.translatedLanguages[currentLngCode]}
 		span.language-picker-text #{settings.translatedLanguages[currentLngCode]}
 
 
@@ -22,4 +24,4 @@ li.dropdown.dropup.subdued(dropdown).language-picker
 					a.menu-indent(href=subdomainDetails.url+currentUrlWithQueryParams, role="menuitem", class=isActive ? 'dropdown-item active' : 'dropdown-item', aria-selected=isActive ? 'true' : 'false')
 					a.menu-indent(href=subdomainDetails.url+currentUrlWithQueryParams, role="menuitem", class=isActive ? 'dropdown-item active' : 'dropdown-item', aria-selected=isActive ? 'true' : 'false')
 						| #{settings.translatedLanguages[subdomainDetails.lngCode]}
 						| #{settings.translatedLanguages[subdomainDetails.lngCode]}
 						if subdomainDetails.lngCode === currentLngCode
 						if subdomainDetails.lngCode === currentLngCode
-							span.material-symbols.dropdown-item-trailing-icon(aria-hidden="true") check
+							+material-symbol("check", "dropdown-item-trailing-icon")

+ 2 - 1
services/web/app/views/subscriptions/plans/_faq_new.pug

@@ -1,5 +1,6 @@
 include ./_plans_faq_tabs
 include ./_plans_faq_tabs
 include ../../_mixins/eyebrow
 include ../../_mixins/eyebrow
+include ../../_mixins/material_symbol
 
 
 - var managingYourSubscription = 'managingYourSubscription'
 - var managingYourSubscription = 'managingYourSubscription'
 - var overleafIndividualPlans = 'overleafIndividualPlans'
 - var overleafIndividualPlans = 'overleafIndividualPlans'
@@ -87,4 +88,4 @@ include ../../_mixins/eyebrow
 				data-bs-target=bootstrapVersion === 5 ? "#contactUsModal" : undefined
 				data-bs-target=bootstrapVersion === 5 ? "#contactUsModal" : undefined
 			)
 			)
 				span(style="margin-right: 4px") #{translate('contact_support')}
 				span(style="margin-right: 4px") #{translate('contact_support')}
-				i.icon-md.material-symbols.material-symbols-rounded.material-symbols-arrow-right(aria-hidden="true") arrow_right_alt
+				+material-symbol-rounded("arrow_right_alt", "icon-md")

+ 18 - 17
services/web/app/views/subscriptions/plans/_plans_faq_tabs.pug

@@ -1,5 +1,6 @@
 //- If the `plans-page-bs5` split test has been completed, remove the `data-toggle` and `data-target` because it is not needed anymore (bs5 uses `data-bs-toggle` and `data-bs-target`)
 //- If the `plans-page-bs5` split test has been completed, remove the `data-toggle` and `data-target` because it is not needed anymore (bs5 uses `data-bs-toggle` and `data-bs-target`)
-
+include ../../_mixins/material_symbol
+	
 mixin managingYourSubscription()
 mixin managingYourSubscription()
 	.ol-accordions-container
 	.ol-accordions-container
 		.custom-accordion-item
 		.custom-accordion-item
@@ -14,7 +15,7 @@ mixin managingYourSubscription()
 			)
 			)
 				| Can I change plans or cancel later?
 				| Can I change plans or cancel later?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="managingYourSubscriptionQ1")
 			.collapse(id="managingYourSubscriptionQ1")
 				.custom-accordion-body
 				.custom-accordion-body
 					span Yes, you can do this at any time by going to 
 					span Yes, you can do this at any time by going to 
@@ -32,7 +33,7 @@ mixin managingYourSubscription()
 			)
 			)
 				| If I change or cancel my Overleaf plan, will I lose my projects?
 				| If I change or cancel my Overleaf plan, will I lose my projects?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="managingYourSubscriptionQ2")
 			.collapse(id="managingYourSubscriptionQ2")
 				.custom-accordion-body
 				.custom-accordion-body
 					| No. Changing or canceling your plan won’t affect your projects, the only change will be to the features available to you. You can see which features are available only on paid plans in the comparison table.
 					| No. Changing or canceling your plan won’t affect your projects, the only change will be to the features available to you. You can see which features are available only on paid plans in the comparison table.
@@ -48,7 +49,7 @@ mixin managingYourSubscription()
 			)
 			)
 				| Can I pay by invoice or purchase order?
 				| Can I pay by invoice or purchase order?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="managingYourSubscriptionQ3")
 			.collapse(id="managingYourSubscriptionQ3")
 				.custom-accordion-body
 				.custom-accordion-body
 					| This is possible when you’re purchasing a group subscription for five or more people, or a site license. For individual subscriptions, we can only accept payment online via credit card, debit card, or PayPal.
 					| This is possible when you’re purchasing a group subscription for five or more people, or a site license. For individual subscriptions, we can only accept payment online via credit card, debit card, or PayPal.
@@ -64,7 +65,7 @@ mixin managingYourSubscription()
 			)
 			)
 				| How do I view/update the credit card being charged for my subscription?
 				| How do I view/update the credit card being charged for my subscription?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="managingYourSubscriptionQ4")
 			.collapse(id="managingYourSubscriptionQ4")
 				.custom-accordion-body
 				.custom-accordion-body
 					| You can view and update the card on file by going to Account > 
 					| You can view and update the card on file by going to Account > 
@@ -96,7 +97,7 @@ mixin overleafIndividualPlans()
 			)
 			)
 				| How does the free trial work?
 				| How does the free trial work?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="overleafIndividualPlansQ1")
 			.collapse(id="overleafIndividualPlansQ1")
 				.custom-accordion-body
 				.custom-accordion-body
 					span You get full access to your chosen plan during your 7-day free trial, and there’s no obligation to continue beyond the trial. Your card will be charged at the end of your trial unless you cancel before then. To cancel, go to 
 					span You get full access to your chosen plan during your 7-day free trial, and there’s no obligation to continue beyond the trial. Your card will be charged at the end of your trial unless you cancel before then. To cancel, go to 
@@ -124,7 +125,7 @@ mixin overleafIndividualPlans()
 			)
 			)
 				| What’s a collaborator on an Overleaf individual subscription?
 				| What’s a collaborator on an Overleaf individual subscription?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="overleafIndividualPlansQ2")
 			.collapse(id="overleafIndividualPlansQ2")
 				.custom-accordion-body
 				.custom-accordion-body
 					| A collaborator is someone you invite to work with you on a project. So, for example, on our Standard plan you can have up to 10 people collaborating with you on any given project. 
 					| A collaborator is someone you invite to work with you on a project. So, for example, on our Standard plan you can have up to 10 people collaborating with you on any given project. 
@@ -141,7 +142,7 @@ mixin overleafIndividualPlans()
 			)
 			)
 				| The individual Standard plan has 10 project collaborators, does it mean that 10 people will be upgraded?
 				| The individual Standard plan has 10 project collaborators, does it mean that 10 people will be upgraded?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="overleafIndividualPlansQ3")
 			.collapse(id="overleafIndividualPlansQ3")
 				.custom-accordion-body
 				.custom-accordion-body
 					span No. Only the subscriber’s account will be upgraded. An individual Standard subscription allows you to invite 10 people per project to edit the project with you. Your collaborators can access features such as the full document history and extended compile time, but 
 					span No. Only the subscriber’s account will be upgraded. An individual Standard subscription allows you to invite 10 people per project to edit the project with you. Your collaborators can access features such as the full document history and extended compile time, but 
@@ -159,7 +160,7 @@ mixin overleafIndividualPlans()
 			)
 			)
 				| Do collaborators also have access to the editing and collaboration features I’ve paid for?
 				| Do collaborators also have access to the editing and collaboration features I’ve paid for?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="overleafIndividualPlansQ4")
 			.collapse(id="overleafIndividualPlansQ4")
 				.custom-accordion-body
 				.custom-accordion-body
 					span If you have an Overleaf subscription, then your project collaborators will have access to features like real-time track changes and document history, but 
 					span If you have an Overleaf subscription, then your project collaborators will have access to features like real-time track changes and document history, but 
@@ -177,7 +178,7 @@ mixin overleafIndividualPlans()
 			)
 			)
 				| Can I purchase an individual plan on behalf of someone else?
 				| Can I purchase an individual plan on behalf of someone else?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="overleafIndividualPlansQ5")
 			.collapse(id="overleafIndividualPlansQ5")
 				.custom-accordion-body
 				.custom-accordion-body
 					| Individual subscriptions must be purchased by the account that will be the end user. If you want to purchase a plan for someone else, you’ll need to provide them with relevant payment details to enable them to make the purchase. 
 					| Individual subscriptions must be purchased by the account that will be the end user. If you want to purchase a plan for someone else, you’ll need to provide them with relevant payment details to enable them to make the purchase. 
@@ -193,7 +194,7 @@ mixin overleafIndividualPlans()
 			)
 			)
 				| Who is eligible for the Student plan?
 				| Who is eligible for the Student plan?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="overleafIndividualPlansQ6")
 			.collapse(id="overleafIndividualPlansQ6")
 				.custom-accordion-body
 				.custom-accordion-body
 					| As the name suggests, the Student plan is only for students at educational institutions. This includes graduate students.
 					| As the name suggests, the Student plan is only for students at educational institutions. This includes graduate students.
@@ -209,7 +210,7 @@ mixin overleafIndividualPlans()
 			)
 			)
 				| Can I transfer an individual subscription to someone else?
 				| Can I transfer an individual subscription to someone else?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="overleafIndividualPlansQ7")
 			.collapse(id="overleafIndividualPlansQ7")
 				.custom-accordion-body
 				.custom-accordion-body
 					| No. Individual plans can’t be transferred. 
 					| No. Individual plans can’t be transferred. 
@@ -232,7 +233,7 @@ mixin overleafGroupPlans()
 			)
 			)
 				| What’s the difference between users and collaborators on an Overleaf group subscription?
 				| What’s the difference between users and collaborators on an Overleaf group subscription?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="overleafGroupPlansQ1")
 			.collapse(id="overleafGroupPlansQ1")
 				.custom-accordion-body
 				.custom-accordion-body
 					div On any of our group plans, the number of users refers to the number of people you can invite to join your group. All of these people will have access to the plan’s paid-for features across all their projects, such as real-time track changes and document history. 
 					div On any of our group plans, the number of users refers to the number of people you can invite to join your group. All of these people will have access to the plan’s paid-for features across all their projects, such as real-time track changes and document history. 
@@ -249,7 +250,7 @@ mixin overleafGroupPlans()
 			)
 			)
 				| What is the benefit of purchasing an Overleaf Group plan?
 				| What is the benefit of purchasing an Overleaf Group plan?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="overleafGroupPlansQ2")
 			.collapse(id="overleafGroupPlansQ2")
 				.custom-accordion-body
 				.custom-accordion-body
 					| Our Group subscriptions allow you to purchase access to our premium features for multiple people. They’re easy to manage, help save on paperwork, and allow groups of 5 or more to purchase via purchase order (PO). We also offer discounts on purchases of Group subscriptions for more than 20 users; just get in touch with our 
 					| Our Group subscriptions allow you to purchase access to our premium features for multiple people. They’re easy to manage, help save on paperwork, and allow groups of 5 or more to purchase via purchase order (PO). We also offer discounts on purchases of Group subscriptions for more than 20 users; just get in touch with our 
@@ -275,7 +276,7 @@ mixin overleafGroupPlans()
 			)
 			)
 				| Who is eligible for the educational discount?
 				| Who is eligible for the educational discount?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="overleafGroupPlansQ3")
 			.collapse(id="overleafGroupPlansQ3")
 				.custom-accordion-body
 				.custom-accordion-body
 					| The educational discount for group subscriptions is for students or faculty who are using Overleaf primarily for teaching. 
 					| The educational discount for group subscriptions is for students or faculty who are using Overleaf primarily for teaching. 
@@ -291,7 +292,7 @@ mixin overleafGroupPlans()
 			)
 			)
 				| How do I add more licenses to my group subscription, and what will it cost?
 				| How do I add more licenses to my group subscription, and what will it cost?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="overleafGroupPlansQ4")
 			.collapse(id="overleafGroupPlansQ4")
 				.custom-accordion-body
 				.custom-accordion-body
 					div 
 					div 
@@ -340,7 +341,7 @@ mixin overleafGroupPlans()
 			)
 			)
 				| How do I upgrade my plan from Group Standard to Group Professional?
 				| How do I upgrade my plan from Group Standard to Group Professional?
 				span.custom-accordion-icon
 				span.custom-accordion-icon
-					i.material-symbols.material-symbols-outlined(aria-hidden="true") keyboard_arrow_down
+					+material-symbol-outlined("keyboard_arrow_down")
 			.collapse(id="overleafGroupPlansQ5")
 			.collapse(id="overleafGroupPlansQ5")
 				.custom-accordion-body
 				.custom-accordion-body
 					| You can upgrade your plan from Group Standard to Group Professional on the 
 					| You can upgrade your plan from Group Standard to Group Professional on the 

+ 2 - 1
services/web/app/views/user/passwordReset.pug

@@ -1,5 +1,6 @@
 extends ../layout-marketing
 extends ../layout-marketing
 include ../_mixins/recaptcha
 include ../_mixins/recaptcha
+include ../_mixins/material_symbol
 
 
 block vars
 block vars
 	- bootstrap5PageStatus = 'disabled'
 	- bootstrap5PageStatus = 'disabled'
@@ -48,7 +49,7 @@ block content
 						div(data-ol-custom-form-message="no-password-allowed-due-to-sso" hidden)
 						div(data-ol-custom-form-message="no-password-allowed-due-to-sso" hidden)
 							.notification.notification-type-error(aria-live="polite" style="margin-bottom: 10px;")
 							.notification.notification-type-error(aria-live="polite" style="margin-bottom: 10px;")
 								.notification-icon
 								.notification-icon
-									span.material-symbols.material-symbols-rounded(aria-hidden="true") error
+									+material-symbol-rounded("error")
 								.notification-content-and-cta
 								.notification-content-and-cta
 									.notification-content
 									.notification-content
 										p
 										p

+ 2 - 1
services/web/app/views/user/restricted.pug

@@ -1,4 +1,5 @@
 extends ../layout-marketing
 extends ../layout-marketing
+include ../_mixins/material_symbol
 
 
 block content
 block content
 	main.content#main-content
 	main.content#main-content
@@ -9,5 +10,5 @@ block content
 						h1 #{translate("restricted_no_permission")}
 						h1 #{translate("restricted_no_permission")}
 					p
 					p
 						a.inline-material-symbols(href="/")
 						a.inline-material-symbols(href="/")
-							span.material-symbols(aria-hidden="true") arrow_left_alt
+							+material-symbol("arrow_left_alt")
 							| #{translate("take_me_home")}
 							| #{translate("take_me_home")}

+ 1 - 1
services/web/config/settings.defaults.js

@@ -919,7 +919,7 @@ module.exports = {
           col: ['width'],
           col: ['width'],
           figure: ['class', 'id', 'style'],
           figure: ['class', 'id', 'style'],
           figcaption: ['class', 'id', 'style'],
           figcaption: ['class', 'id', 'style'],
-          i: ['aria-hidden', 'aria-label', 'class', 'id'],
+          i: ['aria-hidden', 'aria-label', 'class', 'id', 'translate'],
           iframe: [
           iframe: [
             'allowfullscreen',
             'allowfullscreen',
             'frameborder',
             'frameborder',

+ 2 - 1
services/web/frontend/js/features/contact-form/search.js

@@ -47,8 +47,9 @@ export function setupSearch(formEl) {
 
 
         const iconEl = document.createElement('i')
         const iconEl = document.createElement('i')
         iconEl.className = 'material-symbols dropdown-item-trailing-icon'
         iconEl.className = 'material-symbols dropdown-item-trailing-icon'
-        iconEl.innerText = 'open_in_new'
+        iconEl.textContent = 'open_in_new'
         iconEl.setAttribute('aria-hidden', 'true')
         iconEl.setAttribute('aria-hidden', 'true')
+        iconEl.translate = false
         linkEl.append(iconEl)
         linkEl.append(iconEl)
 
 
         resultsEl.append(liEl)
         resultsEl.append(liEl)

+ 1 - 0
services/web/frontend/js/features/form-helpers/create-icon.js

@@ -2,6 +2,7 @@ export default function createIcon(type) {
   const icon = document.createElement('span')
   const icon = document.createElement('span')
   icon.className = 'material-symbols'
   icon.className = 'material-symbols'
   icon.setAttribute('aria-hidden', 'true')
   icon.setAttribute('aria-hidden', 'true')
+  icon.setAttribute('translate', 'no')
   icon.textContent = type
   icon.textContent = type
   return icon
   return icon
 }
 }

+ 1 - 0
services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/table-rendering-error.ts

@@ -17,6 +17,7 @@ export class TableRenderingErrorWidget extends WidgetType {
     const iconType = document.createElement('span')
     const iconType = document.createElement('span')
     iconType.classList.add('material-symbols')
     iconType.classList.add('material-symbols')
     iconType.setAttribute('aria-hidden', 'true')
     iconType.setAttribute('aria-hidden', 'true')
+    iconType.setAttribute('translate', 'no')
     iconType.textContent = 'info'
     iconType.textContent = 'info'
     icon.appendChild(iconType)
     icon.appendChild(iconType)
     warning.appendChild(icon)
     warning.appendChild(icon)

+ 1 - 1
services/web/frontend/stylesheets/app/editor/history-react.less

@@ -390,7 +390,7 @@ history-root {
       background-color: @neutral-10;
       background-color: @neutral-10;
     }
     }
 
 
-    span.material-symbols {
+    .material-symbols {
       vertical-align: middle;
       vertical-align: middle;
       font-size: inherit;
       font-size: inherit;
     }
     }

+ 4 - 4
services/web/frontend/stylesheets/app/website-redesign.less

@@ -169,7 +169,7 @@
           }
           }
         }
         }
 
 
-        i.material-symbols {
+        .material-symbols {
           color: var(--sapphire-blue);
           color: var(--sapphire-blue);
         }
         }
       }
       }
@@ -627,7 +627,7 @@
           }
           }
         }
         }
 
 
-        i.material-symbols {
+        .material-symbols {
           vertical-align: middle;
           vertical-align: middle;
           text-decoration: none;
           text-decoration: none;
         }
         }
@@ -949,7 +949,7 @@
     font-weight: 500;
     font-weight: 500;
     color: var(--green-50);
     color: var(--green-50);
 
 
-    i.material-symbols {
+    .material-symbols {
       vertical-align: middle;
       vertical-align: middle;
       padding-bottom: 3px;
       padding-bottom: 3px;
       font-size: 24px;
       font-size: 24px;
@@ -1023,7 +1023,7 @@
       .box-shadow-button-input();
       .box-shadow-button-input();
     }
     }
 
 
-    i {
+    .material-symbols {
       vertical-align: middle;
       vertical-align: middle;
       margin-left: var(--spacing-02);
       margin-left: var(--spacing-02);
       padding-bottom: 3px;
       padding-bottom: 3px;

+ 1 - 1
services/web/frontend/stylesheets/bootstrap-5/pages/homepage.scss

@@ -284,7 +284,7 @@
       margin-top: var(--spacing-06);
       margin-top: var(--spacing-06);
       margin-bottom: var(--spacing-04);
       margin-bottom: var(--spacing-04);
 
 
-      i.material-symbols {
+      .material-symbols {
         vertical-align: middle;
         vertical-align: middle;
         text-decoration: none;
         text-decoration: none;
       }
       }

+ 2 - 2
services/web/frontend/stylesheets/bootstrap-5/pages/website-redesign.scss

@@ -58,7 +58,7 @@
       @include box-shadow-button-input;
       @include box-shadow-button-input;
     }
     }
 
 
-    i {
+    .material-symbols {
       vertical-align: middle;
       vertical-align: middle;
       margin-left: var(--spacing-02);
       margin-left: var(--spacing-02);
       padding-bottom: 3px;
       padding-bottom: 3px;
@@ -378,7 +378,7 @@
           }
           }
         }
         }
 
 
-        i.material-symbols {
+        .material-symbols {
           color: var(--sapphire-blue);
           color: var(--sapphire-blue);
         }
         }
       }
       }

+ 3 - 2
services/web/modules/user-activate/app/views/user/activate.pug

@@ -3,6 +3,8 @@ extends ../../../../../app/views/layout-website-redesign
 block vars
 block vars
 	- isWebsiteRedesign = true
 	- isWebsiteRedesign = true
 
 
+include ../../../../../app/views/_mixins/material_symbol
+
 block content
 block content
 	main.content.content-alt#main-content
 	main.content.content-alt#main-content
 		.container
 		.container
@@ -11,8 +13,7 @@ block content
 					.notification.notification-type-success(aria-live="off" role="alert")
 					.notification.notification-type-success(aria-live="off" role="alert")
 						.notification-content-and-cta
 						.notification-content-and-cta
 							.notification-icon
 							.notification-icon
-								span.material-symbols(aria-hidden="true")
-									| check_circle
+								+material-symbol("check_circle")
 							.notification-content
 							.notification-content
 								p
 								p
 									| #{translate("nearly_activated")}
 									| #{translate("nearly_activated")}