journey begins...

This commit is contained in:
hossainemruz 2020-04-12 01:11:53 +06:00
parent 482f1b1e2d
commit 370a30f745
37 changed files with 4805 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.vscode/

20
toha/LICENSE Normal file
View file

@ -0,0 +1,20 @@
The MIT License (MIT)
Copyright (c) 2020 YOUR_NAME_HERE
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.

View file

@ -0,0 +1,2 @@
+++
+++

0
toha/layouts/404.html Normal file
View file

View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
{{- partial "head.html" . -}}
<body>
{{- partial "header.html" . -}}
<div id="content">
{{- block "main" . }}{{- end }}
</div>
{{- partial "footer.html" . -}}
</body>
</html>

View file

View file

0
toha/layouts/index.html Normal file
View file

View file

View file

View file

367
toha/static/css/about.css Normal file
View file

@ -0,0 +1,367 @@
.social-link {
list-style: none;
padding: 0.2rem;
}
.social-link a {
font-size: 1.5rem;
color: #3c4858;
padding: 0.5rem;
}
.social-link a:hover {
color: #248aaa;
transition: all 0.3s ease-in;
}
.circular-progress {
width: 150px;
height: 150px;
line-height: 150px;
background: none;
margin: 0 auto;
box-shadow: none;
position: relative;
}
.circular-progress:after {
content: "";
width: 100%;
height: 100%;
border-radius: 50%;
border: 12px solid #f9fafc;
position: absolute;
top: 0;
left: 0;
}
.circular-progress > span {
width: 50%;
height: 100%;
overflow: hidden;
position: absolute;
top: 0;
z-index: 1;
}
.circular-progress .circular-progress-left {
left: 0;
}
.circular-progress .circular-progress-bar {
width: 100%;
height: 100%;
background: none;
border-width: 12px;
border-style: solid;
position: absolute;
top: 0;
}
.circular-progress .circular-progress-left .circular-progress-bar {
left: 100%;
border-top-right-radius: 80px;
border-bottom-right-radius: 80px;
border-left: 0;
-webkit-transform-origin: center left;
transform-origin: center left;
}
.circular-progress .circular-progress-right {
right: 0;
}
.circular-progress .circular-progress-right .circular-progress-bar {
left: -100%;
border-top-left-radius: 80px;
border-bottom-left-radius: 80px;
border-right: 0;
-webkit-transform-origin: center right;
transform-origin: center right;
animation: circular-loading-1 1.8s linear forwards;
}
.circular-progress .circular-progress-value {
width: 90%;
height: 90%;
border-radius: 50%;
background: #3c4858;
font-size: 1rem;
color: #f9fafc;
line-height: 135px;
text-align: center;
position: absolute;
top: 5%;
left: 5%;
}
.circular-progress.blue .circular-progress-bar {
border-color: #048dff;
}
.circular-progress.yellow .circular-progress-bar {
border-color: #ffc212;
}
.circular-progress.pink .circular-progress-bar {
border-color: #ed63d2;
}
.circular-progress.green .circular-progress-bar {
border-color: #2dca73;
}
.circular-progress-percentage-50 {
animation: circular-loading-50 0s linear forwards 1.8s;
}
.circular-progress-percentage-55 {
animation: circular-loading-55 0.18s linear forwards 1.8s;
}
.circular-progress-percentage-60 {
animation: circular-loading-60 0.36s linear forwards 1.8s;
}
.circular-progress-percentage-65 {
animation: circular-loading-65 0.54s linear forwards 1.8s;
}
.circular-progress-percentage-70 {
animation: circular-loading-70 0.72s linear forwards 1.8s;
}
.circular-progress-percentage-75 {
animation: circular-loading-75 0.9s linear forwards 1.8s;
}
.circular-progress-percentage-80 {
animation: circular-loading-80 1.08s linear forwards 1.8s;
}
.circular-progress-percentage-85 {
animation: circular-loading-85 1.26s linear forwards 1.8s;
}
.circular-progress-percentage-90 {
animation: circular-loading-90 1.44s linear forwards 1.8s;
}
.circular-progress-percentage-95 {
animation: circular-loading-95 1.62s linear forwards 1.8s;
}
.circular-progress-percentage-100 {
animation: circular-loading-100 1.8s linear forwards 1.8s;
}
@keyframes circular-loading-50 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
}
@keyframes circular-loading-55 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(18deg);
transform: rotate(18deg);
}
}
@keyframes circular-loading-60 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(36deg);
transform: rotate(36deg);
}
}
@keyframes circular-loading-65 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(54deg);
transform: rotate(54deg);
}
}
@keyframes circular-loading-70 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(72deg);
transform: rotate(72deg);
}
}
@keyframes circular-loading-75 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(90deg);
transform: rotate(90deg);
}
}
@keyframes circular-loading-80 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(108deg);
transform: rotate(108deg);
}
}
@keyframes circular-loading-85 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(126deg);
transform: rotate(126deg);
}
}
@keyframes circular-loading-90 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(144deg);
transform: rotate(144deg);
}
}
@keyframes circular-loading-95 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(162deg);
transform: rotate(162deg);
}
}
@keyframes circular-loading-100 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
@keyframes circular-loading-1 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
@keyframes circular-loading-2 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(144deg);
transform: rotate(144deg);
}
}
@keyframes circular-loading-3 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(90deg);
transform: rotate(90deg);
}
}
@keyframes circular-loading-4 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(36deg);
transform: rotate(36deg);
}
}
@keyframes circular-loading-5 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(126deg);
transform: rotate(126deg);
}
}
@media only screen and (max-width: 990px) {
.circular-progress {
margin-bottom: 20px;
}
}
/* ============= Device specific fixes ======= */
/* Extra small devices (portrait phones, less than 576px) */
/* No media query for `xs` since this is the default in Bootstrap */
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
}

View file

@ -0,0 +1,112 @@
#gallery .achievement-entry {
cursor: pointer;
margin-top: 5px;
margin-bottom: 5px;
margin-left: 7px;
margin-right: 7px;
z-index: 1;
opacity: 1;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
position: relative;
overflow: hidden;
}
#gallery .achievement-entry:hover {
cursor: pointer;
z-index: 1;
opacity: 0.95;
transition: opacity 0.3s ease-out;
}
#gallery .achievement-details {
cursor: pointer;
z-index: 1;
opacity: 1 !important;
transition: none !important;
}
#gallery .img-type-1 {
height: 300px;
}
#gallery .img-type-2 {
height: 146px;
margin-bottom: 8px;
}
#gallery i {
color: #8392a5;
background-color: rgba(0, 0, 0, 0.7);
padding: 10px;
font-size: 0rem;
opacity: 0;
position: absolute;
}
#gallery .achievement-entry:hover i {
opacity: 1;
font-size: 1rem;
transition: all 0.3s ease-out;
--webkit-transition: all 0.3s ease-out;
}
#gallery .img-type-1 i {
margin-top: 140px;
}
#gallery .img-type-2 i {
margin-top: 65px;
}
#gallery .achievement-details.img-type-1 i,
.achievement-details.img-type-2 i {
right: 5px !important;
margin-top: 5px !important;
transition: none !important;
}
#gallery .achievement-entry .title {
color: #e5e9f2;
background-color: rgba(0, 0, 0, 0.7);
opacity: 0;
padding: 5px;
position: absolute;
bottom: 0px;
width: 100%;
margin-bottom: 0px;
bottom: -5px;
}
#gallery .achievement-entry:hover .title {
opacity: 1;
bottom: 0px;
transition: bottom 0.3s ease-out;
}
#gallery .caption {
background-color: rgba(0, 0, 0, 0.7);
bottom: 1rem;
left: 1rem;
color: #e5e9f2;
padding: 15px;
position: absolute;
transition: all 0.3s ease-out;
}
#gallery .caption h3 {
color: #e5e9f2;
}
#gallery .caption p {
font-size: 16px;
font-weight: 300;
color: #e5e9f2;
}
.hidden {
display: none !important;
}
#gallery .achievement-details {
height: 75vh !important;
}

