Commit 5e2c5e62529d26869f1c8bdd0b5887a586acf4a1
1 parent
4b703498
Exists in
master
and in
1 other branch
add package.json to install javascript libraries with npm
Showing
19 changed files
with
219 additions
and
195 deletions
Show diff stats
.gitignore
| ... | ... | @@ -6,4 +6,7 @@ static/lib |
| 6 | 6 | |
| 7 | 7 | # Python egg metadata, regenerated from source files by setuptools. |
| 8 | 8 | /*.egg-info |
| 9 | -/*.egg | |
| 10 | 9 | \ No newline at end of file |
| 10 | +/*.eggnode_modules | |
| 11 | + | |
| 12 | +# ignore javascript libraries installed with npm | |
| 13 | +node_modules/ | |
| 11 | 14 | \ No newline at end of file | ... | ... |
README.md
| ... | ... | @@ -8,17 +8,17 @@ |
| 8 | 8 | |
| 9 | 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 | 13 | javascript libraries. |
| 15 | 14 | |
| 16 | 15 | ```bash |
| 17 | 16 | sudo apt install python3 python3-pip npm # debian, ubuntu, mint, ... |
| 18 | 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 | 23 | ```ini |
| 24 | 24 | [global] |
| ... | ... | @@ -28,21 +28,25 @@ user=yes |
| 28 | 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 | 36 | ## 2. Installation |
| 36 | 37 | |
| 37 | -Download and install: | |
| 38 | +Download and install (`USERNAME` is your account on bitbucket): | |
| 38 | 39 | |
| 39 | 40 | ```bash |
| 40 | 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 | 57 | static IP address or a private server on a local network. |
| 54 | 58 | |
| 55 | 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 | 63 | ```bash |
| 61 | -[ ! -z "$XDG_DATA_HOME" ] || mkdir -p ~/.local/share/certs | |
| 64 | +mkdir -p ~/.local/share/certs | |
| 62 | 65 | ``` |
| 63 | 66 | |
| 64 | 67 | ### Selfsigned certificates |
| ... | ... | @@ -67,7 +70,7 @@ Self-signed certificates are not certified by a recognised authority and |
| 67 | 70 | browsers will complain that the certificate is not trusted. |
| 68 | 71 | |
| 69 | 72 | ```bash |
| 70 | -cd WHERE/TO/PUT/CERTS | |
| 73 | +cd ~/.local/share/certs | |
| 71 | 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 | 80 | domain with fixed IP. |
| 78 | 81 | |
| 79 | 82 | ```sh |
| 80 | -sudo pkg install py27-certbot # FreeBSD | |
| 83 | +sudo pkg install py27-certbot # FreeBSD | |
| 81 | 84 | sudo service pf stop # disable pf firewall (FreeBSD) |
| 82 | 85 | sudo certbot certonly --standalone -d www.example.com |
| 83 | 86 | sudo service pf start # enable pf firewall |
| 84 | 87 | ``` |
| 85 | 88 | |
| 86 | 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 | 92 | ```sh |
| 90 | 93 | chmod 400 cert.pem privkey.pem |
| ... | ... | @@ -101,77 +104,57 @@ sudo service pf start # start firewall |
| 101 | 104 | Again, copy certificate files `privkey.pem` and `cert.pem` to the `certs` |
| 102 | 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 | 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 | 115 | To run the demonstration test you need to initialize the database using one of |
| 134 | 116 | the following methods: |
| 135 | 117 | |
| 136 | 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 | 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 | 142 | The server can be stoped from the terminal with `^C`. |
| 165 | 143 | |
| 166 | 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 | 152 | ### debian: |
| 171 | 153 | |
| 154 | +FIXME: Untested | |
| 155 | + | |
| 172 | 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 | 160 | Explanation: |
| ... | ... | @@ -181,19 +164,20 @@ Explanation: |
| 181 | 164 | - `-p tcp` selected protocol. |
| 182 | 165 | - `-s 0/0` source network address/mask. |
| 183 | 166 | - `-i eth0` interface via which the packet was received. |
| 184 | -- `--dport 80` destination port. | |
| 167 | +- `--dport 443` destination port. | |
| 185 | 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 | 171 | ### FreeBSD and pf |
| 189 | 172 | |
| 190 | 173 | Edit `/etc/pf.conf`: |
| 191 | 174 | |
| 192 | - ext_if="em0" | |
| 175 | + ext_if="wlan1" | |
| 193 | 176 | rdr on $ext_if proto tcp from any to any port 80 -> 127.0.0.1 port 8080 |
| 194 | 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 | 182 | Start firewall with `sudo service pf start`. |
| 199 | 183 | |
| ... | ... | @@ -211,10 +195,17 @@ Optionally, to activate pf on boot, edit `rc.conf`: |
| 211 | 195 | |
| 212 | 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 | 209 | - FreeBSD: edit `~/.login_conf` to use UTF-8, for example: |
| 219 | 210 | |
| 220 | 211 | ``` | ... | ... |
demo/test-tutorial.yaml
| ... | ... | @@ -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 |
| ... | ... | @@ -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 | ... | ... |
| ... | ... | @@ -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 | +} | ... | ... |
| ... | ... | @@ -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 | -# 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/templates/admin.html
| ... | ... | @@ -7,8 +7,8 @@ |
| 7 | 7 | <link rel="icon" href="/static/favicon.ico"> |
| 8 | 8 | |
| 9 | 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 | 13 | <style> |
| 14 | 14 | html { |
| ... | ... | @@ -20,11 +20,11 @@ |
| 20 | 20 | </style> |
| 21 | 21 | |
| 22 | 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 | 29 | <script defer src="/static/js/admin.js"></script> |
| 30 | 30 | <script defer src="/static/js/clock.js"></script> | ... | ... |
perguntations/templates/grade.html
| ... | ... | @@ -7,14 +7,15 @@ |
| 7 | 7 | <link rel="icon" href="/static/favicon.ico"> |
| 8 | 8 | |
| 9 | 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 | 12 | <link rel="stylesheet" type="text/css" href="/static/css/test.css"> |
| 12 | 13 | |
| 13 | 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 | 19 | </head> |
| 19 | 20 | <!-- ================================================================= --> |
| 20 | 21 | <body> | ... | ... |
perguntations/templates/login.html
| ... | ... | @@ -11,10 +11,10 @@ |
| 11 | 11 | <link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.min.css"> |
| 12 | 12 | |
| 13 | 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 | 19 | </head> |
| 20 | 20 | <!-- =================================================================== --> | ... | ... |
perguntations/templates/review.html
| ... | ... | @@ -17,15 +17,15 @@ |
| 17 | 17 | <script defer type="text/javascript" src="/static/MathJax/MathJax.js?config=TeX-AMS_CHTML-full"></script> |
| 18 | 18 | |
| 19 | 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 | 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 | 29 | </head> |
| 30 | 30 | <!-- ===================================================================== --> |
| 31 | 31 | <body> | ... | ... |
perguntations/templates/test.html
| ... | ... | @@ -14,22 +14,22 @@ |
| 14 | 14 | } |
| 15 | 15 | }); |
| 16 | 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 | 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 | 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 | 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 | 33 | <link rel="stylesheet" type="text/css" href="/static/css/test.css"> |
| 34 | 34 | |
| 35 | 35 | <!-- My scripts --> | ... | ... |