Making multiple examps available
Updating dependencies Possibly fixing errors on MultipleSelect Questions
This commit is contained in:
parent
18beebda7a
commit
a980e25e93
@ -1,8 +1,9 @@
|
||||
{
|
||||
"title": "CCNA 2 Final Exam",
|
||||
"questions": [{
|
||||
"questions": [
|
||||
{
|
||||
"id": "quest1",
|
||||
"type": 0,
|
||||
"type": 1,
|
||||
"title": "The buffers for packet processing and the running configuration file are temporarily stored in which type of router memory?",
|
||||
"images": [],
|
||||
"options": {
|
||||
@ -11,11 +12,13 @@
|
||||
"q1-3": "RAM",
|
||||
"q1-4": "ROM"
|
||||
},
|
||||
"correct": "q1-3"
|
||||
"correct": [
|
||||
"q1-3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "quest2",
|
||||
"type": 0,
|
||||
"type": 1,
|
||||
"title": "Refer to the exhibit. A company has an internal network of 192.168.10.0/24 for their employee workstations and a DMZ network of 192.168.3.0/24 to host servers. The company uses NAT when inside hosts connect to outside network. A network administrator issues the show ip nat translations command to check the NAT configurations. Which one of source IPv4 addresses is translated by R1 with PAT",
|
||||
"images": [
|
||||
"i258133v1n1_258133.png"
|
||||
@ -27,7 +30,10 @@
|
||||
"q2-4": "192.168.10.35",
|
||||
"q2-5": "172.16.20.5"
|
||||
},
|
||||
"correct": "q2-4"
|
||||
"correct": [
|
||||
"q2-4",
|
||||
"q2-2"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
41
package-lock.json
generated
41
package-lock.json
generated
@ -916,9 +916,9 @@
|
||||
"integrity": "sha512-fDSoKtuC6UNuxbBOJzL1zf3wU0R56kWjLT/OOgmeGAejvRF9UE9yVetLvmOezoVCGElPZH7iKwK0kDvKfExi4w=="
|
||||
},
|
||||
"@hibas123/utils": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@hibas123/utils/-/utils-2.1.1.tgz",
|
||||
"integrity": "sha512-A5yQfPsG+B5Vg6TsfJPqRi0tbjfobsTEoiTSFS+r+FFGStTL+B29zN5XI7D1RafL+dveKhblqSZ1Pi1YtEMAVw=="
|
||||
"version": "2.2.3",
|
||||
"resolved": "https://registry.npmjs.org/@hibas123/utils/-/utils-2.2.3.tgz",
|
||||
"integrity": "sha512-yAywWMDbt5fmid9E7IRXeCazdbwfC339LhRFIryXab0FqlQzUrm8ggdJaSzWXYC7m3ijdekSezlBno/vOL/L2Q=="
|
||||
},
|
||||
"@iarna/toml": {
|
||||
"version": "2.2.3",
|
||||
@ -1045,9 +1045,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "12.12.12",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.12.tgz",
|
||||
"integrity": "sha512-MGuvYJrPU0HUwqF7LqvIj50RZUX23Z+m583KBygKYUZLlZ88n6w28XRNJRJgsHukLEnLz6w6SvxZoLgbr5wLqQ==",
|
||||
"version": "12.12.14",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.14.tgz",
|
||||
"integrity": "sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/q": {
|
||||
@ -1190,9 +1190,9 @@
|
||||
}
|
||||
},
|
||||
"arg": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz",
|
||||
"integrity": "sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw=="
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.2.tgz",
|
||||
"integrity": "sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg=="
|
||||
},
|
||||
"argparse": {
|
||||
"version": "1.0.10",
|
||||
@ -7736,9 +7736,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"svelte": {
|
||||
"version": "3.15.0",
|
||||
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.15.0.tgz",
|
||||
"integrity": "sha512-OL9FIdUAmVTXR38cB/2vQQ9xWvW/7IuOASjWMfwRAB5NXywLW4Xqhblouan4odjI0S/JFGsytkgp7jelWpFgSA=="
|
||||
"version": "3.16.0",
|
||||
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.16.0.tgz",
|
||||
"integrity": "sha512-k7nCQTd9/rGOi25iv/sBeJe2W89hK2lcaUsmUQqikH0Tye7Gh/tvvF9LuNTSF+dQY/isNX+g8K9fJf+5jMLfxw=="
|
||||
},
|
||||
"svelte-dev-helper": {
|
||||
"version": "1.1.9",
|
||||
@ -7746,6 +7746,11 @@
|
||||
"integrity": "sha1-fRh9tcbNu9ZNdaMvkbiZi94yc8M=",
|
||||
"dev": true
|
||||
},
|
||||
"svelte-key": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/svelte-key/-/svelte-key-1.0.0.tgz",
|
||||
"integrity": "sha512-+aM/gdxrkMrCSRWthqj0YIAUpsrwfPKn4VOAHjbn4HZVfZ36ai1P6EWq2Suf5m5WO/2Pa7xUYviVdK80zsoz7A=="
|
||||
},
|
||||
"svelte-preprocess-filter": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/svelte-preprocess-filter/-/svelte-preprocess-filter-1.0.0.tgz",
|
||||
@ -7975,9 +7980,9 @@
|
||||
}
|
||||
},
|
||||
"ts-node": {
|
||||
"version": "8.5.2",
|
||||
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.5.2.tgz",
|
||||
"integrity": "sha512-W1DK/a6BGoV/D4x/SXXm6TSQx6q3blECUzd5TN+j56YEMX3yPVMpHsICLedUw3DvGF3aTQ8hfdR9AKMaHjIi+A==",
|
||||
"version": "8.5.4",
|
||||
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.5.4.tgz",
|
||||
"integrity": "sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw==",
|
||||
"requires": {
|
||||
"arg": "^4.1.0",
|
||||
"diff": "^4.0.1",
|
||||
@ -8023,9 +8028,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"typescript": {
|
||||
"version": "3.7.2",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz",
|
||||
"integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==",
|
||||
"version": "3.7.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.3.tgz",
|
||||
"integrity": "sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw==",
|
||||
"dev": true
|
||||
},
|
||||
"uncss": {
|
||||
|
11
package.json
11
package.json
@ -10,22 +10,23 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@hibas123/theme": "^1.2.14",
|
||||
"@hibas123/utils": "^2.1.1",
|
||||
"@hibas123/utils": "^2.2.3",
|
||||
"feather-icons": "^4.24.1",
|
||||
"navigo": "^7.1.2",
|
||||
"svelte": "^3.15.0",
|
||||
"ts-node": "^8.5.2",
|
||||
"svelte": "^3.16.0",
|
||||
"svelte-key": "^1.0.0",
|
||||
"ts-node": "^8.5.4",
|
||||
"uuid": "^3.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/navigo": "^7.0.1",
|
||||
"@types/node": "^12.12.12",
|
||||
"@types/node": "^12.12.14",
|
||||
"@types/uuid": "^3.4.6",
|
||||
"node-sass": "^4.13.0",
|
||||
"parcel-bundler": "^1.12.4",
|
||||
"parcel-plugin-svelte": "^4.0.5",
|
||||
"svelte-preprocess-sass": "^0.2.0",
|
||||
"typescript": "^3.7.2"
|
||||
"typescript": "^3.7.3"
|
||||
},
|
||||
"browserslist": [
|
||||
"last 2 Chrome versions"
|
||||
|
@ -1,6 +1,21 @@
|
||||
import { writable, readable } from "svelte/store";
|
||||
import Data from "../data.json";
|
||||
import { Question } from "./data";
|
||||
import { Question, Exam } from "./data";
|
||||
|
||||
import CCNA2 from "../ccna2.json";
|
||||
import CCNA3 from "../ccna3.json";
|
||||
import TestData from "../data-test.json";
|
||||
|
||||
const tests = new Map<string, Exam>();
|
||||
tests.set("ccna3", CCNA3);
|
||||
tests.set("ccna2", CCNA2);
|
||||
tests.set("test", TestData)
|
||||
|
||||
let test = new URL(window.location.href).searchParams.get("exam");
|
||||
|
||||
const dataVersion = tests.has(test) ? test : "ccna3";
|
||||
const Data = tests.get(dataVersion);
|
||||
|
||||
console.log("Running exam:", dataVersion);
|
||||
|
||||
const runsShould = 3;
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
import SelectMultiple from "./questions/SelectMultiple.svelte";
|
||||
import AssignValues from "./questions/AssignValues.svelte";
|
||||
import TextInput from "./questions/TextInput.svelte";
|
||||
import Identity from 'svelte-key'
|
||||
|
||||
const questions = new Map();
|
||||
questions.set(QuestionTypes.SelectOne, SelectOne);
|
||||
@ -24,14 +25,14 @@
|
||||
let idx = 0;
|
||||
|
||||
function next() {
|
||||
idx++;
|
||||
showResult = false;
|
||||
if (isCorrect) {
|
||||
isCorrect = false;
|
||||
$activeQuestion.correct()
|
||||
} else {
|
||||
$activeQuestion.wrong();
|
||||
}
|
||||
showResult = false;
|
||||
idx++;
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -46,7 +47,9 @@
|
||||
</div>
|
||||
{/each}
|
||||
<div class="margin">
|
||||
<svelte:component key={idx} this={component} {question} {showResult} bind:isCorrect />
|
||||
<Identity key={idx}>
|
||||
<svelte:component key={idx} this={component} {question} {showResult} bind:isCorrect />
|
||||
</Identity>
|
||||
</div>
|
||||
<div class="margin fl">
|
||||
{#if !showResult}
|
||||
|
@ -5,26 +5,16 @@
|
||||
export let showResult = false;
|
||||
export let isCorrect = false;
|
||||
|
||||
|
||||
$: options = randomize(Object.keys(question.options).map(e => ({ key: e, value: question.options[e] })));
|
||||
|
||||
let selected = [];
|
||||
|
||||
$: isCorrect = selected.length === question.correct.length && selected.every(val => question.correct.find(v => v === val));
|
||||
|
||||
$: console.log("Selected:", selected, "showResult:", showResult, "isCorrect", isCorrect);
|
||||
|
||||
|
||||
function toggle(id) {
|
||||
if (selected.indexOf(id) < 0) {
|
||||
selected = [...selected, id];
|
||||
} else {
|
||||
selected = selected.filter(e => e !== id);
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
<h3>Select {question.correct.length}</h3>
|
||||
{#each options as option}
|
||||
{#each options as option (option.key)}
|
||||
<div
|
||||
key={option.key}
|
||||
class:should={showResult && question.correct.indexOf(option.key) >= 0}
|
||||
@ -32,9 +22,10 @@
|
||||
<label class="input-checkbox" for={option.key}>{@html option.value.replace(/\n/g, "<br>")}
|
||||
<input
|
||||
type="checkbox"
|
||||
id={option.key}
|
||||
checked={selected.indexOf(option.key) >= 0}
|
||||
on:click={(evt)=>showResult ? evt.preventDefault() : toggle(option.key)}
|
||||
id={option.key}
|
||||
bind:group={selected}
|
||||
on:click={(evt)=>showResult ? evt.preventDefault() : undefined}
|
||||
value={option.key}
|
||||
>
|
||||
<span></span>
|
||||
</label>
|
||||
|
Loading…
Reference in New Issue
Block a user