Add RFC3986-compliant URL format encoding
Fixes https://github.com/hakimel/reveal.js/issues/3315
This commit is contained in:
		
							
								
								
									
										2
									
								
								dist/reveal.esm.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/reveal.esm.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/reveal.esm.js.map
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/reveal.esm.js.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/reveal.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/reveal.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/reveal.js.map
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/reveal.js.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| import { extend, queryAll, closest, getMimeTypeFromFile } from '../utils/util.js' | import { extend, queryAll, closest, getMimeTypeFromFile, encodeRFC3986URI } from '../utils/util.js' | ||||||
| import { isMobile } from '../utils/device.js' | import { isMobile } from '../utils/device.js' | ||||||
|  |  | ||||||
| import fitty from 'fitty'; | import fitty from 'fitty'; | ||||||
| @@ -108,7 +108,9 @@ export default class SlideContent { | |||||||
| 					// URL(s) | 					// URL(s) | ||||||
| 					else { | 					else { | ||||||
| 						backgroundContent.style.backgroundImage = backgroundImage.split( ',' ).map( background => { | 						backgroundContent.style.backgroundImage = backgroundImage.split( ',' ).map( background => { | ||||||
| 							return `url(${encodeURI(background.trim())})`; | 							// Decode URL(s) that are already encoded first | ||||||
|  | 							let decoded = decodeURI(background.trim()); | ||||||
|  | 							return `url(${encodeRFC3986URI(decoded)})`; | ||||||
| 						}).join( ',' ); | 						}).join( ',' ); | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
|   | |||||||
| @@ -295,3 +295,19 @@ const fileExtensionToMimeMap = { | |||||||
| export const getMimeTypeFromFile = ( filename='' ) => { | export const getMimeTypeFromFile = ( filename='' ) => { | ||||||
| 	return fileExtensionToMimeMap[filename.split('.').pop()] | 	return fileExtensionToMimeMap[filename.split('.').pop()] | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Encodes a string for RFC3986-compliant URL format. | ||||||
|  |  * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI#encoding_for_rfc3986 | ||||||
|  |  * | ||||||
|  |  * @param {string} url | ||||||
|  |  */ | ||||||
|  | export const encodeRFC3986URI = ( url='' ) => { | ||||||
|  | 	return encodeURI(url) | ||||||
|  | 	  .replace(/%5B/g, "[") | ||||||
|  | 	  .replace(/%5D/g, "]") | ||||||
|  | 	  .replace( | ||||||
|  | 		/[!'()*]/g, | ||||||
|  | 		(c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}` | ||||||
|  | 	  ); | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user