172 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			HTML
		
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			HTML
		
	
	
	
| {% extends 'bootstrap/base.html' %}
 | |
| 
 | |
| {% block title %}
 | |
|     {% if title %}{{ title }} - Microblog{% else %}{{ _('Welcome to Microblog') }}{% endif %}
 | |
| {% endblock %}
 | |
| 
 | |
| {% block navbar %}
 | |
|     <nav class="navbar navbar-default">
 | |
|         <div class="container">
 | |
|             <div class="navbar-header">
 | |
|                 <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
 | |
|                     <span class="sr-only">Toggle navigation</span>
 | |
|                     <span class="icon-bar"></span>
 | |
|                     <span class="icon-bar"></span>
 | |
|                     <span class="icon-bar"></span>
 | |
|                 </button>
 | |
|                 <a class="navbar-brand" href="{{ url_for('main.index') }}">Microblog</a>
 | |
|             </div>
 | |
|             <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
 | |
|                 <ul class="nav navbar-nav">
 | |
|                     <li><a href="{{ url_for('main.index') }}">{{ _('Home') }}</a></li>
 | |
|                     <li><a href="{{ url_for('main.explore') }}">{{ _('Explore') }}</a></li>
 | |
|                 </ul>
 | |
|                 {% 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 class="nav navbar-nav navbar-right">
 | |
|                     {% if current_user.is_anonymous %}
 | |
|                     <li><a href="{{ url_for('auth.login') }}">{{ _('Login') }}</a></li>
 | |
|                     {% else %}
 | |
|                     <li>
 | |
|                         <a href="{{ url_for('main.messages') }}">{{ _('Messages') }}
 | |
|                             {% set new_messages = current_user.new_messages() %}
 | |
|                             <span id="message_count" class="badge"
 | |
|                                   style="visibility: {% if new_messages %}visible
 | |
|                                                      {% else %}hidden{% endif %};">
 | |
|                                 {{ new_messages }}
 | |
|                             </span>
 | |
|                         </a>
 | |
|                     </li>
 | |
|                     <li><a href="{{ url_for('main.user', username=current_user.username) }}">{{ _('Profile') }}</a></li>
 | |
|                     <li><a href="{{ url_for('auth.logout') }}">{{ _('Logout') }}</a></li>
 | |
|                     {% endif %}
 | |
|                 </ul>
 | |
|             </div>
 | |
|         </div>
 | |
|     </nav>
 | |
| {% endblock %}
 | |
| 
 | |
| {% block content %}
 | |
|     <div class="container">
 | |
|         {% if current_user.is_authenticated %}
 | |
|         {% with tasks = current_user.get_tasks_in_progress() %}
 | |
|         {% if tasks %}
 | |
|             {% for task in tasks %}
 | |
|             <div class="alert alert-success" role="alert">
 | |
|                 {{ task.description }}
 | |
|                 <span id="{{ task.id }}-progress">{{ task.get_progress() }}</span>%
 | |
|             </div>
 | |
|             {% endfor %}
 | |
|         {% endif %}
 | |
|         {% endwith %}
 | |
|         {% endif %}
 | |
|         {% with messages = get_flashed_messages() %}
 | |
|         {% if messages %}
 | |
|             {% for message in messages %}
 | |
|             <div class="alert alert-info" role="alert">{{ message }}</div>
 | |
|             {% endfor %}
 | |
|         {% endif %}
 | |
|         {% endwith %}
 | |
| 
 | |
|         {# application content needs to be provided in the app_content block #}
 | |
|         {% block app_content %}{% endblock %}
 | |
|     </div>
 | |
| {% endblock %}
 | |
| 
 | |
| {% block scripts %}
 | |
|     {{ super() }}
 | |
|     {{ moment.include_moment() }}
 | |
|     {{ moment.lang(g.locale) }}
 | |
|     <script>
 | |
|         function translate(sourceElem, destElem, sourceLang, destLang) {
 | |
|             $(destElem).html('<img src="{{ url_for('static', filename='loading.gif') }}">');
 | |
|             $.post('/translate', {
 | |
|                 text: $(sourceElem).text(),
 | |
|                 source_language: sourceLang,
 | |
|                 dest_language: destLang
 | |
|             }).done(function(response) {
 | |
|                 $(destElem).text(response['text'])
 | |
|             }).fail(function() {
 | |
|                 $(destElem).text("{{ _('Error: Could not contact server.') }}");
 | |
|             });
 | |
|         }
 | |
|         $(function () {
 | |
|             var timer = null;
 | |
|             var xhr = null;
 | |
|             $('.user_popup').hover(
 | |
|                 function(event) {
 | |
|                     // mouse in event handler
 | |
|                     var elem = $(event.currentTarget);
 | |
|                     timer = setTimeout(function() {
 | |
|                         timer = null;
 | |
|                         xhr = $.ajax(
 | |
|                             '/user/' + elem.first().text().trim() + '/popup').done(
 | |
|                                 function(data) {
 | |
|                                     xhr = null;
 | |
|                                     elem.popover({
 | |
|                                         trigger: 'manual',
 | |
|                                         html: true,
 | |
|                                         animation: false,
 | |
|                                         container: elem,
 | |
|                                         content: data
 | |
|                                     }).popover('show');
 | |
|                                     flask_moment_render_all();
 | |
|                                 }
 | |
|                             );
 | |
|                     }, 1000);
 | |
|                 },
 | |
|                 function(event) {
 | |
|                     // mouse out event handler
 | |
|                     var elem = $(event.currentTarget);
 | |
|                     if (timer) {
 | |
|                         clearTimeout(timer);
 | |
|                         timer = null;
 | |
|                     }
 | |
|                     else if (xhr) {
 | |
|                         xhr.abort();
 | |
|                         xhr = null;
 | |
|                     }
 | |
|                     else {
 | |
|                         elem.popover('destroy');
 | |
|                     }
 | |
|                 }
 | |
|             );
 | |
|         });
 | |
|         function set_message_count(n) {
 | |
|             $('#message_count').text(n);
 | |
|             $('#message_count').css('visibility', n ? 'visible' : 'hidden');
 | |
|         }
 | |
|         function set_task_progress(task_id, progress) {
 | |
|             $('#' + task_id + '-progress').text(progress);
 | |
|         }
 | |
|         {% if current_user.is_authenticated %}
 | |
|         $(function() {
 | |
|             var since = 0;
 | |
|             setInterval(function() {
 | |
|                 $.ajax('{{ url_for('main.notifications') }}?since=' + since).done(
 | |
|                     function(notifications) {
 | |
|                         for (var i = 0; i < notifications.length; i++) {
 | |
|                             switch (notifications[i].name) {
 | |
|                                 case 'unread_message_count':
 | |
|                                     set_message_count(notifications[i].data);
 | |
|                                     break;
 | |
|                                 case 'task_progress':
 | |
|                                     set_task_progress(notifications[i].data.task_id,
 | |
|                                         notifications[i].data.progress);
 | |
|                                     break;
 | |
|                             }
 | |
|                             since = notifications[i].timestamp;
 | |
|                         }
 | |
|                     }
 | |
|                 );
 | |
|             }, 10000);
 | |
|         });
 | |
|         {% endif %}
 | |
|     </script>
 | |
| {% endblock %}
 |