This commit is contained in:
Quatalog Updater 2024-03-16 21:23:47 +00:00
commit 84be86373b
38 changed files with 1510 additions and 0 deletions

33
.github/workflows/merge.yml vendored Normal file
View file

@ -0,0 +1,33 @@
name: Merge main into static-generated
on:
push:
branches:
- main
jobs:
merge-branches:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout main
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout static-generated
uses: actions/checkout@v4
with:
ref: static-generated
token: ${{ secrets.GITHUB_TOKEN }}
- name: Merge branches manually
run: |
git config --global user.name "Quatalog Updater"
git config --global user.email "github_actions@quatalog.com"
git checkout main
git checkout --orphan new-static-generated
git commit -m '${{ github.event.head_commit.message }}'
git merge static-generated --strategy-option ours --allow-unrelated-histories
git push -u -f origin HEAD:static-generated

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 quatalog
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

2
README.md Normal file
View file

@ -0,0 +1,2 @@
# quatalog
A tool to show when an RPI course has been offered in the past, using quacs-data.

22
coursedisplay.html Normal file
View file

@ -0,0 +1,22 @@
<html>
<head>
<script>
const params = window
.location
.search
.slice(1)
.split("&")
.map(p => p.split("="))
.reduce((obj,[key,value]) =>
({ ...obj, [key]: decodeURIComponent(value) }),
{}
);
const course = params["course"];
if(course != undefined) {
window.location.replace("courses/"+(params["course"]));
} else {
window.location.replace(".");
}
</script>
</head>
</html>

194
css/common.css Normal file
View file

@ -0,0 +1,194 @@
/* common variables */
:root{
--quacs-yellow: #f5b53f;
--quacs-midtone: #f5cc81;
--quacs-white: #f5e3c2;
--quacs-whiter: #fAf1e0;
--quacs-whitest: #fdf8f0;
--deepest-purple: #12121a;
--deeper-purple: #191823;
--deep-purple: #201f2c;
--mid-dark-purple: #2c2b3d;
--mid-purple: #37364d;
--mid-light-purple: #494766;
--light-purple: #5c5980;
--white: #ffffff;
--pink: #f53faa;
--red: #f53f6a;
--green: #3ff57f;
--blue: #3f6ef5;
font-size: calc(1vmin + 12px);
}
* {
font-family: "proxima-nova";
/* font-family: "IBM Plex Sans"; */
}
body {
background-color: var(--background-color);
overflow-x:hidden;
margin: 0;
font-size: 0.9rem; /* default font-size. works well for small-ish thing */
}
::selection{
background: var(--selection-color);
}
.hidden{
visibility: hidden;
margin: 0;
height: 0vw;
}
svg {
overflow: visible;
}
/* TEXT */
h1, h1 a {
color: var(--h-text-color);
font-family: "proxima-nova";
font-weight: 900;
margin-top: 0vmin;
margin-bottom: 0vmin;
padding-bottom: 0;
display: block;
position: relative;
font-size: 2.25rem;
}
h2 {
font-size: 1.4rem;
margin-top: 1vmin;
margin-bottom: 0;
}
p {
color: var(--p-text-color);
font-family: "proxima-nova";
font-size: 1.2rem;
margin-bottom: 0;
margin-top: 0;
}
p a, p svg {
color: var(--link-text-color);
fill: var(--link-text-color);
max-height: 4vmin;
width: 4vmin;
vertical-align: bottom;
}
p svg {
display: inline-block;
}
p a:hover, p a:hover svg {
color: var(--link-hover-color);
fill: var(--link-hover-color);
}
/* HEADER */
#qlog-header {
border-bottom: 0.2vmin solid var(--header-color);
width: 100%;
min-height: 5.25vmin;
left: 0;
top: 0;
position: relative;
display: inline-flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
#qlog-wordmark svg {
height: 4.5vmin;
aspect-ratio: 454/100;
left: 0;
top: 0;
position: relative;
margin: 1vmin;
margin-bottom: 0.75vmin;
margin-left: 2vmin;
}
.header-search {
position: relative;
right: 1vmin;
width: 12rem;
height: 1.8rem;
font-size: 1.1rem;
padding-left: 0.9rem;
padding-right: 0.9rem;
}
input[type="text"] {
background: var(--input-background-color);
border-radius: 100vw;
border: none;
outline:none;
font-family: "proxima-nova";
color: var(--input-text-color);
caret-color: var(--input-text-color);
}
input[type="text"]::selection{
background: var(--input-selection-color);
}
/* fonts */
@font-face{
font-family: "rivalsans";
src: url("../fonts/rivalsans-regular.otf");
}
@font-face{
font-family: "rivalsans";
src: url("../fonts/rivalsans-bold.otf");
font-weight: 700;
}
@font-face{
font-family: "rivalsans";
src: url("../fonts/rivalsans-extrabold.otf");
font-weight: 800;
}
@font-face{
font-family: "rivalsans";
src: url("../fonts/rivalsans-black.otf");
font-weight: 900;
}
@font-face {
font-family: "proxima-nova";
src: url("../fonts/Proxima-Nova-Black.otf");
font-weight: 900;
}
@font-face {
font-family: "proxima-nova";
src: url("../fonts/Proxima-Nova-Bold.otf");
font-weight: 700;
}
@font-face {
font-family: "proxima-nova";
src: url("../fonts/Proxima-Nova-Extrabold.otf");
font-weight: 800;
}
@font-face {
font-family: "proxima-nova";
src: url("../fonts/Proxima-Nova-Thin.otf");
font-weight: 200;
}
@font-face {
font-family: "proxima-nova";
src: url("../fonts/Proxima-Nova-Regular.otf");
}

471
css/coursedisplay.css Normal file
View file

