1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-12-10 21:24:20 +01:00
fab-manager/app/assets/javascripts/controllers/admin/projects.js

255 lines
8.4 KiB
JavaScript
Raw Normal View History

/* eslint-disable
no-return-assign,
no-undef,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* DS207: Consider shorter variations of null checks
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
2018-11-21 11:08:53 +01:00
'use strict';
Application.Controllers.controller('AdminProjectsController', ['$scope', '$state', 'Component', 'Licence', 'Theme', 'componentsPromise', 'licencesPromise', 'themesPromise', '_t', 'Member', 'uiTourService', 'settingsPromise', 'growl',
function ($scope, $state, Component, Licence, Theme, componentsPromise, licencesPromise, themesPromise, _t, Member, uiTourService, settingsPromise, growl) {
2020-02-25 10:47:16 +01:00
// Materials list (plastic, wood ...)
2018-11-21 11:08:53 +01:00
$scope.components = componentsPromise;
// Licences list (Creative Common ...)
2018-11-21 11:08:53 +01:00
$scope.licences = licencesPromise;
// Themes list (cooking, sport ...)
2018-11-21 11:08:53 +01:00
$scope.themes = themesPromise;
2020-06-01 18:31:43 +02:00
// Application settings
$scope.allSettings = settingsPromise;
/**
* Saves a new component / Update an existing material to the server (form validation callback)
* @param data {Object} component name
* @param [id] {number} component id, in case of update
*/
$scope.saveComponent = function (data, id) {
if (id != null) {
2018-11-21 11:08:53 +01:00
return Component.update({ id }, data);
} else {
2018-11-21 11:08:53 +01:00
return Component.save(data, resp => $scope.components[$scope.components.length - 1].id = resp.id);
}
2018-11-21 11:08:53 +01:00
};
/**
* Deletes the component at the specified index
* @param index {number} component index in the $scope.components array
*/
$scope.removeComponent = function (index) {
2018-11-21 11:08:53 +01:00
Component.delete($scope.components[index]);
return $scope.components.splice(index, 1);
};
2015-05-05 03:10:25 +02:00
/**
* Creates a new empty entry in the $scope.components array
*/
$scope.addComponent = function () {
$scope.inserted = { name: '' };
$scope.components.push($scope.inserted);
2018-11-21 11:08:53 +01:00
};
2015-05-05 03:10:25 +02:00
/**
* Removes the newly inserted but not saved component / Cancel the current component modification
* @param rowform {Object} see http://vitalets.github.io/angular-xeditable/
* @param index {number} component index in the $scope.components array
*/
$scope.cancelComponent = function (rowform, index) {
if ($scope.components[index].id != null) {
2018-11-21 11:08:53 +01:00
return rowform.$cancel();
} else {
2018-11-21 11:08:53 +01:00
return $scope.components.splice(index, 1);
}
2018-11-21 11:08:53 +01:00
};
/**
* Saves a new theme / Update an existing theme to the server (form validation callback)
* @param data {Object} theme name
* @param [data] {number} theme id, in case of update
*/
$scope.saveTheme = function (data, id) {
if (id != null) {
2018-11-21 11:08:53 +01:00
return Theme.update({ id }, data);
} else {
2018-11-21 11:08:53 +01:00
return Theme.save(data, resp => $scope.themes[$scope.themes.length - 1].id = resp.id);
}
2018-11-21 11:08:53 +01:00
};
/**
* Deletes the theme at the specified index
* @param index {number} theme index in the $scope.themes array
*/
$scope.removeTheme = function (index) {
2018-11-21 11:08:53 +01:00
Theme.delete($scope.themes[index]);
return $scope.themes.splice(index, 1);
};
/**
* Creates a new empty entry in the $scope.themes array
*/
$scope.addTheme = function () {
$scope.inserted = { name: '' };
$scope.themes.push($scope.inserted);
2018-11-21 11:08:53 +01:00
};
/**
* Removes the newly inserted but not saved theme / Cancel the current theme modification
* @param rowform {Object} see http://vitalets.github.io/angular-xeditable/
* @param index {number} theme index in the $scope.themes array
*/
$scope.cancelTheme = function (rowform, index) {
if ($scope.themes[index].id != null) {
rowform.$cancel();
} else {
$scope.themes.splice(index, 1);
}
2018-11-21 11:08:53 +01:00
};
/**
* Saves a new licence / Update an existing licence to the server (form validation callback)
* @param data {Object} licence name and description
* @param [id] {number} licence id, in case of update
*/
$scope.saveLicence = function (data, id) {
if (id != null) {
2018-11-21 11:08:53 +01:00
return Licence.update({ id }, data);
} else {
2018-11-21 11:08:53 +01:00
return Licence.save(data, resp => $scope.licences[$scope.licences.length - 1].id = resp.id);
}
2018-11-21 11:08:53 +01:00
};
/**
* Deletes the licence at the specified index
* @param index {number} licence index in the $scope.licences array
*/
$scope.removeLicence = function (index) {
2018-11-21 11:08:53 +01:00
Licence.delete($scope.licences[index]);
return $scope.licences.splice(index, 1);
};
/**
* Creates a new empty entry in the $scope.licences array
*/
$scope.addLicence = function () {
$scope.inserted = {
name: '',
description: ''
2018-11-21 11:08:53 +01:00
};
return $scope.licences.push($scope.inserted);
};
/**
* Removes the newly inserted but not saved licence / Cancel the current licence modification
* @param rowform {Object} see http://vitalets.github.io/angular-xeditable/
* @param index {number} licence index in the $scope.licences array
*/
2020-02-25 10:47:16 +01:00
$scope.cancelLicence = function (rowform, index) {
if ($scope.licences[index].id != null) {
2018-11-21 11:08:53 +01:00
return rowform.$cancel();
} else {
2018-11-21 11:08:53 +01:00
return $scope.licences.splice(index, 1);
}
2018-11-21 11:08:53 +01:00
};
2020-02-25 10:47:16 +01:00
/**
* When a file is sent to the server to test it against its MIME type,
* handle the result of the test.
*/
$scope.onTestFileComplete = function (res) {
if (res) {
growl.success(_t('app.admin.projects.settings.file_is_TYPE', { TYPE: res.type }));
}
};
/**
* For use with 'ng-class', returns the CSS class name for the uploads previews.
* The preview may show a placeholder or the content of the file depending on the upload state.
* @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules)
*/
$scope.fileinputClass = function (v) {
if (v) {
return 'fileinput-exists';
} else {
return 'fileinput-new';
}
};
/**
* Remove the initial dot from the given extension, if any
* @param extension {String}
* @returns {String}
*/
$scope.removeInitialDot = function (extension) {
if (extension.substr(0, 1) === '.') return extension.substr(1);
return extension;
};
/**
* Setup the feature-tour for the admin/projects page.
2020-02-25 10:47:16 +01:00
* This is intended as a contextual help (when pressing F1)
*/
$scope.setupProjectElementsTour = function () {
// get the tour defined by the ui-tour directive
const uitour = uiTourService.getTourByName('projects');
2020-02-25 10:47:16 +01:00
uitour.createStep({
selector: 'body',
stepId: 'welcome',
order: 0,
title: _t('app.admin.tour.projects.welcome.title'),
content: _t('app.admin.tour.projects.welcome.content'),
2020-02-25 10:47:16 +01:00
placement: 'bottom',
orphan: true
});
uitour.createStep({
selector: '.heading .abuses-button',
stepId: 'abuses',
order: 1,
title: _t('app.admin.tour.projects.abuses.title'),
content: _t('app.admin.tour.projects.abuses.content'),
placement: 'bottom',
popupClass: 'shift-left-40'
2020-02-25 10:47:16 +01:00
});
uitour.createStep({
selector: 'body',
stepId: 'conclusion',
2020-02-25 11:06:03 +01:00
order: 2,
2020-02-25 10:47:16 +01:00
title: _t('app.admin.tour.conclusion.title'),
content: _t('app.admin.tour.conclusion.content'),
placement: 'bottom',
orphan: true
});
// on tour end, save the status in database
uitour.on('ended', function () {
if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile.tours.indexOf('projects') < 0) {
Member.completeTour({ id: $scope.currentUser.id }, { tour: 'projects' }, function (res) {
2020-02-25 10:47:16 +01:00
$scope.currentUser.profile.tours = res.tours;
});
}
});
// if the user has never seen the tour, show him now
if (settingsPromise.feature_tour_display !== 'manual' && $scope.currentUser.profile.tours.indexOf('projects') < 0) {
2020-02-25 10:47:16 +01:00
uitour.start();
}
};
/* PRIVATE SCOPE */
/**
* Kind of constructor: these actions will be realized first when the controller is loaded
*/
const initialize = function () {};
2020-02-25 10:47:16 +01:00
// !!! MUST BE CALLED AT THE END of the controller
return initialize();
}
2018-11-21 11:08:53 +01:00
]);