{% 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 %}