@ -0,0 +1,471 @@
.term ::selection{
background: var(--table-selection-color);
}
#cd-flex{
display: flex;
position: relative;
flex-direction: row;
margin-right: 1vw;
margin-top: 1vmin;
justify-content: space-between;
}
#course-info-container{
position:relative;
width: 47vw;
left: 2vmin;
height: 90vmin;
margin-bottom: 7vmin;
}
#name {
font-size: 3.75rem;
left: 0vw;
}
#code {
color: var(--course-code-color);
font-size: 1.8rem;
font-weight: 900;
position: relative;
left: 0vw;
margin-bottom: 1vmin;
}
#cattrs-container{
position: relative;
left: 0vw;
margin-bottom: 1vmin;
margin-top: 2vmin;
}
.attr-pill{
color: var(--pill-text-color);
position: relative;
left: 0vw;
background: var(--pill-default-color);
border-radius: 2vmin;
padding: 0.5vmin 1.5vmin;
margin-right: 0.5vmin;
font-weight: 700;
display: inline-block;
margin-bottom: 0.5vmin;
}
.rel-info-container{
margin-bottom: 1.25vmin;
}
.rel-info-title{
font-size: 1.25rem;
font-weight: 700;
color: var(--info-title-color);
margin-right: 0.5vmin;
}
.rel-info-courses{
margin-top: 0.7vmin;
position: relative;
font-size: 1rem;
}
.course-pill{
color: var(--pill-text-color);
position: relative;
left: 0vw;
background: var(--course-pill-color);
border-radius: 2vmin;
padding: 0.5vmin 1.5vmin;
font-weight: 700;
display: inline-block;
margin-right: 0.5vmin;
margin-bottom: 0.5vmin;
text-decoration: none;
transition-property: background;
transition-duration: 100ms;
width: fit-content;
}
.course-pill:hover{
background: var(--course-pill-hover-color);
}
#prereq-classes{
display: flex;
align-items: center;
width: fit-content;
flex-wrap: wrap;
flex-basis: content;
}
.pr-or-con{
background: var(--or-block-color);
display:grid;
grid-auto-flow: row;
height: fit-content;
width: fit-content;
padding: 0.5vmin;
display: inline-block;
border-radius: 2vmin;
margin-bottom: 0.75vw;
}
.pr-or-title{
color: var(--or-text-color);
font-size: 1.3rem;
font-weight: 700;
margin-bottom: 0.5vmin;
text-align: center;
}
.pr-or{
background: var(--or-block-bg-color);
padding: 1vmin;
border-radius: 1.5vmin;
display: flex;
flex-direction: row;
align-items: center;
flex-wrap: wrap;
justify-content: space-evenly;
height: max-content;
width: fit-content;
}
.pr-or .course-pill{
margin-right: 0.25vmin;
margin-left: 0.25vmin;
margin-bottom: 0.25vmin;
margin-top: 0.25vmin
}
.pr-and{
display: inline;
margin-left: 0.75vmin;
margin-right: 0.75vmin;
color: var(--and-text-color);
background: var(--and-block-color);
padding: 1vmin;
font-size: 1.2rem;
font-weight: 700;
width: min-content;
height: min-content;
border-radius: 0.75vmin;
margin-bottom: 0.75vw;
}
.none-rect{
background: var(--none-block-color);
color: var(--none-text-color);
font-size: 2vmin;
position: relative;
left: 0vw;
border-radius: 0.5vmin;
padding: 0.5vmin 1.5vmin;
margin-right: 0.5vmin;
font-weight: 700;
display: inline-block;
margin-bottom: 0.5vmin;
}
.unknown-rect{
background: var(--unknown-block-color);
color: var(--unknown-text-color);
font-size: 2vmin;
position: relative;
left: 0vw;
border-radius: 0.5vmin;
padding: 0.5vmin 1.5vmin;
margin-right: 0.5vmin;
font-weight: 700;
display: inline-block;
margin-bottom: 0.5vmin;
}
#past-container{
position: relative;
width: 47.5vw;
justify-content: right;
}
#past-title{
right: 0vmin;
text-align: right;
width: 100%;
white-space: nowrap;
}
#opt-container{
left: 6.875vmin;
/* right: 0; */
width: calc(47.5vw - 6.9vmin);
height: fit-content;
position: relative;
display: grid;
grid-template-columns: 50% 48%;
justify-content: space-between;
margin-bottom: 1vmin;
}
#key-panel{
/* background: var(--blue); */
width: 100%;
display:flex;
/* left: 6vmin; */
left: 0;
position: relative;
flex-direction: column;
justify-content: space-between;
align-content: center;
/* text-align: right; */
}
.key-code{
color: var(--key-text-color);
}
.code-icon svg {
width: 0.9rem;
max-height: 0.9rem;
text-align: justify!important;
vertical-align: bottom;
display: inline-block;
padding-bottom: 0.5vmin;
padding-right: 0vmin;
overflow: visible;
}
#yes-code-icon svg {
fill: var(--yes-color);
}
#no-code-icon svg {
fill: var(--no-color);
}
#diff-code-icon svg {
fill: var(--diff-code-color);
}
#nil-code-icon svg {
fill: var(--nil-color);
}
#control-panel{
/* background: var(--red); */
width: 100%;
display:flex;
flex-direction: column;
}
.view-icon svg{
width: 0.9rem;
max-height: 0.9rem;
text-align: justify!important;
vertical-align: bottom;
display: inline-block;
padding-bottom: 0.5vmin;
padding-right: 0vmin;
overflow: visible;
fill: var(--view-select-color);
transition: fill .1s;
}
#years-table{
/* margin-top: 1vmin; */
position: relative;
left: 0vw;
width: 100%;
border-spacing: 0.25vmin;
/* padding-left: 0.25vmin;
padding-right: 0.25vmin; */
border-width: 0;
}
.term{
color: var(--term-text-color);
font-size: 1.5vmin;
width: min-content;
/* word-break: break-all; */
}
/*
handle our hidings here
*/
.term {
background-size: 5vmin 5vmin;
height: 5vmin;
background-origin: content-box;
background-position: center;
background-repeat: no-repeat;
padding: 1vmin;
}
input[type="radio"] {
display: none;
}
.view-icon-selected, .view-icon-unselected {
display: none;
}
input[value="simple"]:checked ~ div #simple-view-icon .view-icon-selected,
input[value="simple"]:not(:checked) ~ div #simple-view-icon .view-icon-unselected,
input[value="detailed"]:checked ~ div #detail-view-icon .view-icon-selected,
input[value="detailed"]:not(:checked) ~ div #detail-view-icon .view-icon-unselected {
display: inline-block;
}
input[value="simple"]:checked ~ div #simple-view-label,
input[value="detailed"]:checked ~ div #detail-view-label {
color: var(--view-select-color-selected);
}
.view-option-label {
cursor: pointer;
transition: color .1s;
color: var(--view-select-color);
}
.view-icon-selected svg {
fill: var(--view-select-color-selected);
}
input[value="simple"]:checked ~ table .not-offered {
background-image: url(../icons.svg#circle-no-view);
}
input[value="simple"]:checked ~ table .offered {
background-image: url(../icons.svg#circle-check-view);
}
input[value="simple"]:checked ~ table .offered-diff-code {
background-image: url(../icons.svg#circle-question-view);
}
input[value="simple"]:checked ~ table .unscheduled {
background-image: url(../icons.svg#circle-empty-view);
}
input[value="detailed"]:checked ~ table .detail-view-container {
display: flex;
}
.detail-view-container{
display: none;
flex-direction: column;
justify-content: space-between;
align-items: center;
padding-bottom: 1vmin;
padding-top: 1vmin;
font-size: 1rem;
}
.term-course-info {
font-weight: bold;
}
.course-capacity {
font-style: italic;
}
.term-course-info{
text-align: center;
margin-left: 0.1rem;
margin-right: 0.1rem;
height: 100%;
}
.term-course-info a:link {
color: var(--table-link-color);
}
.term-course-info a:visited {
color: var(--table-link-color);
}
.term-course-info a:hover {
color: var(--table-link-hover-color);
}
.term-course-info a:active {
color: var(--table-link-selected-color);
}
.term li{
width: fit-content;
list-style-position: inside;
padding-left: 0.5vmin;
padding-right: 0.5vmin;
margin-bottom: 0.2vmin;
font-weight: 500;
}
.term ul{
padding-left: 0.5vmin;
padding-right: 1vmin;
width: fit-content;
margin-top: 0.15rem;
margin-bottom: 0.15rem;
}
.season-label{
color: var(--season-label-color);
font-size: 1.4rem;
}
.midsum-label{
color: var(--mid-summer-label-color);
white-space: break-spaces;
}
.year{
color: var(--year-label-color);
text-align: left;
width: 6vmin;
}
.offered {
background-color: var(--yes-color);
}
.offered-diff-code {
background-color: var(--diff-code-color);
}
.not-offered {
background-color: var(--no-color);
height: 2rem;
}
.unscheduled {
background-color: var(--nil-color);
}
@media (max-aspect-ratio: 5/4), (orientation: portrait){
#cd-flex{
flex-direction: column;
align-items: center;
margin-right: 1vw;
margin-left: 1vw;
padding-bottom: 3vmin;
}
#course-info-container{
position:relative;
width: 90vw;
margin-bottom: 1vmin;
height: max-content;
}
#past-container{
position: relative;
width: 95vw;
justify-content: center;
}
#past-title{
text-align: center;
}
#opt-container{
width: calc(90vw - 6.9vmin);
}
}

45
css/home.css Normal file
View file

@ -0,0 +1,45 @@
#home-title {
left: 30vw;
aspect-ratio: 337/181;
position: relative;
margin-top: 10vmin;
width: 40vw;
}
.home-search {
/* min-height: 3vmin; */
top: 0vmin;
position: relative;
font-size: 2rem;
margin: 10vmin auto;
margin-top: 5vmin;
width: 50vmin;
display: block;
padding: 1.6vmin;
padding-left: 1.8rem;
padding-right: 1.8rem;
}
#home-footer {
text-align: center;
}
#home-footer a {
text-decoration: none;
border-bottom: solid;
border-width: 0.05rem;
vertical-align: center;
}
#github-icon {
height: 1.2rem;
margin-bottom: 0.1rem;
}
@media (max-aspect-ratio: 5/4), (orientation: portrait) {
#home-title {
left: 12.5vw;
width: 75vw;
}
}

161
css/search.css Normal file
View file

