mirror of
				https://codeberg.org/ashley/poke
				synced 2025-07-17 16:52:11 +00:00 
			
		
		
		
	add poketranslate :3
This commit is contained in:
		
							parent
							
								
									5f5aa6c76a
								
							
						
					
					
						commit
						944bb0e1c7
					
				
							
								
								
									
										399
									
								
								html/translate.ejs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										399
									
								
								html/translate.ejs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,399 @@ | ||||
| <!doctype html> | ||||
| 
 | ||||
| <html lang="en"> | ||||
|     <head> | ||||
|         <title>PokeTranslate</title> | ||||
|         <link rel="icon" href="/static/yt-ukraine.svg"> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
|     <meta content="PokeTranslate" property=og:title> | ||||
|     <meta content="Translate text - Anonymously!" property=twitter:description> | ||||
|     <meta content="https://cdn.glitch.global/43b6691a-c8db-41d4-921c-8cf6aa0d9108/17a7fa1d-cdf9-4b73-9686-21e62c7fb285.image.png?v=1667739586452" property=og:image> | ||||
|      <meta content=summary_large_image name=twitter:card> | ||||
|         <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||
|         <meta charset="UTF-8"> | ||||
|         <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'"> | ||||
|          <meta name="referrer" content="no-referrer"> | ||||
| 
 | ||||
|         <style> | ||||
|         .center { | ||||
|             text-align: center; | ||||
|         } | ||||
| 
 | ||||
|         .wrap { | ||||
|             display: flex; | ||||
|             flex-wrap: wrap; | ||||
|             justify-content: center; | ||||
|         } | ||||
| 
 | ||||
|         .wrap.languages { | ||||
|             flex-wrap: nowrap; | ||||
|             margin-bottom: 20px; | ||||
|         } | ||||
| 
 | ||||
|         #could_not_switch_languages_text { | ||||
|             color: red; | ||||
|         } | ||||
| 
 | ||||
|         .item { | ||||
|             width: 100%; | ||||
|             height: 150px; | ||||
|             border-radius:1em; | ||||
|         } | ||||
| 
 | ||||
|         .item-wrapper { | ||||
|             display: flex; | ||||
|             flex-wrap: wrap; | ||||
|             justify-content: center; | ||||
|             width: 450px; | ||||
|             margin: 5px 10px; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         .language, | ||||
|         .switch_languages { | ||||
|             display: flex; | ||||
|         } | ||||
| 
 | ||||
|         .language { | ||||
|             margin: 0px 10px; | ||||
|         } | ||||
| 
 | ||||
|         .switch_languages { | ||||
|             margin: 0px 5px; | ||||
|         } | ||||
| 
 | ||||
|         #switchbutton { | ||||
|             white-space: nowrap; | ||||
|         } | ||||
| 
 | ||||
|         button { | ||||
|             font-size: 1rem; | ||||
|             padding: 4px 10px; | ||||
|             border: 2px solid #888888; | ||||
|         } | ||||
| 
 | ||||
|         input, | ||||
|         select, | ||||
|         textarea { | ||||
|             width: 100%; | ||||
|             font-size: 1rem; | ||||
|             padding: 4px; | ||||
|             border: 2px solid #888888; | ||||
|         } | ||||
| 
 | ||||
|         textarea { | ||||
|             resize: vertical; | ||||
|             height: 5rem; | ||||
|             font-family: sans-serif; | ||||
|             width: 100%; | ||||
|         } | ||||
| 
 | ||||
|         input:focus, | ||||
|         select:focus, | ||||
|         textarea:focus, | ||||
|         button:focus { | ||||
|             border-color: #478061; | ||||
|             outline: 1px solid #478061; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         body { | ||||
|             justify-content: center; | ||||
|             overflow:hidden; | ||||
|             font-family: sans-serif; | ||||
|         } | ||||
| 
 | ||||
|         #definitions_and_translations { | ||||
|             display: grid; | ||||
|             margin: auto; | ||||
|             width: 1100px; | ||||
|             gap: 10px; | ||||
|             grid-template-areas: "definitions translations"; | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         .def_type { | ||||
|             color: #007979; | ||||
|             text-transform: capitalize; | ||||
|         } | ||||
| 
 | ||||
|         .syn { | ||||
|             color: #804700; | ||||
|         } | ||||
| 
 | ||||
