feat: complete quiz tasks

This commit is contained in:
Ayobami
2025-07-24 22:56:01 +01:00
parent f9e7de62ce
commit 6a137285e6
6 changed files with 1617 additions and 173 deletions
+2 -2
View File
@@ -11,7 +11,7 @@ TWILIO_SID=
TWILIO_TOKEN=
COPYRIGHT=Copyright © 2021 MKD. All rights reserved.
POWERED_BY=Powered By <a href="MDK.com" target="__blank">MKD.ca</a>
NODE_PORT=3001
NODE_PORT=3048
GRAPHQL_PORT=9001
EMAIL_SMTP_PROTOCOL=smtp
EMAIL_SMTP_SMTP_HOST=smtp.mailtrap.io
@@ -62,7 +62,7 @@ DB_PORT=3306
DB_DSN=
DB_HOSTNAME=localhost
DB_USERNAME=root
DB_PASSWORD=
DB_PASSWORD=ayobamidavid
DB_DATABASE=mkd_test_1
DB_DBDRIVER=mysqli
DB_DBPREFIX=
+35 -28
View File
@@ -1,4 +1,4 @@
'use strict';
"use strict";
/*Powered By: Manaknightdigital Inc. https://manaknightdigital.com/ Year: 2020*/
/**
* Sequelize File
@@ -8,44 +8,51 @@
* @author Ryan Wong
*
*/
const fs = require('fs');
const path = require('path');
let Sequelize = require('sequelize');
const fs = require("fs");
const path = require("path");
let Sequelize = require("sequelize");
const basename = path.basename(__filename);
const dotenv = require('dotenv');
const dotenv = require("dotenv");
dotenv.config();
let db = {};
let sequelize = new Sequelize(process.env.DB_DATABASE, process.env.DB_USERNAME, process.env.DB_PASSWORD, {
dialect: process.env.DB_ADAPTER,
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
host: process.env.DB_HOSTNAME,
port: process.env.DB_PORT,
logging: console.log,
timezone: '-04:00',
pool: {
maxConnections: 1,
minConnections: 0,
maxIdleTime: 100,
},
define: {
timestamps: false,
underscoredAll: true,
underscored: true,
},
});
let sequelize = new Sequelize(
process.env.DB_DATABASE,
process.env.DB_USERNAME,
process.env.DB_PASSWORD,
{
dialect: process.env.DB_ADAPTER,
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
host: process.env.DB_HOSTNAME,
port: process.env.DB_PORT,
logging: console.log,
timezone: "-04:00",
pool: {
maxConnections: 1,
minConnections: 0,
maxIdleTime: 100,
},
define: {
timestamps: false,
underscoredAll: true,
underscored: true,
},
}
);
// sequelize.sync({ force: true });
sequelize.sync();
fs.readdirSync(__dirname)
.filter((file) => {
return file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js';
return (
file.indexOf(".") !== 0 && file !== basename && file.slice(-3) === ".js"
);
})
.forEach((file) => {
var model = sequelize['import'](path.join(__dirname, file));
var model = sequelize["import"](path.join(__dirname, file));
db[model.name] = model;
});
+423 -6
View File
@@ -456,6 +456,17 @@
"node": ">=6"
}
},
"node_modules/@popperjs/core": {
"version": "2.11.8",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
"license": "MIT",
"peer": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/popperjs"
}
},
"node_modules/@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -1535,6 +1546,26 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"node_modules/bootstrap": {
"version": "5.3.7",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.7.tgz",
"integrity": "sha512-7KgiD8UHjfcPBHEpDNg+zGz8L3LqR3GVwqZiBRFX04a1BCArZOz1r2kjly2HQ0WokqTO0v1nF+QAt8dsW4lKlw==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/twbs"
},
{
"type": "opencollective",
"url": "https://opencollective.com/bootstrap"
}
],
"license": "MIT",
"peer": true,
"peerDependencies": {
"@popperjs/core": "^2.11.8"
}
},
"node_modules/bootstrap-select": {
"version": "1.13.18",
"resolved": "https://registry.npmjs.org/bootstrap-select/-/bootstrap-select-1.13.18.tgz",
@@ -5723,6 +5754,39 @@
"node": ">=8.10.0"
}
},
"node_modules/gcp-metadata": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz",
"integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==",
"license": "Apache-2.0",
"optional": true,
"peer": true,
"dependencies": {
"gaxios": "^4.0.0",
"json-bigint": "^1.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/gcp-metadata/node_modules/gaxios": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz",
"integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==",
"license": "Apache-2.0",
"optional": true,
"peer": true,
"dependencies": {
"abort-controller": "^3.0.0",
"extend": "^3.0.2",
"https-proxy-agent": "^5.0.0",
"is-stream": "^2.0.0",
"node-fetch": "^2.6.7"
},
"engines": {
"node": ">=10"
}
},
"node_modules/gcs-resumable-upload": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-2.3.3.tgz",
@@ -5967,6 +6031,68 @@
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/google-auth-library": {
"version": "6.1.6",
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz",
"integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==",
"license": "Apache-2.0",
"optional": true,
"peer": true,
"dependencies": {
"arrify": "^2.0.0",
"base64-js": "^1.3.0",
"ecdsa-sig-formatter": "^1.0.11",
"fast-text-encoding": "^1.0.0",
"gaxios": "^4.0.0",
"gcp-metadata": "^4.2.0",
"gtoken": "^5.0.4",
"jws": "^4.0.0",
"lru-cache": "^6.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/google-auth-library/node_modules/gaxios": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz",
"integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==",
"license": "Apache-2.0",
"optional": true,
"peer": true,
"dependencies": {
"abort-controller": "^3.0.0",
"extend": "^3.0.2",
"https-proxy-agent": "^5.0.0",
"is-stream": "^2.0.0",
"node-fetch": "^2.6.7"
},
"engines": {
"node": ">=10"
}
},
"node_modules/google-auth-library/node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"license": "ISC",
"optional": true,
"peer": true,
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/google-auth-library/node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC",
"optional": true,
"peer": true
},
"node_modules/google-gax": {
"version": "1.15.3",
"resolved": "https://registry.npmjs.org/google-gax/-/google-gax-1.15.3.tgz",
@@ -6089,6 +6215,35 @@
"node": ">= 4.5.0"
}
},
"node_modules/google-p12-pem": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz",
"integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==",
"deprecated": "Package is no longer maintained",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"node-forge": "^1.3.1"
},
"bin": {
"gp12-pem": "build/src/bin/gp12-pem.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/google-p12-pem/node_modules/node-forge": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
"integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
"license": "(BSD-3-Clause OR GPL-2.0)",
"optional": true,
"peer": true,
"engines": {
"node": ">= 6.13.0"
}
},
"node_modules/got": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
@@ -6231,6 +6386,40 @@
"graphql": "0.13.1 - 14"
}
},
"node_modules/gtoken": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz",
"integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"gaxios": "^4.0.0",
"google-p12-pem": "^3.1.3",
"jws": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/gtoken/node_modules/gaxios": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz",
"integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==",
"license": "Apache-2.0",
"optional": true,
"peer": true,
"dependencies": {
"abort-controller": "^3.0.0",
"extend": "^3.0.2",
"https-proxy-agent": "^5.0.0",
"is-stream": "^2.0.0",
"node-fetch": "^2.6.7"
},
"engines": {
"node": ">=10"
}
},
"node_modules/handlebars": {
"version": "4.7.6",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz",
@@ -7251,6 +7440,13 @@
"resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz",
"integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ=="
},
"node_modules/jquery": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
"license": "MIT",
"peer": true
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -7273,6 +7469,17 @@
"node": ">= 10"
}
},
"node_modules/json-bigint": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
"integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"bignumber.js": "^9.0.0"
}
},
"node_modules/json-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
@@ -8273,11 +8480,23 @@
}
},
"node_modules/node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
"license": "MIT",
"dependencies": {
"whatwg-url": "^5.0.0"
},
"engines": {
"node": "4.x || >=6.0.0"
},
"peerDependencies": {
"encoding": "^0.1.0"
},
"peerDependenciesMeta": {
"encoding": {
"optional": true
}
}
},
"node_modules/node-forge": {
@@ -10406,6 +10625,12 @@
"node": ">=6"
}
},
"node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"license": "MIT"
},
"node_modules/trim-repeated": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
@@ -10774,6 +10999,12 @@
"resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.5.tgz",
"integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes="
},
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"license": "BSD-2-Clause"
},
"node_modules/websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -10795,6 +11026,16 @@
"node": ">=0.8.0"
}
},
"node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"license": "MIT",
"dependencies": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"node_modules/which-boxed-primitive": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz",
@@ -11427,6 +11668,12 @@
"protobufjs": "^6.8.6"
}
},
"@popperjs/core": {
"version": "2.11.8",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
"peer": true
},
"@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -12355,6 +12602,13 @@
}
}
},
"bootstrap": {
"version": "5.3.7",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.7.tgz",
"integrity": "sha512-7KgiD8UHjfcPBHEpDNg+zGz8L3LqR3GVwqZiBRFX04a1BCArZOz1r2kjly2HQ0WokqTO0v1nF+QAt8dsW4lKlw==",
"peer": true,
"requires": {}
},
"bootstrap-select": {
"version": "1.13.18",
"resolved": "https://registry.npmjs.org/bootstrap-select/-/bootstrap-select-1.13.18.tgz",
@@ -16200,6 +16454,33 @@
"node-fetch": "^2.3.0"
}
},
"gcp-metadata": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz",
"integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==",
"optional": true,
"peer": true,
"requires": {
"gaxios": "^4.0.0",
"json-bigint": "^1.0.0"
},
"dependencies": {
"gaxios": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz",
"integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==",
"optional": true,
"peer": true,
"requires": {
"abort-controller": "^3.0.0",
"extend": "^3.0.2",
"https-proxy-agent": "^5.0.0",
"is-stream": "^2.0.0",
"node-fetch": "^2.6.7"
}
}
}
},
"gcs-resumable-upload": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-2.3.3.tgz",
@@ -16397,6 +16678,57 @@
"path-is-absolute": "^1.0.0"
}
},
"google-auth-library": {
"version": "6.1.6",
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz",
"integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==",
"optional": true,
"peer": true,
"requires": {
"arrify": "^2.0.0",
"base64-js": "^1.3.0",
"ecdsa-sig-formatter": "^1.0.11",
"fast-text-encoding": "^1.0.0",
"gaxios": "^4.0.0",
"gcp-metadata": "^4.2.0",
"gtoken": "^5.0.4",
"jws": "^4.0.0",
"lru-cache": "^6.0.0"
},
"dependencies": {
"gaxios": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz",
"integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==",
"optional": true,
"peer": true,
"requires": {
"abort-controller": "^3.0.0",
"extend": "^3.0.2",
"https-proxy-agent": "^5.0.0",
"is-stream": "^2.0.0",
"node-fetch": "^2.6.7"
}
},
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"optional": true,
"peer": true,
"requires": {
"yallist": "^4.0.0"
}
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"optional": true,
"peer": true
}
}
},
"google-gax": {
"version": "1.15.3",
"resolved": "https://registry.npmjs.org/google-gax/-/google-gax-1.15.3.tgz",
@@ -16491,6 +16823,25 @@
}
}
},
"google-p12-pem": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz",
"integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==",
"optional": true,
"peer": true,
"requires": {
"node-forge": "^1.3.1"
},
"dependencies": {
"node-forge": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
"integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
"optional": true,
"peer": true
}
}
},
"got": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
@@ -16599,6 +16950,34 @@
"object-path": "^0.11.4"
}
},
"gtoken": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz",
"integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==",
"optional": true,
"peer": true,
"requires": {
"gaxios": "^4.0.0",
"google-p12-pem": "^3.1.3",
"jws": "^4.0.0"
},
"dependencies": {
"gaxios": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz",
"integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==",
"optional": true,
"peer": true,
"requires": {
"abort-controller": "^3.0.0",
"extend": "^3.0.2",
"https-proxy-agent": "^5.0.0",
"is-stream": "^2.0.0",
"node-fetch": "^2.6.7"
}
}
}
},
"handlebars": {
"version": "4.7.6",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz",
@@ -17377,6 +17756,12 @@
"resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz",
"integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ=="
},
"jquery": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
"peer": true
},
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -17396,6 +17781,16 @@
"doc-path": "2.3.0"
}
},
"json-bigint": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
"integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
"optional": true,
"peer": true,
"requires": {
"bignumber.js": "^9.0.0"
}
},
"json-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
@@ -18266,9 +18661,12 @@
"integrity": "sha1-GA6scAPgxwdhjvMTaPYvhLKmkJE="
},
"node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
"requires": {
"whatwg-url": "^5.0.0"
}
},
"node-forge": {
"version": "0.7.6",
@@ -19954,6 +20352,11 @@
}
}
},
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
},
"trim-repeated": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
@@ -20253,6 +20656,11 @@
"resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.5.tgz",
"integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes="
},
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
},
"websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -20268,6 +20676,15 @@
"resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
"integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="
},
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"which-boxed-primitive": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz",
+72 -4
View File
@@ -16,7 +16,8 @@ body {
}
@font-face {
font-family: "Bradford LL";
src: url("/fonts/BradfordLL-Regular.woff2") format("woff2"), url("/fonts/BradfordLL-Regular.woff") format("woff");
src: url("/fonts/BradfordLL-Regular.woff2") format("woff2"),
url("/fonts/BradfordLL-Regular.woff") format("woff");
font-weight: normal;
font-style: normal;
font-display: swap;
@@ -24,21 +25,24 @@ body {
@font-face {
font-family: "Bradford LL";
src: url("/fonts/BradfordLL-Italic.woff2") format("woff2"), url("/fonts/BradfordLL-Italic.woff") format("woff");
src: url("/fonts/BradfordLL-Italic.woff2") format("woff2"),
url("/fonts/BradfordLL-Italic.woff") format("woff");
font-weight: normal;
font-style: italic;
font-display: swap;
}
@font-face {
font-family: "Necto Mono";
src: url("/fonts/Necto-Mono.woff2") format("woff2"), url("/fonts/Necto-Mono.woff") format("woff");
src: url("/fonts/Necto-Mono.woff2") format("woff2"),
url("/fonts/Necto-Mono.woff") format("woff");
font-weight: normal;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "TT Nooks Script";
src: url("/fonts/TTNooksScript-Bold.woff2") format("woff2"), url("/fonts/TTNooksScript-Bold.woff") format("woff");
src: url("/fonts/TTNooksScript-Bold.woff2") format("woff2"),
url("/fonts/TTNooksScript-Bold.woff") format("woff");
font-weight: bold;
font-style: normal;
font-display: swap;
@@ -843,6 +847,9 @@ input::-ms-input-placeholder {
width: -moz-max-content;
padding-bottom: 4px;
border-bottom: 1px solid black;
position: absolute;
bottom: 4px;
left: 50%;
}
#page4 .customImgRow img {
width: 335px;
@@ -1439,3 +1446,64 @@ img.image-missing {
display: none;
border-left: none;
}
#resetQuizButton,
#resumeButton {
background: #737a73;
color: #fff;
font: 12px "Necto Mono";
border: none;
border-radius: 4px;
padding: 10px 32px;
margin-left: 8px;
cursor: pointer;
transition: all 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
outline: none;
}
#resetQuizButton:hover,
#resumeButton:hover,
#resetQuizButton:focus,
#resumeButton:focus {
background: #444242;
color: #fff;
}
#questionNavBar .nav-btn {
font: 12px "Necto Mono";
border-radius: 4px !important;
padding: 10px 16px !important;
margin: 0 4px;
min-width: 32px;
min-height: 32px;
border: none;
font-weight: bold;
cursor: pointer;
transition: background 0.2s, color 0.2s;
text-align: center;
vertical-align: middle;
display: inline-flex;
align-items: center;
justify-content: center;
}
#questionNavBar .nav-btn.answered {
background: #43a047;
color: #fff;
border: 2px solid #388e3c;
}
#questionNavBar .nav-btn.current {
background: #1976d2;
color: #fff;
border: 3px solid #1565c0;
box-shadow: 0 0 8px 2px rgba(25, 118, 210, 0.15);
z-index: 2;
}
#questionNavBar .nav-btn.unanswered {
background: #ccc;
color: #888;
border: 2px solid #bbb;
}
#questionNavBar .nav-btn:hover,
#questionNavBar .nav-btn:focus {
filter: brightness(0.95);
outline: none;
}
File diff suppressed because it is too large Load Diff
+159 -25
View File
@@ -23,10 +23,15 @@
Lets start our journey
<span class="underlineSpan">just for you</span>.
</h3>
<p class="para">
We are experts on skin and skincare actives..
</p>
<p class="para">We are experts on skin and skincare actives..</p>
<button id="beginButton" class="beginButton">LET'S BEGIN!</button>
<button
id="resumeButton"
class="resumeButton"
style="display: none; margin-top: 1em"
>
RESUME QUIZ
</button>
</div>
<div class="main-image-container">
<img onerror="handleImageMissing(this)" />
@@ -46,18 +51,52 @@
<section id="page3">
<div class="container">
<div class="row headerRow">
<div id="prevBtn" class="prevBtn nav-item left" onclick="nextQuestion(true)">
<span id="arrowTopLeft" class="arrowTopLeft control-arrows"><img src="/image/left-arrow.png" /></span>
<div
id="prevBtn"
class="prevBtn nav-item left"
onclick="nextQuestion(true)"
>
<span id="arrowTopLeft" class="arrowTopLeft control-arrows"
><img src="/image/left-arrow.png"
/></span>
</div>
<div id="identity" class="nav-item bordered">
<div class="createdByDiv">
<!-- Dynamic data -->
</div>
</div>
<div id="nextBtn" class="nextBtn nextBtnTop nav-item right" onclick="nextQuestion()">
<span id="arrowTopRight" class="arrowTopRight control-arrows"><img src="/image/right-arrow.png" /></span>
<div
id="nextBtn"
class="nextBtn nextBtnTop nav-item right"
onclick="nextQuestion()"
>
<span id="arrowTopRight" class="arrowTopRight control-arrows"
><img src="/image/right-arrow.png"
/></span>
</div>
<button
id="resetQuizButton"
class="resetQuizButton"
style="margin-left: 1em"
>
Reset Quiz
</button>
</div>
<div
id="questionNavBar"
class="question-nav-bar"
style="
position: static;
width: 100%;
background: #fff;
z-index: 1000;
display: none;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
padding: 0.5em 0;
justify-content: center;
align-items: center;
"
></div>
<div class="row questionRow mtb" id="questionRow">
<h1>
<!-- dynamic data here -->
@@ -80,7 +119,9 @@
<div class="answerInner typeText">
<input type="text" />
<div class="arrowAnswerBtn nextBtn right" onclick="nextQuestion()">
<span class="arrowAnswer control-arrows"><img src="/image/right-arrow.png" /></span>
<span class="arrowAnswer control-arrows"
><img src="/image/right-arrow.png"
/></span>
</div>
</div>
</div>
@@ -89,7 +130,9 @@
<div class="answerInner typeNum">
<input type="number" maxlength="4" minlength="4" />
<div class="arrowAnswerBtn nextBtn" onclick="nextQuestion()">
<span class="arrowAnswer control-arrows"><img src="/image/right-arrow.png" /></span>
<span class="arrowAnswer control-arrows"
><img src="/image/right-arrow.png"
/></span>
</div>
</div>
</div>
@@ -112,7 +155,14 @@
<div class="sliderDiv">
<div class="slidecontainer">
<!-- value="1" -->
<input type="range" min="0" max="100" class="slider" id="myRange" step="any" />
<input
type="range"
min="0"
max="100"
class="slider"
id="myRange"
step="any"
/>
</div>
<div class="sliderRanges">
<!-- dynamic data -->
@@ -121,7 +171,11 @@
</div>
</div>
<div class="row answerRow typeSelection" id="typeSelection" data-type="7">
<div
class="row answerRow typeSelection"
id="typeSelection"
data-type="7"
>
<div class="answerInner">
<!-- dynamic data -->
</div>
@@ -133,7 +187,9 @@
<input id="city_id" hidden />
<div id="result"></div>
<div class="arrowAnswerBtn nextBtn right" onclick="nextQuestion()">
<span class="arrowAnswer control-arrows"><img src="/image/right-arrow.png" /></span>
<span class="arrowAnswer control-arrows"
><img src="/image/right-arrow.png"
/></span>
</div>
</div>
</div>
@@ -143,16 +199,28 @@
<section id="page4">
<div class="container">
<div class="row headerRow">
<div id="prevBtn" class="prevBtn nav-item left" onclick="nextQuestion(true,true)">
<span id="arrowTopLeft" class="arrowTopLeft control-arrows"><img src="/image/left-arrow.png" /></span>
<div
id="prevBtn"
class="prevBtn nav-item left"
onclick="nextQuestion(true,true)"
>
<span id="arrowTopLeft" class="arrowTopLeft control-arrows"
><img src="/image/left-arrow.png"
/></span>
</div>
<div class="nav-item bordered">
<div class="createdByDiv">
<!-- Dynamic data -->
</div>
</div>
<div id="nextBtn" class="nextBtn nextBtnTop nav-item right" onclick="closeResponse()">
<span id="arrowTopRight" class="arrowTopRight control-arrows"><img src="/image/right-arrow.png" /></span>
<div
id="nextBtn"
class="nextBtn nextBtnTop nav-item right"
onclick="closeResponse()"
>
<span id="arrowTopRight" class="arrowTopRight control-arrows"
><img src="/image/right-arrow.png"
/></span>
</div>
</div>
<div class="row customImgRow">
@@ -169,16 +237,28 @@
<section id="page5">
<div class="container center-everything">
<div class="row headerRow">
<div id="prevBtn" class="prevBtn nav-item left" onclick="nextQuestion(true,true)">
<span id="arrowTopLeft" class="arrowTopLeft control-arrows"><img src="/image/left-arrow.png" /></span>
<div
id="prevBtn"
class="prevBtn nav-item left"
onclick="nextQuestion(true,true)"
>
<span id="arrowTopLeft" class="arrowTopLeft control-arrows"
><img src="/image/left-arrow.png"
/></span>
</div>
<div id="identity" class="nav-item bordered">
<div class="createdByDiv">
<!-- Dynamic data -->
</div>
</div>
<div id="nextBtn" class="nextBtn nextBtnTop nav-item right" onclick="closeResponse()">
<span id="arrowTopRight" class="arrowTopRight control-arrows"><img src="/image/right-arrow.png" /></span>
<div
id="nextBtn"
class="nextBtn nextBtnTop nav-item right"
onclick="closeResponse()"
>
<span id="arrowTopRight" class="arrowTopRight control-arrows"
><img src="/image/right-arrow.png"
/></span>
</div>
</div>
<div class="row responseRow">
@@ -189,6 +269,15 @@
<div class="responseBody">
<!-- dynamic data here -->
</div>
<div
id="responseCountdown"
style="
display: none;
text-align: center;
font-size: 1.5em;
margin-top: 1em;
"
></div>
</div>
</div>
<div id="weatherApi" data-type="8">
@@ -219,7 +308,10 @@
<div class="container">
<div class="row finalRow">
<div class="imgDiv">
<img src="/frontend_images/FinalScreenAnimation/final.gif" alt="image missing" />
<img
src="/frontend_images/FinalScreenAnimation/final.gif"
alt="image missing"
/>
</div>
<div class="finalDesc">
<h3>Preparing your custom formula...</h3>
@@ -247,13 +339,18 @@
</div>
<div class="paraDiv">
<p>
Based on what youve shared, your skin is pretty nicely balanced. Well look to reduce your pores, protecting you from pollution and sealing out toxins. Well also target your
Based on what youve shared, your skin is pretty nicely
balanced. Well look to reduce your pores, protecting you from
pollution and sealing out toxins. Well also target your
blackheads and tone out your skin for a nice, even look.
</p>
</div>
<div class="buttonDiv">
<button class="button" onclick="addToCart()">
YOUR CUSTOM FORMULA <span id="arrowCustom" class="arrowCustom control-arrows"><img src="/image/right-arrow-white.png" /></span>
YOUR CUSTOM FORMULA
<span id="arrowCustom" class="arrowCustom control-arrows"
><img src="/image/right-arrow-white.png"
/></span>
</button>
</div>
</div>
@@ -265,11 +362,18 @@
<h3>About these results</h3>
</div>
<div class="paraDiv">
<p>These results tell us exactly how much support you need in which areas - Your custom forumlas will be tailored to these measurements.</p>
<p>
These results tell us exactly how much support you need in which
areas - Your custom forumlas will be tailored to these
measurements.
</p>
</div>
<div class="buttonDiv">
<button class="button" onclick="addToCart()">
YOUR CUSTOM FORMULA <span id="arrowCustom" class="arrowCustom control-arrows"><img src="/image/right-arrow-white.png" /></span>
YOUR CUSTOM FORMULA
<span id="arrowCustom" class="arrowCustom control-arrows"
><img src="/image/right-arrow-white.png"
/></span>
</button>
</div>
</div>
@@ -293,6 +397,36 @@
<div></div>
<div></div>
</div>
<div
id="terminationOverlay"
style="
display: none;
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.85);
z-index: 9999;
justify-content: center;
align-items: center;
flex-direction: column;
"
>
<div
id="terminationMessage"
style="
color: white;
font-size: 2em;
text-align: center;
margin-bottom: 1em;
"
></div>
<div
id="terminationCountdown"
style="color: white; font-size: 2em; text-align: center"
></div>
</div>
<script src="/frontend_js/jquery.min.js"></script>
<script src="/frontend_js/jquery-2.1.3.js"></script>
<script src="/frontend_js/jquery-ui.js"></script>