352
toha/static/css/blog.css Normal file
View file

@ -0,0 +1,352 @@
.wrapper {
display: flex;
padding: 0;
margin: 0;
width: 100%;
overflow: hidden;
}
.sidebar {
width: 400px;
background: #f9fafc;
min-height: 100vh;
overflow: auto;
transition: all ease-in-out 0.3s;
}
.sidebar.hide {
position: relative;
width: 0;
transition: all ease-in-out 0.3s;
z-index: -1001;
}
#search-box {
width: 250px;
height: 35px;
padding-left: 15px;
margin-top: 30px;
border-radius: 5px;
background-color: #e5e9f2;
transition: all 0.3s ease-out;
border: 1px solid #c0ccda;
}
#search-box:focus {
border: 1pt solid #248aaa;
outline: none;
}
.sidebar-tree {
margin-left: 2rem;
margin-top: 2.5rem;
position: fixed;
}
.tree,
.tree ul {
margin: 0;
margin-top: 10px;
padding: 0;
list-style: none;
}
.tree ul {
margin-left: 1em;
position: relative;
}
.tree ul ul {
margin-left: 0.5em;
}
.tree ul:before {
content: "";
display: block;
width: 0;
position: absolute;
top: -17px;
left: -3px;
bottom: 16px;
border-left: 1px solid;
}
.tree li {
margin: 0;
padding: 0 1em;
line-height: 2em;
color: #3c4858;
font-weight: 700;
position: relative;
}
.tree ul li:before {
content: "";
display: block;
width: 16px;
height: 0;
border-top: 1px solid;
margin-top: -1px;
position: absolute;
top: 18px;
left: -3px;
}
.tree ul li:last-child:before {
background: #f9fafc;
height: auto;
top: 1em;
bottom: 0;
}
.tree li a {
text-decoration: none;
color: #131313;
transition: all 0.3s ease-out;
}
.tree li a:hover {
margin-left: 3px;
color: #2098d1;
transition: all 0.3s ease-out;
}
.tree i {
color: #3c4858;
font-size: 12px;
margin-right: 5px;
}
.tree .shift-right {
margin-left: 5px;
}
.tree ul {
display: none;
}
.tree .expand,
.tree .expand > ul {
display: block;
}
a.focused {
color: #2098d1 !important;
}
.content {
width: 100%;
background: #e5e9f2;
padding: 0;
position: relative;
}
.content-cards {
padding-top: 30px;
width: 100%;
padding-left: 28px;
padding-bottom: 20px;
}
.post-cards {
margin: 32px;
}
.post-cards .filtr-item {
width: 23rem !important;
}
.post-cards .card {
margin: 5px;
position: relative;
}
.post-cards .card .card-footer span {
font-size: 10pt;
color: #6c757d !important;
padding-top: 5px;
}
.post-cards .card .card-footer {
background: #fff;
}
.post-summery {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
max-height: 144px;
/* fallback */
-webkit-line-clamp: 5;
/* number of lines to show */
-webkit-box-orient: vertical;
}
.navbar-toggler {
display: none;
}
/*-------------- Media Queries ---------- */
@media (max-width: 1200px) {
.sidebar-tree {
margin-left: 1rem;
}
.content-cards {
padding-left: 0px;
}
.post-cards {
margin-left: 15px;
}
.post-cards .filtr-item {
width: 22rem !important;
padding: 3px;
}
}
@media only screen and (max-width: 768px) {
.content {
width: 100vw;
padding-left: 15px;
}
.content.overley {
width: 60vw;
padding-left: 3px;
/* margin-left: -50vw; */
}
.navbar-toggler {
display: block;
}
.sidebar {
width: 0;
}
.sidebar nav {
display: none;
transition: all ease-in-out 0.3s;
}
.sidebar.hide {
position: relative;
z-index: 1001;
width: 40vw;
}
.sidebar-tree {
margin-left: 1.5rem;
}
.content-cards {
padding-top: 20px;
width: 100%;
padding-left: 0px;
}
.post-cards {
margin: 0;
margin-top: 32px;
}
.post-cards .filtr-item {
margin: 10px;
width: 47vw !important;
}
.post-cards .card {
max-width: 47vw !important;
}
.content.overley .post-cards .filtr-item {
margin: 10px;
width: 55vw !important;
}
.content.overley .post-cards .card {
max-width: 55vw !important;
}
}
@media only screen and (max-width: 576px) {
.wrapper {
display: block;
}
#search-box {
width: 85vw;
height: 35px;
padding-left: 5px;
margin-top: 30px;
}
.content {
width: 100vw;
left: 0;
display: block;
padding-left: 2vw;
}
.content.overley {
width: 100vw;
left: 0;
padding-left: 2vw;
}
.sidebar {
position: relative;
max-height: 0;
width: 100vw;
min-height: 0;
overflow: hidden;
transition: all ease-in-out 0.5s;
}
.sidebar-tree {
position: relative;
}
.sidebar.hide {
position: relative;
z-index: 1001;
width: 100vw;
max-height: 100vh;
overflow: hidden;
transition: all ease-in-out 0.5s;
}
.content-cards {
padding-top: 20px;
padding-left: 0px;
transition: all ease-in-out 0.5s;
}
.content.overley .content-cards {
padding-top: 0px;
padding-left: 0px;
transition: all ease-in-out 0.5s;
}
.post-cards {
margin: 0;
margin-top: 32px;
transition: all ease-in-out 0.5s;
}
.content.overley .post-cards {
margin: 0;
transition: all ease-in-out 0.5s;
}
.post-cards .filtr-item {
margin: 10px;
width: 90vw !important;
}
.post-cards .card {
max-width: 90vw !important;
}
.content.overley .post-cards .filtr-item {
margin: 10px;
width: 90vw !important;
}
.content.overley .post-cards .card {
max-width: 90vw !important;
}
}

7
toha/static/css/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,119 @@
.experiences {
padding-bottom: 1rem;
}
.text-muted {
color: #e5e9f2;
}
.experiences ul {
padding-left: 1rem;
}
.experiences ul > li {
margin-left: 0;
color: #3c4858;
}
.experience-entry-heading h5 {
font-weight: 600;
}
.circle {
padding: 13px 20px;
border-radius: 50%;
background-color: #248aaa;
color: #f9fafc;
max-height: 50px;
z-index: 2;
}
.timeline .vertical-line {
align-self: stretch;
}
.timeline .vertical-line::after {
content: "";
position: absolute;
border-left: 3px solid #248aaa;
z-index: 1;
height: 100%;
left: 50%;
}
.vertical-line-left-adjustment::after {
left: calc(50% - 3px) !important;
}
.timeline .horizontal-line div {
padding: 0;
height: 40px;
}
.timeline .horizontal-line hr {
border-top: 3px solid #248aaa;
margin: 0;
top: 17px;
position: relative;
}
.timeline .horizontal-line .timeline-side-div {
display: flex;
overflow: hidden;
}
.timeline .horizontal-line .corner {
border: 3px solid #248aaa;
width: 100%;
position: relative;
border-radius: 15px;
}
.top-left {
left: -50%;
top: -50%;
}
.top-right {
left: 50%;
top: -50%;
}
.bottom-left {
left: -50%;
top: calc(50% - 3px);
}
.bottom-right {
left: 50%;
top: calc(50% - 3px);
}
/* ============= Device specific fixes ======= */
/* Extra small devices (portrait phones, less than 576px) */
/* No media query for `xs` since this is the default in Bootstrap */
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
}

