commit 51940b50d063a45f8275b1b7fe44b12006bf63c1 Author: kankys Date: Sun Sep 1 00:07:03 2024 +0200 prod php blog diff --git a/img/1-4204059220.png b/img/1-4204059220.png new file mode 100644 index 0000000..b548f45 Binary files /dev/null and b/img/1-4204059220.png differ diff --git a/img/400789-Linux-GNU-GNU_-_Linux-minimalism.jpg b/img/400789-Linux-GNU-GNU_-_Linux-minimalism.jpg new file mode 100644 index 0000000..514e1c5 Binary files /dev/null and b/img/400789-Linux-GNU-GNU_-_Linux-minimalism.jpg differ diff --git a/img/600px-Arch-linux-logo-691350772.png b/img/600px-Arch-linux-logo-691350772.png new file mode 100644 index 0000000..143dc53 Binary files /dev/null and b/img/600px-Arch-linux-logo-691350772.png differ diff --git a/img/91488-2048748032.jpg b/img/91488-2048748032.jpg new file mode 100644 index 0000000..7d94d2a Binary files /dev/null and b/img/91488-2048748032.jpg differ diff --git a/img/IMG_4835.JPG b/img/IMG_4835.JPG new file mode 100644 index 0000000..1e40e24 Binary files /dev/null and b/img/IMG_4835.JPG differ diff --git a/img/Kali-linux-872298623.jpg b/img/Kali-linux-872298623.jpg new file mode 100644 index 0000000..2cd26ab Binary files /dev/null and b/img/Kali-linux-872298623.jpg differ diff --git a/img/endeavourOS-astronaught-3246654328.jpg b/img/endeavourOS-astronaught-3246654328.jpg new file mode 100644 index 0000000..477fb10 Binary files /dev/null and b/img/endeavourOS-astronaught-3246654328.jpg differ diff --git a/img/fedora-feat-5b9fe676c9e77c0050ce388c-2333270958.jpg b/img/fedora-feat-5b9fe676c9e77c0050ce388c-2333270958.jpg new file mode 100644 index 0000000..0c76e2b Binary files /dev/null and b/img/fedora-feat-5b9fe676c9e77c0050ce388c-2333270958.jpg differ diff --git a/img/linux-penguin-and-rainbow-background-imsv6hxt0e8zcl7m-3730406657.jpg b/img/linux-penguin-and-rainbow-background-imsv6hxt0e8zcl7m-3730406657.jpg new file mode 100644 index 0000000..d2e641c Binary files /dev/null and b/img/linux-penguin-and-rainbow-background-imsv6hxt0e8zcl7m-3730406657.jpg differ diff --git a/img/ubuntu-linux-minimal-4k-on-3840x2160-2398598343.jpg b/img/ubuntu-linux-minimal-4k-on-3840x2160-2398598343.jpg new file mode 100644 index 0000000..63bcddb Binary files /dev/null and b/img/ubuntu-linux-minimal-4k-on-3840x2160-2398598343.jpg differ diff --git a/img/wp7596264.jpg b/img/wp7596264.jpg new file mode 100644 index 0000000..07190f1 Binary files /dev/null and b/img/wp7596264.jpg differ diff --git a/img/wp8843183-1041051902.jpg b/img/wp8843183-1041051902.jpg new file mode 100644 index 0000000..ffd1483 Binary files /dev/null and b/img/wp8843183-1041051902.jpg differ diff --git a/index.php b/index.php new file mode 100644 index 0000000..75e3c1d --- /dev/null +++ b/index.php @@ -0,0 +1,315 @@ + + + + + + + + + + + + + Lukáš Kaňka + + +
+ + + + + +
+
+

+

+
+
+ + +
+
+
+
+

O mně

+

Jsem IT nadšenec s pozitivním přístupem k životu a vášní pro + technologie, ve kterých se neustále vzdělávám. Absolvoval jsem kurz + testingu a SQL v Acamaru, další kurz byl web developer u společnosti Engeto. Pracoval jsem na pozici testera ve společnosti Uniprog a nyní pracuji ve společnosti Kyndryl na projektu České Spořitelny pro platformu SMART. +

+

Nyní navíc nabízím IT služby, klikněte sem.

+ +
+
# +
+
+
+ + +
+
+
+

Co dělám

+

+

    + +
  • Ve volném čase se věnuji:
  • +
  • Svému blogu: Lukáš Bloguje.
  • +
  • Spolku Arch Linux CZ, kde jsem členem a pomáhám se správou webu: Arch Linux + CZ a dalších webových aplikacích Arch Linux CZ. +
  • +
  • Linuxu, MacOS a Opensource (i si rozumím s Windows :-)).
  • +
  • Seberozvoji v oblasti komunikace a emoční inteligence.
  • +
  • Sportu, který mi dobíjí baterky.
  • +
  • Missing maps pro Lékaře bez hranic.
  • +
  • Mapování v OSM.
  • +
  • V osobním životě se snažím vedle komerčních aplikací poznávat a + používat Opensource.
  • +
  • To to jsou opensource aplikace, které používám vedle placených + aplikací a stojí myslím za vyzkoušení: +
  • +
  • Alternativa za OneNote od Microsoftu je aplikace Joplin
  • + +
  • Pro cloud a tvorbu dokumentů k Microsoft 365 doporučuji NextCloud
  • + +
  • Pokud potřebuji šifrovat dokumenty nebo jen s někým něco sdílet a + nechci sdílet s NextCloud nebo OneDrive použiji CryptPad
  • + +
  • Náhradu za Jiru může být Vikunja
  • + +
  • Mimo GitHub svůj kód ukládám na Gitea
  • +
  • Pro tvorbu tohoto blogu vedle VS Code používám Brackets +
  • + +
  • Jako RSS čtečku využívám minimalistickou MiniFlux
  • + +
  • Správce hesel může být Bitwarden +
  • + +
  • Internetový prohlížeč Firefox +
  • + +
  • E-mail klienta používám Thunderbird +
  • + +
  • Alternativu k sociální sítím může být MastodonElement
  • + +
  • Alternativou k Instagramu může být Pixelfed
  • +
+

+
+ +
    +
  • + +

    PHP

    + +
  • +
  • + +

    MySQL

    +
  • +
  • + +

    Linux

    +
  • +
  • + +

    Opensource

    +
  • +
+
+
+ + +
+
+
+
+
+
+
Stačí si vybrat
+
+
+
+
+
+
+ +
+
+
+

Kontakty

+

+ + +

+
+ +
+
+ + +
+
+
+ +
+

+

+
+
+ +

Telefoní číslo: +420 725 303 747

+

E-mail: Lukáš Kaňka

+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + \ No newline at end of file diff --git a/lukaskanka/.htaccess b/lukaskanka/.htaccess new file mode 100644 index 0000000..06d30c7 --- /dev/null +++ b/lukaskanka/.htaccess @@ -0,0 +1,10 @@ +RewriteEngine on +RewriteCond %{HTTP:X-Forwarded-Proto} !https +RewriteCond %{HTTP_USER_AGENT} !(BlackBerry) +RewriteCond %{HTTP_USER_AGENT} !(Windows\sNT\s5\.[12]) +RewriteCond %{HTTP_HOST} ^(www\.)?lukaskanka.cz +RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L] + +RewriteBase / +RewriteCond %{REQUEST_URI} ^(/www/|/www) +RewriteRule ^(www/)(.*)$ https://%{HTTP_HOST}/$2 [R=301,L] diff --git a/lukaskanka/.idea/.gitignore b/lukaskanka/.idea/.gitignore new file mode 100644 index 0000000..d724c2b --- /dev/null +++ b/lukaskanka/.idea/.gitignore @@ -0,0 +1,13 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/modules.xml +/contentModel.xml +/projectSettingsUpdater.xml +/.idea.NewBlog2024.iml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/lukaskanka/.idea/indexLayout.xml b/lukaskanka/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/lukaskanka/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/lukaskanka/.idea/vcs.xml b/lukaskanka/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/lukaskanka/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/lukaskanka/LICENSE b/lukaskanka/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/lukaskanka/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/lukaskanka/README.md b/lukaskanka/README.md new file mode 100644 index 0000000..e69de29 diff --git a/lukaskanka/error/403.php b/lukaskanka/error/403.php new file mode 100644 index 0000000..f1e2843 --- /dev/null +++ b/lukaskanka/error/403.php @@ -0,0 +1,22 @@ + + + + + + + 403 Error + + + + + + + + diff --git a/lukaskanka/error/404.php b/lukaskanka/error/404.php new file mode 100644 index 0000000..c23b231 --- /dev/null +++ b/lukaskanka/error/404.php @@ -0,0 +1,19 @@ + + + + + + + 404 Error + + + + + + + + diff --git a/lukaskanka/error/413.php b/lukaskanka/error/413.php new file mode 100644 index 0000000..c6bb92b --- /dev/null +++ b/lukaskanka/error/413.php @@ -0,0 +1,20 @@ + + + + + + + 413 Error + + + + + + + + diff --git a/lukaskanka/error/5xx.php b/lukaskanka/error/5xx.php new file mode 100644 index 0000000..bb706a9 --- /dev/null +++ b/lukaskanka/error/5xx.php @@ -0,0 +1,22 @@ + + + + + + + 5XX Error + + + + + + + + diff --git a/lukaskanka/img/helix(1).png b/lukaskanka/img/helix(1).png new file mode 100644 index 0000000..6cc550e Binary files /dev/null and b/lukaskanka/img/helix(1).png differ diff --git a/lukaskanka/img/helix.png b/lukaskanka/img/helix.png new file mode 100644 index 0000000..c23b231 --- /dev/null +++ b/lukaskanka/img/helix.png @@ -0,0 +1,19 @@ + + + + + + + 404 Error + + + + + + + + diff --git a/lukaskanka/img/logo_arch_linux_167.png b/lukaskanka/img/logo_arch_linux_167.png new file mode 100644 index 0000000..a84626d Binary files /dev/null and b/lukaskanka/img/logo_arch_linux_167.png differ diff --git a/lukaskanka/index.php b/lukaskanka/index.php new file mode 100644 index 0000000..f389516 --- /dev/null +++ b/lukaskanka/index.php @@ -0,0 +1,68 @@ + + + + + + + + + Kankys v Matrixu + + + + + + + + + + + + + < + +
+ + + + + +
+
Copyright © Lukáš Kaňka 2024
+ + + + diff --git a/lukaskanka/index/about/img/qrcode-paypal.png b/lukaskanka/index/about/img/qrcode-paypal.png new file mode 100644 index 0000000..e015781 Binary files /dev/null and b/lukaskanka/index/about/img/qrcode-paypal.png differ diff --git a/lukaskanka/index/about/img/sat.jpeg b/lukaskanka/index/about/img/sat.jpeg new file mode 100644 index 0000000..755b9c6 Binary files /dev/null and b/lukaskanka/index/about/img/sat.jpeg differ diff --git a/lukaskanka/index/about/index.php b/lukaskanka/index/about/index.php new file mode 100644 index 0000000..e4ae6bc --- /dev/null +++ b/lukaskanka/index/about/index.php @@ -0,0 +1,138 @@ + + + + + + + + + O mně + + + + + + + + + +
+

O mně

+ +
+ +

+ Jsem IT nadšenec s pozitivním přístupem k životu a vášní pro + technologie, ve kterých se neustále vzdělávám. Absolvoval jsem kurz + testingu a SQL v Acamaru, další kurz byl web developer u společnosti Engeto. Pracoval jsem na pozici testera ve společnosti Uniprog a nyní pracuji ve společnosti Kyndryl na projektu České Spořitelny pro platformu SMART. Můj životopis najdete pod tímto odkazem. +

+ +
+
    +
  • Ve volném čase se věnuji:
  • +
  • Svému blogu: Lukáš Bloguje.
  • +
  • Spolku Arch Linux CZ, kde jsem členem a pomáhám se správou webu: Arch Linux + CZ a dalších webových aplikacích Arch Linux CZ. +
  • +
  • Linuxu, MacOS a Opensource (i si rozumím s Windows :-)).
  • +
  • Seberozvoji v oblasti komunikace a emoční inteligence.
  • +
  • Sportu, který mi dobíjí baterky.
  • +
  • Missing maps pro Lékaře bez hranic.
  • +
  • Mapování v OSM.
  • +
+
+ + +
+
    +
  • V osobním životě se snažím vedle komerčních aplikací poznávat a + používat Opensource.
  • +
  • To to jsou opensource aplikace, které používám vedle placených + aplikací a stojí myslím za vyzkoušení: +
  • +
  • Alternativa za OneNote od Microsoftu je aplikace Joplin
  • + +
  • Pro cloud a tvorbu dokumentů k Microsoft 365 doporučuji NextCloud
  • + +
  • Pokud potřebuji šifrovat dokumenty nebo jen s někým něco sdílet a + nechci sdílet s NextCloud nebo OneDrive použiji CryptPad
  • + +
  • Náhradu za Jiru může být Vikunja
  • + +
  • Mimo GitHub svůj kód ukládám na Gitea
  • +
  • Pro tvorbu tohoto blogu vedle VS Code používám Brackets +
  • + +
  • Jako RSS čtečku využívám minimalistickou MiniFlux
  • + +
  • Správce hesel může být Bitwarden +
  • + +
  • Internetový prohlížeč Firefox +
  • + +
  • E-mail klienta používám Thunderbird +
  • + +
  • Alternativu k sociální sítím může být MastodonElement
  • + +
  • Alternativou k Instagramu může být Pixelfed
  • + +
+
+ +
+
    +
  • Kde všude mně najdete:
  • +
  • Můj profil na: Gitea
  • +
  • Můj profil na: GitHub
  • +
  • Můj profil na: LinkedIn
  • + + +
+
+
+
    +
  • Budu velmi vděčný za malý příspěvek na provoz mých projektů:
  • +
  • Pár satoshi nebo jiné krypto měny(po dohodě)
  • +
  • Nebo pomocí Lightning technologije na adresu: affableshirt47@walletofsatoshi.com +
  • +
  • či přes QR kód na Lightning:
  • +
  • Satoshi qrcode
  • +
  • Přes paypal pomocí QR kódu:
  • +
  • Paypal qrcode
  • +
  • Aktivačním kódem na aplikaci k recenzi či článku
  • +
  • Kritikou, radou nebo e-mailem pár slov potěší
  • +
  • Také se můžeme potkat na WordPress pivu v Praze, Frodentisti akcích, PHPkáři akcích nebo jen tak na + pivku + a jiné akci. +
  • +
