Template improvements

- Show item duration and done for normal users correctly.
- Fixed CSS class for countdown warning time.
- Improved projector manage button layout.
- Updated fontawsome icons to 4.7.
- Fixed iframe width/height to show border correctly.
- Improved 'close list of speakers' button.
- Improved 'clear all filter' icons.
- Fixed election pdf if candidate was deleted.
- Moved ban icon for internal icons.
- Improved edit projector form. Show simple scaling steps instead of
  width/height resolution.
- Consolidated both agenda item filters.
- Used better sort icon.
- Installed colordialog plugin for ckeditor to select more colors.
- Several css improvements.
This commit is contained in:
Emanuel Schütze 2018-04-22 12:14:28 +02:00
parent f1b87af623
commit ef2a22fefe
27 changed files with 199 additions and 172 deletions

View File

@ -26,7 +26,7 @@
"bootstrap-ui-datetime-picker": "~2.4.0", "bootstrap-ui-datetime-picker": "~2.4.0",
"ckeditor": "~4.7.2", "ckeditor": "~4.7.2",
"docxtemplater": "~2.1.5", "docxtemplater": "~2.1.5",
"font-awesome-bower": "~4.5.0", "font-awesome-bower": "~4.7.0",
"jquery.cookie": "~1.4.1", "jquery.cookie": "~1.4.1",
"js-data": "~2.9.0", "js-data": "~2.9.0",
"js-data-angular": "~3.2.1", "js-data-angular": "~3.2.1",

View File

