85 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			HTML
		
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			HTML
		
	
	
	
| <!doctype html>
 | |
| <html lang="en">
 | |
|   <head>
 | |
|     <meta charset="utf-8">
 | |
|     <meta name="viewport" content="width=device-width, initial-scale=1">
 | |
|     {% if title %}
 | |
|     <title>{{ title }} - Microblog</title>
 | |
|     {% else %}
 | |
|     <title>{{ _('Welcome to Microblog') }}</title>
 | |
|     {% endif %}
 | |
|     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
 | |
|   </head>
 | |
|   <body>
 | |
|     <nav class="navbar navbar-expand-lg bg-body-tertiary">
 | |
|       <div class="container">
 | |
|         <a class="navbar-brand" href="{{ url_for('main.index') }}">Microblog</a>
 | |
|         <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
 | |
|           <span class="navbar-toggler-icon"></span>
 | |
|         </button>
 | |
|         <div class="collapse navbar-collapse" id="navbarSupportedContent">
 | |
|           <ul class="navbar-nav me-auto mb-2 mb-lg-0">
 | |
|             <li class="nav-item">
 | |
|               <a class="nav-link" aria-current="page" href="{{ url_for('main.index') }}">{{ _('Home') }}</a>
 | |
|             </li>
 | |
|             <li class="nav-item">
 | |
|               <a class="nav-link" aria-current="page" href="{{ url_for('main.explore') }}">{{ _('Explore') }}</a>
 | |
|             </li>
 | |
|             {% if g.search_form %}
 | |
|             <form class="navbar-form navbar-left" method="get" action="{{ url_for('main.search') }}">
 | |
|                 <div class="form-group">
 | |
|                     {{ g.search_form.q(size=20, class='form-control', placeholder=g.search_form.q.label.text) }}
 | |
|                 </div>
 | |
|             </form>
 | |
|             {% endif %}
 | |
|           </ul>
 | |
|           <ul class="navbar-nav mb-2 mb-lg-0">
 | |
|             {% if current_user.is_anonymous %}
 | |
|             <li class="nav-item">
 | |
|               <a class="nav-link" aria-current="page" href="{{ url_for('auth.login') }}">{{ _('Login') }}</a>
 | |
|             </li>
 | |
|             {% else %}
 | |
|             <li class="nav-item">
 | |
|               <a class="nav-link" aria-current="page" href="{{ url_for('main.user', username=current_user.username) }}">{{ _('Profile') }}</a>
 | |
|             </li>
 | |
|             <li class="nav-item">
 | |
|               <a class="nav-link" aria-current="page" href="{{ url_for('auth.logout') }}">{{ _('Logout') }}</a>
 | |
|             </li>
 | |
|             {% endif %}
 | |
|           </ul>
 | |
|         </div>
 | |
|       </div>
 | |
|     </nav>
 | |
|     <div class="container mt-3">
 | |
|       {% with messages = get_flashed_messages() %}
 | |
|       {% if messages %}
 | |
|         {% for message in messages %}
 | |
|         <div class="alert alert-info" role="alert">{{ message }}</div>
 | |
|         {% endfor %}
 | |
|       {% endif %}
 | |
|       {% endwith %}
 | |
|       {% block content %}{% endblock %}
 | |
|     </div>
 | |
|     <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>
 | |
|     {{ moment.include_moment() }}
 | |
|     {{ moment.lang(g.locale) }}
 | |
|     <script>
 | |
|       async function translate(sourceElem, destElem, sourceLang, destLang) {
 | |
|         document.getElementById(destElem).innerHTML = 
 | |
|           '<img src="{{ url_for('static', filename='loading.gif') }}">';
 | |
|         const response = await fetch('/translate', {
 | |
|           method: 'POST',
 | |
|           headers: {'Content-Type': 'application/json; charset=utf-8'},
 | |
|           body: JSON.stringify({
 | |
|             text: document.getElementById(sourceElem).innerText,
 | |
|             source_language: sourceLang,
 | |
|             dest_language: destLang
 | |
|           })
 | |
|         })
 | |
|         const data = await response.json();
 | |
|         document.getElementById(destElem).innerText = data.text;
 | |
|       }
 | |
|     </script>
 | |
|   </body>
 | |
| </html>
 |