@ -0,0 +1,161 @@
:root {
--entry-width: 70vw;
--hover-expand-width: 0.5vw;
--transition-time: 0.1s;
}
#searchTitle {
font-size: 2rem;
position: relative;
display: block;
width: 100vw;
height: fit-content;
left: 0vw;
text-align: center;
margin-top: 2.5vmin;
color: var(--search-title-color);
font-weight: 500;
}
#searchTerm {
color: var(--search-term-color);
}
#searchResultsContainer {
width: 100%;
display: flex;
flex-direction: column;
position: relative;
justify-content: center;
align-items: center;
margin-top: 2vmin;
}
#searchResultsContainer tr {
width: var(--entry-width);
background: var(--search-entry-bg-color);
margin-bottom: 2vmin;
margin-left: var(--hover-expand-width);
margin-right: var(--hover-expand-width);
color: var(--search-entry-text-color);
border-radius: 0.5rem;
position: relative;
display: flex;
flex-direction: column;
transition-property: all;
transition-duration: var(--transition-time);
}
#searchResultsContainer a {
text-decoration: none;
}
#searchResultsContainer tr:hover {
background: var(--search-entry-bg-hover-color);
margin-left: 0;
margin-right: 0;
width: calc(var(--entry-width) + 2*var(--hover-expand-width));
border-radius: calc(2vmin + 0.5vw);
}
#searchResultsContainer tr:hover p,
#searchResultsContainer tr:hover div {
margin-left: var(--hover-expand-width);
margin-right: var(--hover-expand-width);
}
#searchResultsContainer tr p,
#searchResultsContainer tr div {
transition-property: all;
transition-duration: var(--transition-time);
}
#searchResultsContainer tr h3 {
margin: 0;
padding: 1vmin;
padding-left: 1.5vmin;
font-size: 1.25rem;
color: var(--search-entry-title-color);
border-bottom: solid;
border-bottom-width: 0.2vmin;
}
#searchResultsContainer tr h3 div {
display: flex;
flex-wrap: wrap;
flex-direction: row;
align-items: baseline;
}
.pill {
background: var(--pill-default-color);
color: var(--pill-text-color);
display: flex;
font-size: 1rem;
font-weight: 400;
padding-left: 1.5vmin;
padding-right: 1.5vmin;
border-radius: 3vmin;
margin-bottom: 0.25vmin;
margin-top: 0.25vmin;
margin-right: 1vmin;
}
.pill svg {
display: inline-block;
align-self: center;
width: 1rem;
max-height: 1rem;
padding-left: 0.5vmin;
fill: var(--pill-svg-color);
}
.CI-pill {
background: var(--ci-pill-color);
}
.WI-pill {
background: var(--wi-pill-color);
}
.PDII-pill {
background: var(--pdii-pill-color);
}
.HInq-pill {
background: var(--hinq-pill-color);
}
.courseName {
color: var(--course-name-color);
font-size: 1.45rem;
}
.courseCode {
color: var(--course-code-color);
font-weight: 400;
font-size: 1rem;
}
#searchResultsContainer p {
padding: 1.5vmin;
font-size: 1rem;
}
#searchResultsContainer h3 span {
margin-right: 0.5vw;
}
#searchResultsContainer h3:hover p {
padding-left: calc(1.5vmin + var(--hover-expand-width));
padding-right: calc(1.5vmin + var(--hover-expand-width));
}
@media (orientation: portrait) {
#searchResultsContainer tr {
width: 90vw;
}
#searchResultsContainer tr:hover {
width: 91vw;
}
}

80
css/themes.css Normal file
View file

