Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
yotta
/
pictogram
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
60
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
159e140d
authored
Sep 12, 2016
by
Fernando Martínez Santiago
Committed by
root
Sep 12, 2016
Browse files
Options
_('Browse Files')
Download
Plain Diff
local and dev manual merge
parents
d19e5033
13f9c9bf
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
146 additions
and
98 deletions
android/Pictogram/commonlibrary/commonlibrary.iml
android/Pictogram/tablet/tablet.iml
android/Pictogram/watch/watch.iml
sails/README.md
sails/Vagrantfile
sails/roles/database/tasks/main.yml
sails/roles/database/vars/main.yml
sails/roles/mysql/tasks/main.yml
sails/roles/webapp/vars/main.yml
sails/src/api/controllers/StudentController.js
sails/src/api/controllers/SupervisorController.js
sails/src/api/hooks/rooms.js
sails/src/assets/app/i18n/en-gb.json
sails/src/assets/app/i18n/es-es.json
sails/src/assets/scripts/modules/student/controllers/student.js
sails/src/assets/scripts/modules/student/views/collections.html
sails/src/assets/scripts/modules/student/views/header.html
sails/src/assets/scripts/modules/student/views/session.html
sails/src/assets/styles/picto-grid.less
android/Pictogram/commonlibrary/commonlibrary.iml
View file @
159e140d
...
@@ -65,14 +65,6 @@
...
@@ -65,14 +65,6 @@
<sourceFolder
url=
"file://$MODULE_DIR$/src/main/jni"
isTestSource=
"false"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/main/jni"
isTestSource=
"false"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/main/rs"
isTestSource=
"false"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/main/rs"
isTestSource=
"false"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/main/shaders"
isTestSource=
"false"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/main/shaders"
isTestSource=
"false"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/res"
type=
"java-test-resource"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/resources"
type=
"java-test-resource"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/assets"
type=
"java-test-resource"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/aidl"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/java"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/jni"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/rs"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/shaders"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/androidTest/res"
type=
"java-test-resource"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/androidTest/res"
type=
"java-test-resource"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/androidTest/resources"
type=
"java-test-resource"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/androidTest/resources"
type=
"java-test-resource"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/androidTest/assets"
type=
"java-test-resource"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/androidTest/assets"
type=
"java-test-resource"
/>
...
@@ -81,6 +73,14 @@
...
@@ -81,6 +73,14 @@
<sourceFolder
url=
"file://$MODULE_DIR$/src/androidTest/jni"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/androidTest/jni"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/androidTest/rs"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/androidTest/rs"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/androidTest/shaders"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/androidTest/shaders"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/res"
type=
"java-test-resource"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/resources"
type=
"java-test-resource"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/assets"
type=
"java-test-resource"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/aidl"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/java"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/jni"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/rs"
isTestSource=
"true"
/>
<sourceFolder
url=
"file://$MODULE_DIR$/src/test/shaders"
isTestSource=
"true"
/>
<excludeFolder
url=
"file://$MODULE_DIR$/build/intermediates/annotations"
/>
<excludeFolder
url=
"file://$MODULE_DIR$/build/intermediates/annotations"
/>
<excludeFolder
url=
"file://$MODULE_DIR$/build/intermediates/assets"
/>
<excludeFolder
url=
"file://$MODULE_DIR$/build/intermediates/assets"
/>
<excludeFolder
url=
"file://$MODULE_DIR$/build/intermediates/blame"
/>
<excludeFolder
url=
"file://$MODULE_DIR$/build/intermediates/blame"
/>
...
@@ -106,6 +106,7 @@
...
@@ -106,6 +106,7 @@
<orderEntry
type=
"library"
exported=
""
name=
"play-services-base-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-base-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"socket.io-client-0.5.0"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"socket.io-client-0.5.0"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"okhttp-2.3.0"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"okhttp-2.3.0"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"androidasync-2.1.9"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-clearcut-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-clearcut-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"animated-vector-drawable-24.1.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"animated-vector-drawable-24.1.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"okio-1.3.0"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"okio-1.3.0"
level=
"project"
/>
...
@@ -122,11 +123,10 @@
...
@@ -122,11 +123,10 @@
<orderEntry
type=
"library"
exported=
""
name=
"support-vector-drawable-24.1.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"support-vector-drawable-24.1.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-auth-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-auth-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
scope=
"TEST"
name=
"hamcrest-core-1.3"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
scope=
"TEST"
name=
"hamcrest-core-1.3"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"androidasync-2.1.8"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-ads-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-ads-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
scope=
"TEST"
name=
"junit-4.12"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
scope=
"TEST"
name=
"junit-4.12"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"ion-2.1.9"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
scope=
"TEST"
name=
"json-20090211"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
scope=
"TEST"
name=
"json-20090211"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"ion-2.1.8"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-ads-lite-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-ads-lite-9.2.1"
level=
"project"
/>
</component>
</component>
</module>
</module>
\ No newline at end of file
android/Pictogram/tablet/tablet.iml
View file @
159e140d
This diff is collapsed.
Click to expand it.
android/Pictogram/watch/watch.iml
View file @
159e140d
...
@@ -165,6 +165,7 @@
...
@@ -165,6 +165,7 @@
<orderEntry
type=
"library"
exported=
""
name=
"play-services-base-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-base-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"socket.io-client-0.5.0"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"socket.io-client-0.5.0"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"okhttp-2.3.0"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"okhttp-2.3.0"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"androidasync-2.1.9"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-clearcut-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-clearcut-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"animated-vector-drawable-24.1.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"animated-vector-drawable-24.1.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-wearable-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-wearable-9.2.1"
level=
"project"
/>
...
@@ -182,9 +183,8 @@
...
@@ -182,9 +183,8 @@
<orderEntry
type=
"library"
exported=
""
name=
"support-annotations-24.1.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"support-annotations-24.1.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"support-vector-drawable-24.1.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"support-vector-drawable-24.1.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-auth-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-auth-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"androidasync-2.1.8"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-ads-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-ads-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"ion-2.1.
8
"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"ion-2.1.
9
"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-ads-lite-9.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
name=
"play-services-ads-lite-9.2.1"
level=
"project"
/>
<orderEntry
type=
"module"
module-name=
"commonlibrary"
exported=
""
/>
<orderEntry
type=
"module"
module-name=
"commonlibrary"
exported=
""
/>
<orderEntry
type=
"library"
exported=
""
scope=
"TEST"
name=
"hamcrest-core-1.3"
level=
"project"
/>
<orderEntry
type=
"library"
exported=
""
scope=
"TEST"
name=
"hamcrest-core-1.3"
level=
"project"
/>
...
...
sails/README.md
View file @
159e140d
...
@@ -17,12 +17,13 @@ mostradas más adelante hacen todo el trabajo.
...
@@ -17,12 +17,13 @@ mostradas más adelante hacen todo el trabajo.
1.
Descargar upload.zip y symbolstx.zip desde el servidor de Yottacode:
1.
Descargar upload.zip y symbolstx.zip desde el servidor de Yottacode:
```
```
scp ec2-user@pre.yottacode.com:~/upload.zip .
scp ec2-user@dev.yottacode.com:~/upload.tgz .
scp ec2-user@pre.yottacode.com:~/symbolstx.zip .
scp ec2-user@dev.yottacode.com:~/symbolstx.tgz .
unzip upload.zip
tar zxvf upload.tgz
unzip symbolstx.zip
tar zxvf symbolstx.tgz
rm upload.zip
ln -s symbolstx_96x82 symbolstx
rm symbolstx.zip
rm upload.tgz
rm symbolstx.tgz
```
```
2.
Cambiar la contraseña de root de mysql a root:
`mysqladmin -u root password root`
. Este paso
2.
Cambiar la contraseña de root de mysql a root:
`mysqladmin -u root password root`
. Este paso
es necesario para la creación de la base de datos
`pictodb`
y el usuario
`pictodbuser`
.
es necesario para la creación de la base de datos
`pictodb`
y el usuario
`pictodbuser`
.
...
@@ -37,13 +38,15 @@ mostradas más adelante hacen todo el trabajo.
...
@@ -37,13 +38,15 @@ mostradas más adelante hacen todo el trabajo.
### Opción B (desarrollo): ejecución en una máquina virtual generada automáticamente
### Opción B (desarrollo): ejecución en una máquina virtual generada automáticamente
1.
Descargar upload.zip y symbolstx.zip desde el servidor de Yottacode:
1.
Descargar upload.zip y symbolstx.zip desde el servidor de Yottacode:
```
```
scp ec2-user@pre.yottacode.com:~/upload.zip .
scp ec2-user@dev.yottacode.com:~/upload.tgz .
scp ec2-user@pre.yottacode.com:~/symbolstx.zip .
scp ec2-user@dev.yottacode.com:~/symbolstx.tgz .
unzip upload.zip
tar zxvf upload.tgz
unzip symbolstx.zip
tar zxvf symbolstx.tgz
rm upload.zip
ln -s symbolstx_96x82 symbolstx
rm symbolstx.zip
rm upload.tgz
rm symbolstx.tgz
```
```
2.
Instalar
[
virtualbox
][
1
]
y
[
vagrant
][
2
]
(version >1.5 para este último).
2.
Instalar
[
virtualbox
][
1
]
y
[
vagrant
][
2
]
(version >1.5 para este último).
3.
Ejecutar
`vagrant up`
desde este directorio.
3.
Ejecutar
`vagrant up`
desde este directorio.
...
...
sails/Vagrantfile
View file @
159e140d
...
@@ -4,9 +4,10 @@
...
@@ -4,9 +4,10 @@
Vagrant
.
configure
(
2
)
do
|
config
|
Vagrant
.
configure
(
2
)
do
|
config
|
# "ubuntu/trusty64" for ubuntu environment
# "ubuntu/trusty64" for ubuntu environment
# "boxcutter/centos71" for AWS similar environment
# "boxcutter/centos71" for AWS similar environment
config
.
vm
.
box
=
"boxcutter/centos7
1
"
config
.
vm
.
box
=
"boxcutter/centos7
2
"
config
.
vm
.
network
"forwarded_port"
,
guest:
1337
,
host:
1337
config
.
vm
.
network
"forwarded_port"
,
guest:
1337
,
host:
1337
config
.
vm
.
network
"forwarded_port"
,
guest:
80
,
host:
8080
config
.
vm
.
network
"forwarded_port"
,
guest:
80
,
host:
8080
config
.
ssh
.
insert_key
=
false
config
.
vm
.
provider
"virtualbox"
do
|
vb
|
config
.
vm
.
provider
"virtualbox"
do
|
vb
|
vb
.
memory
=
1024
vb
.
memory
=
1024
...
...
sails/roles/database/tasks/main.yml
View file @
159e140d
...
@@ -7,7 +7,6 @@
...
@@ -7,7 +7,6 @@
name
:
all
name
:
all
state
:
import
state
:
import
target
:
"
{{
server_path
}}/{{
database_files_relative_path
}}/init.sql"
target
:
"
{{
server_path
}}/{{
database_files_relative_path
}}/init.sql"
tags
:
reset-test-database
-
name
:
Imports the pictodb Schema
-
name
:
Imports the pictodb Schema
mysql_db
:
mysql_db
:
...
@@ -16,8 +15,6 @@
...
@@ -16,8 +15,6 @@
name
:
"
{{
database_name
}}"
name
:
"
{{
database_name
}}"
state
:
import
state
:
import
target
:
"
{{
server_path
}}/{{
database_files_relative_path
}}/pictodb-schema.sql"
target
:
"
{{
server_path
}}/{{
database_files_relative_path
}}/pictodb-schema.sql"
tags
:
-
reset-test-database
-
name
:
Imports symbolstx categories and metadata
-
name
:
Imports symbolstx categories and metadata
mysql_db
:
mysql_db
:
...
@@ -26,8 +23,6 @@
...
@@ -26,8 +23,6 @@
name
:
"
{{
database_name
}}"
name
:
"
{{
database_name
}}"
state
:
import
state
:
import
target
:
"
{{
server_path
}}/{{
database_files_relative_path
}}/symbolstx-{{
item
}}.sql"
target
:
"
{{
server_path
}}/{{
database_files_relative_path
}}/symbolstx-{{
item
}}.sql"
tags
:
-
reset-test-database
with_items
:
with_items
:
-
metadata
-
metadata
-
categories
-
categories
...
@@ -39,8 +34,6 @@
...
@@ -39,8 +34,6 @@
name
:
"
{{
database_name
}}"
name
:
"
{{
database_name
}}"
state
:
import
state
:
import
target
:
"
{{
server_path
}}/{{
database_files_relative_path
}}/pictodb-data.sql"
target
:
"
{{
server_path
}}/{{
database_files_relative_path
}}/pictodb-data.sql"
tags
:
-
reset-test-database
-
name
:
Imports selected tests
-
name
:
Imports selected tests
mysql_db
:
mysql_db
:
...
@@ -49,8 +42,6 @@
...
@@ -49,8 +42,6 @@
name
:
"
{{
database_name
}}"
name
:
"
{{
database_name
}}"
state
:
import
state
:
import
target
:
"
{{
server_path
}}/{{
database_files_relative_path
}}/test-{{
item
}}.sql"
target
:
"
{{
server_path
}}/{{
database_files_relative_path
}}/test-{{
item
}}.sql"
tags
:
-
reset-test-database
with_items
:
"
{{
database_tests
}}"
with_items
:
"
{{
database_tests
}}"
-
name
:
Creates triggers
-
name
:
Creates triggers
...
@@ -60,8 +51,6 @@
...
@@ -60,8 +51,6 @@
name
:
"
{{
database_name
}}"
name
:
"
{{
database_name
}}"
state
:
import
state
:
import
target
:
"
{{
server_path
}}/{{
database_files_relative_path
}}/triggers-{{
item
}}.sql"
target
:
"
{{
server_path
}}/{{
database_files_relative_path
}}/triggers-{{
item
}}.sql"
tags
:
-
reset-test-database
with_items
:
with_items
:
-
enrolments-integrity-constraints
-
enrolments-integrity-constraints
-
sessions-integrity-constraints
-
sessions-integrity-constraints
sails/roles/database/vars/main.yml
View file @
159e140d
---
---
database_files_relative_path
:
'
roles/database/files'
database_files_relative_path
:
'
roles/database/files'
database_root_passwd
:
root
database_name
:
pictodb
database_name
:
pictodb
database_user
:
pictodbu
ser
database_user
:
pictodbu
database_user_passwd
:
p1KT0
15
database_user_passwd
:
p1KT0
!15.
database_tests
:
[
caja
]
#[caja, autismojaen] # can be empty
database_tests
:
[
caja
]
#[caja, autismojaen] # can be empty
sails/roles/mysql/tasks/main.yml
View file @
159e140d
---
---
-
name
:
Set mysql root password
debconf
:
name
:
mysql-server
question
:
"
mysql-server/{{
item
}}"
value
:
"
{{
mysql_root_passwd
|
quote
}}"
vtype
:
password
with_items
:
-
root_password
-
root_password_again
when
:
ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu'
-
name
:
Install MySQL repos
-
name
:
Install MySQL repos
apt
:
apt
:
deb
:
http://dev.mysql.com/get/mysql-apt-config_0.7.3-1_all.deb
deb
:
http://dev.mysql.com/get/mysql-apt-config_0.7.3-1_all.deb
...
@@ -61,6 +50,22 @@
...
@@ -61,6 +50,22 @@
when
:
ansible_distribution == 'CentOS' or ansible_distribution == 'Amazon'
when
:
ansible_distribution == 'CentOS' or ansible_distribution == 'Amazon'
-
name
:
Set mysql root password
-
name
:
Set mysql root password
shell
:
"
/usr/bin/mysqladmin
-u
root
password
{{
mysql_root_passwd
|
quote
}}"
debconf
:
name
:
mysql-server
question
:
"
mysql-server/{{
item
}}"
value
:
"
{{
database_root_passwd
|
quote
}}"
vtype
:
password
with_items
:
-
root_password
-
root_password_again
when
:
ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu'
-
name
:
Reading temporary password
command
:
bash -c "cat /var/log/mysqld.log | grep \"temporary password\" | sed \"s/.* \\+//g\""
register
:
tmp_mysql_password
when
:
ansible_distribution == 'CentOS' or ansible_distribution == 'Amazon'
-
name
:
Set mysql root password
shell
:
"
/usr/bin/mysqladmin
-u
root
-p
\"
{{
tmp_mysql_password.stdout
}}
\"
password
\"
{{
database_root_passwd
|
quote
}}
\"
"
ignore_errors
:
yes
ignore_errors
:
yes
when
:
ansible_distribution == 'CentOS' or ansible_distribution == 'Amazon'
when
:
ansible_distribution == 'CentOS' or ansible_distribution == 'Amazon'
sails/roles/webapp/vars/main.yml
View file @
159e140d
---
---
webapp_path
:
'
/vagrant/src/assets/app'
webapp_path
:
'
/vagrant/src/assets/app'
server_path
:
'
/vagrant'
database_root_passwd
:
r00...Tt
sails/src/api/controllers/StudentController.js
View file @
159e140d
...
@@ -977,11 +977,13 @@ module.exports = {
...
@@ -977,11 +977,13 @@ module.exports = {
subscribe
:
function
(
req
,
res
)
{
subscribe
:
function
(
req
,
res
)
{
var
action
=
req
.
param
(
'action'
);
var
action
=
req
.
param
(
'action'
);
var
attributes
=
req
.
param
(
'attributes'
);
var
attributes
=
req
.
param
(
'attributes'
);
attributes
.
ui
=
attributes
.
ui
?
attributes
.
ui
:
'PCB'
;
if
(
req
.
isSocket
)
{
if
(
req
.
isSocket
)
{
sails
.
hooks
.
rooms
.
subscribeToRoom
(
sails
.
hooks
.
rooms
.
subscribeToRoom
(
sails
.
hooks
.
rooms
.
student
(
attributes
.
id_stu
),
sails
.
hooks
.
rooms
.
student
(
attributes
.
id_stu
),
req
.
socket
req
.
socket
,
attributes
.
ui
);
);
}
}
res
.
ok
({
msg
:
"Subscribed to student "
});
res
.
ok
({
msg
:
"Subscribed to student "
});
...
@@ -1002,11 +1004,8 @@ module.exports = {
...
@@ -1002,11 +1004,8 @@ module.exports = {
// Leave all rooms
// Leave all rooms
for
(
var
i
=
0
;
i
<
rooms
.
length
;
i
++
)
{
for
(
var
i
=
0
;
i
<
rooms
.
length
;
i
++
)
{
//sails.sockets.leave(req.socket, rooms[i]); MODIFICADO POR FERNANDO. SI NO, NO SE ACTUALIZA UPDATE_PEERS
//sails.sockets.leave(req.socket, rooms[i]); MODIFICADO POR FERNANDO. SI NO, NO SE ACTUALIZA UPDATE_PEERS
sails
.
hooks
.
rooms
.
unsubscribeFromRoom
(
sails
.
hooks
.
rooms
.
unsubscribeFromRoom
(
rooms
[
i
],
req
.
socket
);
rooms
[
i
],
sails
.
log
.
debug
(
"Unsusbscribe from room "
+
rooms
[
i
]);
req
.
socket
);
sails
.
log
.
debug
(
"Unsusbscribe from room "
+
rooms
[
i
]);
}
}
res
.
json
({
res
.
json
({
...
...
sails/src/api/controllers/SupervisorController.js
View file @
159e140d
...
@@ -533,11 +533,13 @@ module.exports = {
...
@@ -533,11 +533,13 @@ module.exports = {
subscribe
:
function
(
req
,
res
)
{
subscribe
:
function
(
req
,
res
)
{
var
action
=
req
.
param
(
'action'
);
var
action
=
req
.
param
(
'action'
);
var
attributes
=
req
.
param
(
'attributes'
);
var
attributes
=
req
.
param
(
'attributes'
);
attributes
.
ui
=
attributes
.
ui
?
attributes
.
ui
:
'PCB'
;
if
(
action
===
'subscribe'
&&
req
.
isSocket
&&
attributes
.
id_sup
)
{
if
(
action
===
'subscribe'
&&
req
.
isSocket
&&
attributes
.
id_sup
)
{
sails
.
hooks
.
rooms
.
subscribeToRoom
(
sails
.
hooks
.
rooms
.
subscribeToRoom
(
sails
.
hooks
.
rooms
.
supervisor
(
attributes
.
id_sup
),
sails
.
hooks
.
rooms
.
supervisor
(
attributes
.
id_sup
),
req
.
socket
req
.
socket
,
attributes
.
ui
);
);
res
.
ok
();
res
.
ok
();
}
else
{
}
else
{
...
...
sails/src/api/hooks/rooms.js
View file @
159e140d
...
@@ -7,12 +7,24 @@
...
@@ -7,12 +7,24 @@
* to obtain an ID.
* to obtain an ID.
* @type {Object}
* @type {Object}
*/
*/
var
socketRooms
=
{};
var
socketRooms
=
{};
// {socketId => [roomId, ...]}
module
.
exports
=
function
roomsHook
(
sails
)
{
module
.
exports
=
function
roomsHook
(
sails
)
{
return
{
return
{
/**
* Returns room information
* @param {Socket} socket
* @return {return} room information
{
id: room_id,
ui: 'PCB'|'PDB' // type of user interface
}
*/
getRoom
:
function
(
socket
)
{
getRoom
:
function
(
socket
)
{
return
socketRooms
[
sails
.
sockets
.
getId
(
socket
)];
return
socketRooms
[
sails
.
sockets
.
getId
(
socket
)];
},
},
/**
/**
* Special function that subscribes a socket to a given room.
* Special function that subscribes a socket to a given room.
* This creates the connection and logs to debug with this format:
* This creates the connection and logs to debug with this format:
...
@@ -20,25 +32,33 @@ module.exports = function roomsHook (sails) {
...
@@ -20,25 +32,33 @@ module.exports = function roomsHook (sails) {
* {
* {
* websocketSubscribe: {
* websocketSubscribe: {
* room,
* room,
* socket
* socket,
* interface
* }
* }
* }
* }
*
*
* @param {RoomID} room Room to subscribe
* @param {RoomID} room Room to subscribe
* @param {Socket} socket Socket added to the subscription<
* @param {Socket} socket Socket added to the subscription
* @param {UI} ui Type of UI that sends the suscription ('PDB' or 'PCB')
*/
*/
subscribeToRoom
:
function
(
room
,
socket
)
{
subscribeToRoom
:
function
(
room
,
socket
,
ui
)
{
sails
.
log
.
debug
(
'"websocketSubscribe":'
,
JSON
.
stringify
({
sails
.
log
.
debug
(
'"websocketSubscribe":'
,
JSON
.
stringify
({
room
:
room
,
room
:
room
,
socket
:
socket
.
id
socket
:
socket
.
id
,
ui
:
ui
}));
}));
sails
.
sockets
.
join
(
socket
,
room
,
function
()
{
sails
.
sockets
.
join
(
socket
,
room
,
function
()
{
sails
.
io
.
sockets
.
in
(
room
).
clients
(
function
(
error
,
ids
)
{
sails
.
io
.
sockets
.
in
(
room
).
clients
(
function
(
error
,
ids
)
{
if
(
!
error
)
{
if
(
!
error
)
{
socketRooms
[
sails
.
sockets
.
getId
(
socket
)]
=
var
socket_id
=
sails
.
sockets
.
getId
(
socket
);
socketRooms
[
sails
.
sockets
.
getId
(
socket
)]
?
[
socketRooms
[
sails
.
sockets
.
getId
(
socket
)],
room
]
:
[
room
];
// append to socketRooms
socketRooms
[
socket_id
]
=
socketRooms
[
socket_id
]
?
[
socketRooms
[
socket_id
],
room
]
:
[
room
];
// broadcast data
sails
.
hooks
.
events
.
broadcastEvent
(
sails
.
hooks
.
events
.
broadcastEvent
(
room
,
room
,
sails
.
hooks
.
events
.
roomSubscribersChange
(
ids
.
length
)
sails
.
hooks
.
events
.
roomSubscribersChange
(
ids
.
length
)
...
@@ -70,12 +90,17 @@ module.exports = function roomsHook (sails) {
...
@@ -70,12 +90,17 @@ module.exports = function roomsHook (sails) {
sails
.
sockets
.
leave
(
socket
,
room
,
function
()
{
sails
.
sockets
.
leave
(
socket
,
room
,
function
()
{
sails
.
io
.
sockets
.
in
(
room
).
clients
(
function
(
error
,
ids
)
{
sails
.
io
.
sockets
.
in
(
room
).
clients
(
function
(
error
,
ids
)
{
if
(
!
error
)
{
if
(
!
error
)
{
// broadcast event
sails
.
hooks
.
events
.
broadcastEvent
(
sails
.
hooks
.
events
.
broadcastEvent
(
room
,
room
,
sails
.
hooks
.
events
.
roomSubscribersChange
(
ids
.
length
)
sails
.
hooks
.
events
.
roomSubscribersChange
(
ids
.
length
)
);
);
// look for the room the socket is subscribed to and remove it
if
(
socketRooms
[
sails
.
sockets
.
getId
(
socket
)])
{
if
(
socketRooms
[
sails
.
sockets
.
getId
(
socket
)])
{
var
index
=
socketRooms
[
sails
.
sockets
.
getId
(
socket
)].
indexOf
(
room
);
var
index
=
socketRooms
[
sails
.
sockets
.
getId
(
socket
)].
indexOf
(
room
);
if
(
index
>
-
1
)
{
if
(
index
>
-
1
)
{
socketRooms
[
sails
.
sockets
.
getId
(
socket
)].
splice
(
index
,
1
);
socketRooms
[
sails
.
sockets
.
getId
(
socket
)].
splice
(
index
,
1
);
}
}
...
...
sails/src/assets/app/i18n/en-gb.json
View file @
159e140d
...
@@ -137,7 +137,7 @@
...
@@ -137,7 +137,7 @@
"max_licenses_reached"
:
"Maximum number of licenses reached by the office"
,
"max_licenses_reached"
:
"Maximum number of licenses reached by the office"
,
"May"
:
"May"
,
"May"
:
"May"
,
"method_name_duplicated"
:
"Template '{{method_name}}' already exists"
,
"method_name_duplicated"
:
"Template '{{method_name}}' already exists"
,
"method_save"
:
"'{{method_name}}' saved as a new template"
,
"method_save
d
"
:
"'{{method_name}}' saved as a new template"
,
"methods"
:
"Methods"
,
"methods"
:
"Methods"
,
"minutes"
:
"minutes"
,
"minutes"
:
"minutes"
,
"month_totals"
:
"Month totals"
,
"month_totals"
:
"Month totals"
,
...
@@ -148,6 +148,7 @@
...
@@ -148,6 +148,7 @@
"no"
:
"No"
,
"no"
:
"No"
,
"nobegin"
:
"No started"
,
"nobegin"
:
"No started"
,
"no_method"
:
"No method defined"
,
"no_method"
:
"No method defined"
,
"no_subscribed"
:
"No connection to student account"
,
"no_instruction"
:
"No instruction defined"
,
"no_instruction"
:
"No instruction defined"
,
"no_students_for_user"
:
"You are not associated to any students. Please ask your office to link your account to a Pictogram student."
,
"no_students_for_user"
:
"You are not associated to any students. Please ask your office to link your account to a Pictogram student."
,
"no_space_in_category"
:
"No space left in category"
,
"no_space_in_category"
:
"No space left in category"
,
...
@@ -303,7 +304,7 @@
...
@@ -303,7 +304,7 @@
"vibration"
:
"Vibration"
,
"vibration"
:
"Vibration"
,
"view"
:
"View"
,
"view"
:
"View"
,
"voice"
:
"Voice"
,
"voice"
:
"Voice"
,
"warning_last_session_bad"
:
"
Last session was bad closed. <p/>
Please, you must evaluate last tries and press 'close seesion' button"
,
"warning_last_session_bad"
:
"
Last session was interrupted.
Please, you must evaluate last tries and press 'close seesion' button"
,
"warning_no_tablet_online"
:
"No Pictogran Tablet online detected"
,
"warning_no_tablet_online"
:
"No Pictogran Tablet online detected"
,
"woman"
:
"Woman"
,
"woman"
:
"Woman"
,
"year_totals"
:
"Year totals"
,
"year_totals"
:
"Year totals"
,
...
...
sails/src/assets/app/i18n/es-es.json
View file @
159e140d
...
@@ -137,7 +137,7 @@
...
@@ -137,7 +137,7 @@
"max_licenses_reached"
:
"Número de licencias máximo alcanzado por la oficina"
,
"max_licenses_reached"
:
"Número de licencias máximo alcanzado por la oficina"
,
"May"
:
"Mayo"
,
"May"
:
"Mayo"
,
"method_name_duplicated"
:
"La plantilla '{{method_name}}' ya existe"
,
"method_name_duplicated"
:
"La plantilla '{{method_name}}' ya existe"
,
"method_save"
:
"'{{method_name}}' guardado como nueva plantilla"
,
"method_save
d
"
:
"'{{method_name}}' guardado como nueva plantilla"
,
"methods"
:
"Métodos"
,
"methods"
:
"Métodos"
,
"minutes"
:
"minutos"
,
"minutes"
:
"minutos"
,
"month_totals"
:
"Totales mes"
,
"month_totals"
:
"Totales mes"
,
...
@@ -150,6 +150,7 @@
...
@@ -150,6 +150,7 @@
"no_instruction"
:
"Instrucción sin definir"
,
"no_instruction"
:
"Instrucción sin definir"
,
"no_students_for_user"
:
"Su cuenta no está asociada a ningún estudiante. Por favor, contacto con su gabinete para enlazar su cuenta a un estudiante."
,
"no_students_for_user"
:
"Su cuenta no está asociada a ningún estudiante. Por favor, contacto con su gabinete para enlazar su cuenta a un estudiante."
,
"no_space_in_category"
:
"No queda espacio en la categoría"
,
"no_space_in_category"
:
"No queda espacio en la categoría"
,
"no_subscribed"
:
"Sin conexión a la cuenta del estudiante"
,
"nobegin"
:
"Sin iniciar"
,
"nobegin"
:
"Sin iniciar"
,
"normal"
:
"Normal"
,
"normal"
:
"Normal"
,
"notes"
:
"Notas"
,
"notes"
:
"Notas"
,
...
@@ -304,7 +305,7 @@
...
@@ -304,7 +305,7 @@
"vibration"
:
"Vibración"
,
"vibration"
:
"Vibración"
,
"view"
:
"Vista"
,
"view"
:
"Vista"
,
"voice"
:
"Voz"
,
"voice"
:
"Voz"
,
"warning_last_session_bad"
:
"
La última sesión no se cerró correctamente. <p/>
Por favor, evalúe los ensayos y pulse 'cerrar sesión' "
,
"warning_last_session_bad"
:
"
La última sesión no se cerró correctamente.
Por favor, evalúe los ensayos y pulse 'cerrar sesión' "
,
"warning_no_tablet_online"
:
"No se detectó ningún usuario de Pictogram Tablet online"
,
"warning_no_tablet_online"
:
"No se detectó ningún usuario de Pictogram Tablet online"
,
"woman"
:
"Mujer"
,
"woman"
:
"Mujer"
,
"year_totals"
:
"Totales año"
,
"year_totals"
:
"Totales año"
,
...
...
sails/src/assets/scripts/modules/student/controllers/student.js
View file @
159e140d
...
@@ -64,7 +64,8 @@ dashboardControllers.controller('StudentCtrl', function StudentCtrl(
...
@@ -64,7 +64,8 @@ dashboardControllers.controller('StudentCtrl', function StudentCtrl(
io
.
socket
.
post
(
'/stu/subscribe'
,
{
io
.
socket
.
post
(
'/stu/subscribe'
,
{
action
:
'subscribe'
,
action
:
'subscribe'
,
attributes
:
{
attributes
:
{
id_stu
:
$scope
.
studentData
.
id
id_stu
:
$scope
.
studentData
.
id
,
ui
:
'PDB'
},
},
token
:
$window
.
sessionStorage
.
token
token
:
$window
.
sessionStorage
.
token
},
},
...
@@ -115,7 +116,8 @@ dashboardControllers.controller('StudentCtrl', function StudentCtrl(
...
@@ -115,7 +116,8 @@ dashboardControllers.controller('StudentCtrl', function StudentCtrl(
io
.
socket
.
post
(
'/stu/subscribe'
,
{
io
.
socket
.
post
(
'/stu/subscribe'
,
{
action
:
'subscribe'
,
action
:
'subscribe'
,
attributes
:
{
attributes
:
{
id_stu
:
$scope
.
studentData
.
id
id_stu
:
$scope
.
studentData
.
id
,
ui
:
'PDB'
},
},
token
:
$window
.
sessionStorage
.
token
token
:
$window
.
sessionStorage
.
token
},
},
...
@@ -124,7 +126,7 @@ dashboardControllers.controller('StudentCtrl', function StudentCtrl(
...
@@ -124,7 +126,7 @@ dashboardControllers.controller('StudentCtrl', function StudentCtrl(
});
});
})
})
.
error
(
function
()
{
.
error
(
function
()
{
// TODO ngToast res.msg (cant connect to student room)
ngToast
.
danger
({
content
:
$translate
.
instant
(
'no_subscribed'
)
});
});
});
// For tab navigation, initially blank goes to collections
// For tab navigation, initially blank goes to collections
...
...
sails/src/assets/scripts/modules/student/views/collections.html
View file @
159e140d
...
@@ -89,7 +89,9 @@
...
@@ -89,7 +89,9 @@
class=
"picto-grid__row"
>
class=
"picto-grid__row"
>
<div
<div
class=
"picto pull-left"
class=
"picto pull-left"
ng-repeat=
"studentPicto in studentPictoRow track by $index"
>
ng-repeat=
"studentPicto in studentPictoRow track by $index"
popover=
"{{studentPicto.expression.text}}"
popover-trigger=
"mouseenter"
>
<img
<img
src=
"/app/img/redcross.png"
src=
"/app/img/redcross.png"
class=
"disabled"
class=
"disabled"
...
@@ -97,8 +99,6 @@
...
@@ -97,8 +99,6 @@
<img
<img
ng-src=
"{{studentPicto.picto.uri}}"
ng-src=
"{{studentPicto.picto.uri}}"
class=
"unselectable"
class=
"unselectable"
popover=
"{{studentPicto.expression.text}}"
popover-trigger=
"mouseenter"
ng-click=
"show_category(studentPicto)"
ng-click=
"show_category(studentPicto)"
ng-class=
"{
ng-class=
"{
'novisible': studentPicto.attributes.status == 'invisible',
'novisible': studentPicto.attributes.status == 'invisible',
...
...
sails/src/assets/scripts/modules/student/views/header.html
View file @
159e140d
...
@@ -19,11 +19,29 @@
...
@@ -19,11 +19,29 @@
<img
ng-src=
"{{studentData.pic}}"
alt=
""
title=
""
/>
<img
ng-src=
"{{studentData.pic}}"
alt=
""
title=
""
/>
</div>
</div>
</div>
</div>
<div
class=
"col-md-1
1
"
>
<div
class=
"col-md-1
0
"
>
<div
style=
"margin-left: 5px"
><h4>
{{studentData.name}} {{studentData.surname}}
</h4></div>
<div
style=
"margin-left: 5px"
><h4>
{{studentData.name}} {{studentData.surname}}
</h4></div>
<div
style=
"margin-left: 5px"
class=
"text-left"
>
{{studentData.current_method | translate}}
</div>
<div
style=
"margin-left: 5px"
class=
"text-left"
>
<div
style=
"margin-left: 5px"
class=
"text-left"
>
{{studentData.current_instruction | translate}}
</div>
<span>
{{studentData.current_instruction | translate}}
</span>
<div
style=
"margin-left: 5px; color: green"
class=
"text-left"
>
{{ 'num_peers' | translate}} : {{studentData.num_peers}}
</div>
<span
class=
"text-muted"
>
({{studentData.current_method | translate}})
</span>
</div>
</div>
<div
class=
"col-md-1"
>
<div
style=
"margin-left: 5px; margin-top: 10px"
class=
"text-left text-success"
ng-if=
"studentData.num_peers > 1"
popover=
"{{ 'num_peers' | translate }}"
popover-trigger=
"mouseenter"
>
<span
class=
"glyphicon glyphicon-transfer"
aria-hidden
></span>
{{studentData.num_peers}}
</div>
<div
style=
"margin-left: 5px; margin-top: 10px"
class=
"text-left text-warning"
ng-if=
"studentData.num_peers == 1"
popover=
"{{ 'num_peers' | translate }}"
popover-trigger=
"mouseenter"
>
<span
class=
"glyphicon glyphicon-transfer"
aria-hidden
></span>
{{studentData.num_peers}}
</div>
<div
style=
"margin-left: 5px; margin-top: 10px"
class=
"text-left text-danger"
ng-if=
"studentData.num_peers == 0"
popover=
"{{ 'num_peers' | translate }}"
popover-trigger=
"mouseenter"
>
<span
class=
"glyphicon glyphicon-transfer"
aria-hidden=
"true"
></span>
{{studentData.num_peers}}
</div>
</div>
</div>
</div>
</div>
<div
class=
"row"
>
<div
class=
"row"
>
...
...
sails/src/assets/scripts/modules/student/views/session.html
View file @
159e140d
<div
class=
"panel panel-default student_tab_panel"
>
<div
class=
"panel panel-default student_tab_panel"
>
<div
class=
"panel-body"
>
<div
class=
"panel-body"
>
<div
ng-show=
"studentData.num_peers<2"
>
<div
class=
"alert alert-danger"
role=
"alert"
ng-show=
"studentData.num_peers<2"
>
<table
style=
"border: 1px solid #666666; padding:5px; background-color:#f5f5f5;"
width=
"50%"
>
<span
class=
"glyphicon glyphicon-exclamation-sign"
aria-hidden=
"true"
></span>
<tr>
<span
class=
"sr-only"
>
Error:
</span>
<td><h4
translate
>
warning_no_tablet_online
</h4></td>
{{ 'warning_no_tablet_online' | translate }}
</tr>
</table>
</div>
</div>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-md-6"
>
<div
class=
"col-md-6"
>
...
@@ -46,9 +44,15 @@
...
@@ -46,9 +44,15 @@
</timer>
</timer>
</div>
</div>
<div
class=
"try"
>
<div
class=
"try"
>
<
<<<<<<
HEAD
<
div
class=
"pull-left"
ng-repeat=
"a in actual_try.actions track by $index"
>
<
div
class=
"pull-left"
ng-repeat=
"a in actual_try.actions track by $index"
>
<div
ng-if=
"a.action != 'initsession'"
class=
"picto"
popover=
"{{ a.attributes.stu_picto.expression.text | translate }}"
popover-trigger=
"mouseenter"
>
<div
ng-if=
"a.action != 'initsession'"
class=
"picto"
popover=
"{{ a.attributes.stu_picto.expression.text | translate }}"
popover-trigger=
"mouseenter"
>
<img
ng-src=
"{{ a.attributes.stu_picto.picto.uri }}"
style=
"{{a.attributes.id_sup!=null ? 'border:2px dotted red': ''}}"
/>
<img
ng-src=
"{{ a.attributes.stu_picto.picto.uri }}"
style=
"{{a.attributes.id_sup!=null ? 'border:2px dotted red': ''}}"
/>
=======
<div
class=
"pull-left"
ng-repeat=
"a in actual_try.actions track by $index"
>
<div
class=
"picto"
popover=
"{{ a.attributes.stu_picto.expression.text | translate }}"
popover-trigger=
"mouseenter"
>
<img
ng-src=
"{{ a.attributes.stu_picto.picto.uri }}"
/>
>>>>>>> 13f9c9bff4582a0d96036c25304bf8bc2056587a
<div
class=
"action-type"
>
<div
class=
"action-type"
>
<span
ng-if=
"a.action == 'Add'"
aria-hidden=
"true"
></span>
<span
ng-if=
"a.action == 'Add'"
aria-hidden=
"true"
></span>
<span
ng-if=
"a.action == 'Select'"
aria-hidden=
"true"
></span>
<span
ng-if=
"a.action == 'Select'"
aria-hidden=
"true"
></span>
...
@@ -122,16 +126,13 @@
...
@@ -122,16 +126,13 @@
</a>
</a>
</div>
</div>
<div
ng-show=
"ws_recover"
>
<div
class=
"alert alert-danger"
role=
"alert"
ng-show=
"ws_recover"
>
<table
style=
"border: 1px solid #666666; padding:5px; background-color:#f5f5f5;"
width=
"50%"
>
<span
class=
"glyphicon glyphicon-exclamation-sign"
aria-hidden=
"true"
></span>
<tr>
<span
class=
"sr-only"
>
Error:
</span>
<td><h4
translate
>
warning_last_session_bad
</h4></td>
{{ 'warning_last_session_bad' | translate }}
<td>
<button
class=
"btn btn-warning btn-sm"
type=
"button"
ng-click=
"close_ws()"
translate
>
close_session
</button>
<button
class=
"btn btn-success btn-sm"
type=
"button"
ng-click=
"close_ws()"
translate
>
close_session
</button>
</td>
</tr>
</table>
</div>
</div>
<div
class=
"list-group"
>
<div
class=
"list-group"
>
<div
class=
"list-group-item"
ng-repeat=
"s in wsessions | orderBy: '-begin' | limitTo: numPerPage:(currentPage-1)*numPerPage"
>
<div
class=
"list-group-item"
ng-repeat=
"s in wsessions | orderBy: '-begin' | limitTo: numPerPage:(currentPage-1)*numPerPage"
>
<div
ng-show=
"showLastTry && wsessions.length > 0"
>
<div
ng-show=
"showLastTry && wsessions.length > 0"
>
...
...
sails/src/assets/styles/picto-grid.less
View file @
159e140d
...
@@ -62,6 +62,7 @@
...
@@ -62,6 +62,7 @@
&__title {
&__title {
margin-top: 0;
margin-top: 0;
color: white;
text-transform: capitalize;
text-transform: capitalize;
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment