Highlight objects in list view, if related objects are projected

This commit is contained in:
FinnStutzenstein 2017-06-16 12:55:45 +02:00
parent 573fc4da57
commit 2536b35c0e
9 changed files with 38 additions and 5 deletions

View File

@ -50,6 +50,8 @@ Core:
clients by refactoring autoupdate, Collection and AccessPermission [#3223].
- Fixes autoupdate bug for a user without user.can_see_name permission [#3233].
- Improved reconnect handling if the server was flushed [#3297].
- Highlight list entries in a light blue, if a related object is projected (e.g.
a list of speakers of a motion) [#3301]
Mediafiles:
- Fixed reloading of PDF on page change [#3274].

View File

@ -197,6 +197,10 @@ angular.module('OpenSlidesApp.agenda', ['OpenSlidesApp.users'])
});
return isProjectedIds;
},
isRelatedProjected: function () {
// related objects for agenda items: list of speakers slide.
return this.isListOfSpeakersProjected();
},
// project list of speakers
projectListOfSpeakers: function(projectorId) {
var isProjectedIds = this.isListOfSpeakersProjected();

View File

@ -211,7 +211,8 @@
<!-- main table -->
<div class="row data-row" ng-mouseover="item.hover=true"
ng-mouseleave="item.hover=false"
ng-class="{'projected': item.isProjected().length}"
ng-class="{'projected': item.isProjected().length,
'related-projected': item.isRelatedProjected().length}"
ng-repeat="item in itemsFiltered = (items
| osFilter: filter.filterString : filter.getObjectQueryString
| filter: {closed: filter.booleanFilters.closed.value}

View File

@ -367,9 +367,11 @@ angular.module('OpenSlidesApp.assignments', [])
}
},
// override isProjected function of jsDataModel factory
isProjected: function (poll_id) {
isProjected: function (poll_id, anyPoll) {
// Returns the ids of all projectors with an element
// with the name 'assignments/assignment'. Else returns an empty list.
// Provide a poll_id to query a specific poll or set anyPoll to true, to
// query whether any poll (but not the assignment itself) is projected.
var self = this;
var predicate = function (element) {
var value;
@ -379,6 +381,12 @@ angular.module('OpenSlidesApp.assignments', [])
typeof element.id !== 'undefined' &&
element.id == self.id &&
typeof element.poll === 'undefined';
} else if (anyPoll) {
// Assignment detail slide with any poll
value = element.name == 'assignments/assignment' &&
typeof element.id !== 'undefined' &&
element.id == self.id &&
typeof element.poll !== 'undefined';
} else {
// Assignment detail slide with specific poll
value = element.name == 'assignments/assignment' &&
@ -396,7 +404,11 @@ angular.module('OpenSlidesApp.assignments', [])
}
});
return isProjectedIds;
}
},
isRelatedProjected: function () {
var listOfSpeakers = this.agenda_item.isListOfSpeakersProjected();
return listOfSpeakers.concat(this.isProjected(null, true));
},
},
relations: {
belongsTo: {

View File

@ -202,7 +202,8 @@
<!-- main table -->
<div class="row data-row" ng-mouseover="assignment.hover=true"
ng-mouseleave="assignment.hover=false"
ng-class="{'projected': assignment.isProjected().length}"
ng-class="{'projected': assignment.isProjected().length,
'related-projected': assignment.isRelatedProjected().length}"
ng-repeat="assignment in assignmentsFiltered = (assignments
| osFilter: filter.filterString : filter.getObjectQueryString
| MultiselectFilter: filter.multiselectFilters.tag : getItemId.tag

View File

@ -1664,6 +1664,10 @@ tr.activeline td, li.activeline, .projected {
background-color: #bed4de !important;
}
.related-projected {
background-color: #e1ecfe !important;
}
tr.selected td {
background-color: #ff9999;
}

View File

@ -600,6 +600,10 @@ angular.module('OpenSlidesApp.core', [
});
return isProjectedIds;
};
// Override this method to get object spzific behavior
BaseModel.prototype.isRelatedProjected = function() {
throw "needs to be implemented!";
};
return BaseModel;
}
])

View File

@ -611,6 +611,10 @@ angular.module('OpenSlidesApp.motions', [
});
return mapping;
},
isRelatedProjected: function () {
// A motion related object is the list of speakers (through the agenda item)
return this.agenda_item.isListOfSpeakersProjected();
},
},
relations: {
belongsTo: {

View File

@ -429,7 +429,8 @@
<!-- main table -->
<div class="row data-row" ng-mouseover="motion.hover=true"
ng-mouseleave="motion.hover=false"
ng-class="{'projected': motion.isProjected().length}"
ng-class="{'projected': motion.isProjected().length,
'related-projected': motion.isRelatedProjected().length}"
ng-repeat="motion in motionsFiltered = (motions
| osFilter: filter.filterString : filter.getObjectQueryString
| MultiselectFilter: stateFilter : getItemId.state