diff --git a/openslides/assignments/static/js/assignments/projector.js b/openslides/assignments/static/js/assignments/projector.js
index cef9a1a0f..ef2129404 100644
--- a/openslides/assignments/static/js/assignments/projector.js
+++ b/openslides/assignments/static/js/assignments/projector.js
@@ -4,19 +4,26 @@
angular.module('OpenSlidesApp.assignments.projector', ['OpenSlidesApp.assignments'])
-.config(function(slidesProvider) {
- slidesProvider.registerSlide('assignments/assignment', {
- template: 'static/templates/assignments/slide_assignment.html',
- });
-})
+.config([
+ 'slidesProvider',
+ function(slidesProvider) {
+ slidesProvider.registerSlide('assignments/assignment', {
+ template: 'static/templates/assignments/slide_assignment.html',
+ });
+ }
+])
-.controller('SlideAssignmentCtrl', function($scope, Assignment) {
- // Attention! Each object that is used here has to be dealt on server side.
- // Add it to the coresponding get_requirements method of the ProjectorElement
- // class.
- var id = $scope.element.id;
- Assignment.find(id);
- Assignment.bindOne(id, $scope, 'assignment');
-});
+.controller('SlideAssignmentCtrl', [
+ '$scope',
+ 'Assignment',
+ function($scope, Assignment) {
+ // Attention! Each object that is used here has to be dealt on server side.
+ // Add it to the coresponding get_requirements method of the ProjectorElement
+ // class.
+ var id = $scope.element.id;
+ Assignment.find(id);
+ Assignment.bindOne(id, $scope, 'assignment');
+ }
+]);
}());
diff --git a/openslides/assignments/static/js/assignments/site.js b/openslides/assignments/static/js/assignments/site.js
index 360be94f0..db017a402 100644
--- a/openslides/assignments/static/js/assignments/site.js
+++ b/openslides/assignments/static/js/assignments/site.js
@@ -18,63 +18,66 @@ angular.module('OpenSlidesApp.assignments.site', ['OpenSlidesApp.assignments'])
}
])
-.config(function($stateProvider) {
- $stateProvider
- .state('assignments', {
- url: '/assignments',
- abstract: true,
- template: "",
- })
- .state('assignments.assignment', {
- abstract: true,
- template: "",
- })
- .state('assignments.assignment.list', {
- resolve: {
- assignments: function(Assignment) {
- return Assignment.findAll();
- },
- phases: function(Assignment) {
- return Assignment.getPhases();
+.config([
+ '$stateProvider',
+ function($stateProvider) {
+ $stateProvider
+ .state('assignments', {
+ url: '/assignments',
+ abstract: true,
+ template: "",
+ })
+ .state('assignments.assignment', {
+ abstract: true,
+ template: "",
+ })
+ .state('assignments.assignment.list', {
+ resolve: {
+ assignments: function(Assignment) {
+ return Assignment.findAll();
+ },
+ phases: function(Assignment) {
+ return Assignment.getPhases();
+ }
}
- }
- })
- .state('assignments.assignment.detail', {
- controller: 'AssignmentDetailCtrl',
- resolve: {
- assignment: function(Assignment, $stateParams) {
- return Assignment.find($stateParams.id);
- },
- users: function(User) {
- return User.findAll();
+ })
+ .state('assignments.assignment.detail', {
+ controller: 'AssignmentDetailCtrl',
+ resolve: {
+ assignment: function(Assignment, $stateParams) {
+ return Assignment.find($stateParams.id);
+ },
+ users: function(User) {
+ return User.findAll();
+ }
}
- }
- })
- // redirects to assignment detail and opens assignment edit form dialog, uses edit url,
- // used by ui-sref links from agenda only
- // (from assignment controller use AssignmentForm factory instead to open dialog in front
- // of current view without redirect)
- .state('assignments.assignment.detail.update', {
- onEnter: ['$stateParams', '$state', 'ngDialog', 'Assignment',
- function($stateParams, $state, ngDialog, Assignment) {
- ngDialog.open({
- template: 'static/templates/assignments/assignment-form.html',
- controller: 'AssignmentUpdateCtrl',
- className: 'ngdialog-theme-default wide-form',
- closeByEscape: false,
- closeByDocument: false,
- resolve: {
- assignment: function() {return Assignment.find($stateParams.id)}
- },
- preCloseCallback: function() {
- $state.go('assignments.assignment.detail', {assignment: $stateParams.id});
- return true;
- }
- });
- }
- ]
- });
-})
+ })
+ // redirects to assignment detail and opens assignment edit form dialog, uses edit url,
+ // used by ui-sref links from agenda only
+ // (from assignment controller use AssignmentForm factory instead to open dialog in front
+ // of current view without redirect)
+ .state('assignments.assignment.detail.update', {
+ onEnter: ['$stateParams', '$state', 'ngDialog', 'Assignment',
+ function($stateParams, $state, ngDialog, Assignment) {
+ ngDialog.open({
+ template: 'static/templates/assignments/assignment-form.html',
+ controller: 'AssignmentUpdateCtrl',
+ className: 'ngdialog-theme-default wide-form',
+ closeByEscape: false,
+ closeByDocument: false,
+ resolve: {
+ assignment: function() {return Assignment.find($stateParams.id)}
+ },
+ preCloseCallback: function() {
+ $state.go('assignments.assignment.detail', {assignment: $stateParams.id});
+ return true;
+ }
+ });
+ }
+ ]
+ });
+ }
+])
// Service for generic assignment form (create and update)
.factory('AssignmentForm', [
diff --git a/openslides/core/static/js/core/base.js b/openslides/core/static/js/core/base.js
index 57d570357..f850e8cd7 100644
--- a/openslides/core/static/js/core/base.js
+++ b/openslides/core/static/js/core/base.js
@@ -12,23 +12,27 @@ angular.module('OpenSlidesApp.core', [
'ui.tree',
])
-.config(['DSProvider', 'DSHttpAdapterProvider', function(DSProvider, DSHttpAdapterProvider) {
- // Reloads everything after 5 minutes.
- // TODO: * find a way only to reload things that are still needed
- DSProvider.defaults.maxAge = 5 * 60 * 1000; // 5 minutes
- DSProvider.defaults.reapAction = 'none';
- DSProvider.defaults.basePath = '/rest';
- DSProvider.defaults.afterReap = function(model, items) {
- if (items.length > 5) {
- model.findAll({}, {bypassCache: true});
- } else {
- _.forEach(items, function (item) {
- model.refresh(item[model.idAttribute]);
- });
- }
- };
- DSHttpAdapterProvider.defaults.forceTrailingSlash = true;
-}])
+.config([
+ 'DSProvider',
+ 'DSHttpAdapterProvider',
+ function(DSProvider, DSHttpAdapterProvider) {
+ // Reloads everything after 5 minutes.
+ // TODO: * find a way only to reload things that are still needed
+ DSProvider.defaults.maxAge = 5 * 60 * 1000; // 5 minutes
+ DSProvider.defaults.reapAction = 'none';
+ DSProvider.defaults.basePath = '/rest';
+ DSProvider.defaults.afterReap = function(model, items) {
+ if (items.length > 5) {
+ model.findAll({}, {bypassCache: true});
+ } else {
+ _.forEach(items, function (item) {
+ model.refresh(item[model.idAttribute]);
+ });
+ }
+ };
+ DSHttpAdapterProvider.defaults.forceTrailingSlash = true;
+ }
+])
.factory('autoupdate', [
'DS',
@@ -129,23 +133,27 @@ angular.module('OpenSlidesApp.core', [
}
])
-.run(['DS', 'autoupdate', function(DS, autoupdate) {
- autoupdate.on_message(function(data) {
- // TODO: when MODEL.find() is called after this
- // a new request is fired. This could be a bug in DS
+.run([
+ 'DS',
+ 'autoupdate',
+ function(DS, autoupdate) {
+ autoupdate.on_message(function(data) {
+ // TODO: when MODEL.find() is called after this
+ // a new request is fired. This could be a bug in DS
- // TODO: Do not send the status code to the client, but make the decission
- // on the server side. It is an implementation detail, that tornado
- // sends request to wsgi, which should not concern the client.
- console.log("Received object: " + data.collection + ", " + data.id);
- if (data.status_code == 200) {
- DS.inject(data.collection, data.data);
- } else if (data.status_code == 404) {
- DS.eject(data.collection, data.id);
- }
- // TODO: handle other statuscodes
- });
-}])
+ // TODO: Do not send the status code to the client, but make the decission
+ // on the server side. It is an implementation detail, that tornado
+ // sends request to wsgi, which should not concern the client.
+ console.log("Received object: " + data.collection + ", " + data.id);
+ if (data.status_code == 200) {
+ DS.inject(data.collection, data.data);
+ } else if (data.status_code == 404) {
+ DS.eject(data.collection, data.id);
+ }
+ // TODO: handle other statuscodes
+ });
+ }
+])
.factory('loadGlobalData', [
'$rootScope',
@@ -310,12 +318,15 @@ angular.module('OpenSlidesApp.core', [
* be removed. See http://www.js-data.io/docs/dsdefaults#onconflict for
* more information.
*/
-.factory('Projector', ['DS', function(DS) {
- return DS.defineResource({
- name: 'core/projector',
- onConflict: 'replace',
- });
-}])
+.factory('Projector', [
+ 'DS',
+ function(DS) {
+ return DS.defineResource({
+ name: 'core/projector',
+ onConflict: 'replace',
+ });
+ }
+])
/* Converts number of seconds into string "hh:mm:ss" or "mm:ss" */
.filter('osSecondsToTime', [
diff --git a/openslides/core/static/js/core/projector.js b/openslides/core/static/js/core/projector.js
index 7a61df0b8..17207d867 100644
--- a/openslides/core/static/js/core/projector.js
+++ b/openslides/core/static/js/core/projector.js
@@ -6,70 +6,80 @@
angular.module('OpenSlidesApp.core.projector', ['OpenSlidesApp.core'])
// Provider to register slides in a .config() statement.
-.provider('slides', function() {
- var slidesMap = {};
+.provider('slides', [
+ function() {
+ var slidesMap = {};
- this.registerSlide = function(name, config) {
- slidesMap[name] = config;
- return this;
- };
+ this.registerSlide = function(name, config) {
+ slidesMap[name] = config;
+ return this;
+ };
- this.$get = function($templateRequest, $q) {
- var self = this;
- return {
- getElements: function(projector) {
- var elements = [];
- var factory = this;
- _.forEach(projector.elements, function(element) {
- if (element.name in slidesMap) {
- element.template = slidesMap[element.name].template;
- elements.push(element);
+ this.$get = function($templateRequest, $q) {
+ var self = this;
+ return {
+ getElements: function(projector) {
+ var elements = [];
+ var factory = this;
+ _.forEach(projector.elements, function(element) {
+ if (element.name in slidesMap) {
+ element.template = slidesMap[element.name].template;
+ elements.push(element);
+ } else {
+ console.log("Unknown slide: " + element.name);
+ }
+ });
+ return elements;
+ }
+ };
+ };
+ }
+])
+
+.config([
+ 'slidesProvider',
+ function(slidesProvider) {
+ slidesProvider.registerSlide('core/customslide', {
+ template: 'static/templates/core/slide_customslide.html',
+ });
+
+ slidesProvider.registerSlide('core/clock', {
+ template: 'static/templates/core/slide_clock.html',
+ });
+
+ slidesProvider.registerSlide('core/countdown', {
+ template: 'static/templates/core/slide_countdown.html',
+ });
+
+ slidesProvider.registerSlide('core/message', {
+ template: 'static/templates/core/slide_message.html',
+ });
+ }
+])
+
+.controller('ProjectorCtrl', [
+ '$scope',
+ 'Projector',
+ 'slides',
+ function($scope, Projector, slides) {
+ Projector.find(1).then(function() {
+ $scope.$watch(function () {
+ return Projector.lastModified(1);
+ }, function () {
+ $scope.elements = [];
+ _.forEach(slides.getElements(Projector.get(1)), function(element) {
+ if (!element.error) {
+ $scope.elements.push(element);
} else {
- console.log("Unknown slide: " + element.name);
+ console.error("Error for slide " + element.name + ": " + element.error);
}
});
- return elements;
- }
- };
- };
-})
-
-.config(function(slidesProvider) {
- slidesProvider.registerSlide('core/customslide', {
- template: 'static/templates/core/slide_customslide.html',
- });
-
- slidesProvider.registerSlide('core/clock', {
- template: 'static/templates/core/slide_clock.html',
- });
-
- slidesProvider.registerSlide('core/countdown', {
- template: 'static/templates/core/slide_countdown.html',
- });
-
- slidesProvider.registerSlide('core/message', {
- template: 'static/templates/core/slide_message.html',
- });
-})
-
-.controller('ProjectorCtrl', function($scope, Projector, slides) {
- Projector.find(1).then(function() {
- $scope.$watch(function () {
- return Projector.lastModified(1);
- }, function () {
- $scope.elements = [];
- _.forEach(slides.getElements(Projector.get(1)), function(element) {
- if (!element.error) {
- $scope.elements.push(element);
- } else {
- console.error("Error for slide " + element.name + ": " + element.error);
- }
+ $scope.scroll = -5 * Projector.get(1).scroll;
+ $scope.scale = 100 + 20 * Projector.get(1).scale;
});
- $scope.scroll = -5 * Projector.get(1).scroll;
- $scope.scale = 100 + 20 * Projector.get(1).scale;
});
- });
-})
+ }
+])
.controller('SlideCustomSlideCtrl', [
'$scope',
diff --git a/openslides/core/static/js/core/site.js b/openslides/core/static/js/core/site.js
index 59099dbb7..452c62d8f 100644
--- a/openslides/core/static/js/core/site.js
+++ b/openslides/core/static/js/core/site.js
@@ -84,219 +84,244 @@ angular.module('OpenSlidesApp.core.site', [
}
])
-.config(function($urlRouterProvider, $locationProvider) {
- // define fallback url and html5Mode
- $urlRouterProvider.otherwise('/');
- $locationProvider.html5Mode(true);
-})
+.config([
+ '$urlRouterProvider',
+ '$locationProvider',
+ function($urlRouterProvider, $locationProvider) {
+ // define fallback url and html5Mode
+ $urlRouterProvider.otherwise('/');
+ $locationProvider.html5Mode(true);
+ }
+])
-.config(function($httpProvider) {
- // Combine the django csrf system with the angular csrf system
- $httpProvider.defaults.xsrfCookieName = 'csrftoken';
- $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
-})
+.config([
+ '$httpProvider',
+ function($httpProvider) {
+ // Combine the django csrf system with the angular csrf system
+ $httpProvider.defaults.xsrfCookieName = 'csrftoken';
+ $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
+ }
+])
-.config(function(uiSelectConfig) {
- uiSelectConfig.theme = 'bootstrap';
-})
+.config([
+ 'uiSelectConfig',
+ function(uiSelectConfig) {
+ uiSelectConfig.theme = 'bootstrap';
+ }
+])
-.config(function($stateProvider, $urlMatcherFactoryProvider) {
- // Make the trailing slash optional
- $urlMatcherFactoryProvider.strictMode(false);
+.config([
+ '$stateProvider',
+ '$urlMatcherFactoryProvider',
+ function($stateProvider, $urlMatcherFactoryProvider) {
+ // Make the trailing slash optional
+ $urlMatcherFactoryProvider.strictMode(false);
- // Use stateProvider.decorator to give default values to our states
- $stateProvider.decorator('views', function(state, parent) {
- var result = {},
- views = parent(state);
+ // Use stateProvider.decorator to give default values to our states
+ $stateProvider.decorator('views', function(state, parent) {
+ var result = {},
+ views = parent(state);
- if (state.abstract || state.data && state.data.extern) {
- return views;
- }
+ if (state.abstract || state.data && state.data.extern) {
+ return views;
+ }
- angular.forEach(views, function(config, name) {
+ angular.forEach(views, function(config, name) {
- // Sets default values for templateUrl
- var patterns = state.name.split('.'),
- templateUrl,
- controller,
- defaultControllers = {
- create: 'CreateCtrl',
- update: 'UpdateCtrl',
- list: 'ListCtrl',
- detail: 'DetailCtrl',
- };
+ // Sets default values for templateUrl
+ var patterns = state.name.split('.'),
+ templateUrl,
+ controller,
+ defaultControllers = {
+ create: 'CreateCtrl',
+ update: 'UpdateCtrl',
+ list: 'ListCtrl',
+ detail: 'DetailCtrl',
+ };
- // templateUrl
- if (_.last(patterns).match(/(create|update)/)) {
- // When state_patterns is in the form "app.module.create" or
- // "app.module.update", use the form template.
- templateUrl = 'static/templates/' + patterns[0] + '/' + patterns[1] + '-form.html';
+ // templateUrl
+ if (_.last(patterns).match(/(create|update)/)) {
+ // When state_patterns is in the form "app.module.create" or
+ // "app.module.update", use the form template.
+ templateUrl = 'static/templates/' + patterns[0] + '/' + patterns[1] + '-form.html';
+ } else {
+ // Replaces the first point through a slash (the app name)
+ var appName = state.name.replace('.', '/');
+ // Replaces any folowing points though a -
+ templateUrl = 'static/templates/' + appName.replace(/\./g, '-') + '.html';
+ }
+ config.templateUrl = state.templateUrl || templateUrl;
+
+ // controller
+ if (patterns.length >= 3) {
+ controller = _.capitalize(patterns[1]) + defaultControllers[_.last(patterns)];
+ config.controller = state.controller || controller;
+ }
+ result[name] = config;
+ });
+ return result;
+ })
+
+ .decorator('url', function(state, parent) {
+ var defaultUrl;
+
+ if (state.abstract) {
+ defaultUrl = '';
} else {
- // Replaces the first point through a slash (the app name)
- var appName = state.name.replace('.', '/');
- // Replaces any folowing points though a -
- templateUrl = 'static/templates/' + appName.replace(/\./g, '-') + '.html';
- }
- config.templateUrl = state.templateUrl || templateUrl;
+ var patterns = state.name.split('.'),
+ defaultUrls = {
+ create: '/new',
+ update: '/edit',
+ list: '',
+ // The id is expected to be an integer, if not, the url has to
+ // be defined manually
+ detail: '/{id:int}',
+ };
- // controller
- if (patterns.length >= 3) {
- controller = _.capitalize(patterns[1]) + defaultControllers[_.last(patterns)];
- config.controller = state.controller || controller;
+ defaultUrl = defaultUrls[_.last(patterns)];
}
- result[name] = config;
+
+ state.url = state.url || defaultUrl;
+ return parent(state);
});
- return result;
- })
+ }
+])
- .decorator('url', function(state, parent) {
- var defaultUrl;
-
- if (state.abstract) {
- defaultUrl = '';
- } else {
- var patterns = state.name.split('.'),
- defaultUrls = {
- create: '/new',
- update: '/edit',
- list: '',
- // The id is expected to be an integer, if not, the url has to
- // be defined manually
- detail: '/{id:int}',
- };
-
- defaultUrl = defaultUrls[_.last(patterns)];
- }
-
- state.url = state.url || defaultUrl;
- return parent(state);
- });
-})
-
-.config(function($stateProvider, $locationProvider) {
- // Core urls
- $stateProvider
- .state('dashboard', {
- url: '/',
- templateUrl: 'static/templates/dashboard.html'
- })
- .state('projector', {
- url: '/projector',
- data: {extern: true},
- onEnter: function($window) {
- $window.location.href = this.url;
- }
- })
- .state('core', {
- url: '/core',
- abstract: true,
- template: "",
- })
- // legal notice and version
- .state('legalnotice', {
- url: '/legalnotice',
- controller: 'LegalNoticeCtrl',
- })
- //config
- .state('config', {
- url: '/config',
- controller: 'ConfigCtrl',
- resolve: {
- configOption: function($http) {
- return $http({ 'method': 'OPTIONS', 'url': '/rest/core/config/' });
- }
- }
- })
- // customslide
- .state('core.customslide', {
- url: '/customslide',
- abstract: true,
- template: "",
- })
- .state('core.customslide.detail', {
- resolve: {
- customslide: function(Customslide, $stateParams) {
- return Customslide.find($stateParams.id);
- }
- }
- })
- // redirects to customslide detail and opens customslide edit form dialog, uses edit url,
- // used by ui-sref links from agenda only
- // (from customslide controller use CustomSlideForm factory instead to open dialog in front
- // of current view without redirect)
- .state('core.customslide.detail.update', {
- onEnter: ['$stateParams', '$state', 'ngDialog', 'Customslide',
- function($stateParams, $state, ngDialog, Customslide) {
- ngDialog.open({
- template: 'static/templates/core/customslide-form.html',
- controller: 'CustomslideUpdateCtrl',
- className: 'ngdialog-theme-default wide-form',
- resolve: {
- customslide: function() {return Customslide.find($stateParams.id) }
- },
- preCloseCallback: function() {
- $state.go('core.customslide.detail', {customslide: $stateParams.id});
- return true;
- }
- });
- }]
- })
- // tag
- .state('core.tag', {
- url: '/tag',
- abstract: true,
- template: "",
- })
- .state('core.tag.list', {
- resolve: {
- tags: function(Tag) {
- return Tag.findAll();
- }
- }
- })
- .state('core.tag.create', {})
- .state('core.tag.detail', {
- resolve: {
- tag: function(Tag, $stateParams) {
- return Tag.find($stateParams.id);
- }
- }
- })
- .state('core.tag.detail.update', {
- views: {
- '@core.tag': {}
- }
- });
-
- $locationProvider.html5Mode(true);
-})
-
-// Helper to add ui.router states at runtime.
-// Needed for the django url_patterns.
-.provider('runtimeStates', function($stateProvider) {
- this.$get = function($q, $timeout, $state) {
- return {
- addState: function(name, state) {
- $stateProvider.state(name, state);
- }
- };
- };
-})
-
-// Load the django url patterns
-.run(function(runtimeStates, $http) {
- $http.get('/core/url_patterns/').then(function(data) {
- for (var pattern in data.data) {
- runtimeStates.addState(pattern, {
- 'url': data.data[pattern],
+.config([
+ '$stateProvider',
+ '$locationProvider',
+ function($stateProvider, $locationProvider) {
+ // Core urls
+ $stateProvider
+ .state('dashboard', {
+ url: '/',
+ templateUrl: 'static/templates/dashboard.html'
+ })
+ .state('projector', {
+ url: '/projector',
data: {extern: true},
onEnter: function($window) {
$window.location.href = this.url;
}
+ })
+ .state('core', {
+ url: '/core',
+ abstract: true,
+ template: "",
+ })
+ // legal notice and version
+ .state('legalnotice', {
+ url: '/legalnotice',
+ controller: 'LegalNoticeCtrl',
+ })
+ //config
+ .state('config', {
+ url: '/config',
+ controller: 'ConfigCtrl',
+ resolve: {
+ configOption: function($http) {
+ return $http({ 'method': 'OPTIONS', 'url': '/rest/core/config/' });
+ }
+ }
+ })
+ // customslide
+ .state('core.customslide', {
+ url: '/customslide',
+ abstract: true,
+ template: "",
+ })
+ .state('core.customslide.detail', {
+ resolve: {
+ customslide: function(Customslide, $stateParams) {
+ return Customslide.find($stateParams.id);
+ }
+ }
+ })
+ // redirects to customslide detail and opens customslide edit form dialog, uses edit url,
+ // used by ui-sref links from agenda only
+ // (from customslide controller use CustomSlideForm factory instead to open dialog in front
+ // of current view without redirect)
+ .state('core.customslide.detail.update', {
+ onEnter: ['$stateParams', '$state', 'ngDialog', 'Customslide',
+ function($stateParams, $state, ngDialog, Customslide) {
+ ngDialog.open({
+ template: 'static/templates/core/customslide-form.html',
+ controller: 'CustomslideUpdateCtrl',
+ className: 'ngdialog-theme-default wide-form',
+ resolve: {
+ customslide: function() {return Customslide.find($stateParams.id) }
+ },
+ preCloseCallback: function() {
+ $state.go('core.customslide.detail', {customslide: $stateParams.id});
+ return true;
+ }
+ });
+ }]
+ })
+ // tag
+ .state('core.tag', {
+ url: '/tag',
+ abstract: true,
+ template: "",
+ })
+ .state('core.tag.list', {
+ resolve: {
+ tags: function(Tag) {
+ return Tag.findAll();
+ }
+ }
+ })
+ .state('core.tag.create', {})
+ .state('core.tag.detail', {
+ resolve: {
+ tag: function(Tag, $stateParams) {
+ return Tag.find($stateParams.id);
+ }
+ }
+ })
+ .state('core.tag.detail.update', {
+ views: {
+ '@core.tag': {}
+ }
});
- }
- });
-})
+
+ $locationProvider.html5Mode(true);
+ }
+])
+
+// Helper to add ui.router states at runtime.
+// Needed for the django url_patterns.
+.provider('runtimeStates', [
+ '$stateProvider',
+ function($stateProvider) {
+ this.$get = function($q, $timeout, $state) {
+ return {
+ addState: function(name, state) {
+ $stateProvider.state(name, state);
+ }
+ };
+ };
+ }
+])
+
+// Load the django url patterns
+.run([
+ 'runtimeStates',
+ '$http',
+ function(runtimeStates, $http) {
+ $http.get('/core/url_patterns/').then(function(data) {
+ for (var pattern in data.data) {
+ runtimeStates.addState(pattern, {
+ 'url': data.data[pattern],
+ data: {extern: true},
+ onEnter: function($window) {
+ $window.location.href = this.url;
+ }
+ });
+ }
+ });
+ }
+])
// angular formly config options
.run([
@@ -321,42 +346,46 @@ angular.module('OpenSlidesApp.core.site', [
// html-tag os-form-field to generate generic from fields
// TODO: make it possible to use other fields then config fields
-.directive('osFormField', function($parse, Config) {
- function getHtmlType(type) {
- return {
- string: 'text',
- text: 'textarea',
- integer: 'number',
- boolean: 'checkbox',
- choice: 'choice',
- }[type];
- }
-
- return {
- restrict: 'E',
- scope: true,
- templateUrl: '/static/templates/config-form-field.html',
- link: function ($scope, iElement, iAttrs, controller, transcludeFn) {
- var field = $parse(iAttrs.field)($scope);
- var config = Config.get(field.key);
- $scope.type = getHtmlType(field.input_type);
- if ($scope.type == 'choice') {
- $scope.choices = field.choices;
- }
- $scope.label = field.label;
- $scope.key = 'field-' + field.key;
- $scope.value = config.value;
- $scope.help_text = field.help_text;
- $scope.default_value = field.default_value;
- $scope.reset = function () {
- $scope.value = $scope.default_value;
- $scope.save(field.key, $scope.value);
- }
+.directive('osFormField', [
+ '$parse',
+ 'Config',
+ function($parse, Config) {
+ function getHtmlType(type) {
+ return {
+ string: 'text',
+ text: 'textarea',
+ integer: 'number',
+ boolean: 'checkbox',
+ choice: 'choice',
+ }[type];
}
- };
-})
-.controller("MainMenuCtrl", [
+ return {
+ restrict: 'E',
+ scope: true,
+ templateUrl: '/static/templates/config-form-field.html',
+ link: function ($scope, iElement, iAttrs, controller, transcludeFn) {
+ var field = $parse(iAttrs.field)($scope);
+ var config = Config.get(field.key);
+ $scope.type = getHtmlType(field.input_type);
+ if ($scope.type == 'choice') {
+ $scope.choices = field.choices;
+ }
+ $scope.label = field.label;
+ $scope.key = 'field-' + field.key;
+ $scope.value = config.value;
+ $scope.help_text = field.help_text;
+ $scope.default_value = field.default_value;
+ $scope.reset = function () {
+ $scope.value = $scope.default_value;
+ $scope.save(field.key, $scope.value);
+ }
+ }
+ };
+ }
+])
+
+.controller('MainMenuCtrl', [
'$scope',
'mainMenu',
function ($scope, mainMenu) {
@@ -364,15 +393,21 @@ angular.module('OpenSlidesApp.core.site', [
}
])
-.controller("LanguageCtrl", function ($scope, gettextCatalog, Languages, filterFilter) {
- $scope.languages = Languages.getLanguages();
- $scope.selectedLanguage = filterFilter($scope.languages, {selected: true});
- // controller to switch app language
- $scope.switchLanguage = function (lang) {
- $scope.languages = Languages.setCurrentLanguage(lang);
+.controller('LanguageCtrl', [
+ '$scope',
+ 'gettextCatalog',
+ 'Languages',
+ 'filterFilter',
+ function ($scope, gettextCatalog, Languages, filterFilter) {
+ $scope.languages = Languages.getLanguages();
$scope.selectedLanguage = filterFilter($scope.languages, {selected: true});
- };
-})
+ // controller to switch app language
+ $scope.switchLanguage = function (lang) {
+ $scope.languages = Languages.setCurrentLanguage(lang);
+ $scope.selectedLanguage = filterFilter($scope.languages, {selected: true});
+ };
+ }
+])
// Projector Sidebar Controller
.controller('ProjectorSidebarCtrl', [
@@ -398,16 +433,21 @@ angular.module('OpenSlidesApp.core.site', [
])
// Config Controller
-.controller('ConfigCtrl', function($scope, Config, configOption) {
- Config.bindAll({}, $scope, 'configs');
- $scope.configGroups = configOption.data.config_groups;
+.controller('ConfigCtrl', [
+ '$scope',
+ 'Config',
+ 'configOption',
+ function($scope, Config, configOption) {
+ Config.bindAll({}, $scope, 'configs');
+ $scope.configGroups = configOption.data.config_groups;
- // save changed config value
- $scope.save = function(key, value) {
- Config.get(key).value = value;
- Config.save(key);
- };
-})
+ // save changed config value
+ $scope.save = function(key, value) {
+ Config.get(key).value = value;
+ Config.save(key);
+ };
+ }
+])
// Provide generic customslide form fields for create and update view
@@ -744,58 +784,78 @@ angular.module('OpenSlidesApp.core.site', [
])
// Tag Controller
-.controller('TagListCtrl', function($scope, Tag) {
- Tag.bindAll({}, $scope, 'tags');
+.controller('TagListCtrl', [
+ '$scope',
+ 'Tag',
+ function($scope, Tag) {
+ Tag.bindAll({}, $scope, 'tags');
- // setup table sorting
- $scope.sortColumn = 'name';
- $scope.reverse = false;
- // function to sort by clicked column
- $scope.toggleSort = function ( column ) {
- if ( $scope.sortColumn === column ) {
- $scope.reverse = !$scope.reverse;
- }
- $scope.sortColumn = column;
- };
-
- // save changed tag
- $scope.save = function (tag) {
- Tag.save(tag);
- };
- $scope.delete = function (tag) {
- Tag.destroy(tag.id).then(
- function(success) {
- //TODO: success message
+ // setup table sorting
+ $scope.sortColumn = 'name';
+ $scope.reverse = false;
+ // function to sort by clicked column
+ $scope.toggleSort = function ( column ) {
+ if ( $scope.sortColumn === column ) {
+ $scope.reverse = !$scope.reverse;
}
- );
- };
-})
+ $scope.sortColumn = column;
+ };
-.controller('TagDetailCtrl', function($scope, Tag, tag) {
- Tag.bindOne(tag.id, $scope, 'tag');
-})
+ // save changed tag
+ $scope.save = function (tag) {
+ Tag.save(tag);
+ };
+ $scope.delete = function (tag) {
+ Tag.destroy(tag.id).then(
+ function(success) {
+ //TODO: success message
+ }
+ );
+ };
+ }
+])
-.controller('TagCreateCtrl', function($scope, $state, Tag) {
- $scope.tag = {};
- $scope.save = function (tag) {
- Tag.create(tag).then(
- function(success) {
- $state.go('core.tag.list');
- }
- );
- };
-})
+.controller('TagDetailCtrl', [
+ '$scope',
+ 'Tag',
+ 'tag',
+ function($scope, Tag, tag) {
+ Tag.bindOne(tag.id, $scope, 'tag');
+ }
+])
-.controller('TagUpdateCtrl', function($scope, $state, Tag, tag) {
- $scope.tag = tag;
- $scope.save = function (tag) {
- Tag.save(tag).then(
- function(success) {
- $state.go('core.tag.list');
- }
- );
- };
-})
+.controller('TagCreateCtrl', [
+ '$scope',
+ '$state',
+ 'Tag',
+ function($scope, $state, Tag) {
+ $scope.tag = {};
+ $scope.save = function (tag) {
+ Tag.create(tag).then(
+ function(success) {
+ $state.go('core.tag.list');
+ }
+ );
+ };
+ }
+])
+
+.controller('TagUpdateCtrl', [
+ '$scope',
+ '$state',
+ 'Tag',
+ 'tag',
+ function($scope, $state, Tag, tag) {
+ $scope.tag = tag;
+ $scope.save = function (tag) {
+ Tag.save(tag).then(
+ function(success) {
+ $state.go('core.tag.list');
+ }
+ );
+ };
+ }
+])
// counter of new (unread) chat messages
.value('NewChatMessages', [])
@@ -846,14 +906,17 @@ angular.module('OpenSlidesApp.core.site', [
}
])
-.directive('osFocusMe', function ($timeout) {
- return {
- link: function (scope, element, attrs, model) {
- $timeout(function () {
- element[0].focus();
- });
- }
- };
-});
+.directive('osFocusMe', [
+ '$timeout',
+ function ($timeout) {
+ return {
+ link: function (scope, element, attrs, model) {
+ $timeout(function () {
+ element[0].focus();
+ });
+ }
+ };
+ }
+]);
}());
diff --git a/openslides/mediafiles/static/js/mediafiles/site.js b/openslides/mediafiles/static/js/mediafiles/site.js
index 12e2540fe..bc55831f4 100644
--- a/openslides/mediafiles/static/js/mediafiles/site.js
+++ b/openslides/mediafiles/static/js/mediafiles/site.js
@@ -18,69 +18,79 @@ angular.module('OpenSlidesApp.mediafiles.site', ['ngFileUpload', 'OpenSlidesApp.
}
])
-.config(function($stateProvider) {
- $stateProvider
- .state('mediafiles', {
- url: '/mediafiles',
- abstract: true,
- template: "",
- })
- .state('mediafiles.mediafile', {
- abstract: true,
- template: "",
- })
- .state('mediafiles.mediafile.list', {
- resolve: {
- mediafiles: function(Mediafile) {
- return Mediafile.findAll();
+.config([
+ '$stateProvider',
+ function($stateProvider) {
+ $stateProvider
+ .state('mediafiles', {
+ url: '/mediafiles',
+ abstract: true,
+ template: "",
+ })
+ .state('mediafiles.mediafile', {
+ abstract: true,
+ template: "",
+ })
+ .state('mediafiles.mediafile.list', {
+ resolve: {
+ mediafiles: function(Mediafile) {
+ return Mediafile.findAll();
+ }
}
- }
- })
- .state('mediafiles.mediafile.create', {})
- .state('mediafiles.mediafile.detail', {
- url: '/{id:int}',
- abstract: true,
- resolve: {
- mediafile: function(Mediafile, $stateParams) {
- var id = $stateParams.id;
- var file = Mediafile.find(id);
- return file;
+ })
+ .state('mediafiles.mediafile.create', {})
+ .state('mediafiles.mediafile.detail', {
+ url: '/{id:int}',
+ abstract: true,
+ resolve: {
+ mediafile: function(Mediafile, $stateParams) {
+ var id = $stateParams.id;
+ var file = Mediafile.find(id);
+ return file;
+ }
+ },
+ template: "",
+ })
+ .state('mediafiles.mediafile.detail.update', {
+ views: {
+ '@mediafiles.mediafile': {}
}
- },
- template: "",
- })
- .state('mediafiles.mediafile.detail.update', {
- views: {
- '@mediafiles.mediafile': {}
+ });
+ }
+])
+
+.controller('MediafileListCtrl', [
+ '$scope',
+ '$http',
+ '$timeout',
+ 'Upload',
+ 'Mediafile',
+ function($scope, $http, $timeout, Upload, Mediafile) {
+ Mediafile.bindAll({}, $scope, 'mediafiles');
+
+ // setup table sorting
+ $scope.sortColumn = 'title';
+ $scope.filterPresent = '';
+ $scope.reverse = false;
+ // function to sort by clicked column
+ $scope.toggleSort = function ( column ) {
+ if ( $scope.sortColumn === column ) {
+ $scope.reverse = !$scope.reverse;
}
- });
-})
+ $scope.sortColumn = column;
+ };
-.controller('MediafileListCtrl', function($scope, $http, $timeout, Upload, Mediafile) {
- Mediafile.bindAll({}, $scope, 'mediafiles');
-
- // setup table sorting
- $scope.sortColumn = 'title';
- $scope.filterPresent = '';
- $scope.reverse = false;
- // function to sort by clicked column
- $scope.toggleSort = function ( column ) {
- if ( $scope.sortColumn === column ) {
- $scope.reverse = !$scope.reverse;
- }
- $scope.sortColumn = column;
- };
-
- // delete
- $scope.delete = function (mediafile) {
- //TODO: add confirm message
- Mediafile.destroy(mediafile.id).then(
- function(success) {
- //TODO: success message
- }
- );
- };
-})
+ // delete
+ $scope.delete = function (mediafile) {
+ //TODO: add confirm message
+ Mediafile.destroy(mediafile.id).then(
+ function(success) {
+ //TODO: success message
+ }
+ );
+ };
+ }
+])
.controller('MediafileCreateCtrl', [
'$scope',
diff --git a/openslides/motions/static/js/motions/base.js b/openslides/motions/static/js/motions/base.js
index 6f69ff070..71193a3d5 100644
--- a/openslides/motions/static/js/motions/base.js
+++ b/openslides/motions/static/js/motions/base.js
@@ -298,12 +298,18 @@ angular.module('OpenSlidesApp.motions', ['OpenSlidesApp.users'])
}
])
-.factory('Category', ['DS', function(DS) {
- return DS.defineResource({
- name: 'motions/category',
- });
-}])
-
-.run(['Motion', 'Category', function(Motion, Category) {}]);
+.factory('Category', [
+ 'DS',
+ function(DS) {
+ return DS.defineResource({
+ name: 'motions/category',
+ });
+ }
+])
+.run([
+ 'Motion',
+ 'Category',
+ function(Motion, Category) {}
+]);
}());
diff --git a/openslides/motions/static/js/motions/projector.js b/openslides/motions/static/js/motions/projector.js
index 923f34cae..77114d240 100644
--- a/openslides/motions/static/js/motions/projector.js
+++ b/openslides/motions/static/js/motions/projector.js
@@ -4,20 +4,28 @@
angular.module('OpenSlidesApp.motions.projector', ['OpenSlidesApp.motions'])
-.config(function(slidesProvider) {
- slidesProvider.registerSlide('motions/motion', {
- template: 'static/templates/motions/slide_motion.html',
- });
-})
+.config([
+ 'slidesProvider',
+ function(slidesProvider) {
+ slidesProvider.registerSlide('motions/motion', {
+ template: 'static/templates/motions/slide_motion.html',
+ });
+ }
+])
-.controller('SlideMotionCtrl', function($scope, Motion, User) {
- // Attention! Each object that is used here has to be dealt on server side.
- // Add it to the coresponding get_requirements method of the ProjectorElement
- // class.
- var id = $scope.element.id;
- Motion.find(id);
- User.findAll();
- Motion.bindOne(id, $scope, 'motion');
-});
+.controller('SlideMotionCtrl', [
+ '$scope',
+ 'Motion',
+ 'User',
+ function($scope, Motion, User) {
+ // Attention! Each object that is used here has to be dealt on server side.
+ // Add it to the coresponding get_requirements method of the ProjectorElement
+ // class.
+ var id = $scope.element.id;
+ Motion.find(id);
+ User.findAll();
+ Motion.bindOne(id, $scope, 'motion');
+ }
+]);
}());
diff --git a/openslides/motions/static/js/motions/site.js b/openslides/motions/static/js/motions/site.js
index de1a9576a..5689bc0be 100644
--- a/openslides/motions/static/js/motions/site.js
+++ b/openslides/motions/static/js/motions/site.js
@@ -18,121 +18,124 @@ angular.module('OpenSlidesApp.motions.site', ['OpenSlidesApp.motions'])
}
])
-.config(function($stateProvider) {
- $stateProvider
- .state('motions', {
- url: '/motions',
- abstract: true,
- template: "",
- })
- .state('motions.motion', {
- abstract: true,
- template: "",
- })
- .state('motions.motion.list', {
- resolve: {
- motions: function(Motion) {
- return Motion.findAll();
- },
- categories: function(Category) {
- return Category.findAll();
- },
- tags: function(Tag) {
- return Tag.findAll();
- },
- users: function(User) {
- return User.findAll();
- },
- workflows: function(Workflow) {
- return Workflow.findAll();
+.config([
+ '$stateProvider',
+ function($stateProvider) {
+ $stateProvider
+ .state('motions', {
+ url: '/motions',
+ abstract: true,
+ template: "",
+ })
+ .state('motions.motion', {
+ abstract: true,
+ template: "",
+ })
+ .state('motions.motion.list', {
+ resolve: {
+ motions: function(Motion) {
+ return Motion.findAll();
+ },
+ categories: function(Category) {
+ return Category.findAll();
+ },
+ tags: function(Tag) {
+ return Tag.findAll();
+ },
+ users: function(User) {
+ return User.findAll();
+ },
+ workflows: function(Workflow) {
+ return Workflow.findAll();
+ }
}
- }
- })
- .state('motions.motion.detail', {
- resolve: {
- motion: function(Motion, $stateParams) {
- return Motion.find($stateParams.id);
- },
- categories: function(Category) {
- return Category.findAll();
- },
- users: function(User) {
- return User.findAll();
- },
- mediafiles: function(Mediafile) {
- return Mediafile.findAll();
- },
- tags: function(Tag) {
- return Tag.findAll();
+ })
+ .state('motions.motion.detail', {
+ resolve: {
+ motion: function(Motion, $stateParams) {
+ return Motion.find($stateParams.id);
+ },
+ categories: function(Category) {
+ return Category.findAll();
+ },
+ users: function(User) {
+ return User.findAll();
+ },
+ mediafiles: function(Mediafile) {
+ return Mediafile.findAll();
+ },
+ tags: function(Tag) {
+ return Tag.findAll();
+ }
}
- }
- })
- // redirects to motion detail and opens motion edit form dialog, uses edit url,
- // used by ui-sref links from agenda only
- // (from motion controller use MotionForm factory instead to open dialog in front of
- // current view without redirect)
- .state('motions.motion.detail.update', {
- onEnter: ['$stateParams', '$state', 'ngDialog', 'Motion',
- function($stateParams, $state, ngDialog, Motion) {
- ngDialog.open({
- template: 'static/templates/motions/motion-form.html',
- controller: 'MotionUpdateCtrl',
- className: 'ngdialog-theme-default wide-form',
- closeByEscape: false,
- closeByDocument: false,
- resolve: {
- motion: function() {return Motion.find($stateParams.id)}
- },
- preCloseCallback: function() {
- $state.go('motions.motion.detail', {motion: $stateParams.id});
- return true;
- }
- });
+ })
+ // redirects to motion detail and opens motion edit form dialog, uses edit url,
+ // used by ui-sref links from agenda only
+ // (from motion controller use MotionForm factory instead to open dialog in front of
+ // current view without redirect)
+ .state('motions.motion.detail.update', {
+ onEnter: ['$stateParams', '$state', 'ngDialog', 'Motion',
+ function($stateParams, $state, ngDialog, Motion) {
+ ngDialog.open({
+ template: 'static/templates/motions/motion-form.html',
+ controller: 'MotionUpdateCtrl',
+ className: 'ngdialog-theme-default wide-form',
+ closeByEscape: false,
+ closeByDocument: false,
+ resolve: {
+ motion: function() {return Motion.find($stateParams.id)}
+ },
+ preCloseCallback: function() {
+ $state.go('motions.motion.detail', {motion: $stateParams.id});
+ return true;
+ }
+ });
+ }
+ ]
+ })
+ .state('motions.motion.import', {
+ url: '/import',
+ controller: 'MotionImportCtrl',
+ resolve: {
+ motions: function(Motion) {
+ return Motion.findAll();
+ },
+ categories: function(Category) {
+ return Category.findAll();
+ },
+ users: function(User) {
+ return User.findAll();
+ }
}
- ]
- })
- .state('motions.motion.import', {
- url: '/import',
- controller: 'MotionImportCtrl',
- resolve: {
- motions: function(Motion) {
- return Motion.findAll();
- },
- categories: function(Category) {
- return Category.findAll();
- },
- users: function(User) {
- return User.findAll();
+ })
+ // categories
+ .state('motions.category', {
+ url: '/category',
+ abstract: true,
+ template: "",
+ })
+ .state('motions.category.list', {
+ resolve: {
+ categories: function(Category) {
+ return Category.findAll();
+ }
}
- }
- })
- // categories
- .state('motions.category', {
- url: '/category',
- abstract: true,
- template: "",
- })
- .state('motions.category.list', {
- resolve: {
- categories: function(Category) {
- return Category.findAll();
+ })
+ .state('motions.category.create', {})
+ .state('motions.category.detail', {
+ resolve: {
+ category: function(Category, $stateParams) {
+ return Category.find($stateParams.id);
+ }
}
- }
- })
- .state('motions.category.create', {})
- .state('motions.category.detail', {
- resolve: {
- category: function(Category, $stateParams) {
- return Category.find($stateParams.id);
+ })
+ .state('motions.category.detail.update', {
+ views: {
+ '@motions.category': {}
}
- }
- })
- .state('motions.category.detail.update', {
- views: {
- '@motions.category': {}
- }
- });
-})
+ });
+ }
+])
// Service for generic motion form (create and update)
.factory('MotionForm', [
@@ -874,50 +877,70 @@ angular.module('OpenSlidesApp.motions.site', ['OpenSlidesApp.motions'])
])
-.controller('CategoryListCtrl', function($scope, Category) {
- Category.bindAll({}, $scope, 'categories');
+.controller('CategoryListCtrl', [
+ '$scope',
+ 'Category',
+ function($scope, Category) {
+ Category.bindAll({}, $scope, 'categories');
- // setup table sorting
- $scope.sortColumn = 'name';
- $scope.reverse = false;
- // function to sort by clicked column
- $scope.toggleSort = function ( column ) {
- if ( $scope.sortColumn === column ) {
- $scope.reverse = !$scope.reverse;
- }
- $scope.sortColumn = column;
- };
-
- // delete selected category
- $scope.delete = function (category) {
- Category.destroy(category.id);
- };
-})
-
-.controller('CategoryDetailCtrl', function($scope, Category, category) {
- Category.bindOne(category.id, $scope, 'category');
-})
-
-.controller('CategoryCreateCtrl', function($scope, $state, Category) {
- $scope.category = {};
- $scope.save = function (category) {
- Category.create(category).then(
- function(success) {
- $state.go('motions.category.list');
+ // setup table sorting
+ $scope.sortColumn = 'name';
+ $scope.reverse = false;
+ // function to sort by clicked column
+ $scope.toggleSort = function ( column ) {
+ if ( $scope.sortColumn === column ) {
+ $scope.reverse = !$scope.reverse;
}
- );
- };
-})
+ $scope.sortColumn = column;
+ };
-.controller('CategoryUpdateCtrl', function($scope, $state, Category, category) {
- $scope.category = category;
- $scope.save = function (category) {
- Category.save(category).then(
- function(success) {
- $state.go('motions.category.list');
- }
- );
- };
-});
+ // delete selected category
+ $scope.delete = function (category) {
+ Category.destroy(category.id);
+ };
+ }
+])
+
+.controller('CategoryDetailCtrl', [
+ '$scope',
+ 'Category',
+ 'category',
+ function($scope, Category, category) {
+ Category.bindOne(category.id, $scope, 'category');
+ }
+])
+
+.controller('CategoryCreateCtrl', [
+ '$scope',
+ '$state',
+ 'Category',
+ function($scope, $state, Category) {
+ $scope.category = {};
+ $scope.save = function (category) {
+ Category.create(category).then(
+ function(success) {
+ $state.go('motions.category.list');
+ }
+ );
+ };
+ }
+])
+
+.controller('CategoryUpdateCtrl', [
+ '$scope',
+ '$state',
+ 'Category',
+ 'category',
+ function($scope, $state, Category, category) {
+ $scope.category = category;
+ $scope.save = function (category) {
+ Category.save(category).then(
+ function(success) {
+ $state.go('motions.category.list');
+ }
+ );
+ };
+ }
+]);
}());
diff --git a/openslides/users/static/js/users/base.js b/openslides/users/static/js/users/base.js
index 6f6e37ca6..1c6b34a98 100644
--- a/openslides/users/static/js/users/base.js
+++ b/openslides/users/static/js/users/base.js
@@ -60,80 +60,92 @@ angular.module('OpenSlidesApp.users', [])
}
])
-.factory('User', ['DS', 'Group', 'jsDataModel', function(DS, Group, jsDataModel) {
- var name = 'users/user';
- return DS.defineResource({
- name: name,
- useClass: jsDataModel,
- computed: {
- full_name: function () {
- return this.get_full_name();
+.factory('User', [
+ 'DS',
+ 'Group',
+ 'jsDataModel',
+ function(DS, Group, jsDataModel) {
+ var name = 'users/user';
+ return DS.defineResource({
+ name: name,
+ useClass: jsDataModel,
+ computed: {
+ full_name: function () {
+ return this.get_full_name();
+ },
+ short_name: function () {
+ return this.get_short_name();
+ },
},
- short_name: function () {
- return this.get_short_name();
- },
- },
- methods: {
- getResourceName: function () {
- return name;
- },
- get_short_name: function() {
- // should be the same as in the python user model.
- var firstName = _.trim(this.first_name),
- lastName = _.trim(this.last_name),
- name;
+ methods: {
+ getResourceName: function () {
+ return name;
+ },
+ get_short_name: function() {
+ // should be the same as in the python user model.
+ var firstName = _.trim(this.first_name),
+ lastName = _.trim(this.last_name),
+ name;
- if (firstName && lastName) {
- // TODO: check config
- name = [firstName, lastName].join(' ');
- } else {
- name = firstName || lastName || this.username;
- }
- return name;
- },
- get_full_name: function() {
- // should be the same as in the python user model.
- var firstName = _.trim(this.first_name),
- lastName = _.trim(this.last_name),
- structure_level = _.trim(this.structure_level),
- name;
-
- if (firstName && lastName) {
- // TODO: check config
- name = [firstName, lastName].join(' ');
- } else {
- name = firstName || lastName || this.username;
- }
- if (structure_level) {
- name = name + " (" + structure_level + ")";
- }
- return name;
- },
- getPerms: function() {
- var allPerms = [];
- var allGroups = this.groups;
- // Add registered group
- allGroups.push(2);
- _.forEach(allGroups, function(groupId) {
- var group = Group.get(groupId);
- if (group) {
- _.forEach(group.permissions, function(perm) {
- allPerms.push(perm);
- });
+ if (firstName && lastName) {
+ // TODO: check config
+ name = [firstName, lastName].join(' ');
+ } else {
+ name = firstName || lastName || this.username;
}
- });
- return _.uniq(allPerms);
+ return name;
+ },
+ get_full_name: function() {
+ // should be the same as in the python user model.
+ var firstName = _.trim(this.first_name),
+ lastName = _.trim(this.last_name),
+ structure_level = _.trim(this.structure_level),
+ name;
+
+ if (firstName && lastName) {
+ // TODO: check config
+ name = [firstName, lastName].join(' ');
+ } else {
+ name = firstName || lastName || this.username;
+ }
+ if (structure_level) {
+ name = name + " (" + structure_level + ")";
+ }
+ return name;
+ },
+ getPerms: function() {
+ var allPerms = [];
+ var allGroups = this.groups;
+ // Add registered group
+ allGroups.push(2);
+ _.forEach(allGroups, function(groupId) {
+ var group = Group.get(groupId);
+ if (group) {
+ _.forEach(group.permissions, function(perm) {
+ allPerms.push(perm);
+ });
+ }
+ });
+ return _.uniq(allPerms);
+ },
},
- },
- });
-}])
+ });
+ }
+])
-.factory('Group', ['DS', function(DS) {
- return DS.defineResource({
- name: 'users/group',
- });
-}])
+.factory('Group', [
+ 'DS',
+ function(DS) {
+ return DS.defineResource({
+ name: 'users/group',
+ });
+ }
+])
-.run(['User', 'Group', function(User, Group) {}]);
+.run([
+ 'User',
+ 'Group',
+ function(User, Group) {}
+]);
}());
diff --git a/openslides/users/static/js/users/projector.js b/openslides/users/static/js/users/projector.js
index c375c0259..f7f085b7f 100644
--- a/openslides/users/static/js/users/projector.js
+++ b/openslides/users/static/js/users/projector.js
@@ -4,19 +4,26 @@
angular.module('OpenSlidesApp.users.projector', ['OpenSlidesApp.users'])
-.config(function(slidesProvider) {
- slidesProvider.registerSlide('users/user', {
- template: 'static/templates/users/slide_user.html',
- });
-})
+.config([
+ 'slidesProvider',
+ function(slidesProvider) {
+ slidesProvider.registerSlide('users/user', {
+ template: 'static/templates/users/slide_user.html',
+ });
+ }
+])
-.controller('SlideUserCtrl', function($scope, User) {
- // Attention! Each object that is used here has to be dealt on server side.
- // Add it to the coresponding get_requirements method of the ProjectorElement
- // class.
- var id = $scope.element.id;
- User.find(id);
- User.bindOne(id, $scope, 'user');
-});
+.controller('SlideUserCtrl', [
+ '$scope',
+ 'User',
+ function($scope, User) {
+ // Attention! Each object that is used here has to be dealt on server side.
+ // Add it to the coresponding get_requirements method of the ProjectorElement
+ // class.
+ var id = $scope.element.id;
+ User.find(id);
+ User.bindOne(id, $scope, 'user');
+ }
+]);
}());
diff --git a/openslides/users/static/js/users/site.js b/openslides/users/static/js/users/site.js
index aa3b49075..206381689 100644
--- a/openslides/users/static/js/users/site.js
+++ b/openslides/users/static/js/users/site.js
@@ -18,120 +18,123 @@ angular.module('OpenSlidesApp.users.site', ['OpenSlidesApp.users'])
}
])
-.config(function($stateProvider) {
- $stateProvider
- .state('users', {
- url: '/users',
- abstract: true,
- template: "",
- })
- .state('users.user', {
- abstract: true,
- template: "",
- })
- .state('users.user.list', {
- resolve: {
- users: function(User) {
- return User.findAll();
- }
- }
- })
- .state('users.user.create', {
- resolve: {
- groups: function(Group) {
- return Group.findAll();
- }
- }
- })
- .state('users.user.detail', {
- resolve: {
- user: function(User, $stateParams) {
- return User.find($stateParams.id);
- },
- groups: function(Group) {
- return Group.findAll();
- }
- }
- })
- .state('users.user.detail.profile', {
- views: {
- '@users.user': {},
- },
- url: '/profile',
- controller: 'UserProfileCtrl',
- })
- .state('users.user.detail.password', {
- views: {
- '@users.user': {},
- },
- url: '/password',
- controller: 'UserPasswordCtrl',
- })
- .state('users.user.import', {
- url: '/import',
- controller: 'UserImportCtrl',
- resolve: {
- groups: function(Group) {
- return Group.findAll();
- }
- }
- })
- // groups
- .state('users.group', {
- url: '/groups',
- abstract: true,
- template: "",
- })
- .state('users.group.list', {
- resolve: {
- groups: function(Group) {
- return Group.findAll();
- }
- }
- })
- .state('users.group.create', {
- resolve: {
- permissions: function($http) {
- return $http({ 'method': 'OPTIONS', 'url': '/rest/users/group/' });
- }
- }
- })
- .state('users.group.detail', {
- resolve: {
- group: function(Group, $stateParams) {
- return Group.find($stateParams.id);
- }
- }
- })
- .state('users.group.detail.update', {
- views: {
- '@users.group': {}
- },
- resolve: {
- permissions: function($http) {
- return $http({ 'method': 'OPTIONS', 'url': '/rest/users/group/' });
- }
- }
- })
- .state('login', {
- template: null,
- url: '/login',
- params: { guest_enabled: false },
- onEnter: ['$state', '$stateParams', 'ngDialog', function($state, $stateParams, ngDialog) {
- ngDialog.open({
- template: 'static/templates/core/login-form.html',
- controller: 'LoginFormCtrl',
- showClose: $stateParams.guest_enabled,
- closeByEscape: $stateParams.guest_enabled,
- closeByDocument: $stateParams.guest_enabled,
- preCloseCallback: function() {
- $state.go('dashboard');
- return true;
+.config([
+ '$stateProvider',
+ function($stateProvider) {
+ $stateProvider
+ .state('users', {
+ url: '/users',
+ abstract: true,
+ template: "",
+ })
+ .state('users.user', {
+ abstract: true,
+ template: "",
+ })
+ .state('users.user.list', {
+ resolve: {
+ users: function(User) {
+ return User.findAll();
}
- });
- }]
- });
-})
+ }
+ })
+ .state('users.user.create', {
+ resolve: {
+ groups: function(Group) {
+ return Group.findAll();
+ }
+ }
+ })
+ .state('users.user.detail', {
+ resolve: {
+ user: function(User, $stateParams) {
+ return User.find($stateParams.id);
+ },
+ groups: function(Group) {
+ return Group.findAll();
+ }
+ }
+ })
+ .state('users.user.detail.profile', {
+ views: {
+ '@users.user': {},
+ },
+ url: '/profile',
+ controller: 'UserProfileCtrl',
+ })
+ .state('users.user.detail.password', {
+ views: {
+ '@users.user': {},
+ },
+ url: '/password',
+ controller: 'UserPasswordCtrl',
+ })
+ .state('users.user.import', {
+ url: '/import',
+ controller: 'UserImportCtrl',
+ resolve: {
+ groups: function(Group) {
+ return Group.findAll();
+ }
+ }
+ })
+ // groups
+ .state('users.group', {
+ url: '/groups',
+ abstract: true,
+ template: "",
+ })
+ .state('users.group.list', {
+ resolve: {
+ groups: function(Group) {
+ return Group.findAll();
+ }
+ }
+ })
+ .state('users.group.create', {
+ resolve: {
+ permissions: function($http) {
+ return $http({ 'method': 'OPTIONS', 'url': '/rest/users/group/' });
+ }
+ }
+ })
+ .state('users.group.detail', {
+ resolve: {
+ group: function(Group, $stateParams) {
+ return Group.find($stateParams.id);
+ }
+ }
+ })
+ .state('users.group.detail.update', {
+ views: {
+ '@users.group': {}
+ },
+ resolve: {
+ permissions: function($http) {
+ return $http({ 'method': 'OPTIONS', 'url': '/rest/users/group/' });
+ }
+ }
+ })
+ .state('login', {
+ template: null,
+ url: '/login',
+ params: { guest_enabled: false },
+ onEnter: ['$state', '$stateParams', 'ngDialog', function($state, $stateParams, ngDialog) {
+ ngDialog.open({
+ template: 'static/templates/core/login-form.html',
+ controller: 'LoginFormCtrl',
+ showClose: $stateParams.guest_enabled,
+ closeByEscape: $stateParams.guest_enabled,
+ closeByDocument: $stateParams.guest_enabled,
+ preCloseCallback: function() {
+ $state.go('dashboard');
+ return true;
+ }
+ });
+ }]
+ });
+ }
+])
.run([
'operator',