@ -181,6 +181,7 @@ gulp.task('ckeditor-plugins', function () {
[ [
path.join('bower_components', 'ckeditor', 'plugins', 'clipboard', '**', '*'), path.join('bower_components', 'ckeditor', 'plugins', 'clipboard', '**', '*'),
path.join('bower_components', 'ckeditor', 'plugins', 'colorbutton', '**', '*'), path.join('bower_components', 'ckeditor', 'plugins', 'colorbutton', '**', '*'),
path.join('bower_components', 'ckeditor', 'plugins', 'colordialog', '**', '*'),
path.join('bower_components', 'ckeditor', 'plugins', 'dialog', '**', '*'), path.join('bower_components', 'ckeditor', 'plugins', 'dialog', '**', '*'),
path.join('bower_components', 'ckeditor', 'plugins', 'find', '**', '*'), path.join('bower_components', 'ckeditor', 'plugins', 'find', '**', '*'),
path.join('bower_components', 'ckeditor', 'plugins', 'image', '**', '*'), path.join('bower_components', 'ckeditor', 'plugins', 'image', '**', '*'),

View File

@ -19,7 +19,7 @@
<!-- current list of speakers --> <!-- current list of speakers -->
<a ui-sref="agenda.current-list-of-speakers" os-perms="users.can_see_name" <a ui-sref="agenda.current-list-of-speakers" os-perms="users.can_see_name"
class="btn btn-default btn-sm"> class="btn btn-default btn-sm">
<i class="fa fa-microphone"></i> <i class="fa fa-microphone fa-lg"></i>
<translate>Current list of speakers</translate> <translate>Current list of speakers</translate>
</a> </a>
<!-- project agenda button --> <!-- project agenda button -->
@ -199,33 +199,47 @@
<span class="sort-spacer pointer" ng-click="filter.reset(isSelectMode)" <span class="sort-spacer pointer" ng-click="filter.reset(isSelectMode)"
ng-if="filter.areFiltersSet()" ng-disabled="isSelectMode" ng-if="filter.areFiltersSet()" ng-disabled="isSelectMode"
ng-class="{'disabled': isSelectMode}"> ng-class="{'disabled': isSelectMode}">
<i class="fa fa-times-circle"></i> <i class="fa fa-window-close"></i>
<translate>Filter</translate> <translate>Filter</translate>
</span> </span>
<!-- boolean Filters --> <!-- boolean Filters (combined!) -->
<span ng-repeat="(name, booleanFilter) in filter.booleanFilters" <span uib-dropdown>
ng-if="!booleanFilter.permission || operator.hasPerms(booleanFilter.permission)" uib-dropdown> <span class="sort-spacer pointer" id="dropdownItems" uib-dropdown-toggle
<span class="pointer" id="dropdown{{ name }}" uib-dropdown-toggle ng-class="{'bold': (filter.booleanFilters.closed.value !== undefined) ||
ng-class="{'bold': booleanFilter.value !== undefined, 'disabled': isSelectMode}" (filter.booleanFilters.is_hidden.value !== undefined),
ng-disabled="isSelectMode"> 'disabled': isSelectMode}"
{{ booleanFilter.displayName | translate }} ng-disabled="isSelectMode">
<span class="caret"></span> <translate>Items</translate>
</span> <span class="caret"></span>
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdown{{ name }}"> </span>
<li> <ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownItems">
<a href ng-click="booleanFilter.value = (booleanFilter.value ? undefined : true); filter.save();"> <li>
<i class="fa" ng-class="{'fa-check': booleanFilter.value === true}"></i> <a href ng-click="filter.booleanFilters.closed.value = (filter.booleanFilters.closed.value ? undefined : true); filter.save();">
{{ booleanFilter.choiceYes | translate }} <i class="fa" ng-class="{'fa-check': filter.booleanFilters.closed.value === true}"></i>
</a> {{ filter.booleanFilters.closed.choiceYes | translate }}
</li> </a>
<li> </li>
<a href ng-click="booleanFilter.value = (booleanFilter.value === false) ? undefined : false; filter.save();"> <li>
<i class="fa" ng-class="{'fa-check': booleanFilter.value === false}"></i> <a href ng-click="filter.booleanFilters.closed.value = (filter.booleanFilters.closed.value === false) ? undefined : false; filter.save();">
{{ booleanFilter.choiceNo | translate }} <i class="fa" ng-class="{'fa-check': filter.booleanFilters.closed.value === false}"></i>
</a> {{ filter.booleanFilters.closed.choiceNo | translate }}
</li> </a>
</ul> </li>
</span> <li class="divider"></li>
<li>
<a href ng-click="filter.booleanFilters.is_hidden.value = (filter.booleanFilters.is_hidden.value ? undefined : true); filter.save();">
<i class="fa" ng-class="{'fa-check': filter.booleanFilters.is_hidden.value === true}"></i>
{{ filter.booleanFilters.is_hidden.choiceYes | translate }}
</a>
</li>
<li>
<a href ng-click="filter.booleanFilters.is_hidden.value = (filter.booleanFilters.is_hidden.value === false) ? undefined : false; filter.save();">
<i class="fa" ng-class="{'fa-check': filter.booleanFilters.is_hidden.value === false}"></i>
{{ filter.booleanFilters.is_hidden.choiceNo | translate }}
</a>
</li>
</ul>
</span>
<!-- search field --> <!-- search field -->
<span class="form-group"> <span class="form-group">
<span class="input-group"> <span class="input-group">
@ -311,10 +325,6 @@
<!-- main content column --> <!-- main content column -->
<div class="col-xs-6 content" <div class="col-xs-6 content"
style="padding-left: calc({{ items.length === itemsSearched.length ? item.parentCount : 0 }}*25px)"> style="padding-left: calc({{ items.length === itemsSearched.length ? item.parentCount : 0 }}*25px)">
<div class="icon-column">
<i class="fa fa-ban" ng-style="{'visibility': item.is_hidden ? 'visible' : 'hidden'}"
title="{{ 'Internal item' | translate }}"></i>
</div>
<div class="caret-spacer" ng-if="items.length === itemsSearched.length"> <div class="caret-spacer" ng-if="items.length === itemsSearched.length">
<i class="fa pointer" <i class="fa pointer"
ng-style="{visibility: hasChildren(item) ? 'visible' : 'hidden'}" ng-style="{visibility: hasChildren(item) ? 'visible' : 'hidden'}"
@ -364,9 +374,12 @@
</span> </span>
</div> </div>
<div os-perms="!agenda.can_manage"> <div os-perms="!agenda.can_manage">
<span ng-if="item.duration"> <div os-perms="agenda.can_see_hidden_items">
<i class="fa fa-clock-o"></i> {{ item.duration | osMinutesToTime }} <span ng-if="item.duration">
</span> <i class="fa fa-clock-o"></i> {{ item.duration | osMinutesToTime }}
<translate translate-comment="'h' means time in hours">h</translate>
</span>
</div>
</div> </div>
</div> </div>
<div ng-style="{'visibility': (item.comment || item.hover) ? 'visible' : 'hidden'}"> <div ng-style="{'visibility': (item.comment || item.hover) ? 'visible' : 'hidden'}">
@ -390,20 +403,26 @@
<template-hook hook-name="agendaListAdditionalContentColumn"></template-hook> <template-hook hook-name="agendaListAdditionalContentColumn"></template-hook>
</small> </small>
</div> </div>
<div style="width: 40%;" class="pull-right"> <div style="width: 40%; overflow: hidden;" class="pull-right">
<div os-perms="agenda.can_manage"> <div os-perms="agenda.can_manage">
<div class="pointer nobr" ng-click="item.type = (item.type == 1) ? 2 : 1; save(item);" ng-show="item.hover || item.is_hidden"> <div class="pointer nobr" ng-click="item.type = (item.type == 1) ? 2 : 1; save(item);" ng-show="item.hover || item.is_hidden">
<i class="fa" ng-class="item.is_hidden ? 'fa-check-square-o' : 'fa-square-o'"></i> <i class="fa" ng-class="item.is_hidden ? 'fa-check-square-o' : 'fa-square-o'"></i>
<span class="spacer-left" translate>Internal item</span> <span class="spacer-left" translate>Internal</span>
</div> </div>
<div class="pointer nobr" ng-click="item.closed = !item.closed; save(item);" ng-show="item.hover || item.closed"> <div class="pointer nobr" ng-click="item.closed = !item.closed; save(item);" ng-show="item.hover || item.closed">
<i class="fa" ng-class="item.closed ? 'fa-check-square-o' : 'fa-square-o'"></i> <i class="fa" ng-class="item.closed ? 'fa-check-square-o' : 'fa-square-o'"></i>
<span class="spacer-left" translate>Done</span> <span class="spacer-left" translate>Done</span>
</div> </div>
</div> </div>
<div os-perms="!agenda.can_manage" ng-if="item.closed"> <div os-perms="!agenda.can_manage" >
<i class="fa fa-check-square-o"></i> <div ng-show="item.is_hidden">
<span class="spacer-left" translate>Done</span> <i class="fa fa-ban"></i>
<span class="spacer-left" translate>Internal</span>
</div>
<div ng-show="item.closed">
<i class="fa fa-check-square-o"></i>
<span class="spacer-left" translate>Done</span>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,6 +1,16 @@
<div ng-if="item" class="details" ng-controller="ListOfSpeakersManagementCtrl"> <div ng-if="item" class="details" ng-controller="ListOfSpeakersManagementCtrl">
<div class="speakers-toolbar"> <div class="speakers-toolbar">
<div class="pull-right"> <div class="pull-right">
<span os-perms="agenda.can_manage">
<button ng-if="item.speaker_list_closed" ng-click="closeList(false)"
class="btn btn-sm btn-default">
<translate>Open list of speakers</translate>
</button>
<button ng-if="!item.speaker_list_closed" ng-click="closeList(true)"
class="btn btn-sm btn-default">
<translate>Close list of speakers</translate>
</button>
</span>
<span os-perms="agenda.can_manage_list_of_speakers"> <span os-perms="agenda.can_manage_list_of_speakers">
<button ng-if="isAllowed('removeAll')" class="btn btn-sm btn-danger" <button ng-if="isAllowed('removeAll')" class="btn btn-sm btn-danger"
ng-bootbox-confirm="{{ 'Are you sure you want to remove all speakers from this list?'| translate }}" ng-bootbox-confirm="{{ 'Are you sure you want to remove all speakers from this list?'| translate }}"
@ -9,18 +19,6 @@
<translate>Remove all speakers</translate> <translate>Remove all speakers</translate>
</button> </button>
</span> </span>
<span os-perms="agenda.can_manage">
<button ng-if="item.speaker_list_closed" ng-click="closeList(false)"
class="btn btn-sm btn-default">
<i class="fa fa-toggle-off"></i>
<translate>Closed</translate>
</button>
<button ng-if="!item.speaker_list_closed" ng-click="closeList(true)"
class="btn btn-sm btn-default">
<i class="fa fa-toggle-on"></i>
<translate>Open</translate>
</button>
</span>
</div> </div>
</div> </div>

View File

@ -115,17 +115,16 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
//creates the voting string for the result table and differentiates between special values //creates the voting string for the result table and differentiates between special values
var parseVoteValue = function(voteObject, printLabel) { var parseVoteValue = function(voteObject, printLabel) {
var voteVal = ""; var voteVal = "";
if (voteObject) {
if (printLabel) {
voteVal += voteObject.label + ": ";
}
voteVal += voteObject.value;
if (printLabel) { if (voteObject.percentStr) {
voteVal += voteObject.label + ": "; voteVal += " " + voteObject.percentStr;
}
} }
voteVal += voteObject.value;
if (voteObject.percentStr) {
voteVal += " " + voteObject.percentStr;
}
voteVal += "\n"; voteVal += "\n";
return voteVal; return voteVal;
}; };
@ -373,7 +372,10 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
}); });
} else { } else {
angular.forEach(candidates, function(option) { angular.forEach(candidates, function(option) {
var candidate = option.candidate.get_full_name(); var candidate;
if (option.candidate) {
candidate = option.candidate.get_full_name();
}
candidateBallotList.push(createYNBallotEntry(candidate)); candidateBallotList.push(createYNBallotEntry(candidate));
}); });
} }