|         .syn_type { | ||||
|             color: #007979; | ||||
|         } | ||||
| 
 | ||||
|         .use_in_sentence { | ||||
|             color: #009902; | ||||
|         } | ||||
| 
 | ||||
|         .definitions li:not(:last-child) { | ||||
|           margin-bottom: 1rem; | ||||
|         } | ||||
| 
 | ||||
|         @media screen and (max-width: 1200px) { | ||||
|             #definitions_and_translations { | ||||
|                 display: grid; | ||||
|                 width: 90vw; | ||||
|                 grid-template-areas: | ||||
|                     "definitions definitions" | ||||
|                     "translations translations"; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         div.definitions { | ||||
|             grid-area: definitions; | ||||
|         } | ||||
| 
 | ||||
|         div.translations { | ||||
|             grid-area: translations; | ||||
|         } | ||||
| 
 | ||||
|         @media screen and (prefers-color-scheme: dark) { | ||||
|             body { | ||||
|                 background-color: #212529; | ||||
|                 color: #f8f9fa; | ||||
|             } | ||||
| 
 | ||||
|             #could_not_switch_languages_text { | ||||
|                 color: #F13333; | ||||
|             } | ||||
| 
 | ||||
|             a:visited { | ||||
|                 color: #9759f6; | ||||
|                 text-decoration: none; | ||||
|             } | ||||
| 
 | ||||
|             a { | ||||
|                 color: #599bf6; | ||||
|                 text-decoration: none; | ||||
|             } | ||||
| 
 | ||||
|             input, | ||||
|             select, | ||||
|             button, | ||||
|             textarea { | ||||
|                 background-color: #131618; | ||||
|                 border-color: #495057; | ||||
|                 color: #f8f9fa; | ||||
|             } | ||||
| 
 | ||||
|             .def_type { | ||||
|                 color: cyan; | ||||
|                 text-transform: capitalize; | ||||
|             } | ||||
| 
 | ||||
|             .syn { | ||||
|                 color: burlywood; | ||||
|             } | ||||
| 
 | ||||
|             .syn_type { | ||||
|                 color: cyan; | ||||
|             } | ||||
| 
 | ||||
|             .use_in_sentence { | ||||
|                 color: yellow; | ||||
|             } | ||||
|         } | ||||
|         </style> | ||||
|     </head> | ||||
| 
 | ||||
|     <body> | ||||
| <div style="border-radius: 3em;background: #1a1a1a;padding: 1em;display: flex;flex-direction: column;height: fit-content;align-self: center;margin-top: 6em;"> | ||||
|          | ||||
|         <header class="center"><h1>PokeTranslate</h1></header> | ||||
|   | ||||
|                 <form action="/translate" method="GET" id="translation-form"> | ||||
| 
 | ||||