File diff suppressed because one or more lines are too long

72
toha/static/css/home.css Normal file
View file

@ -0,0 +1,72 @@
.home {
height: 100vh;
padding: 0;
margin: 0;
color: #f9fafc;
overflow: hidden;
}
.background {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
background-image: url("/assets/img/background/flower.jpg");
background-attachment: fixed;
transform: scale(1.1);
filter: blur(3px);
-webkit-filter: blur(3px);
background-size: cover;
}
.content {
position: relative;
top: -80%;
height: 75%;
}
.home img {
width: 160px;
max-width: 50%;
height: auto;
}
.home .greeting {
color: #f9fafc;
}
.home .typing-carousel {
font-size: 14pt;
color: #f0f0f0;
}
#typing-carousel-data {
display: none;
}
.arrow {
position: absolute;
color: #f9fafc;
font-size: 1.5rem;
bottom: 0;
}
.bounce {
animation: bounce 2s infinite;
}
@keyframes bounce {
0%,
20%,
50%,
80%,
100% {
transform: translateY(0);
}
40% {
transform: translateY(-30px);
}
60% {
transform: translateY(-15px);
}
}

186
toha/static/css/navbar.css Normal file
View file

@ -0,0 +1,186 @@
.top-navbar {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 50px;
z-index: 99999;
-webkit-transition: all 0.4s ease-out;
transition: all 0.4s ease-out;
margin: 0;
padding-top: 0.1rem;
text-align: center;
}
/* --- initial state start ------ */
.initial-navbar {
background-color: none;
}
.initial-navbar .navbar-brand {
color: #C0CCDA;
font-weight: 800;
}
.initial-navbar li a {
color: #C0CCDA;
}
.initial-navbar .navbar-nav .active,
.initial-navbar li a:hover {
color: #F9FAFC;
-webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.navbar-collapse.show,
.navbar-collapse.collapsing {
background-color: #f9fafc;
padding-left: 1rem;
}
/* --- initial state end ------ */
/* --- state after scroll start --- */
.final-navbar {
background-color: #f9fafc;
color: #1C2D41;
-webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.final-navbar .navbar-brand {
color: #1C2D41;
font-weight: 800;
}
.final-navbar li a {
color: #1C2D41;
font-weight: 500;
-webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
border-bottom: 2px solid#F9FAFC;
}
.final-navbar .navbar-nav .active,
.final-navbar li a:hover {
color: #2098d1;
-webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
border-bottom: 2px solid #2098d1;
background: rgb(2, 0, 36);
background: linear-gradient(
90deg,
rgba(2, 0, 36, 1) 0%,
rgba(34, 136, 168, 0.1) 0%
);
}
.navbar-collapse.show li a,
.navbar-collapse.collapsing li a {
color: #1C2D41;
font-weight: 500;
-webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.navbar-collapse.show .navbar-nav .active,
.navbar-collapse.show .navbar-nav a:hover {
color: #2098d1;
/* -webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out; */
}
#top-navbar-divider {
margin-top: 10px;
}
/* --- state after scroll end --- */
#top-navbar-divider {
background: rgba(192, 204, 218, 0.8);
height: 20px;
width: 2px;
}
.final-navbar #top-navbar-divider {
background: rgba(0, 0, 0, 0.6);
height: 20px;
width: 2px;
}
/*------ navbar on blog page start ----*/
.final-navbar .navbar-toggler {
padding: 2px !important;
}
.blog-navbar .navbar-brand {
color: #1C2D41;
font-weight: 800;
}
.blog-navbar li a {
color: #1C2D41;
font-weight: 500;
-webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.blog-navbar .navbar-nav .active,
.blog-navbar li a:hover {
color: #2098d1;
/* -webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out; */
}
/* ============= Device specific fixes ======= */
/* Extra small devices (portrait phones, less than 576px) */
/* No media query for `xs` since this is the default in Bootstrap */
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
.final-navbar .navbar-nav .active,
.final-navbar li a:hover {
color: #2098d1;
-webkit-transition: none;
transition: none;
border-bottom: none;
background: transparent;
}
.final-navbar li a {
border-bottom: none;
}
.navbar-collapse.show {
box-shadow: 5px 10px 10px rgba(192, 204, 218, 0.3);
transition: all 0.3s ease-out;
}
.dropdown-divider {
border-top: 1px solid #c0ccda;
}
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
}

View file

@ -0,0 +1,30 @@
.projects .card .card-header {
padding: 10px;
}
.projects .card .card-img-xs {
margin-top: 0px;
margin-left: 0px;
margin-bottom: 5px;
margin-right: 10px;
}
.card .card-header .sub-title span:nth-child(1) {
float: left;
}
.card .card-header .sub-title span:nth-child(2) {
float: right;
}
.projects .card .card-header {
background-color: #f9fafc;
}
.projects .card .card-header .sub-title {
color: #8392a5;
margin-top: 5px;
}
.filtr-projects {
padding: 15px !important;
}

186
toha/static/css/read.css Normal file
View file

@ -0,0 +1,186 @@
.read-area {
background-color: #f9fafc;
}
.hero-area {
margin-top: 50px;
width: 100%;
height: 400px;
background-image: url(/assets/img/bg.jpg);
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
.content {
width: 100%;
position: relative;
top: -60px;
padding: 5px;
}
.author-profile {
position: relative;
align-content: center;
text-align: center;
}
.author-profile img {
height: 120px;
width: 120px;
}
.author-profile p {
color: #8392a5;
}
.title {
text-align: center;
}
.post-content {
padding: 10px;
}
table {
border-radius: 20px;
background: #e5e9f2;
border: 1px solid #c0ccda;
}
table tr {
height: 40px !important;
}
table thead tr {
background: #248aaa;
color: #e5e9f2;
}
tbody tr:nth-child(odd) {
background-color: #e5e9f2;
}
tbody tr:hover {
background: #c0ccda;
}
figure {
border: 1px solid #c0ccda;
height: fit-content;
width: fit-content;
align-self: center;
margin: auto;
}
img {
max-width: 100%;
}
caption,
figcaption {
caption-side: bottom;
text-align: center;
color: #8392a5;
}
pre {
margin: 5px;
}
code {
padding: 10px !important;
}
.navbar-toggler {
display: none;
}
.next-prev-navigator {
padding-left: 10px;
padding-right: 10px;
}
.next-prev-navigator a {
color: #3c4858;
transition: all 0.3s ease-out;
}
.next-prev-navigator a:hover {
color: #2098d1;
transition: all 0.3 ease-out;
}
.next-prev-navigator .next-article {
text-align: right;
}
.next-prev-navigator .next-article a {
transition: all 0.3s ease-out;
}
.next-prev-navigator .previous-article a {
transition: all 0.3s ease-out;
}
.next-prev-navigator .btn-outline-info {
color: #3c4858 !important;
border-color: #e5e9f2 !important;
background-color: #e5e9f2 !important;
transition: all 0.3s ease-out;
}
.next-prev-navigator .btn-outline-info:hover {
color: #f9fafc !important;
background-color: #248aaa !important;
transition: all 0.3s ease-out;
}
.disquss {
padding: 10px;
}
@media only screen and (max-width: 768px) {
.wrapper {
padding-left: 0px;
padding-right: 0px;
overflow: hidden;
}
.container {
max-width: 100%;
}
.container {
padding: 10px;
}
}
@media only screen and (max-width: 576px) {
.wrapper {
padding: 0px;
}
.hero-area {
height: 200px;
}
.content {
padding: 0px;
}
pre {
margin: 0px;
}
code {
padding: 0px;
}
.next-prev-navigator .previous-article {
text-align: center;
margin: 5px;
}
.next-prev-navigator .next-article {
text-align: center;
margin: 5px;
}
.previous-article a,
.next-article a {
width: 100%;
}
}

View file

@ -0,0 +1,19 @@
.recent-posts .card .card-footer span {
font-size: 10pt;
color: #6c757d !important;
padding-top: 5px;
}
.recent-posts .card .card-footer {
background: #fff;
}
.post-summery {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
/* line-height: 24px; fallback */
max-height: 144px; /* fallback */
-webkit-line-clamp: 5; /* number of lines to show */
-webkit-box-orient: vertical;
}

View file

@ -0,0 +1,49 @@
.skills .card .card-head img {
margin: 10px;
}
.skills .card {
margin-top: 10px;
margin-bottom: 10px;
}
.skills .card .card-body {
padding-top: 0;
}
.skills .card .card-head {
height: fit-content;
}
.skills .card .card-head h4 {
margin-top: 0.8rem;
}
/* ============= Device specific fixes ======= */
/* Extra small devices (portrait phones, less than 576px) */
/* No media query for `xs` since this is the default in Bootstrap */
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
}

