Merge pull request #2051 from emanuelschuetze/templateFixes2
Template improvements
This commit is contained in:
commit
e2383dc770
@ -69,7 +69,10 @@ angular.module('OpenSlidesApp.agenda.projector', ['OpenSlidesApp.agenda'])
|
||||
} else if ($scope.element.tree) {
|
||||
$scope.items = AgendaTree.getFlatTree(Agenda.getAll());
|
||||
} else {
|
||||
$scope.items = $filter('filter')(Agenda.getAll(), {'parent_id': null});
|
||||
$scope.items = Agenda.filter({
|
||||
where: { parent_id: null },
|
||||
orderBy: 'weight'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -760,7 +760,7 @@ img {
|
||||
box-shadow: -5px 5px 5px rgba(0, 0, 0, 0.2);
|
||||
height: 200px;
|
||||
padding: 0 10px 10px 10px;
|
||||
z-index: 1;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
#chatbox-text {
|
||||
|
@ -51,7 +51,7 @@ body{
|
||||
font-size: 24px;
|
||||
position: absolute;
|
||||
text-align: right;
|
||||
top: 25px;
|
||||
top: 23px;
|
||||
right: 50px;
|
||||
padding-left: 30px;
|
||||
}
|
||||
@ -185,16 +185,16 @@ hr {
|
||||
/*** Overlay ***/
|
||||
.countdown {
|
||||
min-width: 260px;
|
||||
position: fixed;
|
||||
margin: 0;
|
||||
top: 90px;
|
||||
position: relative;
|
||||
margin: 0 0 10px 10px;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
padding: 23px 47px 0px 19px;
|
||||
padding: 23px 45px 0px 19px;
|
||||
min-height: 72px;
|
||||
font-size: 3.7em;
|
||||
font-weight: bold;
|
||||
text-align: right;
|
||||
border-radius: 7px 0 0 7px;
|
||||
border-radius: 7px 7px 7px 7px;
|
||||
z-index: 200;
|
||||
font-family: "Roboto Condensed",Helvetica,Arial,sans-serif;
|
||||
}
|
||||
@ -202,7 +202,7 @@ hr {
|
||||
font-weight: normal;
|
||||
font-size: 18px;
|
||||
margin-top: 20px;
|
||||
padding-right: 5px;
|
||||
padding-right: 6px;
|
||||
}
|
||||
.countdown.warning {
|
||||
color: #ed940d;
|
||||
|
@ -391,25 +391,24 @@ angular.module('OpenSlidesApp.core', [
|
||||
}
|
||||
])
|
||||
|
||||
/* Converts number of seconds into string "hh:mm:ss" or "mm:ss" */
|
||||
/* Converts number of seconds into string "h:mm:ss" or "mm:ss" */
|
||||
.filter('osSecondsToTime', [
|
||||
function () {
|
||||
return function (totalseconds) {
|
||||
var time;
|
||||
// floor returns the largest integer of the absolut value of totalseconds
|
||||
var total = Math.floor(Math.abs(totalseconds));
|
||||
var hh = Math.floor(total / 3600);
|
||||
var h = Math.floor(total / 3600);
|
||||
var mm = Math.floor(total % 3600 / 60);
|
||||
var ss = Math.floor(total % 60);
|
||||
var zero = "0";
|
||||
// Add leading "0" for double digit values
|
||||
hh = (zero+hh).slice(-2);
|
||||
mm = (zero+mm).slice(-2);
|
||||
ss = (zero+ss).slice(-2);
|
||||
if (hh == "00")
|
||||
if (h == "0")
|
||||
time = mm + ':' + ss;
|
||||
else
|
||||
time = hh + ":" + mm + ":" + ss;
|
||||
time = h + ":" + mm + ":" + ss;
|
||||
if (totalseconds < 0)
|
||||
time = "-"+time;
|
||||
return time;
|
||||
|
@ -812,6 +812,7 @@ angular.module('OpenSlidesApp.core.site', [
|
||||
if (value.name == 'agenda/list-of-speakers') {
|
||||
$state.go('agenda.item.detail', {id: value.id});
|
||||
} else if (
|
||||
value.name != 'agenda/item-list' &&
|
||||
value.name != 'core/clock' &&
|
||||
value.name != 'core/countdown' &&
|
||||
value.name != 'core/message' ) {
|
||||
@ -1055,6 +1056,48 @@ angular.module('OpenSlidesApp.core.site', [
|
||||
}
|
||||
])
|
||||
|
||||
// format time string for model ("s") and view format ("h:mm:ss" or "mm:ss")
|
||||
.directive('minSecFormat', [
|
||||
function () {
|
||||
return {
|
||||
require: 'ngModel',
|
||||
link: function(scope, element, attrs, ngModelController) {
|
||||
ngModelController.$parsers.push(function(data) {
|
||||
//convert data from view format (mm:ss) to model format (s)
|
||||
var time = data.split(':');
|
||||
if (time.length > 1) {
|
||||
data = (+time[0]) * 60 + (+time[1]);
|
||||
if (data < 0) {
|
||||
data = "-"+data;
|
||||
}
|
||||
}
|
||||
return data;
|
||||
});
|
||||
|
||||
ngModelController.$formatters.push(function(data) {
|
||||
//convert data from model format (s) to view format (mm:ss)
|
||||
var time;
|
||||
// floor returns the largest integer of the absolut value of totalseconds
|
||||
var total = Math.floor(Math.abs(data));
|
||||
var mm = Math.floor(total / 60);
|
||||
var ss = Math.floor(total % 60);
|
||||
var zero = "0";
|
||||
// Add leading "0" for double digit values
|
||||
if (mm.length < 2) {
|
||||
mm = (zero+mm).slice(-2);
|
||||
}
|
||||
ss = (zero+ss).slice(-2);
|
||||
time = mm + ':' + ss;
|
||||
if (data < 0) {
|
||||
time = "-"+time;
|
||||
}
|
||||
return time;
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
])
|
||||
|
||||
.directive('osFocusMe', [
|
||||
'$timeout',
|
||||
function ($timeout) {
|
||||
|
@ -17,6 +17,8 @@
|
||||
</a>
|
||||
<!-- projector control buttons -->
|
||||
<div os-perms="core.can_manage_projector">
|
||||
|
||||
<!-- edit -->
|
||||
<a ng-click="editCurrentSlide()"
|
||||
class="btn btn-default btn-sm"
|
||||
title="{{ 'Edit current slide' | translate}}">
|
||||
@ -85,8 +87,7 @@
|
||||
<i class="fa fa-times"></i>
|
||||
</button>
|
||||
<!-- edit countdown button -->
|
||||
<button ng-show="countdown.status=='stop'"
|
||||
type="button" class="close editicon"
|
||||
<button type="button" class="close editicon"
|
||||
ng-click="editCountdownFlag=true;"
|
||||
title="{{ 'Edit countdown' | translate}}">
|
||||
<i class="fa fa-pencil"></i>
|
||||
@ -135,7 +136,8 @@
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label translate>Start time</label>
|
||||
<input ng-model="countdown.default" type="number" class="form-control input-sm">
|
||||
<input data-ng-model="countdown.default" min-sec-format
|
||||
type="text" placeholder="mm:ss" class="form-control input-sm">
|
||||
</div>
|
||||
<button type="submit"
|
||||
title="{{ 'Save' | translate}}"
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div ng-controller="SlideCountdownCtrl">
|
||||
<div ng-if="visible">
|
||||
<div class="countdown well" style="margin-top: calc({{index}}*100px);"
|
||||
<div class="countdown well pull-right"
|
||||
ng-class="{
|
||||
'negative': seconds <= 0,
|
||||
'warning': seconds <= config('agenda_countdown_warning_time') && seconds > 0 }">
|
||||
|
@ -24,7 +24,8 @@
|
||||
<div id="header">
|
||||
<img ng-if="config('projector_enable_logo')" id="logo" src="/static/img/logo-projector.png" alt="OpenSlides" />
|
||||
<div ng-if="config('projector_enable_title')" id="eventdata">
|
||||
<div class="title" ng-bind-html="config('general_event_name')"></div>
|
||||
<div class="title" ng-class="{ 'titleonly': !config('general_event_description') }"
|
||||
ng-bind-html="config('general_event_name')"></div>
|
||||
<div ng-if="config('general_event_description')" class="description"
|
||||
ng-bind-html="config('general_event_description')"></div>
|
||||
</div>
|
||||
@ -37,7 +38,7 @@
|
||||
font-size: {{scale}}%;
|
||||
}
|
||||
</style>
|
||||
<div ng-repeat="element in elements">
|
||||
<div ng-repeat="element in elements | orderBy:'index'">
|
||||
<div ng-include="element.template"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -198,9 +198,6 @@ angular.module('OpenSlidesApp.motions.site', ['OpenSlidesApp.motions'])
|
||||
// angular-formly fields for motion form
|
||||
getFormFields: function () {
|
||||
var workflows = Workflow.getAll();
|
||||
angular.forEach(workflows, function(workflow) {
|
||||
workflow.name = gettextCatalog.getString(workflow.name);
|
||||
});
|
||||
var images = Mediafile.getAllImages();
|
||||
return [
|
||||
{
|
||||
@ -328,7 +325,7 @@ angular.module('OpenSlidesApp.motions.site', ['OpenSlidesApp.motions'])
|
||||
label: gettextCatalog.getString('Workflow'),
|
||||
optionsAttr: 'bs-options',
|
||||
options: workflows,
|
||||
ngOptions: 'option.id as option.name for option in to.options',
|
||||
ngOptions: 'option.id as option.name | translate for option in to.options',
|
||||
placeholder: gettextCatalog.getString('Select or search a workflow ...')
|
||||
},
|
||||
hideExpression: '!model.more',
|
||||
|
@ -58,6 +58,26 @@ angular.module('OpenSlidesApp.users.site', ['OpenSlidesApp.users'])
|
||||
}
|
||||
}
|
||||
})
|
||||
// Redirects to user detail view and opens user edit form dialog, uses edit url.
|
||||
// Used by $state.go(..) from core/site.js only (for edit current slide button).
|
||||
// (from users list controller use UserForm factory instead to open dialog in front of
|
||||
// current view without redirect)
|
||||
.state('users.user.detail.update', {
|
||||
onEnter: ['$stateParams', '$state', 'ngDialog', 'User',
|
||||
function($stateParams, $state, ngDialog, User) {
|
||||
ngDialog.open({
|
||||
template: 'static/templates/users/user-form.html',
|
||||
controller: 'UserUpdateCtrl',
|
||||
className: 'ngdialog-theme-default wide-form',
|
||||
closeByEscape: false,
|
||||
closeByDocument: false,
|
||||
resolve: {
|
||||
user: function() {return User.find($stateParams.id);}
|
||||
}
|
||||
});
|
||||
}
|
||||
]
|
||||
})
|
||||
.state('users.user.detail.profile', {
|
||||
views: {
|
||||
'@users.user': {},
|
||||
@ -304,7 +324,7 @@ angular.module('OpenSlidesApp.users.site', ['OpenSlidesApp.users'])
|
||||
templateOptions: {
|
||||
label: gettextCatalog.getString('Groups'),
|
||||
options: Group.getAll(),
|
||||
ngOptions: 'option.id as option.name for option in to.options | ' +
|
||||
ngOptions: 'option.id as option.name | translate for option in to.options | ' +
|
||||
'filter: {id: "!1"} | filter: {id: "!2"}',
|
||||
placeholder: gettextCatalog.getString('Select or search a group ...')
|
||||
}
|
||||
|
@ -15,7 +15,7 @@
|
||||
<form name="groupForm">
|
||||
<div class="form-group">
|
||||
<label for="inputName" translate>Name</label>
|
||||
<input type="text" ng-model="group.name" class="form-control" name="inputName" required>
|
||||
<input type="text" ng-model="group.name|translate" class="form-control" name="inputName" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="selectPermissions" translate>Permissions</label>
|
||||
|
Loading…
Reference in New Issue
Block a user