Configurable projector header image
This commit is contained in:
parent
146b49c4aa
commit
61058fac49
@ -16,13 +16,13 @@ Motions:
|
|||||||
settings [#3187].
|
settings [#3187].
|
||||||
- Fixed empty motion comment field in motion update form [#3194].
|
- Fixed empty motion comment field in motion update form [#3194].
|
||||||
- Removed server side image to base64 transformation and
|
- Removed server side image to base64 transformation and
|
||||||
added local transformation [#2705]
|
added local transformation [#3181]
|
||||||
- Added support for export motions in a zip archive [#3189].
|
- Added support for export motions in a zip archive [#3189].
|
||||||
|
|
||||||
Core:
|
Core:
|
||||||
- No reload on logoff. OpenSlides is now a full single page
|
- No reload on logoff. OpenSlides is now a full single page
|
||||||
application [#3172].
|
application [#3172].
|
||||||
- Adding support for choosing image files as logos [#3184].
|
- Adding support for choosing image files as logos [#3184, #3207].
|
||||||
- Fixing error when clearing empty chat [#3199].
|
- Fixing error when clearing empty chat [#3199].
|
||||||
|
|
||||||
Users:
|
Users:
|
||||||
|
@ -139,8 +139,8 @@ def get_config_variables():
|
|||||||
default_value=True,
|
default_value=True,
|
||||||
input_type='boolean',
|
input_type='boolean',
|
||||||
label='Show logo on projector',
|
label='Show logo on projector',
|
||||||
help_text='You can replace the logo. Just copy a file to '
|
help_text='You can replace the logo by uploading an image and set it as '
|
||||||
'"static/img/logo-projector.png" in your OpenSlides data path.',
|
'the "main projector logo" in "files".',
|
||||||
weight=150,
|
weight=150,
|
||||||
group='Projector')
|
group='Projector')
|
||||||
|
|
||||||
@ -152,6 +152,14 @@ def get_config_variables():
|
|||||||
weight=155,
|
weight=155,
|
||||||
group='Projector')
|
group='Projector')
|
||||||
|
|
||||||
|
yield ConfigVariable(
|
||||||
|
name='projector_enable_clock',
|
||||||
|
default_value=True,
|
||||||
|
input_type='boolean',
|
||||||
|
label='Show the clock on projector',
|
||||||
|
weight=156,
|
||||||
|
group='Projector')
|
||||||
|
|
||||||
yield ConfigVariable(
|
yield ConfigVariable(
|
||||||
name='projector_header_backgroundcolor',
|
name='projector_header_backgroundcolor',
|
||||||
default_value='#317796',
|
default_value='#317796',
|
||||||
@ -213,7 +221,9 @@ def get_config_variables():
|
|||||||
# Logos.
|
# Logos.
|
||||||
yield ConfigVariable(
|
yield ConfigVariable(
|
||||||
name='logos_available',
|
name='logos_available',
|
||||||
default_value=['logo_projector_main'],
|
default_value=[
|
||||||
|
'logo_projector_main',
|
||||||
|
'logo_projector_header'],
|
||||||
weight=300,
|
weight=300,
|
||||||
group='Logo',
|
group='Logo',
|
||||||
hidden=True)
|
hidden=True)
|
||||||
@ -227,3 +237,13 @@ def get_config_variables():
|
|||||||
weight=301,
|
weight=301,
|
||||||
group='Logo',
|
group='Logo',
|
||||||
hidden=True)
|
hidden=True)
|
||||||
|
|
||||||
|
yield ConfigVariable(
|
||||||
|
name='logo_projector_header',
|
||||||
|
default_value={
|
||||||
|
'display_name': 'Projector header image',
|
||||||
|
'path': ''},
|
||||||
|
input_type='logo',
|
||||||
|
weight=302,
|
||||||
|
group='Logo',
|
||||||
|
hidden=True)
|
||||||
|
@ -94,6 +94,8 @@ body {
|
|||||||
|
|
||||||
/*** HEADER ***/
|
/*** HEADER ***/
|
||||||
#header {
|
#header {
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
box-shadow: 0 0 7px rgba(0,0,0,0.6);
|
box-shadow: 0 0 7px rgba(0,0,0,0.6);
|
||||||
height: 70px;
|
height: 70px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
|
@ -595,9 +595,11 @@ angular.module('OpenSlidesApp.core', [
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
getFromKey: function (key) {
|
getFromKey: function (key) {
|
||||||
var config = Config.get(key).value;
|
var config = Config.get(key);
|
||||||
config.key = key;
|
if (config) {
|
||||||
return config;
|
config.value.key = key;
|
||||||
|
return config.value;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
isMediafileUsedAsLogo: function (mediafile) {
|
isMediafileUsedAsLogo: function (mediafile) {
|
||||||
return _.find(this.getAll(), function (logoPlaceholder) {
|
return _.find(this.getAll(), function (logoPlaceholder) {
|
||||||
|
@ -160,7 +160,10 @@ angular.module('OpenSlidesApp.core.projector', ['OpenSlidesApp.core'])
|
|||||||
$scope.elements = [];
|
$scope.elements = [];
|
||||||
_.forEach(slides.getElements(projector), function (element) {
|
_.forEach(slides.getElements(projector), function (element) {
|
||||||
if (!element.error) {
|
if (!element.error) {
|
||||||
|
// Exclude the clock if it should be disabled.
|
||||||
|
if (Config.get('projector_enable_clock').value || element.name !== 'core/clock') {
|
||||||
$scope.elements.push(element);
|
$scope.elements.push(element);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
console.error("Error for slide " + element.name + ": " + element.error);
|
console.error("Error for slide " + element.name + ": " + element.error);
|
||||||
}
|
}
|
||||||
@ -244,10 +247,11 @@ angular.module('OpenSlidesApp.core.projector', ['OpenSlidesApp.core'])
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$scope.getLogo = function (key) {
|
$scope.$watch(function () {
|
||||||
var logo = Logos.getFromKey(key);
|
return Config.lastModified('projector_enable_clock');
|
||||||
return logo ? logo.path : void 0;
|
}, function () {
|
||||||
};
|
setElements($scope.projector);
|
||||||
|
});
|
||||||
|
|
||||||
$scope.$on('$destroy', function() {
|
$scope.$on('$destroy', function() {
|
||||||
if ($scope.broadcastDeregister) {
|
if ($scope.broadcastDeregister) {
|
||||||
|
@ -31,10 +31,15 @@
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style ng-if="config('logo_projector_header').path">
|
||||||
|
#header {
|
||||||
|
background-image: url({{ config('logo_projector_header').path }});
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
<div id="header">
|
<div id="header">
|
||||||
<img ng-if="config('projector_enable_logo')" id="logo" alt="OpenSlides"
|
<img ng-if="config('projector_enable_logo')" id="logo" alt="OpenSlides"
|
||||||
ng-src="{{ getLogo('logo_projector_main') || '/static/img/logo-projector.png' }}"/>
|
ng-src="{{ config('logo_projector_main').path || '/static/img/logo-projector.png' }}"/>
|
||||||
<div ng-if="config('projector_enable_title')" id="eventdata">
|
<div ng-if="config('projector_enable_title')" id="eventdata">
|
||||||
<div class="title" ng-class="{ 'titleonly': !config('general_event_description') }"
|
<div class="title" ng-class="{ 'titleonly': !config('general_event_description') }"
|
||||||
ng-bind-html="config('general_event_name')"></div>
|
ng-bind-html="config('general_event_name')"></div>
|
||||||
|
@ -267,6 +267,11 @@ angular.module('OpenSlidesApp.mediafiles.list', [
|
|||||||
});
|
});
|
||||||
return _.includes(allUrls, logo.path);
|
return _.includes(allUrls, logo.path);
|
||||||
};
|
};
|
||||||
|
$scope.hasProjectorHeaderLogo = function (mediafile) {
|
||||||
|
return _.some(mediafile.getLogos(), function (logo) {
|
||||||
|
return logo.key === 'logo_projector_header';
|
||||||
|
});
|
||||||
|
};
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@ -278,7 +278,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="no-projector-spacer" os-perms="!core.can_manage_projector"></div>
|
<div class="no-projector-spacer" os-perms="!core.can_manage_projector"></div>
|
||||||
<!-- main content column -->
|
<!-- main content column -->
|
||||||
<div class="col-xs-6 content">
|
<div class="col-xs-5 content">
|
||||||
<div class="spacer-right"> <!-- horizontal block -->
|
<div class="spacer-right"> <!-- horizontal block -->
|
||||||
<i ng-style="{'visibility': mediafile.hidden ? 'visible' : 'hidden'}" class="fa fa-lock fa-lg"
|
<i ng-style="{'visibility': mediafile.hidden ? 'visible' : 'hidden'}" class="fa fa-lock fa-lg"
|
||||||
title="{{ 'Is hidden' | translate }}"></i>
|
title="{{ 'Is hidden' | translate }}"></i>
|
||||||
@ -321,23 +321,29 @@
|
|||||||
ng-mouseleave="mediafile.logoHover=false"
|
ng-mouseleave="mediafile.logoHover=false"
|
||||||
ng-show="mediafile.canBeUsedAsLogo()">
|
ng-show="mediafile.canBeUsedAsLogo()">
|
||||||
<span uib-dropdown>
|
<span uib-dropdown>
|
||||||
<span id="dropdownLogo{{ mediafile.id }}" class="pointer nobr"
|
<span id="dropdownLogo{{ mediafile.id }}" class="pointer nobr" uib-dropdown-toggle>
|
||||||
uib-dropdown-toggle uib-tooltip="{{ 'Manage logos' | translate }}"
|
<span uib-tooltip="{{ 'Manage logos' | translate }}" tooltip-class="nobr">
|
||||||
tooltip-class="nobr">
|
|
||||||
<span ng-if="!mediafile.isUsedAsLogo()" ng-show="mediafile.hover">
|
<span ng-if="!mediafile.isUsedAsLogo()" ng-show="mediafile.hover">
|
||||||
<i class="fa fa-picture-o"></i>
|
<i class="fa fa-picture-o"></i>
|
||||||
<i class="fa fa-plus"></i>
|
<i class="fa fa-plus"></i>
|
||||||
</span>
|
</span>
|
||||||
<span ng-if="mediafile.isUsedAsLogo()">
|
<span ng-if="mediafile.isUsedAsLogo()">
|
||||||
<i class="fa fa-picture-o spacer-right"></i>
|
|
||||||
<span ng-repeat="logo in mediafile.getLogos()">
|
<span ng-repeat="logo in mediafile.getLogos()">
|
||||||
|
<i class="fa fa-picture-o spacer-right"
|
||||||
|
ng-style="{'visibility': $first ? 'visible' : 'hidden'}"></i>
|
||||||
<small>
|
<small>
|
||||||
{{ logo.display_name }}<span ng-if="!$last">,</span>
|
{{ logo.display_name }}<span ng-if="!$last">,</br></span>
|
||||||
</small>
|
</small>
|
||||||
</span>
|
</span>
|
||||||
<i class="fa fa-cog fa-lg spacer-left" ng-show="mediafile.logoHover"></i>
|
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
<span ng-if="hasProjectorHeaderLogo(mediafile) && mediafile.logoHover"
|
||||||
|
uib-tooltip="{{ 'The projector header should have a default size of 1024x70px.
|
||||||
|
Adapt the image width if you change the projector resolution.' | trusted | translate }}">
|
||||||
|
<i class="fa fa-info-circle"></i>
|
||||||
|
</span>
|
||||||
|
<i class="fa fa-cog fa-lg spacer-left" ng-show="mediafile.logoHover"></i>
|
||||||
|
</span>
|
||||||
<ul class="dropdown-menu" aria-labelledby="dropdownLogos{{ mediafile.id }}">
|
<ul class="dropdown-menu" aria-labelledby="dropdownLogos{{ mediafile.id }}">
|
||||||
<li ng-repeat="logo in logos">
|
<li ng-repeat="logo in logos">
|
||||||
<a href ng-click="toggleLogo(mediafile, logo)">
|
<a href ng-click="toggleLogo(mediafile, logo)">
|
||||||
|
Loading…
Reference in New Issue
Block a user