Merge pull request #2276 from FinnStutzenstein/Issue2259
Added a possibility to sort and renumber all motions in a category (closes #2259)
This commit is contained in:
commit
21bbd4706c
@ -578,6 +578,14 @@ img {
|
|||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.lead-div {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lead-div .lead {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.italic {
|
.italic {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
@ -273,6 +273,21 @@ angular.module('OpenSlidesApp.motions', ['OpenSlidesApp.users'])
|
|||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
|
.factory('MotionList', [
|
||||||
|
function () {
|
||||||
|
return {
|
||||||
|
getList: function (items){
|
||||||
|
var list = [];
|
||||||
|
_.each(items, function (item) {
|
||||||
|
list.push({ id: item.id,
|
||||||
|
item: item });
|
||||||
|
});
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
.run([
|
.run([
|
||||||
'Motion',
|
'Motion',
|
||||||
'Category',
|
'Category',
|
||||||
|
@ -153,6 +153,19 @@ angular.module('OpenSlidesApp.motions.site', ['OpenSlidesApp.motions'])
|
|||||||
views: {
|
views: {
|
||||||
'@motions.category': {}
|
'@motions.category': {}
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
.state('motions.category.sort', {
|
||||||
|
url: '/sort/{id}',
|
||||||
|
resolve: {
|
||||||
|
category: function(Category, $stateParams) {
|
||||||
|
return Category.find($stateParams.id);
|
||||||
|
},
|
||||||
|
motions: function(Motion) {
|
||||||
|
return Motion.findAll();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
controller: 'CategorySortCtrl',
|
||||||
|
templateUrl: 'static/templates/motions/category-sort.html'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
@ -1065,6 +1078,52 @@ angular.module('OpenSlidesApp.motions.site', ['OpenSlidesApp.motions'])
|
|||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
|
.controller('CategorySortCtrl', [
|
||||||
|
'$scope',
|
||||||
|
'$stateParams',
|
||||||
|
'$http',
|
||||||
|
'MotionList',
|
||||||
|
'Category',
|
||||||
|
'category',
|
||||||
|
'Motion',
|
||||||
|
'motions',
|
||||||
|
function($scope, $stateParams, $http, MotionList, Category, category, Motion, motions) {
|
||||||
|
Category.bindOne(category.id, $scope, 'category');
|
||||||
|
Motion.bindAll({}, $scope, 'motions');
|
||||||
|
$scope.filter = { category_id: category.id,
|
||||||
|
orderBy: 'identifier' };
|
||||||
|
|
||||||
|
$scope.$watch(
|
||||||
|
function () {
|
||||||
|
return Motion.lastModified();
|
||||||
|
},
|
||||||
|
function () {
|
||||||
|
$scope.items = MotionList.getTree(Motion.filter($scope.filter));
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
$scope.alert = {};
|
||||||
|
// Numbers all motions in this category by the given order in $scope.items
|
||||||
|
$scope.numbering = function () {
|
||||||
|
// Create a list of all motion ids in the current order.
|
||||||
|
var sorted_motions = [];
|
||||||
|
$scope.items.forEach(function (item) {
|
||||||
|
sorted_motions.push(item.item.id);
|
||||||
|
});
|
||||||
|
|
||||||
|
// renumber them
|
||||||
|
$http.post('/rest/motions/category/' + $scope.category.id + '/numbering/',
|
||||||
|
{'motions': sorted_motions} )
|
||||||
|
.success(function(data) {
|
||||||
|
$scope.alert = { type: 'success', msg: data.detail, show: true };
|
||||||
|
})
|
||||||
|
.error(function(data) {
|
||||||
|
$scope.alert = { type: 'danger', msg: data.detail, show: true };
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
//mark all motions config strings for translation in javascript
|
//mark all motions config strings for translation in javascript
|
||||||
.config([
|
.config([
|
||||||
'gettext',
|
'gettext',
|
||||||
|
@ -40,6 +40,8 @@
|
|||||||
<td ng-mouseover="category.hover=true" ng-mouseleave="category.hover=false">
|
<td ng-mouseover="category.hover=true" ng-mouseleave="category.hover=false">
|
||||||
<strong>{{ category.name }}</strong>
|
<strong>{{ category.name }}</strong>
|
||||||
<div class="hoverActions" ng-class="{'hiddenDiv': !category.hover}">
|
<div class="hoverActions" ng-class="{'hiddenDiv': !category.hover}">
|
||||||
|
<!-- sort -->
|
||||||
|
<a ui-sref="motions.category.sort({ id: category.id })" translate>Sort</a> |
|
||||||
<!-- edit -->
|
<!-- edit -->
|
||||||
<a ui-sref="motions.category.detail.update({id: category.id })" translate>Edit</a> |
|
<a ui-sref="motions.category.detail.update({id: category.id })" translate>Edit</a> |
|
||||||
<!-- delete -->
|
<!-- delete -->
|
||||||
|
@ -0,0 +1,34 @@
|
|||||||
|
<div class="header">
|
||||||
|
<div class="title">
|
||||||
|
<div class="submenu">
|
||||||
|
<a ui-sref="motions.category.list" class="btn btn-sm btn-default">
|
||||||
|
<i class="fa fa-angle-double-left fa-lg"></i>
|
||||||
|
<translate>Back to categories</translate>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<h1><translate>Category</translate> {{ category.name }}</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="details">
|
||||||
|
<div class="lead-div">
|
||||||
|
<p class="lead" translate>
|
||||||
|
Drag and drop motions to reorder the category and when finished, renumber them.
|
||||||
|
</p>
|
||||||
|
<a os-perms="motions.can_manage" class="btn btn-primary btn-sm" ng-click="numbering()">
|
||||||
|
<i class="fa fa-sort-numeric-asc fa-lg"></i>
|
||||||
|
<translate>Numbering</translate>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<uib-alert ng-show="alert.show" type="{{ alert.type }}" ng-click="alert={}" close="alert={}">
|
||||||
|
{{ alert.msg }}
|
||||||
|
</uib-alert>
|
||||||
|
<div ui-tree="treeOptions" data-max-depth="1" data-empty-placeholder-enabled="false">
|
||||||
|
<ol ui-tree-nodes ng-model="items">
|
||||||
|
<li ui-tree-node ng-repeat="item in items">
|
||||||
|
<div ui-tree-handle bg-color="#FF0000">
|
||||||
|
{{ item.item.identifier }}: {{ item.item.getTitle() }}
|
||||||
|
</div>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</div>
|
Loading…
Reference in New Issue
Block a user