summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAbdus <abdus@abdus.net>2020-11-27 22:25:46 +0530
committerAbdus <abdus@abdus.net>2020-11-27 22:25:46 +0530
commitc1622734ebf5e871180c5d2018e53ba3db000c13 (patch)
treef66d85c42a6b726548d25da6cb3fcf72d798bb02
parent102960b372db6d51c36d598ed35f541e02fed7c7 (diff)
downloadabdus.net-c1622734ebf5e871180c5d2018e53ba3db000c13.tar.bz2
abdus.net-c1622734ebf5e871180c5d2018e53ba3db000c13.zip
remove fontawesome
-rw-r--r--content/pages/hire.md2
-rw-r--r--content/pages/keys.md86
-rw-r--r--content/posts/generator-func-in-javascript.md84
-rw-r--r--data/personal.yaml12
-rw-r--r--themes/bronn/layouts/_default/baseof.html2
-rw-r--r--themes/bronn/layouts/index.html23
-rw-r--r--themes/bronn/layouts/partials/head.html11
-rw-r--r--themes/bronn/static/css/layout.css33
-rw-r--r--themes/bronn/static/css/lineicons.css45
9 files changed, 227 insertions, 71 deletions
diff --git a/content/pages/hire.md b/content/pages/hire.md
index 4d3f044..6e26127 100644
--- a/content/pages/hire.md
+++ b/content/pages/hire.md
@@ -1,5 +1,7 @@
---
title: "Hire Me"
+meta:
+ description:
---
I am available for work Feel free to send me a mail at
diff --git a/content/pages/keys.md b/content/pages/keys.md
index b197f27..def47a9 100644
--- a/content/pages/keys.md
+++ b/content/pages/keys.md
@@ -11,54 +11,44 @@ follow [this guide](#).
```plaintext
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-=ET/J
+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
+UHJ4pkCiOw8dnPn1E2+HiYA38z6n5b0=
+=ml4t
-----END PGP PUBLIC KEY BLOCK-----
```
diff --git a/content/posts/generator-func-in-javascript.md b/content/posts/generator-func-in-javascript.md
new file mode 100644
index 0000000..465c946
--- /dev/null
+++ b/content/posts/generator-func-in-javascript.md
@@ -0,0 +1,84 @@
+---
+title: "Generator Functions in JavaScript (with real-world examples)"
+date: 2020-11-12T18:54:26+05:30
+draft: true
+meta:
+ image: https://i.ibb.co/QJqYYBn/f76eef870144.png # url to image. Important for blog listing and seo
+ description: # overrides .Summary
+tags: []
+categories: [javascript]
+---
+
+Before I start writing anything, here's a discloser: I knew about generator
+functions since a long time, but did not really had a chance to use them. In
+this blogpost, I will demonstrate implementation of generator functions in
+real-world scenerios.
+
+![Generator Function](https://i.ibb.co/QJqYYBn/f76eef870144.png)
+
+## Generator Function
+
+Before we begin, let's quickly revise **what generator functions are**. They are
+a special kind of function which is used to generate an iterator.
+
+An Iterator is an Object which implements [the Iterator Protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterator_protocol).
+
+> The Iterator Protocol defines a standard way to produce sequential values and
+> potentially a return value when all values have been generated.
+> \- MDN
+
+### Function Signature for Generator Functions
+
+Function signature for a Generator Function is similar to a regular function.
+The only difference is that, in iterator function, keyword `function` is
+followed by an astrics(`*`).
+
+```javascript
+// function signature
+function* generator(args) {}
+```
+
+### `yield` Keyword
+
+As soon as the keyword `yield` is encountered, the function execution will
+pause. And the value will be returned.
+
+```javascript
+// generator function
+function* myGen() {
+ yield 1;
+ yield 2;
+}
+```
+
+### `Iterator.next(arg)` Method
+
+[`next()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next)
+is a method to return the current state of the generator function.
+`next()` returns an object containing keys `value` and `done`. `value` holds
+whatever is returned by `yield`. And `done` shows if the complete function is
+done executing.
+
+```javascript
+function* myGen() {
+ yield 1;
+ yield 2;
+}
+
+const it = myGen();
+
+myGen.next(); // { value: 1, done: false }
+myGen.next(); // { value: 2, done: false }
+```
+
+Interesting thing is that, `next()` may accpet a value if passed. Passed value
+will be returned as `yield` expression. For example, `name = yield name`.
+Whatever is passed to `next()` method, will be stored in variable `name`.
+
+**Arguments passed to first invocation of `next()` will be in-effective.**
+
+### `Iterator.return()` Method
+
+Assume that, for some reason, you need to complete executing the whole generator
+function immediately. In such cases, do we have a viable option? Yes! it's
+called [`return()`](#)
diff --git a/data/personal.yaml b/data/personal.yaml
index e62ba02..223dc6f 100644
--- a/data/personal.yaml
+++ b/data/personal.yaml
@@ -26,17 +26,17 @@ testimonials:
social:
- - url: https://linuxrocks.online/@abdus
- name: Mastodon
- fa: 'fab fa-mastodon'
+ - url: https://t.co/cloud_dev
+ name: Telegram
+ icon: 'telegram'
- url: https://github.com/abdus
- name: LinkedIn
- fa: 'fab fa-github'
+ name: GitHub
+ icon: 'github'
- url: https://linkedin.com/in/thisisabdus
name: LinkedIn
- fa: 'fab fa-linkedin-in'
+ icon: 'linkedin'
projects:
diff --git a/themes/bronn/layouts/_default/baseof.html b/themes/bronn/layouts/_default/baseof.html
index cbe4d44..756d880 100644
--- a/themes/bronn/layouts/_default/baseof.html
+++ b/themes/bronn/layouts/_default/baseof.html
@@ -1,5 +1,5 @@
<!DOCTYPE html>
-<html>
+<html lang="en">
{{- partial "head.html" . -}}
<body>
<div id="content">
diff --git a/themes/bronn/layouts/index.html b/themes/bronn/layouts/index.html
index 634b31a..4393f74 100644
--- a/themes/bronn/layouts/index.html
+++ b/themes/bronn/layouts/index.html
@@ -12,12 +12,15 @@
<!--.-->
{{ range . }}
<a
+ title="{{ .name }}"
+ aria-label="open my {{ .name }} profile"
href="{{ .url }}"
target="_blank"
- rel="noopener noreferer"
+ rel="noopener"
class="social-icon"
>
- <i class="{{ .fa }}"></i>
+ <!--<i class="{{ .fa }}"></i>-->
+ <i class="lni lni-{{ .icon }}"></i>
</a>
{{ end }}
<!--.-->
@@ -36,6 +39,7 @@
href="https://linkedin.com/in/thisisabdus"
target="_blank"
class="btn"
+ rel="noopener"
>LinkedIn</a
>
</p>
@@ -56,7 +60,11 @@
GitHub profile.
</p>
<p>
- <a href="https://github.com/abdus" target="_blank" class="btn"
+ <a
+ href="https://github.com/abdus"
+ target="_blank"
+ class="btn"
+ rel="noopener"
>GitHub</a
>
</p>
@@ -68,11 +76,15 @@
<p>{{ .description | safeHTML }}</p>
<p>
{{ with .source }}
- <a class="btn btn-small" href="{{ . | absURL }}">SourceCode</a>
+ <a rel="noopener" class="btn btn-small" href="{{ . | absURL }}"
+ >SourceCode</a
+ >
{{ end }}
<!--.-->
{{ with .demo }}
- <a class="btn btn-small" href="{{ .demo | absURL }}">LiveDemo</a>
+ <a rel="noopener" class="btn btn-small" href="{{ .demo | absURL }}"
+ >LiveDemo</a
+ >
{{ end }}
</p>
</div>
@@ -124,6 +136,7 @@
class="btn"
target="_blank"
href="https://linkedin.com/in/thisisabdus"
+ rel="noopener"
>LinkedIn</a
>
</p>
diff --git a/themes/bronn/layouts/partials/head.html b/themes/bronn/layouts/partials/head.html
index 7fb1239..032e33c 100644
--- a/themes/bronn/layouts/partials/head.html
+++ b/themes/bronn/layouts/partials/head.html
@@ -1,4 +1,5 @@
<link rel="stylesheet" href={{ "/css/layout.css" | absURL }} media="all" />
+<link rel="stylesheet" href={{ "/css/lineicons.css" | absURL }} media="all" />
<link rel="stylesheet" href={{ "/css/syntax-dark.css" | absURL }} media="all" />
<link
defer
@@ -9,11 +10,11 @@
href="https://fonts.googleapis.com/css2?family=Space+Mono:wght@400;700&display=swap"
rel="stylesheet"
/>
-<script
- src="https://kit.fontawesome.com/66c0687ece.js"
- crossorigin="anonymous"
- defer
-></script>
+<!--<script-->
+<!--src="https://kit.fontawesome.com/66c0687ece.js"-->
+<!--crossorigin="anonymous"-->
+<!--defer-->
+<!--></script>-->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
diff --git a/themes/bronn/static/css/layout.css b/themes/bronn/static/css/layout.css
index 05054f3..69db503 100644
--- a/themes/bronn/static/css/layout.css
+++ b/themes/bronn/static/css/layout.css
@@ -23,13 +23,14 @@ nav.top-nav {
}
blockquote {
- color: #5465ff;
- font-weight: bold;
- font-size: 1.2em;
+ background: #5465ff15;
+ /*font-weight: bold;*/
+ /*font-size: 1.2em;*/
line-height: 1.4;
margin: 0;
- padding-left: 1rem;
- border-left: 4px solid #5465ff;
+ padding: 1rem;
+ border: 1px solid #5465ff;
+ border-radius: 0.4rem;
}
blockquote p {
@@ -340,6 +341,10 @@ footer a {
color: #5465ff;
}
+.homepage .social-icon img {
+ max-width: 5rem;
+}
+
.homepage .experience .title-card,
.homepage .writings .title-card {
grid-column: 2 / span 1;
@@ -477,7 +482,23 @@ footer a {
.list-layout .content h6 {
line-height: 1.2;
font-weight: 900;
- font-size: 1.5em;
+ margin: 3.4rem 0 0 0;
+ /*font-size: 1.5em;*/
+}
+
+.single-layout .content h1 ~ p,
+.single-layout .content h2 ~ p,
+.single-layout .content h3 ~ p,
+.single-layout .content h4 ~ p,
+.single-layout .content h5 ~ p,
+.single-layout .content h6 ~ p,
+.list-layout .content h1 ~ p,
+.list-layout .content h2 ~ p,
+.list-layout .content h3 ~ p,
+.list-layout .content h4 ~ p,
+.list-layout .content h5 ~ p,
+.list-layout .content h6 ~ p {
+ margin-top: 0.7rem;
}
/*list layout*/
diff --git a/themes/bronn/static/css/lineicons.css b/themes/bronn/static/css/lineicons.css
new file mode 100644
index 0000000..ef303a7
--- /dev/null
+++ b/themes/bronn/static/css/lineicons.css
@@ -0,0 +1,45 @@
+@font-face {
+ font-family: lineicons;
+ src: url(https://cdn.lineicons.com/2.0/fonts/LineIcons.eot);
+ src: url(https://cdn.lineicons.com/2.0/fonts/LineIcons.eot)
+ format("embedded-opentype"),
+ url(https://cdn.lineicons.com/2.0/fonts/LineIcons.woff2) format("woff2"),
+ url(https://cdn.lineicons.com/2.0/fonts/LineIcons.woff) format("woff"),
+ url(https://cdn.lineicons.com/2.0/fonts/LineIcons.ttf) format("truetype"),
+ url(https://cdn.lineicons.com/2.0/fonts/LineIcons.svg) format("svg");
+ font-weight: 400;
+ font-style: normal;
+}
+.lni {
+ display: inline-block;
+ font: normal normal normal 1em/1 "LineIcons";
+ speak: none;
+ text-transform: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+@keyframes lni-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ -moz-transform: rotate(0deg);
+ -ms-transform: rotate(0deg);
+ -o-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(360deg);
+ -moz-transform: rotate(360deg);
+ -ms-transform: rotate(360deg);
+ -o-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+.lni-github::before {
+ content: "\eacd";
+}
+.lni-linkedin::before {
+ content: "\eb15";
+}
+.lni-telegram::before {
+ content: "\ebbc";
+}