Commit 5f0948b6 by Pablo Molina

Solved #389, el click derecho es poco intuitivo

- Elminada dependencia ng-context-menu
- Añadido click izquierdo a la barra superior
- Añadido click izquierdo a las sesiones
- Añadido WorkingSessionController.create a las rutas y las politicas
- Añadido WorkingSessionController.update a las rutas y las politicas
- Eliminados estilos innecesarios
- Eliminados console.log de student controller session
parent c97cd0e0
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
"angular-timer": "~1.3.3", "angular-timer": "~1.3.3",
"humanize-duration": "~3.0.0", "humanize-duration": "~3.0.0",
"momentjs": "~2.10.3", "momentjs": "~2.10.3",
"ng-context-menu": "~1.0.1",
"ngtoast": "~1.5.4", "ngtoast": "~1.5.4",
"angular-animate": "~1.4.1", "angular-animate": "~1.4.1",
"angular-sanitize": "~1.4.1", "angular-sanitize": "~1.4.1",
......
'use strict'; /* global angular */
/* App Module */ 'use strict';
var dashboardApp = angular.module('dashboardApp', [ var dashboardApp = angular.module('dashboardApp', [
'ui.router', // This module enables PAC pattern 'ui.router',
'dashboardControllers', // PAC controllers (they are, actually, implemented under directives thanks to ui-router) 'dashboardControllers',
'dashboardServices', // HTTP interceptor for authentication tokens attachment and checking 'dashboardServices',
'dashboardDirectives', // simple directives to dragable elements and other stuff 'dashboardDirectives',
'pascalprecht.translate', 'pascalprecht.translate',
'reCAPTCHA', 'reCAPTCHA',
'ui.bootstrap', 'ui.bootstrap',
...@@ -15,52 +15,34 @@ var dashboardApp = angular.module('dashboardApp', [ ...@@ -15,52 +15,34 @@ var dashboardApp = angular.module('dashboardApp', [
'timer', 'timer',
'ngAnimate', 'ngAnimate',
'ngSanitize', 'ngSanitize',
'ngToast', // This is for pop-up notifications 'ngToast',
'ng-context-menu', 'chart.js',
'chart.js', // Interactive charts!
'ngLodash' 'ngLodash'
//'ngWebsocket'
//'ngImgCrop'
// angular-translate as a module load dependency for dashboardApp
]); ]);
/* Toast (notification) configuration */ /* Toast (notification) configuration */
dashboardApp.config(['ngToastProvider', function(ngToast) { dashboardApp.config(['ngToastProvider', function (ngToast) {
ngToast.configure({ ngToast.configure({
verticalPosition: 'top', verticalPosition: 'top',
horizontalPosition: 'center', horizontalPosition: 'center',
maxNumber: 3, maxNumber: 3,
animation: 'slide' animation: 'slide'
}); });
}]); }]);
dashboardApp.config(function($translateProvider) { dashboardApp.config(function ($translateProvider) {
/* i18n */
$translateProvider.useStaticFilesLoader({ $translateProvider.useStaticFilesLoader({
'prefix': '/app/i18n/', prefix: '/app/i18n/',
'suffix': '.json' suffix: '.json'
}); });
/* $translateProvider.preferredLanguage('es-es');
// Set preferred language to browser language
var lang = $window.navigator.language || $window.navigator.userLanguage;
if (lang === 'en-US')
lang = 'en-gb';
if (lang === 'es-ES')
lang = 'es-es';
*/$translateProvider.preferredLanguage('es-es');
//$translateProvider.determinePreferredLanguage();
}); });
/* /*
* ui-routes is used to implement a PAC pattern so views and related controllers are * ui-routes is used to implement a PAC pattern so views and related controllers are
* hierarchically arranged. * hierarchically arranged.
*
*/ */
dashboardApp.config(function ($stateProvider, $urlRouterProvider) {
dashboardApp.config(function($stateProvider, $urlRouterProvider) {
$stateProvider $stateProvider
.state('login', { .state('login', {
url: '/login', url: '/login',
...@@ -110,7 +92,7 @@ dashboardApp.config(function($stateProvider, $urlRouterProvider) { ...@@ -110,7 +92,7 @@ dashboardApp.config(function($stateProvider, $urlRouterProvider) {
templateUrl: 'modules/student/views/student.html', templateUrl: 'modules/student/views/student.html',
parent: 'supervisor', parent: 'supervisor',
controller: 'StudentCtrl', controller: 'StudentCtrl',
data: {studentData1: "tomate"}, data: { studentData1: 'tomate' },
abstract: true, abstract: true,
}) })
.state('student_collections', { .state('student_collections', {
...@@ -164,19 +146,13 @@ dashboardApp.config(function($stateProvider, $urlRouterProvider) { ...@@ -164,19 +146,13 @@ dashboardApp.config(function($stateProvider, $urlRouterProvider) {
; ;
$urlRouterProvider.otherwise('/login'); $urlRouterProvider.otherwise('/login');
}); });
/* reCAPTCHA */ /* reCAPTCHA */
dashboardApp.config(function (reCAPTCHAProvider) { dashboardApp.config(function (reCAPTCHAProvider) {
// required: please use your own key :)
reCAPTCHAProvider.setPublicKey('6LdkZwMTAAAAANDR_7_y9_ifEve1gLPcgneM_50o'); reCAPTCHAProvider.setPublicKey('6LdkZwMTAAAAANDR_7_y9_ifEve1gLPcgneM_50o');
// optional: gets passed into the Recaptcha.create call
reCAPTCHAProvider.setOptions({ reCAPTCHAProvider.setOptions({
theme: 'clean' theme: 'clean'
}); });
}); });
...@@ -184,24 +160,17 @@ dashboardApp.config(function (reCAPTCHAProvider) { ...@@ -184,24 +160,17 @@ dashboardApp.config(function (reCAPTCHAProvider) {
// New confirm service to avoid Firefox buggy confirm dialog window (which // New confirm service to avoid Firefox buggy confirm dialog window (which
// results in rootScope.inprog errors) // results in rootScope.inprog errors)
// //
dashboardApp.factory('newconfirm', function ($window, $q, $timeout) {
dashboardApp.factory("newconfirm", function ($window, $q, $timeout) { function newconfirm(message) {
var defer = $q.defer();
// Define promise-based confirm() method. $timeout(function () {
function newconfirm(message) { if ($window.confirm(message)) {
var defer = $q.defer(); defer.resolve(true);
} else {
$timeout(function () { defer.reject(false);
if ($window.confirm(message)) { }
defer.resolve(true); }, 0, false);
} return defer.promise;
else { }
defer.reject(false); return newconfirm;
}
}, 0, false);
return defer.promise;
}
return newconfirm;
}); });
<nav id="supervisor_header"class="navbar navbar-default" role="navigation"> <nav
<div class="container-fluid"> class="topbar navbar navbar-default"
<!-- Lo que se muestra en dispositivos móviles --> role="navigation">
<div class="container-fluid">
<div class="navbar-header"> <div class="navbar-header">
<button class="navbar-toggle" data-target=".navbar-ex6-collapse" data-toggle="collapse" type="button"> <a
<span class="sr-only">{{ 'expand_navigation' | translate }}</span> class="topbar__logo navbar-brand"
<!-- Un span por línea del icono de abrir menú --> href="/app/#/students">
<span class="icon-bar"></span> <img
<span class="icon-bar"></span> class="topbar__logo__image"
<span class="icon-bar"></span> src="img/logo_pictogram.png"
</button> alt="Pictogram"
<a class="navbar-brand" href="/app/#/students"><img src="img/logo_pictogram.png" alt="Pictogram" title="Pictogram" style="height: 50px;" /></a> title="Pictogram" />
</a>
</div> </div>
<div class="topbar__supervisor nav navbar-nav navbar-right">
<div class="dropdown">
<!-- Agrupar los enlaces de navegación, los formularios y cualquier otro elemento que se pueda ocultar al minimizar la barra --> <div class="topbar__supervisor__name">
<div class="collapse navbar-collapse navbar-ex6-collapse"> <div class="topbar__supervisor__name__fullname">{{user.getFullName()}}</div>
<div class="topbar__supervisor__name__office">{{user.office.name}}</div>
<div class="nav navbar-nav navbar-right thumbnail img_profile" context-menu data-target="menu-sup">
<img id="supervisor_profile" ng-src="{{user.pic}}" alt="Supervisor" title="Supervisor" />
</div> </div>
<div class="dropdown position-fixed" id="menu-sup" style="z-index:10"> <div
<ul class="dropdown-menu" role="menu"> class="topbar__supervisor__avatar thumbnail"
<li> data-toggle="dropdown"
<a class="pointer" role="menuitem" tabindex="0" href="/app/#/setup"> data-target="#">
<span class="glyphicon glyphicon-cog" aria-hidden="true"></span> {{ 'setup' | translate }} <img id="supervisor_profile" ng-src="{{user.pic}}" alt="Supervisor" title="Supervisor" />
</a>
</li>
<li>
<a class="pointer" role="menuitem" tabindex="0" ng-click="logout()">
<span class="glyphicon glyphicon-log-out" aria-hidden="true"></span> {{ 'logout' | translate }}
</a>
</li>
</ul>
</div>
<div class="nav navbar-nav navbar-right navbar-text">
<div class="text-right">{{user.getFullName()}}</div>
<div class="text-right">{{user.office.name}}</div>
</div> </div>
<ul class="dropdown-menu" role="menu">
<li>
<a class="pointer" role="menuitem" tabindex="0" href="/app/#/setup">
<i class="glyphicon glyphicon-cog" aria-hidden="true"></i>
{{ 'setup' | translate }}
</a>
</li>
<li>
<a class="pointer" role="menuitem" tabindex="0" ng-click="logout()">
<span class="glyphicon glyphicon-log-out" aria-hidden="true"></span>
{{ 'logout' | translate }}
</a>
</li>
</ul>
</div>
</div> </div>
</div> </div>
</nav> </nav>
\ No newline at end of file
...@@ -43,20 +43,6 @@ ...@@ -43,20 +43,6 @@
font-size: 30px; font-size: 30px;
} }
.img_profile{
width: 80px;
height: 80px;
}
.img_profile img{
width: 100%;
height: 100%;
}
.position-fixed {
position: fixed;
}
.padding8{ .padding8{
padding: 8px; padding: 8px;
} }
...@@ -181,20 +167,6 @@ tr:hover .ops a{ ...@@ -181,20 +167,6 @@ tr:hover .ops a{
margin-bottom: 70px; margin-bottom: 70px;
} }
/* Estilos para la cabecera del supervisor */
#supervisor_header{
margin-bottom: 5px;
}
#supervisor_header .img_profile{
margin-top: 10px;
margin-left: 10px;
margin-bottom: 0;
width: 50px;
height: 50px;
overflow: hidden;
}
/* Estilos para la cabecera del alumno */ /* Estilos para la cabecera del alumno */
#student_header{ #student_header{
background: #F5F5F3; background: #F5F5F3;
...@@ -510,11 +482,6 @@ textarea.editable{ ...@@ -510,11 +482,6 @@ textarea.editable{
margin-top: 10px; margin-top: 10px;
} }
/* Para que la altura de los li de la lista se adapte al tamaño automáticamente */
.list-group-item{
overflow:hidden;
}
/* Etiquetas dentro de las ventanas modales de info y etiquetas de los pictos */ /* Etiquetas dentro de las ventanas modales de info y etiquetas de los pictos */
#picto_tags .label, #picto_info .label{ #picto_tags .label, #picto_info .label{
margin: 4px; margin: 4px;
...@@ -673,9 +640,7 @@ textarea.editable{ ...@@ -673,9 +640,7 @@ textarea.editable{
float: right; float: right;
font-size: 36px; font-size: 36px;
margin: 10px 10px 0 0; margin: 10px 10px 0 0;
cursor: pointer; cursor: hand; cursor: pointer;
text-shadow: 1px 1px 1px #222;
} }
/* Para que se vea el menú contextual por encima del resto de paneles */ /* Para que se vea el menú contextual por encima del resto de paneles */
......
...@@ -8,3 +8,4 @@ ...@@ -8,3 +8,4 @@
@import 'forms.less'; @import 'forms.less';
@import 'picto-grid.less'; @import 'picto-grid.less';
@import 'topbar.less';
/**
* This navigation element will be shown accross the whole interface when
* a supervisor has logged in.
*/
.topbar {
padding: 0.5em;
border-top: none;
border-top-left-radius: 0;
border-top-right-radius: 0;
&__logo {
width: 5rem;
height: 5rem;
padding: 0;
margin-left: 0;
border-radius: 2px;
&__image {
width: 100%;
height: 100%;
border-radius: 2px;
}
}
&__supervisor {
&__name {
display: inline-block;
vertical-align: top;
padding: 0.5em;
&__fullname,
&__office {
text-align: right;
}
&__office {
opacity: 0.75;
}
}
&__avatar {
width: 5rem;
height: 5rem;
border-radius: 2px;
display: inline-block;
margin-bottom: 0;
cursor: pointer;
& img {
width: 100%;
height: 100%;
border-radius: 2px;
}
}
}
}
...@@ -120,6 +120,8 @@ module.exports.policies = { ...@@ -120,6 +120,8 @@ module.exports.policies = {
per_year: ['tokenAuth'], per_year: ['tokenAuth'],
per_month: ['tokenAuth'], per_month: ['tokenAuth'],
tries: ['tokenAuth'], tries: ['tokenAuth'],
create: ['tokenAuth'],
update: ['tokenAuth'],
close: ['tokenAuth'] close: ['tokenAuth']
} }
}; };
...@@ -103,5 +103,7 @@ module.exports.routes = { ...@@ -103,5 +103,7 @@ module.exports.routes = {
'GET /ws/:id_stu/year/:year': 'WorkingSessionController.per_year', 'GET /ws/:id_stu/year/:year': 'WorkingSessionController.per_year',
'GET /ws/:id_stu/month/:month': 'WorkingSessionController.per_month', 'GET /ws/:id_stu/month/:month': 'WorkingSessionController.per_month',
'GET /ws/:id_ws/tries': 'WorkingSessionController.tries', 'GET /ws/:id_ws/tries': 'WorkingSessionController.tries',
'PUT /workingsession/:id': 'WorkingSessionController.update',
'POST /workingsession': 'WorkingSessionController.create',
'POST /workingsession/:id_ws/close': 'WorkingSessionController.close' 'POST /workingsession/:id_ws/close': 'WorkingSessionController.close'
}; };
...@@ -21,7 +21,6 @@ module.exports = function (grunt) { ...@@ -21,7 +21,6 @@ module.exports = function (grunt) {
'assets/app/bower_components/angular-sanitize/angular-sanitize.js', 'assets/app/bower_components/angular-sanitize/angular-sanitize.js',
'assets/app/bower_components/ngtoast/dist/ngToast.js', 'assets/app/bower_components/ngtoast/dist/ngToast.js',
'assets/app/bower_components/ng-context-menu/dist/ng-context-menu.js',
'assets/app/bower_components/Chart.js/Chart.js', 'assets/app/bower_components/Chart.js/Chart.js',
'assets/app/bower_components/angular-chart.js/dist/angular-chart.js', 'assets/app/bower_components/angular-chart.js/dist/angular-chart.js',
'assets/app/bower_components/ng-lodash/build/ng-lodash.js', 'assets/app/bower_components/ng-lodash/build/ng-lodash.js',
......
...@@ -2,5 +2,7 @@ describe('Working Session API', function () { ...@@ -2,5 +2,7 @@ describe('Working Session API', function () {
it('GET /ws/:id_stu/year/:year'); it('GET /ws/:id_stu/year/:year');
it('GET /ws/:id_stu/month/:month'); it('GET /ws/:id_stu/month/:month');
it('GET /ws/:id_ws/tries'); it('GET /ws/:id_ws/tries');
it('POST /workingsession');
it('PUT /workingsession/:id');
it('POST /workingsession/:id_ws/close'); it('POST /workingsession/:id_ws/close');
}); });
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