working on own pictos modal

parent 34ac69c7
...@@ -17,7 +17,8 @@ dashboardControllers.controller('AddPictoCtrl', function ( ...@@ -17,7 +17,8 @@ dashboardControllers.controller('AddPictoCtrl', function (
ngToast, ngToast,
config, config,
supervisor, supervisor,
student) { student,
onlyOwn) {
$scope.source = 'symbolstx'; $scope.source = 'symbolstx';
$scope.pictos = []; // Pictos to show with infinite sroll $scope.pictos = []; // Pictos to show with infinite sroll
...@@ -26,9 +27,15 @@ dashboardControllers.controller('AddPictoCtrl', function ( ...@@ -26,9 +27,15 @@ dashboardControllers.controller('AddPictoCtrl', function (
$scope.symbolstxCats = []; $scope.symbolstxCats = [];
$scope.breadcrumbs = []; $scope.breadcrumbs = [];
$scope.loadingCatPictos = false; $scope.loadingCatPictos = false;
$scope.radioModel = 'Middle'; $scope.radioModel = 'Middle';
$scope.onlyOwn = onlyOwn;
if (onlyOwn)
$scope.source = 'ownpictos';
/*
* Get data about SymbolStix
*/
if (!onlyOwn) { // only if the modal will allow to select SymbolStix pictos
$scope.breadcrumbs.push({ $scope.breadcrumbs.push({
id: 0, id: 0,
exp: 'Inicio', exp: 'Inicio',
...@@ -56,6 +63,7 @@ dashboardControllers.controller('AddPictoCtrl', function ( ...@@ -56,6 +63,7 @@ dashboardControllers.controller('AddPictoCtrl', function (
ngToast.danger({ content: translation }); ngToast.danger({ content: translation });
}); });
}); });
}
// //
// Load pictos from a category // Load pictos from a category
...@@ -88,7 +96,7 @@ dashboardControllers.controller('AddPictoCtrl', function ( ...@@ -88,7 +96,7 @@ dashboardControllers.controller('AddPictoCtrl', function (
}; };
// //
// Load pictos from owned by the actual supervisor // Load pictos owned by the actual supervisor
// //
$scope.load_own_pictos = function () { $scope.load_own_pictos = function () {
$scope.source = 'ownpictos'; $scope.source = 'ownpictos';
...@@ -208,7 +216,7 @@ dashboardControllers.controller('AddPictoCtrl', function ( ...@@ -208,7 +216,7 @@ dashboardControllers.controller('AddPictoCtrl', function (
picto.expressions = []; picto.expressions = [];
$scope.open_exp(picto, () => { $scope.open_exp(picto, () => {
$scope.pictos.push(picto); $scope.pictos.push(picto);
$scope.load_own_pictos(); load_own_pictos();
cb(); cb();
}); });
}); });
...@@ -238,6 +246,7 @@ dashboardControllers.controller('AddPictoCtrl', function ( ...@@ -238,6 +246,7 @@ dashboardControllers.controller('AddPictoCtrl', function (
} }
} }
if (!$scope.onlyOwn) {
// websocket emit vocabulary delete action // websocket emit vocabulary delete action
io.socket.post('/stu/vocabulary', { io.socket.post('/stu/vocabulary', {
action: 'delete', action: 'delete',
...@@ -246,6 +255,7 @@ dashboardControllers.controller('AddPictoCtrl', function ( ...@@ -246,6 +255,7 @@ dashboardControllers.controller('AddPictoCtrl', function (
stu_picto: pictoId stu_picto: pictoId
} }
}, function () {}); }, function () {});
}
}) })
.error(function () {}); .error(function () {});
......
...@@ -359,9 +359,13 @@ dashboardControllers.controller('StudentCollectionsCtrl', function StudentCollec ...@@ -359,9 +359,13 @@ dashboardControllers.controller('StudentCollectionsCtrl', function StudentCollec
}, },
supervisor: function () { supervisor: function () {
return $scope.user; return $scope.user;
},
onlyOwn: function () {
return false;
} }
} }
}); });
// Returned data from the modal window // Returned data from the modal window
modalInstance.result.then(function (pictoId) { modalInstance.result.then(function (pictoId) {
......
...@@ -5,11 +5,12 @@ ...@@ -5,11 +5,12 @@
<button type="button" class="close" ng-click="close()"> <button type="button" class="close" ng-click="close()">
<span aria-hidden="true">&times;</span><span class="sr-only" translate>close</span> <span aria-hidden="true">&times;</span><span class="sr-only" translate>close</span>
</button> </button>
<h4 class="modal-title" id="myModalLabel" translate>add_picto</h4> <h4 class="modal-title" id="myModalLabel" translate ng-show="!onlyOwn">add_picto</h4>
<h4 class="modal-title" id="myModalLabel" translate ng-show="onlyOwn">own_pictos</h4>
<hr> <hr>
<div class="btn-group"> <div class="btn-group" ng-show="!onlyOwn">
<button class="btn btn-default" btn-radio="'symbolstx'" ng-model="source" ng-click="open_category_from_bc('0')"> <button class="btn btn-default" btn-radio="'symbolstx'" ng-model="source" ng-click="open_category_from_bc('0')">
<span class="glyphicon glyphicon-th"></span> SymbolStix <span class="glyphicon glyphicon-th"></span> SymbolStix
</button> </button>
...@@ -21,7 +22,7 @@ ...@@ -21,7 +22,7 @@
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div ng-show="source == 'symbolstx'" class="panel panel-default" id="bread_and_categories"> <div ng-show="source == 'symbolstx' && !onlyOwn" class="panel panel-default" id="bread_and_categories">
<div class="panel-heading"> <div class="panel-heading">
<div class="pull-left" ng-repeat="b in breadcrumbs"> <div class="pull-left" ng-repeat="b in breadcrumbs">
<a ng-click="open_category_from_bc(b.id)"> <a ng-click="open_category_from_bc(b.id)">
...@@ -43,7 +44,6 @@ ...@@ -43,7 +44,6 @@
<alert ng-show="alert.show" ng-model="alert" type="{{alert.type}}" close="closeAlert()">{{alert.msg | translate}}</alert> <alert ng-show="alert.show" ng-model="alert" type="{{alert.type}}" close="closeAlert()">{{alert.msg | translate}}</alert>
</div> </div>
<div class="row" ng-show="source != 'newfile'" >
<div id="collections" class="col-md-12 category-collection" <div id="collections" class="col-md-12 category-collection"
ng-class="{ 'category-collection-loading': loadingCatPictos }" ng-class="{ 'category-collection-loading': loadingCatPictos }"
data-loading="{{ 'loading_pictos' | translate }}"> data-loading="{{ 'loading_pictos' | translate }}">
...@@ -90,39 +90,6 @@ ...@@ -90,39 +90,6 @@
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
</div> </div>
</div>
<!-- crop view -->
<div id="crop_area" ng-show="source == 'newfile'">
<div class="row">
<div class="col-md-8">
<div ngf-drop ng-model="picFile" ngf-pattern="image/*" class="cropArea">
<img-crop
image="picFile | ngfDataUrl"
result-image="croppedDataUrl" ng-init="croppedDataUrl=''"
area-type="square"
result-image-size="200"
>
</img-crop>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<img ng-src="{{ croppedDataUrl }}" />
</div>
<div class="form-group">
<button class="btn btn-default" ng-click="upload(croppedDataUrl, picFile.name)" ng-model="picFile" accept="image/*">
<span class="glyphicon glyphicon-upload"></span> {{ 'upload_image' | translate }}
</button>
</div>
<div class="form-group">
<span class="progress" ng-show="progress >= 0">
<div style="width:{{progress}}%" ng-bind="progress + '%'"></div>
</span>
</div>
</div>
</div>
</div>
</div> <!-- /modal-body --> </div> <!-- /modal-body -->
......
/* global dashboardControllers */
'use strict';
// Please note that $modalInstance represents a modal window (instance) dependency.
// It is not the same as the $modal service used above.
dashboardControllers.controller('OwnPictosCtrl', function (
$scope,
$http,
config,
$window,
$location,
$modal,
$modalInstance,
$translate,
supervisor,
student
) {
//Data
$scope.studentData = student;
$scope.supervisor = supervisor;
$scope.source = 'ownpictos';
//Supervisor pictos
$http.get(config.backend + '/sup/' + $scope.supervisor.id + '/pictos')
.success(function (data) {
if (data) {
$scope.pictos = data;
} else {
$scope.pictos = [];
}
})
.error(function () {
$translate('error_loading_pictos').then(function (translation) {
ngToast.danger({ content: translation });
});
});
//Add own picto
$scope.addOwnPicto = function () {
$scope.progress = 0;
var modalInstance = $modal.open({
animation: true,
templateUrl: 'modules/common/views/cropimg.html',
controller: 'CropImgCtrl',
size: 'lg',
resolve: {
picFile: () => {return $scope.picFile;},
uploadFunc: () => {return $scope.upload;},
progress: () => {return $scope.progress;}
}
});
modalInstance.result.then(function () {});
};
// Delete own picto
$scope.removeOwnPicto = function (pictoId) {
$translate('confirmation').then(t => {
if ($window.confirm(t))
$http.delete(config.backend + '/picto/' + pictoId)
.success(function () {
var i;
for (i = 0; i < $scope.pictos.length; i++) {
if (pictoId === $scope.pictos[i].id) {
$scope.pictos.splice(i, 1);
}
}
// websocket emit vocabulary delete action
io.socket.post('/stu/vocabulary', {
action: 'delete',
attributes: {
stu_picto: pictoId
}
}, function () {});
})
.error(function () {});
});
};
//Modal interaction
$scope.close = function (pictoId) {
$modalInstance.close(pictoId);
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
};
});
...@@ -50,18 +50,22 @@ dashboardControllers.controller('SupervisorCtrl', function SupervisorCtrl( ...@@ -50,18 +50,22 @@ dashboardControllers.controller('SupervisorCtrl', function SupervisorCtrl(
$scope.own_pictos = function () { $scope.own_pictos = function () {
var modalInstance = $modal.open({ var modalInstance = $modal.open({
animation: true, animation: true,
templateUrl: 'modules/supervisor/views/own_pictos.html', templateUrl: 'modules/student/views/addpicto.html',
controller: 'OwnPictosCtrl', controller: 'AddPictoCtrl',
size: 'lg', size: 'lg',
resolve: { resolve: {
student: function () { student: function () {
return $scope.studentData; return null;
}, },
supervisor: function () { supervisor: function () {
return $scope.user; return $scope.user;
},
onlyOwn: function () {
return true;
} }
} }
}); });
}; }
}); });
<div>
<div class="modal-header">
<button type="button" class="close" ng-click="close()">
<span aria-hidden="true">&times;</span><span class="sr-only" translate>close</span>
</button>
<h4 class="modal-title" id="myModalLabel" translate>own_pictos</h4>
</div>
<div class="modal-body">
<div>
<alert ng-show="alert.show" ng-model="alert" type="{{alert.type}}" close="closeAlert()">{{alert.msg | translate}}</alert>
</div>
<div class="row" ng-show="source != 'newfile'" >
<div id="collections" class="col-md-12 category-collection"
ng-class="{ 'category-collection-loading': loadingCatPictos }"
data-loading="{{ 'loading_pictos' | translate }}">
<div ng-show="source == 'ownpictos'" class="input-group">
<button class="btn btn-success" ngf-select ng-model="picFile" accept="image/*" ngf-change="addOwnPicto()">
<span class="glyphicon glyphicon-folder-open"></span> {{ 'new_img' | translate }}
</button>
</div>
<hr>
<!-- Galería de pictos -->
<div id="clearfix-infiniteScroll-parent" infinite-scroll="scroll()"
infinite-scroll-container="'#collections'">
<div
class="picto_peq pull-left"
ng-repeat="p in pictos" >
<img ng-src="{{p.uri}}" popover="{{p.expressions[0].text}}" popover-trigger="mouseenter" />
<!-- Options to remove picto (Only for own pictos) -->
<div class="picto_options" ng-show="source == 'ownpictos'">
<a ng-click="removeOwnPicto(p.id)" class="picto_remove" title="{{ 'delete' | translate}}">
<span class="color_red glyphicon glyphicon-remove-circle" aria-hidden="true"></span>
</a>
</div>
</div>
</div>
<div class="clearfix"></div>
</div>
</div>
<!-- crop view -->
<div id="crop_area" ng-show="source == 'newfile'">
<div class="row">
<div class="col-md-8">
<div ngf-drop ng-model="picFile" ngf-pattern="image/*" class="cropArea">
<img-crop
image="picFile | ngfDataUrl"
result-image="croppedDataUrl" ng-init="croppedDataUrl=''"
area-type="square"
result-image-size="200"
>
</img-crop>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<img ng-src="{{ croppedDataUrl }}" />
</div>
<div class="form-group">
<button class="btn btn-default" ng-click="upload(croppedDataUrl, picFile.name)" ng-model="picFile" accept="image/*">
<span class="glyphicon glyphicon-upload"></span> {{ 'upload_image' | translate }}
</button>
</div>
<div class="form-group">
<span class="progress" ng-show="progress >= 0">
<div style="width:{{progress}}%" ng-bind="progress + '%'"></div>
</span>
</div>
</div>
</div>
</div>
</div> <!-- /modal-body -->
<div class="modal-footer">
<button class="btn btn-primary" ng-click="cancel()">{{ 'close' | translate }}</button>
</div>
</div>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment