[Glitch] Improve rendering of emoji which do not contrast with background
Port f55fe1a5ee to glitch-soc
Signed-off-by: Thibaut Girka <thib@sitedethib.com>
			
			
This commit is contained in:
		
							parent
							
								
									a8ef7570a1
								
							
						
					
					
						commit
						a203f596f3
					
				
					 3 changed files with 16 additions and 7 deletions
				
			
		|  | @ -1,13 +1,13 @@ | |||
| $emojis-requiring-outlines: '8ball' 'ant' 'back' 'black_circle' 'black_heart' 'black_large_square' 'black_medium_small_square' 'black_medium_square' 'black_nib' 'black_small_square' 'bomb' 'bowling' 'bust_in_silhouette' 'busts_in_silhouette' 'camera' 'camera_with_flash' 'clubs' 'copyright' 'curly_loop' 'currency_exchange' 'dark_sunglasses' 'eight_pointed_black_star' 'electric_plug' 'end' 'female-guard' 'film_projector' 'fried_egg' 'gorilla' 'guardsman' 'heavy_check_mark' 'heavy_division_sign' 'heavy_dollar_sign' 'heavy_minus_sign' 'heavy_multiplication_x' 'heavy_plus_sign' 'hocho' 'hole' 'joystick' 'kaaba' 'lower_left_ballpoint_pen' 'lower_left_fountain_pen' 'male-guard' 'microphone' 'mortar_board' 'movie_camera' 'musical_score' 'on' 'registered' 'soon' 'spades' 'speaking_head_in_silhouette' 'spider' 'telephone_receiver' 'tm' 'top' 'tophat' 'turkey' 'vhs' 'video_camera' 'video_game' 'water_buffalo' 'waving_black_flag' 'wavy_dash' !default; | ||||
| $emojis-requiring-inversion: 'back' 'copyright' 'curly_loop' 'currency_exchange' 'end' 'heavy_check_mark' 'heavy_division_sign' 'heavy_dollar_sign' 'heavy_minus_sign' 'heavy_multiplication_x' 'heavy_plus_sign' 'on' 'registered' 'soon' 'spider' 'telephone_receiver' 'tm' 'top' 'wavy_dash' !default; | ||||
| 
 | ||||
| %emoji-outline { | ||||
|   filter: drop-shadow(1px 1px 0 $primary-text-color) drop-shadow(-1px 1px 0 $primary-text-color) drop-shadow(1px -1px 0 $primary-text-color) drop-shadow(-1px -1px 0 $primary-text-color); | ||||
| %emoji-color-inversion { | ||||
|   filter: invert(1); | ||||
| } | ||||
| 
 | ||||
| .emojione { | ||||
|   @each $emoji in $emojis-requiring-outlines { | ||||
|   @each $emoji in $emojis-requiring-inversion { | ||||
|     &[title=':#{$emoji}:'] { | ||||
|       @extend %emoji-outline; | ||||
|       @extend %emoji-color-inversion; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -37,4 +37,4 @@ $account-background-color: $white !default; | |||
|   @return hsl(hue($color), saturation($color), lightness($color) - $amount); | ||||
| } | ||||
| 
 | ||||
| $emojis-requiring-outlines: 'alien' 'baseball' 'chains' 'chicken' 'cloud' 'crescent_moon' 'dash' 'dove_of_peace' 'eyes' 'first_quarter_moon' 'first_quarter_moon_with_face' 'fish_cake' 'full_moon' 'full_moon_with_face' 'ghost' 'goat' 'grey_exclamation' 'grey_question' 'ice_skate' 'last_quarter_moon' 'last_quarter_moon_with_face' 'lightning' 'loud_sound' 'moon' 'mute' 'page_with_curl' 'rain_cloud' 'ram' 'rice' 'rice_ball' 'rooster' 'sheep' 'skull' 'skull_and_crossbones' 'snow_cloud' 'sound' 'speaker' 'speech_balloon' 'thought_balloon' 'volleyball' 'waning_crescent_moon' 'waning_gibbous_moon' 'waving_white_flag' 'waxing_crescent_moon' 'white_circle' 'white_large_square' 'white_medium_small_square' 'white_medium_square' 'white_small_square' 'wind_blowing_face'; | ||||
| $emojis-requiring-inversion: 'chains'; | ||||
|  |  | |||
|  | @ -6,6 +6,15 @@ const trie = new Trie(Object.keys(unicodeMapping)); | |||
| 
 | ||||
| const assetHost = process.env.CDN_HOST || ''; | ||||
| 
 | ||||
| // Emoji requiring extra borders depending on theme
 | ||||
| const darkEmoji = '🎱🐜⚫🖤⬛◼️◾◼️✒️▪️💣🎳📷📸♣️🕶️✴️🔌💂♀️📽️🍳🦍💂🔪🕳️🕹️🕋🖊️🖋️💂♂️🎤🎓🎥🎼♠️🎩🦃📼📹🎮🐃🏴'; | ||||
| const lightEmoji = '👽⚾🐔☁️💨🕊️👀🍥👻🐐❕❔⛸️🌩️🔊🔇📃🌧️🐏🍚🍙🐓🐑💀☠️🌨️🔉🔈💬💭🏐🏳️⚪⬜◽◻️▫️'; | ||||
| 
 | ||||
| const emojiFilename = (filename, match) => { | ||||
|   const borderedEmoji = document.body.classList.contains('skin-mastodon-light') ? lightEmoji : darkEmoji; | ||||
|   return borderedEmoji.includes(match) ? (filename + '_border') : filename; | ||||
| }; | ||||
| 
 | ||||
| const emojify = (str, customEmojis = {}) => { | ||||
|   const tagCharsWithoutEmojis = '<&'; | ||||
|   const tagCharsWithEmojis = Object.keys(customEmojis).length ? '<&:' : '<&'; | ||||
|  | @ -60,7 +69,7 @@ const emojify = (str, customEmojis = {}) => { | |||
|     } else if (!useSystemEmojiFont) { // matched to unicode emoji
 | ||||
|       const { filename, shortCode } = unicodeMapping[match]; | ||||
|       const title = shortCode ? `:${shortCode}:` : ''; | ||||
|       replacement = `<img draggable="false" class="emojione" alt="${match}" title="${title}" src="${assetHost}/emoji/${filename}.svg" />`; | ||||
|       replacement = `<img draggable="false" class="emojione" alt="${match}" title="${title}" src="${assetHost}/emoji/${emojiFilename(filename, match)}.svg" />`; | ||||
|       rend = i + match.length; | ||||
|       // If the matched character was followed by VS15 (for selecting text presentation), skip it.
 | ||||
|       if (str.codePointAt(rend) === 65038) { | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue