Some resources cleanup
33
README.md
|
@ -1,33 +0,0 @@
|
|||
# JetBrains Key Factory
|
||||
|
||||
A simple and lightweight browser extension that allows you to generate JetBrains product codes (including plugins), with supports up to **10 languages**
|
||||
|
||||
> NOTE: to install this [script](https://github.com/L0w1y/JBKF/raw/main/jetbra.user.js), you can use tampermonkey, what located [here](https://www.tampermonkey.net/)
|
||||
|
||||
# So how it works
|
||||
|
||||
For the first step - we go to [Jetbrains Marketplace](https://plugins.jetbrains.com/)
|
||||
|
||||
Search, what you needed, and press the generate button (only if it visible)
|
||||
|
||||
![Example1](assets/image.png)
|
||||
|
||||
If you press the button - script will thrown the allert, with state of current task
|
||||
|
||||
if the task successfuly completed - you will got message, what looks like that: "**Copied to clipboard**... etc", and the code, what has been copied looks like that:
|
||||
|
||||
```
|
||||
HTHYUKQX06-eyJsaWNlbnNlSWQiOiJIVEhZVUtRWDA2IiwibGljZW5zZWVOYW1lIjoicmVib3JuIiwiYXNzaWduZWVOYW1lIjoicmVib3JuIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiQUlQIiwiZmFsbGJhY2tEYXRlIjoiMjA5OS0wOC0wMSIsInBhaWRVcFRvIjoiMjA5OS0wOC0wMSJ9XSwibWV0YWRhdGEiOiIwMTIwMjMwMTAyUFBBQTAxMzAwOSIsImhhc2giOiI0MTQ3Mjk2MS8wOjE1NjM2MDk0NTEiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6dHJ1ZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOnRydWV9-QxX0VGY3d8ahdcuLkZaDkPVUCU7P7X3x2oJ1bEu1vRSqEF0SfAMnN+6K9j3NhDlPa4kC5qT4y5yraQHeQuwFyMZo1atI9d12ZMJ65wB2o/mq/XmwlyxMfUm0xt2nFprN3vvaDz/DphXGXy5vLCSIWGRIdMRHncwqI9LGR1mF1ls2elqef67psJzWfZZwpIEIgExxw7dqgqACfOyW3GDOTVjLRoI4Qx6Jhv8wHo/A0TafGk1YVWVnE971AVzowMHti0aYEx4fYQARPTWQUyFyaukgHMbuHSNaHyXKgBPgH6aJZNKrR6WR7I7Eg9gS7b/9shctro+E//O6MsWYx5v5ePnf1KPeLCg4T8evffjjJ2mvWjAWEib/2GuWda3Pym/OnsXNuCI8ieUdzPygFzGUASEnb2BJOrjrWV/IT86t5nbHibYzLTC/ddVKhiKPkbTG7Be2H5lOIT4zmozuc1vROUw6SedgSJuRds2xSnIzfXAbfn+7NJfqY+xY1J/9jh3YFMf02s3QFjryo4XnVeOe/jSh6Q+6G0XRnemJBVdDx/6cR18Cyvb4fDdQo+phvt+g2yMHFqJj/ni3gi5tQTi88TuODWLbEJTxydwXb7M/cpN280m0qyRdyWA+eZFyV+B816cJaVWzgUBDs4wkxWHhaCY4yZ+RLOaATgbCFk0Sqgs=-MIIEtTCCAp2gAwIBAgIUDyuccmylba71lZQAQic5TJiAhwwwDQYJKoZIhvcNAQELBQAwGDEWMBQGA1UEAwwNSmV0UHJvZmlsZSBDQTAeFw0yMzA5MjkxNDA2MTJaFw0zMzA5MjcxNDA2MTJaMBExDzANBgNVBAMMBk5vdmljZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALenqcGP2ZxGkYqmKA9c4Hzf8+YD1smvmOxKjd+bmTLrutM/hXv1cj1rW3/lqyDtdDk7K6W8/TDq1CRrEt+Do6l30DxhAiC34aH8DmGwgq77xEoLimvH5LpePxflF+tbB1RZtFgFDOIYLdSQaKFH2JDgVKxhLiV3S6jniPhkCtWWrTs+E6vq4N15Bm3NnM5AJILqjtUbOjNfaxVq6RrOoTc0R3Fqqo6yvxo/+JYa2UnHIC+r2dbKuDLMUrtgnydEUdJNX0zH9FtcdELvr48uc9mY038TWUsZUK1pnQbxA2bPyA4qnYJ9IvUgO6LtLXvGFm137YQMS1N41AHDBOrwoNI8UoDX+qI3rM96biFOFvn7Edky7rByzybt3H+zxdojfjvpL1E0NO98BT9zfufHAaAxZtlmDOu5LDJe3CGurnyRMRExbtc+Qjl1mUh6tG4lakAwdsoxry0GdG72yaYyb9it53kaFks/T/s7Z7bRJzVFzQDV1Y4bzUtk43vKm2vztBVlQkBkZY5f2Jbe5Ig3b8swQzBnOT0mrL5SPUhwmQ6IxkEWztj55OEujBMmRr92oESuq9ZYMaeLidKWVR3/++HA8BRZaRGEKtSHZCbFEFdihDxxJv9Xh6NuT/ewJ6HYp+0NQpFnUnJ72n8wV+tudpam7aKcdzVmz7cNwOhG2Ls7AgMBAAEwDQYJKoZIhvcNAQELBQADggIBAIdeaQfKni7tXtcywC3zJvGzaaj242pSWB1y40HW8jub0uHjTLsBPX27iA/5rb+rNXtUWX/f2K+DU4IgaIiiHhkDrMsw7pivazqwA9h7/uA0A5nepmTYf/HY4W6P2stbeqInNsFRZXS7Jg4Q5LgEtHKo/H8USjtVw9apmE3BCElkXRuelXMsSllpR/JEVv/8NPLmnHSY02q4KMVW2ozXtaAxSYQmZswyP1YnBcnRukoI4igobpcKQXwGoQCIUlec8LbFXYM9V2eNCwgABqd4r67m7QJq31Y/1TJysQdMH+hoPFy9rqNCxSq3ptpuzcYAk6qVf58PrrYH/6bHwiYPAayvvdzNPOhM9OCwomfcazhK3y7HyS8aBLntTQYFf7vYzZxPMDybYTvJM+ClCNnVD7Q9fttIJ6eMXFsXb8YK1uGNjQW8Y4WHk1MCHuD9ZumWu/CtAhBn6tllTQWwNMaPOQvKf1kr1Kt5etrONY+B6O+Oi75SZbDuGz7PIF9nMPy4WB/8XgKdVFtKJ7/zLIPHgY8IKgbx/VTz6uBhYo8wOf3xzzweMnn06UcfV3JGNvtMuV4vlkZNNxXeifsgzHugCvJX0nybhfBhfIqVyfK6t0eKJqrvp54XFEtJGR+lf3pBfTdcOI6QFEPKGZKoQz8Ck+BC/WBDtbjc/uYKczZ8DKZu
|
||||
```
|
||||
|
||||
And after that step - you can open your favorite JetBrains IDE, and activate your plugin!
|
||||
|
||||
> "NOTE:" You should install jetbra package, from [original repo](https://github.com/novice88/jetbra). Make sure, you have already installed jetbra!
|
||||
|
||||
After all steps to be done - you will enjoy
|
||||
|
||||
# Important
|
||||
|
||||
This script is only modification, what allow's you to see multiple actions in selected language
|
||||
|
||||
Special thanks to [Novice LI](https://github.com/novice88) for main JetBra extension
|
BIN
assets/image.png
Before Width: | Height: | Size: 789 KiB |
1
icons/aqua.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="aqua_svg__a" x1="59.932" x2="1.336" y1="59.676" y2="1.079" gradientUnits="userSpaceOnUse"><stop offset=".25" stop-color="#7256FF"/><stop offset=".73" stop-color="#007DFE"/></linearGradient><linearGradient id="aqua_svg__b" x1="7.671" x2="61.125" y1="64.392" y2="39.609" gradientUnits="userSpaceOnUse"><stop offset=".3" stop-color="#00D886"/><stop offset=".54" stop-color="#7256FF"/></linearGradient></defs><path fill="url(#aqua_svg__a)" d="M0 4.125v34.127c0 1.659.993 3.155 2.52 3.8L39.943 57.85c.518.219 1.075.33 1.638.324l18.329-.15A4.125 4.125 0 0 0 64 53.9V36.234c0-.806-.236-1.593-.678-2.267L42.213 1.86A4.125 4.125 0 0 0 38.766 0H4.125A4.125 4.125 0 0 0 0 4.125Z"/><path fill="url(#aqua_svg__b)" d="M6 49.015v10.862a4.125 4.125 0 0 0 4.125 4.125h12.566c.2 0 .4-.014.598-.044l37.185-5.448A4.125 4.125 0 0 0 64 54.429V39.03a4.125 4.125 0 0 0-4.127-4.125l-18.504.005c-.426 0-.849.066-1.254.195L8.871 45.085A4.126 4.126 0 0 0 6 49.015H6Z"/><path fill="#00D886" d="M6 47.55v12.259a4.125 4.125 0 0 0 4.19 4.124L21 64c1.181-.019 2.531-.786 3.3-1.683l32.707-38.158c.64-.748.993-1.7.993-2.685V10.125A4.125 4.125 0 0 0 53.875 6H42.872c-1.19 0-2.321.514-3.105 1.409L7.021 44.834A4.123 4.123 0 0 0 6 47.55Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM20.746 31.242a7.32 7.32 0 0 1-2.755-2.786c-.668-1.183-1.003-2.503-1.003-3.961s.334-2.778 1.003-3.96a7.314 7.314 0 0 1 2.755-2.787c1.168-.675 2.474-1.014 3.917-1.014 1.443 0 2.739.338 3.907 1.013a7.278 7.278 0 0 1 2.75 2.787c.664 1.183.996 2.503.996 3.961s-.332 2.778-.997 3.96a7.278 7.278 0 0 1-2.749 2.788c-1.168.675-2.47 1.013-3.907 1.013-1.436 0-2.75-.338-3.917-1.013Zm6.308-2.229c.707-.446 1.261-1.065 1.661-1.854.4-.79.6-1.678.6-2.664 0-.986-.2-1.874-.6-2.664a4.6 4.6 0 0 0-1.661-1.854c-.708-.446-1.504-.67-2.39-.67-.886 0-1.685.223-2.396.67a4.62 4.62 0 0 0-1.672 1.854c-.403.79-.605 1.678-.605 2.664 0 .986.202 1.874.605 2.664.404.79.962 1.408 1.672 1.854.711.447 1.51.67 2.396.67.886 0 1.683-.223 2.39-.67Zm-2.16 6.034a2.666 2.666 0 0 1-1.126-1.077c-.261-.464-.391-1.011-.391-1.64l-.01-1.94h2.743v1.811c0 .221.043.413.129.573.085.161.209.283.37.365.16.082.352.123.574.123h1.833v2.165h-2.412c-.65 0-1.22-.127-1.71-.38ZM38.233 16.992h3.173l5.563 15.006h-2.947l-1.212-3.483h-5.842l-1.136 3.483H32.82l5.413-15.006Zm3.805 9.261-2.025-5.723-.225-.954-.215.954-1.908 5.723h4.373Z"/></svg>
|
After Width: | Height: | Size: 2.4 KiB |
1
icons/clion.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="clion_svg__a" x1="4.067" x2="62.664" y1="4.327" y2="62.923" gradientUnits="userSpaceOnUse"><stop offset=".29" stop-color="#009AE5"/><stop offset=".7" stop-color="#00D980"/></linearGradient><linearGradient id="clion_svg__b" x1="56.329" x2="2.874" y1="-.391" y2="24.393" gradientUnits="userSpaceOnUse"><stop offset=".3" stop-color="#FF2D90"/><stop offset=".54" stop-color="#009AE5"/></linearGradient></defs><path fill="url(#clion_svg__a)" d="M64 59.878V25.75a4.125 4.125 0 0 0-2.52-3.8L24.057 6.153a4.118 4.118 0 0 0-1.638-.325l-18.329.15A4.124 4.124 0 0 0 0 10.103v17.665c0 .806.236 1.593.678 2.267l21.109 32.109a4.124 4.124 0 0 0 3.447 1.859h34.641A4.125 4.125 0 0 0 64 59.878Z"/><path fill="url(#clion_svg__b)" d="M58 14.988V4.125A4.125 4.125 0 0 0 53.875 0H41.309c-.2 0-.4.014-.598.044L3.527 5.492A4.125 4.125 0 0 0 0 9.573v15.398a4.125 4.125 0 0 0 4.126 4.125l18.505-.005c.425 0 .848-.066 1.253-.195l31.246-9.98A4.126 4.126 0 0 0 58 14.988Z"/><path fill="#FF2D90" d="M58 16.453V4.194A4.125 4.125 0 0 0 53.81.07L43.003.008c-1.18.019-2.535.781-3.304 1.678L6.993 39.844c-.64.748-.993 1.7-.993 2.684v11.35a4.125 4.125 0 0 0 4.125 4.125h11.003c1.19 0 2.321-.514 3.104-1.409L56.98 19.17A4.124 4.124 0 0 0 58 16.453Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM20.747 31.242a7.287 7.287 0 0 1-2.744-2.786c-.665-1.183-.997-2.503-.997-3.961s.332-2.778.997-3.96a7.29 7.29 0 0 1 2.744-2.787c1.164-.675 2.465-1.014 3.901-1.014 1.215 0 2.33.225 3.345.675a6.862 6.862 0 0 1 2.535 1.892 6.443 6.443 0 0 1 1.355 2.793h-3.065a4.054 4.054 0 0 0-.895-1.431 4.038 4.038 0 0 0-1.431-.95 4.895 4.895 0 0 0-1.822-.332c-.887 0-1.687.222-2.402.665a4.61 4.61 0 0 0-1.677 1.827c-.404.776-.606 1.649-.606 2.62 0 .973.202 1.846.606 2.621a4.605 4.605 0 0 0 1.677 1.828c.715.443 1.515.664 2.402.664a4.88 4.88 0 0 0 1.822-.332 4.022 4.022 0 0 0 2.326-2.38h3.065a6.444 6.444 0 0 1-1.355 2.792 6.863 6.863 0 0 1-2.535 1.892c-1.015.45-2.13.675-3.345.675-1.436 0-2.736-.337-3.901-1.013v.003ZM37.33 16.992v12.37h7.117v2.636H34.414V16.992h2.916Z"/></svg>
|
After Width: | Height: | Size: 2.1 KiB |
1
icons/datagrip.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="datagrip_svg__a" x1="59.676" x2="1.08" y1="4.067" y2="62.663" gradientUnits="userSpaceOnUse"><stop offset=".28" stop-color="#7256FF"/><stop offset=".66" stop-color="#00D980"/></linearGradient><linearGradient id="datagrip_svg__b" x1="64.391" x2="39.607" y1="56.329" y2="2.874" gradientUnits="userSpaceOnUse"><stop offset=".3" stop-color="#FF43F2"/><stop offset=".54" stop-color="#7256FF"/></linearGradient></defs><path fill="url(#datagrip_svg__a)" d="M4.125 64h34.127a4.125 4.125 0 0 0 3.8-2.52L57.85 24.057c.219-.518.33-1.076.324-1.638l-.15-18.329A4.125 4.125 0 0 0 53.9 0H36.234c-.806 0-1.593.236-2.267.678L1.86 21.787A4.125 4.125 0 0 0 0 25.234v34.641A4.125 4.125 0 0 0 4.125 64Z"/><path fill="url(#datagrip_svg__b)" d="M49.013 58h10.862A4.125 4.125 0 0 0 64 53.875V41.309c0-.2-.014-.4-.044-.598L58.508 3.527A4.125 4.125 0 0 0 54.427 0H39.029a4.125 4.125 0 0 0-4.125 4.126l.005 18.505c0 .425.066.848.195 1.253l9.979 31.246a4.126 4.126 0 0 0 3.93 2.87Z"/><path fill="#FF43F2" d="M47.55 58h12.259a4.125 4.125 0 0 0 4.124-4.19L64 43c-.018-1.181-.785-2.531-1.682-3.3L24.159 6.993A4.126 4.126 0 0 0 21.474 6H10.125A4.125 4.125 0 0 0 6 10.125v11.003c0 1.19.514 2.321 1.409 3.104L44.834 56.98A4.123 4.123 0 0 0 47.55 58Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM17.012 16.992h5.713c1.422 0 2.696.321 3.821.965a6.882 6.882 0 0 1 2.642 2.674c.636 1.14.954 2.427.954 3.864 0 1.437-.318 2.725-.954 3.865a6.891 6.891 0 0 1-2.642 2.674c-1.125.643-2.4.964-3.821.964h-5.713V16.992Zm8.028 11.876c.672-.4 1.19-.973 1.554-1.72.365-.747.547-1.63.547-2.653 0-1.023-.182-1.907-.547-2.653-.364-.747-.882-1.32-1.554-1.721-.672-.4-1.454-.6-2.348-.6h-2.755v9.947h2.755c.893 0 1.676-.2 2.348-.6ZM35.426 31.242a7.287 7.287 0 0 1-2.744-2.786c-.664-1.183-.997-2.503-.997-3.961s.333-2.778.997-3.96 1.58-2.112 2.744-2.787c1.164-.675 2.466-1.014 3.902-1.014 1.164 0 2.238.208 3.221.622a6.909 6.909 0 0 1 2.487 1.747 6.362 6.362 0 0 1 1.42 2.594h-3.13a3.914 3.914 0 0 0-.927-1.228c-.39-.346-.845-.614-1.367-.803s-1.082-.284-1.683-.284c-.886 0-1.686.221-2.401.664a4.612 4.612 0 0 0-1.678 1.828c-.403.775-.605 1.649-.605 2.62s.202 1.846.605 2.621a4.607 4.607 0 0 0 1.678 1.828c.714.443 1.515.664 2.401.664.822 0 1.567-.154 2.235-.461.668-.307 1.199-.733 1.592-1.276a3.297 3.297 0 0 0 .633-1.833l.01.31h-3.526v-2.304h6.356v1.18c0 1.321-.32 2.517-.96 3.585a6.885 6.885 0 0 1-2.625 2.525c-1.112.614-2.357.921-3.736.921-1.38 0-2.737-.337-3.902-1.013v.002Z"/></svg>
|
After Width: | Height: | Size: 2.5 KiB |
1
icons/dataspell.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="dataspell_svg__a" x1="4.067" x2="62.664" y1="4.327" y2="62.923" gradientUnits="userSpaceOnUse"><stop offset=".28" stop-color="#007DFE"/><stop offset=".73" stop-color="#00D980"/></linearGradient><linearGradient id="dataspell_svg__b" x1="56.329" x2="2.875" y1="-.391" y2="24.392" gradientUnits="userSpaceOnUse"><stop offset=".32" stop-color="#F0EB18"/><stop offset=".55" stop-color="#007DFE"/></linearGradient></defs><path fill="url(#dataspell_svg__a)" d="M64 59.878V25.75a4.125 4.125 0 0 0-2.52-3.8L24.057 6.153a4.118 4.118 0 0 0-1.638-.325l-18.329.15A4.124 4.124 0 0 0 0 10.103v17.665c0 .806.236 1.593.678 2.267l21.109 32.109a4.124 4.124 0 0 0 3.447 1.859h34.641A4.125 4.125 0 0 0 64 59.878Z"/><path fill="url(#dataspell_svg__b)" d="M58 14.988V4.125A4.125 4.125 0 0 0 53.875 0H41.309c-.2 0-.4.014-.598.044L3.527 5.492A4.125 4.125 0 0 0 0 9.573v15.398a4.125 4.125 0 0 0 4.126 4.125l18.505-.005c.425 0 .848-.066 1.253-.195l31.246-9.98A4.126 4.126 0 0 0 58 14.988Z"/><path fill="#F0EB18" d="M58 16.45V4.191A4.125 4.125 0 0 0 53.81.067L43 0c-1.181.019-2.531.786-3.3 1.683L6.993 39.84c-.64.748-.993 1.7-.993 2.685v11.349A4.125 4.125 0 0 0 10.125 58h11.003c1.19 0 2.321-.514 3.104-1.409L56.98 19.166A4.124 4.124 0 0 0 58 16.45Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM17.012 16.992h5.713c1.422 0 2.696.321 3.821.965a6.882 6.882 0 0 1 2.642 2.674c.636 1.14.954 2.427.954 3.864 0 1.437-.318 2.725-.954 3.865a6.891 6.891 0 0 1-2.642 2.674c-1.125.643-2.4.964-3.821.964h-5.713V16.992Zm8.028 11.876c.672-.4 1.19-.973 1.554-1.72.365-.747.547-1.63.547-2.653 0-1.023-.182-1.907-.547-2.653-.364-.747-.882-1.32-1.554-1.721-.672-.4-1.454-.6-2.348-.6h-2.755v9.947h2.755c.893 0 1.676-.2 2.348-.6ZM34.713 31.664c-.84-.393-1.497-.943-1.973-1.65-.475-.708-.72-1.522-.734-2.444h2.937c0 .436.114.818.343 1.147.229.329.547.586.954.772.407.185.875.278 1.404.278.53 0 .952-.083 1.334-.251.382-.168.68-.402.89-.702.21-.3.316-.643.316-1.029 0-.479-.145-.875-.434-1.19-.29-.314-.688-.532-1.195-.654l-2.648-.59c-.714-.156-1.336-.426-1.865-.809a4.015 4.015 0 0 1-1.232-1.42c-.293-.564-.44-1.2-.44-1.908 0-.857.222-1.627.665-2.31.443-.682 1.06-1.215 1.854-1.597.793-.382 1.694-.573 2.701-.573s1.933.186 2.733.558 1.424.888 1.871 1.549c.446.66.674 1.42.68 2.277h-2.926c0-.364-.096-.691-.289-.98s-.466-.515-.82-.676a2.915 2.915 0 0 0-1.217-.24c-.457 0-.86.076-1.205.23a1.902 1.902 0 0 0-.81.643c-.193.275-.29.595-.29.96 0 .414.135.757.403 1.028.268.272.634.464 1.098.579l2.552.557c.735.15 1.392.435 1.967.852a4.45 4.45 0 0 1 1.345 1.544c.32.611.482 1.278.482 1.999 0 .886-.234 1.681-.702 2.385-.468.703-1.124 1.255-1.967 1.656-.843.4-1.808.6-2.894.6s-2.05-.197-2.889-.59Z"/></svg>
|
After Width: | Height: | Size: 2.7 KiB |
1
icons/dotcover.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="dotcover_svg__a" x1="56.329" x2="2.874" y1="-.391" y2="24.392" gradientUnits="userSpaceOnUse"><stop offset=".18" stop-color="#6B57FF"/><stop offset=".54" stop-color="#FF45ED"/></linearGradient><linearGradient id="dotcover_svg__b" x1="4.067" x2="62.664" y1="4.326" y2="62.923" gradientUnits="userSpaceOnUse"><stop offset=".12" stop-color="#FF45ED"/><stop offset=".92" stop-color="#FC801D"/></linearGradient></defs><path fill="#6B57FF" d="M58 16.446V4.187A4.125 4.125 0 0 0 53.81.063L42.765.239A4.125 4.125 0 0 0 39.7 1.68L6.993 39.837c-.64.748-.993 1.7-.993 2.685v11.35a4.125 4.125 0 0 0 4.125 4.124h11.003c1.19 0 2.321-.514 3.104-1.409L56.98 19.162A4.124 4.124 0 0 0 58 16.446Z"/><path fill="url(#dotcover_svg__a)" d="M58 14.988V4.125A4.125 4.125 0 0 0 53.875 0H41.309c-.2 0-.4.014-.598.044L3.527 5.492A4.125 4.125 0 0 0 0 9.573v15.398a4.125 4.125 0 0 0 4.126 4.125l18.505-.005c.425 0 .848-.066 1.253-.195l31.246-9.98A4.126 4.126 0 0 0 58 14.988Z"/><path fill="url(#dotcover_svg__b)" d="M64 59.878V25.75a4.125 4.125 0 0 0-2.52-3.8L24.057 6.153a4.118 4.118 0 0 0-1.638-.325l-18.329.15A4.124 4.124 0 0 0 0 10.103v17.665c0 .806.236 1.593.678 2.267l21.109 32.109a4.124 4.124 0 0 0 3.447 1.859h34.641A4.125 4.125 0 0 0 64 59.878Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM16.996 16.992h5.713c1.422 0 2.696.321 3.821.965a6.888 6.888 0 0 1 2.643 2.674c.636 1.14.954 2.427.954 3.864 0 1.437-.318 2.725-.954 3.865a6.888 6.888 0 0 1-2.642 2.674c-1.126.643-2.4.964-3.822.964h-5.713V16.992Zm8.028 11.876c.672-.4 1.19-.973 1.555-1.72.364-.747.547-1.63.547-2.653 0-1.023-.183-1.907-.547-2.653-.365-.747-.883-1.32-1.555-1.721-.672-.4-1.454-.6-2.347-.6h-2.755v9.947h2.755c.893 0 1.675-.2 2.347-.6ZM35.41 31.242a7.286 7.286 0 0 1-2.743-2.786c-.665-1.183-.997-2.503-.997-3.961s.332-2.778.997-3.96 1.58-2.112 2.744-2.787c1.164-.675 2.464-1.014 3.901-1.014 1.215 0 2.33.225 3.345.675a6.867 6.867 0 0 1 2.535 1.892 6.442 6.442 0 0 1 1.356 2.793h-3.066a4.054 4.054 0 0 0-.895-1.431 4.039 4.039 0 0 0-1.43-.95 4.896 4.896 0 0 0-1.823-.332c-.887 0-1.687.222-2.402.665a4.61 4.61 0 0 0-1.677 1.827c-.404.776-.606 1.649-.606 2.62 0 .973.202 1.846.606 2.621a4.606 4.606 0 0 0 1.677 1.828c.715.443 1.515.664 2.402.664.657 0 1.265-.11 1.822-.332a4.023 4.023 0 0 0 2.326-2.38h3.066a6.437 6.437 0 0 1-1.356 2.792 6.863 6.863 0 0 1-2.535 1.892c-1.015.45-2.13.675-3.345.675-1.436 0-2.736-.337-3.901-1.013v.003Z"/></svg>
|
After Width: | Height: | Size: 2.5 KiB |
1
icons/dotmemory.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="dotmemory_svg__a" x1="59.676" x2="1.08" y1="4.067" y2="62.664" gradientUnits="userSpaceOnUse"><stop offset=".31" stop-color="#FF45ED"/><stop offset=".83" stop-color="#6B57FF"/></linearGradient><linearGradient id="dotmemory_svg__b" x1="64.391" x2="39.607" y1="56.329" y2="2.875" gradientUnits="userSpaceOnUse"><stop offset=".3" stop-color="#FDB60D"/><stop offset=".7" stop-color="#FF45ED"/></linearGradient></defs><path fill="url(#dotmemory_svg__a)" d="M4.125 64h34.127a4.125 4.125 0 0 0 3.8-2.52L57.85 24.057c.219-.518.33-1.076.324-1.638l-.15-18.329A4.125 4.125 0 0 0 53.9 0H36.234c-.806 0-1.593.236-2.267.678L1.86 21.787A4.125 4.125 0 0 0 0 25.234v34.641A4.125 4.125 0 0 0 4.125 64Z"/><path fill="url(#dotmemory_svg__b)" d="M49.013 58h10.862A4.125 4.125 0 0 0 64 53.875V41.309c0-.2-.014-.4-.044-.598L58.508 3.527A4.125 4.125 0 0 0 54.427 0H39.029a4.125 4.125 0 0 0-4.125 4.126l.005 18.505c0 .425.066.848.195 1.253l9.979 31.246a4.126 4.126 0 0 0 3.93 2.87Z"/><path fill="#FDB60D" d="M47.55 58h12.259a4.125 4.125 0 0 0 4.124-4.19L64 43c-.018-1.181-.785-2.531-1.682-3.3L24.16 6.993A4.126 4.126 0 0 0 21.474 6H10.125A4.125 4.125 0 0 0 6 10.125v11.003c0 1.19.514 2.321 1.409 3.104L44.834 56.98A4.123 4.123 0 0 0 47.55 58Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM17.012 16.992h5.713c1.422 0 2.696.321 3.821.965a6.888 6.888 0 0 1 2.643 2.674c.635 1.14.953 2.427.953 3.864 0 1.437-.318 2.725-.953 3.865a6.888 6.888 0 0 1-2.643 2.674c-1.125.643-2.4.964-3.821.964h-5.713V16.992Zm8.028 11.876c.672-.4 1.19-.973 1.554-1.72.365-.747.547-1.63.547-2.653 0-1.023-.182-1.907-.547-2.653-.364-.747-.882-1.32-1.554-1.721-.672-.4-1.454-.6-2.348-.6h-2.755v9.947h2.755c.893 0 1.676-.2 2.348-.6ZM32.232 16.992h4.073l3.087 9.85.258 1.287.225-1.286 2.98-9.85h4.137v15.005H44.1V21.29l.043-.782-3.495 11.49h-2.122l-3.451-11.415.043.707v10.708h-2.883V16.992h-.002Z"/></svg>
|
After Width: | Height: | Size: 2 KiB |
1
icons/dottrace.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="dottrace_svg__a" x1="-.391" x2="24.392" y1="7.671" y2="61.126" gradientUnits="userSpaceOnUse"><stop offset=".18" stop-color="#6B57FF"/><stop offset=".54" stop-color="#FF2358"/></linearGradient><linearGradient id="dottrace_svg__b" x1="4.325" x2="62.921" y1="59.932" y2="1.336" gradientUnits="userSpaceOnUse"><stop offset=".12" stop-color="#FF2358"/><stop offset=".92" stop-color="#FF45ED"/></linearGradient></defs><path fill="#6B57FF" d="M16.45 6H4.191a4.125 4.125 0 0 0-4.124 4.19l.176 11.044a4.125 4.125 0 0 0 1.44 3.066l38.159 32.707c.747.64 1.7.993 2.684.993h11.35A4.125 4.125 0 0 0 58 53.875V42.872c0-1.19-.514-2.321-1.41-3.105L19.167 7.021A4.123 4.123 0 0 0 16.45 6Z"/><path fill="url(#dottrace_svg__a)" d="M14.988 6H4.125A4.125 4.125 0 0 0 0 10.125v12.566c0 .2.014.4.044.598l5.448 37.185A4.125 4.125 0 0 0 9.573 64h15.398a4.125 4.125 0 0 0 4.125-4.127L29.09 41.37c0-.426-.066-.849-.195-1.254l-9.98-31.245A4.126 4.126 0 0 0 14.988 6V6Z"/><path fill="url(#dottrace_svg__b)" d="M59.876 0H25.748a4.125 4.125 0 0 0-3.8 2.52L6.151 39.943a4.118 4.118 0 0 0-.325 1.638l.15 18.329A4.125 4.125 0 0 0 10.101 64h17.666c.806 0 1.593-.236 2.266-.678l32.11-21.109A4.123 4.123 0 0 0 64 38.766V4.125A4.126 4.126 0 0 0 59.876 0Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM16.996 16.992h5.713c1.422 0 2.696.321 3.821.965a6.888 6.888 0 0 1 2.643 2.674c.636 1.14.954 2.427.954 3.864 0 1.437-.318 2.725-.954 3.865a6.888 6.888 0 0 1-2.642 2.674c-1.126.643-2.4.964-3.822.964h-5.713V16.992Zm8.028 11.876c.672-.4 1.19-.973 1.555-1.72.364-.747.547-1.63.547-2.653 0-1.023-.183-1.907-.547-2.653-.365-.747-.883-1.32-1.555-1.721-.672-.4-1.454-.6-2.347-.6h-2.755v9.947h2.755c.893 0 1.675-.2 2.347-.6ZM31.133 16.992H43.17v2.637h-4.545V32H35.7v-12.37h-4.566v-2.637Z"/></svg>
|
After Width: | Height: | Size: 1.9 KiB |
1
icons/goland.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="goland_svg__a" x1="64.391" x2="39.607" y1="56.329" y2="2.874" gradientUnits="userSpaceOnUse"><stop offset=".24" stop-color="#00D886"/><stop offset=".51" stop-color="#007DFE"/></linearGradient><linearGradient id="goland_svg__b" x1="59.676" x2="1.08" y1="4.067" y2="62.663" gradientUnits="userSpaceOnUse"><stop offset=".27" stop-color="#007DFE"/><stop offset=".7" stop-color="#D249FC"/></linearGradient></defs><path fill="#00D886" d="M47.55 58h12.259a4.125 4.125 0 0 0 4.124-4.19l-.176-11.044a4.125 4.125 0 0 0-1.44-3.066L24.159 6.993A4.126 4.126 0 0 0 21.474 6H10.125A4.125 4.125 0 0 0 6 10.125v11.003c0 1.19.514 2.321 1.409 3.104L44.834 56.98A4.123 4.123 0 0 0 47.55 58Z"/><path fill="url(#goland_svg__a)" d="M49.013 58h10.862A4.125 4.125 0 0 0 64 53.875V41.309c0-.2-.014-.4-.044-.598L58.508 3.527A4.124 4.124 0 0 0 54.427 0H39.029a4.125 4.125 0 0 0-4.125 4.126l.005 18.505c0 .425.066.848.195 1.253l9.979 31.246a4.126 4.126 0 0 0 3.93 2.87Z"/><path fill="url(#goland_svg__b)" d="M4.125 64h34.127a4.125 4.125 0 0 0 3.8-2.52L57.85 24.057c.219-.518.33-1.076.324-1.638l-.15-18.329A4.124 4.124 0 0 0 53.9 0H36.234c-.805 0-1.593.236-2.266.678L1.86 21.787A4.125 4.125 0 0 0 0 25.234v34.641A4.125 4.125 0 0 0 4.125 64Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M19.748 31.242a7.286 7.286 0 0 1-2.743-2.786c-.665-1.183-.997-2.503-.997-3.961s.332-2.778.997-3.96 1.58-2.112 2.743-2.787c1.165-.675 2.465-1.014 3.902-1.014 1.165 0 2.238.208 3.222.622a6.908 6.908 0 0 1 2.486 1.747 6.368 6.368 0 0 1 1.42 2.594h-3.13a3.913 3.913 0 0 0-.926-1.228c-.39-.346-.845-.614-1.367-.803s-1.083-.284-1.683-.284c-.887 0-1.687.221-2.402.664a4.611 4.611 0 0 0-1.677 1.828c-.404.775-.606 1.649-.606 2.62s.202 1.846.606 2.621a4.606 4.606 0 0 0 1.677 1.828c.715.443 1.515.664 2.402.664.821 0 1.566-.154 2.235-.461.668-.307 1.198-.733 1.591-1.276a3.295 3.295 0 0 0 .633-1.833l.01.31h-3.526v-2.304h6.357v1.18c0 1.321-.32 2.517-.96 3.585a6.885 6.885 0 0 1-2.626 2.525c-1.111.614-2.356.921-3.736.921s-2.737-.337-3.902-1.013v.002ZM36.271 31.242a7.32 7.32 0 0 1-2.755-2.786c-.668-1.183-1.002-2.503-1.002-3.961s.333-2.778 1.002-3.96a7.314 7.314 0 0 1 2.755-2.787c1.168-.675 2.474-1.014 3.918-1.014 1.443 0 2.738.338 3.907 1.013a7.279 7.279 0 0 1 2.749 2.787c.664 1.183.997 2.503.997 3.961s-.333 2.778-.997 3.96-1.581 2.113-2.75 2.788c-1.168.675-2.47 1.013-3.906 1.013-1.437 0-2.75-.338-3.918-1.013Zm6.308-2.229c.708-.446 1.262-1.065 1.662-1.854.4-.79.6-1.678.6-2.664 0-.986-.2-1.874-.6-2.664-.4-.79-.954-1.407-1.662-1.854-.707-.446-1.504-.67-2.39-.67-.885 0-1.685.223-2.395.67a4.62 4.62 0 0 0-1.672 1.854c-.404.79-.606 1.678-.606 2.664 0 .986.202 1.874.606 2.664.404.79.961 1.408 1.672 1.854.71.447 1.51.67 2.395.67.887 0 1.683-.223 2.39-.67ZM33 44H17v3h16v-3Z"/></svg>
|
After Width: | Height: | Size: 2.8 KiB |
1
icons/intellij-idea.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="intellij-idea_svg__a" x1="-.391" x2="24.392" y1="7.671" y2="61.126" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#FC801D"/><stop offset=".59" stop-color="#FE2857"/></linearGradient><linearGradient id="intellij-idea_svg__b" x1="4.325" x2="62.921" y1="59.932" y2="1.336" gradientUnits="userSpaceOnUse"><stop offset=".21" stop-color="#FE2857"/><stop offset=".7" stop-color="#007EFF"/></linearGradient></defs><path fill="#FF8100" d="M16.45 6H4.191a4.125 4.125 0 0 0-4.124 4.19l.176 11.044a4.125 4.125 0 0 0 1.44 3.066l38.159 32.707c.747.64 1.7.993 2.684.993h11.35A4.125 4.125 0 0 0 58 53.875V42.872c0-1.19-.514-2.321-1.41-3.105L19.167 7.021A4.123 4.123 0 0 0 16.45 6Z"/><path fill="url(#intellij-idea_svg__a)" d="M14.988 6H4.125A4.125 4.125 0 0 0 0 10.125v12.566c0 .2.014.4.044.598l5.448 37.185A4.125 4.125 0 0 0 9.573 64h15.398a4.125 4.125 0 0 0 4.125-4.127L29.09 41.37c0-.426-.066-.849-.195-1.254l-9.98-31.245A4.126 4.126 0 0 0 14.988 6V6Z"/><path fill="url(#intellij-idea_svg__b)" d="M59.876 0H25.748a4.125 4.125 0 0 0-3.8 2.52L6.151 39.943a4.118 4.118 0 0 0-.325 1.638l.15 18.329A4.125 4.125 0 0 0 10.101 64h17.666c.806 0 1.593-.236 2.266-.678l32.11-21.109A4.123 4.123 0 0 0 64 38.766V4.125A4.125 4.125 0 0 0 59.876 0Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM17 29.383h2.98v-9.775H17v-2.616h8.843v2.616h-2.98v9.775h2.98V32H17v-2.616ZM27.643 29.298h2.154a2.38 2.38 0 0 0 1.163-.279c.34-.186.602-.448.788-.788.186-.34.279-.727.279-1.163V16.992h2.926v10.28c0 .9-.207 1.709-.622 2.427a4.45 4.45 0 0 1-1.715 1.688c-.728.408-1.546.611-2.454.611h-2.519v-2.7Z"/></svg>
|
After Width: | Height: | Size: 1.7 KiB |
1
icons/phpstorm.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="phpstorm_svg__a" x1="56.329" x2="2.874" y1="-.391" y2="24.392" gradientUnits="userSpaceOnUse"><stop offset=".16" stop-color="#D249FC"/><stop offset=".55" stop-color="#FF2D90"/></linearGradient><linearGradient id="phpstorm_svg__b" x1="4.067" x2="62.664" y1="4.326" y2="62.923" gradientUnits="userSpaceOnUse"><stop offset=".3" stop-color="#FF2D90"/><stop offset=".7" stop-color="#7256FF"/></linearGradient></defs><path fill="#D249FC" d="M58 16.446V4.187A4.125 4.125 0 0 0 53.81.063L42.765.239A4.125 4.125 0 0 0 39.7 1.68L6.993 39.837c-.64.748-.993 1.7-.993 2.685v11.35a4.125 4.125 0 0 0 4.125 4.124h11.003c1.19 0 2.321-.514 3.104-1.409L56.98 19.162A4.124 4.124 0 0 0 58 16.446Z"/><path fill="url(#phpstorm_svg__a)" d="M58 14.988V4.125A4.125 4.125 0 0 0 53.875 0H41.309c-.2 0-.4.014-.598.044L3.527 5.492A4.125 4.125 0 0 0 0 9.573v15.398a4.125 4.125 0 0 0 4.126 4.125l18.505-.005c.425 0 .848-.066 1.253-.195l31.246-9.98A4.126 4.126 0 0 0 58 14.988Z"/><path fill="url(#phpstorm_svg__b)" d="M64 59.878V25.75a4.125 4.125 0 0 0-2.52-3.8L24.057 6.153a4.118 4.118 0 0 0-1.638-.325l-18.329.15A4.124 4.124 0 0 0 0 10.103v17.665c0 .806.236 1.593.678 2.267l21.109 32.109a4.124 4.124 0 0 0 3.447 1.859h34.641A4.125 4.125 0 0 0 64 59.878Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM16.993 16.992h6.442c1.057 0 1.984.193 2.78.579.798.386 1.412.929 1.845 1.63.432.7.648 1.51.648 2.432 0 .922-.22 1.759-.659 2.466-.44.708-1.063 1.256-1.87 1.646-.808.39-1.751.584-2.83.584h-3.43V32h-2.927V16.993Zm7.54 6.63c.369-.182.652-.443.852-.782.2-.34.3-.738.3-1.195s-.1-.842-.3-1.174c-.2-.333-.484-.59-.852-.772-.368-.182-.798-.273-1.291-.273h-3.323v4.47h3.323c.493 0 .923-.091 1.291-.273ZM32.572 31.664c-.84-.393-1.497-.943-1.972-1.65-.475-.708-.72-1.522-.735-2.444h2.937c0 .436.114.818.343 1.147.229.329.547.586.954.772.407.185.875.278 1.404.278.53 0 .952-.083 1.335-.251.382-.168.678-.402.89-.702s.315-.643.315-1.029c0-.479-.145-.875-.434-1.19-.29-.314-.688-.532-1.195-.654l-2.647-.59c-.715-.156-1.337-.426-1.866-.809a4.014 4.014 0 0 1-1.232-1.42c-.293-.564-.44-1.2-.44-1.908 0-.857.222-1.627.665-2.31.443-.682 1.061-1.215 1.854-1.597.794-.382 1.694-.573 2.702-.573s1.933.186 2.733.558c.8.372 1.424.888 1.87 1.549.447.66.674 1.42.681 2.277h-2.926c0-.364-.096-.691-.29-.98a1.903 1.903 0 0 0-.82-.676 2.915 2.915 0 0 0-1.216-.24c-.458 0-.86.076-1.206.23a1.902 1.902 0 0 0-.81.643c-.193.275-.289.595-.289.96 0 .414.134.757.402 1.028.268.272.634.464 1.099.579l2.551.557c.736.15 1.392.435 1.967.852a4.45 4.45 0 0 1 1.345 1.544c.321.611.482 1.278.482 1.999 0 .886-.234 1.681-.701 2.385-.469.703-1.124 1.255-1.967 1.656-.843.4-1.808.6-2.895.6-1.086 0-2.05-.197-2.888-.59Z"/></svg>
|
After Width: | Height: | Size: 2.7 KiB |
1
icons/pycharm.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="pycharm_svg__a" x1="7.671" x2="61.126" y1="64.393" y2="39.609" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#00D886"/><stop offset=".59" stop-color="#F0EB18"/></linearGradient><linearGradient id="pycharm_svg__b" x1="59.933" x2="1.337" y1="59.676" y2="1.08" gradientUnits="userSpaceOnUse"><stop offset=".3" stop-color="#F0EB18"/><stop offset=".7" stop-color="#00C4F4"/></linearGradient></defs><path fill="#00D886" d="M6 47.55v12.259a4.125 4.125 0 0 0 4.19 4.124l11.044-.176a4.125 4.125 0 0 0 3.066-1.44l32.707-38.158c.64-.748.993-1.7.993-2.685V10.125A4.125 4.125 0 0 0 53.875 6H42.872c-1.19 0-2.321.514-3.105 1.409L7.021 44.834A4.123 4.123 0 0 0 6 47.55Z"/><path fill="url(#pycharm_svg__a)" d="M6 49.015v10.862a4.125 4.125 0 0 0 4.125 4.125h12.566c.2 0 .4-.014.598-.044l37.185-5.448A4.125 4.125 0 0 0 64 54.429V39.03a4.125 4.125 0 0 0-4.127-4.125l-18.504.005c-.426 0-.849.066-1.254.195L8.871 45.085A4.126 4.126 0 0 0 6 49.015H6Z"/><path fill="url(#pycharm_svg__b)" d="M0 4.125v34.127c0 1.659.993 3.155 2.52 3.8L39.943 57.85c.518.219 1.075.33 1.638.324l18.329-.15A4.125 4.125 0 0 0 64 53.9V36.234c0-.806-.236-1.593-.678-2.267L42.213 1.86A4.125 4.125 0 0 0 38.766 0H4.125A4.125 4.125 0 0 0 0 4.125Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM16.993 16.992h6.442c1.057 0 1.984.193 2.78.579.798.386 1.412.929 1.845 1.63.432.7.648 1.51.648 2.432 0 .922-.22 1.759-.659 2.466-.44.708-1.063 1.256-1.87 1.646-.808.39-1.751.584-2.83.584h-3.43V32h-2.927V16.993Zm7.54 6.63c.369-.182.652-.443.852-.782.2-.34.3-.738.3-1.195s-.1-.842-.3-1.174c-.2-.333-.484-.59-.852-.772-.368-.182-.798-.273-1.291-.273h-3.324v4.47h3.324c.493 0 .923-.091 1.291-.273ZM33.713 31.242a7.287 7.287 0 0 1-2.744-2.786c-.664-1.183-.996-2.503-.996-3.961s.332-2.778.996-3.96a7.29 7.29 0 0 1 2.744-2.787c1.165-.675 2.466-1.014 3.902-1.014 1.215 0 2.33.225 3.344.675a6.862 6.862 0 0 1 2.535 1.892 6.443 6.443 0 0 1 1.356 2.793h-3.066a4.054 4.054 0 0 0-.895-1.431 4.038 4.038 0 0 0-1.43-.95 4.896 4.896 0 0 0-1.823-.332c-.887 0-1.687.222-2.402.665a4.611 4.611 0 0 0-1.677 1.827c-.404.776-.606 1.649-.606 2.62 0 .973.202 1.846.606 2.621a4.607 4.607 0 0 0 1.677 1.828c.715.443 1.515.664 2.402.664.657 0 1.265-.11 1.822-.332a4.022 4.022 0 0 0 2.326-2.38h3.066a6.444 6.444 0 0 1-1.356 2.792 6.863 6.863 0 0 1-2.535 1.892c-1.015.45-2.129.675-3.344.675-1.436 0-2.737-.337-3.902-1.013v.003Z"/></svg>
|
After Width: | Height: | Size: 2.5 KiB |
1
icons/rider.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="rider_svg__a" x1="64.391" x2="39.607" y1="56.329" y2="2.874" gradientUnits="userSpaceOnUse"><stop offset=".21" stop-color="#007DFE"/><stop offset=".55" stop-color="#FFB700"/></linearGradient><linearGradient id="rider_svg__b" x1="59.676" x2="1.08" y1="4.067" y2="62.663" gradientUnits="userSpaceOnUse"><stop offset=".23" stop-color="#FFB700"/><stop offset=".73" stop-color="#FF0A67"/></linearGradient></defs><path fill="#007DFE" d="M47.55 58h12.258a4.125 4.125 0 0 0 4.124-4.19l-.176-11.044a4.124 4.124 0 0 0-1.44-3.066L24.158 6.993A4.126 4.126 0 0 0 21.474 6H10.125A4.125 4.125 0 0 0 6 10.125v11.003c0 1.19.514 2.321 1.409 3.104L44.834 56.98A4.124 4.124 0 0 0 47.55 58Z"/><path fill="url(#rider_svg__a)" d="M49.013 58h10.862A4.125 4.125 0 0 0 64 53.875V41.309c0-.2-.014-.4-.044-.598L58.508 3.527A4.125 4.125 0 0 0 54.427 0H39.029a4.125 4.125 0 0 0-4.125 4.126l.005 18.505c0 .425.066.848.195 1.253l9.979 31.246a4.126 4.126 0 0 0 3.93 2.87Z"/><path fill="url(#rider_svg__b)" d="M4.125 64h34.127a4.125 4.125 0 0 0 3.8-2.52L57.85 24.057c.219-.518.33-1.076.324-1.638l-.15-18.329A4.124 4.124 0 0 0 53.9 0H36.234c-.805 0-1.593.236-2.266.678L1.86 21.787A4.125 4.125 0 0 0 0 25.234v34.641A4.125 4.125 0 0 0 4.125 64Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM16.992 16.992h6.442c1.05 0 1.976.193 2.776.579.8.386 1.417.929 1.85 1.63.432.7.648 1.51.648 2.432 0 .922-.22 1.75-.66 2.46-.439.712-1.065 1.262-1.875 1.651-.811.39-1.753.584-2.825.584h-3.43v5.67h-2.926V16.992Zm7.54 6.63c.369-.183.653-.444.853-.783.2-.34.3-.734.3-1.184 0-.45-.1-.852-.3-1.185-.2-.332-.485-.59-.852-.772-.368-.182-.799-.273-1.292-.273h-3.323v4.47h3.323c.493 0 .924-.09 1.292-.273Zm-2.63 1.763h3.194L29.03 32h-3.355l-3.773-6.614ZM31.613 16.992h5.713c1.422 0 2.696.321 3.822.965a6.881 6.881 0 0 1 2.641 2.674c.636 1.14.954 2.427.954 3.864 0 1.437-.318 2.725-.953 3.865a6.89 6.89 0 0 1-2.642 2.674c-1.125.643-2.4.964-3.822.964h-5.713V16.992Zm8.028 11.876c.672-.4 1.19-.973 1.555-1.72.364-.747.547-1.63.547-2.653 0-1.023-.183-1.907-.547-2.653-.365-.747-.883-1.32-1.555-1.721-.672-.4-1.454-.6-2.347-.6h-2.755v9.947h2.755c.893 0 1.675-.2 2.347-.6Z"/></svg>
|
After Width: | Height: | Size: 2.2 KiB |
1
icons/rubymine.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="rubymine_svg__a" x1="4.325" x2="62.921" y1="59.932" y2="1.337" gradientUnits="userSpaceOnUse"><stop offset=".29" stop-color="#FF2358"/><stop offset=".75" stop-color="#7256FF"/></linearGradient><linearGradient id="rubymine_svg__b" x1="-.391" x2="24.393" y1="7.671" y2="61.125" gradientUnits="userSpaceOnUse"><stop offset=".29" stop-color="#FF8100"/><stop offset=".56" stop-color="#FF2358"/></linearGradient></defs><path fill="url(#rubymine_svg__a)" d="M59.875 0H25.748a4.125 4.125 0 0 0-3.8 2.52L6.151 39.942a4.118 4.118 0 0 0-.325 1.639l.15 18.328A4.125 4.125 0 0 0 10.101 64h17.666c.805 0 1.593-.235 2.266-.678l32.109-21.108A4.123 4.123 0 0 0 64 38.766V4.125A4.125 4.125 0 0 0 59.875 0Z"/><path fill="url(#rubymine_svg__b)" d="M14.987 6H4.126A4.125 4.125 0 0 0 0 10.125v12.566c0 .2.014.4.044.598l5.448 37.184A4.125 4.125 0 0 0 9.572 64H24.97a4.125 4.125 0 0 0 4.125-4.126l-.004-18.504c0-.426-.067-.85-.196-1.254L18.916 8.87A4.126 4.126 0 0 0 14.987 6V6Z"/><path fill="#FF8100" d="M16.45 6H4.19a4.125 4.125 0 0 0-4.124 4.19L0 21c.019 1.181.786 2.531 1.683 3.3l38.158 32.706c.748.641 1.7.993 2.684.993h11.35A4.125 4.125 0 0 0 58 53.874V42.871c0-1.189-.514-2.32-1.41-3.104L19.167 7.021A4.123 4.123 0 0 0 16.45 6Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM17.012 16.992h6.442c1.05 0 1.975.193 2.776.579.8.386 1.416.929 1.849 1.63.432.7.648 1.51.648 2.432 0 .922-.22 1.75-.66 2.46-.438.712-1.064 1.262-1.875 1.651-.811.39-1.752.584-2.824.584h-3.43v5.67h-2.926V16.992Zm7.54 6.63c.368-.183.652-.444.852-.783.2-.34.3-.734.3-1.184 0-.45-.1-.852-.3-1.185-.2-.332-.484-.59-.852-.772-.368-.182-.798-.273-1.292-.273h-3.323v4.47h3.323c.494 0 .924-.09 1.292-.273Zm-2.631 1.763h3.194L29.05 32h-3.355l-3.773-6.614ZM31.633 16.992h4.073l3.087 9.85.257 1.287.225-1.286 2.98-9.85h4.138v15.005h-2.894V21.29l.043-.782-3.494 11.49h-2.123l-3.451-11.415.043.707v10.708h-2.883V16.992h-.001Z"/></svg>
|
After Width: | Height: | Size: 2 KiB |
1
icons/rustrover.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="rustrover_svg__a" x1="7.671" x2="61.125" y1="64.393" y2="39.609" gradientUnits="userSpaceOnUse"><stop offset=".08" stop-color="#00D886"/><stop offset=".46" stop-color="#FFAB00"/></linearGradient><linearGradient id="rustrover_svg__b" x1="59.932" x2="1.336" y1="59.676" y2="1.08" gradientUnits="userSpaceOnUse"><stop offset=".19" stop-color="#FFAB00"/><stop offset=".83" stop-color="#FF004C"/></linearGradient></defs><path fill="#00D886" d="M6 47.55v12.258a4.125 4.125 0 0 0 4.19 4.124l11.044-.176a4.124 4.124 0 0 0 3.066-1.44l32.707-38.158c.64-.747.993-1.7.993-2.684V10.125A4.125 4.125 0 0 0 53.875 6H42.872c-1.19 0-2.321.514-3.105 1.409L7.021 44.833A4.124 4.124 0 0 0 6 47.55Z"/><path fill="url(#rustrover_svg__a)" d="M6 49.015v10.862a4.125 4.125 0 0 0 4.125 4.125h12.566c.2 0 .4-.014.598-.044l37.185-5.448A4.125 4.125 0 0 0 64 54.429V39.03a4.125 4.125 0 0 0-4.127-4.125l-18.504.005c-.426 0-.849.066-1.254.195L8.871 45.085A4.126 4.126 0 0 0 6 49.015H6Z"/><path fill="url(#rustrover_svg__b)" d="M0 4.125v34.127c0 1.659.993 3.155 2.52 3.8L39.943 57.85c.518.219 1.075.33 1.638.324l18.329-.15A4.125 4.125 0 0 0 64 53.9V36.234c0-.806-.236-1.593-.678-2.267L42.213 1.86A4.125 4.125 0 0 0 38.766 0H4.125A4.125 4.125 0 0 0 0 4.125Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM16.992 16.992h6.442c1.05 0 1.976.193 2.776.579.8.386 1.417.929 1.85 1.63.432.7.648 1.51.648 2.432 0 .922-.22 1.75-.66 2.46-.439.712-1.065 1.262-1.875 1.651-.811.39-1.753.584-2.825.584h-3.43v5.67h-2.926V16.992Zm7.54 6.63c.369-.183.653-.444.853-.783.2-.34.3-.734.3-1.184 0-.45-.1-.852-.3-1.185-.2-.332-.485-.59-.852-.772-.368-.182-.799-.273-1.292-.273h-3.323v4.47h3.323c.493 0 .924-.09 1.292-.273Zm-2.63 1.763h3.194L29.03 32h-3.355l-3.773-6.614ZM31.613 16.992h6.442c1.05 0 1.976.193 2.776.579.8.386 1.417.929 1.85 1.63.432.7.648 1.51.648 2.432 0 .922-.22 1.75-.66 2.46-.439.712-1.064 1.262-1.875 1.651-.811.39-1.753.584-2.824.584h-3.43v5.67h-2.927V16.992Zm7.54 6.63c.369-.183.653-.444.853-.783.2-.34.3-.734.3-1.184 0-.45-.1-.852-.3-1.185-.2-.332-.485-.59-.852-.772-.368-.182-.799-.273-1.292-.273h-3.323v4.47h3.323c.493 0 .924-.09 1.292-.273Zm-2.63 1.763h3.194L43.651 32h-3.355l-3.773-6.614Z"/></svg>
|
After Width: | Height: | Size: 2.3 KiB |
1
icons/webstorm.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><defs><linearGradient id="webstorm_svg__a" x1="7.671" x2="61.126" y1="64.392" y2="39.609" gradientUnits="userSpaceOnUse"><stop offset=".22" stop-color="#F0EB18"/><stop offset=".59" stop-color="#00C4F4"/></linearGradient><linearGradient id="webstorm_svg__b" x1="59.932" x2="1.337" y1="59.676" y2="1.079" gradientUnits="userSpaceOnUse"><stop offset=".19" stop-color="#00C4F4"/><stop offset=".83" stop-color="#007DFE"/></linearGradient></defs><path fill="#F0EB18" d="M6 47.55v12.258a4.125 4.125 0 0 0 4.19 4.124l11.044-.176a4.124 4.124 0 0 0 3.066-1.44l32.707-38.158c.64-.747.993-1.7.993-2.684V10.125A4.125 4.125 0 0 0 53.875 6H42.872c-1.19 0-2.321.514-3.105 1.409L7.021 44.833A4.124 4.124 0 0 0 6 47.55Z"/><path fill="url(#webstorm_svg__a)" d="M6 49.015v10.862a4.125 4.125 0 0 0 4.125 4.125h12.566c.2 0 .4-.014.598-.044l37.185-5.448A4.125 4.125 0 0 0 64 54.429V39.03a4.125 4.125 0 0 0-4.127-4.125l-18.504.005c-.426 0-.849.066-1.254.195L8.871 45.085A4.126 4.126 0 0 0 6 49.015H6Z"/><path fill="url(#webstorm_svg__b)" d="M0 4.125v34.127c0 1.659.993 3.155 2.52 3.8L39.943 57.85c.518.219 1.075.33 1.638.324l18.329-.15A4.125 4.125 0 0 0 64 53.9V36.234c0-.806-.236-1.593-.678-2.267L42.213 1.86A4.125 4.125 0 0 0 38.766 0H4.125A4.125 4.125 0 0 0 0 4.125Z"/><path fill="#000" d="M52 12H12v40h40V12Z"/><path fill="#fff" d="M33 44H17v3h16v-3ZM19.051 16.992l2.423 10.955 2.583-10.955h2.958l2.701 10.955 2.348-10.955h2.97l-3.645 15.006h-3.334l-2.53-10.9-2.561 10.9H19.64l-3.623-15.006h3.033ZM38.662 31.664c-.84-.393-1.497-.943-1.972-1.65-.475-.708-.72-1.522-.735-2.444h2.937c0 .436.114.818.343 1.147.229.329.547.586.954.772.407.185.875.278 1.404.278.53 0 .952-.083 1.335-.251.382-.168.678-.402.889-.702.21-.3.316-.643.316-1.029 0-.479-.145-.875-.434-1.19-.29-.314-.688-.532-1.195-.654l-2.648-.59c-.714-.156-1.336-.426-1.865-.809a4.015 4.015 0 0 1-1.232-1.42c-.293-.564-.44-1.2-.44-1.908 0-.857.222-1.627.665-2.31.443-.682 1.061-1.215 1.854-1.597.793-.382 1.694-.573 2.701-.573 1.008 0 1.934.186 2.734.558.8.372 1.423.888 1.87 1.549.447.66.673 1.42.68 2.277h-2.925c0-.364-.097-.691-.29-.98s-.466-.515-.82-.676a2.915 2.915 0 0 0-1.217-.24c-.457 0-.859.076-1.205.23a1.903 1.903 0 0 0-.81.643c-.193.275-.289.595-.289.96 0 .414.134.757.402 1.028.268.272.634.464 1.099.579l2.55.557c.737.15 1.392.435 1.968.852a4.45 4.45 0 0 1 1.345 1.544 4.23 4.23 0 0 1 .482 1.999c0 .886-.234 1.681-.702 2.385-.468.703-1.123 1.255-1.966 1.656-.844.4-1.809.6-2.894.6-1.086 0-2.05-.197-2.889-.59Z"/></svg>
|
After Width: | Height: | Size: 2.5 KiB |
|
@ -1,323 +1,323 @@
|
|||
// ==UserScript==
|
||||
// @name JetBra
|
||||
// @namespace https://github.com/novice88/jetbra
|
||||
// @version 5.0
|
||||
// @license MIT
|
||||
// @description Add a button on the plugin homepage and click to get the plugin activation code
|
||||
// @author novice.li
|
||||
// @match https://plugins.jetbrains.com/*
|
||||
// @grant GM_setClipboard
|
||||
// @grant GM_addStyle
|
||||
// @grant window.onurlchange
|
||||
// @downloadURL https://update.greasyfork.org/scripts/480799/JetBra.user.js
|
||||
// @updateURL https://update.greasyfork.org/scripts/480799/JetBra.meta.js
|
||||
// ==/UserScript==
|
||||
|
||||
const pemEncodedKey = `-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
17M9lCizO9o9dONdHsHfNQi6y9Jcnw==
|
||||
-----END PRIVATE KEY-----`;
|
||||
|
||||
const pemEncodedCrt = `-----BEGIN CERTIFICATE-----
|
||||
MIIEtTCCAp2gAwIBAgIUDyuccmylba71lZQAQic5TJiAhwwwDQYJKoZIhvcNAQEL
|
||||
BQAwGDEWMBQGA1UEAwwNSmV0UHJvZmlsZSBDQTAeFw0yMzA5MjkxNDA2MTJaFw0z
|
||||
MzA5MjcxNDA2MTJaMBExDzANBgNVBAMMBk5vdmljZTCCAiIwDQYJKoZIhvcNAQEB
|
||||
BQADggIPADCCAgoCggIBALenqcGP2ZxGkYqmKA9c4Hzf8+YD1smvmOxKjd+bmTLr
|
||||
utM/hXv1cj1rW3/lqyDtdDk7K6W8/TDq1CRrEt+Do6l30DxhAiC34aH8DmGwgq77
|
||||
xEoLimvH5LpePxflF+tbB1RZtFgFDOIYLdSQaKFH2JDgVKxhLiV3S6jniPhkCtWW
|
||||
rTs+E6vq4N15Bm3NnM5AJILqjtUbOjNfaxVq6RrOoTc0R3Fqqo6yvxo/+JYa2UnH
|
||||
IC+r2dbKuDLMUrtgnydEUdJNX0zH9FtcdELvr48uc9mY038TWUsZUK1pnQbxA2bP
|
||||
yA4qnYJ9IvUgO6LtLXvGFm137YQMS1N41AHDBOrwoNI8UoDX+qI3rM96biFOFvn7
|
||||
Edky7rByzybt3H+zxdojfjvpL1E0NO98BT9zfufHAaAxZtlmDOu5LDJe3CGurnyR
|
||||
MRExbtc+Qjl1mUh6tG4lakAwdsoxry0GdG72yaYyb9it53kaFks/T/s7Z7bRJzVF
|
||||
zQDV1Y4bzUtk43vKm2vztBVlQkBkZY5f2Jbe5Ig3b8swQzBnOT0mrL5SPUhwmQ6I
|
||||
xkEWztj55OEujBMmRr92oESuq9ZYMaeLidKWVR3/++HA8BRZaRGEKtSHZCbFEFdi
|
||||
hDxxJv9Xh6NuT/ewJ6HYp+0NQpFnUnJ72n8wV+tudpam7aKcdzVmz7cNwOhG2Ls7
|
||||
AgMBAAEwDQYJKoZIhvcNAQELBQADggIBAIdeaQfKni7tXtcywC3zJvGzaaj242pS
|
||||
WB1y40HW8jub0uHjTLsBPX27iA/5rb+rNXtUWX/f2K+DU4IgaIiiHhkDrMsw7piv
|
||||
azqwA9h7/uA0A5nepmTYf/HY4W6P2stbeqInNsFRZXS7Jg4Q5LgEtHKo/H8USjtV
|
||||
w9apmE3BCElkXRuelXMsSllpR/JEVv/8NPLmnHSY02q4KMVW2ozXtaAxSYQmZswy
|
||||
P1YnBcnRukoI4igobpcKQXwGoQCIUlec8LbFXYM9V2eNCwgABqd4r67m7QJq31Y/
|
||||
1TJysQdMH+hoPFy9rqNCxSq3ptpuzcYAk6qVf58PrrYH/6bHwiYPAayvvdzNPOhM
|
||||
9OCwomfcazhK3y7HyS8aBLntTQYFf7vYzZxPMDybYTvJM+ClCNnVD7Q9fttIJ6eM
|
||||
XFsXb8YK1uGNjQW8Y4WHk1MCHuD9ZumWu/CtAhBn6tllTQWwNMaPOQvKf1kr1Kt5
|
||||
etrONY+B6O+Oi75SZbDuGz7PIF9nMPy4WB/8XgKdVFtKJ7/zLIPHgY8IKgbx/VTz
|
||||
6uBhYo8wOf3xzzweMnn06UcfV3JGNvtMuV4vlkZNNxXeifsgzHugCvJX0nybhfBh
|
||||
fIqVyfK6t0eKJqrvp54XFEtJGR+lf3pBfTdcOI6QFEPKGZKoQz8Ck+BC/WBDtbjc
|
||||
/uYKczZ8DKZu
|
||||
-----END CERTIFICATE-----`;
|
||||
|
||||
let translations = {
|
||||
"en": {
|
||||
"permanentLicense": "Get Permanent License",
|
||||
"twoYearsLicense": "Get Two Years License",
|
||||
"notMarketPlugin": "This plugin is not a market-paid plugin!",
|
||||
"copiedToClipboard": "License key has been copied to your clipboard."
|
||||
},
|
||||
"zh": {
|
||||
"permanentLicense": "获取永久激活码",
|
||||
"twoYearsLicense": "获取两年激活码",
|
||||
"notMarketPlugin": "该插件不是市场付费插件!",
|
||||
"copiedToClipboard": "激活码已经拷贝到你的剪切板"
|
||||
},
|
||||
"ru": {
|
||||
"permanentLicense": "Получить постоянную лицензию",
|
||||
"twoYearsLicense": "Получить лицензию на два года",
|
||||
"notMarketPlugin": "Этот плагин не является платным на рынке!",
|
||||
"copiedToClipboard": "Лицензионный ключ скопирован в буфер обмена."
|
||||
},
|
||||
"es": {
|
||||
"permanentLicense": "Obtener licencia permanente",
|
||||
"twoYearsLicense": "Obtener licencia por dos años",
|
||||
"notMarketPlugin": "¡Este plugin no es un plugin de pago en el mercado!",
|
||||
"copiedToClipboard": "La clave de licencia se ha copiado al portapapeles."
|
||||
},
|
||||
"fr": {
|
||||
"permanentLicense": "Obtenir une licence permanente",
|
||||
"twoYearsLicense": "Obtenir une licence de deux ans",
|
||||
"notMarketPlugin": "Ce plugin n'est pas un plugin payant du marché!",
|
||||
"copiedToClipboard": "La clé de licence a été copiée dans votre presse-papiers."
|
||||
},
|
||||
"de": {
|
||||
"permanentLicense": "Dauerlizenz erhalten",
|
||||
"twoYearsLicense": "Zwei-Jahres-Lizenz erhalten",
|
||||
"notMarketPlugin": "Dieses Plugin ist kein kostenpflichtiges Markt-Plugin!",
|
||||
"copiedToClipboard": "Der Lizenzschlüssel wurde in Ihre Zwischenablage kopiert."
|
||||
},
|
||||
"pt": {
|
||||
"permanentLicense": "Obter licença permanente",
|
||||
"twoYearsLicense": "Obter licença de dois anos",
|
||||
"notMarketPlugin": "Este plugin não é um plugin pago do mercado!",
|
||||
"copiedToClipboard": "A chave de licença foi copiada para a sua área de transferência."
|
||||
},
|
||||
"ja": {
|
||||
"permanentLicense": "永久ライセンスを取得",
|
||||
"twoYearsLicense": "2年ライセンスを取得",
|
||||
"notMarketPlugin": "このプラグインは市場での有料プラグインではありません!",
|
||||
"copiedToClipboard": "ライセンスキーがクリップボードにコピーされました。"
|
||||
},
|
||||
"ko": {
|
||||
"permanentLicense": "영구 라이선스 받기",
|
||||
"twoYearsLicense": "2년 라이선스 받기",
|
||||
"notMarketPlugin": "이 플러그인은 마켓 유료 플러그인이 아닙니다!",
|
||||
"copiedToClipboard": "라이선스 키가 클립보드에 복사되었습니다."
|
||||
},
|
||||
"it": {
|
||||
"permanentLicense": "Ottieni licenza permanente",
|
||||
"twoYearsLicense": "Ottieni licenza di due anni",
|
||||
"notMarketPlugin": "Questo plugin non è un plugin a pagamento sul mercato!",
|
||||
"copiedToClipboard": "La chiave di licenza è stata copiata negli appunti."
|
||||
},
|
||||
"ar": {
|
||||
"permanentLicense": "الحصول على رخصة دائمة",
|
||||
"twoYearsLicense": "الحصول على رخصة لمدة عامين",
|
||||
"notMarketPlugin": "هذا المكون الإضافي ليس مكونًا مدفوعًا في السوق!",
|
||||
"copiedToClipboard": "تم نسخ مفتاح الترخيص إلى الحافظة الخاصة بك."
|
||||
}
|
||||
};
|
||||
|
||||
function getUserLanguage() {
|
||||
const userLang = navigator.language || navigator.languages[0];
|
||||
const langCode = userLang.split('-')[0];
|
||||
|
||||
if (translations[langCode]) {
|
||||
return langCode;
|
||||
}
|
||||
|
||||
for (let lang in translations) {
|
||||
if (userLang.startsWith(lang)) {
|
||||
return lang;
|
||||
}
|
||||
}
|
||||
|
||||
return 'en';
|
||||
}
|
||||
|
||||
function getTranslatedCulture(key) {
|
||||
const useralang = getUserLanguage();
|
||||
const userTranslations = translations[useralang] || {};
|
||||
return userTranslations[key] || translations['en'][key] || key;
|
||||
}
|
||||
|
||||
function injectStyles() {
|
||||
GM_addStyle(`
|
||||
.jetbra-button {
|
||||
background-color: #04AA6D; border: none; color: white; padding: 8px 24px;
|
||||
text-align: center; text-decoration: none; display: inline-block;
|
||||
border-radius: 16px; box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2), 0 6px 20px 0 rgba(0,0,0,0.19);
|
||||
transition-duration: 0.4s;
|
||||
margin-left:5px
|
||||
}
|
||||
.jetbra-button:hover { background-color: #057e47; color: white; }
|
||||
`);
|
||||
}
|
||||
|
||||
async function findElementWithRetry(cssSelector) {
|
||||
const maxAttempts = 50;
|
||||
for (let attempts = 0; attempts < maxAttempts; attempts++) {
|
||||
const element = document.querySelector(cssSelector);
|
||||
if (element) {
|
||||
return element;
|
||||
}
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
throw new Error(`Element with selector '${cssSelector}' not found after ${maxAttempts} attempts.`);
|
||||
}
|
||||
|
||||
function pem2base64(pem) {
|
||||
return pem.split('\n').reduce((base64, line) => line.includes("--") ? base64 : base64 + line, '');
|
||||
}
|
||||
|
||||
function arrayBufferToBase64(buffer) {
|
||||
return btoa([...new Uint8Array(buffer)].map(b => String.fromCharCode(b)).join(''));
|
||||
}
|
||||
|
||||
function base64ToArrayBuffer(base64) {
|
||||
return Uint8Array.from(atob(base64), c => c.charCodeAt(0)).buffer;
|
||||
}
|
||||
|
||||
function genLicenseId() {
|
||||
const CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
||||
return Array.from({length: 10}, () => {
|
||||
let idx = Math.floor(Math.random() * CHARSET.length);
|
||||
return CHARSET[idx];
|
||||
}).join('');
|
||||
}
|
||||
|
||||
function buildLicensePartJson(productCode, licenseId,twoYears) {
|
||||
let formattedDateTwoYears = '2099-08-01';
|
||||
if (twoYears) {
|
||||
let futureDateTwoYears = new Date();
|
||||
futureDateTwoYears.setFullYear(futureDateTwoYears.getFullYear() + 2);
|
||||
formattedDateTwoYears = futureDateTwoYears.toISOString().split('T')[0];
|
||||
}
|
||||
|
||||
let fallbackDate = formattedDateTwoYears;
|
||||
let paidUpTo = formattedDateTwoYears;
|
||||
|
||||
return JSON.stringify({
|
||||
"licenseId": licenseId,
|
||||
"licenseeName": "reborn",
|
||||
"assigneeName": "reborn",
|
||||
"assigneeEmail": "",
|
||||
"licenseRestriction": "",
|
||||
"checkConcurrentUse": false,
|
||||
"products": [{
|
||||
code: productCode,
|
||||
fallbackDate: fallbackDate,
|
||||
paidUpTo: paidUpTo
|
||||
}],
|
||||
"metadata": "0120230102PPAA013009",
|
||||
"hash": "41472961/0:1563609451",
|
||||
"gracePeriodDays": 7,
|
||||
"autoProlongated": true,
|
||||
"isAutoProlongated": true
|
||||
});
|
||||
}
|
||||
|
||||
async function addButton() {
|
||||
injectStyles();
|
||||
|
||||
let url = window.location.href
|
||||
if (!url.startsWith('https://plugins.jetbrains.com/plugin/')) {
|
||||
return;
|
||||
}
|
||||
|
||||
let pluginId = url.split('/')[4].split('-')[0]
|
||||
console.log('pluginId: ' + pluginId);
|
||||
|
||||
let pluginDetail = await fetch('https://plugins.jetbrains.com/api/plugins/' + pluginId).then(r => r.json());
|
||||
|
||||
const parentElement = await findElementWithRetry('.plugin-header__controls-panel > div:first-child');
|
||||
|
||||
if (parentElement.querySelector('.jetbra-button')) {
|
||||
return;
|
||||
}
|
||||
let newElement = document.createElement('div');
|
||||
newElement.classList.toggle('wt-col-inline');
|
||||
newElement.innerHTML =
|
||||
`<div class="customize-btn" style="display: flex; flex-direction: column;white-space: nowrap;">
|
||||
<div class="generate-plugin-code" style="display: flex;height: 40px;">
|
||||
<button class="jetbra-button" type="button" id="permanentLicense">${getTranslatedCulture('permanentLicense')}</button>
|
||||
<button class="jetbra-button" type="button" id="twoYearsLicense">${getTranslatedCulture('twoYearsLicense')}</button>
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
parentElement.appendChild(newElement)
|
||||
|
||||
newElement.addEventListener('click', async (e) => {
|
||||
let productCode = pluginDetail?.purchaseInfo?.productCode;
|
||||
if (productCode === undefined) {
|
||||
window.alert(`${getTranslatedCulture('notMarketPlugin')}`);
|
||||
return;
|
||||
}
|
||||
let licenseId = genLicenseId()
|
||||
let licensePartJson = buildLicensePartJson(productCode, licenseId,e.target.id === "twoYearsLicense")
|
||||
|
||||
let privateKey = await window.crypto.subtle.importKey("pkcs8", base64ToArrayBuffer(pem2base64(pemEncodedKey)), {
|
||||
name: "RSASSA-PKCS1-v1_5", hash: "SHA-1",
|
||||
}, true, ["sign"]);
|
||||
|
||||
let licensePartBase64 = btoa(unescape(encodeURIComponent(licensePartJson)));
|
||||
let sigResultsBase64 = arrayBufferToBase64(await window.crypto.subtle.sign("RSASSA-PKCS1-v1_5", privateKey, new TextEncoder().encode(licensePartJson)));
|
||||
let cert_base64 = pem2base64(pemEncodedCrt);
|
||||
|
||||
GM_setClipboard(`${licenseId}-${licensePartBase64}-${sigResultsBase64}-${cert_base64}`, 'text');
|
||||
window.alert(`${getTranslatedCulture('copiedToClipboard')}`);
|
||||
})
|
||||
}
|
||||
|
||||
addButton();
|
||||
if (window.onurlchange === null) {
|
||||
window.addEventListener('urlchange', (ignore) => {
|
||||
addButton();
|
||||
});
|
||||
// ==UserScript==
|
||||
// @name JetBra
|
||||
// @namespace https://github.com/novice88/jetbra
|
||||
// @version 5.0
|
||||
// @license MIT
|
||||
// @description Add a button on the plugin homepage and click to get the plugin activation code
|
||||
// @author novice.li
|
||||
// @match https://plugins.jetbrains.com/*
|
||||
// @grant GM_setClipboard
|
||||
// @grant GM_addStyle
|
||||
// @grant window.onurlchange
|
||||
// @downloadURL https://update.greasyfork.org/scripts/480799/JetBra.user.js
|
||||
// @updateURL https://update.greasyfork.org/scripts/480799/JetBra.meta.js
|
||||
// ==/UserScript==
|
||||
|
||||
const pemEncodedKey = `-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
17M9lCizO9o9dONdHsHfNQi6y9Jcnw==
|
||||
-----END PRIVATE KEY-----`;
|
||||
|
||||
const pemEncodedCrt = `-----BEGIN CERTIFICATE-----
|
||||
MIIEtTCCAp2gAwIBAgIUDyuccmylba71lZQAQic5TJiAhwwwDQYJKoZIhvcNAQEL
|
||||
BQAwGDEWMBQGA1UEAwwNSmV0UHJvZmlsZSBDQTAeFw0yMzA5MjkxNDA2MTJaFw0z
|
||||
MzA5MjcxNDA2MTJaMBExDzANBgNVBAMMBk5vdmljZTCCAiIwDQYJKoZIhvcNAQEB
|
||||
BQADggIPADCCAgoCggIBALenqcGP2ZxGkYqmKA9c4Hzf8+YD1smvmOxKjd+bmTLr
|
||||
utM/hXv1cj1rW3/lqyDtdDk7K6W8/TDq1CRrEt+Do6l30DxhAiC34aH8DmGwgq77
|
||||
xEoLimvH5LpePxflF+tbB1RZtFgFDOIYLdSQaKFH2JDgVKxhLiV3S6jniPhkCtWW
|
||||
rTs+E6vq4N15Bm3NnM5AJILqjtUbOjNfaxVq6RrOoTc0R3Fqqo6yvxo/+JYa2UnH
|
||||
IC+r2dbKuDLMUrtgnydEUdJNX0zH9FtcdELvr48uc9mY038TWUsZUK1pnQbxA2bP
|
||||
yA4qnYJ9IvUgO6LtLXvGFm137YQMS1N41AHDBOrwoNI8UoDX+qI3rM96biFOFvn7
|
||||
Edky7rByzybt3H+zxdojfjvpL1E0NO98BT9zfufHAaAxZtlmDOu5LDJe3CGurnyR
|
||||
MRExbtc+Qjl1mUh6tG4lakAwdsoxry0GdG72yaYyb9it53kaFks/T/s7Z7bRJzVF
|
||||
zQDV1Y4bzUtk43vKm2vztBVlQkBkZY5f2Jbe5Ig3b8swQzBnOT0mrL5SPUhwmQ6I
|
||||
xkEWztj55OEujBMmRr92oESuq9ZYMaeLidKWVR3/++HA8BRZaRGEKtSHZCbFEFdi
|
||||
hDxxJv9Xh6NuT/ewJ6HYp+0NQpFnUnJ72n8wV+tudpam7aKcdzVmz7cNwOhG2Ls7
|
||||
AgMBAAEwDQYJKoZIhvcNAQELBQADggIBAIdeaQfKni7tXtcywC3zJvGzaaj242pS
|
||||
WB1y40HW8jub0uHjTLsBPX27iA/5rb+rNXtUWX/f2K+DU4IgaIiiHhkDrMsw7piv
|
||||
azqwA9h7/uA0A5nepmTYf/HY4W6P2stbeqInNsFRZXS7Jg4Q5LgEtHKo/H8USjtV
|
||||
w9apmE3BCElkXRuelXMsSllpR/JEVv/8NPLmnHSY02q4KMVW2ozXtaAxSYQmZswy
|
||||
P1YnBcnRukoI4igobpcKQXwGoQCIUlec8LbFXYM9V2eNCwgABqd4r67m7QJq31Y/
|
||||
1TJysQdMH+hoPFy9rqNCxSq3ptpuzcYAk6qVf58PrrYH/6bHwiYPAayvvdzNPOhM
|
||||
9OCwomfcazhK3y7HyS8aBLntTQYFf7vYzZxPMDybYTvJM+ClCNnVD7Q9fttIJ6eM
|
||||
XFsXb8YK1uGNjQW8Y4WHk1MCHuD9ZumWu/CtAhBn6tllTQWwNMaPOQvKf1kr1Kt5
|
||||
etrONY+B6O+Oi75SZbDuGz7PIF9nMPy4WB/8XgKdVFtKJ7/zLIPHgY8IKgbx/VTz
|
||||
6uBhYo8wOf3xzzweMnn06UcfV3JGNvtMuV4vlkZNNxXeifsgzHugCvJX0nybhfBh
|
||||
fIqVyfK6t0eKJqrvp54XFEtJGR+lf3pBfTdcOI6QFEPKGZKoQz8Ck+BC/WBDtbjc
|
||||
/uYKczZ8DKZu
|
||||
-----END CERTIFICATE-----`;
|
||||
|
||||
let translations = {
|
||||
"en": {
|
||||
"permanentLicense": "Get Permanent License",
|
||||
"twoYearsLicense": "Get Two Years License",
|
||||
"notMarketPlugin": "This plugin is not a market-paid plugin!",
|
||||
"copiedToClipboard": "License key has been copied to your clipboard."
|
||||
},
|
||||
"zh": {
|
||||
"permanentLicense": "获取永久激活码",
|
||||
"twoYearsLicense": "获取两年激活码",
|
||||
"notMarketPlugin": "该插件不是市场付费插件!",
|
||||
"copiedToClipboard": "激活码已经拷贝到你的剪切板"
|
||||
},
|
||||
"ru": {
|
||||
"permanentLicense": "Получить постоянную лицензию",
|
||||
"twoYearsLicense": "Получить лицензию на два года",
|
||||
"notMarketPlugin": "Этот плагин не является платным на рынке!",
|
||||
"copiedToClipboard": "Лицензионный ключ скопирован в буфер обмена."
|
||||
},
|
||||
"es": {
|
||||
"permanentLicense": "Obtener licencia permanente",
|
||||
"twoYearsLicense": "Obtener licencia por dos años",
|
||||
"notMarketPlugin": "¡Este plugin no es un plugin de pago en el mercado!",
|
||||
"copiedToClipboard": "La clave de licencia se ha copiado al portapapeles."
|
||||
},
|
||||
"fr": {
|
||||
"permanentLicense": "Obtenir une licence permanente",
|
||||
"twoYearsLicense": "Obtenir une licence de deux ans",
|
||||
"notMarketPlugin": "Ce plugin n'est pas un plugin payant du marché!",
|
||||
"copiedToClipboard": "La clé de licence a été copiée dans votre presse-papiers."
|
||||
},
|
||||
"de": {
|
||||
"permanentLicense": "Dauerlizenz erhalten",
|
||||
"twoYearsLicense": "Zwei-Jahres-Lizenz erhalten",
|
||||
"notMarketPlugin": "Dieses Plugin ist kein kostenpflichtiges Markt-Plugin!",
|
||||
"copiedToClipboard": "Der Lizenzschlüssel wurde in Ihre Zwischenablage kopiert."
|
||||
},
|
||||
"pt": {
|
||||
"permanentLicense": "Obter licença permanente",
|
||||
"twoYearsLicense": "Obter licença de dois anos",
|
||||
"notMarketPlugin": "Este plugin não é um plugin pago do mercado!",
|
||||
"copiedToClipboard": "A chave de licença foi copiada para a sua área de transferência."
|
||||
},
|
||||
"ja": {
|
||||
"permanentLicense": "永久ライセンスを取得",
|
||||
"twoYearsLicense": "2年ライセンスを取得",
|
||||
"notMarketPlugin": "このプラグインは市場での有料プラグインではありません!",
|
||||
"copiedToClipboard": "ライセンスキーがクリップボードにコピーされました。"
|
||||
},
|
||||
"ko": {
|
||||
"permanentLicense": "영구 라이선스 받기",
|
||||
"twoYearsLicense": "2년 라이선스 받기",
|
||||
"notMarketPlugin": "이 플러그인은 마켓 유료 플러그인이 아닙니다!",
|
||||
"copiedToClipboard": "라이선스 키가 클립보드에 복사되었습니다."
|
||||
},
|
||||
"it": {
|
||||
"permanentLicense": "Ottieni licenza permanente",
|
||||
"twoYearsLicense": "Ottieni licenza di due anni",
|
||||
"notMarketPlugin": "Questo plugin non è un plugin a pagamento sul mercato!",
|
||||
"copiedToClipboard": "La chiave di licenza è stata copiata negli appunti."
|
||||
},
|
||||
"ar": {
|
||||
"permanentLicense": "الحصول على رخصة دائمة",
|
||||
"twoYearsLicense": "الحصول على رخصة لمدة عامين",
|
||||
"notMarketPlugin": "هذا المكون الإضافي ليس مكونًا مدفوعًا في السوق!",
|
||||
"copiedToClipboard": "تم نسخ مفتاح الترخيص إلى الحافظة الخاصة بك."
|
||||
}
|
||||
};
|
||||
|
||||
function getUserLanguage() {
|
||||
const userLang = navigator.language || navigator.languages[0];
|
||||
const langCode = userLang.split('-')[0];
|
||||
|
||||
if (translations[langCode]) {
|
||||
return langCode;
|
||||
}
|
||||
|
||||
for (let lang in translations) {
|
||||
if (userLang.startsWith(lang)) {
|
||||
return lang;
|
||||
}
|
||||
}
|
||||
|
||||
return 'en';
|
||||
}
|
||||
|
||||
function getTranslatedCulture(key) {
|
||||
const useralang = getUserLanguage();
|
||||
const userTranslations = translations[useralang] || {};
|
||||
return userTranslations[key] || translations['en'][key] || key;
|
||||
}
|
||||
|
||||
function injectStyles() {
|
||||
GM_addStyle(`
|
||||
.jetbra-button {
|
||||
background-color: #04AA6D; border: none; color: white; padding: 8px 24px;
|
||||
text-align: center; text-decoration: none; display: inline-block;
|
||||
border-radius: 16px; box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2), 0 6px 20px 0 rgba(0,0,0,0.19);
|
||||
transition-duration: 0.4s;
|
||||
margin-left:5px
|
||||
}
|
||||
.jetbra-button:hover { background-color: #057e47; color: white; }
|
||||
`);
|
||||
}
|
||||
|
||||
async function findElementWithRetry(cssSelector) {
|
||||
const maxAttempts = 50;
|
||||
for (let attempts = 0; attempts < maxAttempts; attempts++) {
|
||||
const element = document.querySelector(cssSelector);
|
||||
if (element) {
|
||||
return element;
|
||||
}
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
throw new Error(`Element with selector '${cssSelector}' not found after ${maxAttempts} attempts.`);
|
||||
}
|
||||
|
||||
function pem2base64(pem) {
|
||||
return pem.split('\n').reduce((base64, line) => line.includes("--") ? base64 : base64 + line, '');
|
||||
}
|
||||
|
||||
function arrayBufferToBase64(buffer) {
|
||||
return btoa([...new Uint8Array(buffer)].map(b => String.fromCharCode(b)).join(''));
|
||||
}
|
||||
|
||||
function base64ToArrayBuffer(base64) {
|
||||
return Uint8Array.from(atob(base64), c => c.charCodeAt(0)).buffer;
|
||||
}
|
||||
|
||||
function genLicenseId() {
|
||||
const CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
||||
return Array.from({length: 10}, () => {
|
||||
let idx = Math.floor(Math.random() * CHARSET.length);
|
||||
return CHARSET[idx];
|
||||
}).join('');
|
||||
}
|
||||
|
||||
function buildLicensePartJson(productCode, licenseId,twoYears) {
|
||||
let formattedDateTwoYears = '2099-08-01';
|
||||
if (twoYears) {
|
||||
let futureDateTwoYears = new Date();
|
||||
futureDateTwoYears.setFullYear(futureDateTwoYears.getFullYear() + 2);
|
||||
formattedDateTwoYears = futureDateTwoYears.toISOString().split('T')[0];
|
||||
}
|
||||
|
||||
let fallbackDate = formattedDateTwoYears;
|
||||
let paidUpTo = formattedDateTwoYears;
|
||||
|
||||
return JSON.stringify({
|
||||
"licenseId": licenseId,
|
||||
"licenseeName": "reborn",
|
||||
"assigneeName": "reborn",
|
||||
"assigneeEmail": "",
|
||||
"licenseRestriction": "",
|
||||
"checkConcurrentUse": false,
|
||||
"products": [{
|
||||
code: productCode,
|
||||
fallbackDate: fallbackDate,
|
||||
paidUpTo: paidUpTo
|
||||
}],
|
||||
"metadata": "0120230102PPAA013009",
|
||||
"hash": "41472961/0:1563609451",
|
||||
"gracePeriodDays": 7,
|
||||
"autoProlongated": true,
|
||||
"isAutoProlongated": true
|
||||
});
|
||||
}
|
||||
|
||||
async function addButton() {
|
||||
injectStyles();
|
||||
|
||||
let url = window.location.href
|
||||
if (!url.startsWith('https://plugins.jetbrains.com/plugin/')) {
|
||||
return;
|
||||
}
|
||||
|
||||
let pluginId = url.split('/')[4].split('-')[0]
|
||||
console.log('pluginId: ' + pluginId);
|
||||
|
||||
let pluginDetail = await fetch('https://plugins.jetbrains.com/api/plugins/' + pluginId).then(r => r.json());
|
||||
|
||||
const parentElement = await findElementWithRetry('.plugin-header__controls-panel > div:first-child');
|
||||
|
||||
if (parentElement.querySelector('.jetbra-button')) {
|
||||
return;
|
||||
}
|
||||
let newElement = document.createElement('div');
|
||||
newElement.classList.toggle('wt-col-inline');
|
||||
newElement.innerHTML =
|
||||
`<div class="customize-btn" style="display: flex; flex-direction: column;white-space: nowrap;">
|
||||
<div class="generate-plugin-code" style="display: flex;height: 40px;">
|
||||
<button class="jetbra-button" type="button" id="permanentLicense">${getTranslatedCulture('permanentLicense')}</button>
|
||||
<button class="jetbra-button" type="button" id="twoYearsLicense">${getTranslatedCulture('twoYearsLicense')}</button>
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
parentElement.appendChild(newElement)
|
||||
|
||||
newElement.addEventListener('click', async (e) => {
|
||||
let productCode = pluginDetail?.purchaseInfo?.productCode;
|
||||
if (productCode === undefined) {
|
||||
window.alert(`${getTranslatedCulture('notMarketPlugin')}`);
|
||||
return;
|
||||
}
|
||||
let licenseId = genLicenseId()
|
||||
let licensePartJson = buildLicensePartJson(productCode, licenseId,e.target.id === "twoYearsLicense")
|
||||
|
||||
let privateKey = await window.crypto.subtle.importKey("pkcs8", base64ToArrayBuffer(pem2base64(pemEncodedKey)), {
|
||||
name: "RSASSA-PKCS1-v1_5", hash: "SHA-1",
|
||||
}, true, ["sign"]);
|
||||
|
||||
let licensePartBase64 = btoa(unescape(encodeURIComponent(licensePartJson)));
|
||||
let sigResultsBase64 = arrayBufferToBase64(await window.crypto.subtle.sign("RSASSA-PKCS1-v1_5", privateKey, new TextEncoder().encode(licensePartJson)));
|
||||
let cert_base64 = pem2base64(pemEncodedCrt);
|
||||
|
||||
GM_setClipboard(`${licenseId}-${licensePartBase64}-${sigResultsBase64}-${cert_base64}`, 'text');
|
||||
window.alert(`${getTranslatedCulture('copiedToClipboard')}`);
|
||||
})
|
||||
}
|
||||
|
||||
addButton();
|
||||
if (window.onurlchange === null) {
|
||||
window.addEventListener('urlchange', (ignore) => {
|
||||
addButton();
|
||||
});
|
||||
}
|