first commit

This commit is contained in:
Neovoid Pineapple 2023-12-28 08:47:44 +00:00
commit b8f62b2ea6
198 changed files with 28184 additions and 0 deletions

15
LICENSE Normal file
View file

@ -0,0 +1,15 @@
LICENSED TO HANUMAN!
All the work is dedicated to Hanuman.
Use as thou wish to use and or dedicate thee unto your isht devata of choice or hanuman.
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.
In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law.
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 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.
For more information, please refer to <http://unlicense.org/>

4
README.md Normal file
View file

@ -0,0 +1,4 @@
# webdev-projects
Backup of my `/srv/http/pages/nvpie` files at exozyme

31
animation-test.html Normal file
View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NeoVoid's Site</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$(".button-animated").addClass("animated shake");
});
</script>
</head>
<style>
.animation-test {
color: blue;
font-size: 2em;
}
</style>
<body>
<div class="animation-test">Animation Test</div>
<script type="text/javascript" src="animation-test.js"></script>
</body>
</html>

4
animation-test.js Normal file
View file

@ -0,0 +1,4 @@
$(document).ready(function() {
$(".animation-test").addClass("animated shake");
});

78
ascii.css Normal file
View file

@ -0,0 +1,78 @@
ul.ascii, ul.ascii ul { margin-left: 0; padding-left: 0; list-style: none; }
/* level 1 */
ul.ascii > li::before { content: ""; }
/* level 2 */
ul.ascii > li > ul > li::before { content: "├──\00a0"; }
ul.ascii > li > ul > li:last-child::before { content: "└──\00a0"; }
/* level 3 */
ul.ascii > li > ul > li > ul > li::before { content: "│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li:last-child::before { content: "│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li::before { content: "\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0└──\00a0"; }
/* level 4 */
ul.ascii > li > ul > li > ul > li > ul > li::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li > ul > li:last-child::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li > ul > li:last-child > ul > li::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li:last-child > ul > li:last-child::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li > ul > li::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }
/* level 5 */
ul.ascii > li > ul > li > ul > li > ul > li > ul > li::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li > ul > li > ul > li:last-child::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li > ul > li > ul > li:last-child > ul > li::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li > ul > li:last-child > ul > li:last-child::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li > ul > li:last-child > ul > li > ul > li::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li:last-child > ul > li > ul > li:last-child::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li > ul > li:last-child > ul > li:last-child > ul > li::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li:last-child > ul > li:last-child > ul > li:last-child::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li > ul > li > ul > li::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li > ul > li > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li > ul > li:last-child > ul > li::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li > ul > li:last-child > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li > ul > li::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }
/* level 6 */
ul.ascii > li > ul > li > ul > li > ul > li > ul > li > ul > li::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li > ul > li > ul > li > ul > li:last-child::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li > ul > li > ul > li > ul > li:last-child > ul > li::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li > ul > li > ul > li:last-child > ul > li:last-child::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li > ul > li > ul > li:last-child > ul > li > ul > li::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li > ul > li:last-child > ul > li > ul > li:last-child::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li > ul > li > ul > li:last-child > ul > li:last-child > ul > li::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li > ul > li:last-child > ul > li:last-child > ul > li:last-child::before { content: "│\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li > ul > li:last-child > ul > li > ul > li > ul > li::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li:last-child > ul > li > ul > li > ul > li:last-child::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li > ul > li:last-child > ul > li > ul > li:last-child > ul > li::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li:last-child > ul > li > ul > li:last-child > ul > li:last-child::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li > ul > li:last-child > ul > li:last-child > ul > li > ul > li::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li:last-child > ul > li:last-child > ul > li > ul > li:last-child::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child::before { content: "│\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li > ul > li > ul > li > ul > li::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li > ul > li > ul > li > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li > ul > li > ul > li:last-child > ul > li::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li > ul > li > ul > li:last-child > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li > ul > li:last-child > ul > li > ul > li::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li > ul > li:last-child > ul > li > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li > ul > li:last-child > ul > li:last-child > ul > li::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li > ul > li:last-child > ul > li:last-child > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li > ul > li > ul > li::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li > ul > li > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li > ul > li:last-child > ul > li::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li > ul > li:last-child > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li > ul > li::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0│\00a0\00a0\00a0└──\00a0"; }
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0├──\00a0"}
ul.ascii > li > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child::before { content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0└──\00a0"; }

BIN
assets/guestbook.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
assets/guestbook1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
assets/guestbook11.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

1
assets/icon.svg Normal file
View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 48 48" width="48pt" height="48pt"><linearGradient id="_lgradient_5" x1="0" y1="0.5" x2="1" y2="0.5" gradientTransform="matrix(32.936,0,0,16.518,7.532,0)" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-opacity="1" style="stop-color:rgb(67,233,123)"/><stop offset="97.82608695652173%" stop-opacity="1" style="stop-color:rgb(56,249,215)"/></linearGradient><path d=" M 13.718 8.884 C 13.835 9.108 13.952 9.333 14.06 9.567 C 14.482 10.43 14.869 11.311 15.229 12.202 L 15.57 13.02 L 16.083 14.27 L 13.592 15.304 L 13.071 14.063 L 12.729 13.236 C 12.729 13.227 12.729 13.227 12.729 13.218 C 12.387 12.381 12.028 11.563 11.632 10.745 C 10.472 8.398 9.096 6.168 7.532 4.064 C 9.816 4.595 12.046 5.305 14.222 6.177 C 15.094 6.528 15.948 6.933 16.775 7.4 C 17.54 7.85 18.268 8.362 18.933 8.947 C 18.951 8.956 18.969 8.965 18.978 8.983 C 19.329 7.751 19.76 6.537 20.282 5.359 C 21.172 3.309 22.512 1.475 24.202 0 C 25.947 1.493 27.331 3.363 28.258 5.467 C 28.806 6.708 29.247 7.994 29.579 9.306 C 29.903 9.055 30.227 8.812 30.559 8.569 C 31.36 7.985 32.187 7.427 33.041 6.915 C 33.769 6.474 34.525 6.078 35.307 5.728 C 36.925 5.008 38.697 4.676 40.468 4.757 C 38.993 6.708 37.69 8.785 36.584 10.97 C 36.098 11.914 35.694 12.903 35.397 13.928 L 35.01 15.214 L 32.43 14.449 L 32.807 13.155 C 33.158 11.977 33.617 10.835 34.183 9.738 C 34.273 9.567 34.363 9.387 34.462 9.207 C 34.453 9.216 34.444 9.216 34.435 9.225 C 33.652 9.693 32.897 10.205 32.16 10.745 C 30.568 11.905 29.058 13.164 27.628 14.503 C 27.52 11.761 26.891 9.073 25.794 6.555 C 25.38 5.62 24.85 4.73 24.22 3.92 C 23.636 4.703 23.141 5.548 22.755 6.438 C 21.352 9.621 20.624 13.047 20.615 16.518 C 20.03 14.378 18.825 12.444 17.162 10.97 C 16.622 10.511 16.047 10.098 15.436 9.747 C 14.878 9.432 14.303 9.144 13.718 8.884 Z " fill="url(#_lgradient_5)"/><linearGradient id="_lgradient_6" x1="0" y1="0.5" x2="0.9074880558539661" y2="0.9200778838291643" gradientTransform="matrix(36.474,0,0,34.39,5.763,13.61)" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-opacity="1" style="stop-color:rgb(247,241,7)"/><stop offset="83.88839793817618%" stop-opacity="1" style="stop-color:rgb(255,187,36)"/></linearGradient><path d=" M 16.829 26.637 L 21.517 31.115 L 21.517 31.115 L 17.093 35.747 L 12.406 31.06 L 16.829 26.637 Z M 14.57 24.479 L 11.372 21.424 C 10.439 22.799 9.931 24.433 9.931 26.115 L 9.931 28.585 L 10.197 28.851 L 14.57 24.479 Z M 23.529 19.938 L 28.167 24.154 L 28.167 24.154 L 23.676 28.855 L 19.04 24.427 L 23.529 19.938 Z M 21.27 17.779 L 18.268 17.779 C 16.588 17.779 14.956 18.285 13.583 19.215 L 16.78 22.268 L 21.27 17.779 Z M 23.777 33.273 L 28.256 37.551 L 28.256 37.551 L 23.634 42.288 L 23.634 42.288 L 19.303 37.957 L 23.777 33.273 L 23.777 33.273 Z M 30.48 26.256 L 35.141 30.494 L 35.141 30.494 L 30.438 35.314 L 25.936 31.014 L 30.48 26.256 L 30.48 26.256 Z M 14.534 42.951 C 15.683 43.525 16.961 43.831 18.268 43.831 L 20.759 43.831 L 20.759 43.831 L 20.759 43.831 L 17.145 40.217 L 14.534 42.951 L 14.534 42.951 Z M 12.037 41.04 C 10.683 39.518 9.931 37.542 9.931 35.494 L 9.931 33.004 L 14.935 38.007 L 12.037 41.04 L 12.037 41.04 Z M 35.938 20.542 C 37.308 22.068 38.069 24.056 38.069 26.115 L 38.069 28.928 L 38.069 28.928 L 38.069 28.928 L 38.069 28.928 L 38.069 28.928 L 32.641 23.994 L 35.87 20.613 L 35.938 20.542 L 35.938 20.542 Z M 33.431 18.642 C 32.291 18.079 31.026 17.779 29.732 17.779 L 25.804 17.779 L 30.328 21.891 L 33.431 18.642 L 33.431 18.642 Z M 37.454 32.597 L 38.069 33.156 L 38.069 33.156 L 38.069 35.494 C 38.069 35.494 38.069 35.494 38.069 35.505 C 38.069 36.672 37.912 37.839 37.579 38.965 C 37.351 39.75 37.027 40.509 36.607 41.206 L 36.607 41.206 L 36.607 41.206 L 32.698 37.473 L 37.454 32.597 L 37.454 32.597 L 37.454 32.597 Z M 25.353 45.003 C 25.488 45.279 25.563 45.588 25.563 45.916 L 25.563 45.916 C 25.563 47.066 24.629 48 23.479 48 L 23.479 48 L 18.268 48 C 14.954 48 11.766 46.676 9.421 44.342 C 7.086 41.997 5.763 38.808 5.763 35.494 L 5.763 26.115 C 5.763 22.802 7.086 19.613 9.421 17.268 C 11.766 14.934 14.954 13.61 18.268 13.61 L 29.732 13.61 C 33.046 13.61 36.234 14.934 38.579 17.268 C 40.914 19.613 42.237 22.802 42.237 26.115 L 42.237 35.494 C 42.237 37.058 42.018 38.621 41.581 40.132 C 41.185 41.518 40.559 42.841 39.736 44.04 C 38.965 45.176 37.964 46.135 36.797 46.864 C 35.62 47.593 34.265 47.989 32.879 48 L 32.879 48 C 31.729 48.011 30.785 47.087 30.774 45.937 L 30.774 45.937 C 30.762 44.786 31.687 43.843 32.837 43.831 L 32.837 43.831 C 33.39 43.822 33.926 43.691 34.411 43.43 L 34.411 43.43 L 30.515 39.709 L 25.792 44.55 L 25.353 45.003 L 25.353 45.003 L 25.353 45.003 Z " fill-rule="evenodd" fill="url(#_lgradient_6)"/></svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
assets/wallhaven-rrpp6m.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 MiB

143
busy_base2.css Normal file
View file

@ -0,0 +1,143 @@
body {
margin: 0;
}
/*Everything goes inside here.*/
.wrapper {
width: 900px;
margin: 0 auto;
}
.sidebar-img, .footer, .title, .links, .box {
margin-top: 25px;
}
.title, .links, .footer {
text-align: center;
}
/*Navigation links.*/
.links ul {
list-style-type: none;
padding: 0;
margin: 0;
}
.links li {
display: inline-block;
}
/*Some fancy code for fun, to add special characters around the navigation links. Change content to "" if you don't want these.*/
.links li:before {
content: "「";
}
.links li:after {
content: "」 ∷ ";
}
.links .last:after {
content: "」";
}
.links li:before, .links li:after {
letter-spacing: 0.1em;
}
/*Basic box code that is used for all content boxes on the page.*/
.box {
border: 1px solid black;
padding: 0.5em 1em;
}
/*Goes inside the box class. Not given any style by default, but can be used for stuff like fancy borders.*/
.inner {
}
/*Prevent image overflow.*/
.box img, .sidebar img {
max-width: 100%;
height: auto;
}
/*Wrapper for the sidebar.*/
.sidebar {
width: 200px;
float: left;
}
/*Container for the sidebar image.*/
.sidebar-image {
border: 1px solid black;
}
/*Remove extra padding line at the bottom of the image.*/
.sidebar-image img {
display: block;
}
/*This is where the title, navbar, and main content all go.*/
.main-wrapper {
margin-left: 225px;
}
/*Two columns by default. The "single-column" class can be added to make it one column.*/
.main {
columns: 2;
column-gap: 25px;
}
/*Make sure boxes don't spread over multiple columns.*/
.main .box {
display: inline-block;
}
.single-column {
columns: 1;
}
.footer {
margin-bottom: 25px;
}
@media(max-width:915px) {
.wrapper {
width: 95%;
}
.main-wrapper {
width: calc(100% - 225px);
}
}
@media (orientation: portrait), (max-width: 480px) {
.wrapper {
width: 100%;
}
.main-wrapper, .sidebar, .footer {
margin: 0 auto;
width: 90%;
}
.sidebar {
float: none;
display: block;
}
.sidebar-image {
margin: 0 auto;
width: 33%;
margin-top:25px;
}
.sidebar .sidebar-image img {
width: 100%;
}
.footer {
margin-bottom: 25px;
}
}

45
busy_base2_skin1.css Normal file
View file

@ -0,0 +1,45 @@
@import url('https://fonts.googleapis.com/css2?family=Readex+Pro&display=swap');
body {
background: linear-gradient(rgb(10,5,0,0.05), rgb(10,5,0,0.1)), url("img.png") no-repeat fixed;
background-size: cover;
background-attachment: fixed;
font-family: "Readex Pro", Open Sans, sans-serif;
}
.box {
border-radius: 1.5em 0.175em;
background: rgb(10,5,0,0.85);
color: white;
border: 1px solid #aae6ff;
padding: 0.75em 1.25em;
}
a, .links li:before, .links li:after, .links .last {
color: #1896ca;
}
a:hover {
color: #9930a5;
}
.sidebar-image img {
border-radius: 0.175em;
}
/*Alternate style of spacers for nav links. Replace with "" for no spacer characters.*/
.links li:before {
content: " ";
}
.links li:after {
content: " ⬪ ";
}
.links .last:after {
content: " ";
}
/*Increase gap between automatic spacers.*/
.links li:before, .links li:after {
letter-spacing: 0.375em;
}

60
cafe/index.html Normal file
View file

@ -0,0 +1,60 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Cafe Menu</title>
<link href="styles.css" rel="stylesheet"/>
</head>
<body>
<div class="menu">
<main>
<h1>CAMPER CAFE</h1>
<p class="established">Est. 2020</p>
<hr>
<section>
<h2>Coffee</h2>
<img src="https://cdn.freecodecamp.org/curriculum/css-cafe/coffee.jpg" alt="coffee icon"/>
<article class="item">
<p class="flavor">French Vanilla</p><p class="price">3.00</p>
</article>
<article class="item">
<p class="flavor">Caramel Macchiato</p><p class="price">3.75</p>
</article>
<article class="item">
<p class="flavor">Pumpkin Spice</p><p class="price">3.50</p>
</article>
<article class="item">
<p class="flavor">Hazelnut</p><p class="price">4.00</p>
</article>
<article class="item">
<p class="flavor">Mocha</p><p class="price">4.50</p>
</article>
</section>
<section>
<h2>Desserts</h2>
<img src="https://cdn.freecodecamp.org/curriculum/css-cafe/pie.jpg" alt="pie icon"/>
<article class="item">
<p class="dessert">Donut</p><p class="price">1.50</p>
</article>
<article class="item">
<p class="dessert">Cherry Pie</p><p class="price">2.75</p>
</article>
<article class="item">
<p class="dessert">Cheesecake</p><p class="price">3.00</p>
</article>
<article class="item">
<p class="dessert">Cinnamon Roll</p><p class="price">2.50</p>
</article>
</section>
</main>
<hr class="bottom-line">
<footer>
<p>
<a href="https://www.freecodecamp.org" target="_blank">Visit our website</a>
</p>
<p class="address">123 Free Code Camp Drive</p>
</footer>
</div>
</body>
</html>

95
cafe/styles.css Normal file
View file

@ -0,0 +1,95 @@
body {
background-image: url(https://cdn.freecodecamp.org/curriculum/css-cafe/beans.jpg);
font-family: sans-serif;
padding: 20px;
}
h1 {
font-size: 40px;
margin-top: 0;
margin-bottom: 15px;
}
h2 {
font-size: 30px;
}
.established {
font-style: italic;
}
h1, h2, p {
text-align: center;
}
.menu {
width: 80%;
background-color: burlywood;
margin-left: auto;
margin-right: auto;
padding: 20px;
max-width: 500px;
}
img {
display: block;
margin-left: auto;
margin-right: auto;
margin-top: -25px;
}
hr {
height: 2px;
background-color: brown;
border-color: brown;
}
.bottom-line {
margin-top: 25px;
}
h1, h2 {
font-family: Impact, serif;
}
.item p {
display: inline-block;
margin-top: 5px;
margin-bottom: 5px;
font-size: 18px;
}
.flavor, .dessert {
text-align: left;
width: 75%;
}
.price {
text-align: right;
width: 25%;
}
/* FOOTER */
footer {
font-size: 14px;
}
.address {
margin-bottom: 5px;
}
a {
color: black;
}
a:visited {
color: black;
}
a:hover {
color: brown;
}
a:active {
color: brown;
}

74
catphotoapp/index.html Normal file
View file

@ -0,0 +1,74 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<head>
<title>CatPhotoApp</title>
</head>
<body>
<main>
<aside style="float: right">
<figure>
<img src="https://external-preview.redd.it/rmNscePvRL8OIOPJFKiweUd6kYn3ajU2gfw8eP3Z_QY.jpg?auto=webp&s=3a0b1af5a48be00876884ba0271fe21f7e0dc86b" alt="One majestic Norwegian forest cat, perched on a tree stump">
<figcaption>Here is one majestic Norwegian forest cat, perched on a tree stump</figcaption>
</figure>
</aside>
<h1>CatPhotoApp</h1>
<section>
<h2>Cat Photos</h2>
<!-- TODO: Add link to cat photos -->
<p>See more <a target="_blank" href="https://freecatphotoapp.com">cat photos</a> in our gallery.</p>
<a href="https://freecatphotoapp.com"><img src="https://cdn.freecodecamp.org/curriculum/cat-photo-app/relaxing-cat.jpg" alt="A cute orange cat lying on its back."></a>
</section>
<section>
<h2>Cat Lists</h2>
<h3>Things cats love:</h3>
<ul>
<li>cat nip</li>
<li>laser pointers</li>
<li>lasagna</li>
</ul>
<figure>
<img src="https://cdn.freecodecamp.org/curriculum/cat-photo-app/lasagna.jpg" alt="A slice of lasagna on a plate.">
<figcaption>Cats <em>love</em> lasagna.</figcaption>
</figure>
<h3>Top 3 things cats hate:</h3>
<ol>
<li>flea treatment</li>
<li>thunder</li>
<li>other cats</li>
</ol>
<figure>
<img src="https://cdn.freecodecamp.org/curriculum/cat-photo-app/cats.jpg" alt="Five cats looking around a field.">
<figcaption>Cats <strong>hate</strong> other cats.</figcaption>
</figure>
</section>
<section>
<h2>Cat Form</h2>
<form action="https://freecatphotoapp.com/submit-cat-photo">
<fieldset>
<legend>Is your cat an indoor or outdoor cat?</legend>
<label><input id="indoor" type="radio" name="indoor-outdoor" value="indoor" checked> Indoor</label>
<label><input id="outdoor" type="radio" name="indoor-outdoor" value="outdoor"> Outdoor</label>
</fieldset>
<fieldset>
<legend>What's your cat's personality?</legend>
<input id="loving" type="checkbox" name="personality" value="loving" checked> <label for="loving">Loving</label>
<input id="lazy" type="checkbox" name="personality" value="lazy"> <label for="lazy">Lazy</label>
<input id="energetic" type="checkbox" name="personality" value="energetic"> <label for="energetic">Energetic</label>
</fieldset>
<input type="text" name="catphotourl" placeholder="cat photo URL" required>
<button type="submit">Submit</button>
</form>
</section>
</main>
<footer>
<p>
No Copyright - <a href="https://www.freecodecamp.org">freeCodeCamp.org</a>
</p>
</footer>
</body>
</html>

28
colors.css Normal file
View file

@ -0,0 +1,28 @@
/* CSS variables
Generated by 'wal' */
:root {
--wallpaper: url("/srv/http/pages/nvpie/images/bg_image_3.webp");
/* Special */
--background: #0d0c11;
--foreground: #c6c5c3;
--cursor: #c6c5c3;
/* Colors */
--color0: #0d0c11;
--color1: #4E4E4F;
--color2: #646365;
--color3: #916A5C;
--color4: #A7946F;
--color5: #606F89;
--color6: #79888A;
--color7: #c6c5c3;
--color8: #8a8988;
--color9: #4E4E4F;
--color10: #646365;
--color11: #916A5C;
--color12: #A7946F;
--color13: #606F89;
--color14: #79888A;
--color15: #c6c5c3;
}

26
css_markers/index.html Normal file
View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Colored Markers</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1>CSS Color Markers</h1>
<div class="container">
<div class="marker red">
<div class="cap"></div>
<div class="sleeve"></div>
</div>
<div class="marker green">
<div class="cap"></div>
<div class="sleeve"></div>
</div>
<div class="marker blue">
<div class="cap"></div>
<div class="sleeve"></div>
</div>
</div>
</body>
</html>

44
css_markers/styles.css Normal file
View file

@ -0,0 +1,44 @@
h1 {
text-align: center;
}
.container {
background-color: rgb(255, 255, 255);
padding: 10px 0;
}
.marker {
width: 200px;
height: 25px;
margin: 10px auto;
}
.cap {
width: 60px;
height: 25px;
}
.sleeve {
width: 110px;
height: 25px;
background-color: rgba(255, 255, 255, 0.5);
border-left: 10px double rgba(0, 0, 0, 0.75);
}
.cap, .sleeve {
display: inline-block;
}
.red {
background: linear-gradient(rgb(122, 74, 14), rgb(245, 62, 113), rgb(162, 27, 27));
box-shadow: 0 0 20px 0 rgba(83, 14, 14, 0.8);
}
.green {
background: linear-gradient(#55680D, #71F53E, #116C31);
box-shadow: 0 0 20px 0 #3B7E20CC;
}
.blue {
background: linear-gradient(hsl(186, 76%, 16%), hsl(223, 90%, 60%), hsl(240, 56%, 42%));
box-shadow: 0 0 20px 0 hsla(223, 59%, 31%, 0.8);
}

22
darkmode/index.html Normal file
View file

@ -0,0 +1,22 @@
<link rel="stylesheet/scss" type="text/css" href="styles.scss">
<nav>
<div class="theme-switch-wrapper">
<label class="theme-switch" for="checkbox">
<input type="checkbox" id="checkbox" />
<div class="slider round"></div>
</label>
<em>Enable Dark Mode!</em>
</div>
</nav>
<section>
<article class="post">
<h1>The Principles of Good Design</h1>
<p class="post-meta">Circa 2014 <span>by</span> Ian Daniel Stewart</p>
<p>Is <strong>beauty</strong> objectively true? Are there principles you can use to guide you to it in your work? Can designers from both the sciences and the arts look at each others work and find <strong class="sevenhundred">beauty</strong>? These are important questions for all designers.</p>
<p>For those of us who design things … we need to be able to recognize it. We need good taste to make good things. Instead of treating <strong class="eighthundred">beauty</strong> as an airy abstraction, to be either blathered about or avoided depending on how one feels about airy abstractions, lets try considering it as a practical question: how do you make good stuff?</p>
<a href="#">Read More</a>
</article>
</section>

22
darkmode/script.js Normal file
View file

@ -0,0 +1,22 @@
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
const currentTheme = localStorage.getItem('theme');
if (currentTheme) {
document.documentElement.setAttribute('data-theme', currentTheme);
if (currentTheme === 'dark') {
toggleSwitch.checked = true;
}
}
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('theme', 'dark');
}
else { document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('theme', 'light');
}
}
toggleSwitch.addEventListener('change', switchTheme, false);

126
darkmode/styles.scss Normal file
View file

@ -0,0 +1,126 @@
@import url(https://fonts.googleapis.com/css?family=Lato:400,400italic,700|Sansita+One);
:root {
--primary-color: #302AE6;
--secondary-color: #536390;
--font-color: #424242;
--bg-color: #fff;
--heading-color: #292922;
}
[data-theme="dark"] {
--primary-color: #9A97F3;
--secondary-color: #818cab;
--font-color: #e1e1ff;
--bg-color: #161625;
--heading-color: #818cab;
}
body {
font-family: "Lato", sans-serif;
background-color: var(--bg-color);
color: var(--font-color);
max-width: 90%;
margin: 0 auto;
font-size: calc(1rem + 0.25vh);
}
h1 {
color: var(--heading-color);
font-family: "Sansita One", serif;
font-size: 2rem;
margin-bottom: 1vh;
}
p {
font-size: 1.1rem;
line-height: 1.6rem;
}
a {
color: var(--primary-color);
text-decoration: none;
border-bottom: 3px solid transparent;
font-weight: bold;
&:hover, &:focus {
border-bottom: 3px solid currentColor;
}
}
section {
max-width: 68%;
margin: 0 auto;
}
.post-meta {
font-size: 1rem;
font-style: italic;
display: block;
margin-bottom: 4vh;
color: var(--secondary-color);
}
nav {
display: flex;
justify-content: flex-end;
padding: 20px 0;
}
/*slider switch css */
.theme-switch-wrapper {
display: flex;
align-items: center;
em {
margin-left: 10px;
font-size: 1rem;
}
}
.theme-switch {
display: inline-block;
height: 34px;
position: relative;
width: 60px;
}
.theme-switch input {
display:none;
}
.slider {
background-color: #ccc;
bottom: 0;
cursor: pointer;
left: 0;
position: absolute;
right: 0;
top: 0;
transition: .4s;
}
.slider:before {
background-color: #fff;
bottom: 4px;
content: "";
height: 26px;
left: 4px;
position: absolute;
transition: .4s;
width: 26px;
}
input:checked + .slider {
background-color: #66bb6a;
}
input:checked + .slider:before {
transform: translateX(26px);
}
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}

BIN
hello/Azkasia Demo.ttf Normal file

Binary file not shown.

BIN
hello/assets/image-01.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

BIN
hello/assets/img-01.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

BIN
hello/assets/img-02.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 KiB

BIN
hello/assets/img-03.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 993 KiB

BIN
hello/assets/img-04.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

BIN
hello/assets/img-05.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
hello/assets/img-06.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
hello/assets/img-07.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

BIN
hello/assets/img-08.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

BIN
hello/assets/img-09.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

BIN
hello/assets/img-10.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 KiB

BIN
hello/assets/img-11.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
hello/assets/img-12.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

BIN
hello/assets/img-13.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

BIN
hello/assets/img-14.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

BIN
hello/assets/img-15.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
hello/assets/img-16.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 KiB

BIN
hello/assets/img-17.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

28
hello/fancy_gallery.css Normal file
View file

@ -0,0 +1,28 @@
.gallery {
--g: 6px; /* the gap */
display: grid;
width: 750px; /* the size */
aspect-ratio: 1;
grid: auto-flow 1fr/repeat(3,1fr);
gap: var(--g);
}
.gallery img {
width: 100%;
height: 100%;
object-fit: cover;
filter: grayscale();
cursor: pointer;
transition: .5s
}
.gallery img:hover {
filter: grayscale(0);
}
.gallery img:nth-child(2) {
grid-area: 1/2/span 2/span 2;
clip-path: polygon(0 0,100% 0,100% 100%,calc(50% + var(--g)/4) 100%,0 calc(50% - var(--g)/4))
}
.gallery img:nth-child(3) {
grid-area: 2/1/span 2/span 2;
clip-path: polygon(0 0,calc(50% - var(--g)/4) 0,100% calc(50% + var(--g)/4),100% 100%,0 100%);
}

275
hello/flisty.css Normal file
View file

@ -0,0 +1,275 @@
/*Font used for fancy accents -- REPLACE with your own!*/
@font-face {
font-family: Azkasia; /*Internal name of the font you'll use for this stylesheet.*/
src: url("Azkasia%20Demo.ttf"); /*Put the url of the font on your site here. DO NOT HOTLINK.*/
}
body {
margin: 0;
padding: 0;
color: #fff;
background: #00071c;
font-size: 0.95em;
font-family: "Liberation Mono", "Source Code Pro", "Courier New", monospace;
}
a {
color: #c1cdf1;
}
/*Increased spacing to compensate for current font - may want to change if you use something else.*/
p {
line-height: 150%;
}
/*Set font for headings.*/
h1, h2, h3 {
text-align:center;
font-family: Azkasia, Cursive, serif;
letter-spacing: 0.175em;
word-spacing: 0.2em;
}
/*Make the first letter slightly bigger and a different color :) */
h1::first-letter, h2::first-letter, h3::first-letter {
color: #aae6ff;
font-size: 1.25em;
font-weight:bold;
}
/*Make lowercase headers bigger, since this font's a little harder to read.*/
h1 {
font-size: 2.325em;
}
/*Make h2 and h3 in ALLCAPS.*/
h2, h3 {
text-transform: uppercase;
}
/*h3 is left-aligned and indented.*/
h3 {
text-align: left;
margin-left: 1em;
font-size: 1.25em;
}
/*Change color when bold or italic.*/
b {
color: #aae6ff;
}
i {
color: #cdf0ff;
}
hr {
border: 0;
background: linear-gradient(rgb(0,0,0,0), rgb(255,255,255,1), rgb(0,0,0,0));
height:1px;
margin: 2em 1em;
}
blockquote {
font-style:italic;
border-left: 1px solid #aae6ff;
background: rgb(170,230,255,0.15);
padding: 5px 20px;
}
/***
NOTE: This stylesheet uses elements instead of div classes in a few places (nav1, nav2).
If you want to use them as classes, put "." in front of all the custom element names in the stylesheet here.
For example: nav1 .navlink {} would be .nav1 .navlink {} instead.
***/
/*Content all goes in here.*/
.wrapper {
display: block;
margin: 0 auto;
width: 800px;
position:relative;
}
/*This is where the pretty header image goes! Replace the url with the location of your own.*/
.header {
display: block;
background: linear-gradient(rgb(0,7,28,0.99), rgb(0,7,28,0)), url("skaiabg.png") no-repeat; /*REPLACE ME!*/
background-size: 900px auto;
height:400px;
top: 0;
}
/*Miscellanous fancy styling for the title inside the header area.*/
.header h1 {
font-size: 3.25em;
padding-top: 100px;
text-transform:lowercase;
}
.header h1::first-letter {
color: #fff;
}
/*Puts "[]" around the title.*/
.header h1:before {
content: "[";
}
.header h1:after {
content: "]";
}
/*Nav1 is for the link buttons on the side.*/
nav1 {
display: block;
position: absolute;
float: right;
margin-left: 800px;
top: 100px;
}
nav1 .navlink {
display: block;
margin: 15px 0px;
padding: 5px 2px;
width: 100px;
text-align: center;
background: #333;
font-family: Azkasia;
font-size: 1.5em;
text-transform: uppercase;
border-radius: 0 15px 5px 0px;
}
nav1 .navlink a {
color: #fff;
text-decoration: none;
}
nav1 .navlink:hover, nav1 .navlink:focus-within {
background: #555;
padding-left:5px;
transition:ease 0.5s; /*So the tab button appears to 'move' instead of instantly changing and popping outwards.*/
}
/*Nav2 is for the links directly below the header.*/
nav2 {
display: block;
width: 100%;
background: #444e6f;
text-align: center;
}
nav2 .navlink {
display: inline-block;
margin: 10px 5px;
padding: 2px;
font-size: 1.5em;
text-decoration:none;
font-family: "Symbola", "Palatino Linotype", Garamond, serif;
font-weight:bold;
}
nav2 .navlink a {
color: #fff;
text-shadow: 0 0 2px #c3cdea;
}
nav2 .navlink a:hover, nav2 .navlink a:focus {
text-shadow: 0 0 3px #dae1f5;
transition: ease 5s;
}
/*Main page content goes in here. (Replace the image with your own footer image.)
The rgb color in the linear-gradient here should match your actual main div background color, so the image
appears to 'fade in' from the image to solid background. */
.main {
display: block;
margin: 0;
position: relative;
/*In order: gradient overlay (opacity going from 1 to 0.875), actual background color, footer image*/
background: linear-gradient(rgb(16,24,50,1), rgb(16,24,50,0.875)), #101832 url("/skaiabg.png") no-repeat;
background-size: 900px auto;
background-position:bottom center;
}
/*Inside div. I don't remember why this was a div and nothing else, but it is.
If you do change that, remember to add display:block; to the element first.*/
.inner {
padding: 1px 20px 20px 20px; /*The 1px is to prevent paragraph margin overflow from mucking up the background. CSS is weird sometimes.*/
}
/*Prevent image overflow.*/
.inner img {
max-width: 100%;
height:auto;
}
/*Footer with small text at the bottom of the page.*/
.footer {
display: block;
padding: 0.75em 20px;
text-align: center;
font-size: 0.85em;
background: #444e6f;
line-height: 150%;
}
.footer a {
color: #dfdfdf;
}
/***
For narrower screens that can't handle the full version of the page.
***/
/*For desktop screens that are too narrow for the default width, keep the default layout, but with a narrower column.*/
@media(max-width:1050px) {
.wrapper {
width: 600px;
}
nav1 {
margin-left:600px;
}
}
/*For smallest screens, switch to percentage-based width, and move the side tab buttons to the space under the header as centered buttons.*/
@media(max-width:900px) {
.wrapper {
width: 80%;
}
nav1 {
position:static;
margin-left:0;
margin: 0 auto;
width: 100%;
text-align:center;
}
nav1 .navlink {
display: inline-block;
border-radius: 15px 5px;
margin: 15px 0;
padding: 5px 15px 10px 15px;
width: auto;
}
nav1 .navlink:hover {
padding-left: 15px;
}
}
/*If on mobile, maximize the space available by increasing width to 95%.*/
@media(orientation:portrait) {
.wrapper {
width: 95%;
}
}

BIN
hello/icons/github.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
hello/icons/linkedin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

BIN
hello/icons/mail.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
hello/icons/telegram.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

129
hello/img-gallery.css Normal file
View file

@ -0,0 +1,129 @@
/* ------- Images Grid ------- */
.grid {
display: grid;
grid-gap: 5vmin;
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); /* 150px = minimum image size */
grid-auto-flow: dense;
padding: 2em 0;
}
.grid a {
position: relative;
border: 0;
}
.grid a:hover {
transform: scale(.975);
}
/* For a square ratio */
.grid a:before {
content: "";
display: block;
padding-top: 100%;
}
.grid a img {
position: absolute;
top: 0;
width: 100%;
height: 100%;
object-fit: contain;
}
/* ------- Slideshow ------- */
.slides {
position: fixed;
top: 0;
left: 0;
right: 0;
height: 100vh;
overflow-y: scroll;
scroll-snap-type: y mandatory;
}
.slides figure {
height: 100vh;
padding: 0 5vw;
margin: 0;
display: grid;
place-items: center;
align-content: center;
scroll-snap-align: center;
}
.slides figure img {
max-height: 88vh; /* Adjust if needed */
}
.slides figure.cover {
padding: 0;
}
.slides figure.cover img {
max-height: none;
position: absolute;
z-index: -1;
width: 100vw;
height: 100vh;
object-fit: cover;
}
/* ------- Lightbox ------- */
.lightbox {
display: none;
color: var(--textcolor);
}
.lightbox:target {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
display: grid;
place-items: center;
align-content: center;
background: var(--bgcolor);
border: 0;
z-index: 3;
}
.lightbox img {
max-height: 100vh;
z-index: 4;
}
.lightbox:target:before { /* Loading spinner */
content:"";
height: 2em;
width: 2em;
animation: spin .8s infinite linear;
border: 1px solid;
border-right-color: transparent;
border-radius: 50%;
display: block;
position: absolute;
transform: translateX(-50%);
opacity: .25;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.lightbox:target:after { /* × to close */
content: "\00D7";
position: fixed;
font-size: 2em;
font-weight: 200;
line-height: 0;
top: .75em;
right: .5em;
z-index: 4;
}

93
hello/index.html Normal file
View file

@ -0,0 +1,93 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello</title>
<!-- The style.css file allows you to change the look of your web pages.
If you include the next line in all your web pages, they will all share the same look.
This makes it easier to make new pages for your site. -->
<link href="flisty.css" rel="stylesheet" type="text/css" media="all">
<link href="fancy_gallery.css" rel="stylesheet" type="text/css" media="all">
<link rel="icon" type="image/x-icon" href="tree.png">
</head>
<body>
<div class=wrapper>
<div class=header><h1>BTW I am Hello!</h1></div>
<nav1>
<div class=navlink><a href="#projects">Projects</a></div>
<div class=navlink><a href="#gallery">Gallery</a></div>
<div class=navlink><a href="#blogs">Blogs</a></div>
<div class=navlink><a href="#contact">contact</a></div>
</nav1>
<nav2>
<div class=navlink><a href="/">Home</a></div>
<div class=navlink><a href="#gallery">Gallery</a></div>
<div class=navlink><a href="#projects">Projects</a></div>
<div class=navlink><a href="#blogs">Blogs</a></div>
<div class=navlink><a href="#contact">Contact</a></div>
</nav2>
<div class=main>
<div class=inner>
<h1>Chandrakant Borle</h1>
<p>“You have the heart of a chief… and the soul of a dragon.” Valka, httyd</p>
<p>Hey, thanks for stopping by and welcome to my site. Here you can find my projects and blogs. I'm mainly interested in cloud, devops and open source tools and technologies. Other than that I like clicking pics of nature, tinkering with tech which has hardware and software.</p>
<blockquote>
<p>“Turns out all we needed was a little more of this.” “You just gestured to all of me.” Stoick and Hiccup, How To Train Your Dragon</p>
</blockquote>
<h2 id="projects">Projects</h2>
<ul>
<li><strong>Simple-webapp-flask: <a href="https://github.com/nightfury000/simple-webapp-flask" target="_blank"><em>link</em></a></strong></li>
<p>Created a docker image which automates the process of installing dependencies running the web-app and pushed it to the Dockerhub.</p>
<li><strong>Voting application: <a href="" target="_blank"><em>link</em></a></strong></li>
<p>With help of docker-compose implemented the voting application which consisted of In-memory db redis, postgres, nodejs and linking them.</p>
<li><strong>Credit Card number validation: <a href="https://github.com/nightfury000/Credit_cardno_validation" target="_blank"><em>link</em></a></strong></li>
<p>It is a program to validate if a credit/debit card number is valid or not and is implemented in c++. Here the algorithm used is Luhn's algorithm.</p>
</ul>
<h2 id="gallery">Gallery</h2>
<p>Why gallery?</p>
<p> ->Because here you will find images and even though the images are still but they have a lot to say. I hope you would like these images.</p>
<p>Device: Redmi note 7 pro, some photos are sooc, edited and some are shot using gcam using xml.</p>
<div class="gallery">
<a href="assets/img-01.webp"><img loading="lazy" alt="" src="assets/img-01.webp"></a>
<a href="assets/img-02.webp"><img loading="lazy" alt="" src="assets/img-02.webp"></a>
<a href="assets/img-03.webp"><img loading="lazy" alt="" src="assets/img-03.webp"></a>
<a href="assets/img-04.webp"><img loading="lazy" alt="" src="assets/img-04.webp"></a>
<a href="assets/img-05.webp"><img loading="lazy" alt="" src="assets/img-05.webp"></a>
<a href="assets/img-06.webp"><img loading="lazy" alt="" src="assets/img-06.webp"></a>
<a href="assets/img-07.webp"><img loading="lazy" alt="" src="assets/img-07.webp"></a>
<a href="assets/img-08.webp"><img loading="lazy" alt="" src="assets/img-08.webp"></a>
<a href="assets/img-09.webp"><img loading="lazy" alt="" src="assets/img-09.webp"></a>
<a href="assets/img-10.webp"><img loading="lazy" alt="" src="assets/img-10.webp"></a>
<a href="assets/img-11.webp"><img loading="lazy" alt="" src="assets/img-11.webp"></a>
<a href="assets/img-12.webp"><img loading="lazy" alt="" src="assets/img-12.webp"></a>
<a href="assets/img-13.webp"><img loading="lazy" alt="" src="assets/img-13.webp"></a>
<a href="assets/img-14.webp"><img loading="lazy" alt="" src="assets/img-14.webp"></a>
<a href="assets/img-15.webp"><img loading="lazy" alt="" src="assets/img-15.webp"></a>
<a href="assets/img-16.webp"><img loading="lazy" alt="" src="assets/img-16.webp"></a>
<a href="assets/img-17.webp"><img loading="lazy" alt="" src="assets/img-17.webp"></a>
</div>
</div>
</div>
<div class="footer">
<h2 id="contact">Contact</h2>
<p><a href=mailto:"csborle@gmail.com"><image src = "icons/mail.png" alt="mail" width="25" height="25"></image></a>
<a href="https://linkedin.com/in/chandrakant-borle-992046190" target="_blank"><image src = "icons/linkedin.png" alt="linkedin" width="25" height="25"></a>
<a href="https://github.com/nightfury000" target="_blank"><image src = "icons/github.png" alt="github" width="25" height="25"></a>
<a href="https://t.me/night_0_0_fury" target="_blank"> <image src = "icons/telegram.png" alt="telegram" width="25" height="25"></a></p></div>
</div>
</body>
</html>

BIN
hello/skaiabg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
hello/tree.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

BIN
images/bg_image_1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

BIN
images/bg_image_1.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 KiB

BIN
images/bg_image_10.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

BIN
images/bg_image_10.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

BIN
images/bg_image_11.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 MiB

BIN
images/bg_image_11.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

BIN
images/bg_image_12.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 MiB

BIN
images/bg_image_12.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 548 KiB

BIN
images/bg_image_13.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 515 KiB

BIN
images/bg_image_13.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

BIN
images/bg_image_14.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

BIN
images/bg_image_14.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

BIN
images/bg_image_15.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

BIN
images/bg_image_15.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

BIN
images/bg_image_2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

BIN
images/bg_image_2.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

BIN
images/bg_image_3.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 KiB

BIN
images/bg_image_3.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

BIN
images/bg_image_4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

BIN
images/bg_image_4.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

BIN
images/bg_image_5.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
images/bg_image_5.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 851 KiB

BIN
images/bg_image_6.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

BIN
images/bg_image_6.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 KiB

BIN
images/bg_image_7.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 KiB

BIN
images/bg_image_7.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 517 KiB

BIN
images/bg_image_8.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

BIN
images/bg_image_8.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

BIN
images/bg_image_9.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 MiB

BIN
images/bg_image_9.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 714 KiB

199
index.html Normal file
View file

@ -0,0 +1,199 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NeoVoid's Site</title>
<link href="busy_base2.css" rel="stylesheet" type="text/css" media="all">
<link href="busy_base2_skin1.css" rel="stylesheet" type="text/css" media="all">
<link href="ascii.css" rel="stylesheet" type="text/css">
<link href="colors.css" rel="stylesheet" type="text/css">
<link rel="icon" type="image/png" href="assets/icon.svg"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<style>
/* Import generated color palette */
/* Use the generated colors in your CSS rules */
.test123 {
color: var(--color4);
}
figure {
display: flex;
align-content: center;
padding: 9px 7px 0px;
margin: 0 auto;
border: 1px solid navajowhite;
}
figcaption {
color: navajowhite;
text-align: center;
font-size: .333em;
}
figcaption a {
color: white;
text-decoration: underline;
}
figcaption, small, .footnotes {
font-size: .865em;
}
.button-50 {
position: relative;
appearance: button;
background-color: rgb(10,5,0,0.85);
background-image: none;
border: 1px solid #000;
border-radius: 4px;
box-shadow: #aae6ff 4px 4px 0 0,#000 4px 4px 0 1px;
box-sizing: border-box;
color: #fff;
cursor: pointer;
display: inline-block;
font-family: ITCAvantGardeStd-Bk,Arial,sans-serif;
font-size: 1em;
font-weight: 400;
line-height: 20px;
margin: 0 5px 10px 0;
overflow: visible;
padding: 17px 34px;
text-align: center;
text-transform: none;
touch-action: manipulation;
user-select: none;
-webkit-user-select: none;
vertical-align: middle;
white-space: nowrap;
}
.button-50:focus {
text-decoration: none;
}
.button-50:hover {
text-decoration: none;
}
.button-50:active {
box-shadow: rgba(0, 0, 0, .125) 0 3px 5px inset;
outline: 0;
}
.button-50:not([disabled]):active {
box-shadow: #fff 2px 2px 0 0, #000 2px 2px 0 1px;
transform: translate(2px, 2px);
}
</style>
<body>
<div class="wrapper ">
<div class=sidebar>
<div class="box animate__animated animate__bounceInLeft animate__delay-2s"><div class="sidebar-image"><div class=inner><img src="mysite/chitra/pi/2.webp"></div></div></div>
<div class="box animate__animated animate__bounceInUp animate__delay-2s"><div class="inner"><p>Name: Neovoid</p><p>Alias: nvpie</p><p>Love: Pineapples</p></div></div>
<div class=inner><p><a href="mysite/"><button class="button-50 animate__animated animate__bounceInLeft animate__delay-2s">Enter into the site</button></a></p></div>
<figure class="animate__animated animate__flipInY animate__delay-3s">
<a href="https://envs.net/~neovoid/guestbook"><img src="assets/guestbook.gif" loading="lazy" title="guestbook img" alt="guestbook page turning gif"></a>
<figcaption>Sign My Guestbook</figcaption>
</figure>
</div>
<div class=main-wrapper>
<div class=title>
<div class="box animate__animated animate__bounceInDown animate__delay-2s"><div class="inner animate__animated animate__pulse"><img src='assets/icon.svg' loading="lazy"/><h2>NeoVoid's Website</h2></div></div>
</div>
<div class="links animate__animated animate__bounceInUp animate__delay-2s">
<div class=box><div class=inner> <ul>
<li><a href="/">Home</a></li>
<li><a href="/nvpiesite/">Blogs</a></li>
<li><a href="/mysite/#links">About</a></li>
<li class=last><a href="https://envs.net/~neovoid/guestbook/">Guestbook</a></li>
</ul></div>
</div></div>
<div class="main single-column">
<div class="box animate__animated animate__bounceInRight animate__delay-2s" ><div class=inner>
<P>Welcome to my Site.</p>
<p>This is my little corner of the internet where I do silly stupid things that can be address as my process to learn sysadmin and programming stuff.</p>
<p>This is a cover of the another actual site of mine. It hosted on shared pubnix of exozyme. Enter into the site to know more about what I do or write.</p>
</div></div></div>
<div class=main>
<div class="box animate__animated animate__bounceInLeft animate__delay-2s">
<div class="inner">
<h2>WebDev Projects</h2>
<ul class="ascii">
<li>Static Sites/
<ul>
<li><a href="catphotoapp/">CatPhotos.html</a></li>
<li><a href="cafe/">Cafe.html</a></li>
<li><a href="css_markers/">CSS_COLOR_MARKERS.html</a></li>
<li><a href="inputInjection/">InputInjection.html</a></li>
<li><a href="registrationForm/">RegistrationForm.html</a></li>
</ul>
</li>
<li>Dynamic Sites/
<ul>
<li><a href="https://envs.net/~neovoid/">CGI Work</a></li>
<li><a href="https://library.exozy.me">Simple calibre server</a></li>
<li><a href="https://envs.net/~neovoid/notes/">"Index of" with RTX on</a></li>
<li><a href="https://envs.net/~neovoid/newboat/">Simple RSS Feed Fetcher</a></li>
<li><a href="https://cyberchef.exozy.me">Self Hosted instance of cyberchef</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="box animate__animated animate__bounceInRight animate__delay-2s">
<div class="inner">
<h2>Personal Site Projects</h2>
<ul class="ascii">
<li>Static Sites
<ul>
<li><a href="mysite/">My Semantic Site</a></li>
<li><a href="nvpiesite/">Nvpie Site</a></li>
<li><a href="http://tmn2shxabknupdf5hi7svac3up5viyv5c6fyjra7emmo2zeepx3h2pad.onion/">Tor Site (shutter down)</a></li>
</ul>
</ul>
</div>
</div>
</div>
</div>
<div class="footer ">
<div class="box animate__animated animate__bounceInUp animate__delay-2s"><div class="inner test123">❤️ GLORY TO HANUMAN! ❤️ </div></div>
</div>
</div>
<script type="text/javascript" src="setbg.js"></script>
</body>
</html>
<!--
Credits:
- Exozy.me for shared hosting
- eggramen.neocities.org for css
- open-domains.net for such cool domain.
- animate.style for css animations
- Lord Hanuman for inspiration.
-->

35
inputInjection/index.html Normal file
View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<head>
<title>Command Injection</title>
</head>
<body>
<main>
<h1>Command Input Injection</h1>
<section>
<h4>Here is the graphical representation of the task.</h4>
<em>Although I am not talking here web based attack</em>
</section>
<section>
<h2>Challenge: Use this input field to your advantage and run 'cat' instead of 'ls'</h2>
<form method="post" action="example.com">
<fieldset>
<legend>Use input field to your advantage</legend>
<label for="options">ls <input id="options" type="text" name="options" placeholder="--algho --color" required /></label>
</fieldset>
<button type="submit">Submit</button>
</form>
</section>
</main>
<footer>
<p>
Just for explaining my question's sake!
</p>
</footer>
</body>
</html>

23
library/index.html Normal file
View file

@ -0,0 +1,23 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta name'robots' content='noindex,nofollow' />
<meta name='description' content='A general purpose library for exozyme users'/>
<title>Exozyme Library</title>
<link rel='stylesheet' href='/styles.css'/>
</head>
<body>
<div class="main">
<h1>Exozyme Library</h1>
<h3>A general purpose library for exozyme users</h1>
<p>Yes, we also have public library based on simple calibre server accessible for exozyme users.</p>
<p>Feel free to add your own collection in epub format</p>
<p>You can login using <code>standard exozyme guest user</code> credentials or ask in matrix.</p>
<a href="https://0.exozy.me">Login</a>
</div>
</body>
</html>

17
library/styles.css Normal file
View file

@ -0,0 +1,17 @@
.main {
margin: 0 auto;
text-align: center;
}
a:link, a:visited {
background-color: #f44336;
color: white;
padding: 14px 25px;
text-align: center;
text-decoration: none;
display: inline-block;
}
a:hover, a:active {
background-color: brown;
}

1
mysite Submodule

@ -0,0 +1 @@
Subproject commit d44edf577c0ac8b71f6da0d51a7797760eb19231

6
nvpiesite/.domains Normal file
View file

@ -0,0 +1,6 @@
nvpie.neovoid.tk
www.nvpie.neovoid.tk
nvpiesite.pineapple.codeberg.page
main.nvpiesite.pineapple.codeberg.page
pineapple.codeberg.page/nvpiesite/@pages/
pages.nvpiesite.pineapples.codeberg.page

1
nvpiesite/.git1/HEAD Normal file
View file

@ -0,0 +1 @@
ref: refs/heads/main

11
nvpiesite/.git1/config Normal file
View file

@ -0,0 +1,11 @@
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = https://codeberg.org/pineapple/nvpiesite.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
merge = refs/heads/main

View file

@ -0,0 +1 @@
Unnamed repository; edit this file 'description' to name the repository.

View file

@ -0,0 +1,15 @@
#!/bin/sh
#
# An example hook script to check the commit log message taken by
# applypatch from an e-mail message.
#
# The hook should exit with non-zero status after issuing an
# appropriate message if it wants to stop the commit. The hook is
# allowed to edit the commit message file.
#
# To enable this hook, rename this file to "applypatch-msg".
. git-sh-setup
commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
:

View file

@ -0,0 +1,24 @@
#!/bin/sh
#
# An example hook script to check the commit log message.
# Called by "git commit" with one argument, the name of the file
# that has the commit message. The hook should exit with non-zero
# status after issuing an appropriate message if it wants to stop the
# commit. The hook is allowed to edit the commit message file.
#
# To enable this hook, rename this file to "commit-msg".
# Uncomment the below to add a Signed-off-by line to the message.
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
# hook is more suited to it.
#
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
# This example catches duplicate Signed-off-by lines.
test "" = "$(grep '^Signed-off-by: ' "$1" |
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
echo >&2 Duplicate Signed-off-by lines.
exit 1
}

View file

@ -0,0 +1,174 @@
#!/usr/bin/perl
use strict;
use warnings;
use IPC::Open2;
# An example hook script to integrate Watchman
# (https://facebook.github.io/watchman/) with git to speed up detecting
# new and modified files.
#
# The hook is passed a version (currently 2) and last update token
# formatted as a string and outputs to stdout a new update token and
# all files that have been modified since the update token. Paths must
# be relative to the root of the working tree and separated by a single NUL.
#
# To enable this hook, rename this file to "query-watchman" and set
# 'git config core.fsmonitor .git/hooks/query-watchman'
#
my ($version, $last_update_token) = @ARGV;
# Uncomment for debugging
# print STDERR "$0 $version $last_update_token\n";
# Check the hook interface version
if ($version ne 2) {
die "Unsupported query-fsmonitor hook version '$version'.\n" .
"Falling back to scanning...\n";
}
my $git_work_tree = get_working_dir();
my $retry = 1;
my $json_pkg;
eval {
require JSON::XS;
$json_pkg = "JSON::XS";
1;
} or do {
require JSON::PP;
$json_pkg = "JSON::PP";
};
launch_watchman();
sub launch_watchman {
my $o = watchman_query();
if (is_work_tree_watched($o)) {
output_result($o->{clock}, @{$o->{files}});
}
}
sub output_result {
my ($clockid, @files) = @_;
# Uncomment for debugging watchman output
# open (my $fh, ">", ".git/watchman-output.out");
# binmode $fh, ":utf8";
# print $fh "$clockid\n@files\n";
# close $fh;
binmode STDOUT, ":utf8";
print $clockid;
print "\0";
local $, = "\0";
print @files;
}
sub watchman_clock {
my $response = qx/watchman clock "$git_work_tree"/;
die "Failed to get clock id on '$git_work_tree'.\n" .
"Falling back to scanning...\n" if $? != 0;
return $json_pkg->new->utf8->decode($response);
}
sub watchman_query {
my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty')
or die "open2() failed: $!\n" .
"Falling back to scanning...\n";
# In the query expression below we're asking for names of files that
# changed since $last_update_token but not from the .git folder.
#
# To accomplish this, we're using the "since" generator to use the
# recency index to select candidate nodes and "fields" to limit the
# output to file names only. Then we're using the "expression" term to
# further constrain the results.
my $last_update_line = "";
if (substr($last_update_token, 0, 1) eq "c") {
$last_update_token = "\"$last_update_token\"";
$last_update_line = qq[\n"since": $last_update_token,];
}
my $query = <<" END";
["query", "$git_work_tree", {$last_update_line
"fields": ["name"],
"expression": ["not", ["dirname", ".git"]]
}]
END
# Uncomment for debugging the watchman query
# open (my $fh, ">", ".git/watchman-query.json");
# print $fh $query;
# close $fh;
print CHLD_IN $query;
close CHLD_IN;
my $response = do {local $/; <CHLD_OUT>};
# Uncomment for debugging the watch response
# open ($fh, ">", ".git/watchman-response.json");
# print $fh $response;
# close $fh;
die "Watchman: command returned no output.\n" .
"Falling back to scanning...\n" if $response eq "";
die "Watchman: command returned invalid output: $response\n" .
"Falling back to scanning...\n" unless $response =~ /^\{/;
return $json_pkg->new->utf8->decode($response);
}
sub is_work_tree_watched {
my ($output) = @_;
my $error = $output->{error};
if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) {
$retry--;
my $response = qx/watchman watch "$git_work_tree"/;
die "Failed to make watchman watch '$git_work_tree'.\n" .
"Falling back to scanning...\n" if $? != 0;
$output = $json_pkg->new->utf8->decode($response);
$error = $output->{error};
die "Watchman: $error.\n" .
"Falling back to scanning...\n" if $error;
# Uncomment for debugging watchman output
# open (my $fh, ">", ".git/watchman-output.out");
# close $fh;
# Watchman will always return all files on the first query so
# return the fast "everything is dirty" flag to git and do the
# Watchman query just to get it over with now so we won't pay
# the cost in git to look up each individual file.
my $o = watchman_clock();
$error = $output->{error};
die "Watchman: $error.\n" .
"Falling back to scanning...\n" if $error;
output_result($o->{clock}, ("/"));
$last_update_token = $o->{clock};
eval { launch_watchman() };
return 0;
}
die "Watchman: $error.\n" .
"Falling back to scanning...\n" if $error;
return 1;
}
sub get_working_dir {
my $working_dir;
if ($^O =~ 'msys' || $^O =~ 'cygwin') {
$working_dir = Win32::GetCwd();
$working_dir =~ tr/\\/\//;
} else {
require Cwd;
$working_dir = Cwd::cwd();
}
return $working_dir;
}

View file

@ -0,0 +1,8 @@
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".
exec git update-server-info

View file

@ -0,0 +1,14 @@
#!/bin/sh
#
# An example hook script to verify what is about to be committed
# by applypatch from an e-mail message.
#
# The hook should exit with non-zero status after issuing an
# appropriate message if it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-applypatch".
. git-sh-setup
precommit="$(git rev-parse --git-path hooks/pre-commit)"
test -x "$precommit" && exec "$precommit" ${1+"$@"}
:

View file

@ -0,0 +1,49 @@
#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments. The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-commit".
if git rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=$(git hash-object -t tree /dev/null)
fi
# If you want to allow non-ASCII filenames set this variable to true.
allownonascii=$(git config --type=bool hooks.allownonascii)
# Redirect output to stderr.
exec 1>&2
# Cross platform projects tend to avoid non-ASCII filenames; prevent
# them from being added to the repository. We exploit the fact that the
# printable range starts at the space character and ends with tilde.
if [ "$allownonascii" != "true" ] &&
# Note that the use of brackets around a tr range is ok here, (it's
# even required, for portability to Solaris 10's /usr/bin/tr), since
# the square bracket bytes happen to fall in the designated range.
test $(git diff --cached --name-only --diff-filter=A -z $against |
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
then
cat <<\EOF
Error: Attempt to add a non-ASCII file name.
This can cause problems if you want to work with people on other platforms.
To be portable it is advisable to rename the file.
If you know what you are doing you can disable this check using:
git config hooks.allownonascii true
EOF
exit 1
fi
# If there are whitespace errors, print the offending file names and fail.
exec git diff-index --check --cached $against --

View file

@ -0,0 +1,13 @@
#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git merge" with no arguments. The hook should
# exit with non-zero status after issuing an appropriate message to
# stderr if it wants to stop the merge commit.
#
# To enable this hook, rename this file to "pre-merge-commit".
. git-sh-setup
test -x "$GIT_DIR/hooks/pre-commit" &&
exec "$GIT_DIR/hooks/pre-commit"
:

View file

@ -0,0 +1,53 @@
#!/bin/sh
# An example hook script to verify what is about to be pushed. Called by "git
# push" after it has checked the remote status, but before anything has been
# pushed. If this script exits with a non-zero status nothing will be pushed.
#
# This hook is called with the following parameters:
#
# $1 -- Name of the remote to which the push is being done
# $2 -- URL to which the push is being done
#
# If pushing without using a named remote those arguments will be equal.
#
# Information about the commits which are being pushed is supplied as lines to
# the standard input in the form:
#
# <local ref> <local oid> <remote ref> <remote oid>
#
# This sample shows how to prevent push of commits where the log message starts
# with "WIP" (work in progress).
remote="$1"
url="$2"
zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0')
while read local_ref local_oid remote_ref remote_oid
do
if test "$local_oid" = "$zero"
then
# Handle delete
:
else
if test "$remote_oid" = "$zero"
then
# New branch, examine all commits
range="$local_oid"
else
# Update to existing branch, examine new commits
range="$remote_oid..$local_oid"
fi
# Check for WIP commit
commit=$(git rev-list -n 1 --grep '^WIP' "$range")
if test -n "$commit"
then
echo >&2 "Found WIP commit in $local_ref, not pushing"
exit 1
fi
fi
done
exit 0

View file

@ -0,0 +1,169 @@
#!/bin/sh
#
# Copyright (c) 2006, 2008 Junio C Hamano
#
# The "pre-rebase" hook is run just before "git rebase" starts doing
# its job, and can prevent the command from running by exiting with
# non-zero status.
#
# The hook is called with the following parameters:
#
# $1 -- the upstream the series was forked from.
# $2 -- the branch being rebased (or empty when rebasing the current branch).
#
# This sample shows how to prevent topic branches that are already
# merged to 'next' branch from getting rebased, because allowing it
# would result in rebasing already published history.
publish=next
basebranch="$1"
if test "$#" = 2
then
topic="refs/heads/$2"
else
topic=`git symbolic-ref HEAD` ||
exit 0 ;# we do not interrupt rebasing detached HEAD
fi
case "$topic" in
refs/heads/??/*)
;;
*)
exit 0 ;# we do not interrupt others.
;;
esac
# Now we are dealing with a topic branch being rebased
# on top of master. Is it OK to rebase it?
# Does the topic really exist?
git show-ref -q "$topic" || {
echo >&2 "No such branch $topic"
exit 1
}
# Is topic fully merged to master?
not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
if test -z "$not_in_master"
then
echo >&2 "$topic is fully merged to master; better remove it."
exit 1 ;# we could allow it, but there is no point.
fi
# Is topic ever merged to next? If so you should not be rebasing it.
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
only_next_2=`git rev-list ^master ${publish} | sort`
if test "$only_next_1" = "$only_next_2"
then
not_in_topic=`git rev-list "^$topic" master`
if test -z "$not_in_topic"
then
echo >&2 "$topic is already up to date with master"
exit 1 ;# we could allow it, but there is no point.
else
exit 0
fi
else
not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
/usr/bin/perl -e '
my $topic = $ARGV[0];
my $msg = "* $topic has commits already merged to public branch:\n";
my (%not_in_next) = map {
/^([0-9a-f]+) /;
($1 => 1);
} split(/\n/, $ARGV[1]);
for my $elem (map {
/^([0-9a-f]+) (.*)$/;
[$1 => $2];
} split(/\n/, $ARGV[2])) {
if (!exists $not_in_next{$elem->[0]}) {
if ($msg) {
print STDERR $msg;
undef $msg;
}
print STDERR " $elem->[1]\n";
}
}
' "$topic" "$not_in_next" "$not_in_master"
exit 1
fi
<<\DOC_END
This sample hook safeguards topic branches that have been
published from being rewound.
The workflow assumed here is:
* Once a topic branch forks from "master", "master" is never
merged into it again (either directly or indirectly).
* Once a topic branch is fully cooked and merged into "master",
it is deleted. If you need to build on top of it to correct
earlier mistakes, a new topic branch is created by forking at
the tip of the "master". This is not strictly necessary, but
it makes it easier to keep your history simple.
* Whenever you need to test or publish your changes to topic
branches, merge them into "next" branch.
The script, being an example, hardcodes the publish branch name
to be "next", but it is trivial to make it configurable via
$GIT_DIR/config mechanism.
With this workflow, you would want to know:
(1) ... if a topic branch has ever been merged to "next". Young
topic branches can have stupid mistakes you would rather
clean up before publishing, and things that have not been
merged into other branches can be easily rebased without
affecting other people. But once it is published, you would
not want to rewind it.
(2) ... if a topic branch has been fully merged to "master".
Then you can delete it. More importantly, you should not
build on top of it -- other people may already want to
change things related to the topic as patches against your
"master", so if you need further changes, it is better to
fork the topic (perhaps with the same name) afresh from the
tip of "master".
Let's look at this example:
o---o---o---o---o---o---o---o---o---o "next"
/ / / /
/ a---a---b A / /
/ / / /
/ / c---c---c---c B /
/ / / \ /
/ / / b---b C \ /
/ / / / \ /
---o---o---o---o---o---o---o---o---o---o---o "master"
A, B and C are topic branches.
* A has one fix since it was merged up to "next".
* B has finished. It has been fully merged up to "master" and "next",
and is ready to be deleted.
* C has not merged to "next" at all.
We would want to allow C to be rebased, refuse A, and encourage
B to be deleted.
To compute (1):
git rev-list ^master ^topic next
git rev-list ^master next
if these match, topic has not merged in next at all.
To compute (2):
git rev-list master..topic
if this is empty, it is fully merged to "master".
DOC_END

View file

@ -0,0 +1,24 @@
#!/bin/sh
#
# An example hook script to make use of push options.
# The example simply echoes all push options that start with 'echoback='
# and rejects all pushes when the "reject" push option is used.
#
# To enable this hook, rename this file to "pre-receive".
if test -n "$GIT_PUSH_OPTION_COUNT"
then
i=0
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
do
eval "value=\$GIT_PUSH_OPTION_$i"
case "$value" in
echoback=*)
echo "echo from the pre-receive-hook: ${value#*=}" >&2
;;
reject)
exit 1
esac
i=$((i + 1))
done
fi

View file

@ -0,0 +1,42 @@
#!/bin/sh
#
# An example hook script to prepare the commit log message.
# Called by "git commit" with the name of the file that has the
# commit message, followed by the description of the commit
# message's source. The hook's purpose is to edit the commit
# message file. If the hook fails with a non-zero status,
# the commit is aborted.
#
# To enable this hook, rename this file to "prepare-commit-msg".
# This hook includes three examples. The first one removes the
# "# Please enter the commit message..." help message.
#
# The second includes the output of "git diff --name-status -r"
# into the message, just before the "git status" output. It is
# commented because it doesn't cope with --amend or with squashed
# commits.
#
# The third example adds a Signed-off-by line to the message, that can
# still be edited. This is rarely a good idea.
COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3
/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
# case "$COMMIT_SOURCE,$SHA1" in
# ,|template,)
# /usr/bin/perl -i.bak -pe '
# print "\n" . `git diff --cached --name-status -r`
# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
# *) ;;
# esac
# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
# if test -z "$COMMIT_SOURCE"
# then
# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
# fi

Some files were not shown because too many files have changed in this diff Show more