|             <!-- from and to language --> | ||||
|             <div class="wrap languages"> | ||||
|                 <div class="language"> | ||||
|                      | ||||
|                <% const languageOptions = [ | ||||
|   { code: 'autodetect', name: 'Autodetect' }, | ||||
|   { code: 'af', name: 'Afrikaans' }, | ||||
|   { code: 'sq', name: 'Albanian' }, | ||||
|   { code: 'am', name: 'Amharic' }, | ||||
|   { code: 'ar', name: 'Arabic' }, | ||||
|   { code: 'hy', name: 'Armenian' }, | ||||
|   { code: 'as', name: 'Assamese' }, | ||||
|   { code: 'ay', name: 'Aymara' }, | ||||
|   { code: 'az', name: 'Azerbaijani' }, | ||||
|   { code: 'bm', name: 'Bambara' }, | ||||
|   { code: 'eu', name: 'Basque' }, | ||||
|   { code: 'be', name: 'Belarusian' }, | ||||
|   { code: 'bn', name: 'Bengali' }, | ||||
|   { code: 'bh', name: 'Bhojpuri' }, | ||||
|   { code: 'bs', name: 'Bosnian' }, | ||||
|   { code: 'bg', name: 'Bulgarian' }, | ||||
|   { code: 'ca', name: 'Catalan' }, | ||||
|   { code: 'ceb', name: 'Cebuano' }, | ||||
|   { code: 'ny', name: 'Chichewa' }, | ||||
|   { code: 'zh-cn', name: 'Chinese (Simplified)' }, | ||||
|   { code: 'zh-tw', name: 'Chinese (Traditional)' }, | ||||
|   { code: 'co', name: 'Corsican' }, | ||||
|   { code: 'hr', name: 'Croatian' }, | ||||
|   { code: 'cs', name: 'Czech' }, | ||||
|   { code: 'da', name: 'Danish' }, | ||||
|   { code: 'dv', name: 'Dhivehi' }, | ||||
|   { code: 'doi', name: 'Dogri' }, | ||||
|   { code: 'nl', name: 'Dutch' }, | ||||
|   { code: 'en', name: 'English' }, | ||||
|   { code: 'eo', name: 'Esperanto' }, | ||||
|   { code: 'et', name: 'Estonian' }, | ||||
|   { code: 'ee', name: 'Ewe' }, | ||||
|   { code: 'tl', name: 'Filipino' }, | ||||
|   { code: 'fi', name: 'Finnish' }, | ||||
|   { code: 'fr', name: 'French' }, | ||||
|   { code: 'fy', name: 'Frisian' }, | ||||
|   { code: 'gl', name: 'Galician' }, | ||||
|   { code: 'ka', name: 'Georgian' }, | ||||
|   { code: 'de', name: 'German' }, | ||||
|   { code: 'el', name: 'Greek' }, | ||||
|   { code: 'gn', name: 'Guarani' }, | ||||
|   { code: 'gu', name: 'Gujarati' }, | ||||
|   { code: 'ht', name: 'Haitian Creole' }, | ||||
|   { code: 'ha', name: 'Hausa' }, | ||||
|   { code: 'haw', name: 'Hawaiian' }, | ||||
|   { code: 'he', name: 'Hebrew' }, | ||||
|   { code: 'hi', name: 'Hindi' }, | ||||
|   { code: 'hmn', name: 'Hmong' }, | ||||
|   { code: 'hu', name: 'Hungarian' }, | ||||
|   { code: 'is', name: 'Icelandic' }, | ||||
|   { code: 'ig', name: 'Igbo' }, | ||||
|   { code: 'ilo', name: 'Ilocano' }, | ||||
|   { code: 'id', name: 'Indonesian' }, | ||||
|   { code: 'ga', name: 'Irish' }, | ||||
|   { code: 'it', name: 'Italian' }, | ||||
|   { code: 'ja', name: 'Japanese' }, | ||||
|   { code: 'jv', name: 'Javanese' }, | ||||
|   { code: 'kn', name: 'Kannada' }, | ||||
|   { code: 'kk', name: 'Kazakh' }, | ||||
|   { code: 'km', name: 'Khmer' }, | ||||
|   { code: 'rw', name: 'Kinyarwanda' }, | ||||
|   { code: 'kok', name: 'Konkani' }, | ||||
|   { code: 'ko', name: 'Korean' }, | ||||
|   { code: 'kri', name: 'Krio' }, | ||||
|   { code: 'ku', name: 'Kurdish (Kurmanji)' }, | ||||
|   { code: 'sd', name: 'Sindhi' }, | ||||
|   { code: 'si', name: 'Sinhala' }, | ||||
|   { code: 'sk', name: 'Slovak' }, | ||||
|   { code: 'sl', name: 'Slovenian' }, | ||||
|   { code: 'so', name: 'Somali' }, | ||||
|   { code: 'es', name: 'Spanish' }, | ||||
|   { code: 'su', name: 'Sundanese' }, | ||||
|   { code: 'sw', name: 'Swahili' }, | ||||
|   { code: 'sv', name: 'Swedish' }, | ||||
|   { code: 'tg', name: 'Tajik' }, | ||||
|   { code: 'ta', name: 'Tamil' }, | ||||
|   { code: 'tt', name: 'Tatar' }, | ||||
|   { code: 'te', name: 'Telugu' }, | ||||
|   { code: 'th', name: 'Thai' }, | ||||
|   { code: 'ti', name: 'Tigrinya' }, | ||||
|   { code: 'ts', name: 'Tsonga' }, | ||||
|   { code: 'tr', name: 'Turkish' }, | ||||
|   { code: 'tk', name: 'Turkmen' }, | ||||
|   { code: 'twi', name: 'Twi' }, | ||||
|   { code: 'uk', name: 'Ukrainian' }, | ||||
|   { code: 'ur', name: 'Urdu' }, | ||||
|   { code: 'ug', name: 'Uyghur' }, | ||||
|   { code: 'uz', name: 'Uzbek' }, | ||||
|   { code: 'vi', name: 'Vietnamese' }, | ||||
|   { code: 'cy', name: 'Welsh' }, | ||||
|   { code: 'xh', name: 'Xhosa' }, | ||||
|   { code: 'yi', name: 'Yiddish' }, | ||||
|   { code: 'yo', name: 'Yoruba' }, | ||||
|   { code: 'zu', name: 'Zulu' } | ||||
| ]; %> | ||||
| 
 | ||||