View File

@ -94,7 +94,7 @@
<span class="sort-spacer pointer" ng-click="filter.reset(isSelectMode)" <span class="sort-spacer pointer" ng-click="filter.reset(isSelectMode)"
ng-if="filter.areFiltersSet()" ng-disabled="isSelectMode" ng-if="filter.areFiltersSet()" ng-disabled="isSelectMode"
ng-class="{'disabled': isSelectMode}"> ng-class="{'disabled': isSelectMode}">
<i class="fa fa-times-circle"></i> <i class="fa fa-window-close"></i>
<translate>Filter</translate> <translate>Filter</translate>
</span> </span>
<!-- Tag filter --> <!-- Tag filter -->
@ -152,11 +152,13 @@
<!-- all sortOptions --> <!-- all sortOptions -->
<li ng-repeat="option in sortOptions"> <li ng-repeat="option in sortOptions">
<a ng-click="sort.toggle(option.name)"> <a ng-click="sort.toggle(option.name)">
{{ option.display_name | translate }} <span ng-style="{'font-weight': sort.column === option.name ? 'bold' : 'normal'}">
<span class="spacer-right pull-right"></span> {{ option.display_name | translate }}
</span>
<span class="spacer-right pull-right"></span>
<i class="pull-right fa" <i class="pull-right fa"
ng-style="{'visibility': sort.column === option.name ? 'visible' : 'hidden'}" ng-style="{'visibility': sort.column === option.name ? 'visible' : 'hidden'}"
ng-class="sort.reverse ? 'fa-sort-desc' : 'fa-sort-asc'"> ng-class="sort.reverse ? 'fa-sort-amount-desc' : 'fa-sort-amount-asc'">
</i> </i>
</a> </a>
</li> </li>

View File

@ -131,6 +131,10 @@
display: auto; display: auto;
} }
.inline {
display: inline;
}
.login-logo { .login-logo {
width: 250px; width: 250px;
} }
@ -243,3 +247,9 @@ tr.selected td {
background-color: #fcf8e3; background-color: #fcf8e3;
border-color: #faebcc; border-color: #faebcc;
} }
.close {
opacity: 0.3 !important;
}
.close:hover {
opacity: 0.6 !important;
}

View File

@ -24,9 +24,9 @@
font-weight: normal; font-weight: normal;
font-size: 5vw; font-size: 5vw;
} }
#countdown.warning { .warning_time {
color: #ed940d; color: #ed940d;
} }
#countdown.negative { .negative {
color: #CC0000; color: #CC0000;
} }

