Compare commits

...

No commits in common. "main" and "master" have entirely different histories.
main ... master

102 changed files with 20241 additions and 18767 deletions

110
.gitignore vendored Normal file
View File

@ -0,0 +1,110 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# TypeScript v1 declaration files
typings/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
.env.test
# parcel-bundler cache (https://parceljs.org/)
.cache
# Next.js build output
.next
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and *not* Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# utils/table-generator generated files
utils/table-generator/tables/
utils/table-generator/tables.md
utils/table-generator/activities/
utils/table-generator/activities.md

8
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

0
.idea/edu-dis-labs.iml Normal file
View File

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/edu-dis-labs.iml" filepath="$PROJECT_DIR$/.idea/edu-dis-labs.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

2
docs/.vuepress/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
css
dist

View File

@ -0,0 +1,39 @@
<template>
<details><summary>{{title}}</summary>{{content}} </details>
</template>
<script>
export default {
name: 'Details',
props: {
title: {
type: String,
default: "title"
},
content: {
type: String,
default: "title"
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="styl">
details {
border-radius: 3px;
background: #EEE;
}
details summary {
font-size: 17px;
vertical-align: top;
background: #333;
color: #FFF;
border-radius: 3px;
/* padding: 5px 10px; */
padding: 5px 0px;
outline: none;
font-weight: bold;
}
</style>

View File

@ -0,0 +1,324 @@
<template>
<!--container-->
<section class="container">
<!-- transition -->
<transition :duration="{ enter: 500, leave: 300 }" enter-active-class="animated zoomIn" leave-active-class="animated zoomOut" mode="out-in">
<!--questionContainer-->
<div class="questionContainer" v-if="questionIndex<quiz.questions.length" v-bind:key="questionIndex">
<header>
<div class="shell">
<div class="bar" :style="{width: questionIndex/quiz.questions.length*100 + '%' }">
<span>{{(questionIndex/quiz.questions.length)*100}}%</span>
</div>
</div>
</header>
<!--/progress-->
<!-- questionTitle -->
<h2 class="titleContainer title">{{ quiz.questions[questionIndex] && quiz.questions[questionIndex].text }}</h2>
<!-- /questionTitle -->
<!-- quizOptions -->
<div class="optionContainer" v-if="quiz.questions[questionIndex]">
<div class="option" v-for="(response, index) in quiz.questions[questionIndex].responses" @click="selectOption(index)" :class="{ 'is-selected': userResponses[questionIndex] == index}" :key="index">
{{ index | charIndex }}. {{ response.text || "Mpthasdng"}}
</div>
</div>
<!--quizFooter: navigation and progress-->
<footer class="questionFooter">
<!--pagination-->
<nav class="pagination" role="navigation" aria-label="pagination">
<!-- back button -->
<a class="button" v-on:click="prev();" :disabled="questionIndex < 1">
Back
</a>
<!-- next button -->
<a class="button" :class="(userResponses[questionIndex]==null)?'':'is-active'" v-on:click="next();" :disabled="questionIndex>=quiz.questions.length">
{{ (userResponses[questionIndex]==null)?'Skip':'Next' }}
</a>
</nav>
<!--/pagination-->
</footer>
<!--/quizFooter-->
</div>
<!--/questionBox-->
<!--quizCompletedResult-->
<div v-if="questionIndex >= quiz.questions.length" v-bind:key="questionIndex" class="quizCompleted has-text-centered">
<!-- quizCompletedIcon: Achievement Icon -->
<span class="icon">
<i class="fa" :class="score() > 3 ?'fa-check-circle-o is-active':'fa-times-circle'"></i>
</span>
<!--resultTitleBlock-->
<h2 class="title">
You did {{ (score() / quiz.questions.length > 0.7 ?'an amazing':(score() / quiz.questions.length < 0.4 ?'a poor':'a good')) }} job!
</h2>
<p class="subtitle">
Total score: {{ score() }} / {{ quiz.questions.length }}
</p>
<br>
<a class="button" @click="restart()">restart <i class="fa fa-refresh"></i></a>
<!--/resultTitleBlock-->
</div>
</transition>
<!--/quizCompetedResult-->
</section>
<!--/container-->
</template>
<script>
import * as quizzes from '../quizzes'
import Vue from 'vue';
export default {
name: 'Quiz',
props: {
quizNum: Number
},
data() {
let quizData
switch (this.quizNum) {
case 1:
quizData = quizzes.quiz1
break
case 2:
quizData = quizzes.quiz2
break
default:
quizData = quizzes.quiz1
break
}
const userResponseSkelaton = Array(quizData.questions.length).fill(null);
return {
quiz: quizData,
questionIndex: 0,
userResponses: userResponseSkelaton,
isActive: false
}
},
filters: {
charIndex: function(i) {
return String.fromCharCode(97 + i);
}
},
methods: {
restart: function(){
this.questionIndex=0;
this.userResponses=Array(this.quiz.questions.length).fill(null);
},
selectOption: function(index) {
this.$set(this.userResponses, this.questionIndex, index);
},
next: function() {
if (this.questionIndex < this.quiz.questions.length)
this.questionIndex++;
},
prev: function() {
if (this.quiz.questions.length > 0) this.questionIndex--;
},
// Return "true" count in userResponses
score: function() {
var score = 0;
for (let i = 0; i < this.userResponses.length; i++) {
if (
typeof this.quiz.questions[i].responses[
this.userResponses[i]
] !== "undefined" &&
this.quiz.questions[i].responses[this.userResponses[i]].correct
) {
score = score + 1;
}
}
// calculate percentage
return score;
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
@import url("https://fonts.googleapis.com/css?family=Montserrat:400,400i,700");
@import url("https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700");
.button {
transition: 0.3s;
}
.title, .subtitle {
font-family: Montserrat, sans-serif;
font-weight: normal;
}
.animated {
transition-duration: 0.15s;
}
.container {
margin: 0 0.5rem;
display: flex;
align-items: center;
justify-content: center;
}
.questionBox {
max-width: 30rem;
width: 30rem;
min-height: 30rem;
position: relative;
display: flex;
border-radius: 0.5rem;
overflow: hidden;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);
}
.questionContainer header {
background-color: rgba(124, 32, 32, 0.025);
background: rgba(124, 32, 32, 0.025);
padding: 1.5rem;
text-align: center;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
.questionContainer header h1 {
font-weight: bold;
margin-bottom: 1rem !important;
}
.progressContainer {
width: 60%;
margin: 0 auto;
}
.titleContainer {
text-align: center;
margin: 0 auto;
padding: 1.5rem;
}
.quizForm {
display: block;
white-space: normal;
height: 100%;
width: 100%;
}
.quizForm .quizFormContainer {
height: 100%;
margin: 15px 18px;
}
.quizForm .quizFormContainer .field-label {
text-align: left;
margin-bottom: 0.5rem;
}
.quizCompleted {
width: 100%;
padding: 1rem;
text-align: center;
}
.quizCompleted > .icon {
color: #f86c6b;
font-size: 5rem;
}
.quizCompleted > .icon .is-active {
color: #4dbd74;
}
.questionContainer {
white-space: normal;
height: 100%;
width: 100%;
}
.questionContainer .optionContainer {
margin-top: 12px;
flex-grow: 1;
}
.questionContainer .optionContainer .option {
border-radius: 290486px;
padding: 9px 18px;
margin: 0 18px;
margin-bottom: 12px;
transition: 0.3s;
cursor: pointer;
background-color: #73818f;
color: #f0f3f5;
border: transparent 1px solid;
}
.questionContainer .optionContainer .option.is-selected {
border-color: rgba(0, 0, 0, 0.25);
background-color: #834c9d;
}
.questionContainer .optionContainer .option:hover {
background-color: #B589D6;
}
.questionContainer .optionContainer .option:active {
transform: scaleX(0.9);
}
.questionContainer .questionFooter {
background: rgba(0, 0, 0, 0.025);
border-top: 1px solid rgba(0, 0, 0, 0.1);
width: 100%;
align-self: flex-end;
}
.questionContainer .questionFooter .pagination {
margin: 15px 25px;
}
.pagination {
display: flex;
justify-content: space-between;
}
.button {
padding: 0.5rem 1rem;
border: 1px solid rgba(0, 0, 0, 0.25);
border-radius: 5rem;
margin: 0 0.25rem;
transition: 0.3s;
}
.button:hover {
cursor: pointer;
background: #552586;
border-color: rgba(0, 0, 0, 0.25);
}
.button.is-active {
background: #834c9d;
color: white;
border-color: transparent;
}
.button.is-active:hover {
background: #0a2ffe;
}
@media screen and (min-width: 769px) {
.questionBox {
align-items: center;
justify-content: center;
}
.questionContainer {
display: flex;
flex-direction: column;
}
}
@media screen and (max-width: 768px) {
.sidebar {
height: auto !important;
border-radius: 6px 6px 0px 0px;
}
}
/** Custom Progress bar */
.shell {
height: 20px;
width: 250px;
border: 1px solid #73818f;
border-radius: 13px;
padding: 3px;
margin: 0 auto;
}
.bar {
background: linear-gradient(to right, #B589D6, #804FB3);
height: 20px;
width: 15px;
border-radius: 9px;
}
.bar span {
float: right;
padding: 4px 5px;
color: #f0f3f5;
font-size: 0.7em;
}
</style>

View File

@ -0,0 +1,10 @@
<script>
import "vue-good-table/dist/vue-good-table.css";
export default {
name: "Styles",
};
</script>
<style>
</style>

View File

@ -0,0 +1,56 @@
<template>
<div>
<vue-good-table
:columns="columns"
:rows="rows"
/>
</div>
</template>
<script>
import { VueGoodTable } from 'vue-good-table';
export default {
name: 'my-component',
// add to component
components: {
VueGoodTable,
},
data(){
return {
columns: [
{
label: 'Name',
field: 'name',
},
{
label: 'Age',
field: 'age',
type: 'number',
},
{
label: 'Created On',
field: 'createdAt',
type: 'date',
dateInputFormat: 'yyyy-mm-dd',
dateOutputFormat: 'MMM Do yy',
},
{
label: 'Percent',
field: 'score',
type: 'percentage',
},
],
rows: [
{ id:1, name:"John", age: 20, createdAt: '2011-10-31',score: 0.03343 },
{ id:2, name:"Jane", age: 24, createdAt: '2019-10-31', score: 0.03343 },
{ id:3, name:"Susan", age: 16, createdAt: '2011-10-30', score: 0.03343 },
{ id:4, name:"Chris", age: 55, createdAt: '2011-10-11', score: 0.03343 },
{ id:5, name:"Dan", age: 40, createdAt: '2011-10-21', score: 0.03343 },
{ id:6, name:"John", age: 20, createdAt: '2011-10-31', score: 0.03343 },
],
};
},
};
</script>

View File

@ -0,0 +1,35 @@
// .vuepress/components/sample-timeline.vue
<template>
<timeline timeline-theme="lightblue">
<timeline-title bg-color="#09FFAA">Prehistoric hunters cross over into Canada from Asia</timeline-title>
<timeline-item bg-color="#9dd8e0"> Leif Ericsson leads a Viking expedition to the New World</timeline-item>
<timeline-item bg-color="#9dFFe0">First Year 1B</timeline-item>
<timeline-item bg-color="#FFF000">Accepted Computer Engineering</timeline-item>
<timeline-item bg-color="#cFe8eF">The Iroquois Confederacy is formed</timeline-item>
<timeline-item bg-color="#97Aec8">John Cabot reaches Newfoundland (or perhaps Cape Breton)</timeline-item>
<timeline-item bg-color="#5744D4">Jacques Cartier first explores the St. Lawrence region</timeline-item>
<timeline-item bg-color="#0F4859">Second Year 2B</timeline-item>
<timeline-item bg-color="#094341">Samuel de Champlain establishes a French colony at Québec City</timeline-item>
<timeline-item bg-color="#825F03">Hudsons Bay Company is formed</timeline-item>
<timeline-item bg-color="#954F08">Expulsion of the Acadians</timeline-item>
<timeline-item bg-color="#A71490">Battle of the Plains of Abraham: Québec City is captured</timeline-item>
<timeline-item bg-color="#C084A9">New France is formally ceded to Britain; Pontiac Rebellion erupts</timeline-item>
<timeline-item bg-color="#7B71C2">Loyalist refugees begin arriving after the American Revolution</timeline-item>
<timeline-item bg-color="#2348B1">War of 1812: U.S. invades Canada</timeline-item>
<timeline-item bg-color="#915F15">Rebellions against British rule in Upper and Lower Canada</timeline-item>
<timeline-item bg-color="#0909FA"> Responsible government is won, first in Nova Scotia, then in Canada</timeline-item>
</timeline>
</template>
<script>
import { Timeline, TimelineItem, TimelineTitle } from 'vue-cute-timeline'
export default {
name: 'sample-timeline',
components: {
Timeline,
TimelineItem,
TimelineTitle,
}
}
</script>

View File

@ -0,0 +1,211 @@
// .vuepress/config.js
// missing markdownItAds boostnote admonitions
const fs = require('fs')
const path = require('path')
const util = require('util')
module.exports = {
base: '/vuepress-theme-cool-starter/',
theme: 'cool',
//dest: 'dist',
head: [
['link', { rel: 'icon', href: '/faviconCustom.ico' }],
['link', { rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css' }],
['link', {href: 'https://fonts.googleapis.com/icon?family=Material+Icons', rel :'stylesheet'}]
],
plugins: [
'@vuepress/last-updated',
'@vuepress/back-to-top',
'@vuepress/pwa'
],
themeConfig: {
// logo: './myAvatar.png',
sidebar: genSideBar('.'),
sidebarDepth: 2,
displayAllHeaders: true, // Default: false themeConfig: {
nav: genNavBarList(),
lastUpdated: 'Last Updated', // string | boolean
// Assumes GitHub. Can also be a full GitLab url.
repo: 'FriendlyUser/vuepress-theme-cool-starter',
// Customising the header label
// Defaults to "GitHub"/"GitLab"/"Bitbucket" depending on `themeConfig.repo`
repoLabel: 'Contribute!',
// Optional options for generating "Edit this page" link
// if your docs are in a different repo from your main project:
//docsRepo: 'FriendlyUser/markdown-notes-template',
// if your docs are not at the root of the repo:
//docsDir: 'docs',
// if your docs are in a specific branch (defaults to 'master'):
docsBranch: 'gh-pages',
// defaults to false, set to true to enable
editLinks: true,
// custom text for edit link. Defaults to "Edit this page"
editLinkText: 'Help us improve this page!'
},
title: 'Vuepress Theme Cool Starter',
description: 'Example project to get started with the vuepress-theme-cool',
configureWebpack: {
resolve: {
alias: {
'@alias': '../img'
}
}
},
plugins: {
'@vuepress/pwa': { serviceWorker: true,
updatePopup: {
message: "New content is available.",
buttonText: "Refresh"
}
}
},
markdown: {
extendMarkdown: md => {
md.set({ html: true })
md.use(require('markdown-it-katex'))
md.use(require('markdown-it-plantuml'))
md.use(require('markdown-it-admonition'))
md.use(require('markdown-it-task-lists'))
}
}
}
// Helper functions
function fromDir(startPath,filter,callback){
//console.log('Starting from dir '+startPath+'/');
if (!fs.existsSync(startPath)){
console.log("no dir ",startPath);
return;
}
var files=fs.readdirSync(startPath);
for(var i=0;i<files.length;i++){
var filename=path.join(startPath,files[i]);
var stat = fs.lstatSync(filename);
if (stat.isDirectory()){
fromDir(filename,filter,callback); //recurse
}
else if (filter.test(filename)) callback(filename);
};
};
function getDirectories(path) {
return fs.readdirSync(path).filter(function (file) {
if (file != '.vuepress') {
return fs.statSync(path+'/'+file).isDirectory();
}
});
}
function getFilesInDir(directoryName) {
var files = []
// sidebar settings
const relPath = path.join('docs', directoryName)
fromDir(relPath,/\.md$/,function(filename){
console.log('-- found: ',filename);
files.push(filename)
});
return files
}
// Base file names with removed file extensions
function getFilesInDirBase(directoryName) {
var files = []
// sidebar settings
const relPath = path.join('docs', directoryName)
fromDir(relPath,/\.md$/,function(filename){
let baseName = path.basename(filename)
// this it will fail on files without extension, see https://stackoverflow.com/questions/4250364/how-to-trim-a-file-extension-from-a-string-in-javascript
baseName = baseName.split('.').slice(0, -1).join('.')
// Add README as '', and everything else as standard
if (baseName.toUpperCase() == 'README') {
files.push('Home')
}
else {
files.push(baseName)
}
});
return files
}
// pass in the folder relative to the folder docs
function genSideBarConfigFolder (titleName, directoryName) {
const rawFilePaths = getFilesInDirBase(directoryName)
return [
{
title: titleName,
collapsable: true,
children: rawFilePaths
}
]
}
function genSideBar (directoryName) {
const dirNames = getFilesInDirBase(directoryName)
let markdownArray = []
for (var i = 0; i < dirNames.length; i++) {
let stringValue = dirNames[i].toString()
if(stringValue === 'Home' || stringValue === '') {
markdownArray.push('')
} else {
markdownArray.push(stringValue)
}
}
const sideBarConfig = {
'/': markdownArray
}
console.log(sideBarConfig)
return sideBarConfig
}
// doesn't work, fix later, can't figure out how to generate { text: link:} recursively? Or maybe have another function that returns text: link
function genNavBarList() {
let dirNames = []
// navbar settings
dirNames = getFilesInDirBase('.')
let navBarNames = [];
var numOfDirs = dirNames.length;
for (var i = 0; i < numOfDirs; i++) {
let stringValue = dirNames[i].toString()
// convert - to capitialization
stringValue = transformToUpperCase(stringValue)
let linkValue = '/'
if (stringValue !== 'Home') {
linkValue = `/${stringValue}/`
}
// @todo change loop to iterate for nested directories
if (true) {
navBarNames.push(genNavBarItem(stringValue,linkValue))
}
// last entry
else {
//navBarNames = navBarNames + "{ text : \'" + stringValue + "\', " + "link: " + "\'/" + stringValue + "/\'}, \n";
}
}
return navBarNames
}
function genNavBarItem(textValue, linkValue) {
return {
text: textValue,
link: linkValue
}
}
function transformToUpperCase(str) {
let upperString = str
upperString = upperString.replace(/-/g, ' ');
upperString = upperString.split(" ");
for (var i = 0, x = upperString.length; i < x; i++) {
upperString[i] = upperString[i][0].toUpperCase() + upperString[i].substr(1);
}
return upperString.join(" ");
}

118
docs/.vuepress/config.js Normal file
View File

@ -0,0 +1,118 @@
// .vuepress/config.js
module.exports = {
plugins: [
'@vuepress/back-to-top',
'@vuepress/pwa',
{
serviceWorker: true,
updatePopup: true
},
,
['container', {
type: 'vue',
before: '<pre class="vue-container"><code>',
after: '</code></pre>'
}]
],
port: 3030,
base: '/edu-dis-labs/',
theme: 'cool',
// dest: 'dist',
head: [
['link', { rel: 'icon', href: '/favicon.ico' }],
['link', { rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css' }],
['link', {href: 'https://fonts.googleapis.com/icon?family=Material+Icons', rel :'stylesheet'}],
],
themeConfig: {
// logo: './myAvatar.png',
sidebar: [
{
title: 'Вступ',
path:"/intro/"
},
{
title: 'Розроблення вимог до системи',
path:"/requirements/",
children: [
"/requirements/state-of-the-art",
"/requirements/stakeholders-needs"
]
},
{
title: 'Розроблення вимог до функціональности системи',
path:"/use-cases/"
},
{
title: 'Проєктування архітектури системи',
path:"/design/"
},
{
title: 'Реалізація інформаційного та програмного забезпечення',
path:"/software/"
},
{
title: 'Тестування працездатності системи',
path:"/test/"
},
{
title: 'Висновки',
path:"/conclusion/"
},
],
sidebarDepth: 2,
displayAllHeaders: true, // Default: false
nav: [
{ text: 'Початок', link: '/' },
],
lastUpdated: 'Останнє оновлення', // string | boolean
// Assumes GitHub. Can also be a full GitLab url.
repo: 'http://139.162.162.130:3000/hasslesstech/edu-dis-labs',
// Customising the header label
// Defaults to "GitHub"/"GitLab"/"Bitbucket" depending on `themeConfig.repo`
repoLabel: 'Gitea',
// Optional options for generating "Edit this page" link
// if your docs are in a different repo from your main project:
// docsRepo: 'boldak/dis-edu',
// if your docs are not at the root of the repo:
docsDir: 'docs',
// if your docs are in a specific branch (defaults to 'master'):
docsBranch: 'master',
// defaults to false, set to true to enable
// editLinks: true,
// custom text for edit link. Defaults to "Edit this page"
// editLinkText: 'Ви можете покращити цю сторінку'
},
title: 'Xpertise',
description: 'Лабораторні роботи з дисципліни "Організація баз даних"',
configureWebpack: {
resolve: {
alias: {
'@alias': '../img'
}
}
},
markdown: {
extendMarkdown: md => {
md.set({ html: true })
md.use(require('markdown-it-katex'))
md.use(require('markdown-it-plantuml'))
md.use(require('markdown-it-admonition'))
}
}
}

View File

@ -0,0 +1,30 @@
import Vuex from 'vuex'
import VueChartkick from 'vue-chartkick'
import Chart from 'chart.js'
import VueGoodTablePlugin from 'vue-good-table';
// The styles are important in another component because of the way webpack is configured
// import 'vue-good-table/dist/vue-good-table.css'
export default ({ Vue, options, router, siteData }) => {
Vue.use(Vuex)
Vue.use(VueChartkick, {adapter: Chart})
Vue.use(VueGoodTablePlugin)
Vue.mixin({
computed: {
$title() {
const page = this.$page
const siteTitle = this.$siteTitle
const selfTitle = page.frontmatter.home ? null : (
page.frontmatter.title || // explicit title
(page.title ? page.title.replace(/[_`]/g, '') : '') // inferred title
)
return siteTitle
? selfTitle
? (selfTitle + ' | ' + siteTitle)
: siteTitle
: selfTitle || 'VuePress'
}
}
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
docs/.vuepress/public/1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

BIN
docs/.vuepress/public/2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
docs/.vuepress/public/3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
docs/.vuepress/public/4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

BIN
docs/.vuepress/public/5.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -0,0 +1,16 @@
<pre>
Copyright 2021 Andrey Boldak Licensed under the
Educational Community License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may
obtain a copy of the License at
https://opensource.org/licenses/ECL-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the specific language governing
permissions and limitations under the License.
</pre>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,7 @@
import quiz1 from './quiz1.json'
import quiz2 from './quiz2.json'
export {
quiz1,
quiz2
}

View File

@ -0,0 +1,185 @@
{
"user": "Dave",
"questions": [
{
"text": "What is the full form of HTTP?",
"responses": [
{
"text": "Hyper text transfer package"
},
{
"text": "Hyper text transfer protocol",
"correct": true
},
{
"text": "Hyphenation text test program"
},
{
"text": "None of the above"
}
]
},
{
"text": "HTML document start and end with which tag pairs?",
"responses": [
{
"text": "HTML",
"correct": true
},
{
"text": "WEB"
},
{
"text": "HEAD"
},
{
"text": "BODY"
}
]
},
{
"text": "Which tag is used to create body text in HTML?",
"responses": [
{
"text": "HEAD"
},
{
"text": "BODY",
"correct": true
},
{
"text": "TITLE"
},
{
"text": "TEXT"
}
]
},
{
"text": "Outlook Express is _________",
"responses": [
{
"text": "E-Mail Client",
"correct": true
},
{
"text": "Browser"
},
{
"text": "Search Engine"
},
{
"text": "None of the above"
}
]
},
{
"text": "What is a search engine?",
"responses": [
{
"text": "A hardware component "
},
{
"text": "A machinery engine that search data"
},
{
"text": "A web site that searches anything",
"correct": true
},
{
"text": "A program that searches engines"
}
]
},
{
"text": "What does the .com domain represents?",
"responses": [
{
"text": "Network"
},
{
"text": "Education"
},
{
"text": "Commercial",
"correct": true
},
{
"text": "None of the above"
}
]
},
{
"text": "In Satellite based communication, VSAT stands for? ",
"responses": [
{
"text": " Very Small Aperture Terminal",
"correct": true
},
{
"text": "Varying Size Aperture Terminal "
},
{
"text": "Very Small Analog Terminal"
},
{
"text": "None of the above"
}
]
},
{
"text": "What is the full form of TCP/IP? ",
"responses": [
{
"text": "Telephone call protocol / international protocol"
},
{
"text": "Transmission control protocol / internet protocol",
"correct": true
},
{
"text": "Transport control protocol / internet protocol "
},
{
"text": "None of the above"
}
]
},
{
"text": "What is the full form of HTML?",
"responses": [
{
"text": "Hyper text marking language"
},
{
"text": "Hyphenation text markup language "
},
{
"text": "Hyper text markup language",
"correct": true
},
{
"text": "Hyphenation test marking language"
}
]
},
{
"text": "\"Yahoo\", \"Infoseek\" and \"Lycos\" are _________?",
"responses": [
{
"text": "Browsers "
},
{
"text": "Search Engines",
"correct": true
},
{
"text": "News Group"
},
{
"text": "None of the above"
}
]
}
]
}

View File

@ -0,0 +1,41 @@
{
"user": "Dave",
"questions": [
{
"text": "Who is the Batman",
"responses": [
{
"text": "Laughing Bat"
},
{
"text": "Bruce Wayne",
"correct": true
},
{
"text": "Dick Grayson"
},
{
"text": "None of the above"
}
]
},
{
"text": "\"Yahoo\", \"Infoseek\" and \"Lycos\" are _________?",
"responses": [
{
"text": "Browsers "
},
{
"text": "Search Engines",
"correct": true
},
{
"text": "News Group"
},
{
"text": "None of the above"
}
]
}
]
}

View File

@ -0,0 +1,179 @@
@import url(https://fonts.googleapis.com/icon?family=Material+Icons)
.admonition.note,
.admonition.hint,
.admonition.danger,
.admonition.caution,
.admonition.error,
.admonition.attention {
box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 1px 5px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.2);
position: relative;
margin: 1.5625em 0;
padding: 0 1.2rem;
border-left: 0.4rem solid #448aff;
border-radius: 0.2rem;
overflow: auto;
}
html .admonition>:last-child {
margin-bottom: 1.2rem;
}
.admonition .admonition {
margin: 1em 0;
}
.admonition p {
margin-top: 0.5em;
}
.admonition.note>.admonition-title:before,
.admonition.hint>.admonition-title:before,
.admonition.danger>.admonition-title:before,
.admonition.caution>.admonition-title:before,
.admonition.error>.admonition-title:before,
.admonition.attention>.admonition-title:before {
position: absolute;
left: 1.2rem;
font-family: "Material Icons";
font-size: 24px;
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
.admonition.note>.admonition-title,
.admonition.hint>.admonition-title,
.admonition.danger>.admonition-title,
.admonition.caution>.admonition-title,
.admonition.error>.admonition-title,
.admonition.attention>.admonition-title {
margin: 0 -1.2rem;
padding: 0.8rem 1.2rem 0.8rem 4rem;
border-bottom: 0.1rem solid rgba(68,138,255,0.1);
background-color: rgba(68,138,255,0.1);
font-weight: 700;
}
.admonition>.admonition-title:last-child {
margin-bottom: 0;
}
.admonition.note {
border-left-color: #448aff;
}
.admonition.note>.admonition-title {
border-bottom-color: 0.1rem solid rgba(68,138,255,0.1);
background-color: rgba(68,138,255,0.1);
}
.admonition.note>.admonition-title:before {
color: #448aff;
content: "note";
}
.admonition.hint {
border-left-color: #00bfa5;
}
.admonition.hint>.admonition-title {
border-bottom-color: 0.1rem solid rgba(0,191,165,0.1);
background-color: rgba(0,191,165,0.1);
}
.admonition.hint>.admonition-title:before {
color: #00bfa5;
content: "info";
}
.admonition.danger {
border-left-color: #ff1744;
}
.admonition.danger>.admonition-title {
border-bottom-color: 0.1rem solid rgba(255,23,68,0.1);
background-color: rgba(255,23,68,0.1);
}
.admonition.danger>.admonition-title:before {
color: #ff1744;
content: "block";
}
.admonition.caution {
border-left-color: #ff9100;
}
.admonition.caution>.admonition-title {
border-bottom-color: 0.1rem solid rgba(255,145,0,0.1);
background-color: rgba(255,145,0,0.1);
}
.admonition.caution>.admonition-title:before {
color: #ff9100;
content: "warning";
}
.admonition.error {
border-left-color: #ff1744;
}
.admonition.error>.admonition-title {
border-bottom-color: 0.1rem solid rgba(255,23,68,0.1);
background-color: rgba(255,23,68,0.1);
}
.admonition.error>.admonition-title:before {
color: #ff1744;
content: "error";
}
.admonition.attention {
border-left-color: #64dd17;
}
.admonition.attention>.admonition-title {
border-bottom-color: 0.1rem solid rgba(100,221,23,0.1);
background-color: rgba(100,221,23,0.1);
}
.admonition.attention>.admonition-title:before {
color: #64dd17;
content: "priority_high";
}
body {
font-size 16px;
text-align: justify;
}
.theme-default-content:not(.custom) {
max-width: 950px;
margin: 0 auto;
padding: 2rem 2.5rem;
}
.sidebar-heading {
color: #2c3e50;
transition: color 0.15s ease;
cursor: pointer;
font-size: 1em !important;
font-weight: 500 !important;
padding: 0.35rem 1.5rem 0.35rem 1.25rem;
width: 100%;
box-sizing: border-box;
margin: 0;
border-left: 0.25rem solid transparent;
}

View File

@ -0,0 +1,89 @@
// showing default values
$accentColor = #0984e3
$textColor = #2c3e50
$borderColor = #eaecef
$codeBgColor = #282c34
$admonition
box-shadow 0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2)
position relative
margin 1.5625em 0
padding 0 1.2rem
border-left .4rem solid #448aff
border-radius .2rem
overflow auto
html .admonition>:last-child
margin-bottom 1.2rem
.admonition .admonition
margin 1em 0
.admonition p
margin-top: 0.5em
$admonition-icon
position absolute
left 1.2rem
font-family: "Material Icons"
font-weight: normal;
font-style: normal;
font-size: 24px
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
$admonition-title
margin 0 -1.2rem
padding .8rem 1.2rem .8rem 4rem
border-bottom .1rem solid rgba(68,138,255,.1)
background-color rgba(68,138,255,.1)
font-weight 700
.admonition>.admonition-title:last-child
margin-bottom 0
admonition_types = {
note: {color: #0288D1, icon: "edit_sharp"},
abstract: {color: #c5d845, icon: "speaker_notes_filled"},
info: {color: #19d8f5, icon: "info"}
tip: {color: #00bfa5, icon: "code"},
success: {color: #00c853, icon: "check_circle_outline"},
question: {color: #64dd17, icon: "help"},
warning: {color: #ff9100, icon: "warning"},
failure: {color: #ff5252, icon: "close"},
danger: {color: #c2185b, icon: "flash_on"},
bug: {color: #e040fb, icon: "bug_report"},
example: {color: #651fff, icon: "format_list_numbered_rtl"},
quote: {color: #9e9e9e, icon: "format_quote"}
}
for name, val in admonition_types
.admonition.{name}
@extend $admonition
border-left-color: val[color]
.admonition.{name}>.admonition-title
@extend $admonition-title
border-bottom-color: .1rem solid rgba(val[color], 0.2)
background-color: rgba(val[color], 0.2)
.admonition.{name}>.admonition-title:before
@extend $admonition-icon
color: val[color]
content: val[icon]

0
publish.sh Normal file → Executable file
View File

0
utils/table-generator/convert.py Normal file → Executable file
View File

0
utils/table-generator/list-exceptions.sh Normal file → Executable file
View File

0
utils/table-generator/update-activities.py Normal file → Executable file
View File

0
utils/table-generator/update-activities.sh Normal file → Executable file
View File

0
utils/table-generator/update-tables.sh Normal file → Executable file
View File