222
toha/static/css/style.css Normal file
View file

@ -0,0 +1,222 @@
/* ========= Colors ============
Heading: #1C2D41
Paragraph: #3C4858
Iconography: #8392A5
Secondary: #C0CCDA
Dirty Snow: #E5E9F2
Snow: #F9FAFC
Magenta: #7551E9
Orange: #FF7D51
Pink: #ED63D2
Green: #2DCA73
Yellow: #FFC212
*/
body {
background-color: #f9fafc;
font-family: "Muli";
}
h1,
h2,
h3,
h4,
h5 {
color: #1c2d41;
}
p {
color: #3c4858;
}
a {
color: #248aaa;
}
a:hover {
color: #207089;
}
.btn-dark {
background-color: #3c4858;
border-color: #3c4858;
color: #e5e9f2;
transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.btn-dark:hover,
.btn-dark:focus {
background-color: #248aaa;
border-color: #248aaa;
transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.btn-outline-info {
color: #2098d1 !important;
border-color: #2098d1 !important;
}
.btn-outline-info:hover {
background-color: #2098d1 !important;
color: #e5e9f2 !important;
}
.btn-info {
background-color: #248aaa !important;
color: #e5e9f2 !important;
}
.btn-info:hover {
background-color: #2098d1 !important;
color: #e5e9f2 !important;
}
.bg-white {
background-color: #f9fafc !important;
}
.bg-dimmed {
background-color: #e5e9f2;
}
.anchor {
padding-top: 3rem;
}
.card {
box-shadow: none;
transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
overflow: hidden;
}
.card-img-sm {
width: 32px;
height: 32px;
}
.card-img-xs {
width: 24px;
height: 24px;
}
.card:hover,
.card:focus {
box-shadow: 0px 8px 56px rgba(15, 80, 100, 0.16);
border: 1px solid #fff;
transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.card .card-head {
height: 172px;
object-fit: cover;
overflow: hidden;
}
.card:hover .card-head .card-img-top,
.card:hover .card-head .card-img-top {
transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
transform: scale(1.2);
}
.card-title {
font-weight: 600;
}
.card-body {
text-align: justify;
}
.sub-title {
color: #c0ccda;
font-size: 10pt;
}
/* --- FOOTER START --- */
.footer {
color: #8392a5 !important;
background-color: #1c2d41;
position: relative;
z-index: 9999;
}
.footer h5 {
color: #c0ccda;
}
.footer a {
color: #8392a5;
transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.footer a:hover {
margin-left: 5px;
transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.footer ul {
list-style: none;
padding-left: 0;
}
.footer li {
margin-top: 5px;
}
.footer hr {
background-color: #8392a5;
}
.footer p:first-child {
color: #c0ccda;
}
.footer input {
background-color: #c0ccda;
}
.footer input:focus {
background-color: #e5e9f2;
}
.footer #theme {
color: #c0ccda;
}
/* --- FOOTER END ---- */
/* ============= Device specific fixes ======= */
/* Extra small devices (portrait phones, less than 576px) */
/* No media query for `xs` since this is the default in Bootstrap */
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
}

107
toha/static/js/blog.js Normal file
View file

@ -0,0 +1,107 @@
"use strict";
var filterizd;
var isMobile = false, isTablet = false, isLaptop = false;
(function ($) {
jQuery(document).ready(function () {
function detectDevice() {
if (window.innerWidth <= 425) {
isMobile = true;
isTablet = false;
isLaptop = false;
} else if (window.innerWidth <= 768) {
isMobile = false;
isTablet = true;
isLaptop = false;
} else {
isMobile = false;
isTablet = false;
isLaptop = true;
}
}
detectDevice();
console.log(isMobile);
// ======= Adjust height of the post cards =============
function adjustPostCardsHeight() {
if (!isMobile) { // no need to adjust height for mobile devices
let el = document.getElementById("post-cards").children;
let maxHeight = 0;
for (let i = 0; i < el.length; i++) {
if (el[i].children[0].clientHeight > maxHeight) {
maxHeight = el[i].children[0].clientHeight;
}
}
for (let i = 0; i < el.length; i++) {
el[i].children[0].setAttribute("style", "min-height: " + maxHeight + "px;")
}
}
}
adjustPostCardsHeight();
// ============= Sidebar Tre ================
function buildSidebarMenu() {
var openedClass = "fa-minus-circle";
var closedClass = "fa-plus-circle";
// initialize top level
var tree = $("#tree");
// add expand icon to those li who has ul as children
tree.find("li").has("ul").each(function () {
var branch = $(this);
branch.prepend('<i class="fas ' + closedClass + '"></i>');
branch.on('click', function (e) {
if (this.children[1] == e.target) {
// toggle "expand" class and icon
branch.toggleClass("expand");
var icon = $(this).children('i:first');
icon.toggleClass(openedClass + " " + closedClass);
}
});
});
// remove "expnad" class from siblings of the clicked item
tree.find("li").on("click", function () {
var item = $(this);
var shiblings = item.siblings().each(function () {
var sibling = $(this);
if (sibling.hasClass("expand")) {
sibling.removeClass("expand");
var icon = sibling.children('i:first');
icon.toggleClass(openedClass + " " + closedClass);
}
});
});
// focus the cliked item
tree.find("a").on("click", function () {
// clear other focused link
tree.find("a.focused").each(function () {
$(this).removeClass("focused");
});
// focus cliked link
$(this).addClass("focused");
});
}
buildSidebarMenu();
// initialize filterizr
filterizd = $(".filtr-container").filterizr({ layout: 'sameWidth' });
});
})(jQuery);
// toggle sidebar on click
function toggleSidebar() {
document.getElementById("sidebar").classList.toggle("hide");
document.getElementById("content").classList.toggle("overley");
// if it is mobile device. then scroll to top.
if (isMobile && $("#sidebar").hasClass("hide")) {
document.body.scrollTop = 0;
document.documentElement.scrollTop = 0;
}
setTimeout(function () {
filterizd.filterizr('sort');
}, 300);
}

7
toha/static/js/bootstrap.min.js vendored Normal file

File diff suppressed because one or more lines are too long

5
toha/static/js/fontawesome.all.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,286 @@
function renderGithubButton() {
"use strict";
var e = window.document,
t = e.location,
o = window.Math,
r = window.HTMLElement,
n = window.XMLHttpRequest,
a = "https://buttons.github.io/buttons.html",
i = n && n.prototype && "withCredentials" in n.prototype,
l = i && r && r.prototype.attachShadow && !r.prototype.attachShadow.prototype,
c = function (e, t, o, r) {
null == t && (t = "&"), null == o && (o = "="), null == r && (r = window.decodeURIComponent);
for (var n = {}, a = e.split(t), i = 0, l = a.length; i < l; ++i) {
var c = a[i];
if ("" !== c) {
var d = c.split(o);
n[r(d[0])] = null != d[1] ? r(d.slice(1).join(o)) : void 0
}
}
return n
},
d = function (e, t, o) {
e.addEventListener ? e.addEventListener(t, o, !1) : e.attachEvent("on" + t, o)
},
s = function (e, t, o) {
e.removeEventListener ? e.removeEventListener(t, o, !1) : e.detachEvent("on" + t, o)
},
f = function (e, t, o) {
var r = function (n) {
return s(e, t, r), o(n)
};
d(e, t, r)
},
u = function (e, t, o) {
var r = function (n) {
if (t.test(e.readyState)) return s(e, "readystatechange", r), o(n)
};
d(e, "readystatechange", r)
},
h = function (e) {
return function (t, o, r) {
var n = e.createElement(t);
if (o)
for (var a in o) {
var i = o[a];
null != i && (null != n[a] ? n[a] = i : n.setAttribute(a, i))
}
if (r)
for (var l = 0, c = r.length; l < c; l++) {
var d = r[l];
n.appendChild("string" == typeof d ? e.createTextNode(d) : d)
}
return n
}
},
g = h(e),
p = function (e) {
var t;
return function () {
t || (t = 1, e.apply(this, arguments))
}
},
b = function (e, t) {
return {}.hasOwnProperty.call(e, t)
},
m = {
light: ".btn{color:#24292e;background-color:#eff3f6;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23fafbfc'/%3e%3cstop offset='90%25' stop-color='%23eff3f6'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #fafbfc, #eff3f6 90%);background-image:linear-gradient(180deg, #fafbfc, #eff3f6 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFFAFBFC', endColorstr='#FFEEF2F5');border-color:#cdcfd1;border-color:rgba(27,31,35,.2)}:root .btn{filter:none}.btn:focus,.btn:hover{background-color:#e6ebf1;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23f0f3f6'/%3e%3cstop offset='90%25' stop-color='%23e6ebf1'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #f0f3f6, #e6ebf1 90%);background-image:linear-gradient(180deg, #f0f3f6, #e6ebf1 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFF0F3F6', endColorstr='#FFE5EAF0');background-position:-0.5em;border-color:#acaeb0;border-color:rgba(27,31,35,.35)}:root .btn:focus,:root .btn:hover{filter:none}.btn:active{background-color:#e9ecef;background-image:none;border-color:#acaeb0;border-color:rgba(27,31,35,.35);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15);filter:none}.social-count{color:#24292e;background-color:#fff;border-color:#d1d2d3;border-color:rgba(27,31,35,.2)}.social-count:focus,.social-count:hover{color:#0366d6}.octicon-heart{color:#ea4aaa}",
dark: ".btn{color:#fafbfc;background-color:#202428;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%232f363d'/%3e%3cstop offset='90%25' stop-color='%23202428'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #2f363d, #202428 90%);background-image:linear-gradient(180deg, #2f363d, #202428 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF2F363D', endColorstr='#FF1E2226');border-color:#2b3138;border-color:rgba(27,31,35,.2)}:root .btn{filter:none}.btn:focus,.btn:hover{background-color:#1b1f23;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%232b3137'/%3e%3cstop offset='90%25' stop-color='%231b1f23'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #2b3137, #1b1f23 90%);background-image:linear-gradient(180deg, #2b3137, #1b1f23 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF2B3137', endColorstr='#FF191D21');background-position:-0.5em;border-color:#252b30;border-color:rgba(27,31,35,.5)}:root .btn:focus,:root .btn:hover{filter:none}.btn:active{background-color:#181b1f;background-image:none;border-color:#252b30;border-color:rgba(27,31,35,.5);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15);filter:none}.social-count{color:#fafbfc;background-color:#1b1f23;border-color:#1b1f23;border-color:rgba(27,31,35,.2)}.social-count:focus,.social-count:hover{color:#2188ff}.octicon-heart{color:#ec6cb9}"
},
v = function (e, t) {
return "@media(prefers-color-scheme:" + e + "){" + m[b(m, t) ? t : e] + "}"
},
w = {
"mark-github": {
width: 16,
height: 16,
path: '<path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/>'
},
heart: {
width: 12,
height: 16,
path: '<path fill-rule="evenodd" d="M9 2c-.97 0-1.69.42-2.2 1-.51.58-.78.92-.8 1-.02-.08-.28-.42-.8-1-.52-.58-1.17-1-2.2-1-1.632.086-2.954 1.333-3 3 0 .52.09 1.52.67 2.67C1.25 8.82 3.01 10.61 6 13c2.98-2.39 4.77-4.17 5.34-5.33C11.91 6.51 12 5.5 12 5c-.047-1.69-1.342-2.913-3-3z"/>'
},
eye: {
width: 16,
height: 16,
path: '<path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/>'
},
star: {
width: 14,
height: 16,
path: '<path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z"/>'
},
"repo-forked": {
width: 10,
height: 16,
path: '<path fill-rule="evenodd" d="M8 1a1.993 1.993 0 00-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 002 1a1.993 1.993 0 00-1 3.72V6.5l3 3v1.78A1.993 1.993 0 005 15a1.993 1.993 0 001-3.72V9.5l3-3V4.72A1.993 1.993 0 008 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/>'
},
"issue-opened": {
width: 14,
height: 16,
path: '<path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 011.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"/>'
},
"cloud-download": {
width: 16,
height: 16,
path: '<path fill-rule="evenodd" d="M9 12h2l-3 3-3-3h2V7h2v5zm3-8c0-.44-.91-3-4.5-3C5.08 1 3 2.92 3 5 1.02 5 0 6.52 0 8c0 1.53 1 3 3 3h3V9.7H3C1.38 9.7 1.3 8.28 1.3 8c0-.17.05-1.7 1.7-1.7h1.3V5c0-1.39 1.56-2.7 3.2-2.7 2.55 0 3.13 1.55 3.2 1.8v1.2H12c.81 0 2.7.22 2.7 2.2 0 2.09-2.25 2.2-2.7 2.2h-2V11h2c2.08 0 4-1.16 4-3.5C16 5.06 14.08 4 12 4z"/>'
}
},
x = {},
y = function (e, t) {
var o = x[e] || (x[e] = []);
if (!(o.push(t) > 1)) {
var r = p((function () {
for (delete x[e]; t = o.shift();) t.apply(null, arguments)
}));
if (i) {
var a = new n;
d(a, "abort", r), d(a, "error", r), d(a, "load", (function () {
var e;
try {
e = JSON.parse(a.responseText)
} catch (e) {
return void r(e)
}
r(200 !== a.status, e)
})), a.open("GET", e), a.send()
} else {
var l = this || window;
l._ = function (e) {
l._ = null, r(200 !== e.meta.status, e.data)
};
var c = h(l.document)("script", {
async: !0,
src: e + (/\?/.test(e) ? "&" : "?") + "callback=_"
}),
s = function () {
l._ && l._({
meta: {}
})
};
d(c, "load", s), d(c, "error", s), c.readyState && u(c, /de|m/, s), l.document.getElementsByTagName("head")[0].appendChild(c)
}
}
},
k = function (e, t, o) {
var r = h(e.ownerDocument),
n = e.appendChild(r("style", {
type: "text/css"
})),
a = "body{margin:0}a{text-decoration:none;outline:0}.widget{display:inline-block;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:0;white-space:nowrap}.btn,.social-count{position:relative;display:inline-block;height:14px;padding:2px 5px;font-size:11px;font-weight:600;line-height:14px;vertical-align:bottom;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid}.btn{border-radius:.25em}.btn:not(:last-child){border-radius:.25em 0 0 .25em}.social-count{border-left:0;border-radius:0 .25em .25em 0}.widget-lg .btn,.widget-lg .social-count{height:20px;padding:3px 10px;font-size:12px;line-height:20px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor}" + function (e) {
if (null == e) return m.light;
var t = c(e, ";", ":", (function (e) {
return e.replace(/^[ \t\n\f\r]+|[ \t\n\f\r]+$/g, "")
}));
return m[b(m, t["no-preference"]) ? t["no-preference"] : "light"] + v("light", t.light) + v("dark", t.dark)
}(t["data-color-scheme"]);
n.styleSheet ? n.styleSheet.cssText = a : n.appendChild(e.ownerDocument.createTextNode(a));
var i, l, d = r("a", {
className: "btn",
href: t.href,
target: "_blank",
rel: "noopener",
innerHTML: (i = t["data-icon"], l = /^large$/i.test(t["data-size"]) ? 16 : 14, i = ("" + i).toLowerCase().replace(/^octicon-/, ""), b(w, i) || (i = "mark-github"), '<svg viewBox="0 0 ' + w[i].width + " " + w[i].height + '" class="octicon octicon-' + i + '" style="width: ' + l * w[i].width / w[i].height + "px; height: " + l + 'px;" aria-hidden="true">' + w[i].path + "</svg>"),
"aria-label": t["aria-label"] || void 0
}, [" ", r("span", {}, [t["data-text"] || ""])]),
s = e.appendChild(r("div", {
className: "widget" + (/^large$/i.test(t["data-size"]) ? " widget-lg" : "")
}, [d])),
f = d.hostname.split(".").reverse();
if ("" === f[0] && f.shift(), "com" !== f[0] || "github" !== f[1]) return d.href = "#", d.target = "_self", void o(s);
var u = f.length,
g = (" /" + d.pathname).split(/\/+/);
if (((2 === u || 3 === u && "gist" === f[2]) && "archive" === g[3] || 2 === u && "releases" === g[3] && "download" === g[4] || 3 === u && "codeload" === f[2]) && (d.target = "_top"), /^true$/i.test(t["data-show-count"]) && 2 === u) {
var p, x;
if (!g[2] && g[1]) p = x = "followers";
else if (!g[3] && g[2]) x = "stargazers_count", p = "stargazers";
else if (g[4] || "subscription" !== g[3])
if (g[4] || "fork" !== g[3]) {
if ("issues" !== g[3]) return void o(s);
x = "open_issues_count", p = "issues"
} else x = "forks_count", p = "network/members";
else x = "subscribers_count", p = "watchers";
var k = g[2] ? "/repos/" + g[1] + "/" + g[2] : "/users/" + g[1];
y.call(this, "https://api.github.com" + k, (function (e, t) {
if (!e) {
var n = t[x];
s.appendChild(r("a", {
className: "social-count",
href: t.html_url + "/" + p,
target: "_blank",
rel: "noopener",
"aria-label": n + " " + x.replace(/_count$/, "").replace("_", " ").slice(0, n < 2 ? -1 : void 0) + " on GitHub"
}, [("" + n).replace(/\B(?=(\d{3})+(?!\d))/g, ",")]))
}
o(s)
}))
} else o(s)
},
C = window.devicePixelRatio || 1,
z = function (e) {
return (C > 1 ? o.ceil(o.round(e * C) / C * 2) / 2 : o.ceil(e)) || 0
},
F = function (e, t) {
e.style.width = t[0] + "px", e.style.height = t[1] + "px"
},
M = function (t, r) {
if (null != t && null != r)
if (t.getAttribute && (t = function (e) {
for (var t = {
href: e.href,
title: e.title,
"aria-label": e.getAttribute("aria-label")
}, o = ["icon", "color-scheme", "text", "size", "show-count"], r = 0, n = o.length; r < n; r++) {
var a = "data-" + o[r];
t[a] = e.getAttribute(a)
}
return null == t["data-text"] && (t["data-text"] = e.textContent || e.innerText), t
}(t)), l) {
var n = g("span", {
title: t.title || void 0
});
k(n.attachShadow({
mode: "closed"
}), t, (function () {
r(n)
}))
} else {
var i = g("iframe", {
src: "javascript:0",
title: t.title || void 0,
allowtransparency: !0,
scrolling: "no",
frameBorder: 0
});
F(i, [0, 0]), i.style.border = "none";
var c = function () {
var n, l = i.contentWindow;
try {
n = l.document.body
} catch (t) {
return void e.body.appendChild(i.parentNode.removeChild(i))
}
s(i, "load", c), k.call(l, n, t, (function (e) {
var n = function (e) {
var t = e.offsetWidth,
r = e.offsetHeight;
if (e.getBoundingClientRect) {
var n = e.getBoundingClientRect();
t = o.max(t, z(n.width)), r = o.max(r, z(n.height))
}
return [t, r]
}(e);
i.parentNode.removeChild(i), f(i, "load", (function () {
F(i, n)
})), i.src = a + "#" + (i.name = function (e, t, o, r) {
null == t && (t = "&"), null == o && (o = "="), null == r && (r = window.encodeURIComponent);
var n = [];
for (var a in e) {
var i = e[a];
null != i && n.push(r(a) + o + r(i))
}
return n.join(t)
}(t)), r(i)
}))
};
d(i, "load", c), e.body.appendChild(i)
}
};
t.protocol + "//" + t.host + t.pathname === a ? k(e.body, c(window.name || t.hash.replace(/^#/, "")), (function () { })) : function (t) {
if (/m/.test(e.readyState) || !/g/.test(e.readyState) && !e.documentElement.doScroll) setTimeout(t);
else if (e.addEventListener) {
var o = p(t);
f(e, "DOMContentLoaded", o), f(window, "load", o)
} else u(e, /m/, t)
}((function () {
for (var t = e.querySelectorAll ? e.querySelectorAll("a.github-button") : function () {
for (var t = [], o = e.getElementsByTagName("a"), r = 0, n = o.length; r < n; r++) ~(" " + o[r].className + " ").replace(/[ \t\n\f\r]+/g, " ").indexOf(" github-button ") && t.push(o[r]);
return t
}(), o = 0, r = t.length; o < r; o++) ! function (e) {
M(e, (function (t) {
e.parentNode.replaceChild(t, e)
}))
}(t[o])
}))
}

361
toha/static/js/home.js Normal file
View file

@ -0,0 +1,361 @@
"use strict";
var projectCards;
(function ($) {
jQuery(document).ready(function () {
var isMobile = false, isTablet = false, isLaptop = false;
function detectDevice() {
if (window.innerWidth <= 425) {
isMobile = true;
isTablet = false;
isLaptop = false;
} else if (window.innerWidth <= 768) {
isMobile = false;
isTablet = true;
isLaptop = false;
} else {
isMobile = false;
isTablet = false;
isLaptop = true;
}
}
detectDevice();
// =========== Typing Carousel ================
// get data from hidden ul and set as typing data
if (document.getElementById('typing-carousel-data') != undefined) {
var ul = document.getElementById('typing-carousel-data').children;
var data = [];
Array.from(ul).forEach(el => {
data.push(el.textContent);
})
ityped.init('#ityped', {
strings: data,
startDelay: 200,
loop: true
});
}
// ================= Smooth Scroll ===================
// Add smooth scrolling to all links
$("a").on('click', function (event) {
// Make sure this.hash has a value before overriding default behavior
if (this.hash !== "") {
// Prevent default anchor click behavior
event.preventDefault();
// Store hash
var hash = this.hash;
// Using jQuery's animate() method to add smooth page scroll
// The optional number (800) specifies the number of milliseconds it takes to scroll to the specified area
$('html, body').animate({
scrollTop: $(hash).offset().top
}, 800, function () {
// Add hash (#) to URL when done scrolling (default click behavior)
window.location.hash = hash;
});
} // End if
});
// ============== Fix Timelines Horizontal Lines =========
var hLines = document.getElementsByClassName("horizontal-line");
for (let i = 0; i < hLines.length; i++) {
if (i % 2) {
hLines[i].children[0].children[0].classList.add("bottom-right");
hLines[i].children[2].children[0].classList.add("top-left");
} else {
hLines[i].children[0].children[0].classList.add("top-right");
hLines[i].children[2].children[0].classList.add("bottom-left");
}
}
// ============== Fix Timelines Vertical lines =========
var vLines = document.getElementsByClassName("vertical-line");
for (let i = 0; i < vLines.length; i++) {
if (i % 2) {
vLines[i].classList.add("vertical-line-left-adjustment");
}
}
// ==================== Adjust height of the skills card =============
function adjustSkillCardsHeight() {
if (!isMobile) { // no need to adjust height for mobile devices
// primary skills
var el = document.getElementById("primary-skills").children;
var maxHeight = 0;
for (let i = 0; i < el.length; i++) {
if (el[i].children[0].clientHeight > maxHeight) {
maxHeight = el[i].children[0].clientHeight;
}
}
for (let i = 0; i < el.length; i++) {
el[i].children[0].setAttribute("style", "min-height: " + maxHeight + "px;")
}
}
}
adjustSkillCardsHeight();
// ================== Project cards =====================
// Add click action on project category selector buttons
var btns = document.getElementById("project-filter-buttons").children;
for (let i = 0; i < btns.length; i++) {
btns[i].onclick = function () {
showGithubStars(btns[i].id);
}
}
projectCards = $(".filtr-projects").filterizr({ layout: 'sameWidth' });
function showGithubStars() {
// fix the github button class
// we had set it to github-button-inactive in projects holder cards so that respective javascript
// don't render it and replace respective span with shadow root
let githubButtons = document.getElementsByClassName("github-button-inactive");
while (githubButtons.length > 0) {
if (githubButtons[0].classList != undefined) {
githubButtons[0].classList.replace("github-button-inactive", "github-button");
}
}
// now render github button. it will call the github API and fill the respective fields
renderGithubButton();
}
showGithubStars();
// ==================== Adjust height of the recent-posts card =============
function adjustRecentPostsHeight() {
if (!isMobile) { // no need to adjust height for mobile devices
let el = document.getElementById("recent-posts").children;
let maxHeight = 0;
for (let i = 0; i < el.length; i++) {
if (el[i].children[0].clientHeight > maxHeight) {
maxHeight = el[i].children[0].clientHeight;
}
}
for (let i = 0; i < el.length; i++) {
el[i].children[0].setAttribute("style", "min-height: " + maxHeight + "px;")
}
}
}
adjustRecentPostsHeight();
// =============== Achievements ===========
function fourColumRow(gallery, entries, i) {
let entry1 = document.createElement("div");
entry1.classList.add("col-lg-6", "m-0", "p-0");
entry1.appendChild(entries[i].cloneNode(true));
entry1.children[0].classList.add("img-type-1");
gallery.appendChild(entry1);
i++;
let entry2 = document.createElement("div");
entry2.classList.add("col-lg-3", "m-0", "p-0");
entry2.appendChild(entries[i].cloneNode(true));
entry2.children[0].classList.add("img-type-1");
gallery.appendChild(entry2);
i++;
let entry3 = document.createElement("div");
entry3.classList.add("col-lg-3", "m-0", "p-0");
entry3.appendChild(entries[i].cloneNode(true));
entry3.children[0].classList.add("img-type-2");
i++;
entry3.appendChild(entries[i].cloneNode(true));
entry3.children[1].classList.add("img-type-2");
gallery.appendChild(entry3);
i++;
}
function fourColumnReversedRow(gallery, entries, i) {
let entry1 = document.createElement("div");
entry1.classList.add("col-lg-3", "m-0", "p-0");
entry1.appendChild(entries[i].cloneNode(true));
entry1.children[0].classList.add("img-type-2");
i++;
entry1.appendChild(entries[i].cloneNode(true));
entry1.children[1].classList.add("img-type-2");
gallery.appendChild(entry1);
i++;
let entry2 = document.createElement("div");
entry2.classList.add("col-lg-3", "m-0", "p-0");
entry2.appendChild(entries[i].cloneNode(true));
entry2.children[0].classList.add("img-type-1");
gallery.appendChild(entry2);
i++;
let entry3 = document.createElement("div");
entry3.classList.add("col-lg-6", "m-0", "p-0");
entry3.appendChild(entries[i].cloneNode(true));
entry3.children[0].classList.add("img-type-1");
gallery.appendChild(entry3);
i++;
}
function threeColumnRow(gallery, entries, i) {
console.log(i);
let entry1 = document.createElement("div");
entry1.classList.add("col-lg-6", "col-md-6", "m-0", "p-0");
entry1.appendChild(entries[i].cloneNode(true));
entry1.children[0].classList.add("img-type-1");
gallery.appendChild(entry1);
i++;
let entry2 = document.createElement("div");
entry2.classList.add("col-lg-3", "col-md-3", "m-0", "p-0");
entry2.appendChild(entries[i].cloneNode(true));
entry2.children[0].classList.add("img-type-1");
gallery.appendChild(entry2);
i++;
let entry3 = document.createElement("div");
entry3.classList.add("col-lg-3", "col-md-3", "m-0", "p-0");
entry3.appendChild(entries[i].cloneNode(true));
entry3.children[0].classList.add("img-type-1");
gallery.appendChild(entry3);
i++;
}
function threeColumnReversedRow(gallery, entries, i) {
let entry1 = document.createElement("div");
entry1.classList.add("col-lg-3", "col-md-3", "m-0", "p-0");
entry1.appendChild(entries[i].cloneNode(true));
entry1.children[0].classList.add("img-type-1");
gallery.appendChild(entry1);
i++;
let entry2 = document.createElement("div");
entry2.classList.add("col-lg-3", "col-md-3", "m-0", "p-0");
entry2.appendChild(entries[i].cloneNode(true));
entry2.children[0].classList.add("img-type-1");
gallery.appendChild(entry2);
i++;
let entry3 = document.createElement("div");
entry3.classList.add("col-lg-6", "col-md-3", "m-0", "p-0");
entry3.appendChild(entries[i].cloneNode(true));
entry3.children[0].classList.add("img-type-1");
gallery.appendChild(entry3);
i++;
}
function twoColumnRow(gallery, entries, i) {
let entry1 = document.createElement("div");
entry1.classList.add("col-lg-6", "col-md-6", "m-0", "p-0");
entry1.appendChild(entries[i].cloneNode(true));
entry1.children[0].classList.add("img-type-1");
gallery.appendChild(entry1);
i++;
let entry2 = document.createElement("div");
entry2.classList.add("col-lg-6", "col-md-6", "m-0", "p-0");
entry2.appendChild(entries[i].cloneNode(true));
entry2.children[0].classList.add("img-type-1");
gallery.appendChild(entry2);
i++;
}
function singleColumnRow(gallery, entries, i) {
let entry1 = document.createElement("div");
entry1.classList.add("col-lg-6", "col-md-6", "m-0", "p-0");
entry1.appendChild(entries[i].cloneNode(true));
entry1.children[0].classList.add("img-type-1");
gallery.appendChild(entry1);
i++;
}
function showAchievements() {
// show achievements from achievements-holder div
let gallery = document.getElementById("gallery");
gallery.innerHTML = "";
const entries = document.getElementById("achievements-holder").children;
let len = entries.length;
let i = 0;
let rowNumber = 1;
while (i < len) {
if (isLaptop) {
if (i + 4 <= len) {
if (rowNumber % 2) {
fourColumRow(gallery, entries, i);
} else {
fourColumnReversedRow(gallery, entries, i);
}
i += 4;
} else if (i + 3 <= len) {
if (rowNumber % 2) {
threeColumnRow(gallery, entries, i);
} else {
threeColumnReversedRow(gallery, entries, i);
}
i += 3;
} else if (i + 2 <= len) {
twoColumnRow(gallery, entries, i);
i += 2;
} else {
singleColumnRow(gallery, entries, i);
i++;
}
} else if (isTablet) {
if (i + 2 <= len) {
twoColumnRow(gallery, entries, i);
i += 2;
} else {
singleColumnRow(gallery, entries, i);
i++;
}
} else {
singleColumnRow(gallery, entries, i);
i++;
}
rowNumber++;
}
// show full image on click
let elements = document.getElementsByClassName("achievement-entry");
len = elements.length;
for (let i = 0; i < len; i++) {
elements[i].onclick = function () {
let achievements = document.getElementsByClassName("achievement-entry");
let len2 = achievements.length;
for (let j = 0; j < len2; j++) {
achievements[j].classList.toggle("hidden");
}
this.classList.toggle("achievement-details");
this.classList.toggle("hidden");
this.parentElement.classList.toggle("col-lg-12");
this.parentElement.classList.toggle("col-md-12");
this.parentElement.classList.toggle("col-sm-12");
if (this.children["caption"] != undefined) {
this.children["caption"].classList.toggle("hidden");
}
if (this.children["enlarge-icon"] != undefined) {
this.children["enlarge-icon"].classList.toggle("fa-search-plus");
this.children["enlarge-icon"].classList.toggle("fa-times");
}
if (this.children["achievement-title"] != undefined) {
this.children["achievement-title"].classList.toggle("hidden");
}
}
}
}
showAchievements();
// re-render custom functions on window resize
window.onresize = function () {
detectDevice();
adjustSkillCardsHeight();
adjustRecentPostsHeight();
showAchievements();
};
});
})(jQuery);

2
toha/static/js/itype.min.js vendored Normal file
View file

@ -0,0 +1,2 @@
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.ityped={})}(this,function(e){"use strict";e.init=function(e,t){var n=0,o=void 0,r=void 0,i=function(e,t){n===o&&t.loop&&(n=0),setTimeout(function(){a(e[n],t)},t.startDelay)},a=function(t,n){var o=0,r=t.length,i=setInterval(function(){if(n.placeholder?e.placeholder+=t[o]:e.textContent+=t[o],++o===r)return d(i,n)},n.typeSpeed)},d=function(e,t){return clearInterval(e),t.disableBackTyping&&n===o-1?t.onFinished():t.loop||n!==o-1?void setTimeout(function(){return c(t)},t.backDelay):t.onFinished()},c=function(t){var n=t.placeholder?e.placeholder:e.textContent,o=n.length,r=setInterval(function(){if(t.placeholder?e.placeholder=e.placeholder.substr(0,--o):e.textContent=n.substr(0,--o),0===o)return s(r,t)},t.backSpeed)},s=function(e,t){clearInterval(e),++n,i(r,t)};return function(t){var n=function(e){var t=e.strings,n=void 0===t?["Put your strings here...","and Enjoy!"]:t,o=e.typeSpeed,r=void 0===o?100:o,i=e.backSpeed,a=void 0===i?50:i,d=e.backDelay,c=void 0===d?500:d,s=e.startDelay,l=void 0===s?500:s,u=e.cursorChar,p=void 0===u?"|":u,f=e.placeholder,v=void 0!==f&&f,h=e.showCursor,y=void 0===h||h,b=e.disableBackTyping,g=void 0!==b&&b,C=e.onFinished,k=void 0===C?function(){}:C,m=e.loop;return{strings:n,typeSpeed:r,backSpeed:a,cursorChar:p,backDelay:c,placeholder:v,startDelay:l,showCursor:y,loop:void 0===m||m,disableBackTyping:g,onFinished:k}}(t||{}),a=n.strings;r=a,o=a.length,"string"==typeof e&&(e=document.querySelector(e)),n.showCursor&&function(e,t){var n=document.createElement("span");n.classList.add("ityped-cursor"),n.textContent="|",n.textContent=t.cursorChar,e.insertAdjacentElement("afterend",n)}(e,n),i(a,n)}(t)},Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=index.min.js.map

2
toha/static/js/jquery-3.4.1.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

29
toha/static/js/jquery.filterizr.min.js vendored Normal file

File diff suppressed because one or more lines are too long

27
toha/static/js/navbar.js Normal file
View file

@ -0,0 +1,27 @@
"use strict";
(function ($) {
jQuery(document).ready(function () {
// change navbar style on scroll
// ==================================================
// When the user scrolls down 80px from the top of the document, resize the navbar's padding and the logo's font size
// $.onscroll = function() {scrollFunction()};
$(document).scroll(function () {
if ($(document).scrollTop() > 40) {
$('#top-navbar').removeClass('initial-navbar');
$('#top-navbar').addClass('final-navbar shadow');
$('#navbar-toggler').removeClass('navbar-dark');
$('#navbar-toggler').addClass('navbar-light');
} else {
$('#top-navbar').removeClass('final-navbar shadow');
$('#top-navbar').addClass('initial-navbar');
$('#navbar-toggler').removeClass('navbar-light');
$('#navbar-toggler').addClass('navbar-dark');
}
});
});
})(jQuery);

5
toha/static/js/popper.min.js vendored Normal file

File diff suppressed because one or more lines are too long

2191
toha/static/js/shuffle.js Normal file

File diff suppressed because it is too large Load diff

21
toha/theme.toml Normal file
View file

@ -0,0 +1,21 @@
# theme.toml template for a Hugo theme
# See https://github.com/gohugoio/hugoThemes#themetoml for an example
name = "Toha"
license = "MIT"
licenselink = "https://github.com/yourname/yourtheme/blob/master/LICENSE"
description = ""
homepage = "http://example.com/"
tags = []
features = []
min_version = "0.41.0"
[author]
name = ""
homepage = ""
# If porting an existing theme
[original]
name = ""
homepage = ""
repo = ""