View File

@ -5,7 +5,7 @@
right: 30px; right: 30px;
padding: 10px 30px; padding: 10px 30px;
background: white; background: white;
opacity: 0.6; opacity: 0.8;
transition: opacity 250ms ease-out; transition: opacity 250ms ease-out;
z-index: 100; z-index: 100;

View File

@ -20,18 +20,8 @@
} }
} }
.dropdown { .dropdown button {
width: 65%; width: 100%;
padding-right: 5px;
float: left;
button {
width: 100%;
}
}
.btn-danger {
width: 35%;
} }
.resolution { .resolution {

View File

@ -14,6 +14,7 @@
& > button { & > button {
width: 100%; width: 100%;
overflow: hidden;
} }
} }
} }

View File

@ -191,14 +191,6 @@ hr {
margin-top: 20px; margin-top: 20px;
padding-right: 6px; padding-right: 6px;
} }
&.warning {
color: #ed940d;
}
&.negative {
color: #CC0000;
}
} }
.message_background { .message_background {

View File

@ -561,7 +561,7 @@ strong, b, th {
} }
.iframewrapper { .iframewrapper {
width: 256px; width: 258px;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
border: 1px solid #D5D5D5; border: 1px solid #D5D5D5;
@ -597,3 +597,13 @@ strong, b, th {
font-size: 16px; font-size: 16px;
color: #000; color: #000;
} }
/** Config **/
#config .panel-body {
padding-top: 0;
}
#config.details h3 {
font-size: 22px;
padding-top: 30px;
margin-top: 0;
}

View File

@ -4,6 +4,7 @@
@import "variables"; @import "variables";
@import "helper"; @import "helper";
@import "ui-override"; @import "ui-override";
@import "core/countdown";
/* Apps */ /* Apps */
@import "core/projector"; @import "core/projector";

View File

