Commit 5e2c5e62529d26869f1c8bdd0b5887a586acf4a1

Authored by Miguel Barão
1 parent 4b703498
Exists in master and in 1 other branch dev

add package.json to install javascript libraries with npm

@@ -6,4 +6,7 @@ static/lib @@ -6,4 +6,7 @@ static/lib
6 6
7 # Python egg metadata, regenerated from source files by setuptools. 7 # Python egg metadata, regenerated from source files by setuptools.
8 /*.egg-info 8 /*.egg-info
9 -/*.egg  
10 \ No newline at end of file 9 \ No newline at end of file
  10 +/*.eggnode_modules
  11 +
  12 +# ignore javascript libraries installed with npm
  13 +node_modules/
11 \ No newline at end of file 14 \ No newline at end of file
@@ -8,17 +8,17 @@ @@ -8,17 +8,17 @@
8 8
9 ## 1. Requirements 9 ## 1. Requirements
10 10
11 -The webserver is a python application that requires `python3.6` and `pip` to be  
12 -installed.  
13 -It's also recommended to install `npm` (Node package management) to install the 11 +The webserver is a python application that requires `>=python3.6` and `pip` to be
  12 +installed. `npm` (Node package management) is also necessary to install the
14 javascript libraries. 13 javascript libraries.
15 14
16 ```bash 15 ```bash
17 sudo apt install python3 python3-pip npm # debian, ubuntu, mint, ... 16 sudo apt install python3 python3-pip npm # debian, ubuntu, mint, ...
18 sudo pkg install python36 py36-sqlite3 py36-pip py36-setuptools npm # FreeBSD 17 sudo pkg install python36 py36-sqlite3 py36-pip py36-setuptools npm # FreeBSD
  18 +sudo port install python37 py37-pip py37-setuptools npm6 # MacOS
19 ``` 19 ```
20 20
21 -The file `~/.config/pip/pip.conf` should be configured to the following: 21 +The file `pip.conf` should be configured to the following:
22 22
23 ```ini 23 ```ini
24 [global] 24 [global]
@@ -28,21 +28,25 @@ user=yes @@ -28,21 +28,25 @@ user=yes
28 format=columns 28 format=columns
29 ``` 29 ```
30 30
31 -Note: In MacOS this file is in `~/Library/Application Support/pip/pip.conf`. 31 +The file is in `~/.config/pip/` in Linux/FreeBSD and `~/Library/Application Support/pip/pip.conf` in MacOS.
  32 +
32 33
33 --- 34 ---
34 35
35 ## 2. Installation 36 ## 2. Installation
36 37
37 -Download and install: 38 +Download and install (`USERNAME` is your account on bitbucket):
38 39
39 ```bash 40 ```bash
40 git clone https://USERNAME@bitbucket.org/USERNAME/perguntations.git 41 git clone https://USERNAME@bitbucket.org/USERNAME/perguntations.git
41 -pip3 install --user perguntations 42 +cd perguntations
  43 +npm install
  44 +pip3 install .
42 ``` 45 ```
43 46
44 -where `USERNAME` is your account on bitbucket.  
45 -This will also install any dependencies required to run the software. 47 +The command `npm` installs the javascript libraries and `pip3` installs the
  48 +python webserver.
  49 +This will also automatically install the python dependencies required.
46 50
47 --- 51 ---
48 52
@@ -53,12 +57,11 @@ To generate certificates, there are two possibilities: public server with @@ -53,12 +57,11 @@ To generate certificates, there are two possibilities: public server with
53 static IP address or a private server on a local network. 57 static IP address or a private server on a local network.
54 58
55 Certificates must be saved in the `$XDG_DATA_HOME` path if defined in the 59 Certificates must be saved in the `$XDG_DATA_HOME` path if defined in the
56 -environment, otherwise in `~/.local/share/certs`.  
57 -  
58 -Create the directory if needed: 60 +environment, otherwise in `~/.local/share/certs` (I will assume the latter
  61 +case).
59 62
60 ```bash 63 ```bash
61 -[ ! -z "$XDG_DATA_HOME" ] || mkdir -p ~/.local/share/certs 64 +mkdir -p ~/.local/share/certs
62 ``` 65 ```
63 66
64 ### Selfsigned certificates 67 ### Selfsigned certificates
@@ -67,7 +70,7 @@ Self-signed certificates are not certified by a recognised authority and @@ -67,7 +70,7 @@ Self-signed certificates are not certified by a recognised authority and
67 browsers will complain that the certificate is not trusted. 70 browsers will complain that the certificate is not trusted.
68 71
69 ```bash 72 ```bash
70 -cd WHERE/TO/PUT/CERTS 73 +cd ~/.local/share/certs
71 openssl req -x509 -newkey rsa:4096 -keyout privkey.pem -out cert.pem -days 365 -nodes 74 openssl req -x509 -newkey rsa:4096 -keyout privkey.pem -out cert.pem -days 365 -nodes
72 ``` 75 ```
73 76
@@ -77,14 +80,14 @@ Generating certificates for a public server (FreeBSD) requires a registered @@ -77,14 +80,14 @@ Generating certificates for a public server (FreeBSD) requires a registered
77 domain with fixed IP. 80 domain with fixed IP.
78 81
79 ```sh 82 ```sh
80 -sudo pkg install py27-certbot # FreeBSD 83 +sudo pkg install py27-certbot # FreeBSD
81 sudo service pf stop # disable pf firewall (FreeBSD) 84 sudo service pf stop # disable pf firewall (FreeBSD)
82 sudo certbot certonly --standalone -d www.example.com 85 sudo certbot certonly --standalone -d www.example.com
83 sudo service pf start # enable pf firewall 86 sudo service pf start # enable pf firewall
84 ``` 87 ```
85 88
86 Certificates are saved in `/usr/local/etc/letsencrypt/live/www.example.com/`. 89 Certificates are saved in `/usr/local/etc/letsencrypt/live/www.example.com/`.
87 -Copy them to the appropriate `certs` directory and change permissions: 90 +Copy them to the `certs` directory and change permissions:
88 91
89 ```sh 92 ```sh
90 chmod 400 cert.pem privkey.pem 93 chmod 400 cert.pem privkey.pem
@@ -101,77 +104,57 @@ sudo service pf start # start firewall @@ -101,77 +104,57 @@ sudo service pf start # start firewall
101 Again, copy certificate files `privkey.pem` and `cert.pem` to the `certs` 104 Again, copy certificate files `privkey.pem` and `cert.pem` to the `certs`
102 directory. 105 directory.
103 106
104 ----  
105 -  
106 -## Installing 3rd party javascript libraries  
107 -  
108 -The javascript libraries are not included in the repository.  
109 -The following libraries are currently necessary (as of 24/1/2019):  
110 -  
111 -```  
112 -DataTables  
113 -MDB-Free_4  
114 -MathJax-2.7.5  
115 -bootstrap-4.2.1-dist  
116 -codemirror-5.42.2  
117 -fontawesome-free-5.6.3-web  
118 -jquery-3.3.1.min.js  
119 -popper.min.js  
120 -```  
121 -  
122 -Downloaded and install them in the directory perguntations/static/lib.  
123 -  
124 -FIXME: use `npm`  
125 107
126 --- 108 ---
127 109
128 ## Running a demo 110 ## Running a demo
129 111
130 -The directory `demo` includes a demo test that can be used as a template for  
131 -your own tests and questions. 112 +The directory `demo` in the repository includes a demo test that can be used
  113 +as a template for your own tests and questions.
132 114
133 To run the demonstration test you need to initialize the database using one of 115 To run the demonstration test you need to initialize the database using one of
134 the following methods: 116 the following methods:
135 117
136 ```.bash 118 ```.bash
137 -./initdb.py students.csv # initialize from a CSV file  
138 -./initdb.py --admin # only adds the administrator account  
139 -./initdb.py --add 123 "Asterix Gaules" # add one student 119 +cd demo
140 120
141 -# a database file "students.db" is created  
142 -mv students.db demo/ 121 +initdb students.csv # initialize from a CSV file
  122 +initdb --admin # only adds the administrator account
  123 +initdb --add 123 "Asterix Gaules" # add one student
143 124
144 -# create directory to save the finished tests  
145 -mkdir demo/ans 125 +mkdir ans # directory where the student tests are saved
146 126
147 -# edit test configuration and check if everything looks right  
148 -vi demo/test-tutorial.yaml  
149 -``` 127 +$EDITOR test-tutorial.yaml # edit test configuration
150 128
151 -We are now ready to run the server:  
152 -  
153 -```.bash  
154 -./serve.py --help # get help  
155 -./serve.py demo/test-tutorial.yaml # run demo test 129 +perguntations --help # get help
  130 +perguntations tutorial.yaml # run demo test
156 ``` 131 ```
157 132
158 -By default the server listens on port 8443 and on all IPs of all network interfaces.  
159 -Open the browser at `http://127.0.0.1:8443/` and login as user number `0` (administrator) and choose any password. Then 133 +The server listens on port 8443 of all IPs of all network interfaces.
  134 +Open the browser at `http://127.0.0.1:8443/` and login as user number `0`
  135 +(administrator) and choose any password. The administrator is redirected to the
  136 +administration page that shows all the students and their state.
160 137
161 1. Authorize students by clicking the checkboxes. 138 1. Authorize students by clicking the checkboxes.
162 -2. Open a different browser at `http://127.0.0.1:8443/` and login as one of the authorized students. Answer the questions and submit. 139 +2. Open a different browser at `http://127.0.0.1:8443/` and login as one of the
  140 +authorized students. Answer the questions and submit.
163 141
164 The server can be stoped from the terminal with `^C`. 142 The server can be stoped from the terminal with `^C`.
165 143
166 ## Running on lower ports 80 or 443 144 ## Running on lower ports 80 or 443
167 145
168 -Ports 80 and 443 are reserved for the root user and and this software _should NOT be run as root_. Instead, the firewall should be configured to forward tcp traffic from port 443 to 8443 where the server is listening. The details depend on the operating system. 146 +Ports 80 and 443 are reserved for the root user and and this software **should
  147 +NOT be run as root**.
  148 +Instead, the firewall should be configured to forward tcp traffic from port 443
  149 +to 8443 where the server is listening.
  150 +The details depend on the operating system.
169 151
170 ### debian: 152 ### debian:
171 153
  154 +FIXME: Untested
  155 +
172 ```.bash 156 ```.bash
173 -iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 8080  
174 -FIXME: also for port 443... 157 +iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-ports 8443
175 ``` 158 ```
176 159
177 Explanation: 160 Explanation:
@@ -181,19 +164,20 @@ Explanation: @@ -181,19 +164,20 @@ Explanation:
181 - `-p tcp` selected protocol. 164 - `-p tcp` selected protocol.
182 - `-s 0/0` source network address/mask. 165 - `-s 0/0` source network address/mask.
183 - `-i eth0` interface via which the packet was received. 166 - `-i eth0` interface via which the packet was received.
184 -- `--dport 80` destination port. 167 +- `--dport 443` destination port.
185 - `-j REDIRECT` what to do when packet matches the rule. 168 - `-j REDIRECT` what to do when packet matches the rule.
186 -- `--to-ports 8080` where to redirect the packets. 169 +- `--to-ports 8443` where to redirect the packets.
187 170
188 ### FreeBSD and pf 171 ### FreeBSD and pf
189 172
190 Edit `/etc/pf.conf`: 173 Edit `/etc/pf.conf`:
191 174
192 - ext_if="em0" 175 + ext_if="wlan1"
193 rdr on $ext_if proto tcp from any to any port 80 -> 127.0.0.1 port 8080 176 rdr on $ext_if proto tcp from any to any port 80 -> 127.0.0.1 port 8080
194 rdr on $ext_if proto tcp from any to any port 443 -> 127.0.0.1 port 8443 177 rdr on $ext_if proto tcp from any to any port 443 -> 127.0.0.1 port 8443
195 178
196 -or `ext_if="vtnet0"` for guest additions under virtual box. 179 +The `wlan1` should be the name of the network interface.
  180 +Use `ext_if="vtnet0"` for guest additions under virtual box.
197 181
198 Start firewall with `sudo service pf start`. 182 Start firewall with `sudo service pf start`.
199 183
@@ -211,10 +195,17 @@ Optionally, to activate pf on boot, edit `rc.conf`: @@ -211,10 +195,17 @@ Optionally, to activate pf on boot, edit `rc.conf`:
211 195
212 ## Troubleshooting 196 ## Troubleshooting
213 197
214 -* The server tries to run `python3` so this command must be accessible from user accounts. Currently, the minimum supported python version is 3.6.  
215 -* If you are getting any `UnicodeEncodeError` type of errors that's because the terminal is not supporting UTF-8. This error may occur when a unicode character is printed to the screen by the server or, when running question generator or correction scripts, a message is piped between the server and the scripts that includes unicode characters.  
216 -Try running `locale` on the terminal and see if there are any error messages. Solutions:  
217 - - debian: fix it with `sudo dpkg-reconfigure locales`, select your UTF-8 locales and try again. 198 +* The server tries to run `python3` so this command must be accessible from
  199 +user accounts. Currently, the minimum supported python version is 3.6.
  200 +
  201 +* If you are getting any `UnicodeEncodeError` type of errors that's because the
  202 +terminal is not supporting UTF-8.
  203 +This error may occur when a unicode character is printed to the screen by the
  204 +server or, when running question generator or correction scripts, a message is
  205 +piped between the server and the scripts that includes unicode characters.
  206 +Try running `locale` on the terminal and see if there are any error messages.
  207 +Solutions:
  208 + - debian: `sudo dpkg-reconfigure locales` and select your UTF-8 locales.
218 - FreeBSD: edit `~/.login_conf` to use UTF-8, for example: 209 - FreeBSD: edit `~/.login_conf` to use UTF-8, for example:
219 210
220 ``` 211 ```
demo/test-tutorial.yaml
@@ -1,64 +0,0 @@ @@ -1,64 +0,0 @@
1 ----  
2 -# ============================================================================  
3 -# The test reference should be a unique identifier. It is saved in the database  
4 -# so that queries for the results can be done in the terminal with  
5 -# $ sqlite3 students.db "select * from tests where ref='demo'"  
6 -ref: tutorial  
7 -  
8 -# (optional, default: '') You may wish to refer the course, year or kind of test  
9 -title: Teste tutorial  
10 -  
11 -# (optional) duration in minutes, 0 or undefined is infinite  
12 -duration: 120  
13 -  
14 -# Database with student credentials and grades of all questions and tests done  
15 -# The database is an sqlite3 file generate with the script initdb.py  
16 -database: demo/students.db  
17 -  
18 -# Generate a file for each test done by a student.  
19 -# It includes the questions, answers and grades.  
20 -answers_dir: demo/ans  
21 -  
22 -# (optional, default: False) Show points for each question, scale 0-20.  
23 -show_points: true  
24 -# scale_points: True  
25 -# scale_max: 20  
26 -  
27 -# (optional, default: False) Show hints if available  
28 -show_hints: true  
29 -  
30 -# (optional, default: False) Show lots of information for debugging  
31 -# debug: True  
32 -  
33 -  
34 -# ----------------------------------------------------------------------------  
35 -# Base path applied to the questions files and all the scripts  
36 -# including question generators and correctors.  
37 -# Either absolute path or relative to current directory can be used.  
38 -questions_dir: demo  
39 -  
40 -# (optional) List of files containing questions in yaml format.  
41 -# Selected questions will be obtained from these files.  
42 -# If undefined, all yaml files in questions_dir are loaded (not recommended).  
43 -files:  
44 - - questions/questions-tutorial.yaml  
45 -  
46 -# This is the list of questions that will make up the test.  
47 -# The order is preserved.  
48 -# There are several ways to define each question (explained below).  
49 -questions:  
50 - - tut-test  
51 - - tut-questions  
52 -  
53 - - tut-radio  
54 - - tut-checkbox  
55 - - tut-text  
56 - - tut-text-regex  
57 - - tut-numeric-interval  
58 - - ref: tut-textarea  
59 - points: 2.0  
60 -  
61 - - tut-information  
62 - - tut-success  
63 - - tut-warning  
64 - - tut-alert  
demo/tutorial.yaml 0 → 100644
@@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
  1 +---
  2 +# ============================================================================
  3 +# The test reference should be a unique identifier. It is saved in the database
  4 +# so that queries for the results can be done in the terminal with
  5 +# $ sqlite3 students.db "select * from tests where ref='demo'"
  6 +ref: tutorial
  7 +
  8 +# (optional, default: '') You may wish to refer the course, year or kind of test
  9 +title: Teste de demonstração (tutorial)
  10 +
  11 +# (optional) duration in minutes, 0 or undefined is infinite
  12 +duration: 120
  13 +
  14 +# Database with student credentials and grades of all questions and tests done
  15 +# The database is an sqlite3 file generate with the script initdb.py
  16 +database: demo/students.db
  17 +
  18 +# Generate a file for each test done by a student.
  19 +# It includes the questions, answers and grades.
  20 +answers_dir: demo/ans
  21 +
  22 +# (optional, default: False) Show points for each question, scale 0-20.
  23 +show_points: true
  24 +# scale_points: true
  25 +# scale_max: 20
  26 +
  27 +# ----------------------------------------------------------------------------
  28 +# Base path applied to the questions files and all the scripts
  29 +# including question generators and correctors.
  30 +# Either absolute path or relative to current directory can be used.
  31 +questions_dir: demo
  32 +
  33 +# (optional) List of files containing questions in yaml format.
  34 +# Selected questions will be obtained from these files.
  35 +# If undefined, all yaml files in questions_dir are loaded (not recommended).
  36 +files:
  37 + - questions/questions-tutorial.yaml
  38 +
  39 +# This is the list of questions that will make up the test.
  40 +# The order is preserved.
  41 +# There are several ways to define each question (explained below).
  42 +questions:
  43 + - tut-test
  44 + - tut-questions
  45 +
  46 + - tut-radio
  47 + - tut-checkbox
  48 + - tut-text
  49 + - tut-text-regex
  50 + - tut-numeric-interval
  51 + - ref: tut-textarea
  52 + points: 2.0
  53 +
  54 + - tut-information
  55 + - tut-success
  56 + - tut-warning
  57 + - tut-alert
package-lock.json 0 → 100644
@@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
  1 +{
  2 + "requires": true,
  3 + "lockfileVersion": 1,
  4 + "dependencies": {
  5 + "@fortawesome/fontawesome-free": {
  6 + "version": "5.7.1",
  7 + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.7.1.tgz",
  8 + "integrity": "sha512-gukWJ7Mwf0WXQbkcwcm5zi8+H8aT5MMnphf5hpydOw898H1ibgm2cyejHgk6Km/FTvrPp5ppUHLrlFwt0QxsQw=="
  9 + },
  10 + "bootstrap": {
  11 + "version": "4.3.0",
  12 + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.0.tgz",
  13 + "integrity": "sha512-M0vqY0Z6UDweV2nLFl5dXcb+GIo53EBCGMMVxCGH5vJxl/jsr+HkULBMd4kn9rdpdBZwd3BduCgMOYOwJybo4Q=="
  14 + },
  15 + "codemirror": {
  16 + "version": "5.43.0",
  17 + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.43.0.tgz",
  18 + "integrity": "sha512-mljwQWUaWIf85I7QwTBryF2ASaIvmYAL4s5UCanCJFfKeXOKhrqdHWdHiZWAMNT+hjLTCnVx2S/SYTORIgxsgA=="
  19 + },
  20 + "datatables": {
  21 + "version": "1.10.18",
  22 + "resolved": "https://registry.npmjs.org/datatables/-/datatables-1.10.18.tgz",
  23 + "integrity": "sha512-ntatMgS9NN6UMpwbmO+QkYJuKlVeMA2Mi0Gu/QxyIh+dW7ZjLSDhPT2tWlzjpIWEkDYgieDzS9Nu7bdQCW0sbQ==",
  24 + "requires": {
  25 + "jquery": ">=1.7"
  26 + }
  27 + },
  28 + "jquery": {
  29 + "version": "3.3.1",
  30 + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz",
  31 + "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg=="
  32 + },
  33 + "mathjax": {
  34 + "version": "2.7.5",
  35 + "resolved": "https://registry.npmjs.org/mathjax/-/mathjax-2.7.5.tgz",
  36 + "integrity": "sha512-OzsJNitEHAJB3y4IIlPCAvS0yoXwYjlo2Y4kmm9KQzyIBZt2d8yKRalby3uTRNN4fZQiGL2iMXjpdP1u2Rq2DQ=="
  37 + },
  38 + "popper.js": {
  39 + "version": "1.14.7",
  40 + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.7.tgz",
  41 + "integrity": "sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ=="
  42 + }
  43 + }
  44 +}
package.json 0 → 100644
@@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
  1 +{
  2 + "description": "Javascript libraries required to run the server",
  3 + "email": "mjsb@uevora.pt",
  4 + "dependencies": {
  5 + "@fortawesome/fontawesome-free": "^5.7.1",
  6 + "bootstrap": "^4.3.0",
  7 + "codemirror": "^5.43.0",
  8 + "datatables": "^1.10.18",
  9 + "jquery": "^3.3.1",
  10 + "mathjax": "^2.7.5",
  11 + "popper.js": "^1.14.7"
  12 + }
  13 +}
perguntations/static/README
@@ -1,28 +0,0 @@ @@ -1,28 +0,0 @@
1 -# Javascript libraries  
2 -  
3 -The javascript libraries should be installed in the `lib` directory.  
4 -Either make a `lib` directory here or a symbolic link to somewhere else.  
5 -  
6 -Currently, libs should contain:  
7 -  
8 - bootstrap  
9 - codemirror  
10 - DataTables  
11 - fontawesome  
12 - MathJax  
13 -  
14 -and the files:  
15 -  
16 - jquery.min.js  
17 - popper.min.js  
18 -  
19 -The DataTables directory was generated by https://www.datatables.net/download/  
20 -Select:  
21 -  
22 -- styling: bootstrap4  
23 -- packages: datatables  
24 -- extensions: responsive  
25 -  
26 -This will generate a zip that contains the directory `DataTables`. Expand the  
27 -zip into `lib`.  
28 -  
perguntations/static/bootstrap 0 → 120000
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +../../node_modules/bootstrap/dist/
0 \ No newline at end of file 2 \ No newline at end of file
perguntations/static/codemirror 0 → 120000
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +../../node_modules/codemirror/
0 \ No newline at end of file 2 \ No newline at end of file
perguntations/static/datatables 0 → 120000
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +../../node_modules/datatables/media/
0 \ No newline at end of file 2 \ No newline at end of file
perguntations/static/fontawesome-free 0 → 120000
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +../../node_modules/@fortawesome/fontawesome-free/
0 \ No newline at end of file 2 \ No newline at end of file
perguntations/static/jquery 0 → 120000
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +../../node_modules/jquery/dist/
0 \ No newline at end of file 2 \ No newline at end of file
perguntations/static/mathjax 0 → 120000
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +../../node_modules/mathjax/
0 \ No newline at end of file 2 \ No newline at end of file
perguntations/static/popper.js 0 → 120000
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +../../node_modules/popper.js/dist/
0 \ No newline at end of file 2 \ No newline at end of file
perguntations/templates/admin.html
@@ -7,8 +7,8 @@ @@ -7,8 +7,8 @@
7 <link rel="icon" href="/static/favicon.ico"> 7 <link rel="icon" href="/static/favicon.ico">
8 8
9 <!-- styles --> 9 <!-- styles -->
10 - <link rel="stylesheet" type="text/css" href="/static/lib/bootstrap/css/bootstrap.min.css">  
11 - <link rel="stylesheet" type="text/css" href="/static/lib/DataTables/datatables.min.css"/> 10 + <link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.min.css">
  11 + <link rel="stylesheet" type="text/css" href="/static/datatables/css/jquery.dataTables.min.css"/>
12 12
13 <style> 13 <style>
14 html { 14 html {
@@ -20,11 +20,11 @@ @@ -20,11 +20,11 @@
20 </style> 20 </style>
21 21
22 <!-- Scripts --> 22 <!-- Scripts -->
23 - <script src="/static/lib/jquery.min.js"></script>  
24 - <script defer src="/static/lib/fontawesome/js/all.min.js"></script>  
25 - <script defer src="/static/lib/popper.min.js"></script>  
26 - <script defer src="/static/lib/bootstrap/js/bootstrap.min.js"></script>  
27 - <script defer src="/static/lib/DataTables/datatables.min.js"></script> 23 + <script src="/static/jquery/jquery.min.js"></script>
  24 + <script defer src="/static/popper.js/popper.min.js"></script>
  25 + <script defer src="/static/fontawesome-free/js/all.min.js"></script>
  26 + <script defer src="/static/bootstrap/js/bootstrap.min.js"></script>
  27 + <script defer src="/static/datatables/js/jquery.dataTables.min.js"></script>
28 28
29 <script defer src="/static/js/admin.js"></script> 29 <script defer src="/static/js/admin.js"></script>
30 <script defer src="/static/js/clock.js"></script> 30 <script defer src="/static/js/clock.js"></script>
perguntations/templates/grade.html
@@ -7,14 +7,15 @@ @@ -7,14 +7,15 @@
7 <link rel="icon" href="/static/favicon.ico"> 7 <link rel="icon" href="/static/favicon.ico">
8 8
9 <!-- Styles --> 9 <!-- Styles -->
10 - <link rel="stylesheet" type="text/css" href="/static/lib/bootstrap/css/bootstrap.min.css"> 10 + <link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.min.css">
  11 +
11 <link rel="stylesheet" type="text/css" href="/static/css/test.css"> 12 <link rel="stylesheet" type="text/css" href="/static/css/test.css">
12 13
13 <!-- Scripts --> 14 <!-- Scripts -->
14 - <script defer src="/static/lib/fontawesome/js/all.min.js"></script>  
15 - <script defer src="/static/lib/jquery.min.js"></script>  
16 - <script defer src="/static/lib/popper.min.js"></script>  
17 - <script defer src="/static/lib/bootstrap/js/bootstrap.min.js"></script> 15 + <script src="/static/jquery/jquery.min.js"></script>
  16 + <script defer src="/static/popper.js/popper.min.js"></script>
  17 + <script defer src="/static/fontawesome-free/js/all.min.js"></script>
  18 + <script defer src="/static/bootstrap/js/bootstrap.min.js"></script>
18 </head> 19 </head>
19 <!-- ================================================================= --> 20 <!-- ================================================================= -->
20 <body> 21 <body>
perguntations/templates/login.html
@@ -11,10 +11,10 @@ @@ -11,10 +11,10 @@
11 <link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.min.css"> 11 <link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.min.css">
12 12
13 <!-- Scripts --> 13 <!-- Scripts -->
14 - <script src="/static/lib/jquery.min.js"></script>  
15 - <script defer src="/static/lib/fontawesome/js/all.min.js"></script>  
16 - <script defer src="/static/lib/popper.min.js"></script>  
17 - <script defer src="/static/lib/bootstrap/js/bootstrap.min.js"></script> 14 + <script src="/static/jquery/jquery.min.js"></script>
  15 + <script defer src="/static/popper.js/popper.min.js"></script>
  16 + <script defer src="/static/fontawesome-free/js/all.min.js"></script>
  17 + <script defer src="/static/bootstrap/js/bootstrap.min.js"></script>
18 18
19 </head> 19 </head>
20 <!-- =================================================================== --> 20 <!-- =================================================================== -->
perguntations/templates/review.html
@@ -17,15 +17,15 @@ @@ -17,15 +17,15 @@
17 <script defer type="text/javascript" src="/static/MathJax/MathJax.js?config=TeX-AMS_CHTML-full"></script> 17 <script defer type="text/javascript" src="/static/MathJax/MathJax.js?config=TeX-AMS_CHTML-full"></script>
18 18
19 <!-- Styles --> 19 <!-- Styles -->
20 - <link rel="stylesheet" href="/static/lib/bootstrap/css/bootstrap.min.css">  
21 - <link rel="stylesheet" href="/static/css/github.css"> <!-- syntax highlight -->  
22 - <link rel="stylesheet" href="/static/css/test.css"> 20 + <link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.min.css">
  21 + <link rel="stylesheet" type="text/css" href="/static/css/github.css"> <!-- syntax highlight -->
  22 + <link rel="stylesheet" type="text/css" href="/static/css/test.css">
23 23
24 <!-- Scripts --> 24 <!-- Scripts -->
25 - <script defer src="/static/lib/jquery.min.js"></script>  
26 - <script defer src="/static/lib/popper.min.js"></script>  
27 - <script defer src="/static/lib/bootstrap/js/bootstrap.min.js"></script>  
28 - <script defer src="/static/lib/fontawesome/js/all.min.js"></script> 25 + <script src="/static/jquery/jquery.min.js"></script>
  26 + <script defer src="/static/popper.js/popper.min.js"></script>
  27 + <script defer src="/static/fontawesome-free/js/all.min.js"></script>
  28 + <script defer src="/static/bootstrap/js/bootstrap.min.js"></script>
29 </head> 29 </head>
30 <!-- ===================================================================== --> 30 <!-- ===================================================================== -->
31 <body> 31 <body>
perguntations/templates/test.html
@@ -14,22 +14,22 @@ @@ -14,22 +14,22 @@
14 } 14 }
15 }); 15 });
16 </script> 16 </script>
17 - <script type="text/javascript" src="/static/MathJax/MathJax.js?config=TeX-AMS_CHTML-full"></script> 17 + <script type="text/javascript" src="/static/mathjax/MathJax.js?config=TeX-AMS_CHTML-full"></script>
18 18
19 <!-- Scripts --> 19 <!-- Scripts -->
20 - <script src="/static/lib/jquery.min.js"></script>  
21 - <script defer src="/static/lib/popper.min.js"></script>  
22 - <script defer src="/static/lib/bootstrap/js/bootstrap.min.js"></script>  
23 - <script defer src="/static/lib/fontawesome/js/all.min.js"></script>  
24 - <script src="/static/lib/codemirror/lib/codemirror.js"></script>  
25 - <script src="/static/lib/codemirror/addon/selection/active-line.js"></script>  
26 - <script src="/static/lib/codemirror/addon/edit/matchbrackets.js"></script> 20 + <script src="/static/jquery/jquery.min.js"></script>
  21 + <script defer src="/static/popper.js/popper.min.js"></script>
  22 + <script defer src="/static/fontawesome-free/js/all.min.js"></script>
  23 + <script defer src="/static/bootstrap/js/bootstrap.min.js"></script>
  24 + <script src="/static/codemirror/lib/codemirror.js"></script>
  25 + <script src="/static/codemirror/addon/selection/active-line.js"></script>
  26 + <script src="/static/codemirror/addon/edit/matchbrackets.js"></script>
27 27
28 <!-- Styles --> 28 <!-- Styles -->
29 - <link rel="stylesheet" type="text/css" href="/static/lib/bootstrap/css/bootstrap.min.css"> 29 + <link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.min.css">
  30 + <link rel="stylesheet" type="text/css" href="/static/codemirror/lib/codemirror.css">
  31 + <link rel="stylesheet" type="text/css" href="/static/codemirror/theme/darcula.css">
30 <link rel="stylesheet" type="text/css" href="/static/css/github.css"> <!-- syntax highlight --> 32 <link rel="stylesheet" type="text/css" href="/static/css/github.css"> <!-- syntax highlight -->
31 - <link rel="stylesheet" type="text/css" href="/static/lib/codemirror/lib/codemirror.css">  
32 - <link rel="stylesheet" type="text/css" href="/static/lib/codemirror/theme/darcula.css">  
33 <link rel="stylesheet" type="text/css" href="/static/css/test.css"> 33 <link rel="stylesheet" type="text/css" href="/static/css/test.css">
34 34
35 <!-- My scripts --> 35 <!-- My scripts -->