@ -0,0 +1,80 @@
:root {
--background-color: var(--deep-purple);
--selection-color: var(--mid-light-purple);
--h-text-color: var(--quacs-yellow);
--p-text-color: var(--quacs-white);
--link-text-color: var(--quacs-midtone);
--link-hover-color: var(--quacs-yellow);
--header-color: var(--quacs-yellow);
--input-background-color: var(--quacs-white);
--input-text-color: var(--mid-dark-purple);
--input-selection-color: var(--quacs-yellow);
--search-title-color: var(--quacs-yellow);
--search-term-color: var(--quacs-midtone);
--search-entry-title-color: var(--quacs-midtone);
--search-entry-text-color: var(--quacs-white);
--search-entry-bg-color: var(--mid-dark-purple);
--search-entry-bg-hover-color: var(--mid-purple);
--pill-default-color: var(--quacs-yellow);
--pill-text-color: var(--deep-purple);
--pill-svg-color: var(--deep-purple);
--ci-pill-color: var(--green);
--wi-pill-color: var(--pill-default-color);
--course-pill-color: var(--pill-default-color);
--course-pill-hover-color: var(--quacs-midtone);
--pdii-pill-color: var(--red);
--hinq-pill-color: var(--pink);
--table-selection-color: var(--quacs-yellow);
--info-title-color: var(--quacs-white);
--course-name-color: var(--h-text-color);
--course-code-color: var(--quacs-midtone);
--or-block-color: var(--blue);
--or-block-bg-color: var(--background-color);
--or-text-color: var(--quacs-white);
--and-block-color: var(--red);
--and-text-color: var(--or-text-color);
--none-block-color: var(--red);
--none-text-color: var(--or-text-color);
--unknown-block-color: var(--pink);
--unknown-text-color: var(--or-text-color);
--key-text-color: var(--quacs-midtone);
--yes-color: var(--green);
--no-color: var(--red);
--diff-code-color: var(--quacs-yellow);
--nil-color: var(--mid-light-purple);
--view-select-color: var(--key-text-color);
--term-text-color: var(--deep-purple);
--view-select-color-selected: var(--quacs-yellow);
--season-label-color: var(--quacs-midtone);
--year-label-color: var(--quacs-midtone);
--mid-summer-label-color: var(--quacs-white);
--table-link-color: var(--mid-light-purple);
--table-link-hover-color: var(--light-purple);
--table-link-selected-color: var(--light-purple);
}
@media (prefers-color-scheme: light) {
:root {
--background-color: var(--white);
--selection-color: var(--quacs-yellow);
--h-text-color: var(--mid-purple);
--p-text-color: var(--deep-purple);
--search-title-color: var(--mid-light-purple);
--search-term-color: var(--light-purple);
--search-entry-text-color: var(--deep-purple);
--search-entry-title-color: var(--mid-purple);
--search-entry-bg-color: var(--quacs-whitest);
--search-entry-bg-hover-color: var(--quacs-whiter);
--course-code-color: var(--mid-light-purple);
--or-text-color: var(--white);
--key-text-color: var(--mid-light-purple);
--view-select-color-selected: var(--deep-purple);
--season-label-color: var(--deep-purple);
--year-label-color: var(--mid-purple);
--mid-summer-label-color: var(--mid-purple);
--info-title-color: var(--deep-purple);
}
/*#qlog-wordmark {
display: none;
}*/
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
favicon/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 638 B

BIN
favicon/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
favicon/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
favicon/quatalogIcon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

19
favicon/site.webmanifest Normal file
View file

@ -0,0 +1,19 @@
{
"name": "",
"short_name": "",
"icons": [
{
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

Binary file not shown.

BIN
fonts/Proxima-Nova-Bold.otf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
fonts/Proxima-Nova-Thin.otf Normal file

Binary file not shown.

BIN
fonts/rivalsans-black.otf Normal file

Binary file not shown.

BIN
fonts/rivalsans-bold.otf Normal file

Binary file not shown.

Binary file not shown.

BIN
fonts/rivalsans-regular.otf Normal file

Binary file not shown.

86
icons.svg Normal file
View file

@ -0,0 +1,86 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<style>
#circle-no,
#circle-check,
#circle-empty,
#circle-question {
fill: #2c2b3d;
}
</style>
<symbol id="message" viewBox="0 0 640 512">
<path d="M208 352c114.9 0 208-78.8 208-176S322.9 0 208 0S0 78.8 0 176c0 38.6 14.7 74.3 39.6 103.4c-3.5 9.4-8.7 17.7-14.2 24.7c-4.8 6.2-9.7 11-13.3 14.3c-1.8 1.6-3.3 2.9-4.3 3.7c-.5 .4-.9 .7-1.1 .8l-.2 .2 0 0 0 0C1 327.2-1.4 334.4 .8 340.9S9.1 352 16 352c21.8 0 43.8-5.6 62.1-12.5c9.2-3.5 17.8-7.4 25.3-11.4C134.1 343.3 169.8 352 208 352zM448 176c0 112.3-99.1 196.9-216.5 207C255.8 457.4 336.4 512 432 512c38.2 0 73.9-8.7 104.7-23.9c7.5 4 16 7.9 25.2 11.4c18.3 6.9 40.3 12.5 62.1 12.5c6.9 0 13.1-4.5 15.2-11.1c2.1-6.6-.2-13.8-5.8-17.9l0 0 0 0-.2-.2c-.2-.2-.6-.4-1.1-.8c-1-.8-2.5-2-4.3-3.7c-3.6-3.3-8.5-8.1-13.3-14.3c-5.5-7-10.7-15.4-14.2-24.7c24.9-29 39.6-64.7 39.6-103.4c0-92.8-84.9-168.9-192.6-175.5c.4 5.1 .6 10.3 .6 15.5z"/>
</symbol>
<symbol id="pencil" viewBox="0 0 512 512">
<path d="M410.3 231l11.3-11.3-33.9-33.9-62.1-62.1L291.7 89.8l-11.3 11.3-22.6 22.6L58.6 322.9c-10.4 10.4-18 23.3-22.2 37.4L1 480.7c-2.5 8.4-.2 17.5 6.1 23.7s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L387.7 253.7 410.3 231zM160 399.4l-9.1 22.7c-4 3.1-8.5 5.4-13.3 6.9L59.4 452l23-78.1c1.4-4.9 3.8-9.4 6.9-13.3l22.7-9.1v32c0 8.8 7.2 16 16 16h32zM362.7 18.7L348.3 33.2 325.7 55.8 314.3 67.1l33.9 33.9 62.1 62.1 33.9 33.9 11.3-11.3 22.6-22.6 14.5-14.5c25-25 25-65.5 0-90.5L453.3 18.7c-25-25-65.5-25-90.5 0zm-47.4 168l-144 144c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l144-144c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z"/>
</symbol>
<symbol id="magnifying" viewBox="0 0 512 512">
<path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/>
</symbol>
<symbol id="briefcase" viewBox="0 0 512 512">
<path d="M184 48H328c4.4 0 8 3.6 8 8V96H176V56c0-4.4 3.6-8 8-8zm-56 8V96H64C28.7 96 0 124.7 0 160v96H192 320 512V160c0-35.3-28.7-64-64-64H384V56c0-30.9-25.1-56-56-56H184c-30.9 0-56 25.1-56 56zM512 288H320v32c0 17.7-14.3 32-32 32H224c-17.7 0-32-14.3-32-32V288H0V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V288z"/>
</symbol>
<symbol id="laptop" viewBox="0 0 640 512">
<path d="M128 32C92.7 32 64 60.7 64 96V352h64V96H512V352h64V96c0-35.3-28.7-64-64-64H128zM19.2 384C8.6 384 0 392.6 0 403.2C0 445.6 34.4 480 76.8 480H563.2c42.4 0 76.8-34.4 76.8-76.8c0-10.6-8.6-19.2-19.2-19.2H19.2z"/>
</symbol>
<symbol id="house-laptop" viewBox="0 0 640 512">
<path d="M218.3 8.5c12.3-11.3 31.2-11.3 43.4 0l208 192c6.7 6.2 10.3 14.8 10.3 23.5H336c-19.1 0-36.3 8.4-48 21.7V208c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h64V416H112c-26.5 0-48-21.5-48-48V256H32c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8.1-35.2l208-192zM352 304V448H544V304H352zm-48-16c0-17.7 14.3-32 32-32H560c17.7 0 32 14.3 32 32V448h32c8.8 0 16 7.2 16 16c0 26.5-21.5 48-48 48H544 352 304c-26.5 0-48-21.5-48-48c0-8.8 7.2-16 16-16h32V288z"/>
</symbol>
<symbol id="skull" viewBox="0 0 512 512">
<path d="M416 398.9c58.5-41.1 96-104.1 96-174.9C512 100.3 397.4 0 256 0S0 100.3 0 224c0 70.7 37.5 133.8 96 174.9c0 .4 0 .7 0 1.1v64c0 26.5 21.5 48 48 48h48V464c0-8.8 7.2-16 16-16s16 7.2 16 16v48h64V464c0-8.8 7.2-16 16-16s16 7.2 16 16v48h48c26.5 0 48-21.5 48-48V400c0-.4 0-.7 0-1.1zM224 256c0 35.3-28.7 64-64 64s-64-28.7-64-64s28.7-64 64-64s64 28.7 64 64zm128 64c-35.3 0-64-28.7-64-64s28.7-64 64-64s64 28.7 64 64s-28.7 64-64 64z"/>
</symbol>
<symbol id="amogus" viewBox="0 0 261.1819 331.5457">
<path d="M354.8419,155.6564H344.3814a88.2754,88.2754,0,0,0-85.1231-64.9293h0a88.2421,88.2421,0,0,0-88.242,88.2422v7.2568h0a45.1069,45.1069,0,0,0-45.1069,45.1069v15.761a45.1069,45.1069,0,0,0,45.1069,45.107h0v.2909q0,3.5648.2813,7.06a26.32,26.32,0,0,0-.2813,3.823v91.78a26.1187,26.1187,0,0,0,26.1187,26.1188h0a26.1187,26.1187,0,0,0,26.1187-26.1188v-22.08a87.9243,87.9243,0,0,0,36.0046,7.6593h0a87.924,87.924,0,0,0,36.0046-7.6593v22.08a26.1188,26.1188,0,0,0,26.1188,26.1188h0A26.1187,26.1187,0,0,0,347.5,395.1541v-91.78a26.32,26.32,0,0,0-.2813-3.823q.2766-3.4938.2813-7.06V218.1544h7.3415a31.2489,31.2489,0,0,0,31.249-31.249h0A31.249,31.249,0,0,0,354.8419,155.6564Zm23.8884,31.249a28.17,28.17,0,0,1-28.17,28.17H272.2349a28.17,28.17,0,0,1-28.17-28.17h0a28.17,28.17,0,0,1,28.17-28.17h78.3259a28.17,28.17,0,0,1,28.17,28.17Z" transform="translate(-125.4091 -90.2271)" style="fill: #231f20;stroke: #fff;stroke-miterlimit: 10"/>
</symbol>
<symbol id="cubes" viewBox="0 0 576 512">
<path d="M290.8 48.6l78.4 29.7L288 109.5 206.8 78.3l78.4-29.7c1.8-.7 3.8-.7 5.7 0zM136 92.5V204.7c-1.3 .4-2.6 .8-3.9 1.3l-96 36.4C14.4 250.6 0 271.5 0 294.7V413.9c0 22.2 13.1 42.3 33.5 51.3l96 42.2c14.4 6.3 30.7 6.3 45.1 0L288 457.5l113.5 49.9c14.4 6.3 30.7 6.3 45.1 0l96-42.2c20.3-8.9 33.5-29.1 33.5-51.3V294.7c0-23.3-14.4-44.1-36.1-52.4l-96-36.4c-1.3-.5-2.6-.9-3.9-1.3V92.5c0-23.3-14.4-44.1-36.1-52.4l-96-36.4c-12.8-4.8-26.9-4.8-39.7 0l-96 36.4C150.4 48.4 136 69.3 136 92.5zM392 210.6l-82.4 31.2V152.6L392 121v89.6zM154.8 250.9l78.4 29.7L152 311.7 70.8 280.6l78.4-29.7c1.8-.7 3.8-.7 5.7 0zm18.8 204.4V354.8L256 323.2v95.9l-82.4 36.2zM421.2 250.9c1.8-.7 3.8-.7 5.7 0l78.4 29.7L424 311.7l-81.2-31.1 78.4-29.7zM523.2 421.2l-77.6 34.1V354.8L528 323.2v90.7c0 3.2-1.9 6-4.8 7.3z"/>
</symbol>
<symbol id="circle-check" viewBox="0 0 512 512">
<path d="M256 512c141.4 0 256-114.6 256-256S397.4 0 256 0S0 114.6 0 256S114.6 512 256 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"/>
</symbol>
<symbol id="circle-no" viewBox="0 0 512 512">
<path d="M256 512c141.4 0 256-114.6 256-256S397.4 0 256 0S0 114.6 0 256S114.6 512 256 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"/>
</symbol>
<symbol id="circle-question" viewBox="0 0 512 512">
<path d="M256 512c141.4 0 256-114.6 256-256S397.4 0 256 0S0 114.6 0 256S114.6 512 256 512zM169.8 165.3c7.9-22.3 29.1-37.3 52.8-37.3h58.3c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24V250.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1H222.6c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM288 352c0 17.7-14.3 32-32 32s-32-14.3-32-32s14.3-32 32-32s32 14.3 32 32z"/>
</symbol>
<symbol id="circle-empty" viewBox="0 0 512 512">
<path d="M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z"/>
</symbol>
<symbol id="circle-dot" viewBox="0 0 512 512">
<path d="M160 256C160 202.1 202.1 160 256 160C309 160 352 202.1 352 256C352 309 309 352 256 352C202.1 352 160 309 160 256zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z"/>
</symbol>
<symbol id="github-icon" viewBox="0 0 480 512">
<path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/>
</symbol>
<view id="message-view" viewBox="0 0 640 512"/>
<view id="pencil-view" viewBox="0 512 512 512"/>
<view id="magnifying-view" viewBox="0 1024 512 512"/>
<view id="briefcase-view" viewBox="0 1536 512 512"/>
<view id="laptop-view" viewBox="0 2048 640 512"/>
<view id="house-laptop-view" viewBox="0 2560 640 512"/>
<view id="skull-view" viewBox="0 3072 512 512"/>
<view id="amogus-view" viewBox="0 3584 261.1819 331.5457"/>
<view id="cubes-view" viewBox="0 4096 576 512"/>
<view id="circle-check-view" viewBox="0 4608 512 512"/>
<view id="circle-no-view" viewBox="0 5120 512 512"/>
<view id="circle-question-view" viewBox="0 5632 512 512"/>
<view id="circle-empty-view" viewBox="0 6144 512 512"/>
<view id="circle-dot-view" viewBox="0 6656 512 512"/>
<view id="github-icon" viewBox="0 7168 480 512"/>
<use href="#message" x="0" y="0" width="640" height="512"/>
<use href="#pencil" x="0" y="512" width="512" height="512"/>
<use href="#magnifying" x="0" y="1024" width="512" height="512"/>
<use href="#briefcase" x="0" y="1536" width="512" height="512"/>
<use href="#laptop" x="0" y="2048" width="640" height="512"/>
<use href="#house-laptop" x="0" y="2560" width="640" height="512"/>
<use href="#skull" x="0" y="3072" width="512" height="512"/>
<use href="#amogus" viewBox="0 3584 261.1819 331.5457"/>
<use href="#cubes" x="0" y="4096" width="576" height="512"/>
<use href="#circle-check" x="0" y="4608" width="512" height="512"/>
<use href="#circle-no" x="0" y="5120" width="512" height="512"/>
<use href="#circle-question" x="0" y="5632" width="512" height="512"/>
<use href="#circle-empty" x="0" y="6144" width="512" height="512"/>
<use href="#circle-dot" x="0" y="6656" width="512" height="512"/>
<use href="#github-icon" x="0" y="7168" width="480" height="512"/>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

BIN
images/kuzuk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

View file

@ -0,0 +1,58 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 454.2847 100">
<defs>
<symbol id="QuatalogHWordmark" data-name="QuatalogHWordmark" viewBox="0 0 454.285 100" preserveAspectRatio="xMinYMin">
<g>
<path d="M159.0254,71.5186l7.8384,9.2978L151.4951,88.27,147.96,75.2061c-.9986.0771-1.9976.1543-3.0738.1543-15.5219,0-25.8193-11.2188-25.8193-28.125,0-16.752,10.374-27.9708,25.8965-27.9708s25.8193,11.2188,25.8193,27.9708C170.7827,58.2246,166.4023,66.8311,159.0254,71.5186Zm-14.1392-9.2217c6.3013,0,10.5279-5.9942,10.5279-14.9844s-4.2266-14.9844-10.4507-14.9844c-6.3013,0-10.5279,5.9932-10.5279,14.9844S138.6621,62.2969,144.8862,62.2969Z" style="fill: #f5b53f"/>
<path d="M215.1265,36.5547V74.5918H202.3706L201.0645,70.52c-3.7657,2.7657-7.7613,4.8409-11.834,4.8409-5.9937,0-12.4488-3.9961-12.4488-16.5987V36.5547h14.9844V57.84c0,4.0733,1.6138,5.3028,4.5337,5.3028a9.4658,9.4658,0,0,0,3.8423-.9229V36.5547Z" style="fill: #f5b53f"/>
<path d="M259.2378,53.5371V74.5918h-13.294l-1.2294-4.9951A15.5816,15.5816,0,0,1,232.65,75.36c-7.1465,0-11.834-5.0723-11.834-11.2959,0-7.7618,7.3008-11.22,14.8311-11.22a57.3366,57.3366,0,0,1,8.6064.8457V52.5381c0-3.3047-2.92-5.2256-7.7607-5.2256a33.2209,33.2209,0,0,0-10.6045,1.998L223.89,39.09c3.6885-1.9209,11.2959-3.3037,16.8282-3.3037C253.0132,35.7861,259.2378,42.8555,259.2378,53.5371Zm-14.9844,10.835V59.8379a18.2229,18.2229,0,0,0-3.9189-.3838c-2.6895,0-4.0723,1.1523-4.0723,2.92,0,1.8438.9981,2.9961,3.3037,2.9961A12.8672,12.8672,0,0,0,244.2534,64.3721Z" style="fill: #f5b53f"/>
<path d="M296.8179,73.5156c-2.3828,1.0762-8.1455,1.8448-11.5264,1.8448-6.5322,0-15.6-2.6895-15.6-16.9053V47.082h-6.2246V36.5547h6.916l5.1484-10.4512h9.1446V36.5547H296.28V47.082H284.6763v9.836c0,4.61,1.69,6.2246,4.457,6.2246a19.18,19.18,0,0,0,5.6865-.999Z" style="fill: #f5b53f"/>
<path d="M338.0854,53.5371V74.5918H324.7915l-1.2295-4.9951A15.5815,15.5815,0,0,1,311.4976,75.36c-7.1465,0-11.834-5.0723-11.834-11.2959,0-7.7618,7.3008-11.22,14.831-11.22a57.338,57.338,0,0,1,8.6065.8457V52.5381c0-3.3047-2.92-5.2256-7.7608-5.2256a33.222,33.222,0,0,0-10.6045,1.998L302.7378,39.09c3.6885-1.9209,11.2959-3.3037,16.8281-3.3037C331.8608,35.7861,338.0854,42.8555,338.0854,53.5371Zm-14.9843,10.835V59.8379a18.2239,18.2239,0,0,0-3.919-.3838c-2.6894,0-4.0722,1.1523-4.0722,2.92,0,1.8438.998,2.9961,3.3037,2.9961A12.868,12.868,0,0,0,323.1011,64.3721Z" style="fill: #f5b53f"/>
<path d="M346.1567,20.8018l14.9854-1.5372V74.5918H346.1567Z" style="fill: #f5b53f"/>
<path d="M367.5972,55.6113c0-11.91,8.1455-19.8252,20.3632-19.8252,12.1417,0,20.3643,7.9151,20.3643,19.8252,0,11.834-8.2226,19.7491-20.44,19.7491C375.7427,75.36,367.5972,67.4453,367.5972,55.6113Zm25.2812,0c0-4.61-1.9971-7.6074-4.918-7.6074-2.996,0-4.9179,2.9971-4.9179,7.6074,0,4.5342,1.9219,7.5313,4.8418,7.5313C390.8813,63.1426,392.8784,60.0684,392.8784,55.6113Z" style="fill: #f5b53f"/>
<path d="M454.2817,78.8184c0,7.7607-8.0683,12.2949-21.747,12.2949s-22.0537-3.6885-22.0537-9.6826c0-4.0723,2.8427-6.6856,7.0693-8.0684a10.0957,10.0957,0,0,1-3.8418-7.8379l4.918-6.6855a10.9454,10.9454,0,0,1-5.7637-10.1436c0-8.1455,6.7627-12.9092,18.4424-12.9092a35.4045,35.4045,0,0,1,6.6855.6143c2.9971-3.3037,7.2237-6.7617,12.1416-7.3L453.36,39.8584a22.6945,22.6945,0,0,0-6.7627.8457,11.1407,11.1407,0,0,1,3.0742,7.9912c0,8.376-6.84,12.833-18.3662,12.833a30.7459,30.7459,0,0,1-6.2237-.5381l-.7685,1.9981c0,.999,1.46,1.3066,3.6885,1.5371l10.1435.999C448.2114,66.1387,454.2817,70.9805,454.2817,78.8184Zm-12.7558,1.0752c0-.9219-.6914-1.9209-2.6133-2.1514l-13.37-1.46c-1.23.6914-2.1514,1.5371-2.1514,2.6895,0,1.5371,4.4561,2.7666,9.6817,2.7666C438.5288,81.7383,441.5259,81.2,441.5259,79.8936ZM426.4644,48.7725c0,2.0752,1.9209,4.0722,5.0712,4.0722,2.9971,0,4.4571-1.9209,4.4571-3.7646,0-2.2285-1.69-4.1494-4.9942-4.1494C427.9243,44.9307,426.4644,46.7744,426.4644,48.7725Z" style="fill: #f5b53f"/>
</g>
<rect id="Back_Rectangle" data-name="Back Rectangle" width="100" height="100" rx="18.75" style="fill: #494766"/>
<g id="BR_Circle" data-name="BR Circle">
<circle cx="81.25" cy="81.25" r="15.625" style="fill: #201f2c"/>
<path d="M81.25,66.667A14.583,14.583,0,1,1,66.6665,81.25,14.6,14.6,0,0,1,81.25,66.667m0-2.0835A16.6665,16.6665,0,1,0,97.9165,81.25,16.6665,16.6665,0,0,0,81.25,64.5835Z" style="fill: #201f2c"/>
</g>
<g id="BC_Circle" data-name="BC Circle">
<circle cx="50" cy="81.25" r="15.625" style="fill: #f5b53f"/>
<path d="M50,66.667A14.583,14.583,0,1,1,35.4165,81.25,14.6,14.6,0,0,1,50,66.667m0-2.0835A16.6665,16.6665,0,1,0,66.6665,81.25,16.6665,16.6665,0,0,0,50,64.5835Z" style="fill: #201f2c"/>
</g>
<g id="BL_Circle" data-name="BL Circle">
<circle cx="18.75" cy="81.25" r="15.625" style="fill: #f5b53f"/>
<path d="M18.75,66.667A14.583,14.583,0,1,1,4.1665,81.25,14.6,14.6,0,0,1,18.75,66.667m0-2.0835A16.6665,16.6665,0,1,0,35.4165,81.25,16.6665,16.6665,0,0,0,18.75,64.5835Z" style="fill: #201f2c"/>
</g>
<g id="MR_Circle" data-name="MR Circle">
<circle cx="81.25" cy="50" r="15.625" style="fill: #f5b53f"/>
<path d="M81.25,35.417A14.583,14.583,0,1,1,66.6665,50,14.6,14.6,0,0,1,81.25,35.417m0-2.0835A16.6665,16.6665,0,1,0,97.9165,50,16.6665,16.6665,0,0,0,81.25,33.3335Z" style="fill: #201f2c"/>
</g>
<g id="MC_Circle" data-name="MC Circle">
<circle cx="50" cy="50" r="15.625" style="fill: #201f2c"/>
<path d="M50,35.417A14.583,14.583,0,1,1,35.4165,50,14.6,14.6,0,0,1,50,35.417m0-2.0835A16.6665,16.6665,0,1,0,66.6665,50,16.6665,16.6665,0,0,0,50,33.3335Z" style="fill: #201f2c"/>
</g>
<g id="ML_Circle" data-name="ML Circle">
<circle cx="18.75" cy="50" r="15.625" style="fill: #f5b53f"/>
<path d="M18.75,35.417A14.583,14.583,0,1,1,4.1665,50,14.6,14.6,0,0,1,18.75,35.417m0-2.0835A16.6665,16.6665,0,1,0,35.4165,50,16.6665,16.6665,0,0,0,18.75,33.3335Z" style="fill: #201f2c"/>
</g>
<g id="TR_Circle" data-name="TR Circle">
<circle cx="81.25" cy="18.75" r="15.625" style="fill: #f5b53f"/>
<path d="M81.25,4.167A14.583,14.583,0,1,1,66.6665,18.75,14.6,14.6,0,0,1,81.25,4.167m0-2.0835A16.6665,16.6665,0,1,0,97.9165,18.75,16.6665,16.6665,0,0,0,81.25,2.0835Z" style="fill: #201f2c"/>
</g>
<g id="TC_Circle" data-name="TC Circle">
<circle cx="50" cy="18.75" r="15.625" style="fill: #f5b53f"/>
<path d="M50,4.167A14.583,14.583,0,1,1,35.4165,18.75,14.6,14.6,0,0,1,50,4.167m0-2.0835A16.6665,16.6665,0,1,0,66.6665,18.75,16.6665,16.6665,0,0,0,50,2.0835Z" style="fill: #201f2c"/>
</g>
<g id="TL_Circle" data-name="TL Circle">
<circle cx="18.75" cy="18.75" r="15.625" style="fill: #f5b53f"/>
<path d="M18.75,4.167A14.583,14.583,0,1,1,4.1665,18.75,14.6,14.6,0,0,1,18.75,4.167m0-2.0835A16.6665,16.6665,0,1,0,35.4165,18.75,16.6665,16.6665,0,0,0,18.75,2.0835Z" style="fill: #201f2c"/>
</g>
</symbol>
</defs>
<g id="Layer_2" data-name="Layer 2">
<g id="hwordmark">
<use width="454.2847" height="100" xlink:href="#QuatalogHWordmark"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7 KiB

48
images/quatalogIcon.svg Normal file
View file

@ -0,0 +1,48 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 192 192">
<defs>
<symbol id="QuatalogIcon" data-name="QuatalogIcon" viewBox="0 0 192 192">
<rect id="Back_Rectangle" data-name="Back Rectangle" width="192" height="192" rx="36" style="fill: #494766"/>
<g id="BR_Circle" data-name="BR Circle">
<circle cx="156" cy="156" r="30" style="fill: #201f2c"/>
<path d="M156,128a28,28,0,1,1-28,28,28.0314,28.0314,0,0,1,28-28m0-4a32,32,0,1,0,32,32,32,32,0,0,0-32-32Z" style="fill: #201f2c"/>
</g>
<g id="BC_Circle" data-name="BC Circle">
<circle cx="96" cy="156" r="30" style="fill: #f5b53f"/>
<path d="M96,128a28,28,0,1,1-28,28,28.0314,28.0314,0,0,1,28-28m0-4a32,32,0,1,0,32,32,32,32,0,0,0-32-32Z" style="fill: #201f2c"/>
</g>
<g id="BL_Circle" data-name="BL Circle">
<circle cx="36" cy="156" r="30" style="fill: #f5b53f"/>
<path d="M36,128A28,28,0,1,1,8,156a28.0314,28.0314,0,0,1,28-28m0-4a32,32,0,1,0,32,32,32,32,0,0,0-32-32Z" style="fill: #201f2c"/>
</g>
<g id="MR_Circle" data-name="MR Circle">
<circle cx="156" cy="96" r="30" style="fill: #f5b53f"/>
<path d="M156,68a28,28,0,1,1-28,28,28.0314,28.0314,0,0,1,28-28m0-4a32,32,0,1,0,32,32,32,32,0,0,0-32-32Z" style="fill: #201f2c"/>
</g>
<g id="MC_Circle" data-name="MC Circle">
<circle cx="96" cy="96" r="30" style="fill: #201f2c"/>
<path d="M96,68A28,28,0,1,1,68,96,28.0314,28.0314,0,0,1,96,68m0-4a32,32,0,1,0,32,32A32,32,0,0,0,96,64Z" style="fill: #201f2c"/>
</g>
<g id="ML_Circle" data-name="ML Circle">
<circle cx="36" cy="96" r="30" style="fill: #f5b53f"/>
<path d="M36,68A28,28,0,1,1,8,96,28.0314,28.0314,0,0,1,36,68m0-4A32,32,0,1,0,68,96,32,32,0,0,0,36,64Z" style="fill: #201f2c"/>
</g>
<g id="TR_Circle" data-name="TR Circle">
<circle cx="156" cy="36" r="30" style="fill: #f5b53f"/>
<path d="M156,8a28,28,0,1,1-28,28A28.0314,28.0314,0,0,1,156,8m0-4a32,32,0,1,0,32,32A32,32,0,0,0,156,4Z" style="fill: #201f2c"/>
</g>
<g id="TC_Circle" data-name="TC Circle">
<circle cx="96" cy="36" r="30" style="fill: #f5b53f"/>
<path d="M96,8A28,28,0,1,1,68,36,28.0314,28.0314,0,0,1,96,8m0-4a32,32,0,1,0,32,32A32,32,0,0,0,96,4Z" style="fill: #201f2c"/>
</g>
<g id="TL_Circle" data-name="TL Circle">
<circle cx="36" cy="36" r="30" style="fill: #f5b53f"/>
<path d="M36,8A28,28,0,1,1,8,36,28.0314,28.0314,0,0,1,36,8m0-4A32,32,0,1,0,68,36,32,32,0,0,0,36,4Z" style="fill: #201f2c"/>
</g>
</symbol>
</defs>
<g id="Layer_2" data-name="Layer 2">
<g id="qicon">
<use width="192" height="192" xlink:href="#QuatalogIcon"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -0,0 +1,58 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 337.7534 181.1735">
<defs>
<symbol id="QuatalogVWordmark" data-name="QuatalogVWordmark" viewBox="0 0 337.753 181.173" preserveAspectRatio="slice">
<g>
<path d="M42.4941,161.5778l7.8384,9.2978-15.3686,7.4531-3.5352-13.0634c-.9985.0771-1.9975.1543-3.0737.1543-15.522,0-25.8194-11.2188-25.8194-28.125,0-16.752,10.3741-27.9707,25.8965-27.9707s25.8194,11.2187,25.8194,27.9707C54.2515,148.2838,49.8711,156.89,42.4941,161.5778ZM28.355,152.3561c6.3012,0,10.5278-5.9942,10.5278-14.9844s-4.2266-14.9844-10.4507-14.9844c-6.3012,0-10.5278,5.9932-10.5278,14.9844S22.1309,152.3561,28.355,152.3561Z" style="fill: #f5b53f"/>
<path d="M98.5952,126.6139V164.651H85.8394l-1.3062-4.0723c-3.7656,2.7657-7.7612,4.8409-11.834,4.8409-5.9936,0-12.4487-3.9961-12.4487-16.5987v-22.207H75.2349v21.2852c0,4.0732,1.6137,5.3027,4.5337,5.3027a9.4654,9.4654,0,0,0,3.8422-.9229v-25.665Z" style="fill: #f5b53f"/>
<path d="M142.7065,143.5963V164.651H129.4126l-1.23-4.9951a15.5812,15.5812,0,0,1-12.0644,5.7637c-7.1465,0-11.834-5.0723-11.834-11.2959,0-7.7618,7.3007-11.22,14.831-11.22a57.3511,57.3511,0,0,1,8.6065.8457v-1.1523c0-3.3047-2.92-5.2256-7.7608-5.2256a33.2193,33.2193,0,0,0-10.6045,1.9981l-1.998-10.2207c3.6885-1.9209,11.2959-3.3038,16.8281-3.3038C136.4819,125.8453,142.7065,132.9147,142.7065,143.5963Zm-14.9843,10.835v-4.5342a18.2239,18.2239,0,0,0-3.919-.3838c-2.6894,0-4.0722,1.1524-4.0722,2.92,0,1.8438.998,2.9961,3.3037,2.9961A12.868,12.868,0,0,0,127.7222,154.4313Z" style="fill: #f5b53f"/>
<path d="M180.2866,163.5748c-2.3828,1.0762-8.1455,1.8448-11.5263,1.8448-6.5323,0-15.6-2.69-15.6-16.9053V137.1412H146.936V126.6139h6.9161l5.1484-10.4512h9.1445v10.4512h11.6035v10.5273H168.145v9.836c0,4.61,1.69,6.2246,4.4571,6.2246a19.18,19.18,0,0,0,5.6865-.999Z" style="fill: #f5b53f"/>
<path d="M221.5542,143.5963V164.651H208.26l-1.23-4.9951a15.5812,15.5812,0,0,1-12.0645,5.7637c-7.1465,0-11.834-5.0723-11.834-11.2959,0-7.7618,7.3008-11.22,14.8311-11.22a57.35,57.35,0,0,1,8.6064.8457v-1.1523c0-3.3047-2.92-5.2256-7.7607-5.2256a33.2183,33.2183,0,0,0-10.6045,1.9981l-1.9981-10.2207c3.6885-1.9209,11.2959-3.3038,16.8282-3.3038C215.33,125.8453,221.5542,132.9147,221.5542,143.5963ZM206.57,154.4313v-4.5342a18.2229,18.2229,0,0,0-3.9189-.3838c-2.69,0-4.0723,1.1524-4.0723,2.92,0,1.8438.9981,2.9961,3.3037,2.9961A12.8672,12.8672,0,0,0,206.57,154.4313Z" style="fill: #f5b53f"/>
<path d="M229.6255,110.861l14.9853-1.5371V164.651H229.6255Z" style="fill: #f5b53f"/>
<path d="M251.0659,145.6705c0-11.91,8.1455-19.8252,20.3633-19.8252,12.1416,0,20.3643,7.9151,20.3643,19.8252,0,11.834-8.2227,19.7491-20.44,19.7491C259.2114,165.42,251.0659,157.5045,251.0659,145.6705Zm25.2813,0c0-4.61-1.9971-7.6074-4.918-7.6074-2.9961,0-4.918,2.9971-4.918,7.6074,0,4.5342,1.9219,7.5313,4.8418,7.5313C274.35,153.2018,276.3472,150.1276,276.3472,145.6705Z" style="fill: #f5b53f"/>
<path d="M337.7505,168.8776c0,7.7607-8.0684,12.2949-21.7471,12.2949S293.95,177.484,293.95,171.49c0-4.0723,2.8428-6.6856,7.0693-8.0684a10.0957,10.0957,0,0,1-3.8418-7.8379l4.918-6.6855a10.9455,10.9455,0,0,1-5.7637-10.1436c0-8.1455,6.7627-12.9092,18.4424-12.9092a35.4064,35.4064,0,0,1,6.6856.6143c2.997-3.3037,7.2236-6.7617,12.1416-7.3l3.2275,10.7578a22.6949,22.6949,0,0,0-6.7627.8457,11.14,11.14,0,0,1,3.0742,7.9912c0,8.376-6.84,12.833-18.3662,12.833a30.7442,30.7442,0,0,1-6.2236-.5381l-.7686,1.9981c0,.999,1.46,1.3066,3.6885,1.5371l10.1436.999C331.68,156.1979,337.7505,161.04,337.7505,168.8776Zm-12.7559,1.0752c0-.9219-.6914-1.9209-2.6133-2.1514l-13.37-1.46c-1.2295.6914-2.1513,1.5372-2.1513,2.69,0,1.5371,4.456,2.7666,9.6816,2.7666C321.9976,171.7975,324.9946,171.2594,324.9946,169.9528Zm-15.0615-31.1211c0,2.0752,1.9209,4.0722,5.0713,4.0722,2.9971,0,4.457-1.9209,4.457-3.7646,0-2.2285-1.69-4.1494-4.9941-4.1494C311.3931,134.99,309.9331,136.8336,309.9331,138.8317Z" style="fill: #f5b53f"/>
</g>
<rect id="Back_Rectangle" data-name="Back Rectangle" x="120.8765" width="96" height="96" rx="18" style="fill: #494766"/>
<g id="BR_Circle" data-name="BR Circle">
<circle cx="198.8765" cy="78" r="15" style="fill: #201f2c"/>
<path d="M198.8765,64a14,14,0,1,1-14,14,14.0158,14.0158,0,0,1,14-14m0-2a16,16,0,1,0,16,16,16,16,0,0,0-16-16Z" style="fill: #201f2c"/>
</g>
<g id="BC_Circle" data-name="BC Circle">
<circle cx="168.8765" cy="78" r="15" style="fill: #f5b53f"/>
<path d="M168.8765,64a14,14,0,1,1-14,14,14.0158,14.0158,0,0,1,14-14m0-2a16,16,0,1,0,16,16,16,16,0,0,0-16-16Z" style="fill: #201f2c"/>
</g>
<g id="BL_Circle" data-name="BL Circle">
<circle cx="138.8765" cy="78" r="15" style="fill: #f5b53f"/>
<path d="M138.8765,64a14,14,0,1,1-14,14,14.0158,14.0158,0,0,1,14-14m0-2a16,16,0,1,0,16,16,16,16,0,0,0-16-16Z" style="fill: #201f2c"/>
</g>
<g id="MR_Circle" data-name="MR Circle">
<circle cx="198.8765" cy="48" r="15" style="fill: #f5b53f"/>
<path d="M198.8765,34a14,14,0,1,1-14,14,14.0158,14.0158,0,0,1,14-14m0-2a16,16,0,1,0,16,16,16,16,0,0,0-16-16Z" style="fill: #201f2c"/>
</g>
<g id="MC_Circle" data-name="MC Circle">
<circle cx="168.8765" cy="48" r="15" style="fill: #201f2c"/>
<path d="M168.8765,34a14,14,0,1,1-14,14,14.0158,14.0158,0,0,1,14-14m0-2a16,16,0,1,0,16,16,16,16,0,0,0-16-16Z" style="fill: #201f2c"/>
</g>
<g id="ML_Circle" data-name="ML Circle">
<circle cx="138.8765" cy="48" r="15" style="fill: #f5b53f"/>
<path d="M138.8765,34a14,14,0,1,1-14,14,14.0158,14.0158,0,0,1,14-14m0-2a16,16,0,1,0,16,16,16,16,0,0,0-16-16Z" style="fill: #201f2c"/>
</g>
<g id="TR_Circle" data-name="TR Circle">
<circle cx="198.8765" cy="18" r="15" style="fill: #f5b53f"/>
<path d="M198.8765,4a14,14,0,1,1-14,14,14.0158,14.0158,0,0,1,14-14m0-2a16,16,0,1,0,16,16,16,16,0,0,0-16-16Z" style="fill: #201f2c"/>
</g>
<g id="TC_Circle" data-name="TC Circle">
<circle cx="168.8765" cy="18" r="15" style="fill: #f5b53f"/>
<path d="M168.8765,4a14,14,0,1,1-14,14,14.0158,14.0158,0,0,1,14-14m0-2a16,16,0,1,0,16,16,16,16,0,0,0-16-16Z" style="fill: #201f2c"/>
</g>
<g id="TL_Circle" data-name="TL Circle">
<circle cx="138.8765" cy="18" r="15" style="fill: #f5b53f"/>
<path d="M138.8765,4a14,14,0,1,1-14,14,14.0158,14.0158,0,0,1,14-14m0-2a16,16,0,1,0,16,16,16,16,0,0,0-16-16Z" style="fill: #201f2c"/>
</g>
</symbol>
</defs>
<g id="Layer_2" data-name="Layer 2">
<g id="vwordmark">
<use width="337.7534" height="181.1735" xlink:href="#QuatalogVWordmark"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

35
index.html Normal file
View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<title>Quatalog Home</title>
<link rel="shortcut icon" href="./favicon/quatalogIcon.png">
<link rel="icon" href="./favicon/favicon.ico">
<link rel="apple-touch-icon" sizes="180x180" href="./favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="./favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="./favicon/favicon-16x16.png">
<link rel="manifest" href="./favicon/site.webmanifest">
<link rel="stylesheet" href="css/common.css"/>
<link rel="stylesheet" href="css/home.css"/>
<link rel="stylesheet" href="css/themes.css"/>
<meta property="og:title" content="Quatalog"/>
<meta property="og:type" content="website"/>
<meta property="og:url" content="https://quatalog.com"/>
<meta property="og:description" content="It's like the catalog but based"/>
<meta property="og:image" content="https://quatalog.com/images/quatalogVWordmarkBacking.png"/>
<meta property="og:image:width" content="512"/>
<meta property="og:image:height" content="256"/>
<meta property="og:image:alt" content="Quatalog wordmark"/>
<script src="js/search_helper.js"></script>
</head>
<body>
<svg id="home-title"><use href="./images/quatalogVWordmark.svg#QuatalogVWordmark"></use></svg>
<form onsubmit="search_helper(event,false)">
<input type="text" class="home-search" id="search" placeholder="Search...">
</form>
<p id="home-footer">
Check out our <a target="_blank" href="https://github.com/quatalog/quatalog">source code <svg><use href="icons.svg#github-icon"></use></svg></a> (or yell at us about issues!)
</p>
</body>
</html>

10
js/fuse.js Normal file

File diff suppressed because one or more lines are too long

80
js/search.js Normal file
View file

@ -0,0 +1,80 @@
// parses URL params
const params = window
.location
.search
.slice(1)
.split("&")
.map(p => p.split("="))
.reduce((obj,[key,value]) =>
({ ...obj, [key]: decodeURIComponent(value) }),
{}
);
const search_term = params["search"];
const getSVG = function(name) {
return '<svg><use href="./icons.svg#'+name+'"></use></svg>';
}
const fuzzy_search_config = {
limit: 25,
includeScore: true,
ignoreLocation: true,
useExtendedSearch: true,
threshold: 0.01,
keys: [
{
name: 'code',
weight: 0.1
},
{
name: 'description',
weight: 0.1
},
{
name: 'name',
weight: 0.8
}
]
}
const attr_to_icon = {
'CI': 'message',
'HInq': 'magnifying',
'PDII': 'briefcase',
'WI': 'pencil',
'CulmExp': 'cubes'
}
const display_search_results = function(searchable_catalog) {
const fuse = new Fuse(searchable_catalog,fuzzy_search_config);
console.log("Searching for " + search_term + "...");
const results = fuse.search(search_term,{limit:fuzzy_search_config.limit});
const table = document.getElementById("searchResultsContainer");
results.forEach(function(search_entry) {
const entry = search_entry.item;
const tr = table.insertRow(-1);
var elemInnerHtml = '<a href="courses/'
+ entry.code + '">'
+ '<h3><div><span class="courseName">'
+ entry.name
+ '</span><span class="courseCode">'
+ entry.code + '</span><span class="pill">'
+ entry.credits + "</span>";
if(entry.attributes)
entry.attributes.forEach(function(attr) {
elemInnerHtml += '<span class="pill ' + attr + '-pill">'
+ attr + '<svg><use href="./icons.svg#' + attr_to_icon[attr] + '"></use></svg></span>';
});
elemInnerHtml += "</div></h3><p>" + entry.description + "</p></a>" + '\n';
tr.innerHTML = elemInnerHtml;
});
}
window.onload = function() {
// smart quotes
document.getElementById("searchTerm").innerHTML = "&#8220;" + search_term + "&#8221;";
fetch("json/searchable_catalog.json")
.then(r => r.json())
.then(display_search_results);
}

47
js/search_helper.js Normal file
View file

@ -0,0 +1,47 @@
"use strict";
const search_helper = async function(event,from_course_page = true) {
event.preventDefault();
// "a b cde 12" => "a b cde 12"
const input = document.getElementById("search").value.split(" ").join(" ");
var course_code = false;
if(input.length == 8) {
// "abcd1345" => ["abcd","1345"]
course_code = input.match(/.{1,4}/g)
} else if(input.replace(/ |-/g,"").length == 8) {
// "abcd - 1345" => ["abcd","1345"]
const arr = input.split(/(?:-| )+/);
if(arr.length == 2) course_code = arr;
}
// only do this logic if the string might be a course code
// avoid having to fetch the courses_list if it definitely isn't one
if(course_code) {
// ["abcd","1345"] => "ABCD-1345"
course_code[0] = course_code[0].toUpperCase();
const code_str = course_code.join("-");
// check if "ABCD-1345" is a real course code
const course_exists = await fetch(
from_course_page ? "../json/courses_list.json" : "json/courses_list.json"
)
.then(list => list.json())
.then(list => list.includes(code_str));
// if it is, redirect to it
if(course_exists) {
if(from_course_page) {
location.href = code_str;
} else {
location.href = "courses/" + code_str;
}
return;
}
}
if(from_course_page) {
location.href = "../search?search=" + encodeURIComponent(input);
} else {
location.href = "search?search=" + encodeURIComponent(input);
}
}

40
search.html Normal file
View file

@ -0,0 +1,40 @@
<!DOCTYPE html>
<head>
<title id="title">Quatalog Search</title>
<link rel="shortcut icon" href="./favicon/quatalogIcon.png">
<link rel="icon" href="./favicon/favicon.ico">
<link rel="apple-touch-icon" sizes="180x180" href="./favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="./favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="./favicon/favicon-16x16.png">
<link rel="manifest" href="./favicon/site.webmanifest">
<meta property="og:title" content="Quatalog"/>
<meta property="og:type" content="website"/>
<meta property="og:url" content="https://quatalog.com"/>
<meta property="og:description" content="Quatalog Search"/>
<meta property="og:image" content="https://quatalog.com/images/quatalogVWordmarkBacking.png"/>
<meta property="og:image:width" content="512"/>
<meta property="og:image:height" content="256"/>
<meta property="og:image:alt" content="Quatalog wordmark"/>
<script src="js/fuse.js"></script>
<script src="js/search.js"></script>
<script src="js/search_helper.js"></script>
<link rel="stylesheet" href="./css/common.css"/>
<link rel="stylesheet" href="./css/search.css"/>
<link rel="stylesheet" href="./css/themes.css"/>
</head>
<body>
<div id="qlog-header">
<a id="qlog-wordmark" href="./"><svg><use href="./images/quatalogHWordmark.svg#QuatalogHWordmark"></use></svg></a>
<form onsubmit="search_helper(event,false)">
<input type="text" id="search" class="header-search" placeholder="Search...">
</form>
</div>
<h1 id="searchTitle">
Search results for <span id="searchTerm"></span>
</h1>
<table id="searchResultsContainer">
</table>
</body>