@ -1070,7 +1070,7 @@ angular.module('OpenSlidesApp.core', [
* - YOffset: move the editor toolbar 40px up * - YOffset: move the editor toolbar 40px up
*/ */
getOptions: function () { getOptions: function () {
var extraPluginsString = 'colorbutton,find,sourcedialog,justify,showblocks'; var extraPluginsString = 'colorbutton,colordialog,find,sourcedialog,justify,showblocks';
var registeredPluginsString = extraPlugins.join(','); var registeredPluginsString = extraPlugins.join(',');
if (registeredPluginsString) { if (registeredPluginsString) {
extraPluginsString += ',' + registeredPluginsString; extraPluginsString += ',' + registeredPluginsString;

View File

@ -1626,6 +1626,7 @@ angular.module('OpenSlidesApp.core.site', [
id: projector.id, id: projector.id,
floor: 800, floor: 800,
ceil: 3840, ceil: 3840,
step: 10,
translate: function (value) { translate: function (value) {
return value + 'px'; return value + 'px';
}, },

View File

@ -2,7 +2,7 @@
<div> <div>
<div id="countdown" ng-class="{ <div id="countdown" ng-class="{
'negative': countdown.seconds <= 0, 'negative': countdown.seconds <= 0,
'warning': countdown.seconds <= config('agenda_countdown_warning_time') && countdown.seconds > 0 }"> 'warning_time': countdown.seconds <= config('agenda_countdown_warning_time') && countdown.seconds > 0 }">
<div class="row"> <div class="row">
<div class="col-d-12">{{ countdown.seconds | osSecondsToTime}}</div> <div class="col-d-12">{{ countdown.seconds | osSecondsToTime}}</div>
</div> </div>

View File

@ -45,14 +45,31 @@
{{ projector.id }}: {{ projector.id }}:
<strong>{{ projector.name | translate }}</strong> <strong>{{ projector.name | translate }}</strong>
</a> </a>
<a href="" class="pull-right" ng-click="toggleEditMenu(projector.id)"><i class="fa" ng-class="edit[projector.id] ? 'fa-times' : 'fa-pencil'"></i></a> <span class="pull-right">
<a href="" ng-click="toggleEditMenu(projector.id)"><i class="fa" ng-class="edit[projector.id] ? 'fa-times' : 'fa-pencil'"></i></a>
<a href="" class="text-danger" style="padding-left: 5px;"
ng-hide="projector.id==1 || edit[projector.id]"
ng-bootbox-confirm="{{ 'Are you sure you want to delete this entry?' | translate }}<br>
<b>{{ projector.name | translate }}</b>"
ng-bootbox-confirm-action="deleteProjector(projector)">
<i class="fa fa-trash"></i>
</a>
</span>
</div> </div>
<div ng-show="edit[projector.id]" style="margin-bottom: -20px;"> <div ng-show="edit[projector.id]" style="margin-bottom: -20px;">
<div> <div class="form-group">
<label for="name{{ projector.id }}" class="control-label"><translate>Name</translate>:</label>
<input type="text" class="form-control" id="name{{ projector.id }}"
ng-model="projector.name" ng-change="editName(projector)"
ng-model-options="{debounce: 2000}"></input>
</div>
<div class="form-group">
<label for="menuProjector{{ projector.id }}" class="control-label"><translate>Projection defaults</translate>:</label>
<div class="dropdown" uib-dropdown> <div class="dropdown" uib-dropdown>
<button class="btn btn-default btn-sm" id="menuProjector{{ projector.id }}" uib-dropdown-toggle> <button class="btn btn-default btn-sm" id="menuProjector{{ projector.id }}" uib-dropdown-toggle>
<translate>Projection defaults</translate> --- <translate>Please select</translate> ---
<span class="caret"></span> <span class="caret"></span>
</button> </button>
<ul class="dropdown-menu" uib-dropdown-menu aria-labelledby="menuProjector{{ projector.id }}"> <ul class="dropdown-menu" uib-dropdown-menu aria-labelledby="menuProjector{{ projector.id }}">
@ -64,49 +81,34 @@
</li> </li>
</ul> </ul>
</div> </div>
<button type="button" class="btn btn-danger btn-sm"
ng-hide="projector.id==1"
ng-bootbox-confirm="{{ 'Are you sure you want to delete this entry?' | translate }}<br>
<b>{{ projector.name | translate }}</b>"
ng-bootbox-confirm-action="deleteProjector(projector)">
<i class="fa fa-trash"></i>
<translate>Delete</translate>
</button>
<div ng-show="projector.id==1" style="height: 30px"><!-- Placeholder --></div>
</div> </div>
<div>
<label for="name{{ projector.id }}" class="control-label"><translate>Name</translate>:</label> <div class="form-group">
<input type="text" class="form-control" id="name{{ projector.id }}" <label for="aspectRatio{{ projector.id }}" class="control-label"><translate>Aspect ratio</translate>:</label>
ng-model="projector.name" ng-change="editName(projector)" <div id="aspectRatio{{ projector.id }}">
ng-model-options="{debounce: 2000}"></input> <div class="dropdown" uib-dropdown>
<button class="btn btn-default btn-sm" uib-dropdown-toggle>
{{ resolutions[projector.id].aspectRatio }}
<span class="caret"></span>
</button>
<ul class="dropdown-menu" uib-dropdown-menu aria-labelledby="aspectRatio{{ projector.id }}">
<li ng-repeat="(aspectRatio, value) in aspectRatios track by $index">
<a href ng-click="setAspectRatio(projector, aspectRatio); saveResolution(projector);">
<i class="fa fa-check" ng-if="aspectRatio === resolutions[projector.id].aspectRatio"></i>
{{ aspectRatio }}
</a>
</li>
</ul>
</div>
</div>
</div> </div>
<div>
<label for="resolution{{ projector.id }}" class="control-label"><translate>Resolution</translate>:</label> <div class="form-group">
<label for="resolution{{ projector.id }}" class="control-label"><translate>Scaling</translate>:</label>
<div id="resolution{{ projector.id }}"> <div id="resolution{{ projector.id }}">
<div>
<span>
{{ resolutions[projector.id].width }}&times;{{ resolutions[projector.id].height }}
</span>
<div class="dropdown" uib-dropdown>
<button class="btn btn-default btn-sm" id="aspectRatio{{ projector.id }}" uib-dropdown-toggle>
<translate>Aspect ratio</translate>: {{ resolutions[projector.id].aspectRatio }}
<span class="caret"></span>
</button>
<ul class="dropdown-menu" uib-dropdown-menu aria-labelledby="aspectRatio{{ projector.id }}">
<li ng-repeat="(aspectRatio, value) in aspectRatios track by $index">
<a href ng-click="setAspectRatio(projector, aspectRatio); saveResolution(projector);">
<i class="fa fa-check" ng-if="aspectRatio === resolutions[projector.id].aspectRatio"></i>
{{ aspectRatio }}
</a>
</li>
</ul>
</div>
</div>
<div>
<rzslider class="os-slider" <rzslider class="os-slider"
rz-slider-model="sliders[projector.id].value" rz-slider-model="sliders[projector.id].value"
rz-slider-options="sliders[projector.id].options"></rzslider> rz-slider-options="sliders[projector.id].options"></rzslider>
</div>
</div> </div>
<p class="help-block"> <p class="help-block">
{{ resolutions[projector.id].error }} {{ resolutions[projector.id].error }}
@ -127,7 +129,7 @@
} }
#iframewrapper_{{ projector.id }} { #iframewrapper_{{ projector.id }} {
height: {{ projector.iframeHeight }}px; height: {{ projector.iframeHeight + 2 }}px;
} }
#iframeoverlay_{{ projector.id }} { #iframeoverlay_{{ projector.id }} {
@ -195,15 +197,15 @@
<!-- Default, BC, Blank --> <!-- Default, BC, Blank -->
<div class="middle"> <div class="middle">
<div class="btn-group"> <div class="btn-group">
<button class="btn btn-sm" ng-class="broadcast == projector.id ? 'btn-primary' : 'btn-default'" <button class="btn btn-sm" ng-class="broadcast == projector.id ? 'btn-danger' : 'btn-default'"
ng-click="projector.toggleBroadcast(projector)" ng-click="projector.toggleBroadcast(projector)"
ng-disabled="broadcast > 0 && broadcast != projector.id" ng-disabled="broadcast > 0 && broadcast != projector.id"
uib-tooltip="{{ 'Broadcast the content of this projector to all other projectors.' | translate }}" uib-tooltip="{{ 'Broadcast the content of this projector to all other projectors.' | translate }}"
tooltip-placement="bottom"> tooltip-placement="bottom">
<i class="fa" ng-class="broadcast == projector.id ? 'fa-star' : 'fa-star-o'"></i> <i class="fa fa-bullhorn"></i>
<translate>Broadcast</translate> <translate>Broadcast</translate>
</button> </button>
<button class="btn btn-sm" ng-class="projector.blank ? 'btn-primary' : 'btn-default'" <button class="btn btn-sm" ng-class="projector.blank ? 'btn-danger' : 'btn-default'"
ng-click="projector.toggleBlank(projector)" ng-click="projector.toggleBlank(projector)"
ng-disabled="broadcast > 0 && broadcast != projector.id"> ng-disabled="broadcast > 0 && broadcast != projector.id">
<i class="fa" ng-class="projector.blank ? 'fa-square' : 'fa-square-o'"></i> <i class="fa" ng-class="projector.blank ? 'fa-square' : 'fa-square-o'"></i>

View File

@ -49,7 +49,7 @@
</div> </div>
<div os-perms="core.can_manage_projector"> <div os-perms="core.can_manage_projector">
<button class="btn btn-sm" ng-click="active_projector.toggleBlank()" ng-hide="projectors.length > 1" <button class="btn btn-sm" ng-click="active_projector.toggleBlank()" ng-hide="projectors.length > 1"
ng-class="active_projector.blank ? 'btn-primary' : 'btn-default'"> ng-class="active_projector.blank ? 'btn-danger' : 'btn-default'">
<i class="fa" ng-class="active_projector.blank ? 'fa-square' : 'fa-square-o'"></i> <i class="fa" ng-class="active_projector.blank ? 'fa-square' : 'fa-square-o'"></i>
<translate>Blank</translate> <translate>Blank</translate>
</button> </button>
@ -59,20 +59,6 @@
<translate>Manage</translate> <translate>Manage</translate>
</a> </a>
</div> </div>
<div class="btn-group nobr" ng-show="projectors.length > 1" os-perms="core.can_manage_projector">
<button class="btn btn-sm" ng-class="broadcast == active_projector.id ? 'btn-primary' : 'btn-default'"
ng-click="active_projector.toggleBroadcast()" ng-disabled="broadcast > 0 && broadcast != active_projector.id">
<i class="fa" ng-class="broadcast == active_projector.id ? 'fa-star' : 'fa-star-o'"></i>
<translate>Broadcast</translate>
</button>
<button class="btn btn-sm" ng-click="active_projector.toggleBlank()"
ng-class="active_projector.blank ? 'btn-primary' : 'btn-default'"
ng-disabled="broadcast > 0 && broadcast != active_projector.id">
<i class="fa" ng-class="active_projector.blank ? 'fa-square' : 'fa-square-o'"></i>
<translate>Blank</translate>
</button>
</div>
</div> </div>
<a ui-sref="projector({id: active_projector.id })" target="_blank"> <a ui-sref="projector({id: active_projector.id })" target="_blank">
@ -187,7 +173,7 @@
<span ng-if="!countdown.editTime" class="countdown_timer vcenter" <span ng-if="!countdown.editTime" class="countdown_timer vcenter"
ng-class="{ ng-class="{
'negative': countdown.seconds <= 0, 'negative': countdown.seconds <= 0,
'warning': countdown.seconds <= config('agenda_countdown_warning_time') && countdown.seconds > 0 }"> 'warning_time': countdown.seconds <= config('agenda_countdown_warning_time') && countdown.seconds > 0 }">
{{ countdown.seconds | osSecondsToTime }} {{ countdown.seconds | osSecondsToTime }}
</span> </span>
<!-- edit countdown form --> <!-- edit countdown form -->

View File

@ -2,7 +2,7 @@
<div class="countdown well pull-right" <div class="countdown well pull-right"
ng-class="{ ng-class="{
'negative': countdown.seconds <= 0, 'negative': countdown.seconds <= 0,
'warning': countdown.seconds <= config('agenda_countdown_warning_time') && countdown.seconds > 0 }"> 'warning_time': countdown.seconds <= config('agenda_countdown_warning_time') && countdown.seconds > 0 }">
{{ countdown.seconds | osSecondsToTime}} {{ countdown.seconds | osSecondsToTime}}
<div class="description">{{ countdown.description }}</div> <div class="description">{{ countdown.description }}</div>
</div> </div>

View File

@ -124,7 +124,7 @@
<!-- language switcher --> <!-- language switcher -->
<span uib-dropdown> | <span uib-dropdown> |
<a href="" class="headerlink" uib-dropdown-toggle id="language-dropdown"> <a href="" class="headerlink" uib-dropdown-toggle id="language-dropdown">
<i class="fa fa-flag"></i> <i class="fa fa-globe"></i>
<span class="hide-sm">{{ selectedLanguage[0].name | translate }}</span> <span class="hide-sm">{{ selectedLanguage[0].name | translate }}</span>
</a> </a>
<ul class="dropdown-menu pull-right" uib-dropdown-menu aria-labelledby="language-dropdown"> <ul class="dropdown-menu pull-right" uib-dropdown-menu aria-labelledby="language-dropdown">

View File

@ -172,7 +172,7 @@
<span class="sort-spacer pointer" ng-click="filter.reset(isSelectMode)" <span class="sort-spacer pointer" ng-click="filter.reset(isSelectMode)"
ng-if="filter.areFiltersSet()" ng-disabled="isSelectMode" ng-if="filter.areFiltersSet()" ng-disabled="isSelectMode"
ng-class="{'disabled': isSelectMode}"> ng-class="{'disabled': isSelectMode}">
<i class="fa fa-times-circle"></i> <i class="fa fa-window-close"></i>
<translate>Filter</translate> <translate>Filter</translate>
</span> </span>
<!-- boolean Filters --> <!-- boolean Filters -->
@ -210,11 +210,13 @@
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownSort"> <ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownSort">
<li ng-repeat="option in sortOptions"> <li ng-repeat="option in sortOptions">
<a href ng-click="sort.toggle(option.name)"> <a href ng-click="sort.toggle(option.name)">
{{ option.display_name | translate }} <span ng-style="{'font-weight': sort.column === option.name ? 'bold' : 'normal'}">
{{ option.display_name | translate }}
</span>
<span class="spacer-right pull-right"></span> <span class="spacer-right pull-right"></span>
<i class="pull-right fa" <i class="pull-right fa"
ng-style="{'visibility': sort.column === option.name ? 'visible' : 'hidden'}" ng-style="{'visibility': sort.column === option.name ? 'visible' : 'hidden'}"
ng-class="sort.reverse ? 'fa-sort-desc' : 'fa-sort-asc'"> ng-class="sort.reverse ? 'fa-sort-amount-desc' : 'fa-sort-amount-asc'">
</i> </i>
</a> </a>
</li> </li>

View File

@ -370,10 +370,16 @@ angular.module('OpenSlidesApp.motions.pdf', ['OpenSlidesApp.core.pdf'])
style: 'heading3', style: 'heading3',
marginTop: 25, marginTop: 25,
}); });
var width;
if (params.lineNumberMode == 'outside') {
width = '80%';
} else {
width = '100%';
}
reason.push({ reason.push({
columns: [ columns: [
{ {
width: '80%', width: width,
stack: converter.convertHTML(motion.getReason(motionVersion), 'none'), stack: converter.convertHTML(motion.getReason(motionVersion), 'none'),
}, },
] ]

View File

@ -47,13 +47,13 @@
</label> </label>
</div> </div>
<!-- line number mode for resonsive size small/extra small (dropdown) --> <!-- line number mode for resonsive size small/extra small (dropdown) -->
<div class="dropdown hidden-md hidden-lg" uib-dropdown> <div class="dropdown hidden-md hidden-lg inline" uib-dropdown>
<button type="button" class="btn btn-default btn-sm" id="dropdownLineMode" uib-dropdown-toggle> <button type="button" class="btn btn-default btn-sm" id="dropdownLineMode" uib-dropdown-toggle>
<i class="fa fa-list-ol" aria-hidden="true"></i> <i class="fa fa-list-ol" aria-hidden="true"></i>
<translate>Line numbering</translate> <translate>Line numbering</translate>
<span class="caret"></span> <span class="caret"></span>
</button> </button>
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownLineMode"> <ul class="dropdown-menu" aria-labelledby="dropdownLineMode">
<li> <li>
<a href="" ng-click="setLineNumberMode('none')"> <a href="" ng-click="setLineNumberMode('none')">
<i class="fa fa-check" ng-if="lineNumberMode == 'none'"></i> <i class="fa fa-check" ng-if="lineNumberMode == 'none'"></i>

View File

@ -221,7 +221,7 @@
<translate>Category</translate> <translate>Category</translate>
<span class="caret"></span> <span class="caret"></span>
</span> </span>
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownCategory"> <ul class="dropdown-menu dropdown-menu-left" aria-labelledby="dropdownCategory">
<li ng-repeat="category in categories | orderBy: config('motions_export_category_sorting')"> <li ng-repeat="category in categories | orderBy: config('motions_export_category_sorting')">
<a href ng-click="filter.operateMultiselectFilter('category', category.id, isSelectMode)"> <a href ng-click="filter.operateMultiselectFilter('category', category.id, isSelectMode)">
<i class="fa fa-check" ng-if="filter.multiselectFilters.category.indexOf(category.id) > -1"></i> <i class="fa fa-check" ng-if="filter.multiselectFilters.category.indexOf(category.id) > -1"></i>
@ -245,7 +245,7 @@
<translate>Motion block</translate> <translate>Motion block</translate>
<span class="caret"></span> <span class="caret"></span>
</span> </span>
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownBlock"> <ul class="dropdown-menu dropdown-menu-left" aria-labelledby="dropdownBlock">
<li ng-repeat="block in motionBlocks"> <li ng-repeat="block in motionBlocks">
<a href ng-click="filter.operateMultiselectFilter('motionBlock', block.id, isSelectMode)"> <a href ng-click="filter.operateMultiselectFilter('motionBlock', block.id, isSelectMode)">
<i class="fa fa-check" ng-if="filter.multiselectFilters.motionBlock.indexOf(block.id) > -1"></i> <i class="fa fa-check" ng-if="filter.multiselectFilters.motionBlock.indexOf(block.id) > -1"></i>
@ -376,18 +376,20 @@
<span class="spacer-right pull-right"></span> <span class="spacer-right pull-right"></span>
<i class="pull-right fa" <i class="pull-right fa"
ng-style="{'visibility': sort.column === 'agenda_item.getItemNumberWithAncestors()' ? 'visible' : 'hidden'}" ng-style="{'visibility': sort.column === 'agenda_item.getItemNumberWithAncestors()' ? 'visible' : 'hidden'}"
ng-class="sort.reverse ? 'fa-sort-desc' : 'fa-sort-asc'"> ng-class="sort.reverse ? 'fa-sort-amount-desc' : 'fa-sort-amount-asc'">
</i> </i>
</a> </a>
</li> </li>
<!-- all other sortOptions --> <!-- all other sortOptions -->
<li ng-repeat="option in sortOptions"> <li ng-repeat="option in sortOptions">
<a href ng-click="sort.toggle(option.name)"> <a href ng-click="sort.toggle(option.name)">
{{ option.display_name | translate }} <span ng-style="{'font-weight': sort.column === option.name ? 'bold' : 'normal'}">
<span class="spacer-right pull-right"></span> {{ option.display_name | translate }}
</span>
<span class="spacer-right pull-right"></span>
<i class="pull-right fa" <i class="pull-right fa"
ng-style="{'visibility': sort.column === option.name ? 'visible' : 'hidden'}" ng-style="{'visibility': sort.column === option.name ? 'visible' : 'hidden'}"
ng-class="sort.reverse ? 'fa-sort-desc' : 'fa-sort-asc'"> ng-class="sort.reverse ? 'fa-sort-amount-desc' : 'fa-sort-amount-asc'">
</i> </i>
</a> </a>
</li> </li>
@ -409,7 +411,7 @@
<span class="spacer-left-lg pointer" ng-click="resetFilters(isSelectMode)" <span class="spacer-left-lg pointer" ng-click="resetFilters(isSelectMode)"
ng-if="filter.areFiltersSet()" ng-disabled="isSelectMode" ng-if="filter.areFiltersSet()" ng-disabled="isSelectMode"
ng-class="{'disabled': isSelectMode}"> ng-class="{'disabled': isSelectMode}">
<i class="fa fa-times-circle"></i> <i class="fa fa-window-close"></i>
<strong translate>All Filters</strong> <strong translate>All Filters</strong>
</span> </span>
<!-- state --> <!-- state -->

View File

@ -18,7 +18,7 @@
<a os-perms="agenda.can_manage" ng-click="openDialog(topic)" <a os-perms="agenda.can_manage" ng-click="openDialog(topic)"
class="btn btn-default btn-sm" class="btn btn-default btn-sm"
title="{{ 'Edit' | translate}}"> title="{{ 'Edit' | translate}}">
<i class="fa fa-pencil"></i> <i class="fa fa-pencil fa-lg"></i>
</a> </a>
</div> </div>
<h1>{{ topic.agenda_item.getTitle() }}</h1> <h1>{{ topic.agenda_item.getTitle() }}</h1>

View File

@ -198,7 +198,7 @@
<span class="sort-spacer pointer" ng-click="filter.reset(isSelectMode)" <span class="sort-spacer pointer" ng-click="filter.reset(isSelectMode)"
ng-if="filter.areFiltersSet()" ng-disabled="isSelectMode" ng-if="filter.areFiltersSet()" ng-disabled="isSelectMode"
ng-class="{'disabled': isSelectMode}"> ng-class="{'disabled': isSelectMode}">
<i class="fa fa-times-circle"></i> <i class="fa fa-window-close"></i>
<translate>Filter</translate> <translate>Filter</translate>
</span> </span>
<!-- Group filter --> <!-- Group filter -->
@ -260,11 +260,13 @@
<ul class="dropdown-menu dropdown-menu-right dropdown-entries" aria-labelledby="dropdownSort"> <ul class="dropdown-menu dropdown-menu-right dropdown-entries" aria-labelledby="dropdownSort">
<li ng-repeat="option in sortOptions"> <li ng-repeat="option in sortOptions">
<a href ng-click="sort.toggle(option.name)"> <a href ng-click="sort.toggle(option.name)">
{{ option.display_name | translate }} <span ng-style="{'font-weight': sort.column === option.name ? 'bold' : 'normal'}">
{{ option.display_name | translate }}
</span>
<span class="spacer-right pull-right"></span> <span class="spacer-right pull-right"></span>
<i class="pull-right fa" <i class="pull-right fa"
ng-style="{'visibility': sort.column === option.name ? 'visible' : 'hidden'}" ng-style="{'visibility': sort.column === option.name ? 'visible' : 'hidden'}"
ng-class="sort.reverse ? 'fa-sort-desc' : 'fa-sort-asc'"> ng-class="sort.reverse ? 'fa-sort-amount-desc' : 'fa-sort-amount-asc'">
</i> </i>
</a> </a>
</li> </li>
@ -409,7 +411,7 @@
</div> </div>
<div os-perms="users.can_manage" ng-show="user.structure_level || user.hover"> <div os-perms="users.can_manage" ng-show="user.structure_level || user.hover">
<div class="popover-wrapper" uib-tooltip="{{ 'Structure level' | translate }}" tooltip-placement="top-left"> <div class="popover-wrapper">
<i class="fa fa-flag"></i> <i class="fa fa-flag"></i>
<span editable-text="user.structure_level" onaftersave="save(user)"> <span editable-text="user.structure_level" onaftersave="save(user)">
<span ng-if="!user.structure_level" translate>Set structure level ...</span> <span ng-if="!user.structure_level" translate>Set structure level ...</span>
@ -425,7 +427,7 @@
</div> </div>
<div os-perms="users.can_manage" ng-show="user.comment || user.hover"> <div os-perms="users.can_manage" ng-show="user.comment || user.hover">
<div class="popover-wrapper" uib-tooltip="{{ 'Comment' | translate }}" tooltip-placement="top-left"> <div class="popover-wrapper">
<i class="fa fa-info-circle"></i> <i class="fa fa-info-circle"></i>
<span editable-text="user.comment" onaftersave="save(user)"> <span editable-text="user.comment" onaftersave="save(user)">
<span ng-if="!user.comment" translate>Set comment ...</span> <span ng-if="!user.comment" translate>Set comment ...</span>