Commit 312d4986 by Pablo Molina

Merge branch 'issue/378' into 'develop'

Solved #378
parents 0f1cf2b0 b0e3c4b4
Showing with 457 additions and 154 deletions
...@@ -22,16 +22,22 @@ sails/symbolstx ...@@ -22,16 +22,22 @@ sails/symbolstx
sails/src/assets/symbolstx sails/src/assets/symbolstx
sails/src/assets/upload sails/src/assets/upload
# Other # # Webapp #
######### ##########
sails/src/assets/app/js/lib/sails.io.js sails/src/assets/app/js/lib/sails.io.js
sails/src/config/local.js
sails/src/assets/app/js/config.js sails/src/assets/app/js/config.js
sails/src/assets/app/js/local.js sails/src/assets/app/js/local.js
sails/src/assets/app/bower_components
sails/src/assets/app/modules
sails/src/assets/app/css
sails/src/assets/app/js
# Other #
#########
sails/src/config/local.js
sails/src/config/ssl sails/src/config/ssl
sails/src/config/logs sails/src/config/logs
sails/src/node_modules sails/src/node_modules
sails/src/assets/app/bower_components
sails/src/.tmp sails/src/.tmp
sails/.vagrant sails/.vagrant
sails/config/tmp.sql sails/config/tmp.sql
......
...@@ -2,14 +2,15 @@ ...@@ -2,14 +2,15 @@
Este proyecto contiene el código de Pictogram, que se divide en tres: Este proyecto contiene el código de Pictogram, que se divide en tres:
- [Servidor](sails): API REST del servidor - [Servidor][2]: API REST del servidor
- [Cliente web](sails/src/assets/app): aplicación web con el dashboard para - [Cliente web][3]: aplicación web con el dashboard para supervisores
supervisores - [Cliente android][4]: aplicación android para tablet para estudiantes
- [Cliente android](android/Pictogram): aplicación android para tablet para
estudiantes
En cada directorio puede leerse la descripción de dicha parte, incluyendo En cada directorio puede leerse la descripción de dicha parte, incluyendo configuración y demás
configuración y demás utilidades. La estructura del repositorio en sí y forma utilidades. La estructura del repositorio en sí y forma de contribución se describe en
de contribución se describe en [el fichero de contribuciones][1]. [el fichero de contribuciones][1].
[1]: ./CONTRIBUTING.md [1]: ./CONTRIBUTING.md
[2]: ./sails
[3]: ./sails/src/assets/app
[4]: ./android/Pictogram
{
"hooks": {
"grunt": false
}
}
...@@ -29,6 +29,23 @@ en el directorio [conf](./conf). ...@@ -29,6 +29,23 @@ en el directorio [conf](./conf).
Para ejecutar el servidor como desarrollo se debe acceder al directorio Para ejecutar el servidor como desarrollo se debe acceder al directorio
[conf](./conf) e instalar los datos de la base de datos necesarios. [conf](./conf) e instalar los datos de la base de datos necesarios.
## Proceso de compilación
Una vez lanzado sails con el servidor comienza con la compilación de la aplicación web mediante
tareas de Grunt, para esta configuración existe, por un lado, un fichero [Gruntfile.js][1] que
se encarga de cargar las tareas establecidas y ejecutar la especificada (`default` si no se
especifica nada). Por otro lado están las tareas establecidas dentro del directorio [tasks][2],
que a su vez se divide en [config][3] y [register][4]. La primera de ellas contiene parámetros
de configuración, la segunda la propia ejecución de las tareas.
> Este proceso se realiza automáticamente, no es necesario realizar ningún paso adicional. Las
> tareas separadas son las siguientes:
>
> - `sails lift`: tarea [default][5]
> - `sails lift --prod`: tarea [prod][6]
> - `sails www`: tarea [build][7]
> - `sails www --prod`: tarea [buildProd][8]
## Ejecución ## Ejecución
Para lanzar el servidor hay que acceder al directorio [src](./src) y ejecutar Para lanzar el servidor hay que acceder al directorio [src](./src) y ejecutar
...@@ -38,4 +55,14 @@ uno de esos comandos: ...@@ -38,4 +55,14 @@ uno de esos comandos:
- `sails console`: para un servidor con un intérprete de nodejs con las - `sails console`: para un servidor con un intérprete de nodejs con las
variables de sails expuestas variables de sails expuestas
> El servidor se ejecutará en [localhost:1337/app](http://localhost:1337/app) > Puede añadirse --prod para ejecutar el servidor en modo producción.
> El servidor se ejecutará en [localhost:1337/app](http://localhost:1337/app).
[1]: ./src/Gruntfile.js
[2]: ./src/tasks
[3]: ./src/tasks/config
[4]: ./src/tasks/register
[5]: ./src/tasks/register/default.js
[6]: ./src/tasks/register/prod.js
[7]: ./src/tasks/register/build.js
[8]: ./src/tasks/register/buildProd.js
/**
* Gruntfile
*
* This Node script is executed when you run `grunt` or `sails lift`.
* Its purpose is to load the Grunt tasks in your project's `tasks`
* folder, and allow you to add and remove tasks as you see fit.
* For more information on how this works, check out the `README.md`
* file that was generated in your `tasks` folder.
*
* WARNING:
* Unless you know what you're doing, you shouldn't change this file.
* Check out the `tasks` directory instead.
*/
module.exports = function (grunt) {
var includeAll;
var taskConfigurations;
var registerDefinitions;
// Load the include-all library in order to require all of our grunt
// configurations and task registrations dynamically.
try {
includeAll = require('include-all');
} catch (e0) {
try {
includeAll = require('sails/node_modules/include-all');
} catch (e1) {
/* eslint-disable no-console */
console.error('Could not find `include-all` module.');
console.error('Skipping grunt tasks...');
console.error('To fix this, please run:');
console.error('npm install include-all --save`');
console.error();
/* eslint-enable */
grunt.registerTask('default', []);
return;
}
}
/**
* Loads Grunt configuration modules from the specified
* relative path. These modules should export a function
* that, when run, should either load/configure or register
* a Grunt task.
*/
function loadTasks(relPath) {
return includeAll({
dirname: require('path').resolve(__dirname, relPath),
filter: /(.+)\.js$/
}) || {};
}
/**
* Invokes the function from a Grunt configuration module with
* a single argument - the `grunt` object.
*/
function invokeConfigFn(tasks) {
var taskName;
for (taskName in tasks) {
if (tasks.hasOwnProperty(taskName)) {
tasks[taskName](grunt);
}
}
}
// Load task functions
taskConfigurations = loadTasks('./tasks/config');
registerDefinitions = loadTasks('./tasks/register');
// (ensure that a default task exists)
if (!registerDefinitions.default) {
registerDefinitions.default = function (_grunt) {
_grunt.registerTask('default', []);
};
}
// Run task functions to configure Grunt.
invokeConfigFn(taskConfigurations);
invokeConfigFn(registerDefinitions);
};
#
# Makefile for mocha
# by: zander - zand3rs@gmail.com
#
# usage:
# make test
# make test <path/to/test>
#
# override default MOCHA_OPTS:
# make MOCHA_OPTS='-C -R dot' test
#
ENV_VARS=NODE_ENV=test PORT=9999
TEST_DIR=test/unit/
MOCHA_BIN=mocha
MOCHA_DEFAULT_OPTS=--recursive -t 30000
MOCHA_OPTS=-R spec
ifneq "$(wildcard ./node_modules/sails-test-helper/node_modules/.bin/mocha)" ""
MOCHA_BIN=./node_modules/sails-test-helper/node_modules/.bin/mocha
endif
ifneq "$(wildcard ./node_modules/.bin/mocha)" ""
MOCHA_BIN=./node_modules/.bin/mocha
endif
check: test
test:
@$(eval TARGETS=$(filter-out $@,$(MAKECMDGOALS)))
@$(eval TARGETS=$(TARGETS:test/%=%))
@$(eval TARGETS=$(TARGETS:unit%=%))
@$(eval TARGETS=$(TARGETS:/%=%))
@$(eval TARGETS=$(addprefix $(TEST_DIR),$(TARGETS)))
@$(eval TARGET=$(shell [ -z $(firstword ${TARGETS}) ] && echo ${TEST_DIR}))
@$(ENV_VARS) $(MOCHA_BIN) $(MOCHA_DEFAULT_OPTS) $(MOCHA_OPTS) $(TARGET) $(TARGETS)
clean:
@echo 'deleting node_modules...'
@\rm -Rf ./node_modules
silent:
@:
%: silent
@:
.PHONY: check clean silent test
# Cliente web
Este es el cliente web servido por Sails como aplicación por defecto. Para
instalar todas las dependencias sólo hay que ejecutar el script
[install.sh](../install.sh) que se encuentra en el directorio del servidor.
# Cliente web
Este es el cliente web servido por Sails como aplicación por defecto. Para instalar todas las
dependencias sólo hay que ejecutar el script [install.sh][1] que se encuentra en el directorio
del servidor.
Además, para compilar el cliente correctamente hay que lanzar sails o utilizar las tareas de Grunt
descritas en la [documentación del servidor][2]. Algunos ficheros se encuentran fuera del directorio
principal:
- Los estilos se encuentran [/sails/src/assets/styles][3]
- Los scripts y vistas se encuentran en [/sails/src/assets/scripts][4]
[1]: ../../../install.sh
[2]: ../../../README.md
[3]: ../styles
[4]: ../scripts
...@@ -3,92 +3,12 @@ ...@@ -3,92 +3,12 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Pictogram Dashboard</title> <title>Pictogram Dashboard</title>
<!-- Viewport mobile tag for sensible mobile support -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.min.css"> <link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap-theme.min.css"> <script src="js/main.js"></script>
<link rel="stylesheet" href="bower_components/ngtoast/dist/ngToast.min.css">
<link rel="stylesheet" href="bower_components/ngtoast/dist/ngToast-animations.min.css">
<link rel="stylesheet" href="bower_components/angular-chart.js/dist/angular-chart.css">
<!-- <link rel="stylesheet" href="css/cropper.css"> -->
<link rel="stylesheet" href="css/main.css">
<script src="bower_components/angular/angular.min.js"></script>
<script src="bower_components/angular-bootstrap/ui-bootstrap.min.js"></script>
<script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
<script src="bower_components/angular-ui-router/release/angular-ui-router.min.js"></script>
<script src="bower_components/angular-translate/angular-translate.min.js"></script>
<script src="bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js"></script>
<script src="bower_components/angular-re-captcha/angular-re-captcha.js"></script>
<script src="bower_components/ng-file-upload/angular-file-upload.min.js"></script>
<script src="bower_components/angular-filter/dist/angular-filter.min.js"></script>
<script src="js/lib/sails.io.js"></script>
<!-- Timer scripts -->
<script type="text/javascript" src="bower_components/angular-timer/dist/assets/js/angular-timer-bower.js"></script>
<script type="text/javascript" src="bower_components/angular-timer/dist/assets/js/angular-timer-all.min.js"></script>
<script type="text/javascript" src="bower_components/momentjs/min/moment.min.js"></script>
<script type="text/javascript" src="bower_components/momentjs/min/locales.min.js"></script>
<script type="text/javascript" src="bower_components/humanize-duration/humanize-duration.js"></script>
<!-- End timer scripts -->
<!-- Scripts for notifications -->
<script src="bower_components/angular-animate/angular-animate.min.js"></script>
<script src="bower_components/angular-sanitize/angular-sanitize.min.js"></script>
<script src="bower_components/ngtoast/dist/ngToast.min.js"></script>
<!-- End of scripts for notifications -->
<script src="bower_components/ng-context-menu/dist/ng-context-menu.min.js"></script>
<script src="bower_components/Chart.js/Chart.min.js"></script>
<script src="bower_components/angular-chart.js/dist/angular-chart.min.js"></script>
<script src="bower_components/ng-lodash/build/ng-lodash.min.js"></script>
<script src="bower_components/ng-file-upload/angular-file-upload-shim.min.js"></script>
<!--
<script src="bower_components/ngImgCrop/compile/minified/ng-img-crop.js"></script>
<link rel="stylesheet" type="text/css" href="bower_components/ngImgCrop/compile/minified/ng-img-crop.css">-->
<script src="js/app.js"></script>
<script src="js/config.js"></script>
<script src="js/controllers/controllers.js"></script>
<script src="js/controllers/main.js"></script>
<script src="modules/login/controllers/login.js"></script>
<script src="modules/login/controllers/login_setting_password.js"></script>
<script src="modules/login/controllers/signin.js"></script>
<script src="modules/login/controllers/login_admin.js"></script>
<script src="modules/admin/controllers/admin.js"></script>
<script src="modules/admin/controllers/devices.js"></script>
<script src="modules/admin/controllers/offices.js"></script>
<script src="modules/admin/controllers/supervisors.js"></script>
<script src="modules/supervisor/controllers/supervisor.js"></script>
<script src="modules/supervisor/controllers/students.js"></script>
<script src="modules/supervisor/controllers/setup.js"></script>
<script src="modules/student/controllers/setup.js"></script>
<script src="modules/student/controllers/student.js"></script>
<script src="modules/student/controllers/session.js"></script>
<script src="modules/student/controllers/reports.js"></script>
<script src="modules/student/controllers/instructions.js"></script>
<script src="modules/student/controllers/collections.js"></script>
<script src="modules/student/controllers/addpicto.js"></script>
<script src="modules/student/controllers/tags.js"></script>
<script src="modules/student/controllers/pictoconfig.js"></script>
<script src="modules/student/controllers/pictoexp.js"></script>
<script src="modules/student/controllers/instructiondetail.js"></script>
<script src="modules/translate/controllers/translate.js"></script>
<script src="js/services/services.js"></script>
<script src="js/directives/directives.js"></script>
</head> </head>
<body ng-controller="MainCtrl"> <body ng-controller="MainCtrl">
<!-- <div ng-view></div> -->
<toast></toast> <toast></toast>
<div ui-view></div> <div ui-view></div>
<!-- Librería jQuery requerida por los plugins de JavaScript
<script src="http://code.jquery.com/jquery.js"></script> -->
<!-- Todos los plugins JavaScript de Bootstrap
<script src="js/bootstrap.min.js"></script> -->
<!-- Librería cropper (Recortar imágenes)
<script src="js/lib/cropper.js"></script> -->
</body> </body>
</html> </html>
'use strict';
/* Configuration constants */
angular.module('dashboardConfig', []).constant('config', {
backend: "http://localhost:1337"
});
This diff could not be displayed because it is too large.
//// template file for sails/src/config/local.js
/**
* Local environment settings
*
* Use this file to specify configuration settings for use while developing
* the app on your personal system: for example, this would be a good place
* to store database or email passwords that apply only to you, and shouldn't
* be shared with others in your organization.
*
* These settings take precedence over all other config files, including those
* in the env/ subfolder.
*
* PLEASE NOTE:
* local.js is included in your .gitignore, so if you're using git
* as a version control solution for your Sails app, keep in mind that
* this file won't be committed to your repository!
*
* Good news is, that means you can specify configuration for your local
* machine in this file without inadvertently committing personal information
* (like database passwords) to the repo. Plus, this prevents other members
* of your team from commiting their local configuration changes on top of yours.
*
* In a production environment, you probably want to leave this file out
* entirely and leave all your settings in env/production.js
*
*
* For more information, check out:
* http://sailsjs.org/#!/documentation/anatomy/myApp/config/local.js.html
*/
module.exports = {
/***************************************************************************
* Your SSL certificate and key, if you want to be able to serve HTTP *
* responses over https:// and/or use websockets over the wss:// protocol *
* (recommended for HTTP, strongly encouraged for WebSockets) *
* *
* In this example, we'll assume you created a folder in your project, *
* `config/ssl` and dumped your certificate/key files there: *
***************************************************************************/
ssl: {
ca: require('fs').readFileSync(__dirname + '/ssl/goddady/gd.yottacode.com.bundle.crt'),
key: require('fs').readFileSync(__dirname + '/ssl/goddady/gd.yottacode.com.key'),
cert: require('fs').readFileSync(__dirname + '/ssl/goddady/gd.yottacode.com.crt')
},
/***************************************************************************
* The `port` setting determines which TCP port your app will be *
* deployed on. *
* *
* Ports are a transport-layer concept designed to allow many different *
* networking applications run at the same time on a single computer. *
* More about ports: *
* http://en.wikipedia.org/wiki/Port_(computer_networking) *
* *
* By default, if it's set, Sails uses the `PORT` environment variable. *
* Otherwise it falls back to port 1337. *
* *
* In env/production.js, you'll probably want to change this setting *
* to 80 (http://) or 443 (https://) if you have an SSL certificate *
***************************************************************************/
port: process.env.PORT || 1337,
/***************************************************************************
* The runtime "environment" of your Sails app is either typically *
* 'development' or 'production'. *
* *
* In development, your Sails app will go out of its way to help you *
* (for instance you will receive more descriptive error and *
* debugging output) *
* *
* In production, Sails configures itself (and its dependencies) to *
* optimize performance. You should always put your app in production mode *
* before you deploy it to a server. This helps ensure that your Sails *
* app remains stable, performant, and scalable. *
* *
* By default, Sails sets its environment using the `NODE_ENV` environment *
* variable. If NODE_ENV is not set, Sails will run in the *
* 'development' environment. *
***************************************************************************/
// environment: process.env.NODE_ENV || 'development'
};
@import (less) '../app/bower_components/bootstrap/dist/css/bootstrap.css';
@import (less) '../app/bower_components/bootstrap/dist/css/bootstrap-theme.css';
@import (less) '../app/bower_components/ngtoast/dist/ngToast.css';
@import (less) '../app/bower_components/ngtoast/dist/ngToast-animations.css';
@import (less) '../app/bower_components/angular-chart.js/dist/angular-chart.css';
@import (less) 'cropper.css';
@import (less) 'main.css';
module.exports = function (grunt) {
grunt.config.set('clean', {
dev: [
'assets/app/css/',
'assets/app/js',
'assets/app/modules'
],
prod: [
'assets/app/css/',
'assets/app/js',
'assets/app/modules'
]
});
grunt.loadNpmTasks('grunt-contrib-clean');
};
module.exports = function (grunt) {
var jsFiles = [
'assets/app/bower_components/angular/angular.js',
'assets/app/bower_components/angular-bootstrap/ui-bootstrap.js',
'assets/app/bower_components/angular-bootstrap/ui-bootstrap-tpls.js',
'assets/app/bower_components/angular-ui-router/release/angular-ui-router.js',
'assets/app/bower_components/angular-translate/angular-translate.js',
/* eslint-disable max-len */
'assets/app/bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js',
/* eslint-enable */
'assets/app/bower_components/angular-re-captcha/angular-re-captcha.js',
'assets/app/bower_components/ng-file-upload/angular-file-upload.js',
'assets/app/bower_components/angular-filter/dist/angular-filter.js',
'assets/app/bower_components/angular-timer/dist/assets/js/angular-timer-bower.js',
'assets/app/bower_components/angular-timer/dist/assets/js/angular-timer-all.min.js',
'assets/app/bower_components/momentjs/min/moment.min.js',
'assets/app/bower_components/momentjs/min/locales.js',
'assets/app/bower_components/humanize-duration/humanize-duration.js',
'assets/app/bower_components/angular-animate/angular-animate.js',
'assets/app/bower_components/angular-sanitize/angular-sanitize.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/angular-chart.js/dist/angular-chart.js',
'assets/app/bower_components/ng-lodash/build/ng-lodash.js',
'assets/app/bower_components/ng-file-upload/angular-file-upload-shim.js',
'assets/scripts/lib/sails.io.js',
'assets/scripts/app.js',
'assets/scripts/config.js',
'assets/scripts/controllers/controllers.js',
'assets/scripts/controllers/main.js',
'assets/scripts/modules/login/controllers/login.js',
'assets/scripts/modules/login/controllers/login_setting_password.js',
'assets/scripts/modules/login/controllers/signin.js',
'assets/scripts/modules/login/controllers/login_admin.js',
'assets/scripts/modules/admin/controllers/admin.js',
'assets/scripts/modules/admin/controllers/devices.js',
'assets/scripts/modules/admin/controllers/offices.js',
'assets/scripts/modules/admin/controllers/supervisors.js',
'assets/scripts/modules/supervisor/controllers/supervisor.js',
'assets/scripts/modules/supervisor/controllers/students.js',
'assets/scripts/modules/supervisor/controllers/setup.js',
'assets/scripts/modules/student/controllers/setup.js',
'assets/scripts/modules/student/controllers/student.js',
'assets/scripts/modules/student/controllers/session.js',
'assets/scripts/modules/student/controllers/reports.js',
'assets/scripts/modules/student/controllers/instructions.js',
'assets/scripts/modules/student/controllers/collections.js',
'assets/scripts/modules/student/controllers/addpicto.js',
'assets/scripts/modules/student/controllers/tags.js',
'assets/scripts/modules/student/controllers/pictoconfig.js',
'assets/scripts/modules/student/controllers/pictoexp.js',
'assets/scripts/modules/student/controllers/instructiondetail.js',
'assets/scripts/modules/translate/controllers/translate.js',
'assets/scripts/services/services.js',
'assets/scripts/directives/directives.js'
];
grunt.config.set('concat', {
dev: {
src: jsFiles,
dest: 'assets/app/js/main.js',
separator: '\n;',
stripBanners: true,
sourceMap: true
},
prod: {
src: jsFiles,
dest: 'assets/app/js/main.js',
separator: '\n;',
stripBanners: false,
sourceMap: false
}
});
grunt.loadNpmTasks('grunt-contrib-concat');
};
module.exports = function (grunt) {
grunt.config.set('copy', {
dev: {
files: [
{
expand: true,
cwd: 'assets/scripts/',
src: ['modules/**/*.html'],
dest: 'assets/app/',
filter: 'isFile'
}
]
},
prod: {
files: [
{
expand: true,
cwd: 'assets/scripts/',
src: ['modules/**/*.html'],
dest: 'assets/app/modules/',
filter: 'isFile'
}
]
}
});
grunt.loadNpmTasks('grunt-contrib-copy');
};
module.exports = function (grunt) {
grunt.config.set('cssmin', {
prod: {
files: {
'assets/app/css/main.css': ['assets/app/css/main.css']
}
}
});
grunt.loadNpmTasks('grunt-contrib-cssmin');
};
module.exports = function (grunt) {
grunt.config.set('less', {
dev: {
files: [
{
expand: true,
cwd: 'assets/styles/',
src: ['main.less'],
dest: 'assets/app/css/',
ext: '.css',
compress: false,
sourceMap: true
}
]
},
prod: {
files: [
{
expand: true,
cwd: 'assets/styles/',
src: ['main.less'],
dest: 'assets/app/css/',
ext: '.css',
compress: true,
sourceMap: false
}
]
}
});
grunt.loadNpmTasks('grunt-contrib-less');
};
module.exports = function (grunt) {
grunt.config.set('uglify', {
prod: {
files: {
'assets/app/js/main.js': ['assets/app/js/main.js']
}
}
});
grunt.loadNpmTasks('grunt-contrib-uglify');
};
module.exports = function (grunt) {
grunt.registerTask('build', [
'clean:dev',
'less:dev',
'concat:dev',
'copy:dev'
]);
};
module.exports = function (grunt) {
grunt.registerTask('buildProd', [
'clean:prod',
'less:prod',
'cssmin:prod',
'concat:prod',
'uglify:prod',
'copy:prod'
]);
};
module.exports = function (grunt) {
grunt.registerTask('default', ['build']);
};
module.exports = function (grunt) {
grunt.registerTask('prod', ['buildProd']);
};
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