2015-01-30 11:58:36 +01:00
|
|
|
<!DOCTYPE html>
|
2016-01-25 21:22:22 +01:00
|
|
|
<html ng-controller="LanguageCtrl" lang="{{ selectedLanguage[0].code }}" class="no-js">
|
2015-02-08 22:37:55 +01:00
|
|
|
<meta charset="utf-8">
|
|
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
|
|
<base href="/">
|
2016-11-28 15:04:55 +01:00
|
|
|
<title ng-if="!activeAppTitle">OpenSlides</title> <!-- avoid {{ ... }} in title while angular is not loaded -->
|
|
|
|
<title ng-if="activeAppTitle">OpenSlides – {{ activeAppTitle | translate }}</title>
|
2015-02-08 22:37:55 +01:00
|
|
|
<meta name="description" content="">
|
2016-09-18 00:45:00 +02:00
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
2015-02-08 22:37:55 +01:00
|
|
|
<link rel="stylesheet" href="static/css/openslides-libs.css">
|
|
|
|
<link rel="stylesheet" href="static/css/app.css">
|
2015-11-29 22:25:01 +01:00
|
|
|
<link rel="icon" href="/static/img/favicon.png">
|
2017-01-15 13:04:31 +01:00
|
|
|
|
2015-02-08 22:37:55 +01:00
|
|
|
<script src="static/js/openslides-libs.js"></script>
|
2016-09-09 00:50:27 +02:00
|
|
|
<script src="static/js/openslides.js"></script>
|
|
|
|
<script src="static/js/openslides-templates.js"></script>
|
2016-12-16 21:02:12 +01:00
|
|
|
|
2016-01-25 21:22:22 +01:00
|
|
|
<div id="wrapper" ng-cloak>
|
2015-02-08 22:37:55 +01:00
|
|
|
|
2017-01-14 13:02:26 +01:00
|
|
|
<!-- please wait -->
|
2017-01-15 10:51:14 +01:00
|
|
|
<div id="spinner-container" ng-if="!openslidesBootstrapDone">
|
|
|
|
<div><i class="fa fa-spinner fa-pulse"></i></div>
|
2017-01-14 13:02:26 +01:00
|
|
|
</div>
|
2017-01-15 10:51:14 +01:00
|
|
|
<div id="startup-overlay" ng-if="!openslidesBootstrapDone"></div>
|
2017-01-14 13:02:26 +01:00
|
|
|
|
2015-11-29 22:25:01 +01:00
|
|
|
<!-- Header -->
|
|
|
|
<div id="header">
|
|
|
|
<div class="containerOS">
|
|
|
|
<!-- Logo -->
|
|
|
|
<div class="title">
|
2016-01-25 21:22:22 +01:00
|
|
|
<a ui-sref="home">
|
2015-11-29 22:25:01 +01:00
|
|
|
<img src="/static/img/openslides-logo-dark.png" alt="Logo" height="35">
|
2015-02-08 22:37:55 +01:00
|
|
|
</a>
|
|
|
|
</div>
|
2015-11-29 22:25:01 +01:00
|
|
|
|
|
|
|
<!-- user specific header (chat, user settings / login, language)-->
|
|
|
|
<div class="user" ng-controller="userMenu">
|
2015-02-08 22:37:55 +01:00
|
|
|
<div class="btn-group">
|
|
|
|
<div ng-if="operator.isAuthenticated()">
|
2015-03-09 15:40:54 +01:00
|
|
|
|
2015-11-16 21:10:33 +01:00
|
|
|
<!-- chatbox -->
|
|
|
|
<div ng-controller="ChatMessageCtrl" os-perms="core.can_use_chat" class="inline">
|
2015-12-01 12:06:15 +01:00
|
|
|
<a href ng-click="openChatbox()" class="headerlink"
|
|
|
|
ng-class="{ 'active': !chatboxIsCollapsed }" uib-dropdown-toggle>
|
2015-11-16 21:10:33 +01:00
|
|
|
<i class="fa fa-comment"></i>
|
2016-03-06 00:58:45 +01:00
|
|
|
<translate class="hide-sm">Chat</translate>
|
2015-11-16 21:10:33 +01:00
|
|
|
<span ng-if="unreadMessages > 0 && chatboxIsCollapsed" class="badge">
|
|
|
|
{{ unreadMessages }}
|
|
|
|
</span>
|
2015-12-01 12:06:15 +01:00
|
|
|
</a> |
|
2015-11-16 21:10:33 +01:00
|
|
|
<div id="chatbox" class="well" uib-collapse="chatboxIsCollapsed">
|
|
|
|
<div id="chatbox-text" scroll-glue>
|
|
|
|
<ul class="list-unstyled">
|
|
|
|
<li ng-repeat="chatmessage in chatmessages">
|
|
|
|
<small class="grey">{{ chatmessage.timestamp | date:'HH:mm:ss' }}</small>
|
|
|
|
<small>{{ chatmessage.user.short_name }}:</small>
|
|
|
|
{{ chatmessage.message }}
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
<div id="chatbox-form">
|
|
|
|
<form ng-submit="sendMessage()">
|
|
|
|
<div class="input-group">
|
2016-01-10 00:46:23 +01:00
|
|
|
<input
|
|
|
|
ng-model="newMessage"
|
|
|
|
id="messageInput"
|
|
|
|
class="form-control"
|
|
|
|
type="text"
|
|
|
|
autocomplete="off">
|
2015-11-16 21:10:33 +01:00
|
|
|
<span class="input-group-btn">
|
|
|
|
<button type="submit" class="btn btn-default" id="messageSendButton">
|
|
|
|
<i class="fa fa-comment"></i>
|
|
|
|
</button>
|
2016-10-17 12:00:18 +02:00
|
|
|
<button os-perms="core.can_manage_chat" type="button"
|
|
|
|
class="btn btn-default btn-danger" id="clearchatHistory"
|
|
|
|
ng-bootbox-confirm="{{ 'Are you sure to delete the chat history?' | translate }}"
|
|
|
|
ng-bootbox-confirm-action="clearChatHistory()">
|
|
|
|
<i class="fa fa-trash"></i>
|
|
|
|
</button>
|
2015-11-16 21:10:33 +01:00
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<!-- user settings / logout button -->
|
2015-12-01 12:06:15 +01:00
|
|
|
<span uib-dropdown>
|
2016-09-18 00:45:00 +02:00
|
|
|
<a href class="headerlink" uib-dropdown-toggle id="user-settings-dropdown">
|
2015-03-09 15:40:54 +01:00
|
|
|
<i class="fa fa-user"></i>
|
2016-03-06 00:58:45 +01:00
|
|
|
<span class="hide-sm">{{ operator.user.get_short_name() }}</span>
|
2015-12-01 12:06:15 +01:00
|
|
|
</a>
|
2016-09-18 00:45:00 +02:00
|
|
|
<ul class="dropdown-menu pull-right" uib-dropdown-menu aria-labelledby="user-settings-dropdown">
|
2015-09-04 18:26:48 +02:00
|
|
|
<li>
|
2017-02-10 14:51:44 +01:00
|
|
|
<!--<a ui-sref="users.user.detail.profile({ id: operator.user.id })">-->
|
|
|
|
<a href="" ng-click="editProfile()">
|
2015-09-04 18:26:48 +02:00
|
|
|
<i class="fa fa-cog"></i>
|
|
|
|
<translate>Edit profile</translate>
|
|
|
|
</a>
|
|
|
|
<li>
|
2017-02-10 14:51:44 +01:00
|
|
|
<a href="" ng-click="changePassword()">
|
2015-09-04 18:26:48 +02:00
|
|
|
<i class="fa fa-key"></i>
|
|
|
|
<translate>Change password</translate>
|
|
|
|
</a>
|
2015-03-09 15:40:54 +01:00
|
|
|
<li class="divider">
|
2015-09-04 18:26:48 +02:00
|
|
|
<li>
|
|
|
|
<a ng-click="logout()" href="">
|
|
|
|
<i class="fa fa-sign-out"></i>
|
|
|
|
<translate>Logout</translate>
|
|
|
|
</a>
|
2015-03-09 15:40:54 +01:00
|
|
|
</ul>
|
2015-12-01 12:06:15 +01:00
|
|
|
</span>
|
2015-02-08 22:37:55 +01:00
|
|
|
</div>
|
2015-11-21 20:14:19 +01:00
|
|
|
<!-- Login button -->
|
|
|
|
<div ng-if="!operator.isAuthenticated()">
|
2015-12-11 21:18:45 +01:00
|
|
|
<a href ui-sref="login({guest_enabled: true})" class="headerlink" uib-dropdown-toggle>
|
2015-02-08 22:37:55 +01:00
|
|
|
<i class="fa fa-sign-in"></i>
|
|
|
|
<translate>Login</translate>
|
2015-12-01 12:06:15 +01:00
|
|
|
</a>
|
2015-01-30 11:58:36 +01:00
|
|
|
</div>
|
2015-02-08 22:37:55 +01:00
|
|
|
</div>
|
2015-03-09 15:40:54 +01:00
|
|
|
|
2015-02-08 22:37:55 +01:00
|
|
|
<!-- language switcher -->
|
2016-09-18 00:45:00 +02:00
|
|
|
<span uib-dropdown> |
|
|
|
|
<a href="" class="headerlink" uib-dropdown-toggle id="language-dropdown">
|
2015-02-08 22:37:55 +01:00
|
|
|
<i class="fa fa-flag"></i>
|
2016-03-06 00:58:45 +01:00
|
|
|
<span class="hide-sm">{{ selectedLanguage[0].name | translate }}</span>
|
2015-12-01 12:06:15 +01:00
|
|
|
</a>
|
2016-09-18 00:45:00 +02:00
|
|
|
<ul class="dropdown-menu pull-right" uib-dropdown-menu aria-labelledby="language-dropdown">
|
2015-12-01 12:06:15 +01:00
|
|
|
<li ng-repeat="language in languages">
|
|
|
|
<a href="" ng-click="switchLanguage(language.code)">
|
|
|
|
<i ng-if="language.selected" class="fa fa-check"></i>
|
|
|
|
{{ language.name | translate }}
|
2015-09-05 17:15:37 +02:00
|
|
|
</a>
|
2015-12-01 12:06:15 +01:00
|
|
|
</span>
|
2015-11-29 22:25:01 +01:00
|
|
|
|
2015-02-08 22:37:55 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
2015-11-29 22:25:01 +01:00
|
|
|
</div><!--end header-->
|
2015-01-30 11:58:36 +01:00
|
|
|
|
2015-11-29 22:25:01 +01:00
|
|
|
<!-- Navbar -->
|
2016-03-06 00:58:45 +01:00
|
|
|
<div id="nav" ng-controller="MainMenuCtrl">
|
|
|
|
<div class="containerOS" >
|
|
|
|
<!-- mobile (vertical) main menu -->
|
|
|
|
<button class="navbar-toggle" ng-click="isMenuOpen = !isMenuOpen">
|
|
|
|
<i class="fa fa-bars"></i>
|
|
|
|
</button>
|
2016-04-03 11:53:40 +02:00
|
|
|
<div class="navbar navbar-collapse" ng-class="{collapse: !isMenuOpen}">
|
2015-11-29 22:25:01 +01:00
|
|
|
<!-- Main menu -->
|
2016-03-06 00:58:45 +01:00
|
|
|
<ul>
|
|
|
|
<li ng-repeat="element in elements" ui-sref-active="active" ng-click="closeMenu()">
|
2015-09-05 17:15:37 +02:00
|
|
|
<a ui-sref="{{ element.ui_sref }}">
|
2015-11-29 22:25:01 +01:00
|
|
|
<i class="fa fa-{{ element.img_class }}"></i>
|
2015-11-30 23:52:42 +01:00
|
|
|
{{ element.title | translate }}
|
2015-03-09 15:40:54 +01:00
|
|
|
</a>
|
2015-02-08 22:37:55 +01:00
|
|
|
</ul>
|
2016-03-06 00:58:45 +01:00
|
|
|
<!-- Search bar -->
|
|
|
|
<div class="searchbar pull-right" ng-controller="SearchBarCtrl">
|
2016-08-05 17:10:18 +02:00
|
|
|
<form ng-submit="search(); closeMenu()">
|
2016-03-06 00:58:45 +01:00
|
|
|
<div class="input-group">
|
2016-08-05 17:10:18 +02:00
|
|
|
<input ng-model="querybar" class="form-control" type="text" placeholder="{{ 'Search' | translate}}">
|
2016-03-06 00:58:45 +01:00
|
|
|
<span class="input-group-btn">
|
|
|
|
<button type="submit" class="btn btn-default">
|
|
|
|
<i class="fa fa-search"></i>
|
|
|
|
</button>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</div>
|
2016-01-27 00:16:30 +01:00
|
|
|
</div>
|
|
|
|
|
2015-11-29 22:25:01 +01:00
|
|
|
</div>
|
|
|
|
</div><!--end nav-->
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Content -->
|
|
|
|
<div id="content" ng-controller="ProjectorSidebarCtrl">
|
|
|
|
<div class="containerOS">
|
2017-03-04 22:56:43 +01:00
|
|
|
|
|
|
|
<!-- col2 -->
|
2017-02-20 19:46:44 +01:00
|
|
|
<div id="sidebar" class="col2" os-perms="core.can_see_projector" ng-class="{
|
|
|
|
'sidebar-max': isProjectorSidebar && operator.hasPerms('core.can_see_projector'),
|
|
|
|
'sidebar-min': !isProjectorSidebar && operator.hasPerms('core.can_see_projector'),
|
|
|
|
'sidebar-none': !operator.hasPerms('core.can_see_projector') }"
|
2016-09-15 16:20:02 +02:00
|
|
|
ng-init="initSidebar()">
|
2015-11-29 22:25:01 +01:00
|
|
|
<!-- sidebar maximized -->
|
|
|
|
<div class="projector_full" ng-if="isProjectorSidebar">
|
|
|
|
<div class="title" ng-click="showProjectorSidebar(false)">
|
|
|
|
<div class="name">
|
2016-01-13 12:42:40 +01:00
|
|
|
<i class="fa fa-video-camera"></i>
|
2015-11-29 22:25:01 +01:00
|
|
|
<translate>Projector</translate>
|
|
|
|
</div>
|
|
|
|
<div class="icon">
|
2016-01-13 12:42:40 +01:00
|
|
|
<i class="fa fa-angle-right"></i>
|
2015-11-29 22:25:01 +01:00
|
|
|
</div>
|
2015-02-08 22:37:55 +01:00
|
|
|
</div>
|
2015-11-21 20:14:19 +01:00
|
|
|
<div ng-include src="'static/templates/core/projector-controls.html'"></div>
|
|
|
|
</div>
|
2015-11-29 22:25:01 +01:00
|
|
|
<!-- sidebar minimized -->
|
|
|
|
<div class="projector_min" ng-if="!isProjectorSidebar">
|
|
|
|
<div class="icon">
|
|
|
|
<a href="" ng-click="showProjectorSidebar(true)">
|
|
|
|
<i class="fa fa-video-camera"></i>
|
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
2017-03-04 22:56:43 +01:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<!-- col2 sidebar-xs (for small devices)-->
|
|
|
|
<div id="sidebar-xs" class="col2" os-perms="core.can_see_projector" ng-class="{
|
|
|
|
'sidebar-max': isProjectorSidebar && operator.hasPerms('core.can_see_projector'),
|
|
|
|
'sidebar-min': !isProjectorSidebar && operator.hasPerms('core.can_see_projector'),
|
|
|
|
'sidebar-none': !operator.hasPerms('core.can_see_projector') }">
|
|
|
|
<!-- sidebar maximized -->
|
|
|
|
<div class="projector_full" ng-if="isProjectorSidebar">
|
|
|
|
<div class="title" ng-click="showProjectorSidebar(false)">
|
|
|
|
<div class="name">
|
|
|
|
<i class="fa fa-video-camera"></i>
|
|
|
|
<translate>Projector</translate>
|
|
|
|
</div>
|
|
|
|
<div class="icon">
|
|
|
|
<i class="fa fa-angle-up"></i>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div ng-include src="'static/templates/core/projector-controls.html'"></div>
|
|
|
|
</div>
|
|
|
|
<!-- sidebar minimized -->
|
|
|
|
<div class="projector_full" ng-if="!isProjectorSidebar">
|
|
|
|
<div class="title" ng-click="showProjectorSidebar(true)">
|
|
|
|
<div class="name">
|
|
|
|
<i class="fa fa-video-camera"></i>
|
|
|
|
<translate>Projector</translate>
|
|
|
|
</div>
|
|
|
|
<div class="icon">
|
|
|
|
<i class="fa fa-angle-down"></i>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<!-- col1 -->
|
|
|
|
<div class="col1" ng-class="{
|
|
|
|
'sidebar-max': isProjectorSidebar && operator.hasPerms('core.can_see_projector'),
|
|
|
|
'sidebar-min': !isProjectorSidebar && operator.hasPerms('core.can_see_projector'),
|
|
|
|
'sidebar-none': !operator.hasPerms('core.can_see_projector') }">
|
|
|
|
<!-- dynamic views -->
|
|
|
|
<div ui-view ng-if="openslidesBootstrapDone && baseViewPermissionsGranted"></div>
|
|
|
|
<!-- footer -->
|
|
|
|
<div id="footer">
|
|
|
|
© Copyright by <a href="http://www.openslides.org" target="_blank">OpenSlides</a> |
|
|
|
|
<a ui-sref="legalnotice" translate>Legal notice</a>
|
|
|
|
</div><!--end footer-->
|
|
|
|
</div>
|
2015-11-29 22:25:01 +01:00
|
|
|
|
2015-12-10 00:02:16 +01:00
|
|
|
</div><!--end content-container-->
|
|
|
|
</div><!--end content-->
|
2015-11-29 22:25:01 +01:00
|
|
|
|
2017-02-24 15:15:18 +01:00
|
|
|
<messaging></messaging>
|
2017-01-27 13:38:49 +01:00
|
|
|
|
2015-11-29 22:25:01 +01:00
|
|
|
</div><!--end wrapper-->
|
2015-09-21 22:02:23 +02:00
|
|
|
|
2016-09-09 00:50:27 +02:00
|
|
|
<script src="/webclient/site/"></script>
|