| 
 | ||||
| <!-- Source language select --> | ||||
| <select name="from_language" id="from_language" style="margin-right: 1em;border-radius: 1em;padding: 7px;" aria-label="Source language"> | ||||
|    <% languageOptions.forEach(language => { %> | ||||
|     <option value="<%= language.code %>" <%= language.code === (from_language || 'autodetect') ? 'selected' : '' %>><%= language.name %></option> | ||||
|   <% }); %> | ||||
| </select> | ||||
| 
 | ||||
| 
 | ||||
| <!-- Target language select --> | ||||
| <select name="to_language" id="to_language"  style="margin-right: 1em;border-radius: 1em;padding: 7px;" aria-label="Target language"> | ||||
|   <% languageOptions.slice(1).forEach(language => { %> | ||||
|     <option value="<%= language.code %>" <%= language.code === to_language ? 'selected' : '' %>><%= language.name %></option> | ||||
|   <% }); %> | ||||
| </select> | ||||
| 
 | ||||
|                      | ||||
|                 </div> | ||||
|             </div> | ||||
| 
 | ||||
|              | ||||
| 
 | ||||
|             <!-- text boxes --> | ||||
|             <div class="wrap"> | ||||
|                 <div class="item-wrapper"> | ||||
|                     <textarea autofocus class="item" id="input" name="input" dir="auto"  placeholder="<%- text %>"><%- text %> | ||||
| </textarea> | ||||
|                     </div> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|                 <div class="item-wrapper"> | ||||
|                     <textarea id="output" class="translation item" dir="auto" placeholder="Translation" readonly> <%- translation %> </textarea> | ||||
|               </div> | ||||
|             </div> | ||||
| 
 | ||||
|             <br> | ||||
| 
 | ||||
|             <div class="center"> | ||||
|                 <!-- translate button --> | ||||
|                 <button type="submit" style="border-radius: 1em;padding: 7px;">Translate :3</button> | ||||
|             </div> | ||||
| 
 | ||||
|             <br> | ||||
| 
 | ||||
|             | ||||
| 
 | ||||
|             <br> | ||||
|   | ||||
|                  | ||||
| 
 | ||||
|                  | ||||
|             </div> | ||||
| 
 | ||||
|         </form> | ||||
|             </div> | ||||
| 
 | ||||
| 
 | ||||
|         <br> | ||||
|         <br> | ||||
|         <br> | ||||
| 
 | ||||
|   | ||||
| 
 | ||||
|         <script> | ||||
|             // @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-3.0 | ||||
|             // this code submits the translation form when pressing Ctrl/Meta+Enter while focussed on the input text field | ||||
|             document.getElementById("input").addEventListener("keydown", function(event) { | ||||
|                 if (event.keyCode === 13 && (event.metaKey || event.ctrlKey)) { | ||||
|                     document.getElementById("translation-form").submit(); | ||||
|                 } | ||||
|             }); | ||||
| 
 | ||||
|             // Auto resize textarea to fit words inside it without need to scroll -- Thanks to: https://stackoverflow.com/a/25621277 | ||||
|             var input = document.getElementById("input"); | ||||
|             var output = document.getElementById("output"); | ||||
|             input.setAttribute("style", "height:" + output.scrollHeight + "px;overflow-y:scroll;"); | ||||
|             output.setAttribute("style", "height:" + output.scrollHeight + "px;overflow-y:scroll;"); | ||||
|             input.addEventListener("input", function(e) { | ||||
|                 this.style.height = 150 + "px"; | ||||
|                 this.style.height = this.scrollHeight + "px"; | ||||
|             }); | ||||
|              | ||||
|             // @license-end | ||||
|         </script> | ||||
|      <script src="/static/custom-css.js"></script> | ||||
|     </body> | ||||
| </html> | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Ashley
						Ashley