MOBILE-4187 app: Add url class on HTML tag
This commit is contained in:
		
							parent
							
								
									3f701cf7db
								
							
						
					
					
						commit
						f0acc03319
					
				| @ -32,7 +32,9 @@ import { CoreSitePlugins } from '@features/siteplugins/services/siteplugins'; | ||||
| import { CoreDomUtils } from '@services/utils/dom'; | ||||
| import { CoreDom } from '@singletons/dom'; | ||||
| import { CorePlatform } from '@services/platform'; | ||||
| import { CoreUrl } from '@singletons/url'; | ||||
| 
 | ||||
| const MOODLE_SITE_URL_PREFIX = 'url-'; | ||||
| const MOODLE_VERSION_PREFIX = 'version-'; | ||||
| const MOODLEAPP_VERSION_PREFIX = 'moodleapp-'; | ||||
| 
 | ||||
| @ -58,7 +60,7 @@ export class AppComponent implements OnInit, AfterViewInit { | ||||
|             CoreLang.clearCustomStrings(); | ||||
| 
 | ||||
|             // Remove version classes from body.
 | ||||
|             this.removeVersionClass(MOODLE_VERSION_PREFIX); | ||||
|             this.removeModeClasses([MOODLE_VERSION_PREFIX, MOODLE_SITE_URL_PREFIX]); | ||||
| 
 | ||||
|             // Go to sites page when user is logged out.
 | ||||
|             await CoreNavigator.navigate('/login/sites', { reset: true }); | ||||
| @ -113,31 +115,42 @@ export class AppComponent implements OnInit, AfterViewInit { | ||||
|                 const info = site.getInfo(); | ||||
|                 if (info) { | ||||
|                     // Add version classes to body.
 | ||||
|                     this.removeVersionClass(MOODLE_VERSION_PREFIX); | ||||
|                     this.removeModeClasses([MOODLE_VERSION_PREFIX, MOODLE_SITE_URL_PREFIX]); | ||||
| 
 | ||||
|                     this.addVersionClass(MOODLE_VERSION_PREFIX, CoreSites.getReleaseNumber(info.release || '')); | ||||
|                     this.addSiteUrlClass(info.siteurl); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             this.loadCustomStrings(); | ||||
|         }); | ||||
| 
 | ||||
|         CoreEvents.on(CoreEvents.SITE_UPDATED, (data) => { | ||||
|             if (data.siteId == CoreSites.getCurrentSiteId()) { | ||||
|         // Site config is checked in login.
 | ||||
|         CoreEvents.on(CoreEvents.LOGIN_SITE_CHECKED, (data) => { | ||||
|             this.addSiteUrlClass(data.config.httpswwwroot); | ||||
|         }); | ||||
| 
 | ||||
|         CoreEvents.on(CoreEvents.SITE_UPDATED, async (data) => { | ||||
|             if (data.siteId === CoreSites.getCurrentSiteId()) { | ||||
|                 this.loadCustomStrings(); | ||||
| 
 | ||||
|                 // Add version classes to body.
 | ||||
|                 this.removeVersionClass(MOODLE_VERSION_PREFIX); | ||||
|                 this.removeModeClasses([MOODLE_VERSION_PREFIX, MOODLE_SITE_URL_PREFIX]); | ||||
| 
 | ||||
|                 this.addVersionClass(MOODLE_VERSION_PREFIX, CoreSites.getReleaseNumber(data.release || '')); | ||||
|                 this.addSiteUrlClass(data.siteurl); | ||||
|             } | ||||
|         }); | ||||
| 
 | ||||
|         CoreEvents.on(CoreEvents.SITE_ADDED, (data) => { | ||||
|             if (data.siteId == CoreSites.getCurrentSiteId()) { | ||||
|             if (data.siteId === CoreSites.getCurrentSiteId()) { | ||||
|                 this.loadCustomStrings(); | ||||
| 
 | ||||
|                 // Add version classes to body.
 | ||||
|                 this.removeVersionClass(MOODLE_VERSION_PREFIX); | ||||
|                 this.removeModeClasses([MOODLE_VERSION_PREFIX, MOODLE_SITE_URL_PREFIX]); | ||||
| 
 | ||||
|                 this.addVersionClass(MOODLE_VERSION_PREFIX, CoreSites.getReleaseNumber(data.release || '')); | ||||
|                 this.addSiteUrlClass(data.siteurl); | ||||
|             } | ||||
|         }); | ||||
| 
 | ||||
| @ -232,7 +245,7 @@ export class AppComponent implements OnInit, AfterViewInit { | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Convenience function to add version to body classes. | ||||
|      * Convenience function to add version to html classes. | ||||
|      * | ||||
|      * @param prefix Prefix to add to the class. | ||||
|      * @param release Current release number of the site. | ||||
| @ -249,18 +262,59 @@ export class AppComponent implements OnInit, AfterViewInit { | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Convenience function to remove all version classes form body. | ||||
|      * Convenience function to remove all mode classes form body. | ||||
|      * | ||||
|      * @param prefix Prefix of to the class. | ||||
|      * @param prefixes Prefixes of the class mode to be removed. | ||||
|      */ | ||||
|     protected removeVersionClass(prefix: string): void { | ||||
|         for (const versionClass of CoreDomUtils.getModeClasses()) { | ||||
|             if (!versionClass.startsWith(prefix)) { | ||||
|     protected removeModeClasses(prefixes: string[]): void { | ||||
|         for (const modeClass of CoreDomUtils.getModeClasses()) { | ||||
|             if (!prefixes.some((prefix) => modeClass.startsWith(prefix))) { | ||||
|                 continue; | ||||
|             } | ||||
| 
 | ||||
|             CoreDomUtils.toggleModeClass(versionClass, false); | ||||
|             CoreDomUtils.toggleModeClass(modeClass, false); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Converts the provided URL into a CSS class that be used within the page. | ||||
|      * This is primarily used to add the siteurl to the body tag as a CSS class. | ||||
|      * Extracted from LMS url_to_class_name function. | ||||
|      * | ||||
|      * @param url Url. | ||||
|      * @returns Class name | ||||
|      */ | ||||
|     protected urlToClassName(url: string): string { | ||||
|         const parsedUrl = CoreUrl.parse(url); | ||||
| 
 | ||||
|         if (!parsedUrl) { | ||||
|             return ''; | ||||
|         } | ||||
| 
 | ||||
|         let className = parsedUrl.domain?.replace('.', '-') || ''; | ||||
| 
 | ||||
|         if (parsedUrl.port) { | ||||
|             className += `--${parsedUrl.port}`; | ||||
|         } | ||||
|         if (parsedUrl.path) { | ||||
|             const leading = new RegExp('^/+'); | ||||
|             const trailing = new RegExp('/+$'); | ||||
|             const path = parsedUrl.path.replace(leading, '').replace(trailing, ''); | ||||
|             if (path) { | ||||
|                 className += '--' + path.replace('/', '-'); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return className; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Convenience function to add site url to html classes. | ||||
|      */ | ||||
|     protected addSiteUrlClass(siteUrl: string): void { | ||||
|         const className = this.urlToClassName(siteUrl); | ||||
| 
 | ||||
|         CoreDomUtils.toggleModeClass(MOODLE_SITE_URL_PREFIX + className, true); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user