+
+
+ + +
+ Copyright © Lukáš Kaňka 2024 +
+ +
+ + + diff --git a/lukaskanka/index/about/zivotopis/image/1702045296079.jpeg b/lukaskanka/index/about/zivotopis/image/1702045296079.jpeg new file mode 100644 index 0000000..c0b1c93 Binary files /dev/null and b/lukaskanka/index/about/zivotopis/image/1702045296079.jpeg differ diff --git a/lukaskanka/index/apollo-nvim/colors.css b/lukaskanka/index/apollo-nvim/colors.css new file mode 100644 index 0000000..110b1d7 --- /dev/null +++ b/lukaskanka/index/apollo-nvim/colors.css @@ -0,0 +1,14 @@ +:root { + --dracula-body-bg: #2a232b; + --dracula-color: #f8f8f2; + --dracula-header-bg: #2a232b; + --dracula-scrollToTopBtn-color: #9fea8a; + --dracula-links-color: #f76b00; + --dracula-nav-bg: #2a232b; + --dracula-nav-links-color: #f76b00; + --dracula-h1-color: #e54472; + --dracula-h2-color: #18f700; + --dracula-solid-bg: #2a232b; + --dracula-solid-color: #f76b00; + --dracula-footer-bg: #2a232b; +} diff --git a/lukaskanka/index/apollo-nvim/img/config.png b/lukaskanka/index/apollo-nvim/img/config.png new file mode 100644 index 0000000..325c9f2 Binary files /dev/null and b/lukaskanka/index/apollo-nvim/img/config.png differ diff --git a/lukaskanka/index/apollo-nvim/img/fzf.png b/lukaskanka/index/apollo-nvim/img/fzf.png new file mode 100644 index 0000000..3c0db79 Binary files /dev/null and b/lukaskanka/index/apollo-nvim/img/fzf.png differ diff --git a/lukaskanka/index/apollo-nvim/img/home.png b/lukaskanka/index/apollo-nvim/img/home.png new file mode 100644 index 0000000..ebe4c7c Binary files /dev/null and b/lukaskanka/index/apollo-nvim/img/home.png differ diff --git a/lukaskanka/index/apollo-nvim/img/icons8-rocket.gif b/lukaskanka/index/apollo-nvim/img/icons8-rocket.gif new file mode 100644 index 0000000..c2a91fa Binary files /dev/null and b/lukaskanka/index/apollo-nvim/img/icons8-rocket.gif differ diff --git a/lukaskanka/index/apollo-nvim/index.php b/lukaskanka/index/apollo-nvim/index.php new file mode 100644 index 0000000..7773df2 --- /dev/null +++ b/lukaskanka/index/apollo-nvim/index.php @@ -0,0 +1,193 @@ +' + + + + + + + + + + + + + + + + + + ApolloNvim + + + +
+

🚀ApolloNvim

+ + + + +
+
+ + +
+
+

Úvod:

+

+ 👉 Neovim setup pro Front-End vývoj postavený na + Coc. +

+

+ 👉 Výhody Neovim oproti klasickému IDE jsou nesporně ve svobodě + konfigurace, je tisíce možností, jak Váš Neovim může vypadat a + fungovat. Pro Vaši inspiraci a použití vznikl tento projekt 🚀 + ApolloNvim. +

+

+ 👉 Tato distribuce nefunguje jen, že kliknete na tlačítko a + nainstaluje se. Vede Vás k samostatné instalaci pomocí tohoto webu. + Cílem je pochopit, jak Neovim funguje, abyste si sami mohli vše + modifikovat, což i click-on distribucí se nenaučíte. +

+

+ 👉 Toto nastavení je primárně pro vývoj webu. Inspiroval jsem se + pluginy, které jsem využíval v VSCode a Webstorm. +

+

👉 Velký důraz je kladen na rychlost a lehkost.

+

+ 👉 🚀 ApolloNvim Distro je stále ve vývoji a postupně se na něm + pracuje. +

+

+ 👉 Pro nejlepší zážitek s 🚀 ApolloNvim Distro doporučuji používat + multiplexor + Zellij , ale není to samozřejmě + podmínkou. +

+
+
+

Přednosti:

+

+ 👉 Hlavní předností tohoto nastavení jsou podpora: Codeium alternativa + k Copilot zdarma, Prettier, AutoSave, diplňování HTML, CSS, JS a + zkratky k zakomentování a odkomentování kódu. Taky je zde několik + pluginu pro příjemnější práci v Neovim. +

+

+ 👉 S + LSP + v této instalaci využívám + Coc + pro jeho jednoduchost s minimálními zásahy do konfigurace Coc. LSP se + mi velmi osvědčilo v modálním editoru + Helix-editor + má konfigurace + Helixu. +

+

+ 👉 Ty nejlepší témata pro Neovim (ať je nemusíte hledat), je defaultně + nastavéné Dracula. +

+

+ 👉 Téma v Neovim si jednoduše změníte v command line příkazem + colorscheme a tlačítkem Tab se budete přepínat mezi jednotlivými + tématy. +

+
+
+ Homescreen + config.vim + fzf +
+
+

Plán 🚀ApolloNvim:

+

+ 👉 Do budoucna můžete očekávat tyto nové funkce a další novinky: +

+

+ 👉 Web na vlastní doméně. +

+

👉 Instalátor 🚀 ApolloNvim přes odkaz z Gitu.

+

👉 Nová vlastní uvítací obrazovka.

+

👉 Nové pluginy.

+ 👉 Návody k pluginům, jak nastavit a jak s nimi pracovat. +

+

👉 Návody k práci s Neovim.

+
+
+

Otázky a odpovědi:

+

👉 Kolik stojí 🚀 ApolloNvim? -> Nic 🚀 ApolloNvim je zdarma.

+
+
+

Kontakty:

+

+ 👉 🚀 ApolloNvim Telegram skupina +

+

+ 👉 Osobní web autora 🚀 ApolloNvim +

+

+ 👉 Gitea profil +

+

+ 👉 GitHub +

+

+ + Mastodon +

+
+ +
+

Podpora:

+

+ 👉 Pokud jakkoliv chcete podpořit nebo se podílet na obsahu a + funkčnosti 🚀 ApolloNvim, prosím budu rád když mi zde napíšete. +

+

👉 Taky můžete tento projekt podpořit pár Satoshi:

+ Satoshi +
+
+

Další projekty a odkazy:

+

+ 👉 ArchLinux CZ +

+

+ 👉 + Vyhledávač SearXNG CZ +

+

+ 👉 + EndeavourOS Linux +

+

+ 👉 i3 window manager +

+
+ + +
+ + + + +' \ No newline at end of file diff --git a/lukaskanka/index/apollo-nvim/install.php b/lukaskanka/index/apollo-nvim/install.php new file mode 100644 index 0000000..c035c25 --- /dev/null +++ b/lukaskanka/index/apollo-nvim/install.php @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + ApolloNvim Instalace + + + +
+

🚀ApolloNvim Instalace

+ + + + +
+
+
+
+

Instalace a nastavení:

+

+ + Vždy se podívej před instalací + nových pluginu, na dokumentaci k + plaginům na Githubu. Předejdeš + tím případným problémům! Pokud + si nejsi jistý postupem nebo ti + není něco jasné, tak raději se + podívej do dokumentace,napiš nám + nebo fórech najdeš odpověď. + +

+ +

+ 👉 Pokud ještě nemáte nainstalujte si + Neovim. +

+

+ 👉 Bude potřeba nainstalovat plug.vim + aby jste mohl/a instalovat rozšíření. +

+

+ 👉 Běžte na tuto + stránku + pod Installation si najděte svůj + operační systém a zkopírujte odkaz pod + ním do svého terminálu. +

+

+ 👉 Nejprve si však zálohujte své + aktuální nastavení Neovim!!! +

+

👉 Linux & Mac:

+
+

/home/user/.config/nvim/init.vim

+
+

Windows:

+
+

~\AppData\Local\nvim

+
+
+
+

Node.js:

+

+ 👉 Doporučuji mít nainstalovaný + Node.js. +

+

+ 👉 Dále si v Node.js nainstalujte + Live-server + příkazem: +

+
+

npm i live-server

+
+

+ 👉 Ve svém projektu budete moci pouštět + svůj index.html příkazem: +

+
+

npx live-server

+
+

+ 👉 Pro správnou funkčnost LSP si + doinstalujte tyto balíčky: +

+ +

+ vscode-html-langserver +

+

+ vscode-css-langserver +

+

+ typescript-language-server +

+

+ emmet-ls +

+

+ eslint +

+

+ vtailwindcss-language-server +

+

+ marksman +

+

+ markdoc-ls +

+
+
+

Neovim:

+

+ 👉 Pro instalaci 🚀 ApolloNvim Distra + stačí stáhnout pouze soubor init.vim s + tohoto + repositáře. +

+

+ 👉 Uložte ho do kořenováho adresáře + ~/.. /nvim dle tvého + OS. + Nezapomeňte na zálohu + stávajících souborů +

+

+ 👉 Neovim pustíte v terminálu příkazem + nvim. +

+

👉 Odklikejte chybová hlášení.

+

+ 👉 V Neovimu zadejte do command line + PlugIns , tím + nainstalujete všechny pluginy. + Restartujte Neovim. +

+

+ 👉 Pokud Vám některý plugin chybí, + můžete ho lehce doinstalovat nebo naopak + odinstalovat pomocí + plug.vim. Více + informací najdete na GitHubu + plug.vim + nebo velmi rád poradím viz. o nás. +

+

+ 👉 Pokud některý plugin nechcete + používat stačí v souboru + init.vim ho + zakomentovat pomocí dvojitých uvozovek + ". +

+

+ 👉 Do command line ještě zadejte Coc + příkaz pro doinstalování zbylých + pluginů: +

+
+

+ CocInstall coc-todolist + coc-tailwindcss coc-json + coc-html-css-support coc-html + coc-emmet coc-xml coc-tsserver + coc-lsp-wl coc-lit-html + coc-htmldjango coc-css + coc-markdown-preview-enhanced + coc-markdownlint +

+
+

+ 👉 A ještě jednou restartujte Neovim a + vše máte připravené. +

+

+ 👉 Tuto konfiguraci používám na Linuxu i + MacOS. Je ozkoušena i na Windows 11. +

+
+ + + +
+ + + diff --git a/lukaskanka/index/apollo-nvim/manuals.php b/lukaskanka/index/apollo-nvim/manuals.php new file mode 100644 index 0000000..a3218ad --- /dev/null +++ b/lukaskanka/index/apollo-nvim/manuals.php @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + ApolloNvim Návody + + + +
+

🚀ApolloNvim Návody

+ + + +
+
+ +
+

+ Vždy se podívej před Instalací na + Githubu, na zdroj. Předejdeš tím + případným problémům! Pokud si nejsi + jistý postupem nebo ti není něco jasné, + tak raději se podívej do + dokumntace,napiš nebo fórech najdeš + odpověď. +

+
+ +
+
+

+ Jak nainstalovat vim.plug do Neovim +

+ +

+ Nejprve si však zálohujte své aktuální + nastavení Neovim!!! +

+

Linux & Mac:

+
+

/home/user/.config/nvim/init.vim

+
+

Windows:

+
+

~\AppData\Local\nvim

+
+

+ Běžte na tuto + stránku + pod Installation si najděte svůj + operační systém a zkopírujte odkaz pod + ním do svého terminálu a pomocí Enter + nainstalujete vim.plug. +

+

Na Linuxu a macOS to bude tento příkaz:

+
+

+ sh -c 'curl -fLo + "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim + --create-dirs \ + https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' +

+
+

+ Pro Windows příkaz najdete na + odkazovaném webu výšše. +

+ + + + + + + +

+ Dále si otevřeme soubor init.vim a pokud + ho nemáme tak si ho vytvoříme zde: +

+

Linux & Mac:

+
+

/home/user/.config/nvim/init.vim

+
+

Windows:

+
+

~\AppData\Local\nvim

+
+

+ A do něj vložíme a následně uložíme + tento kód: +

+
+

+ call plug#begin(has('nvim') ? + stdpath('data') . '/plugged' : + '~/.vim/plugged') +

+
+

+ # Jsem budeš v budoucnu vkládat + pluginy. Začínající PLug a + adresa ke stažení +

+
+

call plug#end()

+
+

+ A příkazem Nvim v terminálu spustíme + Neovim. Pokud vám vyskočí chybové + hlášení jen ho odklikněte. +

+

+ Pomocí Ctrl + : se + dostanete do příkazového řádku a tam + napíšete PlugInstall +

+

+ A restartujeme Neovim. Příkazem + Ctrl + : do príkazového + řádku napíšete q a + restartujeme Neovim. +

+

+ Takto pokaždé když si přidáte do + init.vim pluginy, příkazem + PlugInstall je + nainstalujete a restartujeme Neovim. +

+

+ Zdroj na + GitHub +

+
+ +
+ ï +

+ Jak nainstalovat Codeium do Neovim +

+

+ Codeium + je alternativou k + GitHub Copilot + s tím, že pro jednotlivce je zdarma. + Codeium hodnotím velmi pozitivně a + Copilotu se vyrovná. +

+

+ Instalace pomocí plug.vim je jednoduchá, + stačí pouze upravit svůj + init.vim +

+

Vložíme do něj:

+
+

+ " Free AI codium
+ Plug 'Exafunction/codeium.vim', + { 'branch': 'main' } +

+
+

+ Výsledný init.vim bude + vypadat takto: +

+
+

+ call plug#begin(has('nvim') ? + stdpath('data') . '/plugged' : + '~/.vim/plugged')
+ + " Free AI codium
+ Plug 'Exafunction/codeium.vim', + { 'branch': 'main' }
+ call plug#end() +

+
+

+ A restartujeme Neovim. Příkazem + Ctrl + : do príkazového + řádku napíšete q a + restartujeme Neovim. +

+

+ Po restartu provedeme + PlugInstall a ještě jednou + restartujeme Neovim. +

+

+ Poslední krok bude konfigurace Codeium, + příkazem CodeiumEnable do + command line. +

+

+ Codium vás vyzve k propojení API se + serverem Codium. +

+

A vše by Vám mělo fungovat.

+

+ Zdroj na + GitHub +

+
+ + +
+ + + diff --git a/lukaskanka/index/apollo-nvim/plugins.php b/lukaskanka/index/apollo-nvim/plugins.php new file mode 100644 index 0000000..857d865 --- /dev/null +++ b/lukaskanka/index/apollo-nvim/plugins.php @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + ApolloNvim Pluginy + + + +
+

🚀ApolloNvim Pluginy

+ + + + +
+
+ + +
+ +
+

Výběr pluginu v Lite Web 🚀 ApolloNvim Distro 2024

+

+ 👉 + Autoclosetag + nástroj pro uzavírání všech typů závorek a tagů. +

+

+ 👉 + NERDTree + vytvoří ti stromový postranní panel. +

+

+ 👉 + Coc + manager pro instalování doplňků do Neovim. +

+

+ 👉 + Codeium + alternativa k GitHub Copilot, který si případně lehce také můžete + doinstalovat. +

+

+ 👉 + Startify + alternativní uvítací obrazovka s pokaždé jiným IT mottem. Nemusí + fungovat s některými terminály či NERDTree nastaveným spuštěním po + startu. +

+ 👉 + NERD Commenter + plugin pro zakomentování a odkomentování kódu. Zde ho máme nastaven + na + Ctrl + k. +

+

+ 👉 + Wakatime + služba která je schopna měřit kolik času jste trávily při kódování + na pc a i na kterém projektu. Služba se jednoduše propojí přes API. + WakaTime najdeš + zde. +

+

+ 👉 + fzf.vim + asynchronií vyhledávač souboru v projektu. Pro mnohé je toto + vyhledávaní rychlejší než klasické stromové, chce to trochu času. + Ale jak se dostane pod kůži vše ostatní Vám už přijde pomalé. +

+

+ 👉 + Auto-save + plugin pro automatické ukládání vašich souboru. +

+
+
+

Coc extensions pro front-end:

+

👉 coc-todolist

+

👉 coc-tailwindcss

+

👉 coc-json

+

👉 coc-html-css-support

+

👉 coc-html

+

👉 coc-emmet

+

👉 coc-xml

+

👉 coc-tsserver

+

👉 coc-lsp-wl

+

👉 coc-lit-html

+

👉 coc-htmldjango

+

👉 coc-css

+

👉 coc-markdown-preview-enhanced

+

👉 coc-markdownlint

+

👉 coc-eslint

+
+ + +
+ + + + + diff --git a/lukaskanka/index/apollo-nvim/sablona.txt b/lukaskanka/index/apollo-nvim/sablona.txt new file mode 100644 index 0000000..7ff2adb --- /dev/null +++ b/lukaskanka/index/apollo-nvim/sablona.txt @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + ApolloNvim + + + +
+

🚀ApolloNvim

+ + + + +
+
+ + +
+ + + +
+ + + + diff --git a/lukaskanka/index/apollo-nvim/script.js b/lukaskanka/index/apollo-nvim/script.js new file mode 100644 index 0000000..a7ed4a0 --- /dev/null +++ b/lukaskanka/index/apollo-nvim/script.js @@ -0,0 +1,149 @@ +//Navbar menu +const menuIcon = document.querySelector(".menu-icon"); +const menuList = document.querySelector("nav"); +const hamburgerIcon = document.querySelector(".fa-solid"); + +menuIcon.addEventListener("click", () => { + if (hamburgerIcon.classList[1] === "fa-bars") { + hamburgerIcon.classList.add("fa-xmark"); + hamburgerIcon.classList.remove("fa-bars"); + menuList.style.display = "block"; + } else { + hamburgerIcon.classList.add("fa-bars"); + hamburgerIcon.classList.remove("fa-xmark"); + menuList.style.display = "none"; + } +}); + +// Dark / Light Mode +/* +const body = document.querySelector("body"); +const head = document.querySelector("header"); +const links = document.querySelectorAll("a"); +const nav = document.querySelector(".navigation"); +const h1 = document.querySelector("h1"); +const nadpish2 = document.querySelectorAll("h2"); +const p = document.querySelector("p"); +const solid = document.querySelector(".fa-solid"); +const solid1 = document.querySelector(".menu-icon"); +const footer = document.querySelector("footer"); +const gotop = document.querySelector("#scrollToTopBtn"); +const theme = document.querySelector("#toggleButton"); +const box = document.querySelectorAll(".code-box"); +let isDraculaMode = false; + +// Funkce pro nastavení stylů pro Dracula mód +function setDraculaStyles() { + body.style.backgroundColor = "#2a232b"; + body.style.color = "#f8f8f2"; + head.style.backgroundColor = "#2a232b"; + theme.style.color = "#e7efa7"; + gotop.style.color = "#e7efa7"; + links.forEach((a) => { + a.style.color = "#f76b00"; + }); + nav.style.backgroundColor = "#2a232b"; + h1.style.color = "#e54472"; + nadpish2.forEach((h2) => { + h2.style.color = "#18f700"; + }); + solid.style.backgroundColor = "#2a232b"; + solid.style.color = "#f76b00"; + solid1.style.backgroundColor = "#2a232b"; + footer.style.backgroundColor = "#2a232b"; + //gotop.style.backgroundColor = "#18f700"; + //theme.style.backgroundColor = "#18f700"; +} + +// Funkce pro nastavení stylů pro Light mód; +function setLightStyles() { + body.style.backgroundColor = "#e7efa7"; + body.style.color = "#282a36"; + theme.style.color = "#2a232b"; +gotop.style.color = "#2a232b"; + head.style.backgroundColor = "#e7efa7"; + nav.style.backgroundColor = "#e7efa7"; + solid.style.backgroundColor = "#e7efa7"; + solid1.style.backgroundColor = "#e7efa7"; + footer.style.backgroundColor = "#e7efa7"; + nadpish2.forEach((h2) => { + h2.style.color = "#c627d8"; + }); + //gotop.style.backgroundColor = "#a7e6ef"; + //theme.style.backgroundColor = "#a7e6ef"; + box.forEach((p) => { + p.style.color = "white"; + }); +} + +// Funkce pro přepnutí módu +function toggleMode() { + if (isDraculaMode) { + // Pokud je momentálně v Dracula modu, přepnout na Light mód + setLightStyles(); + isDraculaMode = false; + } else { + // Pokud je momentálně v Light modu, přepnout na Dracula mód + setDraculaStyles(); + isDraculaMode = true; + } +} + +// Funkce na změnu stylů +document.getElementById("toggleButton").addEventListener("click", toggleMode); + +// Nastavení - výchozí styl na Dark +setDraculaStyles(); +isDraculaMode = true; +*/ + +// Photo Gallery -> section (zoom) +const image1 = document.querySelector(".picture"); + +image1.addEventListener("mouseenter", () => { + image1.style.transform = "scale(2.2)"; +}); + +image1.addEventListener("mouseleave", () => { + image1.style.transform = "scale(1)"; +}); + +const image2 = document.querySelector(".picture1"); + +image2.addEventListener("mouseenter", () => { + image2.style.transform = "scale(2.2)"; +}); + +image2.addEventListener("mouseleave", () => { + image2.style.transform = "scale(1)"; +}); + +const image3 = document.querySelector(".picture2"); + +image3.addEventListener("mouseenter", () => { + image3.style.transform = "scale(2.2)"; +}); + +image3.addEventListener("mouseleave", () => { + image3.style.transform = "scale(1)"; +}); + +// Tlačítko go to top +// Zobrazení tlačítka od rolovaní části stránky (víc logické než až na konci) +window.onscroll = function () { + scrollFunction(); +}; + +function scrollFunction() { + if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) { + document.getElementById("scrollToTopBtn").style.display = "block"; + } else { + document.getElementById("scrollToTopBtn").style.display = "none"; + } +} + +// Posunout nahoru, když uživatel klikne na tlačítko +function scrollToTop() { + document.body.scrollTop = 0; // Pro Safari + document.documentElement.scrollTop = 0; // Pro ostatní prohlížeče +} diff --git a/lukaskanka/index/apollo-nvim/style.css b/lukaskanka/index/apollo-nvim/style.css new file mode 100644 index 0000000..78b5441 --- /dev/null +++ b/lukaskanka/index/apollo-nvim/style.css @@ -0,0 +1,239 @@ +@import url("https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap"); +@import url("colors.css"); + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} +body { + max-width: 1000px; + margin: 0 auto; + font-family: "Ubuntu", sans-serif; + background-color: var(--dracula-body-bg); + color: var(--dracula-color); +} + +/*Header */ + +h1 { + padding-left: 8px; +} + +header { + margin-top: 25px; + display: flex; + align-items: center; + height: 70px; + flex-direction: row; + /*position: fixed;*/ + background-color: var(--dracula-header-bg); +} + +a { + color: var(--dracula-links-color); +} +.title { + padding-top: 25px; +} + +.title { + flex-grow: 1; + display: flex; +} + +/* navigation */ +nav { + margin-right: 30px; +} + +nav li { + display: inline-block; + list-style-type: none; + margin-right: 20px; +} + +nav li a { + text-decoration: none; + color: var(--dracula-nav-links-color); +} + +.navigation { + background-color: var(--dracula-nav-bg); +} + +h1 { + color: var(--dracula-h1-color); +} + +h2 { + color: var(--dracula-h2-color); +} + +.fa-solid { + background-color: var(--dracula-solid-bg); + color: var(--dracula-solid-color); +} +/* navigation icons */ + +.menu-icon { + display: none; + margin-right: 30px; +} + +/*Header small display*/ +@media (max-width: 600px) { + body { + padding: 10px; + } + + header { + position: relative; + } + header nav { + position: absolute; + top: 70px; + width: 100%; + display: none; + } + + .menu-icon { + display: block; + font-size: 23px; + } + + header nav li { + display: block !important; + text-align: center; + margin-top: 10px; + margin-bottom: 10px; + } +} + +/* Sekce */ + +.content { + text-align: center; +} + +#welcome { + padding-top: 50px; + padding-bottom: 50px; +} + +#install { + padding-top: 50px; +} + +#node { + padding-top: 50px; + padding-bottom: 50px; +} + +#apollo { + padding-top: 50px; + padding-bottom: 50px; +} + +#coc { + padding-top: 50px; + padding-bottom: 50px; +} + +#contact { + padding-top: 50px; + padding-bottom: 50px; +} + +#plugin { + padding-top: 50px; +} + +#other { + padding-top: 50px; +} + + +/*Code box*/ +.code-box { + background-color: #353535; + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; + font-family: monospace; + max-width: 500px; + margin: 0 auto; + margin-top: 10px; + margin-bottom: 10px; +} + +/*Picture settings*/ + +.sat { + width: 175px; + height: 175px; +} + +.photo { + text-align: center; + padding-top: 50px; +} +.photo img { + width: 300px; + height: 200px; + margin: 10px; + transition: all 0.5s linear; +} +/*footer pevná pozice*/ + +footer { + bottom: 0; + margin-bottom: 10px; + margin-left: 25px; + margin-top: 20px; +} + +footer a { + text-decoration: none; +} + +#scrollToTopBtn { + display: none; + position: fixed; + bottom: 20px; + right: 20px; + /*butoon přes obsah*/ + z-index: 99; + outline: none; + cursor: pointer; + padding: 15px; + border-radius: 50%; + background-color: transparent; + color: var(--dracula-scrollToTopBtn-color); +} + +/* Styl pro ikonu */ +#scrollToTopBtn i { + font-size: 34px; +} + + +/*Instalace*/ + +.list ul { +list-style-type: none; +} + +.list { + padding-top: 50px; + padding-bottom: 50px; +} + +#plug-vim { + padding-top: 50px; + padding-bottom: 50px; +} + +.h2-install { + padding-bottom: 15px; +} diff --git a/lukaskanka/index/games/fractal/index.php b/lukaskanka/index/games/fractal/index.php new file mode 100644 index 0000000..9a94f69 --- /dev/null +++ b/lukaskanka/index/games/fractal/index.php @@ -0,0 +1,56 @@ + + + + + + + Fractal + + + + + + + + +
+ +

+ Your browser doesn't seem to support the <canvas> tag. Try + Firefox. +

+
+
+ + Reset + Capture
+
+
+ + + + diff --git a/lukaskanka/index/games/fractal/script/starter-template.js b/lukaskanka/index/games/fractal/script/starter-template.js new file mode 100644 index 0000000..1c740d9 --- /dev/null +++ b/lukaskanka/index/games/fractal/script/starter-template.js @@ -0,0 +1,12 @@ +function saveCanvas() { + saveCanvasButton.download = "image.png"; + saveCanvasButton.href = canvas + .toDataURL("image/png") + .replace("image/png", "image/octet-stream"); +} + +function goFullScreen() { + if (canvas.requestFullScreen) canvas.requestFullScreen(); + else if (canvas.webkitRequestFullScreen) canvas.webkitRequestFullScreen(); + else if (canvas.mozRequestFullScreen) canvas.mozRequestFullScreen(); +} diff --git a/lukaskanka/index/games/fractal/script/xaos.js b/lukaskanka/index/games/fractal/script/xaos.js new file mode 100644 index 0000000..b5135f6 --- /dev/null +++ b/lukaskanka/index/games/fractal/script/xaos.js @@ -0,0 +1,1518 @@ +/* + * XaoS.js + * https://github.com/jblang/XaoS.js + * + * Copyright (C)2011 John B. Langston III + * Copyright (C)2001, 2010 Andrea Medeghini + * Copyright (C)1996, 1997 Jan Hubicka and Thomas Marsh + * + * Based on code from XaoS by Jan Hubicka (http://xaos.sf.net) + * and from JAME by Andrea Medeghini (http://www.fractalwalk.net) + * + * This file is part of XaoS.js. + * + * XaoS.js is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * XaoS.js is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XaoS.js. If not, see . + * + */ +var xaos = xaos || {}; + +xaos.zoom = (function () { + "use strict"; + + const USE_XAOS = true; // Whether to use zooming or recalculate every frame + const USE_SYMMETRY = true; // Whether to use symmetry when possible + const USE_SOLIDGUESS = true; // Whether to use solid guessing to avoid calculations + const RANGES = 2; // Number of ranges to use for sizing approximation data + const RANGE = 4; // Maximum distance to use for approximation + const MASK = 0x7; // Mask value for maximum potential source lines + const DSIZE = RANGES + 1; // Shift value for target lines + const FPMUL = 64; // Multiplication factor for fixed-point representation + const FPRANGE = FPMUL * RANGE; // Fixed point range of approximation + const MAX_PRICE = Number.MAX_VALUE; // Maximum price of uninitialized approximation + const NEW_PRICE = FPRANGE * FPRANGE; // Price of calculating a new line + const GUESS_RANGE = 4; // Range to use for solid guessing + + /** A price entry in the approximation table + * @constructor + */ + function Price() { + this.previous = null; // Previous price calculated for the same line + this.index = 0; // Index of the source for this approximation (-1 means new calculation) + this.price = MAX_PRICE; // Price calculated for this line + } + + /** A group of pixels to be moved + * @constructor + */ + function Move() { + this.length = 0; // number of pixels to move + this.from = 0; // starting offset of pixel source + this.to = 0; // starting offset of pixel destination + } + + /** A single row or column of pixels in the image + * @constructor + */ + function Line() { + this.recalculate = false; // whether to recalculate this line + this.dirty = false; // whether this line needs to be redrawn + this.isRow = false; // whether this is a row (true) or column (false) + this.index = 0; // index of row or column within the image + this.symIndex = 0; // index of pixels to use for symmetry + this.symTo = 0; // position of pixels this is symmetrical to + this.symRef = 0; // position of pixels referring to this one + this.oldPosition = 0.0; // line's old position in the fractal's complex plane + this.newPosition = 0.0; // line's new position in the fractal's complex plane + this.priority = 0.0; // calculation priority for this row/column + } + + /** An image derived from an HTML5 canvas + * @param canvas - the canvas used to display the image + * @constructor + */ + function CanvasImage(canvas) { + let width = canvas.clientWidth; + let height = canvas.clientHeight; + if (canvas.width !== width || canvas.height !== height) { + canvas.width = width; + canvas.height = height; + } else { + ctx.clearRect(0, 0, width, height); + } + + this.canvas = canvas; + this.context = canvas.getContext("2d"); + this.width = canvas.width; + this.height = canvas.height; + this.newImageData = this.context.createImageData(this.width, this.height); + this.oldImageData = this.context.createImageData(this.width, this.height); + this.newBuffer = new Uint32Array(this.newImageData.data.buffer); + this.oldBuffer = new Uint32Array(this.oldImageData.data.buffer); + } + + /** Swap new and old buffers */ + CanvasImage.prototype.swapBuffers = function () { + var tmp = this.oldBuffer; + this.oldBuffer = this.newBuffer; + this.newBuffer = tmp; + tmp = this.oldImageData; + this.newImageData = this.oldImageData; + this.oldImageData = tmp; + }; + + /** Draw the current image */ + CanvasImage.prototype.paint = function () { + this.context.putImageData(this.newImageData, 0, 0); + }; + + /** Utility function to make an array of the specified size + * with the specified initial value. It will do the right thing + * to create unique items, whether you pass in a prototype, a + * constructor, or a primitive. + * @param {number} size - the size of the array. + * @param initial - the initial value for each entry. + */ + function makeArray(size, initial) { + var i, + data = []; + for (i = 0; i < size; i++) { + if (typeof initial === "object") { + // prototype object + data[i] = Object.create(initial); + } else if (typeof initial === "function") { + // constructor + data[i] = new initial(); + } else { + // primitive + data[i] = initial; + } + } + return data; + } + + /** Container for all zoom context data for a particular canvas. + * + * @param image {CanvasImage} Image on which to draw the fractal. + * @param fractal {FractalContext} Fractal parameters. + * @constructor + */ + function ZoomContext(image, fractal) { + var size = Math.max(image.width, image.height); + this.image = image; // the image to draw the fractal on + this.fractal = fractal; // the fractal formula used for the image + this.columns = makeArray(image.width, Line); // columns in the fractal image + this.rows = makeArray(image.height, Line); // rows in the fractal image + this.sourcePos = makeArray(size + 1, 0); // fixed-point positions for source lines + this.oldBest = makeArray(size, null); // best prices for previous line + this.newBest = makeArray(size, null); // best prices for current line + this.calcPrices = makeArray(size, Price); // prices for calculating new lines + this.movePrices = makeArray(size << DSIZE, Price); // prices for approximating new lines from exsiting ones + this.moveTable = makeArray(image.width + 1, Move); // table of pixels to be moved + this.fillTable = makeArray(image.width + 1, Move); // table of pixels to be filled + this.queue = makeArray(image.width + image.height, null); // queue of lines to calculate + this.queueLength = 0; // length of the calculation queue + this.startTime = 0; // time that the current frame was started + this.minFPS = 60; // target FPS to maintain + this.fudgeFactor = 0; // fudge factor used to achieve target FPS + this.incomplete = false; // flag indicates incomplete calculation + this.zooming = false; // flag indicates image is currently zooming + } + + /** Swaps the old and new best prices in the this container. */ + ZoomContext.prototype.swapBest = function () { + var tmpBest = this.oldBest; + this.oldBest = this.newBest; + this.newBest = tmpBest; + }; + + /** Convert fractal viewport from radius and center to x and y start to end ranges */ + ZoomContext.prototype.convertArea = function () { + var radius = this.fractal.region.radius; + var center = this.fractal.region.center; + var aspect = this.image.width / this.image.height; + var size = Math.max(radius.x, radius.y * aspect); + return { + begin: { + x: center.x - size / 2, + y: (center.y - size / 2) / aspect, + }, + end: { + x: center.x + size / 2, + y: (center.y + size / 2) / aspect, + }, + }; + }; + + /** Resets line of pixels for fresh calculation + * + * @param line - row or column of pixels + * @param begin - starting fractal cooridnate + * @param end - ending coordinate + * @param isRow - whether this is a row or column + * @returns {number} + */ + ZoomContext.prototype.initialize = function (lines, begin, end, isRow) { + var i; + var p; + var step = (end - begin) / lines.length; + var line = null; + + for (i = 0, p = begin; i < lines.length; i++, p += step) { + line = lines[i]; + line.recalculate = true; + line.dirty = true; + line.isRow = isRow; + line.index = i; + line.oldPosition = p; + line.newPosition = p; + line.symIndex = i; + line.symTo = -1; + line.symRef = -1; + } + return step; + }; + + /** Calculate price of approximating one line from another + * + * @param p1 - position of first line + * @param p2 - position of second line + * @returns {number} - price of approximation + */ + function calcPrice(p1, p2) { + return (p1 - p2) * (p1 - p2); + } + + /** Calculate fixed-point representation of each line's old position + * @param lines - lines to use for calculation + * @param begin - beginning of floating point range + * @param end - end of floating point range + */ + ZoomContext.prototype.calcFixedpoint = function (lines, begin, end) { + var tofix = (lines.length * FPMUL) / (end - begin); + var i; + this.sourcePos[lines.length] = Number.MAX_VALUE; + for (i = lines.length - 1; i >= 0; i--) { + this.sourcePos[i] = ((lines[i].oldPosition - begin) * tofix) | 0; + if (this.sourcePos[i] > this.sourcePos[i + 1]) { + this.sourcePos[i] = this.sourcePos[i + 1]; + } + } + }; + + /** Choose the best approximation for lines based on previous frame + * + * @param lines - relocation table for rows or columns + * @param begin - beginning coordinate (x or y) + * @param end - ending coordinate (x or y) + * @param newPosition - array of newPosition coordinates on the complex plane + * @returns {number} + */ + ZoomContext.prototype.approximate = function (lines, begin, end) { + var previous = null; // pointer to previous approximation + var best = null; // pointer to best approximation + var line = null; // pointer to current line + var price = 0; // price of current approximation + var dest; // index of the current destination line + var idealPos = 0; // ideal position for the current destination + var maxPos = 0; // maximum valid source position of the current destination + var source = 0; // index of current source line + var prevBegin = 0; // index of first potential source for current destination + var prevEnd = 0; // index of last potential source for current destination + var currBegin = 0; // index of first potential source for next destination + var flag = 0; + var size = lines.length; + var step = (end - begin) / size; + var sourcePos = this.sourcePos; + + // Calculate fixed-point positions of all source lines + this.calcFixedpoint(lines, begin, end); + + for (dest = 0, idealPos = 0; dest < size; dest++, idealPos += FPMUL) { + this.swapBest(); + maxPos = idealPos - FPRANGE; + if (maxPos < -FPMUL) { + maxPos = -FPMUL; + } + source = prevBegin; + while (sourcePos[source] < maxPos) { + source++; + } + currBegin = source; + maxPos = idealPos + FPRANGE; + + // Find the previous approximation + if (prevBegin !== prevEnd && source > prevBegin) { + // Previous line had approximations; use them + if (source < prevEnd) { + previous = this.oldBest[source - 1]; + } else { + previous = this.oldBest[prevEnd - 1]; + } + price = previous.price; + } else if (dest > 0) { + // Previous line had no approximations + // Use the price of calculating the previous line + previous = this.calcPrices[dest - 1]; + price = previous.price; + } else { + // We're on the first line; no previous prices exists + previous = null; + price = 0; + } + + // Add the price for calculating this line + price += NEW_PRICE; + best = this.calcPrices[dest]; + best.price = price; + best.index = -1; + best.previous = previous; + + // Try all possible approximations for this line and calculate the best one + if (prevBegin !== prevEnd) { + if (source === prevBegin) { + // We're on the first line so there is no previous line + if (sourcePos[source] !== sourcePos[source + 1]) { + previous = this.calcPrices[dest - 1]; + price = previous.price + calcPrice(sourcePos[source], idealPos); + if (price < best.price) { + best = this.movePrices[(source << DSIZE) + (dest & MASK)]; + best.price = price; + best.index = source; + best.previous = previous; + } + } + this.newBest[source++] = best; + } + previous = null; + + // Potential sources for the previous and current line overlap within + // this range, so we have to calculate every possibility and find the best + while (source < prevEnd) { + if (sourcePos[source] !== sourcePos[source + 1]) { + previous = this.oldBest[source - 1]; + price = previous.price + NEW_PRICE; + if (price < best.price) { + best = this.movePrices[((source - 1) << DSIZE) + (dest & MASK)]; + best.price = price; + best.index = -1; + best.previous = previous; + this.newBest[source - 1] = best; + } + price = previous.price + calcPrice(sourcePos[source], idealPos); + if (price < best.price) { + best = this.movePrices[(source << DSIZE) + (dest & MASK)]; + best.price = price; + best.index = source; + best.previous = previous; + } else if (sourcePos[source] > idealPos) { + this.newBest[source++] = best; + break; + } + } + this.newBest[source++] = best; + } + + // We are past the overlapping area + if (source > prevBegin) { + previous = this.oldBest[source - 1]; + } else { + previous = this.calcPrices[dest - 1]; + } + price = previous.price + NEW_PRICE; + if (price < best.price && source > currBegin) { + best = this.movePrices[((source - 1) << DSIZE) + (dest & MASK)]; + best.price = price; + best.index = -1; + best.previous = previous; + this.newBest[source - 1] = best; + } + while (sourcePos[source] < maxPos) { + if (sourcePos[source] !== sourcePos[source + 1]) { + price = previous.price + calcPrice(sourcePos[source], idealPos); + if (price < best.price) { + best = this.movePrices[(source << DSIZE) + (dest & MASK)]; + best.price = price; + best.index = source; + best.previous = previous; + } else if (sourcePos[source] > idealPos) { + break; + } + } + this.newBest[source++] = best; + } + while (sourcePos[source] < maxPos) { + this.newBest[source++] = best; + } + } else if (sourcePos[source] < maxPos) { + if (dest > 0) { + previous = this.calcPrices[dest - 1]; + price = previous.price; + } else { + previous = null; + price = 0; + } + while (sourcePos[source] < maxPos) { + if (sourcePos[source] !== sourcePos[source + 1]) { + price += calcPrice(sourcePos[source], idealPos); + if (price < best.price) { + best = this.movePrices[(source << DSIZE) + (dest & MASK)]; + best.price = price; + best.index = source; + best.previous = previous; + } else if (sourcePos[source] > idealPos) { + break; + } + } + this.newBest[source++] = best; + } + while (sourcePos[source] < maxPos) { + this.newBest[source++] = best; + } + } + prevBegin = currBegin; + currBegin = prevEnd; + prevEnd = source; + } + if (begin > lines[0].oldPosition && end < lines[size - 1].oldPosition) { + flag = 1; + } + if (sourcePos[0] > 0 && sourcePos[size - 1] < size * FPMUL) { + flag = 2; + } + for (dest = size - 1; dest >= 0; dest--) { + line = lines[dest]; + line.symTo = -1; + line.symRef = -1; + if (best.index < 0) { + line.recalculate = true; + line.dirty = true; + line.symIndex = line.index; + } else { + line.symIndex = best.index; + line.newPosition = lines[best.index].oldPosition; + line.recalculate = false; + line.dirty = false; + } + best = best.previous; + } + newPositions(lines, begin, end, step, flag); + return step; + }; + + /** Choose new positions for lines based on calculated prices + * + * @param lines + * @param size + * @param begin1 + * @param end1 + * @param step + * @param newPosition + * @param flag + */ + function newPositions(lines, begin1, end1, step, flag) { + var delta = 0; + var size = lines.length; + var begin = 0; + var end = 0; + var s = -1; + var e = -1; + if (begin1 > end1) { + begin1 = end1; + } + while (s < size - 1) { + e = s + 1; + if (lines[e].recalculate) { + while (e < size) { + if (!lines[e].recalculate) { + break; + } + e++; + } + if (e < size) { + end = lines[e].newPosition; + } else { + end = end1; + } + if (s < 0) { + begin = begin1; + } else { + begin = lines[s].newPosition; + } + if (e === size && begin > end) { + end = begin; + } + if (e - s === 2) { + delta = (end - begin) * 0.5; + } else { + delta = (end - begin) / (e - s); + } + switch (flag) { + case 1: + for (s++; s < e; s++) { + begin += delta; + lines[s].newPosition = begin; + lines[s].priority = + 1 / (1 + Math.abs(lines[s].oldPosition - begin) * step); + } + break; + case 2: + for (s++; s < e; s++) { + begin += delta; + lines[s].newPosition = begin; + lines[s].priority = Math.abs(lines[s].oldPosition - begin) * step; + } + break; + default: + for (s++; s < e; s++) { + begin += delta; + lines[s].newPosition = begin; + lines[s].priority = 1.0; + } + break; + } + } + s = e; + } + } + + /** Populate symmetry data into relocation table + * + * @param lines + * @param symi + * @param symPosition + * @param step + */ + function prepareSymmetry(lines, symi, symPosition, step) { + var i; + var j = 0; + var tmp; + var abs; + var distance; + var newPosition; + var size = lines.length; + var max = size - RANGE - 1; + var min = RANGE; + var istart = 0; + var line = null; + var otherLine = null; + var symj = 2 * symi - size; + symPosition *= 2; + if (symj < 0) { + symj = 0; + } + distance = step * RANGE; + for (i = symj; i < symi; i++) { + line = lines[i]; + if (line.symTo !== -1) { + continue; + } + newPosition = line.newPosition; + line.symTo = 2 * symi - i; + if (line.symTo > max) { + line.symTo = max; + } + j = line.symTo - istart > RANGE ? -RANGE : -line.symTo + istart; + if (line.recalculate) { + while (j < RANGE && line.symTo + j < size - 1) { + tmp = symPosition - lines[line.symTo + j].newPosition; + abs = Math.abs(tmp - newPosition); + if (abs < distance) { + if ( + (i === 0 || tmp > lines[i - 1].newPosition) && + tmp < lines[i + 1].newPosition + ) { + distance = abs; + min = j; + } + } else if (tmp < newPosition) { + break; + } + j++; + } + } else { + while (j < RANGE && line.symTo + j < size - 1) { + if (line.recalculate) { + tmp = symPosition - lines[line.symTo + j].newPosition; + abs = Math.abs(tmp - newPosition); + if (abs < distance) { + if ( + (i === 0 || tmp > lines[i - 1].newPosition) && + tmp < lines[i + 1].newPosition + ) { + distance = abs; + min = j; + } + } else if (tmp < newPosition) { + break; + } + } + j++; + } + } + line.symTo += min; + otherLine = lines[line.symTo]; + if ( + min === RANGE || + line.symTo <= symi || + otherLine.symTo !== -1 || + otherLine.symRef !== -1 + ) { + line.symTo = -1; + continue; + } + if (!line.recalculate) { + line.symTo = -1; + if (otherLine.symTo !== -1 || !otherLine.recalculate) { + continue; + } + otherLine.symIndex = line.symIndex; + otherLine.symTo = i; + istart = line.symTo - 1; + otherLine.recalculate = false; + otherLine.dirty = true; + line.symRef = line.symTo; + otherLine.newPosition = symPosition - line.newPosition; + } else { + if (otherLine.symTo !== -1) { + line.symTo = -1; + continue; + } + line.symIndex = otherLine.symIndex; + istart = line.symTo - 1; + line.recalculate = false; + line.dirty = true; + otherLine.symRef = i; + line.newPosition = symPosition - otherLine.newPosition; + } + } + } + + /** Optimized array copy using Duff's Device. + * + * @param from {Array} source array + * @param fromOffset {number} offset into source array + * @param to {Array} idealPos array + * @param toOffset {number} offset into idealPos array + * @param length {number} elements to copy + */ + function arrayCopy(from, fromOffset, to, toOffset, length) { + var n = length % 8; + while (n--) { + to[toOffset++] = from[fromOffset++]; + } + n = (length / 8) | 0; + while (n--) { + to[toOffset++] = from[fromOffset++]; + to[toOffset++] = from[fromOffset++]; + to[toOffset++] = from[fromOffset++]; + to[toOffset++] = from[fromOffset++]; + to[toOffset++] = from[fromOffset++]; + to[toOffset++] = from[fromOffset++]; + to[toOffset++] = from[fromOffset++]; + to[toOffset++] = from[fromOffset++]; + } + } + + /** Apply previously calculated symmetry to image */ + ZoomContext.prototype.doSymmetry = function () { + var from_offset = 0; + var to_offset = 0; + var i; + var j = 0; + var buffer = this.image.newBuffer; + var bufferWidth = this.image.width; + for (i = 0; i < this.rows.length; i++) { + if (this.rows[i].symTo >= 0 && !this.rows[this.rows[i].symTo].dirty) { + from_offset = this.rows[i].symTo * bufferWidth; + arrayCopy(buffer, from_offset, buffer, to_offset, bufferWidth); + this.rows[i].dirty = false; + } + to_offset += bufferWidth; + } + for (i = 0; i < this.columns.length; i++) { + if ( + this.columns[i].symTo >= 0 && + !this.columns[this.columns[i].symTo].dirty + ) { + to_offset = i; + from_offset = this.columns[i].symTo; + for (j = 0; j < this.rows.length; j++) { + buffer[to_offset] = buffer[from_offset]; + to_offset += bufferWidth; + from_offset += bufferWidth; + } + this.columns[i].dirty = false; + } + } + }; + + /** Build an optimized move table based on relocation table */ + ZoomContext.prototype.prepareMove = function () { + var move = null; + var i = 0; + var j = 0; + var s = 0; + while (i < this.columns.length) { + if (!this.columns[i].dirty) { + move = this.moveTable[s]; + move.to = i; + move.length = 1; + move.from = this.columns[i].symIndex; + for (j = i + 1; j < this.columns.length; j++) { + if ( + this.columns[j].dirty || + j - this.columns[j].symIndex !== move.to - move.from + ) { + break; + } + move.length++; + } + i = j; + s++; + } else { + i++; + } + } + move = this.moveTable[s]; + move.length = 0; + }; + + /** Execute moves defined in move table */ + ZoomContext.prototype.doMove = function () { + var move = null; + var newOffset = 0; + var oldOffset = 0; + var from = 0; + var to = 0; + var i; + var s = 0; + var length = 0; + var newBuffer = this.image.newBuffer; + var oldBuffer = this.image.oldBuffer; + var bufferWidth = this.image.width; + for (i = 0; i < this.rows.length; i++) { + if (!this.rows[i].dirty) { + s = 0; + oldOffset = this.rows[i].symIndex * bufferWidth; + while ((move = this.moveTable[s]).length > 0) { + from = oldOffset + move.from; + to = newOffset + move.to; + length = move.length; + arrayCopy(oldBuffer, from, newBuffer, to, length); + s++; + } + } + newOffset += bufferWidth; + } + }; + + /** Shortcut for prepare and execute move */ + ZoomContext.prototype.movePixels = function () { + this.prepareMove(); + this.doMove(); + }; + + /** Prepare fill table based on relocation table */ + ZoomContext.prototype.prepareFill = function () { + var fill = null; + var i; + var j = 0; + var k = 0; + var s = 0; + var n = 0; + for (i = 0; i < this.columns.length; i++) { + if (this.columns[i].dirty) { + j = i - 1; + for ( + k = i + 1; + k < this.columns.length && this.columns[k].dirty; + k++ + ) {} + while (i < this.columns.length && this.columns[i].dirty) { + if ( + k < this.columns.length && + (j < i || + this.columns[i].newPosition - this.columns[j].newPosition > + this.columns[k].newPosition - this.columns[i].newPosition) + ) { + j = k; + } else if (j < 0) { + break; + } + n = k - i; + fill = this.fillTable[s]; + fill.length = n; + fill.from = j; + fill.to = i; + while (n > 0) { + this.columns[i].newPosition = this.columns[j].newPosition; + this.columns[i].dirty = false; + n--; + i++; + } + s++; + } + } + } + fill = this.fillTable[s]; + fill.length = 0; + }; + + /** Apply fill table */ + ZoomContext.prototype.doFill = function () { + var fill = null; + var from_offset = 0; + var to_offset = 0; + var from = 0; + var to = 0; + var i; + var j = 0; + var k = 0; + var t = 0; + var s = 0; + var d = 0; + var buffer = this.image.newBuffer; + var bufferWidth = this.image.width; + for (i = 0; i < this.rows.length; i++) { + if (this.rows[i].dirty) { + j = i - 1; + for (k = i + 1; k < this.rows.length && this.rows[k].dirty; k++) {} + while (i < this.rows.length && this.rows[i].dirty) { + if ( + k < this.rows.length && + (j < i || + this.rows[i].newPosition - this.rows[j].newPosition > + this.rows[k].newPosition - this.rows[i].newPosition) + ) { + j = k; + } else if (j < 0) { + break; + } + to_offset = i * bufferWidth; + from_offset = j * bufferWidth; + if (!this.rows[j].dirty) { + s = 0; + while ((fill = this.fillTable[s]).length > 0) { + from = from_offset + fill.from; + to = from_offset + fill.to; + for (t = 0; t < fill.length; t++) { + d = to + t; + buffer[d] = buffer[from]; + } + s++; + } + } + arrayCopy(buffer, from_offset, buffer, to_offset, bufferWidth); + this.rows[i].newPosition = this.rows[j].newPosition; + this.rows[i].dirty = true; + i++; + } + } else { + s = 0; + from_offset = i * bufferWidth; + while ((fill = this.fillTable[s]).length > 0) { + from = from_offset + fill.from; + to = from_offset + fill.to; + for (t = 0; t < fill.length; t++) { + d = to + t; + buffer[d] = buffer[from]; + } + s++; + } + this.rows[i].dirty = true; + } + } + }; + + /** Shortcut to prepare and apply fill table */ + ZoomContext.prototype.fill = function () { + this.prepareFill(); + this.doFill(); + }; + + /** Render line using solid guessing + * + * @param row + */ + ZoomContext.prototype.renderRow = function (row) { + var buffer = this.image.newBuffer; + var bufferWidth = this.image.width; + var newPosition = row.newPosition; + var r = row.index; + var offset = r * bufferWidth; + var i; + var j; + var k; + var n; + var distl; + var distr; + var distu; + var distd; + var offsetu; + var offsetd; + var offsetl; + var offsetul; + var offsetur; + var offsetdl; + var offsetdr; + var rend = r - GUESS_RANGE; + var length; + var current; + if (rend < 0) { + rend = 0; + } + for (i = r - 1; i >= rend && this.rows[i].dirty; i--) {} + distu = r - i; + rend = r + GUESS_RANGE; + if (rend >= this.rows.length) { + rend = this.rows.length - 1; + } + for (j = r + 1; j < rend && this.rows[j].dirty; j++) {} + distd = j - r; + if ( + !USE_SOLIDGUESS || + i < 0 || + j >= this.rows.length || + this.rows[i].dirty || + this.rows[j].dirty + ) { + for (k = 0, length = this.columns.length; k < length; k++) { + current = this.columns[k]; + if (!this.columns[k].dirty) { + buffer[offset] = this.fractal.formula( + current.newPosition, + newPosition + ); + } + offset++; + } + } else { + distr = 0; + distl = Number.MAX_VALUE / 2; + offsetu = offset - distu * bufferWidth; + offsetd = offset + distd * bufferWidth; + for (k = 0, length = this.columns.length; k < length; k++) { + current = this.columns[k]; + if (!this.columns[k].dirty) { + if (distr <= 0) { + rend = k + GUESS_RANGE; + if (rend >= this.columns.length) { + rend = this.columns.length - 1; + } + for (j = k + 1; j < rend && this.columns[j].dirty; j++) { + distr = j - k; + } + if (j >= rend) { + distr = Number.MAX_VALUE / 2; + } + } + if (distr < Number.MAX_VALUE / 4 && distl < Number.MAX_VALUE / 4) { + offsetl = offset - distl; + offsetul = offsetu - distl; + offsetdl = offsetd - distl; + offsetur = offsetu + distr; + offsetdr = offsetd + distr; + n = buffer[offsetl]; + if ( + n == buffer[offsetu] && + n == buffer[offsetd] && + n == buffer[offsetul] && + n == buffer[offsetur] && + n == buffer[offsetdl] && + n == buffer[offsetdr] + ) { + buffer[offset] = n; + } else { + buffer[offset] = this.fractal.formula( + current.newPosition, + newPosition + ); + } + } else { + buffer[offset] = this.fractal.formula( + current.newPosition, + newPosition + ); + } + distl = 0; + } + offset++; + offsetu++; + offsetd++; + distr--; + distl++; + } + } + row.recalculate = false; + row.dirty = false; + }; + + /** Render column using solid guessing + * + * @param column + */ + ZoomContext.prototype.renderColumn = function (column) { + var buffer = this.image.newBuffer; + var bufferWidth = this.image.width; + var newPosition = column.newPosition; + var r = column.index; + var offset = r; + var rend = r - GUESS_RANGE; + var i; + var j; + var k; + var n; + var distl; + var distr; + var distu; + var distd; + var offsetl; + var offsetr; + var offsetu; + var offsetlu; + var offsetru; + var offsetld; + var offsetrd; + var sumu; + var sumd; + var length; + var current; + if (rend < 0) { + rend = 0; + } + for (i = r - 1; i >= rend && this.columns[i].dirty; i--) {} + distl = r - i; + rend = r + GUESS_RANGE; + if (rend >= this.columns.length) { + rend = this.columns.length - 1; + } + for (j = r + 1; j < rend && this.columns[j].dirty; j++) {} + distr = j - r; + if ( + !USE_SOLIDGUESS || + i < 0 || + j >= this.columns.length || + this.columns[i].dirty || + this.columns[j].dirty + ) { + for (k = 0, length = this.rows.length; k < length; k++) { + current = this.rows[k]; + if (!this.rows[k].dirty) { + buffer[offset] = this.fractal.formula( + newPosition, + current.newPosition + ); + } + offset += bufferWidth; + } + } else { + distd = 0; + distu = Number.MAX_VALUE / 2; + offsetl = offset - distl; + offsetr = offset + distr; + for (k = 0, length = this.rows.length; k < length; k++) { + current = this.rows[k]; + if (!this.rows[k].dirty) { + if (distd <= 0) { + rend = k + GUESS_RANGE; + if (rend >= this.rows.length) { + rend = this.rows.length - 1; + } + for (j = k + 1; j < rend && this.rows[j].dirty; j++) { + distd = j - k; + } + if (j >= rend) { + distd = Number.MAX_VALUE / 2; + } + } + if (distd < Number.MAX_VALUE / 4 && distu < Number.MAX_VALUE / 4) { + sumu = distu * bufferWidth; + sumd = distd * bufferWidth; + offsetu = offset - sumu; + offsetlu = offsetl - sumu; + offsetru = offsetr - sumu; + offsetld = offsetl + sumd; + offsetrd = offsetr + sumd; + n = buffer[offsetu]; + if ( + n == buffer[offsetl] && + n == buffer[offsetr] && + n == buffer[offsetlu] && + n == buffer[offsetru] && + n == buffer[offsetld] && + n == buffer[offsetrd] + ) { + buffer[offset] = n; + } else { + buffer[offset] = this.fractal.formula( + newPosition, + current.newPosition + ); + } + } else { + buffer[offset] = this.fractal.formula( + newPosition, + current.newPosition + ); + } + distu = 0; + } + offset += bufferWidth; + offsetl += bufferWidth; + offsetr += bufferWidth; + distd--; + distu++; + } + } + column.recalculate = false; + column.dirty = false; + }; + + /** Calculate whether we're taking too long to render the fractal to meet the idealPos FPS */ + ZoomContext.prototype.tooSlow = function () { + var newTime = new Date().getTime(), + minFPS = this.zooming ? this.minFPS : 10; + return 1000 / (newTime - this.startTime + this.fudgeFactor) < minFPS; + }; + + /** Prioritize calculation of lines between begin and end + * + * @param lines - rows or columns to prioritize + * @param begin - index of first line to prioritize + * @param end - index of last line to prioritize + */ + function calcPriority(lines, begin, end) { + var middle; + while (begin < end) { + middle = begin + ((end - begin) >> 1); + lines[middle].priority = + (lines[end].newPosition - lines[middle].newPosition) * + lines[middle].priority; + if (lines[middle].symRef !== -1) { + lines[middle].priority /= 2.0; + } + calcPriority(lines, begin, middle); + begin = middle + 1; + } + } + + /** Enqueue all the lines to be recalculated and set their priority + * + * @param lines - lines to enqueue for calculation + */ + ZoomContext.prototype.enqueueCalculations = function (lines) { + var i; + var j = 0; + for (i = 0; i < lines.length; i++) { + if (lines[i].recalculate) { + for (j = i; j < lines.length && lines[j].recalculate; j++) { + this.queue[this.queueLength++] = lines[j]; + } + if (j === lines.length) { + j -= 1; + } + calcPriority(lines, i, j); + i = j; + } + } + }; + + /** Sort calculation queue according to priority (using quicksort) + * + * @param queue + * @param l + * @param r + */ + function sortQueue(queue, l, r) { + var m = (queue[l].priority + queue[r].priority) / 2.0; + var tmp = null; + var i = l; + var j = r; + do { + while (queue[i].priority > m) { + i++; + } + while (queue[j].priority < m) { + j--; + } + if (i <= j) { + tmp = queue[i]; + queue[i] = queue[j]; + queue[j] = tmp; + i++; + j--; + } + } while (j >= i); + if (l < j) { + sortQueue(queue, l, j); + } + if (r > i) { + sortQueue(queue, i, r); + } + } + + /** Process the relocation table */ + ZoomContext.prototype.calculate = function () { + var i, newTime; + this.incomplete = false; + this.queueLength = 0; + this.enqueueCalculations(this.columns); + this.enqueueCalculations(this.rows); + if (this.queueLength > 0) { + if (this.queueLength > 1) { + sortQueue(this.queue, 0, this.queueLength - 1); + } + for (i = 0; i < this.queueLength; i++) { + if (this.queue[i].isRow) { + this.renderRow(this.queue[i]); + } else { + this.renderColumn(this.queue[i]); + } + if (!this.recalculate && this.tooSlow() && i < this.queueLength) { + this.incomplete = true; + this.fill(); + break; + } + } + } + }; + + /** Update newPosition array with newly calculated positions */ + ZoomContext.prototype.updatePosition = function () { + var k; + var len; + for (k = 0, len = this.columns.length; k < len; k++) { + this.columns[k].oldPosition = this.columns[k].newPosition; + } + for (k = 0, len = this.rows.length; k < len; k++) { + this.rows[k].oldPosition = this.rows[k].newPosition; + } + }; + + /** Calculate FPS achieved and determine if fudge factor needs adjustment for next frame */ + ZoomContext.prototype.updateFPS = function () { + var fps = 1000 / (new Date().getTime() - this.startTime); + if (fps < this.minFPS) { + this.fudgeFactor++; + } else if (fps > this.minFPS + 10 && this.fudgeFactor > 0) { + this.fudgeFactor--; + } + console.log(fps + " fps"); + }; + + /** Overall fractal drawing workflow, calls other functions */ + ZoomContext.prototype.drawFractal = function (recalculate) { + var area = this.convertArea(); + var symx = this.fractal.symmetry && this.fractal.symmetry.x; + var symy = this.fractal.symmetry && this.fractal.symmetry.y; + var stepx, stepy; + this.startTime = new Date().getTime(); + this.recalculate = recalculate; + if (recalculate || !USE_XAOS) { + stepx = this.initialize(this.columns, area.begin.x, area.end.x, false); + stepy = this.initialize(this.rows, area.begin.y, area.end.y, true); + } else { + stepx = this.approximate(this.columns, area.begin.x, area.end.x); + stepy = this.approximate(this.rows, area.begin.y, area.end.y); + } + if ( + USE_SYMMETRY && + typeof symy === "number" && + !(area.begin.y > symy || symy > area.end.y) + ) { + prepareSymmetry( + this.rows, + Math.floor((symy - area.begin.y) / stepy), + symy, + stepy + ); + } + if ( + USE_SYMMETRY && + typeof symx === "number" && + !(area.begin.x > symx || symx > area.end.x) + ) { + prepareSymmetry( + this.columns, + Math.floor((symx - area.begin.x) / stepx), + symx, + stepx + ); + } + this.image.swapBuffers(); + this.movePixels(); + this.calculate(); + if ( + (USE_SYMMETRY && typeof symx === "number") || + typeof symy === "number" + ) { + this.doSymmetry(); + } + this.image.paint(); + this.updatePosition(); + this.updateFPS(); + }; + + /** Adjust display region to zoom based on mouse buttons */ + ZoomContext.prototype.updateRegion = function (mouse) { + var MAXSTEP = 0.008 * 3; + var MUL = 0.3; + var area = this.convertArea(); + var x = + area.begin.x + mouse.x * ((area.end.x - area.begin.x) / this.image.width); + var y = + area.begin.y + + mouse.y * ((area.end.y - area.begin.y) / this.image.height); + var deltax = + (mouse.oldx - mouse.x) * ((area.end.x - area.begin.x) / this.image.width); + var deltay = + (mouse.oldy - mouse.y) * + ((area.end.y - area.begin.y) / this.image.height); + var step; + var mmul; + if (mouse.button[1] || (mouse.button[0] && mouse.button[2])) { + // Pan when middle or left+right buttons are pressed + step = 0; + } else if (mouse.button[0]) { + // Zoom in when left button is pressed + step = MAXSTEP * 2; + } else if (mouse.button[2]) { + // Zoom out when right button is pressed + step = -MAXSTEP * 2; + } else { + this.zooming = false; + return; + } + mmul = Math.pow(1 - step, MUL); + area.begin.x = x + (area.begin.x - x) * mmul; + area.end.x = x + (area.end.x - x) * mmul; + area.begin.y = y + (area.begin.y - y) * mmul; + area.end.y = y + (area.end.y - y) * mmul; + this.fractal.region.radius.x = area.end.x - area.begin.x; + this.fractal.region.radius.y = area.end.y - area.begin.y; + this.fractal.region.center.x = (area.begin.x + area.end.x) / 2; + this.fractal.region.center.y = + ((area.begin.y + area.end.y) / 2) * + (this.image.width / this.image.height); + this.zooming = true; + }; + + /** Attaches zoomer to specified canvas */ + return function (canvas, fractal) { + var image = new CanvasImage(canvas); + var zoomer = new ZoomContext(image, fractal); + var mouse = { x: 0, y: 0, button: [false, false, false] }; + + function doZoom() { + zoomer.updateRegion(mouse); + if (zoomer.zooming || zoomer.incomplete) { + requestAnimationFrame(doZoom); + zoomer.drawFractal(false); + } + } + + canvas.ontouchstart = function (e) { + if (e.touches.length < 3) { + var touch = e.touches[0]; + e.touches.length == 2 + ? (mouse.button[2] = true) + : (mouse.button[2] = false); + var mouseEvent = new MouseEvent("mousedown", { + clientX: touch.clientX, + clientY: touch.clientY, + }); + canvas.dispatchEvent(mouseEvent); + } + }; + + canvas.ontouchend = function (e) { + var mouseEvent = new MouseEvent("mouseup", {}); + canvas.dispatchEvent(mouseEvent); + }; + + canvas.ontouchmove = function (e) { + var touch = e.touches[0]; + var mouseEvent = new MouseEvent("mousemove", { + clientX: touch.clientX, + clientY: touch.clientY, + }); + canvas.dispatchEvent(mouseEvent); + }; + + canvas.onmousedown = function (e) { + mouse.button[e.button] = true; + mouse.x = e.offsetX || e.clientX - canvas.offsetLeft; + mouse.y = e.offsetY || e.clientY - canvas.offsetTop; + mouse.oldx = e.offsetX || e.clientX - canvas.offsetLeft; + mouse.oldy = e.offsetY || e.clientY - canvas.offsetTop; + doZoom(); + }; + + canvas.onmouseup = function (e) { + mouse.button[e.button] = false; + }; + + canvas.onmousemove = function (e) { + mouse.x = e.offsetX || e.clientX - canvas.offsetLeft; + mouse.y = e.offsetY || e.clientY - canvas.offsetTop; + }; + + canvas.oncontextmenu = function () { + return false; + }; + + canvas.onmouseout = function () { + mouse.button = [false, false, false]; + }; + + zoomer.drawFractal(true); + }; +})(); + +/** Create the default XaoS color palette */ +xaos.defaultPalette = function () { + var MAXENTRIES = 65536; + var segmentsize = 8; + var setsegments = Math.floor((MAXENTRIES + 3) / segmentsize); + var nsegments = Math.floor(255 / segmentsize); + var segments = [ + [0, 0, 0], + [120, 119, 238], + [24, 7, 25], + [197, 66, 28], + [29, 18, 11], + [135, 46, 71], + [24, 27, 13], + [241, 230, 128], + [17, 31, 24], + [240, 162, 139], + [11, 4, 30], + [106, 87, 189], + [29, 21, 14], + [12, 140, 118], + [10, 6, 29], + [50, 144, 77], + [22, 0, 24], + [148, 188, 243], + [4, 32, 7], + [231, 146, 14], + [10, 13, 20], + [184, 147, 68], + [13, 28, 3], + [169, 248, 152], + [4, 0, 34], + [62, 83, 48], + [7, 21, 22], + [152, 97, 184], + [8, 3, 12], + [247, 92, 235], + [31, 32, 16], + ]; + var i, y; + var r, g, b; + var rs, gs, bs; + var palette = []; + + for (i = 0; i < setsegments; i++) { + r = segments[i % nsegments][0]; + g = segments[i % nsegments][1]; + b = segments[i % nsegments][2]; + rs = (segments[((i + 1) % setsegments) % nsegments][0] - r) / segmentsize; + gs = (segments[((i + 1) % setsegments) % nsegments][1] - g) / segmentsize; + bs = (segments[((i + 1) % setsegments) % nsegments][2] - b) / segmentsize; + for (y = 0; y < segmentsize; y++) { + palette.push((255 << 24) | (b << 16) | (g << 8) | r); + r += rs; + g += gs; + b += bs; + } + } + return new Uint32Array(palette); +}; + +xaos.mandelbrot = { + symmetry: { x: null, y: 0 }, + region: { + center: { x: -0.75, y: 0.0 }, + radius: { x: 2.5, y: 2.5 }, + angle: 0, + }, + z0: { x: 0, y: 0 }, + maxiter: 512, + bailout: 4, + formula: function (cr, ci) { + var maxiter = this.maxiter, + bailout = this.bailout, + zr = this.z0.x, + zi = this.z0.y, + i = maxiter; + + while (i--) { + var zr2 = zr * zr; + var zi2 = zi * zi; + + if (zr2 + zi2 > bailout) { + return this.palette[(maxiter - i) % this.palette.length]; + } + + zi = ci + 2 * zr * zi; + zr = cr + zr2 - zi2; + } + + return this.palette[0]; + }, + palette: xaos.defaultPalette(), +}; + +xaos.zoom(document.getElementById("canvas"), xaos.mandelbrot); diff --git a/lukaskanka/index/games/fractal/style.css b/lukaskanka/index/games/fractal/style.css new file mode 100644 index 0000000..9ada16e --- /dev/null +++ b/lukaskanka/index/games/fractal/style.css @@ -0,0 +1,67 @@ +#controls { + position: relative; + margin-bottom: 2.5em; +} + +#canvas { + width: 100%; + height: 100vh; + margin-bottom: 0.5em; + display: inline-block; + vertical-align: baseline; +} + +#fullScreenButton { + position: absolute; + height: 100vh; + width: 100%; + bottom: 3rem; + visibility: hidden; +} + +@media only screen and (max-width: 600px) { + #fullScreenButton { + visibility: visible; + opacity: 0; + } + + #saveCanvasButton { + visibility: hidden; + } +} + +#resetButton { + position: absolute; + left: 0em; +} + +#saveCanvasButton { + position: absolute; + right: 0.1em; + visibility: visible; +} + +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 768px) { + .container { + width: 750px; + } +} + +@media (min-width: 992px) { + .container { + width: 970px; + } +} + +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} diff --git a/lukaskanka/index/games/index.php b/lukaskanka/index/games/index.php new file mode 100644 index 0000000..63f485e --- /dev/null +++ b/lukaskanka/index/games/index.php @@ -0,0 +1,81 @@ + + + + + + + Games + + + + + + + +
+
+

+ Rock Paper Scissors 🪨📄✂️ +

+ + The first game I ever made! I wrote this when I first began learning + Javascript, to be specific I wrote the logic during that time. The + game was only playable through the terminal, now its fairly portable + and can be integrated into anything. + +
+ +
+ +
+

+ Eternal Space +

+ + Currently only playable on a pc, I haven't tried figuring out how to + scale down the game lol. I participated in the Opera GX + GameMaker + game jam and created this monstrosity. The game jam was alien themed, + however I never got that far. Before taking part in this game jam I + have never programmed an actual game nor have been in a game jam. I + learned how to program in GameMaker Language (basically Javascript) + during the event. + +
+ +
+ +
+

+ Fractal +

+ + Interactive Javascript real-time fractal renderer using XaoS.js. Works + best on a PC. + +
+ + + +
+ You have reached the end of the page. (ノ◕ヮ◕)ノ*:・゚✧ +
+
+ + diff --git a/lukaskanka/index/games/rps/index.html b/lukaskanka/index/games/rps/index.html new file mode 100644 index 0000000..06c3bd1 --- /dev/null +++ b/lukaskanka/index/games/rps/index.html @@ -0,0 +1,51 @@ + + + + + + + Rock Paper Scissors + + + + + + + +
+
+
+

+

+
+ +
+ + + + +
+ +
+

+ +

+

+
+
+
+ You have reached the end of the page. (ノ◕ヮ◕)ノ*:・゚✧ +
+
+ + diff --git a/lukaskanka/index/games/rps/script/script.js b/lukaskanka/index/games/rps/script/script.js new file mode 100644 index 0000000..b555617 --- /dev/null +++ b/lukaskanka/index/games/rps/script/script.js @@ -0,0 +1,93 @@ +let userChoice = ""; + +const getUserChoice = (userInput) => { + userChoice = userInput; +}; + +function getComputerChoice() { + let cpuChoice = Math.floor(Math.random() * 3); + if (cpuChoice === 0) { + return "rock"; + } else if (cpuChoice === 1) { + return "paper"; + } else if (cpuChoice === 2) { + return "scissors"; + } +} + +function determineWinner(userChoice, computerChoice) { + if (userChoice === computerChoice) { + return "Tie"; + } + if (userChoice === "rock") { + if (computerChoice === "paper") { + return "Computer"; + } else { + return "Player"; + } + } + if (userChoice === "paper") { + if (computerChoice === "scissors") { + return "Computer"; + } else { + return "Player"; + } + } + if (userChoice === "scissors") { + if (computerChoice === "rock") { + return "Computer"; + } else { + return "Player"; + } + } +} + +const score = { + player: 0, + cpu: 0, + ties: 0, + rounds: 0, +}; + +function playGame() { + var computerChoice = getComputerChoice(); + const winner = determineWinner(userChoice, computerChoice); + + score.rounds++; + switch (winner) { + case "Player": + score.player++; + break; + case "Computer": + score.cpu++; + break; + case "Tie": + score.ties++; + break; + } + + console.log("\nPlayer: " + userChoice); + console.log("CPU: " + computerChoice); + if (winner != "Tie") { + console.log("Winner: " + winner); + } else { + console.log("Tie game!"); + } + console.log(score); + + scorePlayer.textContent = `Player wins: ${score.player}` + " "; + scoreCPU.textContent = `Computer wins: ${score.cpu}`; + round.textContent = `Round ${score.rounds}`; + choicePlayer.textContent = `You: ${userChoice}`; + choiceCPU.textContent = `CPU: ${computerChoice}`; + if (winner != "Tie") { + gameWinner.textContent = "Winner: " + winner; + } else { + gameWinner.textContent = "Tie game!"; + } +} + +function play(input) { + getUserChoice(input); + playGame(); +} diff --git a/lukaskanka/index/kakoune/img/command.png b/lukaskanka/index/kakoune/img/command.png new file mode 100644 index 0000000..8358f68 Binary files /dev/null and b/lukaskanka/index/kakoune/img/command.png differ diff --git a/lukaskanka/index/kakoune/img/config.png b/lukaskanka/index/kakoune/img/config.png new file mode 100644 index 0000000..e77bec8 Binary files /dev/null and b/lukaskanka/index/kakoune/img/config.png differ diff --git a/lukaskanka/index/kakoune/img/home.png b/lukaskanka/index/kakoune/img/home.png new file mode 100644 index 0000000..0b3b383 Binary files /dev/null and b/lukaskanka/index/kakoune/img/home.png differ diff --git a/lukaskanka/index/kakoune/img/icons8-rocket.gif b/lukaskanka/index/kakoune/img/icons8-rocket.gif new file mode 100644 index 0000000..c2a91fa Binary files /dev/null and b/lukaskanka/index/kakoune/img/icons8-rocket.gif differ diff --git a/lukaskanka/index/kakoune/img/kakoune_logo_full.png b/lukaskanka/index/kakoune/img/kakoune_logo_full.png new file mode 100644 index 0000000..5e27405 Binary files /dev/null and b/lukaskanka/index/kakoune/img/kakoune_logo_full.png differ diff --git a/lukaskanka/index/kakoune/index.php b/lukaskanka/index/kakoune/index.php new file mode 100644 index 0000000..5fb7cdc --- /dev/null +++ b/lukaskanka/index/kakoune/index.php @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + Kakoune Czech Community + + + +
+ + + + + + +
+
+ +
1
+ + +
+
+

Úvod:

+

+ 👉 Kakoune Front-End Power postavený na + LSP. +

+

+ 👉 Kakoune je modální editor pro + Linux a + macOS + jako je třeba + Vim či + Neovim. . Z Kakoune + vychází také jeden velmi oblíbený modální editor + Helix-editor. + Jak Kakoune, tak Helix se od Vim a Neovim liší v ovládání, kde je opačná + logika příkazu a je bližší lidské řeči. Nespornou výhodou Kakoune je + oproti Helixu možnost rozšířit aplikaci o pluginy. Proto je + Kakoune vhodný pro zkušenější uživatele. Náš web by Ti měl pomoct s + prvotním nastavením. Pokud si i tak na tento editor netroufáš, Helix je skvělá náhrada. +

+

+ 👉 Tato distribuce nefunguje tak, že jen klikneš na tlačítko a nainstaluje + se. Vede Tě k samostatné instalaci pomocí tohoto webu. Cílem je + pochopit, jak Kakoune funguje, abyste si mohli sami vše modifikovat. +

+

+ 👉 Toto nastavení je primárně pro vývoj webu, ale není problém si vše + přizpůsobit. Inspiroval jsem se pluginy, které jsem využíval ve VSCode a + Webstorm. +

+

👉 Velký důraz je kladen na rychlost a lehkost.

+

👉 Tento blog je stále ve vývoji a postupně se na něm pracuje.

+

+ 👉 Pro nejlepší zážitek s Kakoune doporučuji používat multiplexor + Zellij , ale není to samozřejmě + podmínkou. +

+
+
+

Přednosti:

+

+ 👉 Hlavní předností tohoto nastavení jsou AutoSave, + doplňování HTML, CSS, JS a zkratky k zakomentování a odkomentování + kódu. Taky je zde několik pluginu pro příjemnější práci v Kakoune. +

+

+ 👉 LSP se + mi velmi osvědčilo v modálním editoru + Helix-editor. + Mou konfiguraci Helixu najdete + zde. +

+

+ 👉 Ta nejlepší témata v Kakoune nemusíš hledat, najdeš je po instalaci. Defaultně je + v naší konfiguraci nastaveno gruvbox-dark. +

+

+ 👉 Témá v Kakoune si jednoduše změníš v command line příkazem + `colorscheme` a tlačítkem Tab se budeš přepínat mezi jednotlivými + tématy. Command mode, česky příkazový mód, vyvoláš zkratkou Ctrl + : . +

+
+
+ Homescreen + Zellij + Command +
+
+

Instalace a nastavení:

+

+ 👉 Pokud ještě nemáš, nainstaluj si, + Kakoune. +

+

👉 Nejprve si zálohuj své aktuální nastavení Kakoune!!!

+

👉 Linux & Mac:

+
+

~/.config/kak/kakrc

+
+

👉 Aby Kakoune dobře komunikoval s LSP, je potřeba mít nainstalovaný Rust.

+
+
+

Node.js:

+

+ 👉 Doporučuji mít nainstalovaný + Node.js. +

+

👉 Pro správnou funkčnost LSP si doinstaluj tyto balíčky:

+

vscode-html-language-server

+

vscode-css-language-server

+

typescript-language-server +

+

emmet-ls

+

tailwindcss-language-server +

+

marksman

+

markdoc-ls

+

👉 A také si doinstaluj tento server pro správnou funkčnost HTML v LSP příkazem:

+
+

npm install -g vscode-{html,css,json}-languageserver-bin

+
+

+ 👉 Dále si v Node.js nainstaluj + Live-server. +

+

+ 👉 Platí v případě, že chceš dělat front-end nebo programuješ v + Javascriptu. +

+

👉 Ve svém projektu budeš moci pouštět index.html příkazem:

+
+

npx live-server

+
+

👉 Všechny servery, co si můžeš pomocí LSP nainstalovat, najdeš zde.

+
+
+

Kakoune:

+

+ 👉 Pro instalaci Kakoune Front-End Power Ti stačí stáhnout pouze soubor + kakrc z tohoto repozitáře . +

+

+ 👉 Ulož ho do kořenováho adresáře ~/.config/kak/. Nezapomeň na zálohu stávajících + souborů, pokud máš i své configy. +

+

👉 Kakoune pustíš v terminálu příkazem kak.

+

+ 👉 V Kakoune zadej do command line plug-install, tím + nainstaluješ všechny pluginy. Restartuj Kakoune. +

+

+ 👉 Pokud Ti některý plugin chybí, můžeš ho lehce doinstalovat nebo + naopak odinstalovat. Více informací + najdeš v Kakoune + dokumentaci + nebo velmi Ti rád poradím viz. Kontakty. +

+

+ 👉 Pokud některý plugin nechceš používat, stačí ho v souboru + kakrc zakomentovat pomocí hastagu + #. +

+

+ 👉 Tuto konfiguraci používám na Linuxu i macOS.

+
+
+

Plán Kakoune Front-End Power:

+

+ 👉 Do budoucna můžeš očekávat tyto nové funkce a další novinky: +

+

+ 👉 Web na vlastní doméně. Zatím Kakoune Front-End Power najdeš + zde. +

+

👉 Nové pluginy.

+

+ 👉 Návody k pluginům, jak nastavit a jak s nimi pracovat. +

+

👉 Návody k práci s Kakoune.

+
+
+

Výběr pluginu v Kakoune Front-End Power:

+

+ 👉 plug.kak nejduležitější plugin, aby bylo možné instalovat další pluginy.

+

+ 👉 kakoune-lsp +

+

+ 👉 luar rozšíří možnost instalovat pluginy napsané v jazyce Lua.

+

+ 👉 byline.kak vybere celý řádek pomocí klávesy x jako v Helix-editoru.

+

+ 👉 auto-pairs automaticky doplní závorky.

+

+ 👉 fzf.kak rychlé asynchronní vyhledávaní souborů.

+
+
+

Otázky a odpovědi:

+

👉 Kolik Kakoune stojí? -> Nic, Kakoune je zdarma.

+
+
+

Kontakty:

+

+ 👉 Kakoune community Telegram skupina +

+

+ 👉 Osobní web autora +

+

+ 👉 Gitea profil +

+

+ 👉 GitHub +

+

+ 👉 + Nostr +

+

+ 👉 Mastodon +

+
+
+

Podpora:

+

+ 👉 Pokud mě chceš podpořit nebo se podílet na obsahu tohoto webu, budu rád, když mi napíšeš. +

+

👉 Taky můžeš tento projekt podpořit pár Satoshi:

+ Satoshi +
+
+

Další projekty a odkazy:

+

+ 👉 ArchLinux CZ +

+

+ 👉 + Vyhledávač SearXNG CZ +

+

+ 👉 + EndeavourOS Linux +

+

+ 👉 i3 window manager +

+
+
+ + + + + + + \ No newline at end of file diff --git a/lukaskanka/index/kakoune/script.js b/lukaskanka/index/kakoune/script.js new file mode 100644 index 0000000..f14160e --- /dev/null +++ b/lukaskanka/index/kakoune/script.js @@ -0,0 +1,153 @@ +//Navbar menu +const menuIcon = document.querySelector(".menu-icon"); +const menuList = document.querySelector("nav"); +const hamburgerIcon = document.querySelector(".fa-solid"); + +menuIcon.addEventListener("click", () => { + if (hamburgerIcon.classList[1] === "fa-bars") { + hamburgerIcon.classList.add("fa-xmark"); + hamburgerIcon.classList.remove("fa-bars"); + menuList.style.display = "block"; + } else { + hamburgerIcon.classList.add("fa-bars"); + hamburgerIcon.classList.remove("fa-xmark"); + menuList.style.display = "none"; + } +}); + +// Dark / Light Mode + +const body = document.querySelector("body"); +const head = document.querySelector("header"); +const links = document.querySelectorAll("a"); +const nav = document.querySelector(".navigation"); +const h1 = document.querySelector("h1"); +const nadpish2 = document.querySelectorAll("h2"); +const p = document.querySelector("p"); +const solid = document.querySelector(".fa-solid"); +const solid1 = document.querySelector(".menu-icon"); +const footer = document.querySelector("footer"); +const gotop = document.querySelector("#scrollToTopBtn"); +const theme = document.querySelector("#toggleButton"); +const box = document.querySelectorAll(".code-box"); +let isDraculaMode = false; + +// Funkce pro nastavení stylů pro Dracula mód +function setDraculaStyles() { + body.style.backgroundColor = "#2a232b"; + body.style.color = "#f8f8f2"; + head.style.backgroundColor = "#2a232b"; + theme.style.color = "#9fea8a"; + gotop.style.color = "#9fea8a"; + links.forEach((a) => { + a.style.color = "#f76b00"; + }); + nav.style.backgroundColor = "#2a232b"; + h1.style.color = "#e54472"; + nadpish2.forEach((h2) => { + h2.style.color = "#18f700"; + }); + solid.style.backgroundColor = "#2a232b"; + solid.style.color = "#f76b00"; + solid1.style.backgroundColor = "#2a232b"; + footer.style.backgroundColor = "#2a232b"; + //gotop.style.backgroundColor = "#18f700"; + //theme.style.backgroundColor = "#18f700"; +} + +// Funkce pro nastavení stylů pro Light mód; +function setKakouneStyles() { + body.style.backgroundColor = "#9fea8a"; + body.style.color = "#282a36"; + h1.style.color = "#e84046"; + theme.style.color = "#2a232b"; + links.forEach((a) => { + a.style.color = "#ea3838"; + }); + gotop.style.color = "#2a232b"; + head.style.backgroundColor = "#9fea8a"; + nav.style.backgroundColor = "#9fea8a"; + solid.style.backgroundColor = "#9fea8a"; + solid1.style.backgroundColor = "#9fea8a"; + footer.style.backgroundColor = "#9fea8a"; + nadpish2.forEach((h2) => { + h2.style.color = "#1909f4"; + }); + //gotop.style.backgroundColor = "#a7e6ef"; + //theme.style.backgroundColor = "#a7e6ef"; + box.forEach((p) => { + p.style.color = "white"; + }); +} + +// Funkce pro přepnutí módu +function toggleMode() { + if (isDraculaMode) { + // Pokud je momentálně v Dracula modu, přepnout na Light mód + setKakouneStyles(); + isDraculaMode = false; + } else { + // Pokud je momentálně v Light modu, přepnout na Dracula mód + setDraculaStyles(); + isDraculaMode = true; + } +} + +// Funkce na změnu stylů +document.getElementById("toggleButton").addEventListener("click", toggleMode); + +// Nastavení - výchozí styl na Dark +setKakouneStyles(); +isDraculaMode = true; + +// Photo Gallery -> section (zoom) +const image1 = document.querySelector(".picture"); + +image1.addEventListener("mouseenter", () => { + image1.style.transform = "scale(2.2)"; +}); + +image1.addEventListener("mouseleave", () => { + image1.style.transform = "scale(1)"; +}); + +const image2 = document.querySelector(".picture1"); + +image2.addEventListener("mouseenter", () => { + image2.style.transform = "scale(2.2)"; +}); + +image2.addEventListener("mouseleave", () => { + image2.style.transform = "scale(1)"; +}); + +const image3 = document.querySelector(".picture2"); + +image3.addEventListener("mouseenter", () => { + image3.style.transform = "scale(2.2)"; +}); + +image3.addEventListener("mouseleave", () => { + image3.style.transform = "scale(1)"; +}); + +// Tlačítko go to top +// Zobrazení tlačítka od rolovaní části stránky (víc logické než až na konci) +window.onscroll = function () { + scrollFunction(); +}; + +function scrollFunction() { + if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) { + document.getElementById("scrollToTopBtn").style.display = "block"; + } else { + document.getElementById("scrollToTopBtn").style.display = "none"; + } +} + +// Posunout nahoru, když uživatel klikne na tlačítko +function scrollToTop() { + document.body.scrollTop = 0; // Pro Safari + document.documentElement.scrollTop = 0; // Pro ostatní prohlížeče +} + diff --git a/lukaskanka/index/kakoune/style.css b/lukaskanka/index/kakoune/style.css new file mode 100644 index 0000000..f4b024e --- /dev/null +++ b/lukaskanka/index/kakoune/style.css @@ -0,0 +1,212 @@ +* { + margin: 0; + + padding: 0; + + box-sizing: border-box; +} +body { + max-width: 1000px; + margin: 0 auto; + font-family: "Ubuntu", sans-serif; +} + +/*Header */ + +h1 { + padding-left: 8px; +} + +header { + margin-top: 25px; + display: flex; + align-items: center; + height: 70px; + flex-direction: row; + /*position: fixed;*/ +} + +.title { + padding-top: 25px; +} + +.logo { + flex-grow: 1; + display: flex; +} + +.logo img { + /*width: 100px;*/ + height: 100px; + padding-top: 15px; + margin-left: 20px; +} + +/* navigation */ +nav { + margin-right: 30px; +} + +nav li { + display: inline-block; + list-style-type: none; + margin-right: 20px; +} + +nav li a { + text-decoration: none; + color: black; +} + +/* navigation icons */ + +.menu-icon { + display: none; + margin-right: 30px; +} + +/*Dark/Light mode button*/ +#toggleButton { + float: right; + margin-right: 30px; + margin-top: 10px; + padding: 5px; +} + +#toggleButton { + bottom: 20px; + right: 20px; + border: none; + outline: none; + background-color: transparent; + font-size: 34px; + cursor: pointer; +} + +/*Header small display*/ +@media (max-width: 600px) { + body { + padding: 10px; + } + + header { + position: relative; + } + header nav { + position: absolute; + top: 70px; + width: 100%; + display: none; + } + + .menu-icon { + display: block; + font-size: 23px; + } + + header nav li { + display: block !important; + text-align: center; + margin-top: 10px; + margin-bottom: 10px; + } + + hr { + display: none; + } +} + +/* Sekce */ + +.content { + text-align: center; +} + +.welcome { + padding-top: 115px; + padding-bottom: 50px; +} + +#install { + padding-top: 50px; +} + +#node { + padding-top: 50px; + padding-bottom: 50px; +} + +#plans { + padding-top: 50px; + padding-bottom: 50px; +} + + +#contact { + padding-top: 50px; + padding-bottom: 50px; +} + +#other { + padding-top: 50px; +} + +/*Code box*/ +.code-box { + background-color: #353535; + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; + font-family: monospace; + max-width: 400px; + margin: 0 auto; +} + +/*Picture settings*/ + +.sat { + width: 175px; + height: 175px; +} + +.photo { + text-align: center; + padding-top: 50px; +} +.photo img { + width: 300px; + height: 200px; + margin: 10px; + transition: all 0.5s linear; +} +/*footer pevná pozice*/ + +footer { + bottom: 0; + margin-bottom: 10px; + margin-left: 25px; + margin-top: 20px; +} + +footer a { + text-decoration: none; +} + +#scrollToTopBtn { + display: none; + position: fixed; + bottom: 20px; + right: 20px; + /*butoon přes obsah*/ + z-index: 99; + outline: none; + cursor: pointer; + padding: 15px; + border-radius: 50%; + background-color: transparent; +} + +/* Styl pro ikonu */ +#scrollToTopBtn i { + font-size: 34px; +} diff --git a/lukaskanka/index/privaci-policy/index.php b/lukaskanka/index/privaci-policy/index.php new file mode 100644 index 0000000..13b135a --- /dev/null +++ b/lukaskanka/index/privaci-policy/index.php @@ -0,0 +1,170 @@ + + + + + + + + Zásady ochrany osobních údaju + + + + + + + + + +
+ +

+ +

Zásady ochrany osobních údajů

+ Naposledy aktualizováno: 28.4.2022 +

+ +

+ Pokud jste návštěvníkem našeho blogu, odběratelem novinek, + přispěvatelem do komentářů poskytujete nám své osobní údaje. My vaše + údaje zpracováváme a za jejich bezpečnost odpovídáme. Slibujeme, že + vaše
údaje dostatečně chráníme a podřizujeme se požadavkům + Nařízení o ochraně osobních údajů (GDPR). +

+ +

+ Neprodáváme žádný produkt, nejste tedy našimi zákazníky, ale + návštěvníky blogu. +

+ +

+ Správcem vašich osobních údajů je Lukáš (Lucka ani nekouká přes + rameno!)
+ Správcem osobních údajů je Lukáš Kaňka, který provozuje webové stránky + lukan.cz a lukan.cekuj.net. Lukáš vaše údaje spravuje a určuje, jak + dlouho budou osobní údaje zpracovávány, a za jakým účelem. Vybírá +
také další zpracovatele, které ke zpracování využíváme. +

+ +

+ Jaké údaje zpracováváme a proč?
+ Vaše osobní údaje zpracováváme především proto, abychom vám mohli + poskytovat co nejkvalitnější obsah. Jednotlivé důvody zpracování: +

+ +

+ Předávání osobních údajů třetím osobám.
+ Vaše údaje zpracovává správce Lukáš Kaňka, s využitím dalších dvou + zpracovatelů, společnosti Endora , jejichž zpracování spočívá v + uchovávání údajů na zabezpečených cloudových serverech. +

+ +

+ Abychom mohli měřit, jak se vám na našem blogu líbí, kde trávíte + nejvíce času a kam klikáte, používáme další poskytovatele služeb pro + určité zpracovatelské operace. Jsou to: +

+ +

TopList – pomocí měřícího kódu

+ +

+ Jak nás můžete kontaktovat
+ Ať už na nás máte jakoukoliv otázku nebo požadavek, můžete nás + kontaktovat ne e-mailové adrese: lukas.kanka@lukan.cz. +

+ +

+ Předávání vašich dat mimo Evropskou Unii
+ Vaše data zpracováváme výhradně v Evropské unii nebo v zemích, které + zajišťují odpovídající úroveň ochrany na základě rozhodnutí Evropské + komise. +

+ +

+ Zabezpečení a ochrana osobních údajů
+ Vaše data jsou u nás v bezpečí. Přijali jsme technická opatření, která + zajišťují zabezpečení osobních údajů šifrováním přenosu dat pomocí + HTTPS protokolu (ten zámeček, co je vedle naší URL adresy ;-)) a
+ zabezpečili vaše osobní údaje v souladu s čl. 32 GDPR. +

+ +

+ Vaše práva v souvislosti s ochranou osobních údajů: +

+ +

+ V souvislosti s ochranou osobních údajů máte řadu práv. Pokud budete + chtít některého z těchto práv využít, prosím, kontaktujte nás + prostřednictvím e-mailu: lukas.kanka@lukan.cz +

+ +

Máte právo na informace, které si právě teď čtete. 🙂

+ +

+ Díky právu na přístup nás můžete kdykoli vyzvat a my vám do 30 dnů + doložíme, jaké vaše osobní údaje zpracováváme a proč. Pokud se u vás + něco změní nebo shledáte své osobní údaje neaktuální nebo
+ neúplné, máte právo na doplnění a změnu osobních údajů. +

+ +

+ Právo na omezení zpracování můžete využít, pokud se domníváte, že + zpracováváme vaše nepřesné údaje, domníváte se, že provádíme + zpracování nezákonně, ale nechcete všechny údaje smazat nebo pokud + jste
+ vznesli námitku proti zpracování. Omezit můžete rozsah osobních údajů + nebo účelů zpracování. +

+ +

Právo na výmaz (být zapomenut)

+ +

+ Vaším dalším právem je právo na výmaz (být zapomenut). Nechceme na vás + zapomenout, ale pokud si to budete přát, máte na to právo. 😞 V + takovém případě vymažeme veškeré vaše osobní údaje ze svého
+ systému i ze systému všech dílčích zpracovatelů a záloh. Na zajištění + práva na výmaz potřebujeme 30 dní. +

+ +

Stížnost u Úřadu na ochranu osobních údajů

+ +

+ Pokud máte pocit, že s vašimi údaji nezacházíme v souladu se zákonem, + máte právo se se svou stížností kdykoli obrátit na Úřad pro ochranu + osobních údajů. Budeme moc rádi, pokud nejprve budete o tomto
+ podezření informovat nás, abychom s tím mohli něco udělat a případné + pochybení napravit. +

+ +

Mlčenlivost:

+

+ Jsme povinni zachovávat mlčenlivost o osobních údajích a o + bezpečnostních opatřeních, jejichž zveřejnění by ohrozilo zabezpečení + vašich osobních údajů. Tato mlčenlivost přitom trvá i po skončení
+ závazkových vztahů s námi. Bez vašeho souhlasu také vaše údaje žádné + jiné třetí straně nevydáme. +

+ +

Tyto Zásady ochrany osobních údajů nabývají účinnosti 28.4.2022

+ + + +
+ Copyright © Lukáš Kaňka 2024 +
+ +
+ + diff --git a/lukaskanka/index/project/YourTravelAssistant/Readme.md b/lukaskanka/index/project/YourTravelAssistant/Readme.md new file mode 100644 index 0000000..a15b983 --- /dev/null +++ b/lukaskanka/index/project/YourTravelAssistant/Readme.md @@ -0,0 +1,3 @@ +# První povinný projekt v rámci Akademii Engeto - front-end developers + +K projektu připravuji zároveň i testy v frameworku Playwright pod tímto [odkazem](https://github.com/LukasKanka/YourTravelAssistant_Playwright.git). diff --git a/lukaskanka/index/project/YourTravelAssistant/cestovatel.css b/lukaskanka/index/project/YourTravelAssistant/cestovatel.css new file mode 100644 index 0000000..ae34b91 --- /dev/null +++ b/lukaskanka/index/project/YourTravelAssistant/cestovatel.css @@ -0,0 +1,554 @@ +:root { + --word-black: #000; + --word-white: #fff; + --link-one: #efa69d; + --link-two: #e9877b; + --background-one: #33292a; + --background-two: #644b4f; + --background-three: #333333; + --background-four: #f2f2f2; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: "Roboto", sans-serif; +} + +/* Navigace (horní menu) */ +nav { + padding: 10px; + background-color: var(--background-one); + font-size: 20px; +} +a { + text-decoration: none; + color: var(--word-white); +} + +nav ul { + list-style: none; + display: flex; + justify-content: space-between; + flex-grow: 1; +} + +.navigation { + width: 65%; + margin: 0 auto; +} + +.icon { + width: auto; + height: 22px; + display: none; + margin-left: auto; + margin-right: 12px; +} + +.icon img { + width: 100%; + height: 100%; +} + +@media (max-width: 768px) { + .navigation { + width: 90%; + margin: 0 auto; + } + + nav a { + display: none; + } + + .icon { + display: block; + } +} + +/* Hero - section */ +.hero-section { + height: 80vh; + background-image: url(images/scott-goodwill-y8Ngwq34_Ak-unsplash.jpg); + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} + +.hero-text-wrapper { + position: relative; + width: 65%; + margin: 0 auto; + height: 100%; +} + +.hero-text { + color: var(--word-white); + position: absolute; + right: 0; + bottom: 50px; + font-size: 80px; + text-align: right; +} + +.h2-about { + font-weight: 700; +} + +@media (max-width: 768px) { + .hero-text-wrapper { + width: 90%; + margin: 0 auto; + } + .hero-text { + font-size: 35px; + height: 80px; + margin-bottom: 5px; + } +} + +/* About sekce */ + +.about-section { + margin: 45px 0; +} + +.about-section-wrapper { + width: 65%; + margin: 0 auto; + display: flex; + gap: 20px; +} + +.about-text { + flex: 1; +} + +.about-img { + flex: 1; +} +img { + width: 100%; + height: 100%; + object-fit: cover; +} + +@media (max-width: 768px) { + .about-section-wrapper { + flex-direction: column; + width: 90%; + margin: 0 auto; + } + + .about-text { + text-align: left; + } + + .about-img { + text-align: center; + } + + .about-text-p { + padding-top: 15px; + } +} + +/* What We Do */ + +.what-section { + background-color: var(--background-one); + color: var(--word-white); +} + +.what-section-wrapper { + width: 65%; + margin: 0 auto; +} +.what-text { + text-align: center; +} +.h2-what-we { + font-size: 38px; + text-align: center; + padding-top: 45px; + padding-bottom: 35px; +} + +.where-text { + text-align: center; +} +.icon-what-section { + margin-top: 45px; + padding: 45px; + list-style: none; + display: flex; + justify-content: space-between; + flex-grow: 1; +} + +.img-icons { + width: 100px; + height: 100px; + align-items: center; +} + +.icon-text { + text-align: center; + padding-top: 15px; + font-size: 25px; +} + +@media (max-width: 768px) { + .what-section-wrapper { + width: 90%; + margin: 0 auto; + } + + .icon-what-section { + flex-direction: column; + align-items: center; + text-align: center; + } + + .img-icons { + width: 80px; + height: 80px; + margin-top: 20px; + align-items: center; + } + + .icon-text { + padding-top: 0px; + } +} + +/* Our Trips */ + +.trips-section { + margin-top: 45px; + margin-bottom: 45px; +} +.trips-section-wrapper { + display: flex; + flex-wrap: wrap; + width: 65%; + margin: auto; + gap: 10px; +} + +.images-item { + height: 222px; + width: 32%; + flex-shrink: 1; + border-radius: 4px; +} + +.images-trips-1 { + background-image: url(images/simon-english-48nerZQCHgo-unsplash.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-2 { + background-image: url(images/james-wheeler-ZOA-cqKuJAA-unsplash.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-3 { + background-image: url(images/daniel-tseng-73lmMKhi2U8-unsplash.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-4 { + background-image: url(images/holly-mandarich-UVyOfX3v0Ls-unsplash.jpg); + background-size: cover; + background-position: center; +} + +.text-trips { + background-color: var(--background-four); + color: var(--word-black); + display: flex; + justify-content: center; + align-items: center; + font-size: 32px; + font-weight: 700; +} + +.images-trips-5 { + background-image: url(images/patrick-szylar-45bM3XGqnDE-unsplash.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-6 { + background-image: url(images/chung-yee-tsang-wqxCKM0R6R8-unsplash.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-7 { + background-image: url(images/julian-bialowas-ilkTnuMunP8-unsplash.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-8 { + background-image: url(images/matej-drha-rbDzMcJsBkY-unsplash.jpg); + background-size: cover; + background-position: center; +} + +@media (max-width: 768px) { + .trips-section-wrapper { + width: 90%; + margin: 0 auto; + } + + .images-item { + width: 333px; + height: 222px; + } + + .text-trips { + height: 80px; + } +} + +/* Where togo */ +.where-section { + background-color: var(--background-two); + color: var(--word-white); + display: flex; +} + +.where-section-wrapper { + width: 65%; + margin: 0 auto; + padding-top: 45px; + padding-bottom: 45px; + display: flex; +} + +.where-text { + display: flex; +} + +.h2-where { + flex: 1; + font-size: 25px; + width: 272px; + height: 114px; + text-align: left; +} + +.where-text-div { + flex: 1; + width: 572; + height: 201; + text-align: left; +} + +.contact-text { + margin-top: 20px; +} + +.contact-button { + margin-top: 35px; + background-color: var(--background-four); + width: 133px; + height: 43px; + border-radius: 4px; + text-align: center; + line-height: 43px; +} + +.contact-button-text { + font-size: 14px; + font-weight: 700; + font-family: Inter; + color: var(--word-black); + display: block; +} +.mobile { + display: none; +} + +@media (max-width: 768px) { + .where-section-wrapper { + width: 90%; + margin: 0 auto; + } + + .where-text { + flex-direction: column; + } + .desktop { + display: none; + } + + .mobile { + display: block; + font-size: 25px; + margin-bottom: 25px; + } +} + +/* Reviews section */ + +.reviews-section { + width: 65%; + margin: 0 auto; + margin-top: 45px; + margin-bottom: 45px; +} +.h2-reviews { + text-align: center; + padding-bottom: 20px; +} +.reviews-text { + width: 332px; + height: 159px; + text-align: center; + margin: auto; +} + +.reviews-card-wrapper { + display: flex; + align-items: center; + justify-content: space-evenly; + gap: 300px; +} + +.reviews-card { + width: 378.49px; + height: 346px; + text-align: center; +} + +.reviews-card-1 { + width: 378.49px; + height: 346px; + text-align: center; +} + +.reviews-card img { + width: 122.13px; + height: 111px; + border-radius: 50%; +} + +.reviews-card-1 img { + width: 122.13px; + height: 111px; + border-radius: 50%; +} + +.reviews-card-text { + margin-top: 20px; +} + +.reviews-name { + font-weight: 700; + padding-top: 50px; + height: 19px; + align-items: center; +} + +@media (max-width: 768px) { + .reviews-section { + width: 90%; + margin: 0 auto; + } + + .reviews-card-wrapper { + flex-direction: column; + width: 90%; + margin: 0 auto; + gap: 95px; + } + .reviews-card { + width: 324px; + } + + .reviews-card-1 { + width: 324px; + } + + .reviews-text { + width: 263px; + } + + .h2-reviews { + padding-top: 40px; + } + + .reviews-name { + padding-bottom: 40px; + } +} + +/* Photo gallery */ +.photo-gallery { + /* display: flex; */ + /* flex-wrap: wrap; */ +} +.photo-gallery-wrapper { + display: flex; + flex-wrap: wrap; +} + +.picture-img { + width: 100%; + height: auto; + display: block; + object-fit: cover; + max-width: 50%; +} + +@media (max-width: 768px) { + .photo-gallery-wrapper { + flex-direction: column; + margin-top: 100px; + } + .picture-img { + max-width: 100%; + height: 260px; + } +} + +/* Footer */ +.footer-wrapper { + background-color: var(--background-three); + padding: 45px; +} + +.footer-text { + text-align: center; +} +.footer-contact { + color: var(--link-two); + text-decoration: underline; + font-weight: 700; +} +.footer-text-p { + padding-top: 20px; + text-align: center; + color: var(--word-white); + font-weight: 700; +} + +@media (max-width: 768px) { + .footer-contact { + font-size: 12px; + } + .footer-text-p { + font-size: 10px; + } +} diff --git a/lukaskanka/index/project/YourTravelAssistant/cestovatel.php b/lukaskanka/index/project/YourTravelAssistant/cestovatel.php new file mode 100644 index 0000000..b387ae5 --- /dev/null +++ b/lukaskanka/index/project/YourTravelAssistant/cestovatel.php @@ -0,0 +1,217 @@ + + + + + + + + + + + Your Travel Assistant + + +
+ + + + + +
+
+

Your
+ Travel
+ Assistant

+
+
+ + +
+
+
+
+

About Us

+

Leigh McAdam is a Calgary-based writer, photographer and social media + enthusiast with over + 48,000 + followers. Her blog: HikeBikeTravel is frequently cited as one of the top travel and outdoor + adventure blogs in Canada, and consistently receives over 135,000 monthly page views. She + shares + her enthusiasm for the outdoors as a brand ambassador for Sporting Life, and has worked on + campaigns for Travel Alberta, Expedia and Flight Hub. Leigh is the author of Discover + Canada: + 100 Inspiring Outdoor Adventures. Currently, she is co-authoring: 125 Nature Hot Spots in + Alberta (spring 2018). A true adventurer, Leigh will try anything once, except perhaps + bungee + jumping. +

+
+
# +
+
+
+ + +
+
+
+

What We Do

+

Opportunities for challenging hikes and pleasant strolls are scattered all + over this planet; you + just + need to know where to find them. We do. Kilimanjaro, Everest Base Camp, Patagonia, and the Inca + Trail are out there, waiting for you to walk all over them. We’re proud of our record of + successful + ascents (over 92% of our travellers make it to the top of Kili, depending on the route), but + it’s + our CEOs and local guides that make the journey itself as memorable as the summit. And if you’re + not + into big climbs, don’t sweat it; we’ve got loads of lower-impact walks and iconic treks you’ll + love, + too.

+
+ +
    +
  • #
    +

    Hiking

    + +
  • +
  • #
    +

    Cycling

    +
  • +
  • #
    +

    Surfing

    +
  • +
  • #
    +

    Car trips

    +
  • +
+
+
+ + +
+
+
+
+
+
+
Our Trips
+
+
+
+
+
+
+ + +
+
+
+ +
+

Where do you
want to go?

+

Where do you want to go?

+
+
+

+ You’ll find 21 detailed adventure guides, over a hundred practical travel tips, book reviews + on + anything outdoors related, packing lists on a range of outdoor activities including + kayaking, + backpacking and camping as well as honest hotel and B&B reviews. +

+

Contact us and we will help you!

+ +
+
+
+
+ + +
+

Reviews

+
+

Our amazing clients are the reason we exist, and their reactions to our + customized travel experiences + and personalized service keep us smiling all day long. Here is just a sampling of what they’ve said: +

+
+
+
+ # +
+ She has booked two major European trips for us in the past year and every aspect has met, and + in + most cases exceeded, our expectations. Best prices, best hotels, best itineraries, and best + cruises, she does it all. But the most important thing is she remembers the little things + that + we would do if we were making the plans ourselves. +
+ Bertie Norton +
+
+
+
+ # +
+ Leigh McAdam has been making my travel arrangements for about 20 years and there is no one + else I would trust to arrange my trips and tours. I've also had great fun on a few of the + group trips she has arranged - Peru & Machu Picchu and a 10-day cruise out of Venice and + diving. It's always an eclectic group of well traveled, interesting people. +
+ Frank Kinney +
+
+
+
+
+ + + + + +
+ +
+
+ +
+ + + + + + \ No newline at end of file diff --git a/lukaskanka/index/project/YourTravelAssistant/icons/PngItem_1608357.png b/lukaskanka/index/project/YourTravelAssistant/icons/PngItem_1608357.png new file mode 100644 index 0000000..f7dec9b Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/icons/PngItem_1608357.png differ diff --git a/lukaskanka/index/project/YourTravelAssistant/icons/car-white.png b/lukaskanka/index/project/YourTravelAssistant/icons/car-white.png new file mode 100644 index 0000000..c6f325c Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/icons/car-white.png differ diff --git a/lukaskanka/index/project/YourTravelAssistant/icons/cycle-white.png b/lukaskanka/index/project/YourTravelAssistant/icons/cycle-white.png new file mode 100644 index 0000000..6387aaa Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/icons/cycle-white.png differ diff --git a/lukaskanka/index/project/YourTravelAssistant/icons/hiking-white.png b/lukaskanka/index/project/YourTravelAssistant/icons/hiking-white.png new file mode 100644 index 0000000..36c90f2 Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/icons/hiking-white.png differ diff --git a/lukaskanka/index/project/YourTravelAssistant/icons/water-white.png b/lukaskanka/index/project/YourTravelAssistant/icons/water-white.png new file mode 100644 index 0000000..62ffeda Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/icons/water-white.png differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/alexey-fedenkov-BaCZYH9RLmQ-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/alexey-fedenkov-BaCZYH9RLmQ-unsplash.jpg new file mode 100644 index 0000000..5d0fcc9 Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/alexey-fedenkov-BaCZYH9RLmQ-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/anneliese-phillips-uv4-vl3liKM-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/anneliese-phillips-uv4-vl3liKM-unsplash.jpg new file mode 100644 index 0000000..c0a2f3c Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/anneliese-phillips-uv4-vl3liKM-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/chung-yee-tsang-wqxCKM0R6R8-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/chung-yee-tsang-wqxCKM0R6R8-unsplash.jpg new file mode 100644 index 0000000..b50e05d Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/chung-yee-tsang-wqxCKM0R6R8-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/daniel-tseng-73lmMKhi2U8-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/daniel-tseng-73lmMKhi2U8-unsplash.jpg new file mode 100644 index 0000000..2187830 Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/daniel-tseng-73lmMKhi2U8-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/holly-mandarich-UVyOfX3v0Ls-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/holly-mandarich-UVyOfX3v0Ls-unsplash.jpg new file mode 100644 index 0000000..7c6b25f Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/holly-mandarich-UVyOfX3v0Ls-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/james-wheeler-ZOA-cqKuJAA-unsplash(1).jpg b/lukaskanka/index/project/YourTravelAssistant/images/james-wheeler-ZOA-cqKuJAA-unsplash(1).jpg new file mode 100644 index 0000000..fb86588 Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/james-wheeler-ZOA-cqKuJAA-unsplash(1).jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/james-wheeler-ZOA-cqKuJAA-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/james-wheeler-ZOA-cqKuJAA-unsplash.jpg new file mode 100644 index 0000000..fb86588 Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/james-wheeler-ZOA-cqKuJAA-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/jeffrey-keenan-pUhxoSapPFA-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/jeffrey-keenan-pUhxoSapPFA-unsplash.jpg new file mode 100644 index 0000000..2f11f0f Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/jeffrey-keenan-pUhxoSapPFA-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/julian-bialowas-ilkTnuMunP8-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/julian-bialowas-ilkTnuMunP8-unsplash.jpg new file mode 100644 index 0000000..4507328 Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/julian-bialowas-ilkTnuMunP8-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/kalen-emsley-kGSapVfg8Kw-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/kalen-emsley-kGSapVfg8Kw-unsplash.jpg new file mode 100644 index 0000000..81fc614 Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/kalen-emsley-kGSapVfg8Kw-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/matej-drha-rbDzMcJsBkY-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/matej-drha-rbDzMcJsBkY-unsplash.jpg new file mode 100644 index 0000000..9ed51ea Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/matej-drha-rbDzMcJsBkY-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/omer-salom-LoijtQXXNhs-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/omer-salom-LoijtQXXNhs-unsplash.jpg new file mode 100644 index 0000000..2ac3aa8 Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/omer-salom-LoijtQXXNhs-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/patrick-szylar-45bM3XGqnDE-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/patrick-szylar-45bM3XGqnDE-unsplash.jpg new file mode 100644 index 0000000..d2c57ae Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/patrick-szylar-45bM3XGqnDE-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/scott-goodwill-y8Ngwq34_Ak-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/scott-goodwill-y8Ngwq34_Ak-unsplash.jpg new file mode 100644 index 0000000..c688660 Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/scott-goodwill-y8Ngwq34_Ak-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/simon-english-48nerZQCHgo-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/simon-english-48nerZQCHgo-unsplash.jpg new file mode 100644 index 0000000..6c009a8 Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/simon-english-48nerZQCHgo-unsplash.jpg differ diff --git a/lukaskanka/index/project/YourTravelAssistant/images/vincentiu-solomon-7MH4ped6_Mo-unsplash.jpg b/lukaskanka/index/project/YourTravelAssistant/images/vincentiu-solomon-7MH4ped6_Mo-unsplash.jpg new file mode 100644 index 0000000..f436b0a Binary files /dev/null and b/lukaskanka/index/project/YourTravelAssistant/images/vincentiu-solomon-7MH4ped6_Mo-unsplash.jpg differ diff --git a/lukaskanka/index/project/index.php b/lukaskanka/index/project/index.php new file mode 100644 index 0000000..9f2c37c --- /dev/null +++ b/lukaskanka/index/project/index.php @@ -0,0 +1,117 @@ + + + + + + + + Projekty + + + + + + + + + + +
+ + + +
+ + + + +
+

+ Vítám tě na této stránce, která slouží jako mapa pro mé projekty. +

+

+ Zde najtete projekty věnující se k tvorbě webu a hlavně mou cestu Akademií Engeto. +

+

+ Všechny projekty jsou vytvořeny v HTML, CSS a strochou JavaScriptu. Ale určitě jsem přidám i další + projekty, které tvořím mimo Akademii.

+

+ Projekty které se netýkají tworby webu, najdete na mém GitHubu přes tento odkaz na Gitea. +

+

+ U každého projektu najdete popis a odkaz na něj. Buď na Gitea nebo na stránky, kde je projekt umístěn. +

+
+ +
+
+

Projekt 1: Tento Blog

+

+ Tento projekt je vytvořen mimo Akademii Engeto. Je to můj osobní blog, který postupně vylepšuji. + Tato stránka slouží čistě jako má prezentace.

+

+ Postupně jsem přidávám své znolosti z HTML, CSS a také se snažím aby web byl co nejlépe + responzivní. Tento projekt je nekončicí koloběh. +

+
+ +
+

Projekt 2: Životopis

+

+ Tento projekt je jako první úkol v Akademii.

+

Zadání bylo vytvořit jednoduchý životpis na procvičení základů HTML a CSS. Později jsem ještě pomocí + CSS nastavil v úkolu responsivní web pro mobilní zařízení.

+

+

Projekt Životopis najdete zde.

+
+
+

Projekt 3: Karta produktu

+

Karta produktu. Na tomto projektu jsme se naučily pozicování elementu a pojmy jako Margin a Padding. +

+

Projekt Karta produkdu najdete zde

+
+ +
+

Projekt 4: Nature and Culture

+

Tento projekt je zaměřen na responsivitu webu pro mobilní zařízení a také jsme použily porvé Flexbox. +

+

Projekt Nature and Culture najdete zde

+ +
+
+

Projekt 5: Your Travel Assistant

+

Tento projekt je vytvořen mimo Akademii Engeto. Jedná se o stránku pro cestovatele.

+

Zadání jsme měli jako na reálném projektu a grafické rozložení se dělalo dle Figmi. Tento projekt byl hodnocený a je jeden ze tří projektů k získání certifikátu v Akademii.

+

Projekt najdeš pod tímto odkazem. Od finální verze co jsem odevzdal se mírně liší, ještě před odevzdáním jsem vychytával poslední mouchy.

+
+
+
+ + + +
+ Copyright © Lukáš Kaňka 2024 +
+
+ + diff --git a/lukaskanka/index/project/kartaProduktu/img/psi-hracka(1).png b/lukaskanka/index/project/kartaProduktu/img/psi-hracka(1).png new file mode 100644 index 0000000..8a2bcd6 Binary files /dev/null and b/lukaskanka/index/project/kartaProduktu/img/psi-hracka(1).png differ diff --git a/lukaskanka/index/project/kartaProduktu/img/psi-hracka.png b/lukaskanka/index/project/kartaProduktu/img/psi-hracka.png new file mode 100644 index 0000000..a15b983 --- /dev/null +++ b/lukaskanka/index/project/kartaProduktu/img/psi-hracka.png @@ -0,0 +1,3 @@ +# První povinný projekt v rámci Akademii Engeto - front-end developers + +K projektu připravuji zároveň i testy v frameworku Playwright pod tímto [odkazem](https://github.com/LukasKanka/YourTravelAssistant_Playwright.git). diff --git a/lukaskanka/index/project/kartaProduktu/karta-produktu.php b/lukaskanka/index/project/kartaProduktu/karta-produktu.php new file mode 100644 index 0000000..96274b0 --- /dev/null +++ b/lukaskanka/index/project/kartaProduktu/karta-produktu.php @@ -0,0 +1,55 @@ + + + + + + + + + Karta produktu + + + + +
+ +
+ Jen u nás + -27% +
+ +
+ +
+ + +

M-Pets Hračka Holly vánoční sněhulák

+ + +

Hračka pro psy - pro střední a velká plemena, vydává zvuky, materiál polyester, bílá barva +

+ + +
+
Výměna nevhodného dárku za poukaz do 31.1.2024 nyní zdarma! Více informací klini na odkaz: Výměna + dárku. +
+ +
+ + +
+

149,-

+ 109,- + Do košíku +
+ + + Skladem > 5 ks + Doprava zdarma +
+ + + \ No newline at end of file diff --git a/lukaskanka/index/project/kartaProduktu/style.karta.css b/lukaskanka/index/project/kartaProduktu/style.karta.css new file mode 100644 index 0000000..16c879d --- /dev/null +++ b/lukaskanka/index/project/kartaProduktu/style.karta.css @@ -0,0 +1,147 @@ +:root { + --special-yellow: hsl(56, 94%, 49%); + --special-yellow-2: rgb(231, 231, 149); + --special-red-original: red; + --special-red: #db090d; + --special-black: #040303; + --special-white: #f7f7f7; + --special-green: rgb(0, 128, 0); + --special-agua: rgb(8, 126, 126); + --special-pink: palevioletred; +} +.product-card { + position: relative; + width: 450px; + background-color: var(--special-white); + padding: 16px; + font-family: "Franklin Gothic Medium", "Arial Narrow", Arial, sans-serif; + border: 6px solid var(--special-black); + + /* responzivita */ + width: calc(100% - 32px); + max-width: 800px; + margin: auto; +} + +.whell { + position: absolute; +} + +.product-only { + background-color: var(--special-yellow); + position: absolute; + border-radius: 50%; + width: 120px; + height: 80px; + left: 35px; + top: 60px; + text-align: center; + font-size: 25px; + color: var(--special-white); + font-weight: bold; + padding-top: 50px; +} + +.discount-badge { + background-color: var(--special-red); + position: absolute; + border-radius: 50%; + width: 120px; + height: 80px; + left: 35px; + top: 160px; + text-align: center; + font-size: 25px; + color: var(--special-white); + font-weight: bold; + padding-top: 50px; +} + +.product-image { + width: 95%; + height: 90%; +} + +h1 { + color: var(--special-agua); +} + +.button { + color: var(--special-red); + border-style: solid; + text-decoration: none; + padding-right: 6px; + padding-left: 6px; + border-radius: 6px; + background-color: var(--special-yellow-2); +} +.product-price-container { + padding: 8px; + background-color: var(--special-pink); + margin-bottom: 16px; + position: relative; + border-radius: 6px; + top: 15px; +} + +.product-price { + font-weight: bold; + font-size: 40px; + display: inline-block; + padding: 8px; + background-color: var(--special-red-original); + border-radius: 6px; +} + +.product-price-old { + font-size: 20px; + color: var(--special-white); + text-decoration: line-through; + width: 75px; + background-color: var(--special-yellow); + margin-top: 1px; + margin-bottom: 1px; + padding-left: 35px; + border-radius: 6px; + font-weight: bold; +} + +.shopping-button { + color: var(--special-black); + font-weight: bold; + font-size: 30px; + text-decoration: none; + position: absolute; + top: 30px; + right: 30px; + border-radius: 6px; + background-color: var(--special-yellow-2); + padding-left: 5px; + padding-right: 5px; + border-style: solid; +} + +.stock { + font-weight: bold; + color: var(--special-green); + font-size: 20px; + padding: 10px; +} + +.transport { + padding-left: 135px; + font-size: 20px; + font-weight: bold; +} + +.button-container { + margin-top: 10px; + /* margin-bottom: 15px; */ +} + +/* ˇMobily */ +@media screen and (max-width: 600px) { + body { + width: calc(100% - 16px); + } +} diff --git a/lukaskanka/index/project/nature/images/PngItem_1608357.png b/lukaskanka/index/project/nature/images/PngItem_1608357.png new file mode 100644 index 0000000..f7dec9b Binary files /dev/null and b/lukaskanka/index/project/nature/images/PngItem_1608357.png differ diff --git a/lukaskanka/index/project/nature/images/photo-1512419180521-2c5585bdf851.avif b/lukaskanka/index/project/nature/images/photo-1512419180521-2c5585bdf851.avif new file mode 100644 index 0000000..efc2718 Binary files /dev/null and b/lukaskanka/index/project/nature/images/photo-1512419180521-2c5585bdf851.avif differ diff --git a/lukaskanka/index/project/nature/images/photo-1540503831458-3237544b2ce5(1).avif b/lukaskanka/index/project/nature/images/photo-1540503831458-3237544b2ce5(1).avif new file mode 100644 index 0000000..f9d866f Binary files /dev/null and b/lukaskanka/index/project/nature/images/photo-1540503831458-3237544b2ce5(1).avif differ diff --git a/lukaskanka/index/project/nature/images/photo-1540503831458-3237544b2ce5.avif b/lukaskanka/index/project/nature/images/photo-1540503831458-3237544b2ce5.avif new file mode 100644 index 0000000..3e6e5b2 --- /dev/null +++ b/lukaskanka/index/project/nature/images/photo-1540503831458-3237544b2ce5.avif @@ -0,0 +1,117 @@ + + + + + + + + Projekty + + + + + + + + + + +
+ + + +
+ + + + +
+

+ Vítám tě na této stránce, která slouží jako mapa pro mé projekty. +

+

+ Zde najtete projekty věnující se k tvorbě webu a hlavně mou cestu Akademií Engeto. +

+

+ Všechny projekty jsou vytvořeny v HTML, CSS a strochou JavaScriptu. Ale určitě jsem přidám i další + projekty, které tvořím mimo Akademii.

+

+ Projekty které se netýkají tworby webu, najdete na mém GitHubu přes tento odkaz na Gitea. +

+

+ U každého projektu najdete popis a odkaz na něj. Buď na Gitea nebo na stránky, kde je projekt umístěn. +

+
+ +
+
+

Projekt 1: Tento Blog

+

+ Tento projekt je vytvořen mimo Akademii Engeto. Je to můj osobní blog, který postupně vylepšuji. + Tato stránka slouží čistě jako má prezentace.

+

+ Postupně jsem přidávám své znolosti z HTML, CSS a také se snažím aby web byl co nejlépe + responzivní. Tento projekt je nekončicí koloběh. +

+
+ +
+

Projekt 2: Životopis

+

+ Tento projekt je jako první úkol v Akademii.

+

Zadání bylo vytvořit jednoduchý životpis na procvičení základů HTML a CSS. Později jsem ještě pomocí + CSS nastavil v úkolu responsivní web pro mobilní zařízení.

+

+

Projekt Životopis najdete zde.

+
+
+

Projekt 3: Karta produktu

+

Karta produktu. Na tomto projektu jsme se naučily pozicování elementu a pojmy jako Margin a Padding. +

+

Projekt Karta produkdu najdete zde

+
+ +
+

Projekt 4: Nature and Culture

+

Tento projekt je zaměřen na responsivitu webu pro mobilní zařízení a také jsme použily porvé Flexbox. +

+

Projekt Nature and Culture najdete zde

+ +
+
+

Projekt 5: Your Travel Assistant

+

Tento projekt je vytvořen mimo Akademii Engeto. Jedná se o stránku pro cestovatele.

+

Zadání jsme měli jako na reálném projektu a grafické rozložení se dělalo dle Figmi. Tento projekt byl hodnocený a je jeden ze tří projektů k získání certifikátu v Akademii.

+

Projekt najdeš pod tímto odkazem. Od finální verze co jsem odevzdal se mírně liší, ještě před odevzdáním jsem vychytával poslední mouchy.

+
+
+
+ + + +
+ Copyright © Lukáš Kaňka 2024 +
+
+ + diff --git a/lukaskanka/index/project/nature/nature-and-culture.php b/lukaskanka/index/project/nature/nature-and-culture.php new file mode 100644 index 0000000..669eb34 --- /dev/null +++ b/lukaskanka/index/project/nature/nature-and-culture.php @@ -0,0 +1,41 @@ + + + + + + + + Hero + + + + + + + +
+
+
Exploring Icelandic Villages
+
+

Nature and Culture Converge

+
+
+
+ + + + +
+ +
+ + + \ No newline at end of file diff --git a/lukaskanka/index/project/nature/style-nature.css b/lukaskanka/index/project/nature/style-nature.css new file mode 100644 index 0000000..ab1c6f8 --- /dev/null +++ b/lukaskanka/index/project/nature/style-nature.css @@ -0,0 +1,115 @@ +:root { + --my-white: #fff; + --my-pink: #f08d8f; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + margin: 16px 32px; +} + +.hero-section { + height: 70vh; + background-image: url(images/photo-1540503831458-3237544b2ce5.avif); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + border-radius: 12px; + margin-bottom: 10px; + position: relative; +} + +.hero-text { + position: absolute; + left: 32px; + bottom: 16px; + color: var(--my-white); +} + +.hero-subtitle { + font-size: 20px; +} +.hero-title { + margin-top: 8px; +} + +.icon { + width: auto; + height: auto; + display: none; + padding: 14px; + margin-left: auto; + /* display: flex; */ +} +.icon img { + width: 100%; + height: 100%; + /* display: flex; */ + /* align-items: center; */ +} + +.image-container { + width: 50%; +} +.image-container img { + width: 100%; + height: 100%; + border-radius: 12px; +} +nav { + height: 55px; + background-color: var(--my-pink); + display: flex; + justify-content: space-evenly; + text-decoration: none; + margin-bottom: 10px; + border-radius: 12px; +} +nav a { + color: var(--my-white); + text-decoration: none; + font-size: 20px; + font-weight: bold; + list-style-type: none; +} + +ul { + display: flex; + list-style-type: none; + gap: 65px; + padding-top: 16px; + padding-bottom: 16px; +} + +/* Mobile - setting */ + +@media (max-width: 768px) { + body { + margin: 8px; + } + + .hero-subtitle { + font-size: 18px; + } + + .hero-title { + font-size: 14px; + } + + .icon { + display: block; + } + + .image-container { + width: 100%; + } + + nav a { + display: none; + } +} diff --git a/lukaskanka/index/project/zivotopis/Folder.DotSettings.user b/lukaskanka/index/project/zivotopis/Folder.DotSettings.user new file mode 100644 index 0000000..ef0428b --- /dev/null +++ b/lukaskanka/index/project/zivotopis/Folder.DotSettings.user @@ -0,0 +1,2 @@ + + ThisComputer \ No newline at end of file diff --git a/lukaskanka/index/project/zivotopis/README.md b/lukaskanka/index/project/zivotopis/README.md new file mode 100644 index 0000000..2e30f41 --- /dev/null +++ b/lukaskanka/index/project/zivotopis/README.md @@ -0,0 +1,3 @@ +# zivotopis_engeto + +První zadání pro nepovinný domácí úkol, vytvořit CV. diff --git a/lukaskanka/index/project/zivotopis/image/1702045296079.jpeg b/lukaskanka/index/project/zivotopis/image/1702045296079.jpeg new file mode 100644 index 0000000..c0b1c93 Binary files /dev/null and b/lukaskanka/index/project/zivotopis/image/1702045296079.jpeg differ diff --git a/lukaskanka/index/project/zivotopis/style-cv.css b/lukaskanka/index/project/zivotopis/style-cv.css new file mode 100644 index 0000000..fe865c0 --- /dev/null +++ b/lukaskanka/index/project/zivotopis/style-cv.css @@ -0,0 +1,86 @@ +:root { + --my-black: black; + --my-beckground: #ded4d4; + max-width: 1200px; + margin: auto; +} + +body { + background-color: var(--my-beckground); + max-width: 1200px; + margin: auto; + margin-bottom: 25px; +} +@media screen and (max-width: 600px) { + body { + width: calc(100% - 16px); + } +} + +footer { + position: fixed; + bottom: 0; +} + +.tlacitko { + color: var(--my-black); +} + +td, +th { + border: 1px solid var(--my-black); + padding: 15px; +} + +.flexbox { + display: flex; + max-width: auto; + margin: auto; +} +.flexbox-content { + display: flex; + flex-direction: column; +} + +.menu { + margin-top: 25px; +} + +.content { + order: 2; + flex: 3; + padding: 55px; + margin-top: -45px; +} +.dot { + list-style-type: none; +} +.jobs, +.course, +.fun { + font-size: 20px; +} +.title { + text-align: center; + order: 1; +} + +@media screen and (max-width: 600px) { + .flexbox { + flex-direction: column; + } + + .menu { + order: 1; + text-align: center; + } + .dot-none { + list-style-type: none; + } + /* .content { + order: 3; + } */ + .title { + order: -1; + } +} diff --git a/lukaskanka/index/project/zivotopis/zivotopis.html b/lukaskanka/index/project/zivotopis/zivotopis.html new file mode 100644 index 0000000..60d819a --- /dev/null +++ b/lukaskanka/index/project/zivotopis/zivotopis.html @@ -0,0 +1,192 @@ + + + + + + + + + + + + Životopis + + + +
+ + + + +
+
+

ŽIVOTOPIS
LUKÁŠ KAŇKA

+
+ + +
+ +
+

O MNĚ

+
+

+ IT nadšenec s pozitivním přístupem k životu a vášní pro technologie. + Do světa IT jsem vstoupil jako Support, pak mě osud dovedl na pozici + Testera a v současné době měním svůj kariérní směr do Front-Endu. Kód + i programování mě lákalo už dlouho, baví mě zobrazení okamžitého + výsledku, který mi umožňuje zlepšení a zdokonalení kódu. Aktuálně se + vzdělávám v JavaScript, TypeScript, HTML, CSS. Jako návazný krok bych své znalosti rád + prohluboval ve frameworcích React, Angular. +

+
+
+

PRACOVNÍ ZKUŠENOSTI

+
+
    +
  • + Vývojář na platformě Smart +
  • +
  • Kyndryl [ 15/05/2022 – ]
  • +
  • Město: Praha
  • +
  • Země: Česko
  • +
  • Vývojář na platformě Smart pro Českou spořitelnu.
  • +
  • Technologie:Jira, GitHub, TypeScript, Kibana.
  • +
+
    +
  • + Tester softwaru +
  • +
  • Uniprog Solutions, a.s [ 15/08/2022 – 14/08/2023 ]
  • +
  • Město: Praha
  • +
  • Země: Česko
  • +
  • Manuální testování PowerBuilder aplikací.
  • +
  • Údržba a oprava automatizovaných testů Cucumber.
  • +
  • Manuální testování webových aplikací dle Test Case a dokumentace.
  • +
  • Komunikace napříč vývojovými týmy.
  • +
  • Technologie: MSSQL, Jira, PowerBuilder, GitLab.
  • +
+
    +
  • IT support
  • +
  • Comfort Finance Group CFG Živnostník [ 04/2022 – 07/2022 ]
  • +
  • Město: Praha
  • +
  • Země: Česko
  • +
  • Poskytování IT podpory uživatelům (SW, HW), onboarding nováčků, + evidence skladu vybavení, řešení nastalých technických problémů.
  • +
  • Reporting systémových chyb na adekvátní oddělení.
  • +
  • Práce v OS Ubuntu Linux.
  • +
  • Práce s nástroji jako Intergromat, Jira.
  • +
+
    +
  • Řidič dodávky
  • +
  • + Artglass Lighting Na plný úvazek [ 03/2016 – 04/2020 ]
    + Země: Česko
    + Řízení dodávky, komunikace se zákazníky, podpora prodeje. +
  • +
+
    +
  • Řidič nákladního vozu
  • +
  • + ČSAD Liberec Na plný úvazek [ 07/2006 – 08/2014 ] +
  • +
  • Řízení nákladních vozidel (MAN, DAF, Iveco, Renault). +
  • +
+
+
+

VZDĚLÁNÍ A ODBORNÁ PŘÍPRAVA

+
+
    +
  • Základy Testingu, SQL, Web Services
  • +
  • + Acamar [ 08/2020 ] +
  • +
  • Město: Praha
  • +
  • Země: Česko
  • +
+
    +
  • Úvod do Playwright
  • +
  • Tesena [ 04/2023 ]
  • +
  • Město: Praha
  • +
  • Země: Česko
  • +
+
+
+

ZÁJMY A KONÍČKY

+
+
    +
  • + Opensource, Linux, Sebevzdělávání v testingu a dalších technologiích, + Cyklistika +
  • +
  • + Na mi mo pracovních projektech mám základní zkušenosti se SW a + technologiemi jako: C#, .Net, NUnit, Selenium, Selenide,Cypress, + Playwrigt, Java, Linux Ubuntu a další distribuce, Docker, MacOS, + MangoDB, Windows, Obsidian.
    + Mimo jiné se ve volném čase účastním amatérských závodů na kole a rád + si zaběhám. +
  • +
+

DOBROVOLNICKÁ ČINNOST

+
+
    +
  • Maper Missing Maps
  • +
  • + Ve volném čase mapuji pro humanitární účely, v projektu + Missing Maps + pomocí OSM na platformě + Hot Tasking Manager. +
  • +
+
+
+
+
+
Copyright © Lukáš Kaňka 2023
+ + + \ No newline at end of file diff --git a/lukaskanka/index/repository/index.php b/lukaskanka/index/repository/index.php new file mode 100644 index 0000000..998b366 --- /dev/null +++ b/lukaskanka/index/repository/index.php @@ -0,0 +1,46 @@ + + + + + + + Repozitáře + + + + + + + +
+ + + +
+ + diff --git a/lukaskanka/index/services/img/1-4204059220.png b/lukaskanka/index/services/img/1-4204059220.png new file mode 100644 index 0000000..b548f45 Binary files /dev/null and b/lukaskanka/index/services/img/1-4204059220.png differ diff --git a/lukaskanka/index/services/img/600px-Arch-linux-logo-691350772.png b/lukaskanka/index/services/img/600px-Arch-linux-logo-691350772.png new file mode 100644 index 0000000..143dc53 Binary files /dev/null and b/lukaskanka/index/services/img/600px-Arch-linux-logo-691350772.png differ diff --git a/lukaskanka/index/services/img/91488-2048748032.jpg b/lukaskanka/index/services/img/91488-2048748032.jpg new file mode 100644 index 0000000..7d94d2a Binary files /dev/null and b/lukaskanka/index/services/img/91488-2048748032.jpg differ diff --git a/lukaskanka/index/services/img/IMG_4835.JPG b/lukaskanka/index/services/img/IMG_4835.JPG new file mode 100644 index 0000000..1e40e24 Binary files /dev/null and b/lukaskanka/index/services/img/IMG_4835.JPG differ diff --git a/lukaskanka/index/services/img/Kali-linux-872298623.jpg b/lukaskanka/index/services/img/Kali-linux-872298623.jpg new file mode 100644 index 0000000..2cd26ab Binary files /dev/null and b/lukaskanka/index/services/img/Kali-linux-872298623.jpg differ diff --git a/lukaskanka/index/services/img/endeavourOS-astronaught-3246654328.jpg b/lukaskanka/index/services/img/endeavourOS-astronaught-3246654328.jpg new file mode 100644 index 0000000..477fb10 Binary files /dev/null and b/lukaskanka/index/services/img/endeavourOS-astronaught-3246654328.jpg differ diff --git a/lukaskanka/index/services/img/fedora-feat-5b9fe676c9e77c0050ce388c-2333270958.jpg b/lukaskanka/index/services/img/fedora-feat-5b9fe676c9e77c0050ce388c-2333270958.jpg new file mode 100644 index 0000000..0c76e2b Binary files /dev/null and b/lukaskanka/index/services/img/fedora-feat-5b9fe676c9e77c0050ce388c-2333270958.jpg differ diff --git a/lukaskanka/index/services/img/linux-penguin-and-rainbow-background-imsv6hxt0e8zcl7m-3730406657.jpg b/lukaskanka/index/services/img/linux-penguin-and-rainbow-background-imsv6hxt0e8zcl7m-3730406657.jpg new file mode 100644 index 0000000..d2e641c Binary files /dev/null and b/lukaskanka/index/services/img/linux-penguin-and-rainbow-background-imsv6hxt0e8zcl7m-3730406657.jpg differ diff --git a/lukaskanka/index/services/img/ubuntu-linux-minimal-4k-on-3840x2160-2398598343.jpg b/lukaskanka/index/services/img/ubuntu-linux-minimal-4k-on-3840x2160-2398598343.jpg new file mode 100644 index 0000000..63bcddb Binary files /dev/null and b/lukaskanka/index/services/img/ubuntu-linux-minimal-4k-on-3840x2160-2398598343.jpg differ diff --git a/lukaskanka/index/services/img/wp7596264.jpg b/lukaskanka/index/services/img/wp7596264.jpg new file mode 100644 index 0000000..07190f1 Binary files /dev/null and b/lukaskanka/index/services/img/wp7596264.jpg differ diff --git a/lukaskanka/index/services/img/wp8843183-1041051902.jpg b/lukaskanka/index/services/img/wp8843183-1041051902.jpg new file mode 100644 index 0000000..ffd1483 Binary files /dev/null and b/lukaskanka/index/services/img/wp8843183-1041051902.jpg differ diff --git a/lukaskanka/index/services/index.php b/lukaskanka/index/services/index.php new file mode 100644 index 0000000..fb371f3 --- /dev/null +++ b/lukaskanka/index/services/index.php @@ -0,0 +1,224 @@ + + + + + + + + + + + + Lukáš Kaňka - IT služby + + +
+ + + + + +
+
+

+ Lukáš Kaňka
+ IT služby pro Vás

+
+
+ + +
+
+
+
+

O mně

+

Jsem IT nadšenec s pozitivním přístupem k životu a vášní pro + technologie, ve kterých se neustále vzdělávám. Absolvoval jsem kurz + testingu a SQL v Acamaru, další kurz byl web developer u společnosti Engeto. Pracoval jsem na pozici testera ve společnosti Uniprog a nyní pracuji ve společnosti Kyndryl na projektu České Spořitelny pro platformu SMART. +

+

+ Nabízím služby v obkasti IT se zaměřením na open-source a Linux. Své služby nabízím po celé Praze, Jablonci + nad Nisou a online. Ceny startují na 150kč/1hod. + Služby nabízím jednotlivcům tak i spolkům či školám adt. Faktura je samořejmostí. +

+
+
# +
+
+
+ + +
+
+
+

Nabízím tyto služby

+

+

    + +
  • Instalace Linuxu.
  • +
  • Pomůžu vám najít vhodnou Linuxovou distribuci přímo pro Vás. Nejoblíbenější distribuce jsou Ubuntu, + Fedora, Manjaro či Zendalona pro zrakově postižené. +
  • +
  • Naučím vás práci v Linuxu, seznámím s Terminálem a OpenSource.
  • +
  • Nastavím v Linuxu váš nový SSD disk.
  • +
  • Seznámím vás s programy pro Linux které jsou alternativou pro programy Windows.
  • +
  • Vybereme a přispůsobíme vám prostředí v Linuxu.
  • +
  • Rychlá podpora pokud si nebudete vědět rady.
  • +
  • Tvorba on-Line vizitek - zajistím doménu i hosting, pomohu s návrhem vizitky. Základní vizitky + děláme v HTML a CSS, složitější v Wordpressu. +
  • +
  • Tvorba webů pro restaurace - tyto weby tvoříme v Wordpresu s jednoduchou administrací kde si můžete + jidelní lístky jednoduše spravovat. +
  • +
+

+
+ +
    +
  • + +

    Instalace Linuxu

    + +
  • +
  • + +

    Práce s Linuxem a Open Source aplikacemi

    +
  • +
  • + +

    Tvorba vizitek a menších webů

    +
  • +
  • + +

    Poradenství a administrace

    +
  • +
+
+
+ + +
+
+
+
+
+
+
Stačí si vybrat
+
+
+
+
+
+
+ + +
+
+
+ +
+

+

+
+
+ +

Telefoní číslo: +420 725 303 747

+

E-mail: Lukáš Kaňka

+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + \ No newline at end of file diff --git a/lukaskanka/index/services/script.js b/lukaskanka/index/services/script.js new file mode 100644 index 0000000..a508498 --- /dev/null +++ b/lukaskanka/index/services/script.js @@ -0,0 +1,17 @@ +window.onscroll = function () { + scrollFunction(); +}; + +function scrollFunction() { + if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) { + document.getElementById("scrollToTopBtn").style.display = "block"; + } else { + document.getElementById("scrollToTopBtn").style.display = "none"; + } +} + +// Posunout nahoru, když uživatel klikne na tlačítko +function scrollToTop() { + document.body.scrollTop = 0; // Pro Safari + document.documentElement.scrollTop = 0; // Pro ostatní prohlížeče +} \ No newline at end of file diff --git a/lukaskanka/index/services/style.css b/lukaskanka/index/services/style.css new file mode 100644 index 0000000..5c738f1 --- /dev/null +++ b/lukaskanka/index/services/style.css @@ -0,0 +1,578 @@ +:root { + --word-black: #000; + --word-white: #fff; + --link-one: #efa69d; + --link-two: #e9877b; + --background-one: #33292a; + --background-two: #644b4f; + --background-three: #333333; + --background-four: #f2f2f2; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: "Roboto", sans-serif; +} + +/* Navigace (horní menu) */ +nav { + padding: 10px; + background-color: var(--background-one); + font-size: 20px; +} +a { + text-decoration: none; + color: var(--word-white); +} + +.dot { + list-style: none; +} + +nav ul { + list-style: none; + display: flex; + justify-content: space-between; + flex-grow: 1; +} + +.navigation { + width: 65%; + margin: 0 auto; +} + +.icon { + width: auto; + height: 22px; + display: none; + margin-left: auto; + margin-right: 12px; +} + +.icon img { + width: 100%; + height: 100%; +} + +@media (max-width: 768px) { + .navigation { + width: 90%; + margin: 0 auto; + } + + nav ul { + flex-direction: column; + } + + nav a { + /*display: none;*/ + } + + /*.icon {*/ + /* display: block;*/ + /*}*/ +} + +/* Hero - section */ +.hero-section { + height: 80vh; + background-image: url(img/wp7596264.jpg); + background-size: 70%; + background-position: center; + background-repeat: no-repeat; +} + +.hero-text-wrapper { + position: relative; + width: 65%; + margin: 0 auto; + height: 100%; +} + +.hero-text { + color: var(--word-white); + position: absolute; + right: 0; + bottom: 50px; + font-size: 80px; + text-align: right; +} + +.h2-about { + font-weight: 700; +} + +@media (max-width: 768px) { + .hero-text-wrapper { + width: 90%; + margin: 0 auto; + } + .hero-text { + font-size: 35px; + height: 80px; + margin-bottom: 5px; + color: black; + } +} + +/* About sekce */ + +.about-section { + margin: 45px 0; +} + +.about-section-wrapper { + width: 65%; + margin: 0 auto; + display: flex; + gap: 20px; +} + +.about-text { + flex: 1; +} + +.about-img { + flex: 1; +} +img { + width: 100%; + height: 100%; + object-fit: cover; +} + +@media (max-width: 768px) { + .about-section-wrapper { + flex-direction: column; + width: 90%; + margin: 0 auto; + } + + .about-text { + text-align: left; + } + + .about-img { + text-align: center; + } + + .about-text-p { + padding-top: 15px; + } +} + +/* What We Do */ + +.what-section { + background-color: var(--background-one); + color: var(--word-white); +} + +.what-section-wrapper { + width: 65%; + margin: 0 auto; +} +.what-text { + text-align: center; +} +.h2-what-we { + font-size: 38px; + text-align: center; + padding-top: 45px; + padding-bottom: 35px; +} + +.where-text { + text-align: center; +} +.icon-what-section { + margin-top: 45px; + padding: 45px; + list-style: none; + display: flex; + justify-content: space-between; + flex-grow: 1; +} + +.img-icons { + width: 100px; + height: 100px; + align-items: center; +} + +.icon-text { + text-align: center; + padding-top: 15px; + font-size: 25px; +} + +@media (max-width: 768px) { + .what-section-wrapper { + width: 90%; + margin: 0 auto; + } + + .icon-what-section { + flex-direction: column; + align-items: center; + text-align: center; + } + + .img-icons { + width: 80px; + height: 80px; + margin-top: 20px; + align-items: center; + } + + .icon-text { + padding-top: 0px; + } +} + +/* Our Trips */ + +.trips-section { + margin-top: 45px; + margin-bottom: 45px; +} +.trips-section-wrapper { + display: flex; + flex-wrap: wrap; + width: 65%; + margin: auto; + gap: 10px; +} + +.images-item { + height: 222px; + width: 32%; + flex-shrink: 1; + border-radius: 4px; +} + +.images-trips-1 { + background-image: url(img/linux-penguin-and-rainbow-background-imsv6hxt0e8zcl7m-3730406657.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-2 { + background-image: url(img/1-4204059220.png); + background-size: cover; + background-position: center; +} + +.images-trips-3 { + background-image: url(img/fedora-feat-5b9fe676c9e77c0050ce388c-2333270958.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-4 { + background-image: url(img/ubuntu-linux-minimal-4k-on-3840x2160-2398598343.jpg); + background-size: cover; + background-position: center; +} + +.text-trips { + background-color: var(--background-four); + color: var(--word-black); + display: flex; + justify-content: center; + align-items: center; + font-size: 32px; + font-weight: 700; +} + +.images-trips-5 { + background-image: url(img/Kali-linux-872298623.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-6 { + background-image: url(img/wp8843183-1041051902.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-7 { + background-image: url(img/91488-2048748032.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-8 { + background-image: url(img/endeavourOS-astronaught-3246654328.jpg); + background-size: cover; + background-position: center; +} + +@media (max-width: 768px) { + .trips-section-wrapper { + width: 90%; + margin: 0 auto; + } + + .images-item { + width: 333px; + height: 222px; + } + + .text-trips { + height: 80px; + } +} + +/* Where togo */ +.where-section { + background-color: var(--background-two); + color: var(--word-white); + display: flex; +} + +.where-section-wrapper { + width: 65%; + margin: 0 auto; + padding-top: 45px; + padding-bottom: 45px; + display: flex; +} + +.where-text { + display: flex; +} + +.h2-where { + flex: 1; + font-size: 25px; + width: 272px; + height: 114px; + text-align: left; +} + +.where-text-div { + flex: 1; + width: 572; + height: 201; + text-align: left; +} + +.contact-text { + margin-top: 20px; +} + +.contact-button { + margin-top: 35px; + background-color: var(--background-four); + width: 133px; + height: 43px; + border-radius: 4px; + text-align: center; + line-height: 43px; +} + +.contact-button-text { + font-size: 14px; + font-weight: 700; + font-family: Inter; + color: var(--word-black); + display: block; +} +.mobile { + display: none; +} + +@media (max-width: 768px) { + .where-section-wrapper { + width: 90%; + margin: 0 auto; + } + + .where-text { + flex-direction: column; + } + .desktop { + display: none; + } + + .mobile { + display: block; + font-size: 25px; + margin-bottom: 25px; + } +} + +/* Reviews section */ + +.reviews-section { + width: 65%; + margin: 0 auto; + margin-top: 45px; + margin-bottom: 45px; +} +.h2-reviews { + text-align: center; + padding-bottom: 20px; +} +.reviews-text { + width: 332px; + height: 159px; + text-align: center; + margin: auto; +} + +.reviews-card-wrapper { + display: flex; + align-items: center; + justify-content: space-evenly; + gap: 300px; +} + +.reviews-card { + width: 378.49px; + height: 346px; + text-align: center; +} + +.reviews-card-1 { + width: 378.49px; + height: 346px; + text-align: center; +} + +.reviews-card img { + width: 122.13px; + height: 111px; + border-radius: 50%; +} + +.reviews-card-1 img { + width: 122.13px; + height: 111px; + border-radius: 50%; +} + +.reviews-card-text { + margin-top: 20px; +} + +.reviews-name { + font-weight: 700; + padding-top: 50px; + height: 19px; + align-items: center; +} + +@media (max-width: 768px) { + .reviews-section { + width: 90%; + margin: 0 auto; + } + + .reviews-card-wrapper { + flex-direction: column; + width: 90%; + margin: 0 auto; + gap: 95px; + } + .reviews-card { + width: 324px; + } + + .reviews-card-1 { + width: 324px; + } + + .reviews-text { + width: 263px; + } + + .h2-reviews { + padding-top: 40px; + } + + .reviews-name { + padding-bottom: 40px; + } +} + +/* Photo gallery */ +.photo-gallery { + /* display: flex; */ + /* flex-wrap: wrap; */ +} +.photo-gallery-wrapper { + display: flex; + flex-wrap: wrap; +} + +.picture-img { + width: 100%; + height: auto; + display: block; + object-fit: cover; + max-width: 50%; +} + +@media (max-width: 768px) { + .photo-gallery-wrapper { + flex-direction: column; + margin-top: 100px; + } + .picture-img { + max-width: 100%; + height: 260px; + } +} + +/* Footer */ +.footer-wrapper { + background-color: var(--background-three); + padding: 45px; +} + +.footer-text { + text-align: center; +} +.footer-contact { + color: var(--link-two); + text-decoration: underline; + font-weight: 700; +} +.footer-text-p { + padding-top: 20px; + text-align: center; + color: var(--word-white); + font-weight: 700; +} + +@media (max-width: 768px) { + .footer-contact { + font-size: 12px; + } + .footer-text-p { + font-size: 10px; + } +} + + +/* Rolovací tlačítko */ + #scrollToTopBtn { + display: none; + position: fixed; + bottom: 20px; + right: 20px; + /*butoon přes obsah*/ + z-index: 99; + outline: none; + cursor: pointer; + padding: 15px; + border-radius: 50%; + background-color: transparent; \ No newline at end of file diff --git a/lukaskanka/index/socials/index.php b/lukaskanka/index/socials/index.php new file mode 100644 index 0000000..dd9dc69 --- /dev/null +++ b/lukaskanka/index/socials/index.php @@ -0,0 +1,102 @@ + + + + + + + Socials + + + + + + + + +
+ + +
+ +
+ + diff --git a/lukaskanka/index/terminal-space/README.md b/lukaskanka/index/terminal-space/README.md new file mode 100644 index 0000000..cf235f4 --- /dev/null +++ b/lukaskanka/index/terminal-space/README.md @@ -0,0 +1,7 @@ +# Terminal space +Prozatím nás najdeš na této [doméně](https://lukaskanka.cz/index/terminal-space/index.html), ale už se intenzivně pracuje na vlastní doméně pro Terminal space. +

Vítám Tě na Terminal space!

+

Web je věnován Terminálům konzolím a hlavně aplikacím pro terminály.

+

Najdeš tu tipy, návody, novinky a další obsah ze světa terminálu.

+

Terminal Space prymárně míří na uživatele Linuxu a macOS, ale spousty obsahu budeš moci aplikovat ve Windows.

+ diff --git a/lukaskanka/index/terminal-space/colors.css b/lukaskanka/index/terminal-space/colors.css new file mode 100644 index 0000000..110b1d7 --- /dev/null +++ b/lukaskanka/index/terminal-space/colors.css @@ -0,0 +1,14 @@ +:root { + --dracula-body-bg: #2a232b; + --dracula-color: #f8f8f2; + --dracula-header-bg: #2a232b; + --dracula-scrollToTopBtn-color: #9fea8a; + --dracula-links-color: #f76b00; + --dracula-nav-bg: #2a232b; + --dracula-nav-links-color: #f76b00; + --dracula-h1-color: #e54472; + --dracula-h2-color: #18f700; + --dracula-solid-bg: #2a232b; + --dracula-solid-color: #f76b00; + --dracula-footer-bg: #2a232b; +} diff --git a/lukaskanka/index/terminal-space/img/config.png b/lukaskanka/index/terminal-space/img/config.png new file mode 100644 index 0000000..325c9f2 Binary files /dev/null and b/lukaskanka/index/terminal-space/img/config.png differ diff --git a/lukaskanka/index/terminal-space/img/fzf.png b/lukaskanka/index/terminal-space/img/fzf.png new file mode 100644 index 0000000..3c0db79 Binary files /dev/null and b/lukaskanka/index/terminal-space/img/fzf.png differ diff --git a/lukaskanka/index/terminal-space/img/home.png b/lukaskanka/index/terminal-space/img/home.png new file mode 100644 index 0000000..ebe4c7c Binary files /dev/null and b/lukaskanka/index/terminal-space/img/home.png differ diff --git a/lukaskanka/index/terminal-space/img/icons8-rocket.gif b/lukaskanka/index/terminal-space/img/icons8-rocket.gif new file mode 100644 index 0000000..c2a91fa Binary files /dev/null and b/lukaskanka/index/terminal-space/img/icons8-rocket.gif differ diff --git a/lukaskanka/index/terminal-space/img/logo.png b/lukaskanka/index/terminal-space/img/logo.png new file mode 100644 index 0000000..67a8659 Binary files /dev/null and b/lukaskanka/index/terminal-space/img/logo.png differ diff --git a/lukaskanka/index/terminal-space/img/terminal-icon.png b/lukaskanka/index/terminal-space/img/terminal-icon.png new file mode 100644 index 0000000..eabe3b3 Binary files /dev/null and b/lukaskanka/index/terminal-space/img/terminal-icon.png differ diff --git a/lukaskanka/index/terminal-space/img/terminal.png b/lukaskanka/index/terminal-space/img/terminal.png new file mode 100644 index 0000000..a3233d7 Binary files /dev/null and b/lukaskanka/index/terminal-space/img/terminal.png differ diff --git a/lukaskanka/index/terminal-space/index.php b/lukaskanka/index/terminal-space/index.php new file mode 100644 index 0000000..b870cb0 --- /dev/null +++ b/lukaskanka/index/terminal-space/index.php @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + Terminal space + + + +
+

💾 Terminal space

+ + + + +
+
+ + +
+
+

Terminal space:

+

Vítám Tě na Terminal space!

+

Web je věnován Terminálům konzolím a hlavně aplikacím pro terminály.

+

Najdeš tu tipy, návody, novinky a další obsah ze světa terminálu.

+

Terminal Space prymárně míří na uživatele Linuxu a macOS, ale spousty obsahu budeš moci aplikovat ve Windows.

+
+
+

Kontakty:

+

+ 👉 🚀 ApolloNvim Telegram skupina +

+

+ 👉 Osobní web autora 💾 Terminal space +

+

+ 👉 Gitea profil +

+

+ 👉 GitHub +

+

+ + Mastodon +

+
+ +
+

Podpora:

+

+ 👉 Pokud jakkoliv chcete podpořit nebo se podílet na obsahu a + funkčnosti 💾 Terminal space, prosím budu rád když mi zde napíšete. +

+

👉 Taky můžete tento projekt podpořit pár Satoshi:

+ Satoshi +
+
+

Další projekty a odkazy:

+

+ 👉 ArchLinux CZ +

+

+ 👉 + Vyhledávač SearXNG CZ +

+

+ 👉 + EndeavourOS Linux +

+

+ 👉 i3 window manager +

+
+ + +
+ + + + diff --git a/lukaskanka/index/terminal-space/install.php b/lukaskanka/index/terminal-space/install.php new file mode 100644 index 0000000..e967d7a --- /dev/null +++ b/lukaskanka/index/terminal-space/install.php @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + ApolloNvim Instalace + + + +
+

🚀ApolloNvim Instalace

+ + + + +
+
+
+
+

Instalace a nastavení:

+

+ + Vždy se podívej před instalací + nových pluginu, na dokumentaci k + plaginům na Githubu. Předejdeš + tím případným problémům! Pokud + si nejsi jistý postupem nebo ti + není něco jasné, tak raději se + podívej do dokumentace,napiš nám + nebo fórech najdeš odpověď. Také si vždy vše před změnou zálohuj! + +

+ +

+ 👉 Pokud ještě nemáte nainstalujte si + Neovim. +

+

+ 👉 Bude potřeba nainstalovat plug.vim + aby jste mohl/a instalovat rozšíření. +

+

+ 👉 Běžte na tuto + stránku + pod Installation si najděte svůj + operační systém a zkopírujte odkaz pod + ním do svého terminálu. +

+

+ 👉 Nejprve si však zálohujte své + aktuální nastavení Neovim!!! +

+

👉 Linux & Mac:

+
+

/home/user/.config/nvim/init.vim

+
+

Windows:

+
+

~\AppData\Local\nvim

+
+
+
+

Node.js:

+

+ 👉 Doporučuji mít nainstalovaný + Node.js. +

+

+ 👉 Dále si v Node.js nainstalujte + Live-server + příkazem: +

+
+

npm i live-server

+
+

+ 👉 Ve svém projektu budete moci pouštět + svůj index.html příkazem: +

+
+

npx live-server

+
+

+ 👉 Pro správnou funkčnost LSP si + doinstalujte tyto balíčky: +

+ +

+ vscode-html-langserver +

+

+ vscode-css-langserver +

+

+ typescript-language-server +

+

+ emmet-ls +

+

+ eslint +

+

+ vtailwindcss-language-server +

+

+ marksman +

+

+ markdoc-ls +

+
+
+

Neovim:

+

+ 👉 Pro instalaci 🚀 ApolloNvim Distra + stačí stáhnout pouze soubor init.vim s + tohoto + repositáře. +

+

+ 👉 Uložte ho do kořenováho adresáře + ~/.. /nvim dle tvého + OS. + Nezapomeňte na zálohu + stávajících souborů +

+

+ 👉 Neovim pustíte v terminálu příkazem + nvim. +

+

👉 Odklikejte chybová hlášení.

+

+ 👉 V Neovimu zadejte do command line + PlugIns , tím + nainstalujete všechny pluginy. + Restartujte Neovim. +

+

+ 👉 Pokud Vám některý plugin chybí, + můžete ho lehce doinstalovat nebo naopak + odinstalovat pomocí + plug.vim. Více + informací najdete na GitHubu + plug.vim + nebo velmi rád poradím viz. o nás. +

+

+ 👉 Pokud některý plugin nechcete + používat stačí v souboru + init.vim ho + zakomentovat pomocí dvojitých uvozovek + ". +

+

+ 👉 Do command line ještě zadejte Coc + příkaz pro doinstalování zbylých + pluginů: +

+
+

+ CocInstall coc-todolist + coc-tailwindcss coc-json + coc-html-css-support coc-html + coc-emmet coc-xml coc-tsserver + coc-lsp-wl coc-lit-html + coc-htmldjango coc-css + coc-markdown-preview-enhanced + coc-markdownlint +

+
+

+ 👉 A ještě jednou restartujte Neovim a + vše máte připravené. +

+

+ 👉 Tuto konfiguraci používám na Linuxu i + MacOS. Je ozkoušena i na Windows 11. +

+
+ + + +
+ + + diff --git a/lukaskanka/index/terminal-space/kakoune/img/command.png b/lukaskanka/index/terminal-space/kakoune/img/command.png new file mode 100644 index 0000000..8358f68 Binary files /dev/null and b/lukaskanka/index/terminal-space/kakoune/img/command.png differ diff --git a/lukaskanka/index/terminal-space/kakoune/img/config.png b/lukaskanka/index/terminal-space/kakoune/img/config.png new file mode 100644 index 0000000..e77bec8 Binary files /dev/null and b/lukaskanka/index/terminal-space/kakoune/img/config.png differ diff --git a/lukaskanka/index/terminal-space/kakoune/img/home.png b/lukaskanka/index/terminal-space/kakoune/img/home.png new file mode 100644 index 0000000..0b3b383 Binary files /dev/null and b/lukaskanka/index/terminal-space/kakoune/img/home.png differ diff --git a/lukaskanka/index/terminal-space/kakoune/img/icons8-rocket.gif b/lukaskanka/index/terminal-space/kakoune/img/icons8-rocket.gif new file mode 100644 index 0000000..c2a91fa Binary files /dev/null and b/lukaskanka/index/terminal-space/kakoune/img/icons8-rocket.gif differ diff --git a/lukaskanka/index/terminal-space/kakoune/img/kakoune_logo_full.png b/lukaskanka/index/terminal-space/kakoune/img/kakoune_logo_full.png new file mode 100644 index 0000000..5e27405 Binary files /dev/null and b/lukaskanka/index/terminal-space/kakoune/img/kakoune_logo_full.png differ diff --git a/lukaskanka/index/terminal-space/kakoune/index.html b/lukaskanka/index/terminal-space/kakoune/index.html new file mode 100644 index 0000000..50c84e9 --- /dev/null +++ b/lukaskanka/index/terminal-space/kakoune/index.html @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + Kakoune Czech Community + + + +
+ + + + + + +
+
+ +
1
+ + +
+
+

Úvod:

+

+ 👉 Kakoune Front-End Power postavený na + LSP. +

+

+ 👉 Kakoune je modální editor pro + Linux a + macOS + jako je třeba + Vim či + Neovim. . Z Kakoune + vychází také jeden velmi oblíbený modální editor + Helix-editor. + Jak Kakoune, tak Helix se od Vim a Neovim liší v ovládání, kde je opačná + logika příkazu a je bližší lidské řeči. Nespornou výhodou Kakoune je + oproti Helixu možnost rozšířit aplikaci o pluginy. Proto je + Kakoune vhodný pro zkušenější uživatele. Náš web by Ti měl pomoct s + prvotním nastavením. Pokud si i tak na tento editor netroufáš, Helix je skvělá náhrada. +

+

+ 👉 Tato distribuce nefunguje tak, že jen klikneš na tlačítko a nainstaluje + se. Vede Tě k samostatné instalaci pomocí tohoto webu. Cílem je + pochopit, jak Kakoune funguje, abyste si mohli sami vše modifikovat. +

+

+ 👉 Toto nastavení je primárně pro vývoj webu, ale není problém si vše + přizpůsobit. Inspiroval jsem se pluginy, které jsem využíval ve VSCode a + Webstorm. +

+

👉 Velký důraz je kladen na rychlost a lehkost.

+

👉 Tento blog je stále ve vývoji a postupně se na něm pracuje.

+

+ 👉 Pro nejlepší zážitek s Kakoune doporučuji používat multiplexor + Zellij , ale není to samozřejmě + podmínkou. +

+
+
+

Přednosti:

+

+ 👉 Hlavní předností tohoto nastavení jsou AutoSave, + doplňování HTML, CSS, JS a zkratky k zakomentování a odkomentování + kódu. Taky je zde několik pluginu pro příjemnější práci v Kakoune. +

+

+ 👉 LSP se + mi velmi osvědčilo v modálním editoru + Helix-editor. + Mou konfiguraci Helixu najdete + zde. +

+

+ 👉 Ta nejlepší témata v Kakoune nemusíš hledat, najdeš je po instalaci. Defaultně je + v naší konfiguraci nastaveno gruvbox-dark. +

+

+ 👉 Témá v Kakoune si jednoduše změníš v command line příkazem + `colorscheme` a tlačítkem Tab se budeš přepínat mezi jednotlivými + tématy. Command mode, česky příkazový mód, vyvoláš zkratkou Ctrl + : . +

+
+
+ Homescreen + Zellij + Command +
+
+

Instalace a nastavení:

+

+ 👉 Pokud ještě nemáš, nainstaluj si, + Kakoune. +

+

👉 Nejprve si zálohuj své aktuální nastavení Kakoune!!!

+

👉 Linux & Mac:

+
+

~/.config/kak/kakrc

+
+

👉 Aby Kakoune dobře komunikoval s LSP, je potřeba mít nainstalovaný Rust.

+
+
+

Node.js:

+

+ 👉 Doporučuji mít nainstalovaný + Node.js. +

+

👉 Pro správnou funkčnost LSP si doinstaluj tyto balíčky:

+

vscode-html-language-server

+

vscode-css-language-server

+

typescript-language-server +

+

emmet-ls

+

tailwindcss-language-server +

+

marksman

+

markdoc-ls

+

👉 A také si doinstaluj tento server pro správnou funkčnost HTML v LSP příkazem:

+
+

npm install -g vscode-{html,css,json}-languageserver-bin

+
+

+ 👉 Dále si v Node.js nainstaluj + Live-server. +

+

+ 👉 Platí v případě, že chceš dělat front-end nebo programuješ v + Javascriptu. +

+

👉 Ve svém projektu budeš moci pouštět index.html příkazem:

+
+

npx live-server

+
+

👉 Všechny servery, co si můžeš pomocí LSP nainstalovat, najdeš zde.

+
+
+

Kakoune:

+

+ 👉 Pro instalaci Kakoune Front-End Power Ti stačí stáhnout pouze soubor + kakrc z tohoto repozitáře . +

+

+ 👉 Ulož ho do kořenováho adresáře ~/.config/kak/. Nezapomeň na zálohu stávajících + souborů, pokud máš i své configy. +

+

👉 Kakoune pustíš v terminálu příkazem kak.

+

+ 👉 V Kakoune zadej do command line plug-install, tím + nainstaluješ všechny pluginy. Restartuj Kakoune. +

+

+ 👉 Pokud Ti některý plugin chybí, můžeš ho lehce doinstalovat nebo + naopak odinstalovat. Více informací + najdeš v Kakoune + dokumentaci + nebo velmi Ti rád poradím viz. Kontakty. +

+

+ 👉 Pokud některý plugin nechceš používat, stačí ho v souboru + kakrc zakomentovat pomocí hastagu + #. +

+

+ 👉 Tuto konfiguraci používám na Linuxu i macOS.

+
+
+

Plán Kakoune Front-End Power:

+

+ 👉 Do budoucna můžeš očekávat tyto nové funkce a další novinky: +

+

+ 👉 Web na vlastní doméně. Zatím Kakoune Front-End Power najdeš + zde. +

+

👉 Nové pluginy.

+

+ 👉 Návody k pluginům, jak nastavit a jak s nimi pracovat. +

+

👉 Návody k práci s Kakoune.

+
+
+

Výběr pluginu v Kakoune Front-End Power:

+

+ 👉 plug.kak nejduležitější plugin, aby bylo možné instalovat další pluginy.

+

+ 👉 kakoune-lsp +

+

+ 👉 luar rozšíří možnost instalovat pluginy napsané v jazyce Lua.

+

+ 👉 byline.kak vybere celý řádek pomocí klávesy x jako v Helix-editoru.

+

+ 👉 auto-pairs automaticky doplní závorky.

+

+ 👉 fzf.kak rychlé asynchronní vyhledávaní souborů.

+
+
+

Otázky a odpovědi:

+

👉 Kolik Kakoune stojí? -> Nic, Kakoune je zdarma.

+
+
+

Kontakty:

+

+ 👉 Kakoune community Telegram skupina +

+

+ 👉 Osobní web autora +

+

+ 👉 Gitea profil +

+

+ 👉 GitHub +

+

+ 👉 + Nostr +

+

+ 👉 Mastodon +

+
+
+

Podpora:

+

+ 👉 Pokud mě chceš podpořit nebo se podílet na obsahu tohoto webu, budu rád, když mi napíšeš. +

+

👉 Taky můžeš tento projekt podpořit pár Satoshi:

+ Satoshi +
+
+

Další projekty a odkazy:

+

+ 👉 ArchLinux CZ +

+

+ 👉 + Vyhledávač SearXNG CZ +

+

+ 👉 + EndeavourOS Linux +

+

+ 👉 i3 window manager +

+
+
+ + + + + + + \ No newline at end of file diff --git a/lukaskanka/index/terminal-space/kakoune/script.js b/lukaskanka/index/terminal-space/kakoune/script.js new file mode 100644 index 0000000..c93949e --- /dev/null +++ b/lukaskanka/index/terminal-space/kakoune/script.js @@ -0,0 +1,155 @@ +//Navbar menu +const menuIcon = document.querySelector(".menu-icon"); +const menuList = document.querySelector("nav"); +const hamburgerIcon = document.querySelector(".fa-solid"); + +menuIcon.addEventListener("click", () => { + if (hamburgerIcon.classList[1] === "fa-bars") { + hamburgerIcon.classList.add("fa-xmark"); + hamburgerIcon.classList.remove("fa-bars"); + menuList.style.display = "block"; + } else { + hamburgerIcon.classList.add("fa-bars"); + hamburgerIcon.classList.remove("fa-xmark"); + menuList.style.display = "none"; + } +}); + +// Dark / Light Mode + +const body = document.querySelector("body"); +const head = document.querySelector("header"); +const links = document.querySelectorAll("a"); +const nav = document.querySelector(".navigation"); +const h1 = document.querySelector("h1"); +const nadpish2 = document.querySelectorAll("h2"); +const p = document.querySelector("p"); +const solid = document.querySelector(".fa-solid"); +const solid1 = document.querySelector(".menu-icon"); +const footer = document.querySelector("footer"); +const gotop = document.querySelector("#scrollToTopBtn"); +const theme = document.querySelector("#toggleButton"); +const box = document.querySelectorAll(".code-box"); +let isDraculaMode = false; + +// Funkce pro nastavení stylů pro Dracula mód +function setDraculaStyles() { + body.style.backgroundColor = "#2a232b"; + body.style.color = "#f8f8f2"; + head.style.backgroundColor = "#2a232b"; + theme.style.color = "#9fea8a"; + gotop.style.color = "#9fea8a"; + links.forEach((a) => { + a.style.color = "#f76b00"; + }); + nav.style.backgroundColor = "#2a232b"; + h1.style.color = "#e54472"; + nadpish2.forEach((h2) => { + h2.style.color = "#18f700"; + }); + solid.style.backgroundColor = "#2a232b"; + solid.style.color = "#f76b00"; + solid1.style.backgroundColor = "#2a232b"; + footer.style.backgroundColor = "#2a232b"; + //gotop.style.backgroundColor = "#18f700"; + //theme.style.backgroundColor = "#18f700"; +} + +// Funkce pro nastavení stylů pro Light mód; +function setKakouneStyles() { + body.style.backgroundColor = "#9fea8a"; + body.style.color = "#282a36"; + h1.style.color = "#e84046"; + theme.style.color = "#2a232b"; + links.forEach((a) => { + a.style.color = "#ea3838"; + }); + gotop.style.color = "#2a232b"; + head.style.backgroundColor = "#9fea8a"; + nav.style.backgroundColor = "#9fea8a"; + solid.style.backgroundColor = "#9fea8a"; + solid1.style.backgroundColor = "#9fea8a"; + footer.style.backgroundColor = "#9fea8a"; + nadpish2.forEach((h2) => { + h2.style.color = "#1909f4"; + }); + //gotop.style.backgroundColor = "#a7e6ef"; + //theme.style.backgroundColor = "#a7e6ef"; + box.forEach((p) => { + p.style.color = "white"; + }); +} + +// Funkce pro přepnutí módu +function toggleMode() { + if (isDraculaMode) { + // Pokud je momentálně v Dracula modu, přepnout na Light mód + setKakouneStyles(); + isDraculaMode = false; + } else { + // Pokud je momentálně v Light modu, přepnout na Dracula mód + setDraculaStyles(); + isDraculaMode = true; + } +} + +// Funkce na změnu stylů +document.getElementById("toggleButton").addEventListener("click", toggleMode); + +// Nastavení - výchozí styl na Dark +setKakouneStyles(); +isDraculaMode = true; + +// Photo Gallery -> section (zoom) +const image1 = document.querySelector(".picture"); + +image1.addEventListener("mouseenter", () => { + image1.style.transform = "scale(2.2)"; +}); + +image1.addEventListener("mouseleave", () => { + image1.style.transform = "scale(1)"; +}); + +const image2 = document.querySelector(".picture1"); + +image2.addEventListener("mouseenter", () => { + image2.style.transform = "scale(2.2)"; +}); + +image2.addEventListener("mouseleave", () => { + image2.style.transform = "scale(1)"; +}); + +const image3 = document.querySelector(".picture2"); + +image3.addEventListener("mouseenter", () => { + image3.style.transform = "scale(2.2)"; +}); + +image3.addEventListener("mouseleave", () => { + image3.style.transform = "scale(1)"; +}); + +// Tlačítko go to top +// Zobrazení tlačítka od rolovaní části stránky (víc logické než až na konci) +window.onscroll = function () { + scrollFunction(); +}; + +function scrollFunction() { + if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) { + document.getElementById("scrollToTopBtn").style.display = "block"; + } else { + document.getElementById("scrollToTopBtn").style.display = "none"; + } +} + +// Posunout nahoru, když uživatel klikne na tlačítko +function scrollToTop() { + document.body.scrollTop = 0; // Pro Safari + document.documentElement.scrollTop = 0; // Pro ostatní prohlížeče +} + +// test smazat +const test = document.querySelector(".test"); diff --git a/lukaskanka/index/terminal-space/kakoune/style.css b/lukaskanka/index/terminal-space/kakoune/style.css new file mode 100644 index 0000000..f4b024e --- /dev/null +++ b/lukaskanka/index/terminal-space/kakoune/style.css @@ -0,0 +1,212 @@ +* { + margin: 0; + + padding: 0; + + box-sizing: border-box; +} +body { + max-width: 1000px; + margin: 0 auto; + font-family: "Ubuntu", sans-serif; +} + +/*Header */ + +h1 { + padding-left: 8px; +} + +header { + margin-top: 25px; + display: flex; + align-items: center; + height: 70px; + flex-direction: row; + /*position: fixed;*/ +} + +.title { + padding-top: 25px; +} + +.logo { + flex-grow: 1; + display: flex; +} + +.logo img { + /*width: 100px;*/ + height: 100px; + padding-top: 15px; + margin-left: 20px; +} + +/* navigation */ +nav { + margin-right: 30px; +} + +nav li { + display: inline-block; + list-style-type: none; + margin-right: 20px; +} + +nav li a { + text-decoration: none; + color: black; +} + +/* navigation icons */ + +.menu-icon { + display: none; + margin-right: 30px; +} + +/*Dark/Light mode button*/ +#toggleButton { + float: right; + margin-right: 30px; + margin-top: 10px; + padding: 5px; +} + +#toggleButton { + bottom: 20px; + right: 20px; + border: none; + outline: none; + background-color: transparent; + font-size: 34px; + cursor: pointer; +} + +/*Header small display*/ +@media (max-width: 600px) { + body { + padding: 10px; + } + + header { + position: relative; + } + header nav { + position: absolute; + top: 70px; + width: 100%; + display: none; + } + + .menu-icon { + display: block; + font-size: 23px; + } + + header nav li { + display: block !important; + text-align: center; + margin-top: 10px; + margin-bottom: 10px; + } + + hr { + display: none; + } +} + +/* Sekce */ + +.content { + text-align: center; +} + +.welcome { + padding-top: 115px; + padding-bottom: 50px; +} + +#install { + padding-top: 50px; +} + +#node { + padding-top: 50px; + padding-bottom: 50px; +} + +#plans { + padding-top: 50px; + padding-bottom: 50px; +} + + +#contact { + padding-top: 50px; + padding-bottom: 50px; +} + +#other { + padding-top: 50px; +} + +/*Code box*/ +.code-box { + background-color: #353535; + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; + font-family: monospace; + max-width: 400px; + margin: 0 auto; +} + +/*Picture settings*/ + +.sat { + width: 175px; + height: 175px; +} + +.photo { + text-align: center; + padding-top: 50px; +} +.photo img { + width: 300px; + height: 200px; + margin: 10px; + transition: all 0.5s linear; +} +/*footer pevná pozice*/ + +footer { + bottom: 0; + margin-bottom: 10px; + margin-left: 25px; + margin-top: 20px; +} + +footer a { + text-decoration: none; +} + +#scrollToTopBtn { + display: none; + position: fixed; + bottom: 20px; + right: 20px; + /*butoon přes obsah*/ + z-index: 99; + outline: none; + cursor: pointer; + padding: 15px; + border-radius: 50%; + background-color: transparent; +} + +/* Styl pro ikonu */ +#scrollToTopBtn i { + font-size: 34px; +} diff --git a/lukaskanka/index/terminal-space/news.php b/lukaskanka/index/terminal-space/news.php new file mode 100644 index 0000000..8472a05 --- /dev/null +++ b/lukaskanka/index/terminal-space/news.php @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + Terminal space - Novinky + + + +
+

💾 Terminal space - Novinky

+ + + + +
+
+ + +
+
+
+

Vyšla nová verze AstoNvim

+01.04.2024 +

AstroNvim je distribuce Neovimu beznutnosti další konfigurace.

+

Na nové verzi se pracovalo 10 měsíců a 2 měsíce trvalo veřejné beta testování.

+
+
+

Vyšla nová verze Helix-editoru 24.03

+01.04.2024 +

Před několika málo dny vyšla nová verze postmoderního modálního editoru Helix.

+

Helix-editor je napsán v Rustu a běží v terminálech na všech OS.

Nová verze obsahuje přes 150 vylepšení, na jejich seznam se můžete podívat pod tímto odkazem.

+
+ + +
+ + + + diff --git a/lukaskanka/index/terminal-space/script.js b/lukaskanka/index/terminal-space/script.js new file mode 100644 index 0000000..a7ed4a0 --- /dev/null +++ b/lukaskanka/index/terminal-space/script.js @@ -0,0 +1,149 @@ +//Navbar menu +const menuIcon = document.querySelector(".menu-icon"); +const menuList = document.querySelector("nav"); +const hamburgerIcon = document.querySelector(".fa-solid"); + +menuIcon.addEventListener("click", () => { + if (hamburgerIcon.classList[1] === "fa-bars") { + hamburgerIcon.classList.add("fa-xmark"); + hamburgerIcon.classList.remove("fa-bars"); + menuList.style.display = "block"; + } else { + hamburgerIcon.classList.add("fa-bars"); + hamburgerIcon.classList.remove("fa-xmark"); + menuList.style.display = "none"; + } +}); + +// Dark / Light Mode +/* +const body = document.querySelector("body"); +const head = document.querySelector("header"); +const links = document.querySelectorAll("a"); +const nav = document.querySelector(".navigation"); +const h1 = document.querySelector("h1"); +const nadpish2 = document.querySelectorAll("h2"); +const p = document.querySelector("p"); +const solid = document.querySelector(".fa-solid"); +const solid1 = document.querySelector(".menu-icon"); +const footer = document.querySelector("footer"); +const gotop = document.querySelector("#scrollToTopBtn"); +const theme = document.querySelector("#toggleButton"); +const box = document.querySelectorAll(".code-box"); +let isDraculaMode = false; + +// Funkce pro nastavení stylů pro Dracula mód +function setDraculaStyles() { + body.style.backgroundColor = "#2a232b"; + body.style.color = "#f8f8f2"; + head.style.backgroundColor = "#2a232b"; + theme.style.color = "#e7efa7"; + gotop.style.color = "#e7efa7"; + links.forEach((a) => { + a.style.color = "#f76b00"; + }); + nav.style.backgroundColor = "#2a232b"; + h1.style.color = "#e54472"; + nadpish2.forEach((h2) => { + h2.style.color = "#18f700"; + }); + solid.style.backgroundColor = "#2a232b"; + solid.style.color = "#f76b00"; + solid1.style.backgroundColor = "#2a232b"; + footer.style.backgroundColor = "#2a232b"; + //gotop.style.backgroundColor = "#18f700"; + //theme.style.backgroundColor = "#18f700"; +} + +// Funkce pro nastavení stylů pro Light mód; +function setLightStyles() { + body.style.backgroundColor = "#e7efa7"; + body.style.color = "#282a36"; + theme.style.color = "#2a232b"; +gotop.style.color = "#2a232b"; + head.style.backgroundColor = "#e7efa7"; + nav.style.backgroundColor = "#e7efa7"; + solid.style.backgroundColor = "#e7efa7"; + solid1.style.backgroundColor = "#e7efa7"; + footer.style.backgroundColor = "#e7efa7"; + nadpish2.forEach((h2) => { + h2.style.color = "#c627d8"; + }); + //gotop.style.backgroundColor = "#a7e6ef"; + //theme.style.backgroundColor = "#a7e6ef"; + box.forEach((p) => { + p.style.color = "white"; + }); +} + +// Funkce pro přepnutí módu +function toggleMode() { + if (isDraculaMode) { + // Pokud je momentálně v Dracula modu, přepnout na Light mód + setLightStyles(); + isDraculaMode = false; + } else { + // Pokud je momentálně v Light modu, přepnout na Dracula mód + setDraculaStyles(); + isDraculaMode = true; + } +} + +// Funkce na změnu stylů +document.getElementById("toggleButton").addEventListener("click", toggleMode); + +// Nastavení - výchozí styl na Dark +setDraculaStyles(); +isDraculaMode = true; +*/ + +// Photo Gallery -> section (zoom) +const image1 = document.querySelector(".picture"); + +image1.addEventListener("mouseenter", () => { + image1.style.transform = "scale(2.2)"; +}); + +image1.addEventListener("mouseleave", () => { + image1.style.transform = "scale(1)"; +}); + +const image2 = document.querySelector(".picture1"); + +image2.addEventListener("mouseenter", () => { + image2.style.transform = "scale(2.2)"; +}); + +image2.addEventListener("mouseleave", () => { + image2.style.transform = "scale(1)"; +}); + +const image3 = document.querySelector(".picture2"); + +image3.addEventListener("mouseenter", () => { + image3.style.transform = "scale(2.2)"; +}); + +image3.addEventListener("mouseleave", () => { + image3.style.transform = "scale(1)"; +}); + +// Tlačítko go to top +// Zobrazení tlačítka od rolovaní části stránky (víc logické než až na konci) +window.onscroll = function () { + scrollFunction(); +}; + +function scrollFunction() { + if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) { + document.getElementById("scrollToTopBtn").style.display = "block"; + } else { + document.getElementById("scrollToTopBtn").style.display = "none"; + } +} + +// Posunout nahoru, když uživatel klikne na tlačítko +function scrollToTop() { + document.body.scrollTop = 0; // Pro Safari + document.documentElement.scrollTop = 0; // Pro ostatní prohlížeče +} diff --git a/lukaskanka/index/terminal-space/style.css b/lukaskanka/index/terminal-space/style.css new file mode 100644 index 0000000..78b5441 --- /dev/null +++ b/lukaskanka/index/terminal-space/style.css @@ -0,0 +1,239 @@ +@import url("https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap"); +@import url("colors.css"); + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} +body { + max-width: 1000px; + margin: 0 auto; + font-family: "Ubuntu", sans-serif; + background-color: var(--dracula-body-bg); + color: var(--dracula-color); +} + +/*Header */ + +h1 { + padding-left: 8px; +} + +header { + margin-top: 25px; + display: flex; + align-items: center; + height: 70px; + flex-direction: row; + /*position: fixed;*/ + background-color: var(--dracula-header-bg); +} + +a { + color: var(--dracula-links-color); +} +.title { + padding-top: 25px; +} + +.title { + flex-grow: 1; + display: flex; +} + +/* navigation */ +nav { + margin-right: 30px; +} + +nav li { + display: inline-block; + list-style-type: none; + margin-right: 20px; +} + +nav li a { + text-decoration: none; + color: var(--dracula-nav-links-color); +} + +.navigation { + background-color: var(--dracula-nav-bg); +} + +h1 { + color: var(--dracula-h1-color); +} + +h2 { + color: var(--dracula-h2-color); +} + +.fa-solid { + background-color: var(--dracula-solid-bg); + color: var(--dracula-solid-color); +} +/* navigation icons */ + +.menu-icon { + display: none; + margin-right: 30px; +} + +/*Header small display*/ +@media (max-width: 600px) { + body { + padding: 10px; + } + + header { + position: relative; + } + header nav { + position: absolute; + top: 70px; + width: 100%; + display: none; + } + + .menu-icon { + display: block; + font-size: 23px; + } + + header nav li { + display: block !important; + text-align: center; + margin-top: 10px; + margin-bottom: 10px; + } +} + +/* Sekce */ + +.content { + text-align: center; +} + +#welcome { + padding-top: 50px; + padding-bottom: 50px; +} + +#install { + padding-top: 50px; +} + +#node { + padding-top: 50px; + padding-bottom: 50px; +} + +#apollo { + padding-top: 50px; + padding-bottom: 50px; +} + +#coc { + padding-top: 50px; + padding-bottom: 50px; +} + +#contact { + padding-top: 50px; + padding-bottom: 50px; +} + +#plugin { + padding-top: 50px; +} + +#other { + padding-top: 50px; +} + + +/*Code box*/ +.code-box { + background-color: #353535; + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; + font-family: monospace; + max-width: 500px; + margin: 0 auto; + margin-top: 10px; + margin-bottom: 10px; +} + +/*Picture settings*/ + +.sat { + width: 175px; + height: 175px; +} + +.photo { + text-align: center; + padding-top: 50px; +} +.photo img { + width: 300px; + height: 200px; + margin: 10px; + transition: all 0.5s linear; +} +/*footer pevná pozice*/ + +footer { + bottom: 0; + margin-bottom: 10px; + margin-left: 25px; + margin-top: 20px; +} + +footer a { + text-decoration: none; +} + +#scrollToTopBtn { + display: none; + position: fixed; + bottom: 20px; + right: 20px; + /*butoon přes obsah*/ + z-index: 99; + outline: none; + cursor: pointer; + padding: 15px; + border-radius: 50%; + background-color: transparent; + color: var(--dracula-scrollToTopBtn-color); +} + +/* Styl pro ikonu */ +#scrollToTopBtn i { + font-size: 34px; +} + + +/*Instalace*/ + +.list ul { +list-style-type: none; +} + +.list { + padding-top: 50px; + padding-bottom: 50px; +} + +#plug-vim { + padding-top: 50px; + padding-bottom: 50px; +} + +.h2-install { + padding-bottom: 15px; +} diff --git a/lukaskanka/index/tools/index.php b/lukaskanka/index/tools/index.php new file mode 100644 index 0000000..109ae71 --- /dev/null +++ b/lukaskanka/index/tools/index.php @@ -0,0 +1,127 @@ + + + + + + + + Nástroje + + + + + + + + + + +
+

Software se kterým nejčastěji pracuji

+ +
+
+

Helix

+

+ Helix je + postmoderní modální editor. +

+

+ Název postmoderní získal z důvodu: Jestliže je + Neovim moderní Vim, + pak je Helix postmoderní. +

+

+ Od již zmiňovaného Neovimu ho odlišuje spousty věcí i když koncept + modálního editoru sdílí oba dva. Oba editory podporují LSP, ale + Helix už nepodporuje pluginy tak není tak rošiřitelný jako Neovim. + Dokonce mají oba jiné klávesové zkratky a obrácenou logigu příkazu, + v Helixu vyberete objekt a pak vykonáte příkaz Neovim to má opačně. + Helix je skvělým nástrojem pro nováčky v modálních editorech, ale + náročný uživatel bez možnosti pluginů nebude asi zcela spokojený. Já + jsem i přes jeho nevýhody oproti Neovim na něj přešel jelikož jeho + výhody jsou pro mě větší důvod ho používat. Určitě stojí za + ozkoušení a třeba i vy si ho oblíbíte jako já. +

+

+ Můj setup na vývoj frontend si můžeš prohlédnout na mé + Gitea. +

+

+ Na mém + Blogu na + témá Helix najdeš více informací či mé + Digitální zahradě + a + Dev.to profilu. +

+
+ +
+

Obsidian

+

+ Obsidian markdown + editor pro ty nejnáročnější. +

+

+ Další softwar bez kterého se neobejdu je textový editor. Velmi jsem + si oblíbil formát Markdown a začal jsem zkoušet velké množství + editorů a nakonec jsem zůstal u Obsidianu. Je možné ho rozšířit + pluginy a jeho největší výhodouje, vaše data zůstávají u vás + narozdíl od jiných textových editorů. +

+

+ Pokud se chceš o Obsidianu dozvědět více, pod odkazem najdeš další + materiály k + Obsidianu. +

+
+
+ +
+

Neovim

+

+ Modální editor Neovim + je jeden z mých oblíbených editorů. Tento editor jsem už dlouhou dobu + používal před Helixem, oproti Helixu má mnohem strmější křivku učení. + Jeho největší výhodou je spousta pluginu a možnost si ho přizbůsobit + dle sebe. Jeho hlavní nevýhoda je, nezkušený uživatel si ho může lehce + rozbí. +

+

+ Na moje nastavení Neovimu se můžeš podívat na mé + Gitea. +

+
+ +
Copyright © Lukáš Kaňka 2024
+
+ + diff --git a/lukaskanka/package.json b/lukaskanka/package.json new file mode 100644 index 0000000..969c078 --- /dev/null +++ b/lukaskanka/package.json @@ -0,0 +1,17 @@ +{ + "lint-staged": { + "**/*": "prettier --write --ignore-unknown" + }, + "devDependencies": { + "eslint-config-prettier": "^8.10.0", + "husky": "^8.0.3", + "lint-staged": "^13.3.0", + "prettier": "2.8.4" + }, + "dependencies": { + "eslint": "^8.54.0" + }, + "scripts": { + "prepare": "husky install" + } +} diff --git a/lukaskanka/pnpm-lock.yaml b/lukaskanka/pnpm-lock.yaml new file mode 100644 index 0000000..434c812 --- /dev/null +++ b/lukaskanka/pnpm-lock.yaml @@ -0,0 +1,1336 @@ +lockfileVersion: "6.0" + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + eslint: + specifier: ^8.54.0 + version: 8.54.0 + +devDependencies: + eslint-config-prettier: + specifier: ^8.10.0 + version: 8.10.0(eslint@8.54.0) + husky: + specifier: ^8.0.3 + version: 8.0.3 + lint-staged: + specifier: ^13.3.0 + version: 13.3.0 + prettier: + specifier: 2.8.4 + version: 2.8.4 + +packages: + /@aashutoshrathi/word-wrap@1.2.6: + resolution: + { + integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==, + } + engines: { node: ">=0.10.0" } + + /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0): + resolution: + { + integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.54.0 + eslint-visitor-keys: 3.4.3 + + /@eslint-community/regexpp@4.10.0: + resolution: + { + integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==, + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + + /@eslint/eslintrc@2.1.3: + resolution: + { + integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.23.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + /@eslint/js@8.54.0: + resolution: + { + integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + /@humanwhocodes/config-array@0.11.13: + resolution: + { + integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==, + } + engines: { node: ">=10.10.0" } + dependencies: + "@humanwhocodes/object-schema": 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + /@humanwhocodes/module-importer@1.0.1: + resolution: + { + integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, + } + engines: { node: ">=12.22" } + + /@humanwhocodes/object-schema@2.0.1: + resolution: + { + integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==, + } + + /@nodelib/fs.scandir@2.1.5: + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: ">= 8" } + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat@2.0.5: + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: ">= 8" } + + /@nodelib/fs.walk@1.2.8: + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: ">= 8" } + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: 1.15.0 + + /@ungap/structured-clone@1.2.0: + resolution: + { + integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==, + } + + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: + { + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, + } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.2 + + /acorn@8.11.2: + resolution: + { + integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==, + } + engines: { node: ">=0.4.0" } + hasBin: true + + /ajv@6.12.6: + resolution: + { + integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, + } + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + /ansi-escapes@5.0.0: + resolution: + { + integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==, + } + engines: { node: ">=12" } + dependencies: + type-fest: 1.4.0 + dev: true + + /ansi-regex@5.0.1: + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, + } + engines: { node: ">=8" } + + /ansi-regex@6.0.1: + resolution: + { + integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==, + } + engines: { node: ">=12" } + dev: true + + /ansi-styles@4.3.0: + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, + } + engines: { node: ">=8" } + dependencies: + color-convert: 2.0.1 + + /ansi-styles@6.2.1: + resolution: + { + integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==, + } + engines: { node: ">=12" } + dev: true + + /argparse@2.0.1: + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + } + + /balanced-match@1.0.2: + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, + } + + /brace-expansion@1.1.11: + resolution: + { + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, + } + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /braces@3.0.2: + resolution: + { + integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, + } + engines: { node: ">=8" } + dependencies: + fill-range: 7.0.1 + dev: true + + /callsites@3.1.0: + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, + } + engines: { node: ">=6" } + + /chalk@4.1.2: + resolution: + { + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, + } + engines: { node: ">=10" } + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /chalk@5.3.0: + resolution: + { + integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==, + } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } + dev: true + + /cli-cursor@4.0.0: + resolution: + { + integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + dependencies: + restore-cursor: 4.0.0 + dev: true + + /cli-truncate@3.1.0: + resolution: + { + integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + dev: true + + /color-convert@2.0.1: + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, + } + engines: { node: ">=7.0.0" } + dependencies: + color-name: 1.1.4 + + /color-name@1.1.4: + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, + } + + /colorette@2.0.20: + resolution: + { + integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, + } + dev: true + + /commander@11.0.0: + resolution: + { + integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==, + } + engines: { node: ">=16" } + dev: true + + /concat-map@0.0.1: + resolution: + { + integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, + } + + /cross-spawn@7.0.3: + resolution: + { + integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, + } + engines: { node: ">= 8" } + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + /debug@4.3.4: + resolution: + { + integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, + } + engines: { node: ">=6.0" } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /deep-is@0.1.4: + resolution: + { + integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, + } + + /doctrine@3.0.0: + resolution: + { + integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, + } + engines: { node: ">=6.0.0" } + dependencies: + esutils: 2.0.3 + + /eastasianwidth@0.2.0: + resolution: + { + integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, + } + dev: true + + /emoji-regex@9.2.2: + resolution: + { + integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, + } + dev: true + + /escape-string-regexp@4.0.0: + resolution: + { + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, + } + engines: { node: ">=10" } + + /eslint-config-prettier@8.10.0(eslint@8.54.0): + resolution: + { + integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==, + } + hasBin: true + peerDependencies: + eslint: ">=7.0.0" + dependencies: + eslint: 8.54.0 + dev: true + + /eslint-scope@7.2.2: + resolution: + { + integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + /eslint-visitor-keys@3.4.3: + resolution: + { + integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + /eslint@8.54.0: + resolution: + { + integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + hasBin: true + dependencies: + "@eslint-community/eslint-utils": 4.4.0(eslint@8.54.0) + "@eslint-community/regexpp": 4.10.0 + "@eslint/eslintrc": 2.1.3 + "@eslint/js": 8.54.0 + "@humanwhocodes/config-array": 0.11.13 + "@humanwhocodes/module-importer": 1.0.1 + "@nodelib/fs.walk": 1.2.8 + "@ungap/structured-clone": 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.23.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + /espree@9.6.1: + resolution: + { + integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 + + /esquery@1.5.0: + resolution: + { + integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, + } + engines: { node: ">=0.10" } + dependencies: + estraverse: 5.3.0 + + /esrecurse@4.3.0: + resolution: + { + integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, + } + engines: { node: ">=4.0" } + dependencies: + estraverse: 5.3.0 + + /estraverse@5.3.0: + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, + } + engines: { node: ">=4.0" } + + /esutils@2.0.3: + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, + } + engines: { node: ">=0.10.0" } + + /eventemitter3@5.0.1: + resolution: + { + integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, + } + dev: true + + /execa@7.2.0: + resolution: + { + integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==, + } + engines: { node: ^14.18.0 || ^16.14.0 || >=18.0.0 } + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + + /fast-deep-equal@3.1.3: + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, + } + + /fast-json-stable-stringify@2.1.0: + resolution: + { + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, + } + + /fast-levenshtein@2.0.6: + resolution: + { + integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, + } + + /fastq@1.15.0: + resolution: + { + integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==, + } + dependencies: + reusify: 1.0.4 + + /file-entry-cache@6.0.1: + resolution: + { + integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, + } + engines: { node: ^10.12.0 || >=12.0.0 } + dependencies: + flat-cache: 3.2.0 + + /fill-range@7.0.1: + resolution: + { + integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, + } + engines: { node: ">=8" } + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up@5.0.0: + resolution: + { + integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, + } + engines: { node: ">=10" } + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + /flat-cache@3.2.0: + resolution: + { + integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==, + } + engines: { node: ^10.12.0 || >=12.0.0 } + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + + /flatted@3.2.9: + resolution: + { + integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==, + } + + /fs.realpath@1.0.0: + resolution: + { + integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, + } + + /get-stream@6.0.1: + resolution: + { + integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, + } + engines: { node: ">=10" } + dev: true + + /glob-parent@6.0.2: + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, + } + engines: { node: ">=10.13.0" } + dependencies: + is-glob: 4.0.3 + + /glob@7.2.3: + resolution: + { + integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, + } + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /globals@13.23.0: + resolution: + { + integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==, + } + engines: { node: ">=8" } + dependencies: + type-fest: 0.20.2 + + /graphemer@1.4.0: + resolution: + { + integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, + } + + /has-flag@4.0.0: + resolution: + { + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, + } + engines: { node: ">=8" } + + /human-signals@4.3.1: + resolution: + { + integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==, + } + engines: { node: ">=14.18.0" } + dev: true + + /husky@8.0.3: + resolution: + { + integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==, + } + engines: { node: ">=14" } + hasBin: true + dev: true + + /ignore@5.3.0: + resolution: + { + integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==, + } + engines: { node: ">= 4" } + + /import-fresh@3.3.0: + resolution: + { + integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, + } + engines: { node: ">=6" } + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + /imurmurhash@0.1.4: + resolution: + { + integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, + } + engines: { node: ">=0.8.19" } + + /inflight@1.0.6: + resolution: + { + integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, + } + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits@2.0.4: + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, + } + + /is-extglob@2.1.1: + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: ">=0.10.0" } + + /is-fullwidth-code-point@4.0.0: + resolution: + { + integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==, + } + engines: { node: ">=12" } + dev: true + + /is-glob@4.0.3: + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: ">=0.10.0" } + dependencies: + is-extglob: 2.1.1 + + /is-number@7.0.0: + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: ">=0.12.0" } + dev: true + + /is-path-inside@3.0.3: + resolution: + { + integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, + } + engines: { node: ">=8" } + + /is-stream@3.0.0: + resolution: + { + integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + dev: true + + /isexe@2.0.0: + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } + + /js-yaml@4.1.0: + resolution: + { + integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, + } + hasBin: true + dependencies: + argparse: 2.0.1 + + /json-buffer@3.0.1: + resolution: + { + integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, + } + + /json-schema-traverse@0.4.1: + resolution: + { + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, + } + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: + { + integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, + } + + /keyv@4.5.4: + resolution: + { + integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, + } + dependencies: + json-buffer: 3.0.1 + + /levn@0.4.1: + resolution: + { + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, + } + engines: { node: ">= 0.8.0" } + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + /lilconfig@2.1.0: + resolution: + { + integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, + } + engines: { node: ">=10" } + dev: true + + /lint-staged@13.3.0: + resolution: + { + integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==, + } + engines: { node: ^16.14.0 || >=18.0.0 } + hasBin: true + dependencies: + chalk: 5.3.0 + commander: 11.0.0 + debug: 4.3.4 + execa: 7.2.0 + lilconfig: 2.1.0 + listr2: 6.6.1 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.1 + transitivePeerDependencies: + - enquirer + - supports-color + dev: true + + /listr2@6.6.1: + resolution: + { + integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + enquirer: ">= 2.3.0 < 3" + peerDependenciesMeta: + enquirer: + optional: true + dependencies: + cli-truncate: 3.1.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 5.0.1 + rfdc: 1.3.0 + wrap-ansi: 8.1.0 + dev: true + + /locate-path@6.0.0: + resolution: + { + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, + } + engines: { node: ">=10" } + dependencies: + p-locate: 5.0.0 + + /lodash.merge@4.6.2: + resolution: + { + integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, + } + + /log-update@5.0.1: + resolution: + { + integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + dependencies: + ansi-escapes: 5.0.0 + cli-cursor: 4.0.0 + slice-ansi: 5.0.0 + strip-ansi: 7.1.0 + wrap-ansi: 8.1.0 + dev: true + + /merge-stream@2.0.0: + resolution: + { + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, + } + dev: true + + /micromatch@4.0.5: + resolution: + { + integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, + } + engines: { node: ">=8.6" } + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mimic-fn@2.1.0: + resolution: + { + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, + } + engines: { node: ">=6" } + dev: true + + /mimic-fn@4.0.0: + resolution: + { + integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, + } + engines: { node: ">=12" } + dev: true + + /minimatch@3.1.2: + resolution: + { + integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, + } + dependencies: + brace-expansion: 1.1.11 + + /ms@2.1.2: + resolution: + { + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, + } + + /natural-compare@1.4.0: + resolution: + { + integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, + } + + /npm-run-path@5.1.0: + resolution: + { + integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + dependencies: + path-key: 4.0.0 + dev: true + + /once@1.4.0: + resolution: + { + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, + } + dependencies: + wrappy: 1.0.2 + + /onetime@5.1.2: + resolution: + { + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, + } + engines: { node: ">=6" } + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: + { + integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==, + } + engines: { node: ">=12" } + dependencies: + mimic-fn: 4.0.0 + dev: true + + /optionator@0.9.3: + resolution: + { + integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==, + } + engines: { node: ">= 0.8.0" } + dependencies: + "@aashutoshrathi/word-wrap": 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + + /p-limit@3.1.0: + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, + } + engines: { node: ">=10" } + dependencies: + yocto-queue: 0.1.0 + + /p-locate@5.0.0: + resolution: + { + integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, + } + engines: { node: ">=10" } + dependencies: + p-limit: 3.1.0 + + /parent-module@1.0.1: + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, + } + engines: { node: ">=6" } + dependencies: + callsites: 3.1.0 + + /path-exists@4.0.0: + resolution: + { + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, + } + engines: { node: ">=8" } + + /path-is-absolute@1.0.1: + resolution: + { + integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, + } + engines: { node: ">=0.10.0" } + + /path-key@3.1.1: + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + } + engines: { node: ">=8" } + + /path-key@4.0.0: + resolution: + { + integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, + } + engines: { node: ">=12" } + dev: true + + /picomatch@2.3.1: + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, + } + engines: { node: ">=8.6" } + dev: true + + /pidtree@0.6.0: + resolution: + { + integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==, + } + engines: { node: ">=0.10" } + hasBin: true + dev: true + + /prelude-ls@1.2.1: + resolution: + { + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, + } + engines: { node: ">= 0.8.0" } + + /prettier@2.8.4: + resolution: + { + integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==, + } + engines: { node: ">=10.13.0" } + hasBin: true + dev: true + + /punycode@2.3.1: + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + } + engines: { node: ">=6" } + + /queue-microtask@1.2.3: + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + } + + /resolve-from@4.0.0: + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, + } + engines: { node: ">=4" } + + /restore-cursor@4.0.0: + resolution: + { + integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /reusify@1.0.4: + resolution: + { + integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, + } + engines: { iojs: ">=1.0.0", node: ">=0.10.0" } + + /rfdc@1.3.0: + resolution: + { + integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==, + } + dev: true + + /rimraf@3.0.2: + resolution: + { + integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, + } + hasBin: true + dependencies: + glob: 7.2.3 + + /run-parallel@1.2.0: + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + } + dependencies: + queue-microtask: 1.2.3 + + /shebang-command@2.0.0: + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + } + engines: { node: ">=8" } + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex@3.0.0: + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + } + engines: { node: ">=8" } + + /signal-exit@3.0.7: + resolution: + { + integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, + } + dev: true + + /slice-ansi@5.0.0: + resolution: + { + integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==, + } + engines: { node: ">=12" } + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + dev: true + + /string-argv@0.3.2: + resolution: + { + integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==, + } + engines: { node: ">=0.6.19" } + dev: true + + /string-width@5.1.2: + resolution: + { + integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, + } + engines: { node: ">=12" } + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: true + + /strip-ansi@6.0.1: + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + } + engines: { node: ">=8" } + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi@7.1.0: + resolution: + { + integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==, + } + engines: { node: ">=12" } + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-final-newline@3.0.0: + resolution: + { + integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==, + } + engines: { node: ">=12" } + dev: true + + /strip-json-comments@3.1.1: + resolution: + { + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, + } + engines: { node: ">=8" } + + /supports-color@7.2.0: + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, + } + engines: { node: ">=8" } + dependencies: + has-flag: 4.0.0 + + /text-table@0.2.0: + resolution: + { + integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, + } + + /to-regex-range@5.0.1: + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: ">=8.0" } + dependencies: + is-number: 7.0.0 + dev: true + + /type-check@0.4.0: + resolution: + { + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, + } + engines: { node: ">= 0.8.0" } + dependencies: + prelude-ls: 1.2.1 + + /type-fest@0.20.2: + resolution: + { + integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, + } + engines: { node: ">=10" } + + /type-fest@1.4.0: + resolution: + { + integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==, + } + engines: { node: ">=10" } + dev: true + + /uri-js@4.4.1: + resolution: + { + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, + } + dependencies: + punycode: 2.3.1 + + /which@2.0.2: + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, + } + engines: { node: ">= 8" } + hasBin: true + dependencies: + isexe: 2.0.0 + + /wrap-ansi@8.1.0: + resolution: + { + integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, + } + engines: { node: ">=12" } + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + + /wrappy@1.0.2: + resolution: + { + integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, + } + + /yaml@2.3.1: + resolution: + { + integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==, + } + engines: { node: ">= 14" } + dev: true + + /yocto-queue@0.1.0: + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, + } + engines: { node: ">=10" } diff --git a/lukaskanka/style/alt.index.php b/lukaskanka/style/alt.index.php new file mode 100644 index 0000000..de771aa --- /dev/null +++ b/lukaskanka/style/alt.index.php @@ -0,0 +1,27 @@ + + + + + + + Array in a Matrix + + + + + + +
+ + +
+ + diff --git a/lukaskanka/style/alt.style.css b/lukaskanka/style/alt.style.css new file mode 100644 index 0000000..ae55ffe --- /dev/null +++ b/lukaskanka/style/alt.style.css @@ -0,0 +1,315 @@ +:root { + --primary: #fff; + --secondary: rgba(0, 0, 0, 0.5); + --tertiary: #151b74; + --transparent: transparent; +} + +/* Animations */ +@-webkit-keyframes bg-scrolling-reverse { + 100% { + background-position: 50px 50px; + } +} + +@-moz-keyframes bg-scrolling-reverse { + 100% { + background-position: 50px 50px; + } +} + +@-o-keyframes bg-scrolling-reverse { + 100% { + background-position: 50px 50px; + } +} + +@keyframes bg-scrolling-reverse { + 100% { + background-position: 50px 50px; + } +} + +@-webkit-keyframes bg-scrolling { + 0% { + background-position: 50px 50px; + } +} + +@-moz-keyframes bg-scrolling { + 0% { + background-position: 50px 50px; + } +} + +@-o-keyframes bg-scrolling { + 0% { + background-position: 50px 50px; + } +} + +@keyframes bg-scrolling { + 0% { + background-position: 50px 50px; + } +} + +/* Main styles */ +body { + margin-top: 13.5rem; + color: var(--primary); + font-family: Utopia, "Liberation Serif"; + text-align: center; + /* img size is 50x50 */ + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABbmlDQ1BpY2MAACiRdZE7SwNBFIW/RCWikRRaBLHYQsVCJSiIpcbCJkiICr6aZPMSNuuyu0HEVrCxCFiINr4K/4G2gq2CICiCiI1/wFcjYb2TBBJEZ5m9H2fmXGbOgD9m6AWnOQIF07UT01FtYXFJC7wSIEwnw/iSumNNxuMx/h1f9/hUvRtSvf7f9+doT2ccHXytwmO6ZbvCE8KxdddSvCPcpeeTaeEj4UFbDih8rfRUlV8U56r8odieS0yBX/XUcg2camA9bxeEB4R7C0ZRr51H3SSYMednpXbL7MEhwTRRNFIUWcXAZUiqKZn97YtUfDOsiUeXv8UGtjhy5MU7KGpRumakZkXPyGewoXL/naeTHR2pdg9GoeXZ8977ILAL5ZLnfR97XvkEmp7g0qz71ySn8U/RS3Wt9xBCW3B+VddSe3CxDeFHK2knK1KTTH82C29n0LEInbfQtlzNqrbO6QPMbcoT3cD+AfTL/tDKD92VZ/plHO89AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAuElEQVRoBe3awQ2CQABEUbUEbJEEi5ISpQVETuY38LPkk5gwp9mdx9H7srz2dX3fpul5G/XZts959H2e5/14G/Z3nv+QGPYC/+M/Rv2ceO4uwkXsnIgtwP5EuIidE7EF2J8IF7FzIrYA+xPhInZOxBZgfyJcxM6J2ALsT4SL2DkRW4D9iXAROydiC7A/ES5i50RsAfYnwkXsnIgtwP5EuIidE7EF2J8IF7FzIrYA+y8j8rvYJf6v9QVf2KG69fWg3gAAAABJRU5ErkJggg==") + repeat 0 0; + -webkit-animation: bg-scrolling-reverse 0.92s infinite; + /* Safari 4+ */ + -moz-animation: bg-scrolling-reverse 0.92s infinite; + /* Fx 5+ */ + -o-animation: bg-scrolling-reverse 0.92s infinite; + /* Opera 12+ */ + animation: bg-scrolling-reverse 0.92s infinite; + /* IE 10+ */ + -webkit-animation-timing-function: linear; + -moz-animation-timing-function: linear; + -o-animation-timing-function: linear; + animation-timing-function: linear; +} + +.larger-name { + font-size: larger; +} + +.smaller-name { + font-size: smaller; +} + +.main-content { + font-family: "Montserrat", sans-serif; +} + +.project-name { + color: --primary; + font-family: Utopia, "Liberation Serif"; +} + +@media screen and (min-width: 64em) { + .project-name { + font-size: 8rem; + } + + .main-content { + font-size: 1.5rem; + } +} + +@media screen and (min-width: 42em) and (max-width: 64em) { + .project-name { + font-size: 4rem; + } + + .main-content { + font-size: 1.25rem; + } +} + +@media screen and (max-width: 42em) { + .project-name { + font-size: 2rem; + } + + .main-content { + font-size: 1rem; + } +} + +a { + background-color: var(--transparent); +} + +a:active, +a:hover { + outline: 0; +} + +a { + color: var(--tertiary); + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +.btn { + display: inline-block; + margin-bottom: 1rem; + color: var(--primary); + background-color: var(--secondary); + border-color: rgba(255, 255, 255, 0.2); + border-style: solid; + border-width: 1px; + border-radius: 0.3rem; + transition: color 0.2s, background-color 0.2s, border-color 0.2s; +} + +.btn:hover { + color: rgba(255, 255, 255, 0.8); + text-decoration: none; + background-color: rgba(255, 255, 255, 0.2); + border-color: rgba(255, 255, 255, 0.3); +} + +.btn + .btn { + margin-left: 1rem; +} + +@media screen and (min-width: 64em) { + .btn { + padding: 0.75rem 1rem; + } +} + +@media screen and (min-width: 42em) and (max-width: 64em) { + .btn { + padding: 0.6rem 0.9rem; + font-size: 0.9rem; + } +} + +@media screen and (max-width: 42em) { + .btn { + display: block; + width: 100%; + padding: 0.75rem; + font-size: 0.9rem; + } + + .btn + .btn { + margin-top: 1rem; + margin-left: 0; + } +} + +* { + box-sizing: border-box; +} + +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} + +button { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +.dropdown { + position: relative; + display: inline-block; +} + +.dropdown-content { + display: none; + position: relative; +} + +.dropdown:hover .dropdown-content { + display: block; +} + +.project-tagline { + margin-bottom: 2rem; + font-weight: normal; + opacity: 0.7; + font-family: "Montserrat", sans-serif; +} + +@media screen and (min-width: 64em) { + .project-tagline { + font-size: 1.25rem; + } +} + +@media screen and (min-width: 42em) and (max-width: 64em) { + .project-tagline { + font-size: 1.15rem; + } +} + +@media screen and (max-width: 42em) { + .project-tagline { + font-size: 1rem; + } +} + +footer, +site-footer { + font-family: "Montserrat", sans-serif; + font-size: small; + display: block; +} + +@media screen and (min-width: 64em) { + .site-footer { + font-size: 1rem; + } +} + +@media screen and (min-width: 42em) and (max-width: 64em) { + .site-footer { + font-size: 1rem; + } +} + +@media screen and (max-width: 42em) { + .site-footer { + font-size: 0.9rem; + } +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} diff --git a/lukaskanka/style/style.css b/lukaskanka/style/style.css new file mode 100644 index 0000000..11d5c7e --- /dev/null +++ b/lukaskanka/style/style.css @@ -0,0 +1,744 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +@import url("https://fonts.googleapis.com/css?family=Open+Sans:400,700&display=swap"); + +html { + font-family: "Montserrat", sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden], +template { + display: none; +} + +a { + background-color: transparent; +} + +a:active, +a:hover { + outline: 0; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +mark { + background: #ff0; + color: #000; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 1em 40px; +} + +hr { + box-sizing: content-box; + height: 0; +} + +pre { + overflow: auto; +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} + +button { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +input { + line-height: normal; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +input[type="search"] { + -webkit-appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +legend { + border: 0; + padding: 0; +} + +textarea { + overflow: auto; +} + +optgroup { + font-weight: bold; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} + +* { + box-sizing: border-box; +} + +body { + padding: 0; + margin: 0; + font-family: "Montserrat", sans-serif; + font-size: 16px; + line-height: 1.5; + color: #606c71; +} + +#skip-to-content { + height: 1px; + width: 1px; + position: absolute; + overflow: hidden; + top: -10px; +} + +#skip-to-content:focus { + position: fixed; + top: 10px; + left: 10px; + height: auto; + width: auto; + background: #e19447; + outline: thick solid #e19447; +} + +a { + color: #1e6bb8; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +.btn { + display: inline-block; + margin-bottom: 1rem; + color: rgba(255, 255, 255, 0.7); + background-color: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.2); + border-style: solid; + border-width: 1px; + border-radius: 0.3rem; + transition: color 0.2s, background-color 0.2s, border-color 0.2s; +} + +.btn:hover { + color: rgba(255, 255, 255, 0.8); + text-decoration: none; + background-color: rgba(255, 255, 255, 0.2); + border-color: rgba(255, 255, 255, 0.3); +} + +.btn + .btn { + margin-left: 1rem; +} + +@media screen and (min-width: 64em) { + .btn { + padding: 0.75rem 1rem; + } +} + +@media screen and (min-width: 42em) and (max-width: 64em) { + .btn { + padding: 0.6rem 0.9rem; + font-size: 0.9rem; + } +} + +@media screen and (max-width: 42em) { + .btn { + display: block; + width: 100%; + padding: 0.75rem; + font-size: 0.9rem; + } + + .btn + .btn { + margin-top: 1rem; + margin-left: 0; + } +} + +.page-header { + color: #fff; + text-align: center; +} + +@-webkit-keyframes bg-scrolling-reverse { + 100% { + background-position: 50px 50px; + } +} + +@-moz-keyframes bg-scrolling-reverse { + 100% { + background-position: 50px 50px; + } +} + +@-o-keyframes bg-scrolling-reverse { + 100% { + background-position: 50px 50px; + } +} + +@keyframes bg-scrolling-reverse { + 100% { + background-position: 50px 50px; + } +} + +@-webkit-keyframes bg-scrolling { + 0% { + background-position: 50px 50px; + } +} + +@-moz-keyframes bg-scrolling { + 0% { + background-position: 50px 50px; + } +} + +@-o-keyframes bg-scrolling { + 0% { + background-position: 50px 50px; + } +} + +@keyframes bg-scrolling { + 0% { + background-position: 50px 50px; + } +} + +body { + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABbmlDQ1BpY2MAACiRdZE7SwNBFIW/RCWikRRaBLHYQsVCJSiIpcbCJkiICr6aZPMSNuuyu0HEVrCxCFiINr4K/4G2gq2CICiCiI1/wFcjYb2TBBJEZ5m9H2fmXGbOgD9m6AWnOQIF07UT01FtYXFJC7wSIEwnw/iSumNNxuMx/h1f9/hUvRtSvf7f9+doT2ccHXytwmO6ZbvCE8KxdddSvCPcpeeTaeEj4UFbDih8rfRUlV8U56r8odieS0yBX/XUcg2camA9bxeEB4R7C0ZRr51H3SSYMednpXbL7MEhwTRRNFIUWcXAZUiqKZn97YtUfDOsiUeXv8UGtjhy5MU7KGpRumakZkXPyGewoXL/naeTHR2pdg9GoeXZ8977ILAL5ZLnfR97XvkEmp7g0qz71ySn8U/RS3Wt9xBCW3B+VddSe3CxDeFHK2knK1KTTH82C29n0LEInbfQtlzNqrbO6QPMbcoT3cD+AfTL/tDKD92VZ/plHO89AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAuElEQVRoBe3awQ2CQABEUbUEbJEEi5ISpQVETuY38LPkk5gwp9mdx9H7srz2dX3fpul5G/XZts959H2e5/14G/Z3nv+QGPYC/+M/Rv2ceO4uwkXsnIgtwP5EuIidE7EF2J8IF7FzIrYA+xPhInZOxBZgfyJcxM6J2ALsT4SL2DkRW4D9iXAROydiC7A/ES5i50RsAfYnwkXsnIgtwP5EuIidE7EF2J8IF7FzIrYA+y8j8rvYJf6v9QVf2KG69fWg3gAAAABJRU5ErkJggg==") + repeat 0 0; + -webkit-animation: bg-scrolling-reverse 0.92s infinite; + /* Safari 4+ */ + -moz-animation: bg-scrolling-reverse 0.92s infinite; + /* Fx 5+ */ + -o-animation: bg-scrolling-reverse 0.92s infinite; + /* Opera 12+ */ + animation: bg-scrolling-reverse 0.92s infinite; + /* IE 10+ */ + -webkit-animation-timing-function: linear; + -moz-animation-timing-function: linear; + -o-animation-timing-function: linear; + animation-timing-function: linear; +} + +@media screen and (min-width: 64em) { + .page-header { + padding: 5rem 6rem; + } +} + +@media screen and (min-width: 42em) and (max-width: 64em) { + .page-header { + padding: 3rem 4rem; + } +} + +@media screen and (max-width: 42em) { + .page-header { + padding: 2rem 1rem; + } +} + +.project-name { + margin-top: 0; + margin-bottom: 0.1rem; +} + +@media screen and (min-width: 64em) { + .project-name { + font-size: 3.25rem; + } +} + +@media screen and (min-width: 42em) and (max-width: 64em) { + .project-name { + font-size: 2.25rem; + } +} + +@media screen and (max-width: 42em) { + .project-name { + font-size: 1.75rem; + } +} + +.project-tagline { + margin-bottom: 2rem; + font-weight: normal; + opacity: 0.7; +} + +@media screen and (min-width: 64em) { + .project-tagline { + font-size: 1.25rem; + } +} + +@media screen and (min-width: 42em) and (max-width: 64em) { + .project-tagline { + font-size: 1.15rem; + } +} + +@media screen and (max-width: 42em) { + .project-tagline { + font-size: 1rem; + } +} + +.main-content { + word-wrap: break-word; + background-color: #fff; + background-color: rgba(250, 250, 250, 0.712); +} + +.main-content :first-child { + margin-top: 0; +} + +@media screen and (min-width: 64em) { + .main-content { + max-width: 64rem; + padding: 2rem 6rem; + margin: 0 auto; + font-size: 1.1rem; + } +} + +@media screen and (min-width: 42em) and (max-width: 64em) { + .main-content { + padding: 2rem 4rem; + font-size: 1.1rem; + } +} + +@media screen and (max-width: 42em) { + .main-content { + padding: 2rem 1rem; + font-size: 1rem; + } +} + +.main-content kbd { + background-color: #fafbfc; + border: 1px solid #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; + color: #444d56; + display: inline-block; + font-size: 11px; + line-height: 10px; + padding: 3px 5px; + vertical-align: middle; +} + +.main-content img { + max-width: 100%; +} + +.main-content h1, +.main-content h2, +.main-content h3, +.main-content h4, +.main-content h5, +.main-content h6 { + margin-top: 2rem; + margin-bottom: 1rem; + font-weight: normal; + color: #000; +} + +.main-content p { + margin-bottom: 1em; +} + +.main-content code { + padding: 2px 4px; + font-family: "Montserrat", sans-serif; + font-size: 0.9rem; + color: #567482; + background-color: #f3f6fa; + border-radius: 0.3rem; +} + +.main-content pre { + padding: 0.8rem; + margin-top: 0; + margin-bottom: 1rem; + font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace; + color: #567482; + word-wrap: normal; + background-color: #f3f6fa; + border: solid 1px #dce6f0; + border-radius: 0.3rem; +} + +.main-content pre > code { + padding: 0; + margin: 0; + font-size: 0.9rem; + color: #567482; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; +} + +.main-content .highlight { + margin-bottom: 1rem; +} + +.main-content .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.main-content .highlight pre, +.main-content pre { + padding: 0.8rem; + overflow: auto; + font-size: 0.9rem; + line-height: 1.45; + border-radius: 0.3rem; + -webkit-overflow-scrolling: touch; +} + +.main-content pre code, +.main-content pre tt { + display: inline; + max-width: initial; + padding: 0; + margin: 0; + overflow: initial; + line-height: inherit; + word-wrap: normal; + background-color: transparent; + border: 0; +} + +.main-content pre code:before, +.main-content pre code:after, +.main-content pre tt:before, +.main-content pre tt:after { + content: normal; +} + +.main-content ul, +.main-content ol { + margin-top: 0; +} + +.main-content blockquote { + padding: 0 1rem; + margin-left: 0; + color: #819198; + border-left: 0.3rem solid #dce6f0; +} + +.main-content blockquote > :first-child { + margin-top: 0; +} + +.main-content blockquote > :last-child { + margin-bottom: 0; +} + +.main-content table { + display: block; + width: 100%; + overflow: auto; + word-break: normal; + word-break: keep-all; + -webkit-overflow-scrolling: touch; +} + +.main-content table th { + font-weight: bold; +} + +.main-content table th, +.main-content table td { + padding: 0.5rem 1rem; + border: 1px solid #e9ebec; +} + +.main-content dl { + padding: 0; +} + +.main-content dl dt { + padding: 0; + margin-top: 1rem; + font-size: 1rem; + font-weight: bold; +} + +.main-content dl dd { + padding: 0; + margin-bottom: 1rem; +} + +.main-content hr { + height: 2px; + padding: 0; + margin: 1rem 0; + background-color: #dce6f0; + border: 0; +} + +.site-footer { + padding-top: 2rem; + margin-top: 2rem; + border-top: solid 1px #eff0f1; +} + +@media screen and (min-width: 64em) { + .site-footer { + font-size: 1rem; + } +} + +@media screen and (min-width: 42em) and (max-width: 64em) { + .site-footer { + font-size: 1rem; + } +} + +@media screen and (max-width: 42em) { + .site-footer { + font-size: 0.9rem; + } +} + +.gameButton { + font-size: 400%; + text-align: center; + background-color: rgba(0, 0, 0, 0.08); +} + +.game { + text-align: center; +} + +:target:not(main) { + animation: highlight 1s ease; + transform: translateX(20px); +} + +@keyframes highlight { + 0% { + border-left-color: yellow; + } + + 100% { + border-left-color: rgba(255, 255, 255, 0); + } +} + +:target:not(main) { + border-left: 40px solid rgba(255, 255, 255, 0); + padding: 0px; + transition: all 0.5s ease; + padding-right: 50px; + margin-left: -20px; +} + +.zoom { + transition: transform 0.2s; + margin: 0 auto; +} + +.zoom:hover { + transform: scale(1.5); +} + +.center { + text-align: center; +} + +.grid { + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; + margin: auto; + gap: 4%; +} + +.grid-item { + margin: 4% 0; + width: 15rem; + height: 22rem; + text-align: center; +} + +.grid-item div { + height: 50%; +} + +.grid-item img { + width: 100%; + height: 100%; + object-fit: contain; +} + +.grid-item-banner { + width: 88px; +} diff --git a/script.js b/script.js new file mode 100644 index 0000000..c9adef1 --- /dev/null +++ b/script.js @@ -0,0 +1,17 @@ +window.onscroll = function () { + scrollFunction(); +}; + +function scrollFunction() { + if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) { + document.getElementById("scrollToTopBtn").style.display = "block"; + } else { + document.getElementById("scrollToTopBtn").style.display = "none"; + } +} + +// Posunout nahoru, když uživatel klikne na tlačítko +function scrollToTop() { + document.body.scrollTop = 0; // Pro Safari + document.documentElement.scrollTop = 0; // Pro ostatní prohlížeče +} diff --git a/services/img/1-4204059220.png b/services/img/1-4204059220.png new file mode 100644 index 0000000..b548f45 Binary files /dev/null and b/services/img/1-4204059220.png differ diff --git a/services/img/600px-Arch-linux-logo-691350772.png b/services/img/600px-Arch-linux-logo-691350772.png new file mode 100644 index 0000000..143dc53 Binary files /dev/null and b/services/img/600px-Arch-linux-logo-691350772.png differ diff --git a/services/img/91488-2048748032.jpg b/services/img/91488-2048748032.jpg new file mode 100644 index 0000000..7d94d2a Binary files /dev/null and b/services/img/91488-2048748032.jpg differ diff --git a/services/img/IMG_4835.JPG b/services/img/IMG_4835.JPG new file mode 100644 index 0000000..1e40e24 Binary files /dev/null and b/services/img/IMG_4835.JPG differ diff --git a/services/img/Kali-linux-872298623.jpg b/services/img/Kali-linux-872298623.jpg new file mode 100644 index 0000000..2cd26ab Binary files /dev/null and b/services/img/Kali-linux-872298623.jpg differ diff --git a/services/img/endeavourOS-astronaught-3246654328.jpg b/services/img/endeavourOS-astronaught-3246654328.jpg new file mode 100644 index 0000000..477fb10 Binary files /dev/null and b/services/img/endeavourOS-astronaught-3246654328.jpg differ diff --git a/services/img/fedora-feat-5b9fe676c9e77c0050ce388c-2333270958.jpg b/services/img/fedora-feat-5b9fe676c9e77c0050ce388c-2333270958.jpg new file mode 100644 index 0000000..0c76e2b Binary files /dev/null and b/services/img/fedora-feat-5b9fe676c9e77c0050ce388c-2333270958.jpg differ diff --git a/services/img/linux-penguin-and-rainbow-background-imsv6hxt0e8zcl7m-3730406657.jpg b/services/img/linux-penguin-and-rainbow-background-imsv6hxt0e8zcl7m-3730406657.jpg new file mode 100644 index 0000000..d2e641c Binary files /dev/null and b/services/img/linux-penguin-and-rainbow-background-imsv6hxt0e8zcl7m-3730406657.jpg differ diff --git a/services/img/ubuntu-linux-minimal-4k-on-3840x2160-2398598343.jpg b/services/img/ubuntu-linux-minimal-4k-on-3840x2160-2398598343.jpg new file mode 100644 index 0000000..63bcddb Binary files /dev/null and b/services/img/ubuntu-linux-minimal-4k-on-3840x2160-2398598343.jpg differ diff --git a/services/img/wp7596264.jpg b/services/img/wp7596264.jpg new file mode 100644 index 0000000..07190f1 Binary files /dev/null and b/services/img/wp7596264.jpg differ diff --git a/services/img/wp8843183-1041051902.jpg b/services/img/wp8843183-1041051902.jpg new file mode 100644 index 0000000..ffd1483 Binary files /dev/null and b/services/img/wp8843183-1041051902.jpg differ diff --git a/services/index.php b/services/index.php new file mode 100644 index 0000000..c19d6da --- /dev/null +++ b/services/index.php @@ -0,0 +1,225 @@ + + + + + + + + + + + + Lukáš Kaňka - IT služby + + +
+ + + + + +
+
+

+ Lukáš Kaňka
+ IT služby pro Vás

+
+
+ + +
+
+
+
+

O mně

+

Jsem IT nadšenec s pozitivním přístupem k životu a vášní pro + technologie, ve kterých se neustále vzdělávám. Absolvoval jsem kurz + testingu a SQL v Acamaru, další kurz byl web developer u společnosti Engeto. Pracoval jsem na pozici testera ve společnosti Uniprog a nyní pracuji ve společnosti Kyndryl na projektu České Spořitelny pro platformu SMART. +

+

+ Nabízím služby v obkasti IT se zaměřením na open-source a Linux. Své služby nabízím po celé Praze, Jablonci + nad Nisou a online. Ceny startují na 150kč/1hod. + Služby nabízím jednotlivcům tak i spolkům či školám adt. Faktura je samořejmostí. +

+
+
# +
+
+
+ + +
+
+
+

Nabízím tyto služby

+

+

    + +
  • Instalace Linuxu.
  • +
  • Pomůžu vám najít vhodnou Linuxovou distribuci přímo pro Vás. Nejoblíbenější distribuce jsou Ubuntu, + Fedora, Manjaro či Zendalona pro zrakově postižené. +
  • +
  • Naučím vás práci v Linuxu, seznámím s Terminálem a OpenSource.
  • +
  • Nastavím v Linuxu váš nový SSD disk.
  • +
  • Seznámím vás s programy pro Linux které jsou alternativou pro programy Windows.
  • +
  • Vybereme a přispůsobíme vám prostředí v Linuxu.
  • +
  • Rychlá podpora pokud si nebudete vědět rady.
  • +
  • Tvorba on-Line vizitek - zajistím doménu i hosting, pomohu s návrhem vizitky. Základní vizitky + děláme v HTML a CSS, složitější v Wordpressu. +
  • +
  • Tvorba webů pro restaurace - tyto weby tvoříme v Wordpresu s jednoduchou administrací kde si můžete + jidelní lístky jednoduše spravovat. +
  • +
+

+
+ +
    +
  • + +

    Instalace Linuxu

    + +
  • +
  • + +

    Práce s Linuxem a Open Source aplikacemi

    +
  • +
  • + +

    Tvorba vizitek a menších webů

    +
  • +
  • + +

    Poradenství a administrace

    +
  • +
+
+
+ + +
+
+
+
+
+
+
Stačí si vybrat
+
+
+
+
+
+
+ + +
+
+
+ +
+

+

+
+
+ +

Telefoní číslo: +420 725 303 747

+

E-mail: Lukáš Kaňka

+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + \ No newline at end of file diff --git a/services/script.js b/services/script.js new file mode 100644 index 0000000..a508498 --- /dev/null +++ b/services/script.js @@ -0,0 +1,17 @@ +window.onscroll = function () { + scrollFunction(); +}; + +function scrollFunction() { + if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) { + document.getElementById("scrollToTopBtn").style.display = "block"; + } else { + document.getElementById("scrollToTopBtn").style.display = "none"; + } +} + +// Posunout nahoru, když uživatel klikne na tlačítko +function scrollToTop() { + document.body.scrollTop = 0; // Pro Safari + document.documentElement.scrollTop = 0; // Pro ostatní prohlížeče +} \ No newline at end of file diff --git a/services/style.css b/services/style.css new file mode 100644 index 0000000..5c738f1 --- /dev/null +++ b/services/style.css @@ -0,0 +1,578 @@ +:root { + --word-black: #000; + --word-white: #fff; + --link-one: #efa69d; + --link-two: #e9877b; + --background-one: #33292a; + --background-two: #644b4f; + --background-three: #333333; + --background-four: #f2f2f2; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: "Roboto", sans-serif; +} + +/* Navigace (horní menu) */ +nav { + padding: 10px; + background-color: var(--background-one); + font-size: 20px; +} +a { + text-decoration: none; + color: var(--word-white); +} + +.dot { + list-style: none; +} + +nav ul { + list-style: none; + display: flex; + justify-content: space-between; + flex-grow: 1; +} + +.navigation { + width: 65%; + margin: 0 auto; +} + +.icon { + width: auto; + height: 22px; + display: none; + margin-left: auto; + margin-right: 12px; +} + +.icon img { + width: 100%; + height: 100%; +} + +@media (max-width: 768px) { + .navigation { + width: 90%; + margin: 0 auto; + } + + nav ul { + flex-direction: column; + } + + nav a { + /*display: none;*/ + } + + /*.icon {*/ + /* display: block;*/ + /*}*/ +} + +/* Hero - section */ +.hero-section { + height: 80vh; + background-image: url(img/wp7596264.jpg); + background-size: 70%; + background-position: center; + background-repeat: no-repeat; +} + +.hero-text-wrapper { + position: relative; + width: 65%; + margin: 0 auto; + height: 100%; +} + +.hero-text { + color: var(--word-white); + position: absolute; + right: 0; + bottom: 50px; + font-size: 80px; + text-align: right; +} + +.h2-about { + font-weight: 700; +} + +@media (max-width: 768px) { + .hero-text-wrapper { + width: 90%; + margin: 0 auto; + } + .hero-text { + font-size: 35px; + height: 80px; + margin-bottom: 5px; + color: black; + } +} + +/* About sekce */ + +.about-section { + margin: 45px 0; +} + +.about-section-wrapper { + width: 65%; + margin: 0 auto; + display: flex; + gap: 20px; +} + +.about-text { + flex: 1; +} + +.about-img { + flex: 1; +} +img { + width: 100%; + height: 100%; + object-fit: cover; +} + +@media (max-width: 768px) { + .about-section-wrapper { + flex-direction: column; + width: 90%; + margin: 0 auto; + } + + .about-text { + text-align: left; + } + + .about-img { + text-align: center; + } + + .about-text-p { + padding-top: 15px; + } +} + +/* What We Do */ + +.what-section { + background-color: var(--background-one); + color: var(--word-white); +} + +.what-section-wrapper { + width: 65%; + margin: 0 auto; +} +.what-text { + text-align: center; +} +.h2-what-we { + font-size: 38px; + text-align: center; + padding-top: 45px; + padding-bottom: 35px; +} + +.where-text { + text-align: center; +} +.icon-what-section { + margin-top: 45px; + padding: 45px; + list-style: none; + display: flex; + justify-content: space-between; + flex-grow: 1; +} + +.img-icons { + width: 100px; + height: 100px; + align-items: center; +} + +.icon-text { + text-align: center; + padding-top: 15px; + font-size: 25px; +} + +@media (max-width: 768px) { + .what-section-wrapper { + width: 90%; + margin: 0 auto; + } + + .icon-what-section { + flex-direction: column; + align-items: center; + text-align: center; + } + + .img-icons { + width: 80px; + height: 80px; + margin-top: 20px; + align-items: center; + } + + .icon-text { + padding-top: 0px; + } +} + +/* Our Trips */ + +.trips-section { + margin-top: 45px; + margin-bottom: 45px; +} +.trips-section-wrapper { + display: flex; + flex-wrap: wrap; + width: 65%; + margin: auto; + gap: 10px; +} + +.images-item { + height: 222px; + width: 32%; + flex-shrink: 1; + border-radius: 4px; +} + +.images-trips-1 { + background-image: url(img/linux-penguin-and-rainbow-background-imsv6hxt0e8zcl7m-3730406657.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-2 { + background-image: url(img/1-4204059220.png); + background-size: cover; + background-position: center; +} + +.images-trips-3 { + background-image: url(img/fedora-feat-5b9fe676c9e77c0050ce388c-2333270958.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-4 { + background-image: url(img/ubuntu-linux-minimal-4k-on-3840x2160-2398598343.jpg); + background-size: cover; + background-position: center; +} + +.text-trips { + background-color: var(--background-four); + color: var(--word-black); + display: flex; + justify-content: center; + align-items: center; + font-size: 32px; + font-weight: 700; +} + +.images-trips-5 { + background-image: url(img/Kali-linux-872298623.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-6 { + background-image: url(img/wp8843183-1041051902.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-7 { + background-image: url(img/91488-2048748032.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-8 { + background-image: url(img/endeavourOS-astronaught-3246654328.jpg); + background-size: cover; + background-position: center; +} + +@media (max-width: 768px) { + .trips-section-wrapper { + width: 90%; + margin: 0 auto; + } + + .images-item { + width: 333px; + height: 222px; + } + + .text-trips { + height: 80px; + } +} + +/* Where togo */ +.where-section { + background-color: var(--background-two); + color: var(--word-white); + display: flex; +} + +.where-section-wrapper { + width: 65%; + margin: 0 auto; + padding-top: 45px; + padding-bottom: 45px; + display: flex; +} + +.where-text { + display: flex; +} + +.h2-where { + flex: 1; + font-size: 25px; + width: 272px; + height: 114px; + text-align: left; +} + +.where-text-div { + flex: 1; + width: 572; + height: 201; + text-align: left; +} + +.contact-text { + margin-top: 20px; +} + +.contact-button { + margin-top: 35px; + background-color: var(--background-four); + width: 133px; + height: 43px; + border-radius: 4px; + text-align: center; + line-height: 43px; +} + +.contact-button-text { + font-size: 14px; + font-weight: 700; + font-family: Inter; + color: var(--word-black); + display: block; +} +.mobile { + display: none; +} + +@media (max-width: 768px) { + .where-section-wrapper { + width: 90%; + margin: 0 auto; + } + + .where-text { + flex-direction: column; + } + .desktop { + display: none; + } + + .mobile { + display: block; + font-size: 25px; + margin-bottom: 25px; + } +} + +/* Reviews section */ + +.reviews-section { + width: 65%; + margin: 0 auto; + margin-top: 45px; + margin-bottom: 45px; +} +.h2-reviews { + text-align: center; + padding-bottom: 20px; +} +.reviews-text { + width: 332px; + height: 159px; + text-align: center; + margin: auto; +} + +.reviews-card-wrapper { + display: flex; + align-items: center; + justify-content: space-evenly; + gap: 300px; +} + +.reviews-card { + width: 378.49px; + height: 346px; + text-align: center; +} + +.reviews-card-1 { + width: 378.49px; + height: 346px; + text-align: center; +} + +.reviews-card img { + width: 122.13px; + height: 111px; + border-radius: 50%; +} + +.reviews-card-1 img { + width: 122.13px; + height: 111px; + border-radius: 50%; +} + +.reviews-card-text { + margin-top: 20px; +} + +.reviews-name { + font-weight: 700; + padding-top: 50px; + height: 19px; + align-items: center; +} + +@media (max-width: 768px) { + .reviews-section { + width: 90%; + margin: 0 auto; + } + + .reviews-card-wrapper { + flex-direction: column; + width: 90%; + margin: 0 auto; + gap: 95px; + } + .reviews-card { + width: 324px; + } + + .reviews-card-1 { + width: 324px; + } + + .reviews-text { + width: 263px; + } + + .h2-reviews { + padding-top: 40px; + } + + .reviews-name { + padding-bottom: 40px; + } +} + +/* Photo gallery */ +.photo-gallery { + /* display: flex; */ + /* flex-wrap: wrap; */ +} +.photo-gallery-wrapper { + display: flex; + flex-wrap: wrap; +} + +.picture-img { + width: 100%; + height: auto; + display: block; + object-fit: cover; + max-width: 50%; +} + +@media (max-width: 768px) { + .photo-gallery-wrapper { + flex-direction: column; + margin-top: 100px; + } + .picture-img { + max-width: 100%; + height: 260px; + } +} + +/* Footer */ +.footer-wrapper { + background-color: var(--background-three); + padding: 45px; +} + +.footer-text { + text-align: center; +} +.footer-contact { + color: var(--link-two); + text-decoration: underline; + font-weight: 700; +} +.footer-text-p { + padding-top: 20px; + text-align: center; + color: var(--word-white); + font-weight: 700; +} + +@media (max-width: 768px) { + .footer-contact { + font-size: 12px; + } + .footer-text-p { + font-size: 10px; + } +} + + +/* Rolovací tlačítko */ + #scrollToTopBtn { + display: none; + position: fixed; + bottom: 20px; + right: 20px; + /*butoon přes obsah*/ + z-index: 99; + outline: none; + cursor: pointer; + padding: 15px; + border-radius: 50%; + background-color: transparent; \ No newline at end of file diff --git a/style.css b/style.css new file mode 100644 index 0000000..397cf00 --- /dev/null +++ b/style.css @@ -0,0 +1,591 @@ +:root { + --word-black: #000; + --word-white: #fff; + --link-one: #efa69d; + --link-two: #e9877b; + --background-one: #33292a; + --background-two: #644b4f; + --background-three: #333333; + --background-four: #f2f2f2; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: "Roboto", sans-serif; +} + +/* Navigace (horní menu) */ +nav { + padding: 10px; + background-color: var(--background-one); + font-size: 20px; +} +a { + text-decoration: none; + color: var(--word-white); +} + +.dot { + list-style: none; +} + +nav ul { + list-style: none; + display: flex; + justify-content: space-between; + flex-grow: 1; +} + +.navigation { + width: 65%; + margin: 0 auto; +} + +.icon { + width: auto; + height: 22px; + display: none; + margin-left: auto; + margin-right: 12px; +} + +.icon img { + width: 100%; + height: 100%; +} + +@media (max-width: 768px) { + .navigation { + width: 90%; + margin: 0 auto; + } + + nav ul { + flex-direction: column; + } + + nav a { + /*display: none;*/ + } + + /*.icon {*/ + /* display: block;*/ + /*}*/ +} + +/* Hero - section */ +.hero-section { + height: 80vh; + background-image: url(img/400789-Linux-GNU-GNU_-_Linux-minimalism.jpg); + background-size: 70%; + background-position: center; + background-repeat: no-repeat; +} + +.hero-text-wrapper { + position: relative; + width: 65%; + margin: 0 auto; + height: 100%; +} + +.hero-text { + color: var(--word-white); + position: absolute; + right: 0; + bottom: 50px; + font-size: 80px; + text-align: right; +} + +.h2-about { + font-weight: 700; +} + +@media (max-width: 768px) { + .hero-text-wrapper { + width: 90%; + margin: 0 auto; + } + .hero-text { + font-size: 35px; + height: 80px; + margin-bottom: 5px; + color: black; + } +} + +/* About sekce */ + +.about-section { + margin: 45px 0; +} + +.about-section-wrapper { + width: 65%; + margin: 0 auto; + display: flex; + gap: 20px; +} + +.about-text { + flex: 1; +} + +.about-img { + flex: 1; +} +img { + width: 100%; + height: 100%; + object-fit: cover; +} + +@media (max-width: 768px) { + .about-section-wrapper { + flex-direction: column; + width: 90%; + margin: 0 auto; + } + + .about-text { + text-align: left; + } + + .about-img { + text-align: center; + } + + .about-text-p { + padding-top: 15px; + } +} + +/* What We Do */ + +.what-section { + background-color: var(--background-one); + color: var(--word-white); +} + +.what-section-wrapper { + width: 65%; + margin: 0 auto; +} +.what-text { + text-align: center; +} +.h2-what-we { + font-size: 38px; + text-align: center; + padding-top: 45px; + padding-bottom: 35px; +} + +.where-text { + text-align: center; +} +.icon-what-section { + margin-top: 45px; + padding: 45px; + list-style: none; + display: flex; + justify-content: space-between; + flex-grow: 1; +} + +.img-icons { + width: 100px; + height: 100px; + align-items: center; +} + +.icon-text { + text-align: center; + padding-top: 15px; + font-size: 25px; +} + +.dotkontakt { + padding-bottom: 40px; +} + +@media (max-width: 768px) { + .what-section-wrapper { + width: 90%; + margin: 0 auto; + } + + .icon-what-section { + flex-direction: column; + align-items: center; + text-align: center; + } + + .img-icons { + width: 80px; + height: 80px; + margin-top: 20px; + align-items: center; + } + + .icon-text { + padding-top: 0px; + } +} + +/* Our Trips */ + +.trips-section { + margin-top: 45px; + margin-bottom: 45px; +} +.trips-section-wrapper { + display: flex; + flex-wrap: wrap; + width: 65%; + margin: auto; + gap: 10px; +} + +.images-item { + height: 222px; + width: 32%; + flex-shrink: 1; + border-radius: 4px; +} + +.images-trips-1 { + background-image: url(img/linux-penguin-and-rainbow-background-imsv6hxt0e8zcl7m-3730406657.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-2 { + background-image: url(img/1-4204059220.png); + background-size: cover; + background-position: center; +} + +.images-trips-3 { + background-image: url(img/fedora-feat-5b9fe676c9e77c0050ce388c-2333270958.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-4 { + background-image: url(img/ubuntu-linux-minimal-4k-on-3840x2160-2398598343.jpg); + background-size: cover; + background-position: center; +} + +.text-trips { + background-color: var(--background-four); + color: var(--word-black); + display: flex; + justify-content: center; + align-items: center; + font-size: 32px; + font-weight: 700; +} + +.images-trips-5 { + background-image: url(img/Kali-linux-872298623.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-6 { + background-image: url(img/wp8843183-1041051902.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-7 { + background-image: url(img/91488-2048748032.jpg); + background-size: cover; + background-position: center; +} + +.images-trips-8 { + background-image: url(img/endeavourOS-astronaught-3246654328.jpg); + background-size: cover; + background-position: center; +} + +@media (max-width: 768px) { + .trips-section-wrapper { + width: 90%; + margin: 0 auto; + } + + .images-item { + width: 333px; + height: 222px; + } + + .text-trips { + height: 80px; + } +} + +/* Where togo */ +.where-section { + background-color: var(--background-two); + color: var(--word-white); + display: flex; + margin-top: 10px; +} + +.where-section-wrapper { + width: 65%; + margin: 0 auto; + padding-top: 45px; + padding-bottom: 45px; + display: flex; +} + +.where-text { + display: flex; +} + +.h2-where { + flex: 1; + font-size: 25px; + width: 272px; + height: 114px; + text-align: left; +} + +.where-text-div { + flex: 1; + width: 572; + height: 201; + text-align: left; +} + +.contact-text { + margin-top: 20px; +} + +.contact-button { + margin-top: 35px; + background-color: var(--background-four); + width: 133px; + height: 43px; + border-radius: 4px; + text-align: center; + line-height: 43px; +} + +.contact-button-text { + font-size: 14px; + font-weight: 700; + font-family: Inter; + color: var(--word-black); + display: block; +} +.mobile { + display: none; +} + +@media (max-width: 768px) { + .where-section-wrapper { + width: 90%; + margin: 0 auto; + } + + .where-text { + flex-direction: column; + } + .desktop { + display: none; + } + + .mobile { + display: block; + font-size: 25px; + margin-bottom: 25px; + } +} + +/* Reviews section */ + +.reviews-section { + width: 65%; + margin: 0 auto; + margin-top: 45px; + margin-bottom: 45px; +} +.h2-reviews { + text-align: center; + padding-bottom: 20px; +} +.reviews-text { + width: 332px; + height: 159px; + text-align: center; + margin: auto; +} + +.reviews-card-wrapper { + display: flex; + align-items: center; + justify-content: space-evenly; + gap: 300px; +} + +.reviews-card { + width: 378.49px; + height: 346px; + text-align: center; +} + +.reviews-card-1 { + width: 378.49px; + height: 346px; + text-align: center; +} + +.reviews-card img { + width: 122.13px; + height: 111px; + border-radius: 50%; +} + +.reviews-card-1 img { + width: 122.13px; + height: 111px; + border-radius: 50%; +} + +.reviews-card-text { + margin-top: 20px; +} + +.reviews-name { + font-weight: 700; + padding-top: 50px; + height: 19px; + align-items: center; +} + +@media (max-width: 768px) { + .reviews-section { + width: 90%; + margin: 0 auto; + } + + .reviews-card-wrapper { + flex-direction: column; + width: 90%; + margin: 0 auto; + gap: 95px; + } + .reviews-card { + width: 324px; + } + + .reviews-card-1 { + width: 324px; + } + + .reviews-text { + width: 263px; + } + + .h2-reviews { + padding-top: 40px; + } + + .reviews-name { + padding-bottom: 40px; + } +} + +/* Photo gallery */ +.photo-gallery { + /* display: flex; */ + /* flex-wrap: wrap; */ +} +.photo-gallery-wrapper { + display: flex; + flex-wrap: wrap; +} + +.picture-img { + width: 100%; + height: auto; + display: block; + object-fit: cover; + max-width: 50%; +} + +@media (max-width: 768px) { + .photo-gallery-wrapper { + flex-direction: column; + margin-top: 100px; + } + .picture-img { + max-width: 100%; + height: 260px; + } +} + +/* Footer */ +.footer { + margin-top: 10px; +} +.footer-wrapper { + background-color: var(--background-three); + padding: 45px; +} + +.footer-text { + text-align: center; +} +.footer-contact { + color: var(--link-two); + text-decoration: underline; + font-weight: 700; +} +.footer-text-p { + padding-top: 20px; + text-align: center; + color: var(--word-white); + font-weight: 700; +} + +@media (max-width: 768px) { + .footer-contact { + font-size: 12px; + } + .footer-text-p { + font-size: 10px; + } +} + +/* Rolovací tlačítko */ +#scrollToTopBtn { + display: none; + position: fixed; + bottom: 20px; + right: 20px; + /*butoon přes obsah*/ + z-index: 99; + outline: none; + cursor: pointer; + padding: 15px; + border-radius: 50%; + background-color: transparent; +} +/* Styly pro PHP */ +.date { + color: #f2f2f2; + text-align: center; +} diff --git a/zalohamyoscloud/index.php b/zalohamyoscloud/index.php new file mode 100644 index 0000000..f0853c7 --- /dev/null +++ b/zalohamyoscloud/index.php @@ -0,0 +1,83 @@ + + + Cloudron LAMP app (PHP <?php echo PHP_VERSION ?>) + + + + + + +
+ +

Cloudron LAMP App (PHP )

+ +
+ +

Overview

+

+

+ This page is a placeholder showing information on how to use the LAMP stack (PHP ) + This page will get overwritten, when an index.php or index.html is uploaded. +
+

+ +

Database Credentials

+

+

+ MySQL, Redis & SMTP credentials are stored in credentials.txt. You can access this file + via SFTP or via the + File Manager. +
+
+
Note that the credentials can only be used from within your app. They will not work from outside the Cloudron.
+

+ +

phpMyAdmin

+

+ phpMyAdmin is installed here. For login credentials, see phpmyadmin_login.txt + via SFTP or the File Manager. +

+ + +